📄 ajaxtags.js
字号:
}, getUpdatedChoices: function() { if (isFunction(this.options.preFunction)){ this.options.preFunction();} // preFunction can cancelExecution set this.cancelExecution = true; if (this.options.cancelExecution) { this.cancelExecution = false; this.stopIndicator(); return ; } entry = encodeURIComponent(this.options.paramName) + '=' + encodeURIComponent(this.getToken()); this.options.parameters = this.options.callback ? this.options.callback(this.element, entry) : entry; // parse parameters and do replacements var params = buildParameterString(this.options.defaultParams); if (!isEmpty(params) || (isString(params) && params.length > 0)) { this.options.parameters += '&' + params; } new Ajax.Request(this.url, this.options); }, onComplete: function(request) { var parser = this.options.parser; parser.load(request); this.updateChoices(parser.content); } });AjaxJspTag.Autocomplete = Class.create();AjaxJspTag.Autocomplete.prototype = Object.extend(new AjaxJspTag.Base(), { initialize: function(url, options) { this.url = url; this.setOptions(options); // create DIV new Insertion.After(this.options.source, '<div id="' + this.options.divElement + '" class="' + this.options.className + '"></div>'); this.execute(); }, setOptions: function(options) { this.options = Object.extend({ divElement: "ajaxAuto_" + options.source, indicator: options.indicator || '', parameters: options.parameters || '', parser: options.parser ? options.parser : new ResponseXmlToHtmlListParser(), handler: options.handler ? options.handler : this.handler }, options || {}); }, execute: function(e) { // preFunction moved bevor request now var obj = this; // required because 'this' conflict with Ajax.Request var aj = new Ajax.XmlToHtmlAutocompleter( this.options.source, this.options.divElement, this.url, {minChars: obj.options.minimumCharacters, tokens: obj.options.appendSeparator, indicator: obj.options.indicator, parameters: obj.options.parameters, evalScripts: true, preFunction: obj.options.preFunction, parser: obj.options.parser, afterUpdateElement: function(inputField, selectedItem) { obj.options.handler(null, { selectedItem: selectedItem, tokens: obj.options.appendSeparator, target: obj.options.target, inputField: inputField, postFunction: obj.options.postFunction, list:obj.options.parser.getArray(), options: obj.options, autocomplete:aj } ); } } ); }, handler: function(request, options) { if (options.target) { if (options.tokens) { if ($(options.target).value.length > 0) { $(options.target).value += options.tokens; } $(options.target).value += options.selectedItem.id; } else { $(options.target).value = options.selectedItem.id; } } options.selectedIndex = options.autocomplete.index; options.selectedObject = options.list[options.autocomplete.index]; if (isFunction(options.postFunction)) { //Disable onupdate event handler of input field //because, postFunction can change the content of //input field and get into eternal loop. var onupdateHandler = $(options.inputField).onupdate; $(options.inputField).onupdate = ''; options.postFunction(); //Enable onupdate event handler of input field $(options.inputField).onupdate = onupdateHandler; } }});/** * TOGGLE TAG */AjaxJspTag.Toggle = Class.create();AjaxJspTag.Toggle.prototype = Object.extend(new AjaxJspTag.Base(), { initialize: function(url, options) { this.url = url; this.setOptions(options); // create message DIV if (this.options.messageClass) { this.messageContainer = new Insertion.Top($(this.options.source), '<div id="'+ this.options.source +'_message" class="' + this.options.messageClass +'"></div>'); } this.setListeners(); addAjaxListener(this); }, reload: function () { this.setListeners(); }, setOptions: function(options) { this.options = Object.extend({ parameters: options.parameters || 'rating={ajaxParameter}', parser: options.parser ? options.parser : new ResponseTextParser(), handler: options.handler ? options.handler : this.handler, updateFunction: options.updateFunction || false }, options || {}); this.ratingParameter = AJAX_DEFAULT_PARAMETER; }, setListeners: function() { // attach events to anchors var elements = $(this.options.source).getElementsByTagName('a'); for (var j=0; j<elements.length; j++) { elements[j].onmouseover = this.raterMouseOver.bindAsEventListener(this); elements[j].onmouseout = this.raterMouseOut.bindAsEventListener(this); elements[j].onclick = this.raterClick.bindAsEventListener(this); } }, getCurrentRating: function(list) { var selectedIndex = -1; for (var i=0; i<list.length; i++) { if (Element.hasClassName(list[i], this.options.selectedClass)) { selectedIndex = i; } } return selectedIndex; }, getCurrentIndex: function(list, elem) { var currentIndex = 0; for (var i=0; i<list.length; i++) { if (elem == list[i]) { currentIndex = i; } } return currentIndex; }, raterMouseOver: function (e) { // get containing div var container = Event.findElement(e, 'div'); // get list of all anchors var elements = container.getElementsByTagName('a'); // find the current rating var selectedIndex = this.getCurrentRating(elements); // find the index of the 'hovered' element var currentIndex = this.getCurrentIndex(elements, Event.element(e)); // set message if (this.options.messageClass) { $(container.id+'_message').innerHTML = Event.element(e).title; } // iterate over each anchor and apply styles for (var i=0; i<elements.length; i++) { if (selectedIndex > -1) { if (i <= selectedIndex && i <= currentIndex) Element.addClassName(elements[i], this.options.selectedOverClass); else if (i <= selectedIndex && i > currentIndex) Element.addClassName(elements[i], this.options.selectedLessClass); else if (i > selectedIndex && i <= currentIndex) Element.addClassName(elements[i], this.options.overClass); } else { if (i <= currentIndex) Element.addClassName(elements[i], this.options.overClass); } } }, raterMouseOut: function (e) { // get containing div var container = Event.findElement(e, 'div'); // get list of all anchors var elements = container.getElementsByTagName('a'); // clear message if (this.options.messageClass) { $(container.id+'_message').innerHTML = ''; } // iterate over each anchor and apply styles for (var i=0; i<elements.length; i++) { Element.removeClassName(elements[i], this.options.selectedOverClass); Element.removeClassName(elements[i], this.options.selectedLessClass); Element.removeClassName(elements[i], this.options.overClass); } }, raterClick: function (e) { // get containing div var container = Event.findElement(e, 'div'); // get list of all anchors var elements = container.getElementsByTagName('a'); // find the index of the 'hovered' element var currentIndex = this.getCurrentIndex(elements, Event.element(e)); // update styles for (var i=0; i<elements.length; i++) { Element.removeClassName(elements[i], this.options.selectedOverClass); Element.removeClassName(elements[i], this.options.selectedLessClass); Element.removeClassName(elements[i], this.options.overClass); if (i <= currentIndex) { if (Element.hasClassName(container, 'onoff') && Element.hasClassName(elements[i], this.options.selectedClass)) { Element.removeClassName(elements[i], this.options.selectedClass); } else { Element.addClassName(elements[i], this.options.selectedClass); } } else if (i > currentIndex) { Element.removeClassName(elements[i], this.options.selectedClass); } } // send AJAX var ratingToSend = elements[currentIndex].title; if (Element.hasClassName(container, 'onoff')) { // send opposite of what was selected var ratings = this.options.ratings.split(','); if (ratings[0] == ratingToSend) ratingToSend = ratings[1]; else ratingToSend = ratings[0]; elements[currentIndex].title = ratingToSend; } this.execute(ratingToSend); // set field (if defined) if (this.options.state) { $(this.options.state).value = ratingToSend; } }, execute: function(ratingValue) { if (isFunction(this.options.preFunction)){ this.options.preFunction();} if (this.options.cancelExecution) { this.cancelExecution = false; return ; } // parse parameters and do replacements var ajaxParameters = this.options.parameters || ''; var re = new RegExp("(\\{"+this.ratingParameter+"\\})", 'g'); ajaxParameters = ajaxParameters.replace(re, ratingValue); var params = buildParameterString(ajaxParameters); var obj = this; // required because 'this' conflict with Ajax.Request var toggleStateFunc = this.getToggleStateValue; var aj = new Ajax.Request(this.url, { asynchronous: true, method: 'get', evalScripts: true, parameters: params, onSuccess: function(request) { obj.options.parser.load(request); var results = obj.options.parser.itemList; obj.options.handler(request, {items: results}); }, onFailure: function(request) { if (isFunction(obj.options.errorFunction)){ obj.options.errorFunction();} }, onComplete: function(request) { if (isFunction(obj.options.postFunction)) {obj.options.postFunction();} } }); }, handler: function(request, roptions) { //daten in items var erg = roptions.items[0][0] ; // on/off / 1,2,3 try { this.updateFunction(erg); // TODO: anything? } catch (e) {} // muss nicht forhanden sein }, getToggleStateValue: function(name, results) { for (var i=0; i<results.length; i++) { if (results[i][0] == name) {return results[i][1];} } return ""; }});/** * CALLOUT TAG */AjaxJspTag.Callout = Class.create();AjaxJspTag.Callout.prototype = Object.extend(new AjaxJspTag.Base(), { initialize: function(url, options) { this.url = url; this.setOptions(options); this.setListeners(); addAjaxListener(this); }, reload: function () { this.setListeners(); }, setOptions: function(options) { this.options = Object.extend({ parameters: options.parameters || '', overlib: options.overlib || AJAX_CALLOUT_OVERLIB_DEFAULT, parser: options.parser ? options.parser : new ResponseXmlToHtmlParser(), handler: options.handler ? options.handler : this.handler, doPost: options.doPost? true : false , openEvent: options.openEvent ? options.openEvent : "mouseover", closeEvent: options.closeEvent ? options.closeEvent : "mouseout" }, options || {}); this.calloutParameter = AJAX_DEFAULT_PARAMETER; }, setListeners: function() { if (this.options.sourceClass) { var elemList = document.getElementsByClassName(this.options.sourceClass); for (var i=0; i<elemList.length; i++) { eval("elemList[i].on"+this.options.openEvent+" = this.calloutOpen.bindAsEventListener(this)"); eval("elemList[i].on"+this.options.closeEvent+" = this.calloutClose.bindAsEventListener(this)"); } } }, calloutOpen: function(e) { this.execute(e); }, calloutClose: function(e) { nd(); }, execute: function(e) { if (isFunction(this.options.preFunction)){ this.options.preFunction();} if (this.options.cancelExecution) { this.cancelExecution = false; return ; } // parse parameters and do replacements var ajaxParameters = this.options.parameters || ''; var re = new RegExp("(\\{"+this.calloutParameter+"\\})", 'g'); var elem = Event.element(e); if (elem.type) { ajaxParameters = ajaxParameters.replace(re, $F(elem)); } else { ajaxParameters = ajaxParameters.replace(re, elem.innerHTML); } var params = buildParameterString(ajaxParameters); var obj = this; // required because 'this' conflict with Ajax.Request var aj = new Ajax.Request(this.url, { asynchronous: true, method: obj.options.doPost ? 'post':'get', evalScripts: true, parameters: params, onSuccess: function(request) { obj.options.parser.load(request); obj.options.handler(obj.options.parser.content, {title: obj.options.title, overlib: obj.options.overlib}); }, onFailure: function(request) { if (isFunction(obj.options.errorFunction)){ obj.options.errorFunction();} }, onComplete: function(request) { if (isFunction(obj.options.postFunction)){ obj.options.postFunction();} } }); }, handler: function(content, options) { if (content != "") { // #4 if (options.overlib) { if (options.title) { return eval("overlib(content,CAPTION,options.title,"+options.overlib+")"); } else { return eval("overlib(content,"+options.overlib+")"); } } else { if (options.title) { return overlib(content,CAPTION,options.title); } else { return overlib(content); } } } }});
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -