📄 controls.js
字号:
if (typeof Effect == "undefined") {throw ("controls.js requires including script.aculo.us' effects.js library");}var Autocompleter = {};Autocompleter.Base = function () {};Autocompleter.Base.prototype = {baseInitialize:function (element, update, options) {this.element = $(element);this.update = $(update);this.hasFocus = false;this.changed = false;this.active = false;this.index = 0;this.entryCount = 0;if (this.setOptions) {this.setOptions(options);} else {this.options = options || {};}this.options.paramName = this.options.paramName || this.element.name;this.options.tokens = this.options.tokens || [];this.options.frequency = this.options.frequency || 0.4;this.options.minChars = this.options.minChars || 1;this.options.onShow = this.options.onShow || function (element, update) {if (!update.style.position || update.style.position == "absolute") {update.style.position = "absolute";Position.clone(element, update, {setHeight:false, offsetTop:element.offsetHeight});}Effect.Appear(update, {duration:0.15});};this.options.onHide = this.options.onHide || function (element, update) {new Effect.Fade(update, {duration:0.15});};if (typeof (this.options.tokens) == "string") {this.options.tokens = new Array(this.options.tokens);}this.observer = null;this.element.setAttribute("autocomplete", "off");Element.hide(this.update);Event.observe(this.element, "blur", this.onBlur.bindAsEventListener(this));Event.observe(this.element, "keypress", this.onKeyPress.bindAsEventListener(this));}, show:function () {if (Element.getStyle(this.update, "display") == "none") {this.options.onShow(this.element, this.update);}if (!this.iefix && (navigator.appVersion.indexOf("MSIE") > 0) && (navigator.userAgent.indexOf("Opera") < 0) && (Element.getStyle(this.update, "position") == "absolute")) {new Insertion.After(this.update, "<iframe id=\"" + this.update.id + "_iefix\" " + "style=\"display:none;position:absolute;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);\" " + "src=\"javascript:false;\" frameborder=\"0\" scrolling=\"no\"></iframe>");this.iefix = $(this.update.id + "_iefix");}if (this.iefix) {setTimeout(this.fixIEOverlapping.bind(this), 50);}}, fixIEOverlapping:function () {Position.clone(this.update, this.iefix, {setTop:(!this.update.style.height)});this.iefix.style.zIndex = 1;this.update.style.zIndex = 2;Element.show(this.iefix);}, hide:function () {this.stopIndicator();if (Element.getStyle(this.update, "display") != "none") {this.options.onHide(this.element, this.update);}if (this.iefix) {Element.hide(this.iefix);}}, startIndicator:function () {if (this.options.indicator) {Element.show(this.options.indicator);}}, stopIndicator:function () {if (this.options.indicator) {Element.hide(this.options.indicator);}}, onKeyPress:function (event) {if (this.active) {switch (event.keyCode) {case Event.KEY_TAB:case Event.KEY_RETURN:this.selectEntry();Event.stop(event);case Event.KEY_ESC:this.hide();this.active = false;Event.stop(event);return;case Event.KEY_LEFT:case Event.KEY_RIGHT:return;case Event.KEY_UP:this.markPrevious();this.render();if (navigator.appVersion.indexOf("AppleWebKit") > 0) {Event.stop(event);}return;case Event.KEY_DOWN:this.markNext();this.render();if (navigator.appVersion.indexOf("AppleWebKit") > 0) {Event.stop(event);}return;}} else {if (event.keyCode == Event.KEY_TAB || event.keyCode == Event.KEY_RETURN || (navigator.appVersion.indexOf("AppleWebKit") > 0 && event.keyCode == 0)) {return;}}this.changed = true;this.hasFocus = true;if (this.observer) {clearTimeout(this.observer);}this.observer = setTimeout(this.onObserverEvent.bind(this), this.options.frequency * 1000);}, activate:function () {this.changed = false;this.hasFocus = true;this.getUpdatedChoices();}, onHover:function (event) {var element = Event.findElement(event, "LI");if (this.index != element.autocompleteIndex) {this.index = element.autocompleteIndex;this.render();}Event.stop(event);}, onClick:function (event) {var element = Event.findElement(event, "LI");this.index = element.autocompleteIndex;this.selectEntry();this.hide();}, onBlur:function (event) {setTimeout(this.hide.bind(this), 250);this.hasFocus = false;this.active = false;}, render:function () {if (this.entryCount > 0) {for (var i = 0; i < this.entryCount; i++) {this.index == i ? Element.addClassName(this.getEntry(i), "selected") : Element.removeClassName(this.getEntry(i), "selected");}if (this.hasFocus) {this.show();this.active = true;}} else {this.active = false;this.hide();}}, markPrevious:function () {if (this.index > 0) {this.index--;} else {this.index = this.entryCount - 1;}this.getEntry(this.index).scrollIntoView(true);}, markNext:function () {if (this.index < this.entryCount - 1) {this.index++;} else {this.index = 0;}this.getEntry(this.index).scrollIntoView(false);}, getEntry:function (index) {return this.update.firstChild.childNodes[index];}, getCurrentEntry:function () {return this.getEntry(this.index);}, selectEntry:function () {this.active = false;this.updateElement(this.getCurrentEntry());}, updateElement:function (selectedElement) {if (this.options.updateElement) {this.options.updateElement(selectedElement);return;}var value = "";if (this.options.select) {var nodes = document.getElementsByClassName(this.options.select, selectedElement) || [];if (nodes.length > 0) {value = Element.collectTextNodes(nodes[0], this.options.select);}} else {value = Element.collectTextNodesIgnoreClass(selectedElement, "informal");}var lastTokenPos = this.findLastToken();if (lastTokenPos != -1) {var newValue = this.element.value.substr(0, lastTokenPos + 1);var whitespace = this.element.value.substr(lastTokenPos + 1).match(/^\s+/);if (whitespace) {newValue += whitespace[0];}this.element.value = newValue + value;} else {this.element.value = value;}this.element.focus();if (this.options.afterUpdateElement) {this.options.afterUpdateElement(this.element, selectedElement);}}, updateChoices:function (choices) {if (!this.changed && this.hasFocus) {this.update.innerHTML = choices;Element.cleanWhitespace(this.update);Element.cleanWhitespace(this.update.firstChild);if (this.update.firstChild && this.update.firstChild.childNodes) {this.entryCount = this.update.firstChild.childNodes.length;for (var i = 0; i < this.entryCount; i++) {var entry = this.getEntry(i);entry.autocompleteIndex = i;this.addObservers(entry);}} else {this.entryCount = 0;}this.stopIndicator();this.index = 0;this.render();}}, addObservers:function (element) {Event.observe(element, "mouseover", this.onHover.bindAsEventListener(this));Event.observe(element, "click", this.onClick.bindAsEventListener(this));}, onObserverEvent:function () {this.changed = false;if (this.getToken().length >= this.options.minChars) {this.startIndicator();this.getUpdatedChoices();} else {this.active = false;this.hide();}}, getToken:function () {var tokenPos = this.findLastToken();if (tokenPos != -1) {var ret = this.element.value.substr(tokenPos + 1).replace(/^\s+/, "").replace(/\s+$/, "");} else {var ret = this.element.value;}return /\n/.test(ret) ? "" : ret;}, findLastToken:function () {var lastTokenPos = -1;for (var i = 0; i < this.options.tokens.length; i++) {var thisTokenPos = this.element.value.lastIndexOf(this.options.tokens[i]);if (thisTokenPos > lastTokenPos) {lastTokenPos = thisTokenPos;}}return lastTokenPos;}};Ajax.Autocompleter = Class.create();Object.extend(Object.extend(Ajax.Autocompleter.prototype, Autocompleter.Base.prototype), {initialize:function (element, update, url, options) {this.baseInitialize(element, update, options);this.options.asynchronous = true;this.options.onComplete = this.onComplete.bind(this);this.options.defaultParams = this.options.parameters || null;this.url = url;}, getUpdatedChoices:function () {entry = encodeURIComponent(this.options.paramName) + "=" + encodeURIComponent(this.getToken());this.options.parameters = this.options.callback ? this.options.callback(this.element, entry) : entry;if (this.options.defaultParams) {this.options.parameters += "&" + this.options.defaultParams;}new Ajax.Request(this.url, this.options);}, onComplete:function (request) {this.updateChoices(request.responseText);}});Autocompleter.Local = Class.create();Autocompleter.Local.prototype = Object.extend(new Autocompleter.Base(), {initialize:function (element, update, array, options) {this.baseInitialize(element, update, options);this.options.array = array;}, getUpdatedChoices:function () {this.updateChoices(this.options.selector(this));}, setOptions:function (options) {this.options = Object.extend({choices:10, partialSearch:true, partialChars:2, ignoreCase:true, fullSearch:false, selector:function (instance) {var ret = [];var partial = [];var entry = instance.getToken();var count = 0;for (var i = 0; i < instance.options.array.length && ret.length < instance.options.choices; i++) {var elem = instance.options.array[i];var foundPos = instance.options.ignoreCase ? elem.toLowerCase().indexOf(entry.toLowerCase()) : elem.indexOf(entry);while (foundPos != -1) {if (foundPos == 0 && elem.length != entry.length) {ret.push("<li><strong>" + elem.substr(0, entry.length) + "</strong>" + elem.substr(entry.length) + "</li>");break;} else {if (entry.length >= instance.options.partialChars && instance.options.partialSearch && foundPos != -1) {if (instance.options.fullSearch || /\s/.test(elem.substr(foundPos - 1, 1))) {partial.push("<li>" + elem.substr(0, foundPos) + "<strong>" + elem.substr(foundPos, entry.length) + "</strong>" + elem.substr(foundPos + entry.length) + "</li>");break;}}}foundPos = instance.options.ignoreCase ? elem.toLowerCase().indexOf(entry.toLowerCase(), foundPos + 1) : elem.indexOf(entry, foundPos + 1);}}if (partial.length) {ret = ret.concat(partial.slice(0, instance.options.choices - ret.length));}return "<ul>" + ret.join("") + "</ul>";}}, options || {});}});Field.scrollFreeActivate = function (field) {setTimeout(function () {Field.activate(field);}, 1);};Ajax.InPlaceEditor = Class.create();Ajax.InPlaceEditor.defaultHighlightColor = "#FFFF99";Ajax.InPlaceEditor.prototype = {initialize:function (element, url, options) {this.url = url;this.element = $(element);this.options = Object.extend({okButton:true, okText:"ok", cancelLink:true, cancelText:"cancel", savingText:"Saving...", clickToEditText:"Click to edit", okText:"ok", rows:1, onComplete:function (transport, element) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -