puffer 0.0.11 → 0.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. data/VERSION +1 -1
  2. data/app/helpers/puffer_helper.rb +8 -0
  3. data/app/views/layouts/puffer.html.erb +5 -11
  4. data/lib/generators/puffer/install/install_generator.rb +2 -2
  5. data/lib/generators/puffer/install/templates/puffer.rb +12 -0
  6. data/lib/generators/puffer/install/templates/puffer/javascripts/{application.js → puffer.js} +0 -0
  7. data/lib/generators/puffer/install/templates/puffer/javascripts/{rails-src.js → rails.js} +0 -0
  8. data/lib/puffer.rb +14 -0
  9. data/lib/puffer/controller/mutate.rb +8 -2
  10. data/lib/puffer/extensions/mapper.rb +2 -2
  11. data/lib/puffer/inputs.rb +1 -1
  12. data/lib/puffer/path_set.rb +14 -7
  13. data/lib/puffer/resource.rb +1 -1
  14. data/puffer.gemspec +8 -44
  15. data/spec/dummy/config/initializers/puffer.rb +12 -0
  16. data/spec/dummy/public/puffer/javascripts/{application.js → puffer.js} +0 -0
  17. data/spec/dummy/public/puffer/javascripts/{rails-src.js → rails.js} +0 -0
  18. metadata +10 -46
  19. data/lib/generators/puffer/install/templates/puffer/javascripts/right-autocompleter-src.js +0 -621
  20. data/lib/generators/puffer/install/templates/puffer/javascripts/right-autocompleter.js.gz +0 -0
  21. data/lib/generators/puffer/install/templates/puffer/javascripts/right-calendar-src.js +0 -1461
  22. data/lib/generators/puffer/install/templates/puffer/javascripts/right-calendar.js.gz +0 -0
  23. data/lib/generators/puffer/install/templates/puffer/javascripts/right-in-edit-src.js +0 -369
  24. data/lib/generators/puffer/install/templates/puffer/javascripts/right-in-edit.js +0 -13
  25. data/lib/generators/puffer/install/templates/puffer/javascripts/right-in-edit.js.gz +0 -0
  26. data/lib/generators/puffer/install/templates/puffer/javascripts/right-lightbox-src.js +0 -905
  27. data/lib/generators/puffer/install/templates/puffer/javascripts/right-lightbox.js +0 -24
  28. data/lib/generators/puffer/install/templates/puffer/javascripts/right-lightbox.js.gz +0 -0
  29. data/lib/generators/puffer/install/templates/puffer/javascripts/right-sortable-src.js +0 -428
  30. data/lib/generators/puffer/install/templates/puffer/javascripts/right-sortable.js +0 -17
  31. data/lib/generators/puffer/install/templates/puffer/javascripts/right-sortable.js.gz +0 -0
  32. data/lib/generators/puffer/install/templates/puffer/javascripts/right-src.js +0 -5892
  33. data/lib/generators/puffer/install/templates/puffer/javascripts/right-tabs-src.js +0 -1145
  34. data/lib/generators/puffer/install/templates/puffer/javascripts/right-tabs.js +0 -29
  35. data/lib/generators/puffer/install/templates/puffer/javascripts/right-tabs.js.gz +0 -0
  36. data/lib/generators/puffer/install/templates/puffer/javascripts/right.js.gz +0 -0
  37. data/spec/dummy/config/puffer.rb +0 -0
  38. data/spec/dummy/public/puffer/javascripts/right-autocompleter-src.js +0 -621
  39. data/spec/dummy/public/puffer/javascripts/right-autocompleter.js.gz +0 -0
  40. data/spec/dummy/public/puffer/javascripts/right-calendar-src.js +0 -1461
  41. data/spec/dummy/public/puffer/javascripts/right-calendar.js.gz +0 -0
  42. data/spec/dummy/public/puffer/javascripts/right-in-edit-src.js +0 -369
  43. data/spec/dummy/public/puffer/javascripts/right-in-edit.js +0 -13
  44. data/spec/dummy/public/puffer/javascripts/right-in-edit.js.gz +0 -0
  45. data/spec/dummy/public/puffer/javascripts/right-lightbox-src.js +0 -905
  46. data/spec/dummy/public/puffer/javascripts/right-lightbox.js +0 -24
  47. data/spec/dummy/public/puffer/javascripts/right-lightbox.js.gz +0 -0
  48. data/spec/dummy/public/puffer/javascripts/right-sortable-src.js +0 -428
  49. data/spec/dummy/public/puffer/javascripts/right-sortable.js +0 -17
  50. data/spec/dummy/public/puffer/javascripts/right-sortable.js.gz +0 -0
  51. data/spec/dummy/public/puffer/javascripts/right-src.js +0 -5892
  52. data/spec/dummy/public/puffer/javascripts/right-tabs-src.js +0 -1145
  53. data/spec/dummy/public/puffer/javascripts/right-tabs.js +0 -29
  54. data/spec/dummy/public/puffer/javascripts/right-tabs.js.gz +0 -0
  55. data/spec/dummy/public/puffer/javascripts/right.js.gz +0 -0
