⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 selection.js

📁 初学者
💻 JS
字号:
/*	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;}});

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -