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

📄 more.js

📁 嵌入式无线路由系统openwrt的web配置工具
💻 JS
字号:
//MooTools More, <http://mootools.net/more>. Copyright (c) 2006-2008 Valerio Proietti, <http://mad4milk.net>, MIT Style License./*Script: Fx.Slide.js	Effect to slide an element in and out of view.License:	MIT-style license.*//*Script: Drag.js	The base Drag Class. Can be used to drag and resize Elements using mouse events.License:	MIT-style license.*/var Drag = new Class({	Implements: [Events, Options],	options: {/*		onBeforeStart: $empty,		onStart: $empty,		onDrag: $empty,		onCancel: $empty,		onComplete: $empty,*/		snap: 6,		unit: 'px',		grid: false,		style: true,		limit: false,		handle: false,		invert: false,		preventDefault: false,		modifiers: {x: 'left', y: 'top'}	},	initialize: function(){		var params = Array.link(arguments, {'options': Object.type, 'element': $defined});		this.element = $(params.element);		this.document = this.element.getDocument();		this.setOptions(params.options || {});		var htype = $type(this.options.handle);		this.handles = (htype == 'array' || htype == 'collection') ? $$(this.options.handle) : $(this.options.handle) || this.element;		this.mouse = {'now': {}, 'pos': {}};		this.value = {'start': {}, 'now': {}};				this.selection = (Browser.Engine.trident) ? 'selectstart' : 'mousedown';				this.bound = {			start: this.start.bind(this),			check: this.check.bind(this),			drag: this.drag.bind(this),			stop: this.stop.bind(this),			cancel: this.cancel.bind(this),			eventStop: $lambda(false)		};		this.attach();	},	attach: function(){		this.handles.addEvent('mousedown', this.bound.start);		return this;	},	detach: function(){		this.handles.removeEvent('mousedown', this.bound.start);		return this;	},	start: function(event){		if (this.options.preventDefault) event.preventDefault();		this.fireEvent('beforeStart', this.element);		this.mouse.start = event.page;		var limit = this.options.limit;		this.limit = {'x': [], 'y': []};		for (var z in this.options.modifiers){			if (!this.options.modifiers[z]) continue;			if (this.options.style) this.value.now[z] = this.element.getStyle(this.options.modifiers[z]).toInt();			else this.value.now[z] = this.element[this.options.modifiers[z]];			if (this.options.invert) this.value.now[z] *= -1;			this.mouse.pos[z] = event.page[z] - this.value.now[z];			if (limit && limit[z]){				for (var i = 2; i--; i){					if ($chk(limit[z][i])) this.limit[z][i] = $lambda(limit[z][i])();				}			}		}		if ($type(this.options.grid) == 'number') this.options.grid = {'x': this.options.grid, 'y': this.options.grid};		this.document.addEvents({mousemove: this.bound.check, mouseup: this.bound.cancel});		this.document.addEvent(this.selection, this.bound.eventStop);	},	check: function(event){		if (this.options.preventDefault) event.preventDefault();		var distance = Math.round(Math.sqrt(Math.pow(event.page.x - this.mouse.start.x, 2) + Math.pow(event.page.y - this.mouse.start.y, 2)));		if (distance > this.options.snap){			this.cancel();			this.document.addEvents({				mousemove: this.bound.drag,				mouseup: this.bound.stop			});			this.fireEvent('start', this.element).fireEvent('snap', this.element);		}	},	drag: function(event){		if (this.options.preventDefault) event.preventDefault();		this.mouse.now = event.page;		for (var z in this.options.modifiers){			if (!this.options.modifiers[z]) continue;			this.value.now[z] = this.mouse.now[z] - this.mouse.pos[z];			if (this.options.invert) this.value.now[z] *= -1;			if (this.options.limit && this.limit[z]){				if ($chk(this.limit[z][1]) && (this.value.now[z] > this.limit[z][1])){					this.value.now[z] = this.limit[z][1];				} else if ($chk(this.limit[z][0]) && (this.value.now[z] < this.limit[z][0])){					this.value.now[z] = this.limit[z][0];				}			}			if (this.options.grid[z]) this.value.now[z] -= (this.value.now[z] % this.options.grid[z]);			if (this.options.style) this.element.setStyle(this.options.modifiers[z], this.value.now[z] + this.options.unit);			else this.element[this.options.modifiers[z]] = this.value.now[z];		}		this.fireEvent('drag', this.element);	},	cancel: function(event){		this.document.removeEvent('mousemove', this.bound.check);		this.document.removeEvent('mouseup', this.bound.cancel);		if (event){			this.document.removeEvent(this.selection, this.bound.eventStop);			this.fireEvent('cancel', this.element);		}	},	stop: function(event){		this.document.removeEvent(this.selection, this.bound.eventStop);		this.document.removeEvent('mousemove', this.bound.drag);		this.document.removeEvent('mouseup', this.bound.stop);		if (event) this.fireEvent('complete', this.element);	}});Element.implement({		makeResizable: function(options){		return new Drag(this, $merge({modifiers: {'x': 'width', 'y': 'height'}}, options));	}});/*Script: Drag.Move.js	A Drag extension that provides support for the constraining of draggables to containers and droppables.License:	MIT-style license.*/Drag.Move = new Class({	Extends: Drag,	options: {		droppables: [],		container: false	},	initialize: function(element, options){		this.parent(element, options);		this.droppables = $$(this.options.droppables);		this.container = $(this.options.container);		if (this.container && $type(this.container) != 'element') this.container = $(this.container.getDocument().body);		element = this.element;				var current = element.getStyle('position');		var position = (current != 'static') ? current : 'absolute';		if (element.getStyle('left') == 'auto' || element.getStyle('top') == 'auto') element.position(element.getPosition(element.offsetParent));				element.setStyle('position', position);				this.addEvent('start', function(){			this.checkDroppables();		}, true);	},	start: function(event){		if (this.container){			var el = this.element, cont = this.container, ccoo = cont.getCoordinates(el.offsetParent), cps = {}, ems = {};			['top', 'right', 'bottom', 'left'].each(function(pad){				cps[pad] = cont.getStyle('padding-' + pad).toInt();				ems[pad] = el.getStyle('margin-' + pad).toInt();			}, this);			var width = el.offsetWidth + ems.left + ems.right, height = el.offsetHeight + ems.top + ems.bottom;			var x = [ccoo.left + cps.left, ccoo.right - cps.right - width];			var y = [ccoo.top + cps.top, ccoo.bottom - cps.bottom - height];			this.options.limit = {x: x, y: y};		}		this.parent(event);	},	checkAgainst: function(el){		el = el.getCoordinates();		var now = this.mouse.now;		return (now.x > el.left && now.x < el.right && now.y < el.bottom && now.y > el.top);	},	checkDroppables: function(){		var overed = this.droppables.filter(this.checkAgainst, this).getLast();		if (this.overed != overed){			if (this.overed) this.fireEvent('leave', [this.element, this.overed]);			if (overed){				this.overed = overed;				this.fireEvent('enter', [this.element, overed]);			} else {				this.overed = null;			}		}	},	drag: function(event){		this.parent(event);		if (this.droppables.length) this.checkDroppables();	},	stop: function(event){		this.checkDroppables();		this.fireEvent('drop', [this.element, this.overed]);		this.overed = null;		return this.parent(event);	}});Element.implement({	makeDraggable: function(options){		return new Drag.Move(this, options);	}});/*Script: Sortables.js	Class for creating a drag and drop sorting interface for lists of items.License:	MIT-style license.*/var Sortables = new Class({	Implements: [Events, Options],	options: {/*		onSort: $empty,		onStart: $empty,		onComplete: $empty,*/		snap: 4,		opacity: 1,		clone: false,		revert: false,		handle: false,		constrain: false	},	initialize: function(lists, options){		this.setOptions(options);		this.elements = [];		this.lists = [];		this.idle = true;				this.addLists($$($(lists) || lists));		if (!this.options.clone) this.options.revert = false;		if (this.options.revert) this.effect = new Fx.Morph(null, $merge({duration: 250, link: 'cancel'}, this.options.revert));	},	attach: function(){		this.addLists(this.lists);		return this;	},	detach: function(){		this.lists = this.removeLists(this.lists);		return this;	},	addItems: function(){		Array.flatten(arguments).each(function(element){			this.elements.push(element);			var start = element.retrieve('sortables:start', this.start.bindWithEvent(this, element));			(this.options.handle ? element.getElement(this.options.handle) || element : element).addEvent('mousedown', start);		}, this);		return this;	},	addLists: function(){		Array.flatten(arguments).each(function(list){			this.lists.push(list);			this.addItems(list.getChildren());		}, this);		return this;	},	removeItems: function(){		var elements = [];		Array.flatten(arguments).each(function(element){			elements.push(element);			this.elements.erase(element);			var start = element.retrieve('sortables:start');			(this.options.handle ? element.getElement(this.options.handle) || element : element).removeEvent('mousedown', start);		}, this);		return $$(elements);	},	removeLists: function(){		var lists = [];		Array.flatten(arguments).each(function(list){			lists.push(list);			this.lists.erase(list);			this.removeItems(list.getChildren());		}, this);		return $$(lists);	},	getClone: function(event, element){		if (!this.options.clone) return new Element('div').inject(document.body);		if ($type(this.options.clone) == 'function') return this.options.clone.call(this, event, element, this.list);		return element.clone(true).setStyles({			'margin': '0px',			'position': 'absolute',			'visibility': 'hidden',			'width': element.getStyle('width')		}).inject(this.list).position(element.getPosition(element.getOffsetParent()));	},	getDroppables: function(){		var droppables = this.list.getChildren();		if (!this.options.constrain) droppables = this.lists.concat(droppables).erase(this.list);		return droppables.erase(this.clone).erase(this.element);	},	insert: function(dragging, element){		var where = 'inside';		if (this.lists.contains(element)){			this.list = element;			this.drag.droppables = this.getDroppables();		} else {			where = this.element.getAllPrevious().contains(element) ? 'before' : 'after';		}		this.element.inject(element, where);		this.fireEvent('sort', [this.element, this.clone]);	},	start: function(event, element){		if (!this.idle) return;		this.idle = false;		this.element = element;		this.opacity = element.get('opacity');		this.list = element.getParent();		this.clone = this.getClone(event, element);				this.drag = new Drag.Move(this.clone, {			snap: this.options.snap,			container: this.options.constrain && this.element.getParent(),			droppables: this.getDroppables(),			onSnap: function(){				event.stop();				this.clone.setStyle('visibility', 'visible');				this.element.set('opacity', this.options.opacity || 0);				this.fireEvent('start', [this.element, this.clone]);			}.bind(this),			onEnter: this.insert.bind(this),			onCancel: this.reset.bind(this),			onComplete: this.end.bind(this)		});				this.clone.inject(this.element, 'before');		this.drag.start(event);	},	end: function(){		this.drag.detach();		this.element.set('opacity', this.opacity);		if (this.effect){			var dim = this.element.getStyles('width', 'height');			var pos = this.clone.computePosition(this.element.getPosition(this.clone.offsetParent));			this.effect.element = this.clone;			this.effect.start({				top: pos.top,				left: pos.left,				width: dim.width,				height: dim.height,				opacity: 0.25			}).chain(this.reset.bind(this));		} else {			this.reset();		}	},	reset: function(){		this.idle = true;		this.clone.destroy();		this.fireEvent('complete', this.element);	},	serialize: function(){		var params = Array.link(arguments, {modifier: Function.type, index: $defined});		var serial = this.lists.map(function(list){			return list.getChildren().map(params.modifier || function(element){				return element.get('id');			}, this);		}, this);				var index = params.index;		if (this.lists.length == 1) index = 0;		return $chk(index) && index >= 0 && index < this.lists.length ? serial[index] : serial;	}});

⌨️ 快捷键说明

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