Skip to content
Snippets Groups Projects
Commit b29919f7 authored by Michal Rezler's avatar Michal Rezler
Browse files

ajax.js is jQueryfied

parent 6d856006
No related branches found
No related tags found
No related merge requests found
...@@ -4,67 +4,81 @@ ...@@ -4,67 +4,81 @@
* @license GPL2 (http://www.gnu.org/licenses/gpl.html) * @license GPL2 (http://www.gnu.org/licenses/gpl.html)
* @author Andreas Gohr <andi@splitbrain.org> * @author Andreas Gohr <andi@splitbrain.org>
* @author Adrian Lang <lang@cosmocode.de> * @author Adrian Lang <lang@cosmocode.de>
* @author Michal Rezler <m.rezler@centrum.cz>
*/ */
var ajax_quicksearch = {
(function ($) {
inObj: null, var init, clear_results, onCompletion;
outObj: null,
sackObj: null, var ajax_quicksearch = {
delay: null, inObj: null,
outObj: null,
init: function(inID, outID) { sackObj: null,
delay: null,
this.inObj = $(inID); };
this.outObj = $(outID);
init = function(inID, outID) {
ajax_quicksearch.inObj = $(inID);
ajax_quicksearch.outObj = $(outID);
// objects found? // objects found?
if (this.inObj === null) return; if (ajax_quicksearch.inObj === null) return;
if (this.outObj === null) return; if (ajax_quicksearch.outObj === null) return;
// prepare AJAX // prepare AJAX
this.sackObj = new sack(DOKU_BASE + 'lib/exe/ajax.php'); ajax_quicksearch.sackObj = new sack(DOKU_BASE + 'lib/exe/ajax.php');
this.sackObj.AjaxFailedAlert = ''; ajax_quicksearch.sackObj.AjaxFailedAlert = '';
this.sackObj.encodeURIString = false; ajax_quicksearch.sackObj.encodeURIString = false;
this.sackObj.onCompletion = ajax_quicksearch.onCompletion; ajax_quicksearch.sackObj.onCompletion = ajax_quicksearch.onCompletion;
// attach eventhandler to search field // attach eventhandler to search field
this.delay = new Delay(function () { ajax_quicksearch.delay = new Delay(function () {
ajax_quicksearch.clear_results(); ajax_quicksearch.clear_results();
var value = ajax_quicksearch.inObj.value; var value = ajax_quicksearch.inObj.value;
if(value === ''){ return; } if(value === ''){ return; }
ajax_quicksearch.sackObj.runAJAX('call=qsearch&q=' + encodeURI(value)); ajax_quicksearch.sackObj.runAJAX('call=qsearch&q=' + encodeURI(value));
}); });
addEvent(this.inObj, 'keyup', function () { // attach eventhandler to input field
ajax_quicksearch.clear_results(); $(ajax_quicksearch.inObj).keyup(
ajax_quicksearch.delay.start(); function() {
}); ajax_quicksearch.clear_results();
ajax_quicksearch.delay.start();
}
);
// attach eventhandler to output field // attach eventhandler to output field
addEvent(this.outObj, 'click', function () { $(ajax_quicksearch.outObj).click(
ajax_quicksearch.outObj.style.display = 'none'; function() {
}); ajax_quicksearch.outObj.hide();
}, }
);
};
clear_results: function(){ clear_results = function(){
ajax_quicksearch.outObj.style.display = 'none'; ajax_quicksearch.outObj.hide();
ajax_quicksearch.outObj.innerHTML = ''; ajax_quicksearch.outObj.text('');
}, };
onCompletion: function() { onCompletion = function() {
var data = this.response; // 'this' is sack context var data = this.response; // 'this' is sack context
if (data === '') { return; } if (data === '') { return; }
var outObj = ajax_quicksearch.outObj; var outObj = ajax_quicksearch.outObj;
outObj.innerHTML = data; outObj.text(data);
outObj.style.display = 'block'; outObj.show();
outObj.style['white-space'] = 'nowrap'; outObj.css('white-space', 'nowrap');
// shorten namespaces if too long // shorten namespaces if too long
var width = outObj.clientWidth; var width = outObj.clientWidth;
var links = outObj.getElementsByTagName('a'); var links = $('ajax_quicksearch outObj a');
for(var i=0; i<links.length; i++){
for (var i=0; i<links.length; i++) {
var content = links[i].text();
// maximum allowed width: // maximum allowed width:
var max = width - links[i].offsetLeft; var max = width - links[i].offsetLeft;
var isRTL = (document.documentElement.dir == 'rtl'); var isRTL = (document.documentElement.dir == 'rtl');
...@@ -72,47 +86,45 @@ var ajax_quicksearch = { ...@@ -72,47 +86,45 @@ var ajax_quicksearch = {
if(!isRTL && links[i].offsetWidth < max) continue; if(!isRTL && links[i].offsetWidth < max) continue;
if(isRTL && links[i].offsetLeft > 0) continue; if(isRTL && links[i].offsetLeft > 0) continue;
var nsL = links[i].innerText.indexOf('('); var nsL = content.indexOf('(');
var nsR = links[i].innerText.indexOf(')'); var nsR = content.indexOf(')');
var eli = 0; var eli = 0;
var runaway = 0; var runaway = 0;
while( (nsR - nsL > 3) && while((nsR - nsL > 3) &&
( (
(!isRTL && links[i].offsetWidth > max) || (!isRTL && links[i].offsetWidth > max) ||
(isRTL && links[i].offsetLeft < 0) (isRTL && links[i].offsetLeft < 0)
) )
){ ){
if(runaway++ > 500) return; // just in case something went wrong if(runaway++ > 500) return; // just in case something went wrong
if(eli){ if(eli){
// elipsis already inserted // elipsis already inserted
if( (eli - nsL) > (nsR - eli) ){ if( (eli - nsL) > (nsR - eli) ){
// cut left // cut left
links[i].innerText = links[i].innerText.substring(0,eli-2)+ content = content.substring(0,eli-2) + content.substring(eli);
links[i].innerText.substring(eli);
}else{ }else{
// cut right // cut right
links[i].innerText = links[i].innerText.substring(0,eli+1)+ content = content.substring(0,eli+1) + content.substring(eli+2);
links[i].innerText.substring(eli+2);
} }
}else{ }else{
// replace middle with ellipsis // replace middle with ellipsis
var mid = Math.floor( nsL + ((nsR-nsL)/2) ); var mid = Math.floor( nsL + ((nsR-nsL)/2) );
links[i].innerText = links[i].innerText.substring(0,mid)+''+ content = content.substring(0,mid)+'' + content.substring(mid+1);
links[i].innerText.substring(mid+1);
} }
eli = links[i].innerText.indexOf('');
nsL = links[i].innerText.indexOf('('); eli = content.indexOf('');
nsR = links[i].innerText.indexOf(')'); nsL = content.indexOf('(');
nsR = content.indexOf(')');
} }
} }
} };
}; $(function () {
init('qsearch__in','qsearch__out');
});
addInitEvent(function(){ }(jQuery));
ajax_quicksearch.init('qsearch__in','qsearch__out');
});
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment