mirror of
https://github.com/yacy/yacy_search_server.git
synced 2024-09-21 00:00:13 +02:00
- update to jquery-ui 1.8.16 (includes themes) - introduced new portalsearch (as default) - old portalsearch is still available and accessible, but will eventually be removed - jquery and portal search is now loaded by special header templates for maintenance reasons - update to new autocomplete, solves bug: http://bugs.yacy.net/view.php?id=29 - many improvements to YMarks GUI and API...more to come anytime soon Sorry, this is a rather large commit, I hope it doesn't break anything essential, but I need to consolidate some of my efforts in order to move ahead. Especially the update to the portalsearch widget might not be welcomed, but the old one is simply incompatible with newer jquery and jquery-ui libraries, sorry. The code tree /yacy/ui/... is obsolete and will be removed in the future. At that point all productive portalsearches should have migrated to the new version. git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@8014 6c8d7289-2bf4-0310-a012-ef5d649a1542
13 lines
6.3 KiB
JavaScript
13 lines
6.3 KiB
JavaScript
/*
|
|
* jQuery Field Plug-in
|
|
*
|
|
* Copyright (c) 2007 Dan G. Switzer, II
|
|
*
|
|
* Dual licensed under the MIT and GPL licenses:
|
|
* http://www.opensource.org/licenses/mit-license.php
|
|
* http://www.gnu.org/licenses/gpl.html
|
|
*
|
|
* Revision: 14
|
|
* Version: 0.9.2
|
|
*/
|
|
(function($){var defaults={delimiter:",",checkboxRangeKeyBinding:"shiftKey",useArray:false};$.Field={version:"0.9.2",setDefaults:function(options){$.extend(defaults,options)},setProperty:function(prop,value){defaults[prop]=value},getProperty:function(prop){return defaults[prop]}};$.fn.fieldArray=function(v){var t=$type(v);if(t=="undefined")return getValue(this);if(t=="string"||t=="number"){v=v.toString().split(defaults.delimiter);t="array"}if(t=="array")return setValue(this,v);return this};$.fn.getValue=function(){return getValue(this).join(defaults.delimiter)};var getValue=function(jq){var v=[];jq.each(function(lc){var t=getType(this);switch(t){case"checkbox":case"radio":if(this.checked)v.push(this.value);break;case"select":if(this.type=="select-one"){v.push((this.selectedIndex==-1)?"":getOptionVal(this[this.selectedIndex]))}else{for(var i=0;i<this.length;i++){if(this[i].selected){v.push(getOptionVal(this[i]))}}}break;case"text":v.push(this.value);break}});return v};$.fn.setValue=function(v){return setValue(this,((!v&&(v!==0))?[""]:v.toString().split(defaults.delimiter)))};var setValue=function(jq,v){jq.each(function(lc){var t=getType(this),x;switch(t){case"checkbox":case"radio":if(valueExists(v,this.value))this.checked=true;else this.checked=false;break;case"select":var bSelectOne=(this.type=="select-one");var bKeepLooking=true;for(var i=0;i<this.length;i++){x=getOptionVal(this[i]);bSelectItem=valueExists(v,x);if(bSelectItem){this[i].selected=true;if(bSelectOne){bKeepLooking=false;break}}else if(!bSelectOne)this[i].selected=false}if(bSelectOne&&bKeepLooking&&!!this[0]){this[0].selected=true}break;case"text":this.value=v.join(defaults.delimiter);break}});return jq};$.fn.formHash=function(inHash){var bGetHash=(arguments.length==0);var stHash={};this.filter("form").each(function(){var els=this.elements,el,n,stProcessed={},jel;for(var i=0,elsMax=els.length;i<elsMax;i++){el=els[i];n=el.name;if(!n||stProcessed[n])continue;var jel=$(el.tagName.toLowerCase()+"[name='"+n+"']",this);if(bGetHash){stHash[n]=jel[defaults.useArray?"fieldArray":"getValue"]()}else if(typeof inHash[n]!="undefined"){jel[defaults.useArray?"fieldArray":"setValue"](inHash[n])}stProcessed[n]=true}});return(bGetHash)?stHash:this};$.fn.autoAdvance=function(callback){return this.find(":text,:password,textarea").bind("keyup.autoAdvance",function(e){var $field=$(this),iMaxLength=parseInt($field.attr("maxlength"),10);if(isNaN(iMaxLength)||("|9|16|37|38|39|40|".indexOf("|"+e.keyCode+"|")>-1))return true;if($field.getValue().length>=$field.attr("maxlength")){var $next=$field.moveNext().select();if($.isFunction(callback))callback.apply($field,[$next])}})};$.fn.moveNext=function(){return this.moveIndex("next")};$.fn.movePrev=function(){return this.moveIndex("prev")};$.fn.moveIndex=function(i){var aPos=getFieldPosition(this);if(i=="next")i=aPos[0]+1;else if(i=="prev")i=aPos[0]-1;if(i<0)i=aPos[1].length-1;else if(i>=aPos[1].length)i=0;return $(aPos[1][i]).trigger("focus")};$.fn.getTabIndex=function(){return getFieldPosition(this)[0]};var getFieldPosition=function(jq){var $field=jq.filter("input, select, textarea").get(0),aTabIndex=[],aPosIndex=[];if(!$field)return[-1,[]];$.each($field.form.elements,function(i,o){if(o.tagName!="FIELDSET"&&!o.disabled){if(o.tabIndex>0){aTabIndex.push(o)}else{aPosIndex.push(o)}}});aTabIndex.sort(function(a,b){return a.tabIndex-b.tabIndex});aTabIndex=$.merge(aTabIndex,aPosIndex);for(var i=0;i<aTabIndex.length;i++){if(aTabIndex[i]==$field)return[i,aTabIndex]}return[-1,aTabIndex]};$.fn.limitSelection=function(limit,options){var opt=jQuery.extend((limit&&limit.constructor==Object?limit:{limit:limit,onsuccess:function(limit){return true},onfailure:function(limit){alert("You can only select a maximum a of "+limit+" items.");return false}}),options);var self=this;var getCount=function(el){if(el.type=="select-multiple")return $("option:selected",self).length;else if(el.type=="checkbox")return self.filter(":checked").length;return 0};var undoSelect=function(){setValue(self,getValue(self).slice(0,opt.limit));return opt.onfailure.apply(self,[opt.limit])};return this.bind((!!self[0]&&self[0].type=="select-multiple")?"change.limitSelection":"click.limitSelection",function(){if(getCount(this)>opt.limit){return(this.type=="select-multiple")?undoSelect():opt.onfailure.apply(self,[opt.limit])}opt.onsuccess.apply(self,[opt.limit]);return true})};$.fn.createCheckboxRange=function(callback){var opt=jQuery.extend((callback&&callback.constructor==Object?callback:{bind:defaults.checkboxRangeKeyBinding,onclick:callback}),callback);var iLastSelection=0,self=this,bCallback=$.isFunction(opt.onclick);if(bCallback)this.each(function(){opt.onclick.apply(this,[$(this).is(":checked")])});return this.each(function(){if(this.type!="checkbox")return false;var el=this;var updateLastCheckbox=function(e){iLastSelection=self.index(e.target)};var checkboxClicked=function(e){var bSetChecked=this.checked,current=self.index(e.target),low=Math.min(iLastSelection,current),high=Math.max(iLastSelection+1,current);if(bCallback)$(this).each(function(){opt.onclick.apply(this,[bSetChecked])});if(!e[opt.bind])return;for(var i=low;i<high;i++){var item=self.eq(i).attr("checked",bSetChecked?"checked":"");if(bCallback)opt.onclick.apply(item[0],[bSetChecked])}return true};$(this).unbind("click.createCheckboxRange").bind("click.createCheckboxRange",checkboxClicked).bind("click.createCheckboxRange",updateLastCheckbox);return true})};var getType=function(el){var t=el.type;switch(t){case"select":case"select-one":case"select-multiple":t="select";break;case"text":case"hidden":case"textarea":case"password":case"button":case"submit":case"submit":t="text";break;case"checkbox":case"radio":t=t;break}return t};var getOptionVal=function(el){return jQuery.browser.msie&&!(el.attributes['value'].specified)?el.text:el.value};var valueExists=function(a,v){return($.inArray(v,a)>-1)};var $type=function(o){var t=(typeof o).toLowerCase();if(t=="object"){if(o instanceof Array)t="array";else if(o instanceof Date)t="date"}return t};var $isType=function(o,v){return($type(o)==String(v).toLowerCase())}})(jQuery); |