224 lines
7.2 KiB
JavaScript
224 lines
7.2 KiB
JavaScript
(function(jsGrid, $, undefined) {
|
|
|
|
var Field = jsGrid.Field;
|
|
|
|
function ControlField(config) {
|
|
Field.call(this, config);
|
|
this._configInitialized = false;
|
|
}
|
|
|
|
ControlField.prototype = new Field({
|
|
css: "jsgrid-control-field",
|
|
align: "center",
|
|
width: 50,
|
|
filtering: false,
|
|
inserting: false,
|
|
editing: false,
|
|
sorting: false,
|
|
|
|
buttonClass: "jsgrid-button",
|
|
modeButtonClass: "jsgrid-mode-button",
|
|
|
|
modeOnButtonClass: "jsgrid-mode-on-button",
|
|
searchModeButtonClass: "jsgrid-search-mode-button ti-search",
|
|
insertModeButtonClass: "jsgrid-insert-mode-button ti-plus",
|
|
editButtonClass: "jsgrid-edit-button ti-pencil",
|
|
deleteButtonClass: "jsgrid-delete-button ti-trash",
|
|
searchButtonClass: "jsgrid-search-button ti-search",
|
|
clearFilterButtonClass: "jsgrid-clear-filter-button",
|
|
insertButtonClass: "jsgrid-insert-button",
|
|
updateButtonClass: "jsgrid-update-button ti-check",
|
|
cancelEditButtonClass: "jsgrid-cancel-edit-button ti-close",
|
|
|
|
searchModeButtonTooltip: "Switch to searching",
|
|
insertModeButtonTooltip: "Switch to inserting",
|
|
editButtonTooltip: "Edit",
|
|
deleteButtonTooltip: "Delete",
|
|
searchButtonTooltip: "Search",
|
|
clearFilterButtonTooltip: "Clear filter",
|
|
insertButtonTooltip: "Insert",
|
|
updateButtonTooltip: "Update",
|
|
cancelEditButtonTooltip: "Cancel edit",
|
|
|
|
editButton: true,
|
|
deleteButton: true,
|
|
clearFilterButton: true,
|
|
modeSwitchButton: true,
|
|
|
|
_initConfig: function() {
|
|
this._hasFiltering = this._grid.filtering;
|
|
this._hasInserting = this._grid.inserting;
|
|
|
|
if(this._hasInserting && this.modeSwitchButton) {
|
|
this._grid.inserting = false;
|
|
}
|
|
|
|
this._configInitialized = true;
|
|
},
|
|
|
|
headerTemplate: function() {
|
|
if(!this._configInitialized) {
|
|
this._initConfig();
|
|
}
|
|
|
|
var hasFiltering = this._hasFiltering;
|
|
var hasInserting = this._hasInserting;
|
|
|
|
if(!this.modeSwitchButton || (!hasFiltering && !hasInserting))
|
|
return "";
|
|
|
|
if(hasFiltering && !hasInserting)
|
|
return this._createFilterSwitchButton();
|
|
|
|
if(hasInserting && !hasFiltering)
|
|
return this._createInsertSwitchButton();
|
|
|
|
return this._createModeSwitchButton();
|
|
},
|
|
|
|
itemTemplate: function(value, item) {
|
|
var $result = $([]);
|
|
|
|
if(this.editButton) {
|
|
$result = $result.add(this._createEditButton(item));
|
|
}
|
|
|
|
if(this.deleteButton) {
|
|
$result = $result.add(this._createDeleteButton(item));
|
|
}
|
|
|
|
return $result;
|
|
},
|
|
|
|
filterTemplate: function() {
|
|
var $result = this._createSearchButton();
|
|
return this.clearFilterButton ? $result.add(this._createClearFilterButton()) : $result;
|
|
},
|
|
|
|
insertTemplate: function() {
|
|
return this._createInsertButton();
|
|
},
|
|
|
|
editTemplate: function() {
|
|
return this._createUpdateButton().add(this._createCancelEditButton());
|
|
},
|
|
|
|
_createFilterSwitchButton: function() {
|
|
return this._createOnOffSwitchButton("filtering", this.searchModeButtonClass, true);
|
|
},
|
|
|
|
_createInsertSwitchButton: function() {
|
|
return this._createOnOffSwitchButton("inserting", this.insertModeButtonClass, false);
|
|
},
|
|
|
|
_createOnOffSwitchButton: function(option, cssClass, isOnInitially) {
|
|
var isOn = isOnInitially;
|
|
|
|
var updateButtonState = $.proxy(function() {
|
|
$button.toggleClass(this.modeOnButtonClass, isOn);
|
|
}, this);
|
|
|
|
var $button = this._createGridButton(this.modeButtonClass + " " + cssClass, "", function(grid) {
|
|
isOn = !isOn;
|
|
grid.option(option, isOn);
|
|
updateButtonState();
|
|
});
|
|
|
|
updateButtonState();
|
|
|
|
return $button;
|
|
},
|
|
|
|
_createModeSwitchButton: function() {
|
|
var isInserting = false;
|
|
|
|
var updateButtonState = $.proxy(function() {
|
|
$button.attr("title", isInserting ? this.searchModeButtonTooltip : this.insertModeButtonTooltip)
|
|
.toggleClass(this.insertModeButtonClass, !isInserting)
|
|
.toggleClass(this.searchModeButtonClass, isInserting);
|
|
}, this);
|
|
|
|
var $button = this._createGridButton(this.modeButtonClass, "", function(grid) {
|
|
isInserting = !isInserting;
|
|
grid.option("inserting", isInserting);
|
|
grid.option("filtering", !isInserting);
|
|
updateButtonState();
|
|
});
|
|
|
|
updateButtonState();
|
|
|
|
return $button;
|
|
},
|
|
|
|
_createEditButton: function(item) {
|
|
return this._createGridButton(this.editButtonClass, this.editButtonTooltip, function(grid, e) {
|
|
grid.editItem(item);
|
|
e.stopPropagation();
|
|
});
|
|
},
|
|
|
|
_createDeleteButton: function(item) {
|
|
return this._createGridButton(this.deleteButtonClass, this.deleteButtonTooltip, function(grid, e) {
|
|
grid.deleteItem(item);
|
|
e.stopPropagation();
|
|
});
|
|
},
|
|
|
|
_createSearchButton: function() {
|
|
return this._createGridButton(this.searchButtonClass, this.searchButtonTooltip, function(grid) {
|
|
grid.search();
|
|
});
|
|
},
|
|
|
|
_createClearFilterButton: function() {
|
|
return this._createGridButton(this.clearFilterButtonClass, this.clearFilterButtonTooltip, function(grid) {
|
|
grid.clearFilter();
|
|
});
|
|
},
|
|
|
|
_createInsertButton: function() {
|
|
return this._createGridButton(this.insertButtonClass, this.insertButtonTooltip, function(grid) {
|
|
grid.insertItem().done(function() {
|
|
grid.clearInsert();
|
|
});
|
|
});
|
|
},
|
|
|
|
_createUpdateButton: function() {
|
|
return this._createGridButton(this.updateButtonClass, this.updateButtonTooltip, function(grid, e) {
|
|
grid.updateItem();
|
|
e.stopPropagation();
|
|
});
|
|
},
|
|
|
|
_createCancelEditButton: function() {
|
|
return this._createGridButton(this.cancelEditButtonClass, this.cancelEditButtonTooltip, function(grid, e) {
|
|
grid.cancelEdit();
|
|
e.stopPropagation();
|
|
});
|
|
},
|
|
|
|
_createGridButton: function(cls, tooltip, clickHandler) {
|
|
var grid = this._grid;
|
|
|
|
return $("<span>").addClass(this.buttonClass)
|
|
.addClass(cls)
|
|
.attr({
|
|
type: "button",
|
|
title: tooltip
|
|
})
|
|
.on("click", function(e) {
|
|
clickHandler(grid, e);
|
|
});
|
|
},
|
|
|
|
editValue: function() {
|
|
return "";
|
|
}
|
|
|
|
});
|
|
|
|
jsGrid.fields.control = jsGrid.ControlField = ControlField;
|
|
|
|
}(jsGrid, jQuery));
|