@@ -1,29 +0,0 @@
1
- /**
2
- * Tabs widget for RightJS (http://rightjs.org/ui/tabs)
3
- *
4
- * Copyright (C) 2009-2010 Nikolay Nemshilov
5
- */
6
- var Tabs=RightJS.Tabs=function(n,t,e){function u(){return h(e.Cookie?(v.get("right-tabs-indexes")||"").split(","):[])}function z(a,b,c){if(e.Cookie){var f=u();f=f.without.apply(f,b.map("id"));f.push(c.target.id);v.set("right-tabs-indexes",f.uniq().join(","),a)}}var h=e,r=e.$,A=e.$w,g=e.$E,B=e.Fx,C=e.Object,D=e.Browser,E=e.isArray,F=e.isNumber,w=e.Class,s=e.Element,v=e.Cookie,G=new e.Class(e.Element,{initialize:function(a){this.$super("div",{"class":"rui-spinner"});this.dots=[];for(var b=0;b<(a||4);b++)this.dots.push(new e.Element("div"));
7
- this.dots[0].addClass("glowing");this.insert(this.dots);e(this.shift).bind(this).periodical(300)},shift:function(){if(this.visible()){var a=this.dots.pop();this.dots.unshift(a);this.insert(a,"top")}}}),j=new (function(a,b){if(!b){b=a;a="DIV"}var c=new e.Class(e.Element.Wrappers[a]||e.Element,{initialize:function(f,d){this.key=f;var i=[{"class":"rui-"+f}];this instanceof e.Input||this instanceof e.Form||i.unshift(a);this.$super.apply(this,i);if(e.isString(d))d=e.$(d);if(d instanceof e.Element){this._=
8
- d._;if("$listeners"in d)d.$listeners=d.$listeners;d={}}this.setOptions(d,this);return e.Wrapper.Cache[e.$uid(this._)]=this},setOptions:function(f,d){d=d||this;e.Options.setOptions.call(this,e.Object.merge(f,eval("("+(d.get("data-"+this.key)||"{}")+")")));return this}});c=new e.Class(c,b);e.Observer.createShortcuts(c.prototype,c.EVENTS||[]);return c})("UL",{extend:{version:"2.2.0",EVENTS:A("select hide load disable enable add remove move"),Options:{idPrefix:"",tabsElement:null,resizeFx:"both",resizeDuration:400,
9
- scrollTabs:false,scrollDuration:400,selected:null,disabled:null,closable:false,loop:false,loopPause:true,url:false,cache:false,Xhr:null,Cookie:null},rescan:function(a){r(a||n).find(".rui-tabs,*[data-tabs]").each(function(b){b instanceof j||new j(b)})}},initialize:function(a,b){this.$super("tabs",a).setOptions(b).addClass("rui-tabs");this.isHarmonica=this._.tagName==="DL";this.isCarousel=this.hasClass("rui-tabs-carousel");this.isSimple=!this.isHarmonica&&!this.isCarousel;this.findTabs().initScrolls().findCurrent().setStyle("visibility:visible");
10
- this.options.disabled&&this.disable(this.options.disabled);this.options.loop&&this.startLoop()},select:function(a){return this.callTab(a,"select")},disable:function(a){return this.callTab(a,"disable")},enable:function(a){return this.callTab(a,"enable")},current:function(){return this.tabs.first("current")},enabled:function(){return this.tabs.filter("enabled")},callTab:function(a,b){h(E(a)?a:[a]).each(function(c){if(F(c))c=this.tabs[c];c&&c instanceof o&&c[b]()},this);return this},findTabs:function(){this.tabsList=
11
- this.isHarmonica?this:r(this.options.tabsElement)||this.first(".rui-tabs-list")||(this.first("UL")||g("UL").insertTo(this)).addClass("rui-tabs-list");this.tabs=h([]);this.tabsList.children(this.isHarmonica?"dt":null).map(function(c){this.tabs.push(new o(c,this))},this);for(var a=0,b=this.tabsList.get("childNodes");a<b.length;a++)b[a].nodeType==3&&this.tabsList._.removeChild(b[a]);return this}}),o=j.Tab=new w(s,{extend:{autoId:0},initialize:function(a,b){this.$super(a._);this.addClass("rui-tabs-tab");
12
- this.main=b;this.link=this.first("a");this.id=this.link.get("href").split("#")[1]||o.autoId++;this.panel=new H(this.findPanel(),this);this.current()&&this.select();b.options.closable&&this.link.insert(g("div",{"class":"rui-tabs-tab-close-icon",html:"&times;"}).onClick(h(this.remove).bind(this)));this.onClick(this._clicked)},select:function(){if(this.enabled()){var a=this.main.current();a&&a.removeClass("rui-tabs-current").fire("hide");this.addClass("rui-tabs-current");this.main.scrollToTab(this);
13
- this.panel.show()}return this.fire("select")},disable:function(){return this.addClass("rui-tabs-disabled").fire("disable")},enable:function(){return this.removeClass("rui-tabs-disabled").fire("enable")},disabled:function(){return!this.enabled()},enabled:function(){return!this.hasClass("rui-tabs-disabled")},current:function(){return this.hasClass("rui-tabs-current")},remove:function(a){a&&a.stop();if(this.current()){a=this.main.enabled();(a=a[a.indexOf(this)+1]||a[a.indexOf(this)-1])&&a.select()}this.main.tabs.splice(this.main.tabs.indexOf(this),
14
- 1);this.panel.remove();return this.$super().fire("remove")},_clicked:function(a){a.stop();return this.select()},findPanel:function(){var a=this.main,b=a.options.idPrefix+this.id;if(a.isHarmonica)a=(a=this.next())&&a._.tagName==="DD"?a:g("DD").insertTo(this,"after");else a=r(b)||g(a._.tagName==="UL"?"LI":"DIV").insertTo(a);return a.set("id",b)},width:function(){var a=this.next();return a?a.position().x-this.position().x:this.size().x+1}}),H=j.Panel=new w(s,{initialize:function(a,b){this.$super(a._);
15
- this.addClass("rui-tabs-panel");this.tab=b;this.id=this.get("id")},show:function(){return this.resizing(function(){this.tab.main.find(".rui-tabs-panel").each(function(a){a[a===this?"addClass":"removeClass"]("rui-tabs-current")},this)})},update:function(a){this.tab.current()?this.resizing(function(){s.prototype.update.call(this,a||"")}):this.$super(a||"");return this},lock:function(){this.insert(this.locker(),"top")},resizing:function(a){var b=this.tab.main;if(b.__working)return this.resizing.bind(this,
16
- a).delay(100);var c=b.options,f=b.first(".rui-tabs-panel.rui-tabs-current"),d=this,i=f!==d,q=this.first("div.rui-tabs-panel-locker");d.parent().hasClass("rui-tabs-resizer")&&d.insertTo(f.parent());if(c.resizeFx&&e.Fx&&f&&(i||q)){b.__working=true;var m=c.resizeFx==="both"&&q?"slide":c.resizeFx,k=c.resizeDuration;k=B.Durations[k]||k;c=m==="fade"?0:m==="slide"?k:k/2;q=k-c;m!=="slide"&&d.setStyle({opacity:0});k=b.isHarmonica&&i?0:f.size().y;a.call(this);a=d.size().y;var l=null,p=null,x=null;if(m!=="fade"&&
17
- k!==a){b._.style.height=b.size().y+"px";l=g("div",{"class":"rui-tabs-resizer",style:"height: "+k+"px"});if(b.isHarmonica&&i){f.addClass("rui-tabs-current");p=g("div",{"class":"rui-tabs-resizer"});p._.style.height=f.size().y+"px";x=function(){p.replace(f.removeClass("rui-tabs-current"))};f.wrap(p);l._.style.height="0px"}d.wrap(l);b._.style.height="auto"}else{rezise_duration=0;k=q}var y=0;i=function(){if(l){if(m=="both"&&!y)return y++;l.replace(d)}b.__working=false};p&&p.morph({height:"0px"},{duration:c,
18
- onFinish:x});l&&l.morph({height:a+"px"},{duration:c,onFinish:i});m!=="slide"&&d.morph.bind(d,{opacity:1},{duration:q,onFinish:i}).delay(c);!l&&m==="slide"&&i()}else a.call(this);return this},locker:function(){return this._locker||(this._locker=g("div",{"class":"rui-tabs-panel-locker"}).insert(new G(5)))}});j.include({next:function(){return this.pickTab(+1)},prev:function(){return this.pickTab(-1)},scrollLeft:function(){this.prevButton.hasClass("rui-tabs-scroller-disabled")||this[this.isCarousel?"prev":
19
- "justScroll"](+0.6);return this},scrollRight:function(){this.nextButton.hasClass("rui-tabs-scroller-disabled")||this[this.isCarousel?"next":"justScroll"](-0.6);return this},initScrolls:function(){if(this.scrollable=this.options.scrollTabs||this.isCarousel)this.buildScroller();return this},buildScroller:function(){if(!((this.prevButton=this.first(".rui-tabs-scroller-prev"))&&(this.nextButton=this.first(".rui-tabs-scroller-next")))){this.prevButton=g("div",{"class":"rui-tabs-scroller-prev",html:"&laquo;"});
20
- this.nextButton=g("div",{"class":"rui-tabs-scroller-next",html:"&raquo;"});g("div").insertTo(this.tabsList,"before").replace(g("div",{"class":"rui-tabs-scroller"}).insert([this.prevButton,this.nextButton,this.scroller=g("div",{"class":"rui-tabs-scroller-body"}).insert(this.tabsList)])).remove()}this.prevButton.onClick(h(this.scrollLeft).bind(this));this.nextButton.onClick(h(this.scrollRight).bind(this))},pickTab:function(a){var b=this.current();if(b&&b.enabled()){var c=this.enabled();(a=c[c.indexOf(b)+
21
- a])&&a.select()}},scrollToTab:function(a){if(this.scroller){for(var b=0,c=0;c<this.tabs.length;c++){b+=this.tabs[c].width();if(this.tabs[c]===a)break}c=this.scroller.size().x;var f=(this.isCarousel?c/2+a.width()/2:c)-b;if(!this.isCarousel){var d=t(this.tabsList.getStyle("left")||0,10);if(f>=d&&f<d+c-a.width())f=d;else if(d>-b&&d<=a.width()-b)f=a.width()-b}this.scrollTo(f)}},justScroll:function(a){if(!this.scroller)return this;var b=t(this.tabsList.getStyle("left")||0,10),c=this.scroller.size().x;
22
- this.scrollTo(b+c*a)},scrollTo:function(a){var b=this.scroller.size().x,c=this.tabs.map("width").sum();if(a<b-c)a=b-c;if(a>0)a=0;this.tabsList.morph({left:a+"px"},{duration:this.options.scrollDuration});this.checkScrollButtons(c,b,a)},checkScrollButtons:function(a,b,c){var f=false,d=false;if(this.isCarousel){a=this.enabled();if(b=a.first("current")){d=a.indexOf(b);f=d>0;d=d<a.length-1}}else{f=c!==0;d=c>b-a}this.prevButton[f?"removeClass":"addClass"]("rui-tabs-scroller-disabled");this.nextButton[d?
23
- "removeClass":"addClass"]("rui-tabs-scroller-disabled")}});j.include({findCurrent:function(){var a=this.enabled();(a=this.tabs[this.options.selected]||this.tabs[this.urlIndex()]||this.tabs[this.cookieIndex()]||a.first("current")||a[0])&&a.select();this.options.Cookie&&this.onSelect(h(z).curry(this.options.Cookie,this.tabs));return this},urlIndex:function(){var a=-1,b=n.location.href.split("#")[1];if(b)for(var c=0;c<this.tabs.length;c++)if(this.tabs[c].id==b){a=c;break}return a},cookieIndex:function(){var a=
24
- -1;if(this.options.Cookie)for(var b=u(),c=0;c<this.tabs.length;c++)if(b.include(this.tabs[c].id)){a=c;break}return a}});j.include({add:function(a,b,c){c=c||{};a=g(this.isHarmonica?"dt":"li").insert(g("a",{html:a,href:c.url||"#"+(c.id||"")})).insertTo(this.tabsList);a=new o(a,this);a.panel.update(b||"");this.tabs.push(a);a.fire("add");"position"in c&&this.move(a,c.position);return this},move:function(a,b){a=this.tabs[a]||a;if(this.tabs[b]&&this.tabs[b]!==a){this.tabs[b].insert(a,b===this.tabs.length-
25
- 1?"after":"before");this.isHarmonica&&a.insert(a.panel,"after");this.tabs.splice(this.tabs.indexOf(a),1);this.tabs.splice(b,0,a);a.fire("move",{index:b})}return this},remove:function(a){return this.callTab(a,"remove")}});var I=o.prototype.select;o.include({select:function(){if(this.dogPiling(arguments))return this;var a=I.apply(this,arguments),b=h(this.link.get("href")),c=this.main.options;if(b.includes("#"))b=c.url?c.url.replace("%{id}",b.split("#")[1]):null;if(b&&!this.request&&!(c.cache||this.cache)){this.panel.lock();
26
- try{this.request=(new e.Xhr(b,C.merge({method:"get"},c.Xhr))).onComplete(h(function(d){if(this.main.__working)return arguments.callee.bind(this,d).delay(100);this.panel.update(d.text);this.request=null;if(c.cache)this.cache=true;this.fire("load")}).bind(this)).send()}catch(f){if(!D.OLD)throw f;}}return a},dogPiling:function(a){if(this.main.__working){this.main.__timeout&&this.main.__timeout.cancel();this.main.__timeout=h(function(b){this.select.apply(this,b)}).bind(this,a).delay(100);return true}return this.main.__timeout=
27
- null}});j.include({startLoop:function(a){if(!a&&!this.options.loop)return this;if(this.options.loopPause){this._stopLoop=this._stopLoop||h(this.stopLoop).bind(this,true);this._startLoop=this._startLoop||h(this.startLoop).bind(this,a);this.forgetHovers().on({mouseover:this._stopLoop,mouseout:this._startLoop})}this.timer&&this.timer.stop();this.timer=h(function(){var b=this.enabled(),c=this.current();this.select(b[b.indexOf(c)+1]||b.first())}).bind(this).periodical(this.options.loop||a);return this},
28
- stopLoop:function(a,b){if(this.timer){this.timer.stop();this.timer=null}!b&&this._startLoop&&this.forgetHovers()},forgetHovers:function(){return this.stopObserving("mouseover",this._stopLoop).stopObserving("mouseout",this._startLoop)}});r(n).onReady(function(){j.rescan()});(function(){var a=n.createElement("style"),b=n.createTextNode("div.rui-spinner,div.rui-spinner div{margin:0;padding:0;border:none;background:none;list-style:none;font-weight:normal;float:none;display:inline-block; *display:inline; *zoom:1;border-radius:.12em;-moz-border-radius:.12em;-webkit-border-radius:.12em}div.rui-spinner{text-align:center;white-space:nowrap;background:#EEE;border:1px solid #DDD;height:1.2em;padding:0 .2em}div.rui-spinner div{width:.4em;height:70%;background:#BBB;margin-left:1px}div.rui-spinner div:first-child{margin-left:0}div.rui-spinner div.glowing{background:#777}.rui-tabs,.rui-tabs-list,.rui-tabs-tab,.rui-tabs-panel,.rui-tabs-scroll-left,.rui-tabs-scroll-right,.rui-tabs-scroll-body,.rui-tabs-panel-locker,.rui-tabs-resizer{margin:0;padding:0;background:none;border:none;list-style:none;display:block;width:auto;height:auto}.rui-tabs{display:block;visibility:hidden;border-bottom:1px solid #CCC}.rui-tabs-resizer{overflow:hidden}.rui-tabs-list{display:block;position:relative;padding:0 .5em;border-bottom:1px solid #CCC;white-space:nowrap}.rui-tabs-list .rui-tabs-tab,.rui-tabs-tab *,.rui-tabs-tab *:hover{display:inline-block; *display:inline; *zoom:1;cursor:pointer;text-decoration:none;vertical-align:center}.rui-tabs-list .rui-tabs-tab{vertical-align:bottom;margin-right:.1em}.rui-tabs-tab a{outline:none;position:relative;border:1px solid #CCC;background:#DDD;color:#444;padding:.3em 1em;border-radius:.3em;-moz-border-radius:.3em;-webkit-border-radius:.3em;border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:0;-moz-border-radius-bottomright:0;-webkit-border-bottom-left-radius:0;-webkit-border-bottom-right-radius:0}.rui-tabs-tab a:hover{border-color:#CCC;background:#EEE}.rui-tabs-list .rui-tabs-current a,.rui-tabs-list .rui-tabs-current a:hover{font-weight:bold;color:#000;background:#FFF;border-bottom:1px solid #FFF;border-top-width:2px;padding-top:.34em;padding-bottom:.34em;top:1px}.rui-tabs-tab a img{border:none;opacity:.6;filter:alpha(opacity=60)}.rui-tabs-tab a:hover img,.rui-tabs-list .rui-tabs-current a img{opacity:1;filter:alpha(opacity=100)}.rui-tabs-disabled a,.rui-tabs-disabled a:hover{background:#EEE;border-color:#DDD;color:#AAA;cursor:default}.rui-tabs-disabled a img,.rui-tabs-disabled a:hover img{opacity:.5;filter:alpha(opacity=50)}.rui-tabs-tab-close-icon{display:inline-block; *display:inline; *zoom:1;margin-right:-0.5em;margin-left:0.5em;cursor:pointer;opacity:0.5;filter:alpha(opacity=50)}.rui-tabs-tab-close-icon:hover{opacity:1;filter:alpha(opacity=100);color:#B00;text-shadow:#888 .15em .15em .2em}.rui-tabs-panel{display:none;position:relative;min-height:4em;padding:.5em 0}.rui-tabs-current{display:block}.rui-tabs-scroller{position:relative;padding:0 1.4em}.rui-tabs-scroller-prev,.rui-tabs-scroller-next{width:1.1em;text-align:center;background:#EEE;color:#666;cursor:pointer;border:1px solid #CCC;border-radius:.2em;-moz-border-radius:.2em;-webkit-border-radius:.2em;position:absolute;bottom:0px;left:0px;padding:0.3em 0;user-select:none;-moz-user-select:none;-webkit-user-select:none}.rui-tabs-scroller-prev:hover,.rui-tabs-scroller-next:hover{color:#000;background:#DDD;border-color:#AAA}.rui-tabs-scroller-prev:active,.rui-tabs-scroller-next:active{background:#eee;border-color:#ccc}.rui-tabs-scroller-next{left:auto;right:0px}.rui-tabs-scroller-disabled,.rui-tabs-scroller-disabled:hover{cursor:default;background:#DDD;border-color:#DDD;color:#AAA}.rui-tabs-scroller-body{overflow:hidden;width:100%;position:relative}.rui-tabs-scroller .rui-tabs-list{padding-left:0;padding-right:0;width:9999em;z-index:10}.rui-tabs-panel-locker{position:absolute;top:0px;left:0px;opacity:0.5;filter:alpha(opacity=50);background:#CCC;width:100%;height:100%;text-align:center}.rui-tabs-panel-locker .rui-spinner{position:absolute;left:44%;top:44%;background:none;border:none;height:2em}.rui-tabs-panel-locker .rui-spinner div{background:#666;width:.65em;margin-left:.15em}.rui-tabs-panel-locker .rui-spinner div.glowing{background:#000}.rui-tabs-carousel .rui-tabs-list{border:none}.rui-tabs-carousel .rui-tabs-tab a,.rui-tabs-carousel .rui-tabs-scroller .rui-tabs-scroller-prev,.rui-tabs-carousel .rui-tabs-scroller .rui-tabs-scroller-next{height:6em;line-height:6em;padding:0;border-bottom:1px solid #ccc;border-radius:.25em;-moz-border-radius:.25em;-webkit-border-radius:.25em}.rui-tabs-carousel .rui-tabs-tab{margin-right:3px}.rui-tabs-carousel .rui-tabs-tab a img{border:1px solid #CCC;vertical-align:middle;margin:.4em;padding:0;border-radius:0;-moz-border-radius:0;-webkit-border-radius:0}.rui-tabs-carousel .rui-tabs-list .rui-tabs-current a{border-width:1px;border-color:#AAA;padding:0;top:auto}.rui-tabs-carousel .rui-tabs-list .rui-tabs-current a img{border-color:#bbb}.rui-tabs-carousel .rui-tabs-panel{text-align:center}dl.rui-tabs{border:none}dt.rui-tabs-tab,dt.rui-tabs-tab a,dt.rui-tabs-tab a:hover{display:block;float:none}dt.rui-tabs-tab a,dt.rui-tabs-tab a:hover{padding:.2em 1em;border:1px solid #ccc;border-radius:.25em;-moz-border-radius:.3em;-webkit-border-radius:.3em}dl.rui-tabs dt.rui-tabs-current a{background:#EEE;border-bottom-left-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:0;-moz-border-radius-bottomright:0;-webkit-border-bottom-left-radius:0;-webkit-border-bottom-right-radius:0}dl.rui-tabs dd.rui-tabs-current+dt.rui-tabs-tab a{border-top-left-radius:0;border-top-right-radius:0;-moz-border-radius-topleft:0;-moz-border-radius-topright:0;-webkit-border-top-left-radius:0;-webkit-border-top-right-radius:0}");
29
- a.type="text/css";if(a.styleSheet)a.styleSheet.cssText=b.nodeValue;else a.appendChild(b);n.getElementsByTagName("head")[0].appendChild(a)})();return j}(document,parseInt,RightJS);
File without changes
@@ -1,621 +0,0 @@
1
- /**
2
- * RightJS-UI: Autocompleter
3
- * http://rightjs.org/ui/autocompleter
4
- *
5
- * Copyright (C) 2010 Nikolay Nemshilov
6
- */
7
- var Autocompleter = RightJS.Autocompleter = (function(document, RightJS) {
8
- /**
9
- * This module defines the basic widgets constructor
10
- * it creates an abstract proxy with the common functionality
11
- * which then we reuse and override in the actual widgets
12
- *
13
- * Copyright (C) 2010-2011 Nikolay Nemshilov
14
- */
15
-
16
- /**
17
- * Autocompleter initializer
18
- *
19
- * Copyright (C) 2010 Nikolay Nemshilov
20
- */
21
- var R = RightJS,
22
- $ = RightJS.$,
23
- $w = RightJS.$w,
24
- $E = RightJS.$E,
25
- Xhr = RightJS.Xhr,
26
- RegExp = RightJS.RegExp,
27
- isArray = RightJS.isArray;
28
-
29
-
30
-
31
-
32
-
33
-
34
-
35
-
36
- /**
37
- * The widget units constructor
38
- *
39
- * @param String tag-name or Object methods
40
- * @param Object methods
41
- * @return Widget wrapper
42
- */
43
- function Widget(tag_name, methods) {
44
- if (!methods) {
45
- methods = tag_name;
46
- tag_name = 'DIV';
47
- }
48
-
49
- /**
50
- * An Abstract Widget Unit
51
- *
52
- * Copyright (C) 2010 Nikolay Nemshilov
53
- */
54
- var AbstractWidget = new RightJS.Class(RightJS.Element.Wrappers[tag_name] || RightJS.Element, {
55
- /**
56
- * The common constructor
57
- *
58
- * @param Object options
59
- * @param String optional tag name
60
- * @return void
61
- */
62
- initialize: function(key, options) {
63
- this.key = key;
64
- var args = [{'class': 'rui-' + key}];
65
-
66
- // those two have different constructors
67
- if (!(this instanceof RightJS.Input || this instanceof RightJS.Form)) {
68
- args.unshift(tag_name);
69
- }
70
- this.$super.apply(this, args);
71
-
72
- if (RightJS.isString(options)) {
73
- options = RightJS.$(options);
74
- }
75
-
76
- // if the options is another element then
77
- // try to dynamically rewrap it with our widget
78
- if (options instanceof RightJS.Element) {
79
- this._ = options._;
80
- if ('$listeners' in options) {
81
- options.$listeners = options.$listeners;
82
- }
83
- options = {};
84
- }
85
- this.setOptions(options, this);
86
-
87
- return (RightJS.Wrapper.Cache[RightJS.$uid(this._)] = this);
88
- },
89
-
90
- // protected
91
-
92
- /**
93
- * Catches the options
94
- *
95
- * @param Object user-options
96
- * @param Element element with contextual options
97
- * @return void
98
- */
99
- setOptions: function(options, element) {
100
- element = element || this;
101
- RightJS.Options.setOptions.call(this,
102
- RightJS.Object.merge(options, eval("("+(
103
- element.get('data-'+ this.key) || '{}'
104
- )+")"))
105
- );
106
- return this;
107
- }
108
- });
109
-
110
- /**
111
- * Creating the actual widget class
112
- *
113
- */
114
- var Klass = new RightJS.Class(AbstractWidget, methods);
115
-
116
- // creating the widget related shortcuts
117
- RightJS.Observer.createShortcuts(Klass.prototype, Klass.EVENTS || []);
118
-
119
- return Klass;
120
- }
121
-
122
-
123
- /**
124
- * A shared module to create textual spinners
125
- *
126
- * Copyright (C) 2010-2011 Nikolay Nemshilov
127
- */
128
- var Spinner = new RightJS.Class(RightJS.Element, {
129
- /**
130
- * Constructor
131
- *
132
- * @param Number optional spinner size (4 by default)
133
- * @return void
134
- */
135
- initialize: function(size) {
136
- this.$super('div', {'class': 'rui-spinner'});
137
- this.dots = [];
138
-
139
- for (var i=0; i < (size || 4); i++) {
140
- this.dots.push(new RightJS.Element('div'));
141
- }
142
-
143
- this.dots[0].addClass('glowing');
144
- this.insert(this.dots);
145
- RightJS(this.shift).bind(this).periodical(300);
146
- },
147
-
148
- /**
149
- * Shifts the spinner elements
150
- *
151
- * @return void
152
- */
153
- shift: function() {
154
- if (this.visible()) {
155
- var dot = this.dots.pop();
156
- this.dots.unshift(dot);
157
- this.insert(dot, 'top');
158
- }
159
- }
160
- });
161
-
162
-
163
- /**
164
- * A shared module that toggles a widget visibility status
165
- * in a uniformed way according to the options settings
166
- *
167
- * Copyright (C) 2010-2011 Nikolay Nemshilov
168
- */
169
- var Toggler = {
170
- /**
171
- * Shows the element
172
- *
173
- * @param String fx-name
174
- * @param Object fx-options
175
- * @return Element this
176
- */
177
- show: function(fx_name, fx_options) {
178
- this.constructor.current = this;
179
- return Toggler_toggle(this, 'show', fx_name, fx_options);
180
- },
181
-
182
- /**
183
- * Hides the element
184
- *
185
- * @param String fx-name
186
- * @param Object fx-options
187
- * @return Element this
188
- */
189
- hide: function(fx_name, fx_options) {
190
- this.constructor.current = null;
191
- return Toggler_toggle(this, 'show', fx_name, fx_options);
192
- },
193
-
194
- /**
195
- * Toggles the widget at the given element
196
- *
197
- * @param Element the related element
198
- * @param String position right/bottom (bottom is the default)
199
- * @param Boolean marker if the element should be resized to the element size
200
- * @return Widget this
201
- */
202
- showAt: function(element, where, resize) {
203
- this.hide(null).shownAt = element = RightJS.$(element);
204
-
205
- // moves this element at the given one
206
- Toggler_re_position.call(this, element, where, resize);
207
-
208
- return this.show();
209
- },
210
-
211
- /**
212
- * Toggles the widget at the given element
213
- *
214
- * @param Element the related element
215
- * @param String position top/left/right/bottom (bottom is the default)
216
- * @param Boolean marker if the element should be resized to the element size
217
- * @return Widget this
218
- */
219
- toggleAt: function(element, where, resize) {
220
- return this.hidden() ? this.showAt(element, where, resize) : this.hide();
221
- }
222
- };
223
-
224
-
225
- /**
226
- * toggles the element's state according to the current settings
227
- *
228
- * @param event String 'show' or 'hide' the event name
229
- * @param String an optional fx-name
230
- * @param Object an optional fx-options hash
231
- * @return void
232
- */
233
- function Toggler_toggle(element, event, fx_name, fx_options) {
234
- if (RightJS.Fx) {
235
- if (fx_name === undefined) {
236
- fx_name = element.options.fxName;
237
-
238
- if (fx_options === undefined) {
239
- fx_options = {
240
- duration: element.options.fxDuration,
241
- onFinish: RightJS(element.fire).bind(element, event)
242
- };
243
-
244
- // hide on double time
245
- if (event === 'hide') {
246
- fx_options.duration = (RightJS.Fx.Durations[fx_options.duration] ||
247
- fx_options.duration) / 2;
248
- }
249
- }
250
- }
251
- }
252
-
253
- // manually trigger the event if no fx were specified
254
- if (!RightJS.Fx || !fx_name) { element.fire(event); }
255
-
256
- return element.$super(fx_name, fx_options);
257
- }
258
-
259
- /**
260
- * Relatively positions the current element
261
- * against the specified one
262
- *
263
- * NOTE: this function is called in a context
264
- * of another element
265
- *
266
- * @param Element the target element
267
- * @param String position 'right' or 'bottom'
268
- * @param Boolean if `true` then the element size will be adjusted
269
- * @return void
270
- */
271
- function Toggler_re_position(element, where, resize) {
272
- var anchor = this.reAnchor || (this.reAnchor =
273
- new RightJS.Element('div', {'class': 'rui-re-anchor'}))
274
- .insert(this),
275
-
276
- pos = anchor.insertTo(element, 'after').position(),
277
- dims = element.dimensions(), target = this,
278
-
279
- border_top = parseInt(element.getStyle('borderTopWidth')),
280
- border_left = parseInt(element.getStyle('borderLeftWidth')),
281
- border_right = parseInt(element.getStyle('borderRightWidth')),
282
- border_bottom = parseInt(element.getStyle('borderBottomWidth')),
283
-
284
- top = dims.top - pos.y + border_top,
285
- left = dims.left - pos.x + border_left,
286
- width = dims.width - border_left - border_right,
287
- height = dims.height - border_top - border_bottom;
288
-
289
- // making the element to appear so we could read it's sizes
290
- target.setStyle('visibility:hidden').show(null);
291
-
292
- if (where === 'right') {
293
- left += width - target.size().x;
294
- } else { // bottom
295
- top += height;
296
- }
297
-
298
- target.moveTo(left, top);
299
-
300
- if (resize) {
301
- if (where === 'left' || where === 'right') {
302
- target.setHeight(height);
303
- } else {
304
- target.setWidth(width);
305
- }
306
- }
307
-
308
- // rolling the invisibility back
309
- target.setStyle('visibility:visible').hide(null);
310
- }
311
-
312
- /**
313
- * The RightJS UI Autocompleter unit base class
314
- *
315
- * Copyright (C) 2009-2011 Nikolay Nemshilov
316
- */
317
- var Autocompleter = new Widget('UL', {
318
- include: Toggler,
319
-
320
- extend: {
321
- version: '2.2.0',
322
-
323
- EVENTS: $w('show hide update load select done'),
324
-
325
- Options: {
326
- url: document.location.href,
327
- param: 'search',
328
- method: 'get',
329
-
330
- minLength: 1, // the minimal length when it starts work
331
- threshold: 200, // the typing pause threshold
332
-
333
- cache: true, // use the results cache
334
- local: null, // an optional local search results list
335
-
336
- fxName: 'slide', // list appearance fx name
337
- fxDuration: 'short', // list appearance fx duration
338
-
339
- spinner: 'native', // spinner element reference
340
-
341
- cssRule: 'input[data-autocompleter]' // the auto-initialization css-rule
342
- }
343
- },
344
-
345
- /**
346
- * basic constructor
347
- *
348
- * @param mixed the input element reference, a string id or the element instance
349
- * @param Object options
350
- */
351
- initialize: function(input, options) {
352
- this.input = $(input); // KEEP IT before the super call
353
-
354
- this
355
- .$super('autocompleter', options)
356
- .addClass('rui-dd-menu')
357
- .onMousedown(this.clicked);
358
-
359
- this.input.autocompleter = this;
360
- },
361
-
362
- /**
363
- * Destructor
364
- *
365
- * @return Autocompleter this
366
- */
367
- destroy: function() {
368
- delete(this.input.autocompleter);
369
- return this;
370
- },
371
-
372
- /**
373
- * picks the next item on the list
374
- *
375
- * @return Autocompleter this
376
- */
377
- prev: function() {
378
- return this.pick('prev');
379
- },
380
-
381
- /**
382
- * picks the next item on the list
383
- *
384
- * @return Autocompleter this
385
- */
386
- next: function() {
387
- return this.pick('next');
388
- },
389
-
390
- /**
391
- * triggers the done event, sets up the value and closes the list
392
- *
393
- * @return Autocompleter this
394
- */
395
- done: function(current) {
396
- current = current || this.first('li.current');
397
-
398
- if (current) {
399
- current.radioClass('current');
400
- this.input.setValue(R(current.html()).stripTags());
401
- this.fire('done');
402
- }
403
-
404
- return this.hide();
405
- },
406
-
407
- // protected
408
-
409
- // preprocessing the urls a bit
410
- setOptions: function(options) {
411
- this.$super(options, this.input);
412
-
413
- options = this.options;
414
-
415
- // building the correct url template with a placeholder
416
- if (!R(options.url).includes('%{search}')) {
417
- options.url += (R(options.url).includes('?') ? '&' : '?') + options.param + '=%{search}';
418
- }
419
- },
420
-
421
- // works with the 'prev' and 'next' methods
422
- pick: function(which_one) {
423
- var items = this.children(),
424
- current = items.first('hasClass', 'current'),
425
- index = items.indexOf(current);
426
-
427
- if (which_one == 'prev') {
428
- current = index < 1 ? items.last() : items[index < 0 ? 0 : (index-1)];
429
- } else if (which_one == 'next') {
430
- current = index < 0 || index == (items.length - 1) ?
431
- items.first() : items[index + 1];
432
- }
433
-
434
- return this.fire('select', {item: current.radioClass('current')});
435
- },
436
-
437
- // handles mouse clicks on the list element
438
- clicked: function(event) {
439
- this.done(event.stop().find('li'));
440
- },
441
-
442
- // handles the key-press events
443
- keypressed: function(event) {
444
- if (this.input.value().length >= this.options.minLength) {
445
- if (this.timeout) {
446
- this.timeout.cancel();
447
- }
448
- this.timeout = R(this.trigger).bind(this).delay(this.options.threshold);
449
- } else {
450
- return this.hide();
451
- }
452
- },
453
-
454
- // triggers the actual action
455
- trigger: function() {
456
- this.timeout = null;
457
-
458
- this.cache = this.cache || {};
459
- var search = this.input.value(), options = this.options;
460
-
461
- if (search.length < options.minLength) { return this.hide(); }
462
-
463
- if (this.cache[search]) {
464
- this.suggest(this.cache[search], search);
465
- } else if (isArray(options.local)) {
466
- this.suggest(this.findLocal(search), search);
467
- } else {
468
- this.request = Xhr.load(options.url.replace('%{search}', encodeURIComponent(search)), {
469
- method: options.method,
470
- spinner: this.getSpinner(),
471
- onComplete: R(function(response) {
472
- this.fire('load').suggest(response.text, search);
473
- }).bind(this)
474
- });
475
- }
476
- },
477
-
478
- // updates the suggestions list
479
- suggest: function(result_text, search) {
480
- // saving the result in cache
481
- if (this.options.cache) {
482
- this.cache[search] = result_text;
483
- }
484
-
485
- if (!R(result_text).blank()) {
486
- this.update(result_text.replace(/<ul[^>]*>|<\/ul>/im, ''));
487
- this.fire('update');
488
- if (!this._connected || this.hidden()) {
489
- this.showAt(this.input, 'bottom', 'resize');
490
- this._connected = true;
491
- }
492
- } else {
493
- this.hide();
494
- }
495
-
496
- return this;
497
- },
498
-
499
- // performs the locals search
500
- findLocal: function(search) {
501
- var regexp = new RegExp("("+RegExp.escape(search)+")", 'ig');
502
-
503
- return R(this.options.local).map(function(option) {
504
- if (option.match(regexp)) {
505
- return '<li>'+ option.replace(regexp, '<strong>$1</strong>') +'</li>';
506
- }
507
- }).compact().join('');
508
- },
509
-
510
- // builds a native textual spinner if necessary
511
- getSpinner: function() {
512
- var options = this.options, spinner = options.spinner;
513
-
514
- if (spinner == 'native') {
515
- spinner = options.spinner = new Spinner(3).insertTo(this);
516
- spinner.addClass('rui-autocompleter-spinner');
517
- }
518
-
519
- // positioning the native spinner
520
- if (spinner instanceof Spinner) {
521
- Toggler_re_position.call(spinner, this.input, 'right', 'resize');
522
- }
523
-
524
- return spinner;
525
- }
526
- });
527
-
528
-
529
- /**
530
- * The document events hooking
531
- *
532
- * Copyright (C) 2009-2010 Nikolay Nemshilov
533
- */
534
- $(document).on({
535
- /**
536
- * Initializes autocompleters on-focus
537
- *
538
- * @param Event focus
539
- * @return void
540
- */
541
- focus: function(event) {
542
- var target = event.target;
543
-
544
- if (target && (target instanceof RightJS.Element) && (target.autocompleter || target.match(Autocompleter.Options.cssRule))) {
545
- if (!target.autocompleter) {
546
- new Autocompleter(target);
547
- }
548
- }
549
- },
550
-
551
- /**
552
- * Hides autocompleters on-blur
553
- *
554
- * @param Event blur
555
- * @return void
556
- */
557
- blur: function(event) {
558
- var autocompleter = event.target ? event.target.autocompleter : null;
559
-
560
- if (autocompleter && autocompleter.visible()) {
561
- autocompleter.hide();
562
- }
563
- },
564
-
565
- /**
566
- * Catching the basic keyboard events
567
- * to navigate through the autocompletion list
568
- *
569
- * @param Event keydown
570
- * @return void
571
- */
572
- keydown: function(event) {
573
- var autocompleter = event.target ? event.target.autocompleter : null;
574
-
575
- if (autocompleter && autocompleter.visible()) {
576
- var method_name = ({
577
- 27: 'hide', // Esc
578
- 38: 'prev', // Up
579
- 40: 'next', // Down
580
- 13: 'done' // Enter
581
- })[event.keyCode];
582
-
583
- if (method_name) {
584
- event.stop();
585
- autocompleter[method_name]();
586
- }
587
- }
588
- },
589
-
590
- /**
591
- * Catches the input fields keyup events
592
- * and tries to make the autocompleter to show some suggestions
593
- *
594
- * @param Event keyup
595
- * @return void
596
- */
597
- keyup: function(event) {
598
- var autocompleter = event.target ? event.target.autocompleter : null;
599
-
600
- if (autocompleter && !R([9, 27, 37, 38, 39, 40, 13]).include(event.keyCode)) {
601
- autocompleter.keypressed(event);
602
- }
603
- }
604
- });
605
- (function() {
606
- var style = document.createElement('style'),
607
- rules = document.createTextNode(" *.rui-dd-menu, *.rui-dd-menu li{margin:0;padding:0;border:none;background:none;list-style:none;font-weight:normal;float:none} *.rui-dd-menu{display:none;position:absolute;z-index:9999;background:white;border:1px solid #BBB;border-radius:.2em;-moz-border-radius:.2em;-webkit-border-radius:.2em;box-shadow:#DDD .2em .2em .4em;-moz-box-shadow:#DDD .2em .2em .4em;-webkit-box-shadow:#DDD .2em .2em .4em} *.rui-dd-menu li{padding:.2em .4em;border-top:none;border-bottom:none;cursor:pointer} *.rui-dd-menu li.current{background:#DDD} *.rui-dd-menu li:hover{background:#EEE}dl.rui-dd-menu dt{padding:.3em .5em;cursor:default;font-weight:bold;font-style:italic;color:#444;background:#EEE}dl.rui-dd-menu dd li{padding-left:1.5em}div.rui-spinner,div.rui-spinner div{margin:0;padding:0;border:none;background:none;list-style:none;font-weight:normal;float:none;display:inline-block; *display:inline; *zoom:1;border-radius:.12em;-moz-border-radius:.12em;-webkit-border-radius:.12em}div.rui-spinner{text-align:center;white-space:nowrap;background:#EEE;border:1px solid #DDD;height:1.2em;padding:0 .2em}div.rui-spinner div{width:.4em;height:70%;background:#BBB;margin-left:1px}div.rui-spinner div:first-child{margin-left:0}div.rui-spinner div.glowing{background:#777}div.rui-re-anchor{margin:0;padding:0;background:none;border:none;float:none;display:inline;position:absolute;z-index:9999}.rui-autocompleter{border-top-color:#DDD !important;border-top-left-radius:0 !important;border-top-right-radius:0 !important;-moz-border-radius-topleft:0 !important;-moz-border-radius-topright:0 !important;-webkit-border-top-left-radius:0 !important;-webkit-border-top-right-radius:0 !important}.rui-autocompleter-spinner{border:none !important;background:none !important;position:absolute;z-index:9999}.rui-autocompleter-spinner div{margin-top:.2em !important; *margin-top:0.1em !important}");
608
-
609
- style.type = 'text/css';
610
-
611
- if(style.styleSheet) {
612
- style.styleSheet.cssText = rules.nodeValue;
613
- } else {
614
- style.appendChild(rules);
615
- }
616
-
617
- document.getElementsByTagName('head')[0].appendChild(style);
618
- })();
619
-
620
- return Autocompleter;
621
- })(document, RightJS);