| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223 |
- (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",
- insertModeButtonClass: "jsgrid-insert-mode-button",
- editButtonClass: "jsgrid-edit-button",
- deleteButtonClass: "jsgrid-delete-button",
- searchButtonClass: "jsgrid-search-button",
- clearFilterButtonClass: "jsgrid-clear-filter-button",
- insertButtonClass: "jsgrid-insert-button",
- updateButtonClass: "jsgrid-update-button",
- cancelEditButtonClass: "jsgrid-cancel-edit-button",
- 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 $("<input>").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));
|