|
Struts example source code file (Selection.js)
The Struts Selection.js source code/* Copyright (c) 2004-2006, The Dojo Foundation All Rights Reserved. Licensed under the Academic Free License version 2.1 or above OR the modified BSD license. For more information on Dojo licensing, see: http://dojotoolkit.org/community/licensing.shtml */ dojo.provide("dojo.selection.Selection"); dojo.require("dojo.lang.array"); dojo.require("dojo.lang.func"); dojo.require("dojo.lang.common"); dojo.require("dojo.math"); dojo.declare("dojo.selection.Selection", null, {initializer:function (items, isCollection) { this.items = []; this.selection = []; this._pivotItems = []; this.clearItems(); if (items) { if (isCollection) { this.setItemsCollection(items); } else { this.setItems(items); } } }, items:null, selection:null, lastSelected:null, allowImplicit:true, length:0, isGrowable:true, _pivotItems:null, _pivotItem:null, onSelect:function (item) { }, onDeselect:function (item) { }, onSelectChange:function (item, selected) { }, _find:function (item, inSelection) { if (inSelection) { return dojo.lang.find(this.selection, item); } else { return dojo.lang.find(this.items, item); } }, isSelectable:function (item) { return true; }, setItems:function () { this.clearItems(); this.addItems.call(this, arguments); }, setItemsCollection:function (collection) { this.items = collection; }, addItems:function () { var args = dojo.lang.unnest(arguments); for (var i = 0; i < args.length; i++) { this.items.push(args[i]); } }, addItemsAt:function (item, before) { if (this.items.length == 0) { return this.addItems(dojo.lang.toArray(arguments, 2)); } if (!this.isItem(item)) { item = this.items[item]; } if (!item) { throw new Error("addItemsAt: item doesn't exist"); } var idx = this._find(item); if (idx > 0 && before) { idx--; } for (var i = 2; i < arguments.length; i++) { if (!this.isItem(arguments[i])) { this.items.splice(idx++, 0, arguments[i]); } } }, removeItem:function (item) { var idx = this._find(item); if (idx > -1) { this.items.splice(idx, 1); } idx = this._find(item, true); if (idx > -1) { this.selection.splice(idx, 1); } }, clearItems:function () { this.items = []; this.deselectAll(); }, isItem:function (item) { return this._find(item) > -1; }, isSelected:function (item) { return this._find(item, true) > -1; }, selectFilter:function (item, selection, add, grow) { return true; }, update:function (item, add, grow, noToggle) { if (!this.isItem(item)) { return false; } if (this.isGrowable && grow) { if ((!this.isSelected(item)) && this.selectFilter(item, this.selection, false, true)) { this.grow(item); this.lastSelected = item; } } else { if (add) { if (this.selectFilter(item, this.selection, true, false)) { if (noToggle) { if (this.select(item)) { this.lastSelected = item; } } else { if (this.toggleSelected(item)) { this.lastSelected = item; } } } } else { this.deselectAll(); this.select(item); } } this.length = this.selection.length; return true; }, grow:function (toItem, fromItem) { if (!this.isGrowable) { return; } if (arguments.length == 1) { fromItem = this._pivotItem; if (!fromItem && this.allowImplicit) { fromItem = this.items[0]; } } if (!toItem || !fromItem) { return false; } var fromIdx = this._find(fromItem); var toDeselect = {}; var lastIdx = -1; if (this.lastSelected) { lastIdx = this._find(this.lastSelected); var step = fromIdx < lastIdx ? -1 : 1; var range = dojo.math.range(lastIdx, fromIdx, step); for (var i = 0; i < range.length; i++) { toDeselect[range[i]] = true; } } var toIdx = this._find(toItem); var step = fromIdx < toIdx ? -1 : 1; var shrink = lastIdx >= 0 && step == 1 ? lastIdx < toIdx : lastIdx > toIdx; var range = dojo.math.range(toIdx, fromIdx, step); if (range.length) { for (var i = range.length - 1; i >= 0; i--) { var item = this.items[range[i]]; if (this.selectFilter(item, this.selection, false, true)) { if (this.select(item, true) || shrink) { this.lastSelected = item; } if (range[i] in toDeselect) { delete toDeselect[range[i]]; } } } } else { this.lastSelected = fromItem; } for (var i in toDeselect) { if (this.items[i] == this.lastSelected) { } this.deselect(this.items[i]); } this._updatePivot(); }, growUp:function () { if (!this.isGrowable) { return; } var idx = this._find(this.lastSelected) - 1; while (idx >= 0) { if (this.selectFilter(this.items[idx], this.selection, false, true)) { this.grow(this.items[idx]); break; } idx--; } }, growDown:function () { if (!this.isGrowable) { return; } var idx = this._find(this.lastSelected); if (idx < 0 && this.allowImplicit) { this.select(this.items[0]); idx = 0; } idx++; while (idx > 0 && idx < this.items.length) { if (this.selectFilter(this.items[idx], this.selection, false, true)) { this.grow(this.items[idx]); break; } idx++; } }, toggleSelected:function (item, noPivot) { if (this.isItem(item)) { if (this.select(item, noPivot)) { return 1; } if (this.deselect(item)) { return -1; } } return 0; }, select:function (item, noPivot) { if (this.isItem(item) && !this.isSelected(item) && this.isSelectable(item)) { this.selection.push(item); this.lastSelected = item; this.onSelect(item); this.onSelectChange(item, true); if (!noPivot) { this._addPivot(item); } this.length = this.selection.length; return true; } return false; }, deselect:function (item) { var idx = this._find(item, true); if (idx > -1) { this.selection.splice(idx, 1); this.onDeselect(item); this.onSelectChange(item, false); if (item == this.lastSelected) { this.lastSelected = null; } this._removePivot(item); this.length = this.selection.length; return true; } return false; }, selectAll:function () { for (var i = 0; i < this.items.length; i++) { this.select(this.items[i]); } }, deselectAll:function () { while (this.selection && this.selection.length) { this.deselect(this.selection[0]); } }, selectNext:function () { var idx = this._find(this.lastSelected); while (idx > -1 && ++idx < this.items.length) { if (this.isSelectable(this.items[idx])) { this.deselectAll(); this.select(this.items[idx]); return true; } } return false; }, selectPrevious:function () { var idx = this._find(this.lastSelected); while (idx-- > 0) { if (this.isSelectable(this.items[idx])) { this.deselectAll(); this.select(this.items[idx]); return true; } } return false; }, selectFirst:function () { this.deselectAll(); var idx = 0; while (this.items[idx] && !this.select(this.items[idx])) { idx++; } return this.items[idx] ? true : false; }, selectLast:function () { this.deselectAll(); var idx = this.items.length - 1; while (this.items[idx] && !this.select(this.items[idx])) { idx--; } return this.items[idx] ? true : false; }, _addPivot:function (item, andClear) { this._pivotItem = item; if (andClear) { this._pivotItems = [item]; } else { this._pivotItems.push(item); } }, _removePivot:function (item) { var i = dojo.lang.find(this._pivotItems, item); if (i > -1) { this._pivotItems.splice(i, 1); this._pivotItem = this._pivotItems[this._pivotItems.length - 1]; } this._updatePivot(); }, _updatePivot:function () { if (this._pivotItems.length == 0) { if (this.lastSelected) { this._addPivot(this.lastSelected); } } }, sorted:function () { return dojo.lang.toArray(this.selection).sort(dojo.lang.hitch(this, function (a, b) { var A = this._find(a), B = this._find(b); if (A > B) { return 1; } else { if (A < B) { return -1; } else { return 0; } } })); }, updateSelected:function () { for (var i = 0; i < this.selection.length; i++) { if (this._find(this.selection[i]) < 0) { var removed = this.selection.splice(i, 1); this._removePivot(removed[0]); } } this.length = this.selection.length; }}); Other Struts examples (source code examples)Here is a short list of links related to this Struts Selection.js source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.