????
Current Path : /home2/morganrand/backup.morganrand.com/wp-content/themes/wanderfuls/optionpage/js/ |
Current File : /home2/morganrand/backup.morganrand.com/wp-content/themes/wanderfuls/optionpage/js/jquery.icolor.js |
/** * Yet another jquery color picker plugin,simple is the best. * @author levinhuang * @site http://www.vivasky.com * @note It's the jquery version of "Prototype color picker" by Myles Eftos,BUT a refined version. * Visit the raw prototype version here:myles.eftos.id.au/blog/2006/04/13/javascript-colour-picker-based-on-prototype/ */ ;(function($) { // Private functions. var p = {}; p.getId=function(){ var id=$(document).data("icolorID"); if(!id){id=1;}else{id=id+1;}; $(document).data("icolorID",id); return id; }; p.colorMap=["00","33","66","99","AA","CC","EE","FF"]; p.M = function($t,opts){ this.$t=$t; this.$layout=null;/* set after _init */ this.$colors=null; this.$tb=null; /* color element table */ this.flat=opts.flat; this.colors=opts.colors; this.trigger=opts.trigger; this.className=opts.cl; this.showInput=opts.showInput; this.defaultColor=!(this.colors&&this.colors.length>0); this.curColor=""; this._opts=opts; this._init(); }; p.M.prototype={ _init:function(){ this._initColors(); this._initCbk(); this._initLayout(); }, _initColors:function(){ if(!this.defaultColor) return; for(var i=0;i<p.colorMap.length;i++) this.colors.push(p.colorMap[i]+p.colorMap[i]+p.colorMap[i]); //blue for(var i=1;i<p.colorMap.length;i++){ if(i!=4&&i!=6) this.colors.push(p.colorMap[0]+p.colorMap[0]+p.colorMap[i]); }; for(var i=1;i<p.colorMap.length;i++){ if(i!=2&&i!=4&&i!=6&&i!=7) this.colors.push(p.colorMap[i]+p.colorMap[i]+p.colorMap[7]); }; //green for(var i=1;i<p.colorMap.length;i++){ if(i!=4&&i!=6) this.colors.push(p.colorMap[0]+p.colorMap[i]+p.colorMap[0]); }; for(var i=1;i<p.colorMap.length;i++){ if(i!=2&&i!=4&&i!=6&&i!=7) this.colors.push(p.colorMap[i]+p.colorMap[7]+p.colorMap[i]); }; //red for(var i=1;i<p.colorMap.length;i++){ if(i!=4&&i!=6) this.colors.push(p.colorMap[i]+p.colorMap[0]+p.colorMap[0]); }; for(var i=1;i<p.colorMap.length;i++){ if(i!=2&&i!=4&&i!=6&&i!=7) this.colors.push(p.colorMap[7]+p.colorMap[i]+p.colorMap[i]); }; //yellow for(var i=1;i<p.colorMap.length;i++){ if(i!=4&&i!=6) this.colors.push(p.colorMap[i]+p.colorMap[i]+p.colorMap[0]); }; for(var i=1;i<p.colorMap.length;i++){ if(i!=2&&i!=4&&i!=6&&i!=7) this.colors.push(p.colorMap[7]+p.colorMap[7]+p.colorMap[i]); }; //cyan for(var i=1;i<p.colorMap.length;i++){ if(i!=4&&i!=6) this.colors.push(p.colorMap[0]+p.colorMap[i]+p.colorMap[i]); }; for(var i=1;i<p.colorMap.length;i++){ if(i!=2&&i!=4&&i!=6&&i!=7) this.colors.push(p.colorMap[i]+p.colorMap[7]+p.colorMap[7]); }; //megenta for(var i=1;i<p.colorMap.length;i++){ if(i!=4&&i!=6) this.colors.push(p.colorMap[i]+p.colorMap[0]+p.colorMap[i]); }; for(var i=1;i<p.colorMap.length;i++){ if(i!=2&&i!=4&&i!=6&&i!=7) this.colors.push(p.colorMap[7]+p.colorMap[i]+p.colorMap[7]); }; }, _initLayout:function(){ var _this=this; //beforeInit callback var go=true; if(this._opts.beforeInit){go=this._opts.beforeInit();}; if(!go) return; //build the layout this._opts.col=this._opts.col||this.colors.length; var colNum=this.defaultColor?8:(this._opts.col<1?1:this._opts.col); var html='<div class="'+this.className+'" id="icolor_'+p.getId()+'">',title=""; html+='<table class="icolor_ct">'; for(var i=0;i<this.colors.length;i++){ if(i%colNum==0){ html+="<tr>"; }; title=this._opts.title?(' title="#'+this.colors[i]+'"'):""; html+='<td style="background-color:#'+this.colors[i]+';"'+title+' abbr="'+this.colors[i]+'"></td>'; if(i%colNum==(colNum-1)){ html+="</tr>"; }; }; html+='</table>'; if(this.showInput){ html+='<div class="icolor_ft"><input type="text" name="icolor" class="icolor_tbx"/>'+this._opts.okTpl+'</div>'; }; html+='</div>'; //insert into the dom tree this.$layout=$(html); this.$tb=this.$layout.find("table"); this.$colors=this.$tb.find("td"); if(this.flat){ this.$t.append(this.$layout.addClass("icolor_flat")); }else{ $("body").append(this.$layout.hide()); }; //register event handlers this.$colors.click(function(e){ if(this.className=="hot") return; _this.$colors.removeClass(); $(this).addClass("hot"); _this.curColor="#"+this.abbr; if(_this._$ipt) _this._$ipt.val(_this.curColor); _this.submit(); }); if(this._opts.hover){ this.$colors.mouseenter(function(e){ var c="#"+this.abbr; _this._opts.onOver?_this._opts.onOver(c):(function(){ _this._$ipt.css("background-color",c); })(); }); this.$tb.mouseleave(function(e){ _this._opts.onOut?_this._opts.onOut():(function(){ _this._$ipt.css("background-color",""); })(); }); }; if(this.showInput){ this._$ipt=this.$layout.find(".icolor_tbx").keyup(function(e){ if(e.keyCode!=13) return; var v=""; if((v=_this._$ipt.val())==""||v.indexOf("#")!=0) return; _this.curColor=v; _this.submit(); }); this.$layout.find(".icolor_ok").click(function(e){ var v=""; if((v=_this._$ipt.val())==""||v.indexOf("#")!=0) return false; _this.curColor=v; _this.submit(); return false; }); }; if(!this.flat){ this.$t.bind(this.trigger,function(e){ if(_this.$layout.is(":hidden")) _this.show(); else _this.$layout.hide(); return false; }); }; //afterInit callback if(this._opts.afterInit) this._opts.afterInit(); }, show:function(){ var _this=this; var pos=this.$t.offset(),cbk=this._opts.onShow?function(){_this._opts.onShow(pos);}:null; this.$layout.css({left:pos.left,top:pos.top+this.$t.height()}); if(this._opts.slide){ this.$layout.slideDown("fast",cbk); }else{ this.$layout.show(0,cbk); }; }, submit:function(){ if(this._opts.onSelect){this._opts.onSelect(this.curColor);}; if((!this.flat)&&this._opts.autoClose){ this.$layout.hide(); }; }, /** * Generate a proxy function for the specified function 'f', * which will set the 'this' keyword inside the f to the current p.M instance. * @param {Function} f */ _proxy:function(f){ if(!f) return null; var i=this; return function(){ return f.apply(i,arguments); }; }, _initCbk:function(){ //onShow this._opts.onShow=this._proxy(this._opts.onShow); //onSelect this._opts.onSelect=this._proxy(this._opts.onSelect); //beforeInit this._opts.beforeInit=this._proxy(this._opts.beforeInit); //afterInit this._opts.afterInit=this._proxy(this._opts.afterInit); //onOver this._opts.onOver=this._proxy(this._opts.onOver); //onOut this._opts.onOut=this._proxy(this._opts.onOut); } }; //main plugin body $.fn.icolor = function(opts) { // Set the options. opts = $.extend({}, $.fn.icolor.defaults, opts); // Go through the matched elements and return the jQuery object. return this.each(function() { var $i=$(this); if(!$i.data("icolor")) $i.data("icolor",new p.M($i,opts)); }); }; // Public defaults. $.fn.icolor.defaults = { trigger: 'click', /* event name for triggering to show icolor */ flat:false, /* inline mode */ col:8, /* column number of icolor */ colors:[], /* user predefined colors */ showInput:false, /* show a input box after the color elements */ cl:"icolor", /* css class for icolor */ title:true, /* whether include title attribute for the color element */ autoClose:true, /* auto-close after selecting a color */ slide:true, /* use the 'slideDown' effect when showing icolor */ okTpl:'', /* ok button template such as <button class="icolor_ok">ȷ��<button> */ onShow:null, /* onShow callback */ onSelect:null, /* onSelect callback */ beforeInit:null, /* beforeInit callback */ afterInit:null, /* afterInit callback */ onOver:null, /* callback for mouseover a color element */ onOut:null, /* callback for mouseout the whole icolor */ hover:true /* whether register hover event handlers to icolor */ }; //public methods $.fn.icolor.isDark=function(c){ var colr = parseInt(c.substr(1), 16); return (colr >>> 16) // R + ((colr >>> 8) & 0x00ff) // G + (colr & 0x0000ff) // B < 500; }; })(jQuery);