diff options
Diffstat (limited to 'data/js')
-rw-r--r-- | data/js/dropdownsearch.js | 28 | ||||
-rw-r--r-- | data/js/iv.js | 22 | ||||
-rw-r--r-- | data/js/lib.js | 2 | ||||
-rw-r--r-- | data/js/misc.js | 21 | ||||
-rw-r--r-- | data/js/vnscr.js | 2 |
5 files changed, 35 insertions, 40 deletions
diff --git a/data/js/dropdownsearch.js b/data/js/dropdownsearch.js index 35bd1443..e7c42dc0 100644 --- a/data/js/dropdownsearch.js +++ b/data/js/dropdownsearch.js @@ -41,6 +41,7 @@ function box() { function init(obj, url, trfunc, serfunc, retfunc) { obj.setAttribute('autocomplete', 'off'); obj.onkeydown = keydown; + obj.onclick = obj.onchange = obj.oninput = function() { return textchanged(obj); }; obj.onblur = blur; obj.ds_returnFunc = retfunc; obj.ds_trFunc = trfunc; @@ -48,6 +49,7 @@ function init(obj, url, trfunc, serfunc, retfunc) { obj.ds_searchURL = url; obj.ds_selectedId = 0; obj.ds_dosearch = null; + obj.ds_lastVal = obj.value; } function blur() { @@ -65,7 +67,7 @@ function setselected(obj, id) { function setvalue(obj) { if(obj.ds_selectedId != 0) - obj.value = obj.ds_serFunc(byId('ds_box_'+obj.ds_selectedId).ds_itemData, obj); + obj.value = obj.ds_lastVal = obj.ds_serFunc(byId('ds_box_'+obj.ds_selectedId).ds_itemData, obj); if(obj.ds_returnFunc) obj.ds_returnFunc(obj); @@ -110,6 +112,21 @@ function updown(obj, up) { return false; } +function textchanged(obj) { + // Ignore this event if the text hasn't actually changed. + if(obj.ds_lastVal == obj.value) + return true; + obj.ds_lastVal = obj.value; + + // perform search after a timeout + if(obj.ds_dosearch) + clearTimeout(obj.ds_dosearch); + obj.ds_dosearch = setTimeout(function() { + search(obj); + }, 500); + return true; +} + function keydown(ev) { var c = document.layers ? ev.which : document.all ? event.keyCode : ev.keyCode; var obj = this; @@ -123,14 +140,7 @@ function keydown(ev) { if(c == 38 || c == 40) // up / down return updown(obj, c == 38); - // perform search after a timeout - if(obj.ds_dosearch) - clearTimeout(obj.ds_dosearch); - obj.ds_dosearch = setTimeout(function() { - search(obj); - }, 500); - - return true; + return textchanged(obj); } function search(obj) { diff --git a/data/js/iv.js b/data/js/iv.js index 75754a90..f1593d22 100644 --- a/data/js/iv.js +++ b/data/js/iv.js @@ -1,14 +1,14 @@ /* Simple image viewer widget. Usage: * - * <a href="full_image.jpg" rel="iv:{width}x{height}:{category}">..</a> + * <a href="full_image.jpg" data-iv="{width}x{height}:{category}">..</a> * * Clicking on the above link will cause the image viewer to open * full_image.jpg. The {category} part can be empty or absent. If it is not * empty, next/previous links will show up to point to the other images within * the same category. * - * ivInit() should be called when links with "iv:" tags are dynamically added - * or removed from the DOM. + * ivInit() should be called when links with "data-iv" attributes are + * dynamically added or removed from the DOM. */ // Cache of image categories and the list of associated link objects. Used to @@ -21,10 +21,10 @@ function init() { var l = byName('a'); for(var i=0;i<l.length;i++) { var o = l[i]; - if(o.rel.substr(0,3) == 'iv:' && o.id != 'ivprev' && o.id != 'ivnext') { + if(o.getAttribute('data-iv') && o.id != 'ivprev' && o.id != 'ivnext') { n++; o.onclick = show; - var cat = o.rel.split(':')[2]; + var cat = o.getAttribute('data-iv').split(':')[1]; if(cat) { if(!cats[cat]) cats[cat] = []; @@ -60,23 +60,23 @@ function fixnav(lnk, cat, i, dir) { var a = cat ? findnav(cat, i, dir) : 0; lnk.style.visibility = a ? 'visible' : 'hidden'; lnk.href = a ? a.href : '#'; - lnk.rel = a ? a.rel : ''; lnk.iv_i = a ? a.iv_i : 0; + lnk.setAttribute('data-iv', a ? a.getAttribute('data-iv') : ''); } function show() { var u = this.href; - var opt = this.rel.split(':'); + var opt = this.getAttribute('data-iv').split(':'); var idx = this.iv_i; var view = byId('iv_view'); var full = byId('ivfull'); - fixnav(byId('ivprev'), opt[2], idx, -1); - fixnav(byId('ivnext'), opt[2], idx, 1); + fixnav(byId('ivprev'), opt[1], idx, -1); + fixnav(byId('ivnext'), opt[1], idx, 1); // calculate dimensions - var w = Math.floor(opt[1].split('x')[0]); - var h = Math.floor(opt[1].split('x')[1]); + var w = Math.floor(opt[0].split('x')[0]); + var h = Math.floor(opt[0].split('x')[1]); var ww = typeof(window.innerWidth) == 'number' ? window.innerWidth : document.documentElement.clientWidth; var wh = typeof(window.innerHeight) == 'number' ? window.innerHeight : document.documentElement.clientHeight; var st = typeof(window.pageYOffset) == 'number' ? window.pageYOffset : document.body && document.body.scrollTop ? document.body.scrollTop : document.documentElement.scrollTop; diff --git a/data/js/lib.js b/data/js/lib.js index 675f2baa..7d0f6b18 100644 --- a/data/js/lib.js +++ b/data/js/lib.js @@ -83,7 +83,7 @@ window.tag = function() { continue; if(typeof arguments[i] == 'object' && !arguments[i].appendChild) { for(attr in arguments[i]) { - if(attr == 'style') + if(attr == 'style' || attr.match(/^data-/)) el.setAttribute(attr, arguments[i][attr]); else el[ attr == 'class' ? 'className' : attr == 'for' ? 'htmlFor' : attr ] = arguments[i][attr]; diff --git a/data/js/misc.js b/data/js/misc.js index 89572e82..f41e8140 100644 --- a/data/js/misc.js +++ b/data/js/misc.js @@ -1,18 +1,3 @@ -// search box -byId('sq').onfocus = function () { - if(this.value == mt('_menu_emptysearch')) { - this.value = ''; - this.style.fontStyle = 'normal' - } -}; -byId('sq').onblur = function () { - if(this.value.length < 1) { - this.value = mt('_menu_emptysearch'); - this.style.fontStyle = 'italic' - } -}; - - function ulist_redirect(type, path, formcode, args) { var r = new RegExp('/('+type+'[0-9]+).*$'); location.href = location.href.replace(r, '/$1')+path @@ -210,7 +195,7 @@ if(byId('batchedit')) // mouse-over price information / disclaimer (function(){ if(byId('buynow')) { - var l = byClass(byId('buynow'), 'acronym', 'pricenote'); + var l = byClass(byId('buynow'), 'abbr', 'pricenote'); for(var i=0; i<l.length; i++) { l[i].buynow_last = l[i].title; l[i].title = null; @@ -257,12 +242,12 @@ if(byId('not') && byId('vns')) // Language selector (function(){ var d = byId('lang_select'); - var flag = byName(d, 'acronym')[0]; + var flag = byName(d, 'abbr')[0]; ddInit(d, 'bottom', function(lnk) { var lst = tag('ul', null); for(var i=0; i<VARS.l10n_lang.length; i++) { var ln = VARS.l10n_lang[i]; - var icon = tag('acronym', {'class':'icons lang '+ln[0]}, ' '); + var icon = tag('abbr', {'class':'icons lang '+ln[0]}, ' '); lst.appendChild(tag('li', {'class':'lang_selector'}, hasClass(flag, ln[0]) ? tag('i', icon, ln[1]) : tag('a', {href:'/setlang?lang='+ln[0]+';ref='+encodeURIComponent(location.pathname+location.search)}, icon, ln[1]) diff --git a/data/js/vnscr.js b/data/js/vnscr.js index acde013d..08d3ffae 100644 --- a/data/js/vnscr.js +++ b/data/js/vnscr.js @@ -98,7 +98,7 @@ function loaded(tr, id, width, height) { tr.scr_loading = 0; setContent(byName(tr, 'td')[0], - tag('a', {href: URL(tr.scr_id, 'f'), rel:'iv:'+dim+':edit'}, + tag('a', {href: URL(tr.scr_id, 'f'), 'data-iv':dim+':edit'}, tag('img', {src: URL(tr.scr_id, 't')}) ) ); |