hobo 0.7.4 → 0.7.5
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.
- data/bin/hobo +0 -6
- data/hobo_files/plugin/CHANGES.txt +103 -0
- data/hobo_files/plugin/Rakefile +2 -0
- data/hobo_files/plugin/generators/hobo_rapid/hobo_rapid_generator.rb +1 -0
- data/hobo_files/plugin/generators/hobo_rapid/templates/IE7.js +2 -0
- data/hobo_files/plugin/generators/hobo_rapid/templates/hobo-rapid.js +28 -12
- data/hobo_files/plugin/generators/hobo_rapid/templates/themes/clean/public/stylesheets/{application.css → clean.css} +10 -9
- data/hobo_files/plugin/generators/hobo_rapid/templates/themes/clean/public/stylesheets/rapid-ui.css +1 -1
- data/hobo_files/plugin/generators/hobo_rapid/templates/themes/clean/views/{application.dryml → clean.dryml} +0 -0
- data/hobo_files/plugin/init.rb +7 -3
- data/hobo_files/plugin/lib/hobo.rb +3 -1
- data/hobo_files/plugin/lib/hobo/bundle.rb +24 -14
- data/hobo_files/plugin/lib/hobo/dryml.rb +5 -1
- data/hobo_files/plugin/lib/hobo/dryml/dryml_builder.rb +1 -1
- data/hobo_files/plugin/lib/hobo/dryml/parser/base_parser.rb +11 -10
- data/hobo_files/plugin/lib/hobo/dryml/parser/document.rb +37 -10
- data/hobo_files/plugin/lib/hobo/dryml/template.rb +5 -22
- data/hobo_files/plugin/lib/hobo/dryml/template_environment.rb +1 -1
- data/hobo_files/plugin/lib/hobo/dryml/template_handler.rb +10 -2
- data/hobo_files/plugin/lib/hobo/hobo_helper.rb +7 -0
- data/hobo_files/plugin/lib/hobo/model.rb +18 -13
- data/hobo_files/plugin/lib/hobo/model_controller.rb +45 -54
- data/hobo_files/plugin/lib/hobo/model_router.rb +8 -1
- data/hobo_files/plugin/lib/hobo/scopes.rb +3 -4
- data/hobo_files/plugin/lib/hobo/scopes/automatic_scopes.rb +3 -0
- data/hobo_files/plugin/taglib-docs/core.markdown +165 -0
- data/hobo_files/plugin/taglib-docs/rapid.markdown +677 -0
- data/hobo_files/plugin/taglib-docs/rapid_document_tags.markdown +240 -0
- data/hobo_files/plugin/taglib-docs/rapid_editing.markdown +418 -0
- data/hobo_files/plugin/taglib-docs/rapid_forms.markdown +562 -0
- data/hobo_files/plugin/taglib-docs/rapid_generics.markdown +187 -0
- data/hobo_files/plugin/taglib-docs/rapid_navigation.markdown +214 -0
- data/hobo_files/plugin/taglib-docs/rapid_pages.markdown +530 -0
- data/hobo_files/plugin/taglib-docs/rapid_plus.markdown +65 -0
- data/hobo_files/plugin/taglib-docs/rapid_support.markdown +50 -0
- data/hobo_files/plugin/taglib-docs/rapid_user_pages.markdown +129 -0
- data/hobo_files/plugin/taglibs/rapid.dryml +2 -2
- data/hobo_files/plugin/taglibs/rapid_forms.dryml +7 -22
- data/hobo_files/plugin/taglibs/rapid_generics.dryml +14 -12
- data/hobo_files/plugin/taglibs/rapid_navigation.dryml +5 -4
- data/hobo_files/plugin/taglibs/rapid_pages.dryml +5 -1
- data/hobo_files/plugin/tasks/fix_dryml.rake +1 -1
- data/hobo_files/plugin/tasks/generate_tag_reference.rb +162 -0
- data/hobo_files/plugin/tasks/hobo_tasks.rake +17 -0
- metadata +46 -5
data/bin/hobo
CHANGED
@@ -78,12 +78,6 @@ Dir.chdir(app_path) do
|
|
78
78
|
|
79
79
|
FileUtils.touch("public/stylesheets/application.css")
|
80
80
|
|
81
|
-
puts "\nInstalling will_paginate\n"
|
82
|
-
command(plugin, "install svn://errtheblog.com/svn/plugins/will_paginate")
|
83
|
-
|
84
|
-
puts "\nInstalling hobofields\n"
|
85
|
-
command("svn export svn://hobocentral.net/hobofields/tags/rel_#{HOBO_VERSION} vendor/plugins/hobofields")
|
86
|
-
|
87
81
|
if hobo_svn
|
88
82
|
puts "\nInstalling Hobo plugin via svn checkout...\n"
|
89
83
|
command("svn co #{HOBO_REPO} vendor/plugins/hobo")
|
@@ -1,3 +1,106 @@
|
|
1
|
+
== Hobo 0.7.5 ===
|
2
|
+
|
3
|
+
Restructuring the git repo -- all the different gems/plugins live
|
4
|
+
in the same repo now (github.com/tablatom/hobo)
|
5
|
+
|
6
|
+
Change to themes - the stylesheet and tablib are now called
|
7
|
+
(e.g. for the 'clean' theme) clean.css and clean.dryml
|
8
|
+
|
9
|
+
New rake task generate_tag_reference. Creates simple HTML reference
|
10
|
+
docs, including any inline documentation comments (found
|
11
|
+
immediately above the <def>)
|
12
|
+
|
13
|
+
ModelController
|
14
|
+
|
15
|
+
Made it possible to have a custom #permission_denined and
|
16
|
+
#not_found in ApplicationController
|
17
|
+
|
18
|
+
Improved logic for figuring out redirect after destroy
|
19
|
+
|
20
|
+
Fix to bug where we would turn pagination off when we shouldn't
|
21
|
+
|
22
|
+
We now have a list of mime-types that we *don't* paginate for
|
23
|
+
(can be extended)
|
24
|
+
|
25
|
+
hobo_index now silently skips pagination when the passed finder doesn't support it
|
26
|
+
|
27
|
+
Fix to auto_actions :except => :collections
|
28
|
+
|
29
|
+
Fix to rendering permission denied errors
|
30
|
+
|
31
|
+
|
32
|
+
Fixes for IE6
|
33
|
+
|
34
|
+
The rapid-pages now include the fabulous IE7.js when the client
|
35
|
+
is IE6.
|
36
|
+
|
37
|
+
http://dean.edwards.name/IE7/
|
38
|
+
|
39
|
+
The clean theme now works much better in IE6.
|
40
|
+
|
41
|
+
hobo-rapid.js -- fix displaying the empty-message after a removeButton
|
42
|
+
|
43
|
+
|
44
|
+
Hobo models
|
45
|
+
|
46
|
+
No longer defines Model[...] (in Hobo use Model.named(foo) instead)
|
47
|
+
|
48
|
+
Fix to MyHoboModel.defined_scopes sometimes returning nil
|
49
|
+
|
50
|
+
Allowing belongs_to and has_one associations to be set by name
|
51
|
+
during mass-assignment
|
52
|
+
|
53
|
+
e.g. person.attributes = { :department => 'Sales' }
|
54
|
+
|
55
|
+
Automatic scopes -- give up silently if there's a problem with the DB
|
56
|
+
|
57
|
+
Fix to :managed => true option on has_many. No longer requires
|
58
|
+
the through association to be declared first.
|
59
|
+
|
60
|
+
Auto-completers are now working again. The tag to use is
|
61
|
+
<name-one>. Should be a how-to for this availabe soon.
|
62
|
+
|
63
|
+
In-place-edits are working again
|
64
|
+
|
65
|
+
New controller method call_dryml_tag (added by DRYML template
|
66
|
+
handler). Calls a tag and returns the result as a string.
|
67
|
+
|
68
|
+
Fix to <after-submit stay-here> following a part update
|
69
|
+
|
70
|
+
Bundles -- fixes to class renaming
|
71
|
+
|
72
|
+
<remote-method-button> is working again
|
73
|
+
|
74
|
+
Refactored the DRYML parser to make it easier to parse DRYML in other contexts
|
75
|
+
|
76
|
+
Rapid:
|
77
|
+
|
78
|
+
Improvements to wording on index-page
|
79
|
+
|
80
|
+
Display the users name, not login in the account-nav
|
81
|
+
|
82
|
+
Small tweaks to generic tags
|
83
|
+
|
84
|
+
Fix: The <view> for various types was reverting to a plain String view
|
85
|
+
|
86
|
+
|
87
|
+
Switching to dependency on hobofields and will_paginate as gems rather than plugins
|
88
|
+
|
89
|
+
Fix: DRYML parser works again with REXML versions back to 3.1.4
|
90
|
+
|
91
|
+
Fix: Hobo No longer depends on redcloth unless you're using markdown
|
92
|
+
|
93
|
+
Routing
|
94
|
+
|
95
|
+
Recover from ActiveRecord::StatementInvalid (routes may not be
|
96
|
+
declared). Without this you sometimes can't even run rake if
|
97
|
+
something is invalid
|
98
|
+
|
99
|
+
Don't do routing (and hence load models) during
|
100
|
+
script/generate. This *finally* fixes the dreaded 'User is
|
101
|
+
reserved by Rails' error
|
102
|
+
|
103
|
+
|
1
104
|
== Hobo 0.7.4 ===
|
2
105
|
|
3
106
|
Switching to a new style for the changelog. Now that we're using git
|
data/hobo_files/plugin/Rakefile
CHANGED
@@ -12,6 +12,7 @@ class HoboRapidGenerator < Hobo::Generator
|
|
12
12
|
record do |m|
|
13
13
|
m.file "hobo-rapid.js", "public/javascripts/hobo-rapid.js"
|
14
14
|
m.file "lowpro.js", "public/javascripts/lowpro.js"
|
15
|
+
m.file "IE7.js", "public/javascripts/IE7.js"
|
15
16
|
m.file "reset.css", "public/stylesheets/reset.css"
|
16
17
|
m.file "hobo-rapid.css", "public/stylesheets/hobo-rapid.css"
|
17
18
|
create_all(m, "themes/clean/public", "public/hobothemes/clean")
|
@@ -0,0 +1,2 @@
|
|
1
|
+
/* IE7/IE8.js - copyright 2004-2008, Dean Edwards */
|
2
|
+
(function(){IE7={toString:function(){return"IE7 version 2.0 (beta3)"}};var k=IE7.appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(top.location.search)||k<5)return;var Q=bG();var C=document.compatMode!="CSS1Compat";var bm=document.documentElement,v,s;var bA="!";var G=":link{ie7-link:link}:visited{ie7-link:visited}";var cj=/^[\w\.]+[^:]*$/;function W(a,b){if(cj.test(a))a=(b||"")+a;return a};function bn(a,b){a=W(a,b);return a.slice(0,a.lastIndexOf("/")+1)};var bB=document.scripts[document.scripts.length-1];var ck=bn(bB.src);try{var H=new ActiveXObject("Microsoft.XMLHTTP")}catch(e){}var X={};function cl(a,b){try{a=W(a,b);if(!X[a]){H.open("GET",a,false);H.send();if(H.status==0||H.status==200){X[a]=H.responseText}}}catch(e){}finally{return X[a]||""}};if(k<5.5){undefined=Q();bA="HTML:!";var cm=/(g|gi)$/;var cn=String.prototype.replace;String.prototype.replace=function(a,b){if(typeof b=="function"){if(a&&a.constructor==RegExp){var c=a;var d=c.global;if(d==null)d=cm.test(c);if(d)c=new RegExp(c.source)}else{c=new RegExp(bb(a))}var f,g=this,h="";while(g&&(f=c.exec(g))){h+=g.slice(0,f.index)+b.apply(this,f);g=g.slice(f.index+f[0].length);if(!d)break}return h+g}return cn.apply(this,arguments)};Array.prototype.pop=function(){if(this.length){var a=this[this.length-1];this.length--;return a}return undefined};Array.prototype.push=function(){for(var a=0;a<arguments.length;a++){this[this.length]=arguments[a]}return this.length};var co=this;Function.prototype.apply=function(a,b){if(a===undefined)a=co;else if(a==null)a=window;else if(typeof a=="string")a=new String(a);else if(typeof a=="number")a=new Number(a);else if(typeof a=="boolean")a=new Boolean(a);if(arguments.length==1)b=[];else if(b[0]&&b[0].writeln)b[0]=b[0].documentElement.document||b[0];var c="#ie7_apply",d;a[c]=this;switch(b.length){case 0:d=a[c]();break;case 1:d=a[c](b[0]);break;case 2:d=a[c](b[0],b[1]);break;case 3:d=a[c](b[0],b[1],b[2]);break;case 4:d=a[c](b[0],b[1],b[2],b[3]);break;case 5:d=a[c](b[0],b[1],b[2],b[3],b[4]);break;default:var f=[],g=b.length-1;do f[g]="a["+g+"]";while(g--);eval("r=o[$]("+f+")")}if(typeof a.valueOf=="function"){delete a[c]}else{a[c]=undefined;if(d&&d.writeln)d=d.documentElement.document||d}return d};Function.prototype.call=function(a){return this.apply(a,bC.apply(arguments,[1]))};G+="address,blockquote,body,dd,div,dt,fieldset,form,"+"frame,frameset,h1,h2,h3,h4,h5,h6,iframe,noframes,object,p,"+"hr,applet,center,dir,menu,pre,dl,li,ol,ul{display:block}"}var bC=Array.prototype.slice;var cJ=/%([1-9])/g;var cp=/^\s\s*/;var cq=/\s\s*$/;var cr=/([\/()[\]{}|*+-.,^$?\\])/g;var bD=/\bbase\b/;var bE=["constructor","toString"];var Y;function z(){};z.extend=function(a,b){Y=true;var c=new this;ba(c,a);Y=false;var d=c.constructor;function f(){if(!Y)d.apply(this,arguments)};c.constructor=f;f.extend=arguments.callee;ba(f,b);f.prototype=c;return f};z.prototype.extend=function(a){return ba(this,a)};var bo="#";var Z="~";var cs=/\\./g;var ct=/\(\?[:=!]|\[[^\]]+\]/g;var cu=/\(/g;var D=z.extend({constructor:function(a){this[Z]=[];this.merge(a)},exec:function(g){var h=this,p=this[Z];return String(g).replace(new RegExp(this,this.ignoreCase?"gi":"g"),function(){var a,b=1,c=0;while((a=h[bo+p[c++]])){var d=b+a.length+1;if(arguments[b]){var f=a.replacement;switch(typeof f){case"function":return f.apply(h,bC.call(arguments,b,d));case"number":return arguments[b+f];default:return f}}b=d}})},add:function(a,b){if(a instanceof RegExp){a=a.source}if(!this[bo+a])this[Z].push(String(a));this[bo+a]=new D.Item(a,b)},merge:function(a){for(var b in a)this.add(b,a[b])},toString:function(){return"("+this[Z].join(")|(")+")"}},{IGNORE:"$0",Item:z.extend({constructor:function(a,b){a=a instanceof RegExp?a.source:String(a);if(typeof b=="number")b=String(b);else if(b==null)b="";if(typeof b=="string"&&/\$(\d+)/.test(b)){if(/^\$\d+$/.test(b)){b=parseInt(b.slice(1))}else{var c=/'/.test(b.replace(/\\./g,""))?'"':"'";b=b.replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\$(\d+)/g,c+"+(arguments[$1]||"+c+c+")+"+c);b=new Function("return "+c+b.replace(/(['"])\1\+(.*)\+\1\1$/,"$1")+c)}}this.length=D.count(a);this.replacement=b;this.toString=bG(a)}}),count:function(a){a=String(a).replace(cs,"").replace(ct,"");return I(a,cu).length}});function ba(a,b){if(a&&b){var c=(typeof b=="function"?Function:Object).prototype;var d=bE.length,f;if(Y)while(f=bE[--d]){var g=b[f];if(g!=c[f]){if(bD.test(g)){bF(a,f,g)}else{a[f]=g}}}for(f in b)if(c[f]===undefined){var g=b[f];if(a[f]&&typeof g=="function"&&bD.test(g)){bF(a,f,g)}else{a[f]=g}}}return a};function bF(c,d,f){var g=c[d];c[d]=function(){var a=this.base;this.base=g;var b=f.apply(this,arguments);this.base=a;return b}};function cv(a,b){if(!b)b=a;var c={};for(var d in a)c[d]=b[d];return c};function i(c){var d=arguments;var f=new RegExp("%([1-"+arguments.length+"])","g");return String(c).replace(f,function(a,b){return b<d.length?d[b]:a})};function I(a,b){return String(a).match(b)||[]};function bb(a){return String(a).replace(cr,"\\$1")};function cK(a){return String(a).replace(cp,"").replace(cq,"")};function bG(a){return function(){return a}};var bH=D.extend({ignoreCase:true});var cw=/\x01(\d+)/g,cx=/'/g,cy=/^\x01/,cz=/\\([\da-fA-F]{1,4})/g;var bp=[];var cA=new bH({"<!\\-\\-|\\-\\->":"","\\/\\*[^*]*\\*+([^\\/][^*]*\\*+)*\\/":"","@(namespace|import)[^;\\n]+[;\\n]":"","'(\\\\.|[^'\\\\])*'":bJ,'"(\\\\.|[^"\\\\])*"':bJ,"\\s+":" "});function cB(a){return cA.exec(a)};function bI(c){return c.replace(cw,function(a,b){return bp[b-1]})};function bJ(c){return"\x01"+bp.push(c.replace(cz,function(a,b){return eval("'\\u"+"0000".slice(b.length)+b+"'")}).slice(1,-1).replace(cx,"\\'"))};function cC(a){return cy.test(a)?bp[a.slice(1)-1]:a};var cD=new D({Width:"Height",width:"height",Left:"Top",left:"top",Right:"Bottom",right:"bottom",onX:"onY"});function A(a){return cD.exec(a)};var bK=[];function bq(a){cF(a);w(window,"onresize",a)};function w(a,b,c){a.attachEvent(b,c);bK.push(arguments)};function cE(a,b,c){try{a.detachEvent(b,c)}catch(ignore){}};w(window,"onunload",function(){var a;while(a=bK.pop()){cE(a[0],a[1],a[2])}});function R(a,b,c){if(!a.elements)a.elements={};if(c)a.elements[b.uniqueID]=b;else delete a.elements[b.uniqueID];return c};w(window,"onbeforeprint",function(){if(!IE7.CSS.print)new bw("print");IE7.CSS.print.recalc()});var bL=/^\d+(px)?$/i;var J=/^\d+%$/;var E=function(a,b){if(bL.test(b))return parseInt(b);var c=a.style.left;var d=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;a.style.left=b||0;b=a.style.pixelLeft;a.style.left=c;a.runtimeStyle.left=d;return b};var br="ie7-";var bM=z.extend({constructor:function(){this.fixes=[];this.recalcs=[]},init:Q});var bs=[];function cF(a){bs.push(a)};IE7.recalc=function(){IE7.HTML.recalc();IE7.CSS.recalc();for(var a=0;a<bs.length;a++)bs[a]()};function bc(a){return a.currentStyle["ie7-position"]=="fixed"};function bt(a,b){return a.currentStyle[br+b]||a.currentStyle[b]};function K(a,b,c){if(a.currentStyle[br+b]==null){a.runtimeStyle[br+b]=a.currentStyle[b]}a.runtimeStyle[b]=c};function bN(a){var b=document.createElement(a||"object");b.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";b.ie7_anon=true;return b};function B(a,b,c){if(!be[a]){F=[];var d="";var f=T.escape(a).split(",");for(var g=0;g<f.length;g++){o=m=x=0;S=f.length>1?2:0;var h=T.exec(f[g])||"if(0){";if(o){h+=i("if(e%1.nodeName!='!'){",m)}var p=S>1?bV:"";h+=i(p+bW,m);h+=Array(I(h,/\{/g).length+1).join("}");d+=h}eval(i(bX,F)+T.unescape(d)+"return s?null:r}");be[a]=_h}return be[a](b||document,c)};var bd=k<6;var bO=/^(href|src)$/;var bu={"class":"className","for":"htmlFor"};IE7._5=1;IE7._e=function(a,b){var c=a.all[b]||null;if(!c||c.id==b)return c;for(var d=0;d<c.length;d++){if(c[d].id==b)return c[d]}return null};IE7._f=function(a,b){if(b=="src"&&a.pngSrc)return a.pngSrc;var c=bd?(a.attributes[b]||a.attributes[bu[b.toLowerCase()]]):a.getAttributeNode(b);if(c&&(c.specified||b=="value")){if(bO.test(b)){return a.getAttribute(b,2)}else if(b=="class"){return a.className.replace(/\sie7_\w+/g,"")}else if(b=="style"){return a.style.cssText}else{return c.nodeValue}}return null};var bP="colSpan,rowSpan,vAlign,dateTime,accessKey,tabIndex,encType,maxLength,readOnly,longDesc";ba(bu,cv(bP.toLowerCase().split(","),bP.split(",")));IE7._a=function(a){while(a&&(a=a.nextSibling)&&(a.nodeType!=1||a.nodeName=="!"))continue;return a};IE7._b=function(a){while(a&&(a=a.previousSibling)&&(a.nodeType!=1||a.nodeName=="!"))continue;return a};var cG=/([\s>+~,]|[^(]\+|^)([#.:\[])/g,cH=/(^|,)([^\s>+~])/g,cI=/\s*([\s>+~(),]|^|$)\s*/g,bQ=/\s\*\s/g;var bR=D.extend({constructor:function(a){this.base(a);this.sorter=new D;this.sorter.add(/:not\([^)]*\)/,D.IGNORE);this.sorter.add(/([ >](\*|[\w-]+))([^: >+~]*)(:\w+-child(\([^)]+\))?)([^: >+~]*)/,"$1$3$6$4")},ignoreCase:true,escape:function(a){return this.optimise(this.format(a))},format:function(a){return a.replace(cI,"$1").replace(cH,"$1 $2").replace(cG,"$1*$2")},optimise:function(a){return this.sorter.exec(a.replace(bQ,">* "))},unescape:function(a){return bI(a)}});var bS={"":"%1!=null","=":"%1=='%2'","~=":/(^| )%1( |$)/,"|=":/^%1(-|$)/,"^=":/^%1/,"$=":/%1$/,"*=":/%1/};var bT={"first-child":"!IE7._b(e%1)","link":"e%1.currentStyle['ie7-link']=='link'","visited":"e%1.currentStyle['ie7-link']=='visited'"};var bv="var p%2=0,i%2,e%2,n%2=e%1.";var bU="e%1.sourceIndex";var bV="var g="+bU+";if(!p[g]){p[g]=1;";var bW="r[r.length]=e%1;if(s)return e%1;";var bX="var _h=function(e0,s){IE7._5++;var r=[],p={},reg=[%1],d=document;";var F;var m;var o;var x;var S;var be={};var T=new bR({" (\\*|[\\w-]+)#([\\w-]+)":function(a,b,c){o=false;var d="var e%2=IE7._e(d,'%4');if(e%2&&";if(b!="*")d+="e%2.nodeName=='%3'&&";d+="(e%1==d||e%1.contains(e%2))){";if(x)d+=i("i%1=n%1.length;",x);return i(d,m++,m,b.toUpperCase(),c)}," (\\*|[\\w-]+)":function(a,b){S++;o=b=="*";var c=bv;c+=(o&&bd)?"all":"getElementsByTagName('%3')";c+=";for(i%2=0;(e%2=n%2[i%2]);i%2++){";return i(c,m++,x=m,b.toUpperCase())},">(\\*|[\\w-]+)":function(a,b){var c=x;o=b=="*";var d=bv;d+=c?"children":"childNodes";if(!o&&c)d+=".tags('%3')";d+=";for(i%2=0;(e%2=n%2[i%2]);i%2++){";if(o){d+="if(e%2.nodeType==1){";o=bd}else{if(!c)d+="if(e%2.nodeName=='%3'){"}return i(d,m++,x=m,b.toUpperCase())},"\\+(\\*|[\\w-]+)":function(a,b){var c="";if(o)c+="if(e%1.nodeName!='!'){";o=false;c+="e%1=IE7._a(e%1);if(e%1";if(b!="*")c+="&&e%1.nodeName=='%2'";c+="){";return i(c,m,b.toUpperCase())},"~(\\*|[\\w-]+)":function(a,b){var c="";if(o)c+="if(e%1.nodeName!='!'){";o=false;S=2;c+="while(e%1=e%1.nextSibling){if(e%1.ie7_adjacent==IE7._5)break;if(";if(b=="*"){c+="e%1.nodeType==1";if(bd)c+="&&e%1.nodeName!='!'"}else c+="e%1.nodeName=='%2'";c+="){e%1.ie7_adjacent=IE7._5;";return i(c,m,b.toUpperCase())},"#([\\w-]+)":function(a,b){o=false;var c="if(e%1.id=='%2'){";if(x)c+=i("i%1=n%1.length;",x);return i(c,m,b)},"\\.([\\w-]+)":function(a,b){o=false;F.push(new RegExp("(^|\\s)"+bb(b)+"(\\s|$)"));return i("if(e%1.className&®[%2].test(e%1.className)){",m,F.length-1)},"\\[([\\w-]+)\\s*([^=]?=)?\\s*([^\\]]*)\\]":function(a,b,c,d){var f=bu[b]||b;if(c){var g="e%1.getAttribute('%2',2)";if(!bO.test(b)){g="e%1.%3||"+g}b=i("("+g+")",m,b,f)}else{b=i("IE7._f(e%1,'%2')",m,b)}var h=bS[c||""]||"0";if(h&&h.source){F.push(new RegExp(i(h.source,bb(T.unescape(d)))));h="reg[%2].test(%1)";d=F.length-1}return"if("+i(h,b,d)+"){"},":+([\\w-]+)(\\(([^)]+)\\))?":function(a,b,c,d){b=bT[b];return"if("+(b?i(b,m,d||""):"0")+"){"}});var bY=/a(#[\w-]+)?(\.[\w-]+)?:(hover|active)/i;var bZ=/\s*\{\s*/,ca=/\s*\}\s*/,cb=/\s*\,\s*/;var cc=/(.*)(:first-(line|letter))/;var y=document.styleSheets;IE7.CSS=new(bM.extend({parser:new bH,screen:"",print:"",styles:[],rules:[],pseudoClasses:k<7?"first\\-child":"",dynamicPseudoClasses:{toString:function(){var a=[];for(var b in this)a.push(b);return a.join("|")}},init:function(){var a="^\x01$";var b="\\[class=?[^\\]]*\\]";var c=[];if(this.pseudoClasses)c.push(this.pseudoClasses);var d=this.dynamicPseudoClasses.toString();if(d)c.push(d);c=c.join("|");var f=k<7?["[>+~[(]|([:.])\\w+\\1"]:[b];if(c)f.push(":("+c+")");this.UNKNOWN=new RegExp(f.join("|")||a,"i");var g=k<7?["\\[[^\\]]+\\]|[^\\s(\\[]+\\s*[+~]"]:[b];var h=g.concat();if(c)h.push(":("+c+")");n.COMPLEX=new RegExp(h.join("|")||a,"ig");if(this.pseudoClasses)g.push(":("+this.pseudoClasses+")");L.COMPLEX=new RegExp(g.join("|")||a,"i");L.MATCH=new RegExp(d?"(.*):("+d+")(.*)":a,"i");this.createStyleSheet();this.refresh()},addEventHandler:function(){w.apply(null,arguments)},addFix:function(a,b){this.parser.add(a,b)},addRecalc:function(c,d,f,g){d=new RegExp("([{;\\s])"+c+"\\s*:\\s*"+d+"[^;}]*");var h=this.recalcs.length;if(g)g=c+":"+g;this.addFix(d,function(a,b){return(g?b+g:a)+";ie7-"+a.slice(1)+";ie7_recalc"+h+":1"});this.recalcs.push(arguments);return h},apply:function(){this.getInlineStyles();new bw("screen");this.trash()},createStyleSheet:function(){this.styleSheet=document.createStyleSheet();this.styleSheet.ie7=true;this.styleSheet.owningElement.ie7=true;this.styleSheet.cssText=G},getInlineStyles:function(){var a=document.getElementsByTagName("style"),b;for(var c=a.length-1;(b=a[c]);c--){if(!b.disabled&&!b.ie7){this.styles.push(b.innerHTML)}}},getText:function(a,b){try{var c=a.cssText}catch(e){c=""}if(H)c=cl(a.href,b)||c;return c},recalc:function(){this.screen.recalc();var a=/ie7_recalc\d+/g;var b=G.match(/[{,]/g).length;var c=b+(this.screen.cssText.match(/\{/g)||"").length;var d=this.styleSheet.rules,f;var g,h,p,t,q,j,u,l;for(q=b;q<c;q++){f=d[q];var r=f.style.cssText;if(f&&(g=r.match(a))){p=B(f.selectorText);if(p.length)for(j=0;j<g.length;j++){l=g[j];h=IE7.CSS.recalcs[l.slice(10)][2];for(u=0;(t=p[u]);u++){if(t.currentStyle[l])h(t,r)}}}}},refresh:function(){this.styleSheet.cssText=G+this.screen+this.print},trash:function(){for(var a=0;a<y.length;a++){if(!y[a].ie7){try{var b=y[a].cssText}catch(e){b=""}if(b)y[a].cssText=""}}}}));var bw=z.extend({constructor:function(a){this.media=a;this.load();IE7.CSS[a]=this;IE7.CSS.refresh()},createRule:function(a,b){if(IE7.CSS.UNKNOWN.test(a)){var c;if(bf&&(c=a.match(bf.MATCH))){return new bf(c[1],c[2],b)}else if(c=a.match(L.MATCH)){if(!bY.test(c[0])||L.COMPLEX.test(c[0])){return new L(a,c[1],c[2],c[3],b)}}else return new n(a,b)}return a+" {"+b+"}"},getText:function(){var h=[].concat(IE7.CSS.styles);var p=/@media\s+([^{]*)\{([^@]+\})\s*\}/gi;var t=/\ball\b|^$/i,q=/\bscreen\b/i,j=/\bprint\b/i;function u(a,b){l.value=b;return a.replace(p,l)};function l(a,b,c){b=r(b);switch(b){case"screen":case"print":if(b!=l.value)return"";case"all":return c}return""};function r(a){if(t.test(a))return"all";else if(q.test(a))return(j.test(a))?"all":"screen";else if(j.test(a))return"print"};var N=this;function O(a,b,c,d){var f="";if(!d){c=r(a.media);d=0}if(c=="all"||c==N.media){if(d<3){for(var g=0;g<a.imports.length;g++){f+=O(a.imports[g],bn(a.href,b),c,d+1)}}f+=cB(a.href?cg(a,b):h.pop()||"");f=u(f,N.media)}return f};var bl={};function cg(a,b){var c=W(a.href,b);if(bl[c])return"";bl[c]=(a.disabled)?"":ci(IE7.CSS.getText(a,b),bn(a.href,b));return bl[c]};var ch=/(url\s*\(\s*['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function ci(a,b){return a.replace(ch,"$1"+b.slice(0,b.lastIndexOf("/")+1)+"$2")};for(var P=0;P<y.length;P++){if(!y[P].disabled&&!y[P].ie7){this.cssText+=O(y[P])}}},load:function(){this.cssText="";this.getText();this.parse();this.cssText=bI(this.cssText);X={}},parse:function(){this.cssText=IE7.CSS.parser.exec(this.cssText);var a=IE7.CSS.rules.length;var b=this.cssText.split(ca),c;var d,f,g,h;for(g=0;g<b.length;g++){c=b[g].split(bZ);d=c[0].split(cb);f=c[1];for(h=0;h<d.length;h++){d[h]=f?this.createRule(d[h],f):""}b[g]=d.join("\n")}this.cssText=b.join("\n");this.rules=IE7.CSS.rules.slice(a)},recalc:function(){var a,b;for(b=0;(a=this.rules[b]);b++)a.recalc()},toString:function(){return"@media "+this.media+"{"+this.cssText+"}"}});var bf;var n=IE7.Rule=z.extend({constructor:function(a,b){this.id=IE7.CSS.rules.length;this.className=n.PREFIX+this.id;a=a.match(cc)||a||"*";this.selector=a[1]||a;this.selectorText=this.parse(this.selector)+(a[2]||"");this.cssText=b;this.MATCH=new RegExp("\\s"+this.className+"(\\s|$)","g");IE7.CSS.rules.push(this);this.init()},init:Q,add:function(a){a.className+=" "+this.className},recalc:function(){var a=B(this.selector);for(var b=0;b<a.length;b++)this.add(a[b])},parse:function(a){var b=a.replace(n.CHILD," ").replace(n.COMPLEX,"");if(k<7)b=b.replace(n.MULTI,"");var c=I(b,n.TAGS).length-I(a,n.TAGS).length;var d=I(b,n.CLASSES).length-I(a,n.CLASSES).length+1;while(d>0&&n.CLASS.test(b)){b=b.replace(n.CLASS,"");d--}while(c>0&&n.TAG.test(b)){b=b.replace(n.TAG,"$1*");c--}b+="."+this.className;d=Math.min(d,2);c=Math.min(c,2);var f=-10*d-c;if(f>0){b=b+","+n.MAP[f]+" "+b}return b},remove:function(a){a.className=a.className.replace(this.MATCH,"$1")},toString:function(){return i("%1 {%2}",this.selectorText,this.cssText)}},{CHILD:/>/g,CLASS:/\.[\w-]+/,CLASSES:/[.:\[]/g,MULTI:/(\.[\w-]+)+/g,PREFIX:"ie7_class",TAG:/^\w+|([\s>+~])\w+/,TAGS:/^\w|[\s>+~]\w/g,MAP:{1:"html",2:"html body",10:".ie7_html",11:"html.ie7_html",12:"html.ie7_html body",20:".ie7_html .ie7_body",21:"html.ie7_html .ie7_body",22:"html.ie7_html body.ie7_body"}});var L=n.extend({constructor:function(a,b,c,d,f){this.attach=b||"*";this.dynamicPseudoClass=IE7.CSS.dynamicPseudoClasses[c];this.target=d;this.base(a,f)},recalc:function(){var a=B(this.attach),b;for(var c=0;b=a[c];c++){var d=this.target?B(this.target,b):[b];if(d.length)this.dynamicPseudoClass.apply(b,d,this)}}});var cd=z.extend({constructor:function(a,b){this.name=a;this.apply=b;this.instances={};IE7.CSS.dynamicPseudoClasses[a]=this},register:function(a){var b=a[2];a.id=b.id+a[0].uniqueID;if(!this.instances[a.id]){var c=a[1],d;for(d=0;d<c.length;d++)b.add(c[d]);this.instances[a.id]=a}},unregister:function(a){if(this.instances[a.id]){var b=a[2];var c=a[1],d;for(d=0;d<c.length;d++)b.remove(c[d]);delete this.instances[a.id]}}});if(k<7){var U=new cd("hover",function(a){var b=arguments;IE7.CSS.addEventHandler(a,k<5.5?"onmouseover":"onmouseenter",function(){U.register(b)});IE7.CSS.addEventHandler(a,k<5.5?"onmouseout":"onmouseleave",function(){U.unregister(b)})});w(document,"onmouseup",function(){var a=U.instances;for(var b in a)if(!a[b][0].contains(event.srcElement))U.unregister(a[b])})}IE7.CSS.addRecalc("[\\w-]+","inherit",function(c,d){var f=d.match(/[\w-]+\s*:\s*inherit/g);for(var g=0;g<f.length;g++){var h=f[g].replace(/ie7\-|\s*:\s*inherit/g,"").replace(/\-([a-z])/g,function(a,b){return b.toUpperCase()});c.runtimeStyle[h]=c.parentElement.currentStyle[h]}});IE7.HTML=new(bM.extend({fixed:{},init:Q,addFix:function(){this.fixes.push(arguments)},apply:function(){for(var a=0;a<this.fixes.length;a++){var b=B(this.fixes[a][0]);var c=this.fixes[a][1];for(var d=0;d<b.length;d++)c(b[d])}},addRecalc:function(){this.recalcs.push(arguments)},recalc:function(){for(var a=0;a<this.recalcs.length;a++){var b=B(this.recalcs[a][0]);var c=this.recalcs[a][1],d;var f=Math.pow(2,a);for(var g=0;(d=b[g]);g++){var h=d.uniqueID;if((this.fixed[h]&f)==0){d=c(d)||d;this.fixed[h]|=f}}}}}));if(k<7){document.createElement("abbr");IE7.HTML.addRecalc("label",function(a){if(!a.htmlFor){var b=B("input,textarea",a,true);if(b){w(a,"onclick",function(){b.click()})}}})}var V="[.\\d]";new function(_){var layout=IE7.Layout=this;G+="*{boxSizing:content-box}";IE7.hasLayout=k<5.5?function(a){return a.clientWidth}:function(a){return a.currentStyle.hasLayout};layout.boxSizing=function(a){if(!IE7.hasLayout(a)){a.style.height="0cm";if(a.currentStyle.verticalAlign=="auto")a.runtimeStyle.verticalAlign="top";collapseMargins(a)}};function collapseMargins(a){if(a!=s&&a.currentStyle.position!="absolute"){collapseMargin(a,"marginTop");collapseMargin(a,"marginBottom")}};function collapseMargin(a,b){if(!a.runtimeStyle[b]){var c=a.parentElement;if(c&&IE7.hasLayout(c)&&!IE7[b=="marginTop"?"_b":"_a"](a))return;var d=B(">*:"+(b=="marginTop"?"first":"last")+"-child",a,true);if(d&&d.currentStyle.styleFloat=="none"&&IE7.hasLayout(d)){collapseMargin(d,b);margin=_9(a,a.currentStyle[b]);childMargin=_9(d,d.currentStyle[b]);if(margin<0||childMargin<0){a.runtimeStyle[b]=margin+childMargin}else{a.runtimeStyle[b]=Math.max(childMargin,margin)}d.runtimeStyle[b]="0px"}}};function _9(a,b){return b=="auto"?0:E(a,b)};var UNIT=/^[.\d][\w%]*$/,AUTO=/^(auto|0cm)$/;var applyWidth,applyHeight;IE7.Layout.borderBox=function(a){applyWidth(a);applyHeight(a)};var fixWidth=function(g){applyWidth=function(a){if(!J.test(a.currentStyle.width))h(a);collapseMargins(a)};function h(a,b){if(!a.runtimeStyle.fixedWidth){if(!b)b=a.currentStyle.width;a.runtimeStyle.fixedWidth=(UNIT.test(b))?Math.max(0,q(a,b)):b;K(a,"width",a.runtimeStyle.fixedWidth)}};function p(a){if(!bc(a)){var b=a.offsetParent;while(b&&!IE7.hasLayout(b))b=b.offsetParent}return(b||s).clientWidth};function t(a,b){if(J.test(b))return parseInt(parseFloat(b)/100*p(a));return E(a,b)};var q=function(a,b){var c=a.currentStyle["box-sizing"]=="border-box";var d=0;if(C&&!c)d+=j(a)+u(a,"padding");else if(!C&&c)d-=j(a)+u(a,"padding");return t(a,b)+d};function j(a){return a.offsetWidth-a.clientWidth};function u(a,b){return t(a,a.currentStyle[b+"Left"])+t(a,a.currentStyle[b+"Right"])};G+="*{minWidth:none;maxWidth:none;min-width:none;max-width:none}";layout.minWidth=function(a){if(a.currentStyle["min-width"]!=null){a.style.minWidth=a.currentStyle["min-width"]}if(R(arguments.callee,a,a.currentStyle.minWidth!="none")){layout.boxSizing(a);h(a);l(a)}};eval("IE7.Layout.maxWidth="+String(layout.minWidth).replace(/min/g,"max"));function l(a){var b=a.getBoundingClientRect();var c=b.right-b.left;if(a.currentStyle.minWidth!="none"&&c<=q(a,a.currentStyle.minWidth)){a.runtimeStyle.width=a.currentStyle.minWidth}else if(a.currentStyle.maxWidth!="none"&&c>=q(a,a.currentStyle.maxWidth)){a.runtimeStyle.width=a.currentStyle.maxWidth}else{a.runtimeStyle.width=a.runtimeStyle.fixedWidth}};function r(a){if(R(r,a,/^(fixed|absolute)$/.test(a.currentStyle.position)&&bt(a,"left")!="auto"&&bt(a,"right")!="auto"&&AUTO.test(bt(a,"width")))){N(a);IE7.Layout.boxSizing(a)}};IE7.Layout.fixRight=r;function N(a){var b=t(a,a.runtimeStyle._c||a.currentStyle.left);var c=p(a)-t(a,a.currentStyle.right)-b-u(a,"margin");if(parseInt(a.runtimeStyle.width)==c)return;a.runtimeStyle.width="";if(bc(a)||g||a.offsetWidth<c){if(!C)c-=j(a)+u(a,"padding");if(c<0)c=0;a.runtimeStyle.fixedWidth=c;K(a,"width",c)}};var O=0;bq(function(){if(!s)return;var a,b=(O<s.clientWidth);O=s.clientWidth;var c=layout.minWidth.elements;for(a in c){var d=c[a];var f=(parseInt(d.runtimeStyle.width)==q(d,d.currentStyle.minWidth));if(b&&f)d.runtimeStyle.width="";if(b==f)l(d)}var c=layout.maxWidth.elements;for(a in c){var d=c[a];var f=(parseInt(d.runtimeStyle.width)==q(d,d.currentStyle.maxWidth));if(!b&&f)d.runtimeStyle.width="";if(b!=f)l(d)}for(a in r.elements)N(r.elements[a])});if(C){IE7.CSS.addRecalc("width",V,applyWidth)}if(k<7){IE7.CSS.addRecalc("min-width",V,layout.minWidth);IE7.CSS.addRecalc("max-width",V,layout.maxWidth);IE7.CSS.addRecalc("right",V,r)}};eval("var fixHeight="+A(fixWidth));fixWidth();fixHeight(true)};var bg=W("blank.gif",ck);var bh="DXImageTransform.Microsoft.AlphaImageLoader";var bx="progid:"+bh+"(src='%1',sizingMethod='%2')";var bi;var M=[];function by(a){if(bi.test(a.src)){var b=new Image(a.width,a.height);b.onload=function(){a.width=b.width;a.height=b.height;b=null};b.src=a.src;a.pngSrc=a.src;bz(a)}};if(k>=5.5&&k<7){IE7.CSS.addFix(/background(-image)?\s*:\s*([^};]*)?url\(([^\)]+)\)([^;}]*)?/,function(a,b,c,d,f){d=cC(d);return bi.test(d)?"filter:"+i(bx,d,"crop")+";zoom:1;background"+(b||"")+":"+(c||"")+"none"+(f||""):a});IE7.HTML.addRecalc("img,input",function(a){if(a.tagName=="INPUT"&&a.type!="image")return;by(a);w(a,"onpropertychange",function(){if(!bj&&event.propertyName=="src"&&a.src.indexOf(bg)==-1)by(a)})});var bj=false;w(window,"onbeforeprint",function(){bj=true;for(var a=0;a<M.length;a++)ce(M[a])});w(window,"onafterprint",function(){for(var a=0;a<M.length;a++)bz(M[a]);bj=false})}function bz(a,b){var c=a.filters[bh];if(c){c.src=a.src;c.enabled=true}else{a.runtimeStyle.filter=i(bx,a.src,b||"scale");M.push(a)}a.src=bg};function ce(a){a.src=a.pngSrc;a.filters[bh].enabled=false};new function(_){if(k>=7)return;IE7.CSS.addRecalc("position","fixed",_6,"absolute");IE7.CSS.addRecalc("background(-attachment)?","[^};]*fixed",_2);var $viewport=C?"body":"documentElement";function _3(){if(v.currentStyle.backgroundAttachment!="fixed"){if(v.currentStyle.backgroundImage=="none"){v.runtimeStyle.backgroundRepeat="no-repeat";v.runtimeStyle.backgroundImage="url("+bg+")"}v.runtimeStyle.backgroundAttachment="fixed"}_3=Q};var _0=bN("img");function _1(a){return a?bc(a)||_1(a.parentElement):false};function _d(a,b,c){setTimeout("document.all."+a.uniqueID+".runtimeStyle.setExpression('"+b+"','"+c+"')",0)};function _2(a){if(R(_2,a,a.currentStyle.backgroundAttachment=="fixed"&&!a.contains(v))){_3();bgLeft(a);bgTop(a);_8(a)}};function _8(a){_0.src=a.currentStyle.backgroundImage.slice(5,-2);var b=a.canHaveChildren?a:a.parentElement;b.appendChild(_0);setOffsetLeft(a);setOffsetTop(a);b.removeChild(_0)};function bgLeft(a){a.style.backgroundPositionX=a.currentStyle.backgroundPositionX;if(!_1(a)){_d(a,"backgroundPositionX","(parseInt(runtimeStyle.offsetLeft)+document."+$viewport+".scrollLeft)||0")}};eval(A(bgLeft));function setOffsetLeft(a){var b=_1(a)?"backgroundPositionX":"offsetLeft";a.runtimeStyle[b]=getOffsetLeft(a,a.style.backgroundPositionX)-a.getBoundingClientRect().left-a.clientLeft+2};eval(A(setOffsetLeft));function getOffsetLeft(a,b){switch(b){case"left":case"top":return 0;case"right":case"bottom":return s.clientWidth-_0.offsetWidth;case"center":return(s.clientWidth-_0.offsetWidth)/2;default:if(J.test(b)){return parseInt((s.clientWidth-_0.offsetWidth)*parseFloat(b)/100)}_0.style.left=b;return _0.offsetLeft}};eval(A(getOffsetLeft));function _6(a){if(R(_6,a,bc(a))){K(a,"position","absolute");K(a,"left",a.currentStyle.left);K(a,"top",a.currentStyle.top);_3();IE7.Layout.fixRight(a);_4(a)}};function _4(a,b){positionTop(a,b);positionLeft(a,b,true);if(!a.runtimeStyle.autoLeft&&a.currentStyle.marginLeft=="auto"&&a.currentStyle.right!="auto"){var c=s.clientWidth-getPixelWidth(a,a.currentStyle.right)-getPixelWidth(a,a.runtimeStyle._c)-a.clientWidth;if(a.currentStyle.marginRight=="auto")c=parseInt(c/2);if(_1(a.offsetParent))a.runtimeStyle.pixelLeft+=c;else a.runtimeStyle.shiftLeft=c}clipWidth(a);clipHeight(a)};function clipWidth(a){var b=a.runtimeStyle.fixWidth;a.runtimeStyle.borderRightWidth="";a.runtimeStyle.width=b?getPixelWidth(a,b):"";if(a.currentStyle.width!="auto"){var c=a.getBoundingClientRect();var d=a.offsetWidth-s.clientWidth+c.left-2;if(d>=0){a.runtimeStyle.borderRightWidth="0px";d=Math.max(E(a,a.currentStyle.width)-d,0);K(a,"width",d);return d}}};eval(A(clipWidth));function positionLeft(a,b){if(!b&&J.test(a.currentStyle.width)){a.runtimeStyle.fixWidth=a.currentStyle.width}if(a.runtimeStyle.fixWidth){a.runtimeStyle.width=getPixelWidth(a,a.runtimeStyle.fixWidth)}a.runtimeStyle.shiftLeft=0;a.runtimeStyle._c=a.currentStyle.left;a.runtimeStyle.autoLeft=a.currentStyle.right!="auto"&&a.currentStyle.left=="auto";a.runtimeStyle.left="";a.runtimeStyle.screenLeft=getScreenLeft(a);a.runtimeStyle.pixelLeft=a.runtimeStyle.screenLeft;if(!b&&!_1(a.offsetParent)){_d(a,"pixelLeft","runtimeStyle.screenLeft+runtimeStyle.shiftLeft+document."+$viewport+".scrollLeft")}};eval(A(positionLeft));function getScreenLeft(a){var b=a.offsetLeft,c=1;if(a.runtimeStyle.autoLeft){b=s.clientWidth-a.offsetWidth-getPixelWidth(a,a.currentStyle.right)}if(a.currentStyle.marginLeft!="auto"){b-=getPixelWidth(a,a.currentStyle.marginLeft)}while(a=a.offsetParent){if(a.currentStyle.position!="static")c=-1;b+=a.offsetLeft*c}return b};eval(A(getScreenLeft));function getPixelWidth(a,b){return J.test(b)?parseInt(parseFloat(b)/100*s.clientWidth):E(a,b)};eval(A(getPixelWidth));function _g(){var a=_2.elements;for(var b in a)_8(a[b]);a=_6.elements;for(b in a){_4(a[b],true);_4(a[b],true)}_7=0};var _7;bq(function(){if(!_7)_7=setTimeout(_g,0)})};var bk={backgroundColor:"transparent",backgroundImage:"none",backgroundPositionX:null,backgroundPositionY:null,backgroundRepeat:null,borderTopWidth:0,borderRightWidth:0,borderBottomWidth:0,borderLeftStyle:"none",borderTopStyle:"none",borderRightStyle:"none",borderBottomStyle:"none",borderLeftWidth:0,height:null,marginTop:0,marginBottom:0,marginRight:0,marginLeft:0,width:"100%"};IE7.CSS.addRecalc("overflow","visible",function(a){if(a.parentNode.ie7_wrapped)return;if(IE7.Layout&&a.currentStyle["max-height"]!="auto"){IE7.Layout.maxHeight(a)}if(a.currentStyle.marginLeft=="auto")a.style.marginLeft=0;if(a.currentStyle.marginRight=="auto")a.style.marginRight=0;var b=document.createElement(bA);b.ie7_wrapped=a;for(var c in bk){b.style[c]=a.currentStyle[c];if(bk[c]!=null){a.runtimeStyle[c]=bk[c]}}b.style.display="block";b.style.position="relative";a.runtimeStyle.position="absolute";a.parentNode.insertBefore(b,a);b.appendChild(a)});function cf(){var f="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var g=0;g<f.length;g++){f[f[g]]=f[g-1]||"0.67em"}IE7.CSS.addFix(/(font(-size)?\s*:\s*)([\w.-]+)/,function(a,b,c,d){return b+(f[d]||d)});if(k<6){var h=/^\-/,p=/(em|ex)$/i;var t=/em$/i,q=/ex$/i;E=function(a,b){if(bL.test(b))return parseInt(b)||0;var c=h.test(b)?-1:1;if(p.test(b))c*=u(a);j.style.width=(c<0)?b.slice(1):b;v.appendChild(j);b=c*j.offsetWidth;j.removeNode();return parseInt(b)};var j=bN();function u(a){var b=1;j.style.fontFamily=a.currentStyle.fontFamily;j.style.lineHeight=a.currentStyle.lineHeight;while(a!=v){var c=a.currentStyle["ie7-font-size"];if(c){if(t.test(c))b*=parseFloat(c);else if(J.test(c))b*=(parseFloat(c)/100);else if(q.test(c))b*=(parseFloat(c)/2);else{j.style.fontSize=c;return 1}}a=a.parentElement}return b};IE7.CSS.addFix(/cursor\s*:\s*pointer/,"cursor:hand");IE7.CSS.addFix(/display\s*:\s*list-item/,"display:block")}function l(a){if(k<5.5)IE7.Layout.boxSizing(a.parentElement);var b=a.parentElement;var c=b.offsetWidth-a.offsetWidth-r(b);var d=(a.currentStyle["ie7-margin"]&&a.currentStyle.marginRight=="auto")||a.currentStyle["ie7-margin-right"]=="auto";switch(b.currentStyle.textAlign){case"right":c=d?parseInt(c/2):0;a.runtimeStyle.marginRight=c+"px";break;case"center":if(d)c=0;default:if(d)c/=2;a.runtimeStyle.marginLeft=parseInt(c)+"px"}};function r(a){return E(a,a.currentStyle.paddingLeft)+E(a,a.currentStyle.paddingRight)};IE7.CSS.addRecalc("margin(-left|-right)?","[^};]*auto",function(a){if(R(l,a,a.parentElement&&a.currentStyle.display=="block"&&a.currentStyle.marginLeft=="auto"&&a.currentStyle.position!="absolute")){l(a)}});bq(function(){for(var a in l.elements){var b=l.elements[a];b.runtimeStyle.marginLeft=b.runtimeStyle.marginRight="";l(b)}})};IE7.loaded=true;(function(){try{bm.doScroll("left")}catch(e){setTimeout(arguments.callee,1);return}try{eval(bB.innerHTML)}catch(e){}bi=new RegExp(bb(typeof IE7_PNG_SUFFIX=="string"?IE7_PNG_SUFFIX:"-trans.png")+"$","i");v=document.body;s=C?v:bm;v.className+=" ie7_body";bm.className+=" ie7_html";if(C)cf();IE7.CSS.init();IE7.HTML.init();IE7.HTML.apply();IE7.CSS.apply();IE7.recalc()})()})();
|
@@ -263,15 +263,6 @@ var Hobo = {
|
|
263
263
|
}
|
264
264
|
})
|
265
265
|
|
266
|
-
select(".autocomplete-bhv").each(function (el) {
|
267
|
-
var options = {paramName: "query", minChars: 3, method: 'get' }
|
268
|
-
if (el.hasClassName("autosubmit")) {
|
269
|
-
options.afterUpdateElement = function(el, item) { el.form.onsubmit(); }
|
270
|
-
}
|
271
|
-
new Ajax.Autocompleter(el, el.id + "-completions", el.getAttribute("autocomplete-url"),
|
272
|
-
options);
|
273
|
-
});
|
274
|
-
|
275
266
|
select(".search-bhv").each(function(el) {
|
276
267
|
new Form.Element.Observer(el, 1.0, function() { Hobo.doSearch(el) })
|
277
268
|
});
|
@@ -315,6 +306,14 @@ var Hobo = {
|
|
315
306
|
return urlBase + "/" + Hobo.pluralise(spec.name) + "/" + spec.id + "?_method=PUT"
|
316
307
|
},
|
317
308
|
|
309
|
+
|
310
|
+
urlForId: function(id) {
|
311
|
+
var spec = Hobo.parseId(id)
|
312
|
+
var url = urlBase + "/" + Hobo.pluralise(spec.name)
|
313
|
+
if (spec.id) { url += "/" + spec.id }
|
314
|
+
return url
|
315
|
+
},
|
316
|
+
|
318
317
|
|
319
318
|
fieldSetParam: function(el, val) {
|
320
319
|
spec = Hobo.parseFieldId(el)
|
@@ -361,7 +360,7 @@ var Hobo = {
|
|
361
360
|
|
362
361
|
showEmptyMessageAfterLastRemove: function(el) {
|
363
362
|
var empty
|
364
|
-
var container = el.parentNode
|
363
|
+
var container = $(el.parentNode)
|
365
364
|
if (container.getElementsByTagName(el.nodeName).length == 1 &&
|
366
365
|
(empty = container.next('.empty-collection-message'))) {
|
367
366
|
new Effect.Appear(empty, {delay:0.3})
|
@@ -371,8 +370,12 @@ var Hobo = {
|
|
371
370
|
|
372
371
|
parseFieldId: function(el) {
|
373
372
|
id = el.getAttribute("hobo-model-id")
|
374
|
-
|
375
|
-
|
373
|
+
return id && parseId(id)
|
374
|
+
},
|
375
|
+
|
376
|
+
|
377
|
+
parseId: function(id) {
|
378
|
+
m = id.match(/^([a-z_]+)_([0-9]+)(?:_([a-z_]+))?$/)
|
376
379
|
if (m) return { name: m[1], id: m[2], field: m[3] }
|
377
380
|
},
|
378
381
|
|
@@ -565,6 +568,7 @@ Event.addBehavior({
|
|
565
568
|
new Effect.ScrollTo('primary-collection', {duration: 1.0, offset: -20, transition: Effect.Transitions.sinoidal});
|
566
569
|
Event.stop(e);
|
567
570
|
},
|
571
|
+
|
568
572
|
'form.filter-menu select:change': function(event) {
|
569
573
|
var paramName = this.up('form').down('input[type=hidden]').value.gsub("-", "_")
|
570
574
|
var params = {}
|
@@ -575,6 +579,18 @@ Event.addBehavior({
|
|
575
579
|
params[paramName] = $F(this)
|
576
580
|
}
|
577
581
|
location.href = Hobo.addUrlParams(params, {remove: remove})
|
582
|
+
},
|
583
|
+
|
584
|
+
'.autocompleter' : function(event) {
|
585
|
+
var target = this.className.match(/complete-on:([\S]+)/)[1].split(':')
|
586
|
+
var model = target[0]
|
587
|
+
var completer = target[1]
|
588
|
+
|
589
|
+
var spec = Hobo.parseId(model)
|
590
|
+
var url = urlBase + "/" + Hobo.pluralise(spec.name) + "/complete_" + completer
|
591
|
+
var parameters = spec.id ? "id=" + spec.id : ""
|
592
|
+
new Ajax.Autocompleter(this, this.next('.completions-popup'), url, {paramName:'query', method:'get', parameters: parameters});
|
578
593
|
}
|
579
594
|
|
595
|
+
|
580
596
|
});
|
@@ -1,8 +1,8 @@
|
|
1
|
-
html {background: #666;}
|
1
|
+
html, body {background: #666;}
|
2
2
|
body {
|
3
3
|
width: 760px;
|
4
4
|
margin: 0 auto 20px;
|
5
|
-
color: #222;
|
5
|
+
color: #222;
|
6
6
|
font: 12px "Lucida Grande", "Trebuchet MS", Arial, sans-serif; line-height: 18px;
|
7
7
|
}
|
8
8
|
h1, h2, h3 {font-weight: normal;}
|
@@ -46,6 +46,7 @@ input.file_upload {
|
|
46
46
|
border-right:1px solid #c3c3c3;
|
47
47
|
border-bottom:1px solid #8c8c8c;
|
48
48
|
background: #eee;
|
49
|
+
overflow: visible; width: auto;
|
49
50
|
font-size: 11px; font-weight: bold;
|
50
51
|
}
|
51
52
|
.button:hover {cursor: pointer;}
|
@@ -91,12 +92,12 @@ input.file_upload {
|
|
91
92
|
.content-header, .content-body {padding-bottom: 15px;}
|
92
93
|
.content-footer {padding-bottom: 20px;}
|
93
94
|
|
94
|
-
.page-content {
|
95
|
+
.page-content {padding-top: 20px; background: white;}
|
95
96
|
|
96
97
|
/* aside layout */
|
97
98
|
body.aside-layout {width: 960px;}
|
98
|
-
.aside-layout .page-content {height: 100%; overflow: hidden;
|
99
|
-
.aside-layout .main-content {
|
99
|
+
.aside-layout .page-content {height: 100%; overflow: hidden; padding-top: 0;}
|
100
|
+
.aside-layout .main-content {padding-top: 20px;}
|
100
101
|
.main-content {float: left; width: 670px;}
|
101
102
|
.aside {float: right; width: 220px; padding: 20px 30px; background: #E5E5E5;}
|
102
103
|
.aside-content {
|
@@ -165,17 +166,17 @@ ul.main-nav {float: left; margin: 0 10px;}
|
|
165
166
|
.user-account-page .change-password {width: 350px;}
|
166
167
|
.user-account-page .change-password th {width: 150px;}
|
167
168
|
|
169
|
+
.page-footer {text-align: right; color: #ccc; padding: 5px; font-size: 11px;}
|
170
|
+
|
168
171
|
/* pagination nav, needs a more specific class on the wrapper */
|
169
172
|
.content-body .nav {margin-bottom: 10px; font-size: 11px;}
|
170
173
|
.content-body .nav a {margin-right: 5px;}
|
171
174
|
|
172
|
-
.login-page, .signup-page {width:
|
175
|
+
.login-page, .signup-page {width: 470px; margin-top: 40px;}
|
173
176
|
.login-page .content-header, .signup-page .content-header {padding-bottom: 0;}
|
174
177
|
.login-page .field-list, .signup-page .field-list {width: 300px;}
|
175
178
|
.login-page .field-list td, .signup-page .field-list td {width: auto;}
|
176
|
-
.login-page .field-list th, .signup-page .field-list th {width: 120px;}
|
177
|
-
.login-page .actions, .signup-page .actions {margin-left: 128px; margin-top: 20px; text-align: left;}
|
178
|
-
/*.login-page .submit-button, .signup-page .submit-button {margin: 10px 130px;}*/
|
179
|
+
.login-page .field-list th, .signup-page .field-list th {width: 120px !important; width: 110px;}
|
179
180
|
|
180
181
|
.edit-page .content-header {overflow: hidden; height: 100%;}
|
181
182
|
.edit-page .content-header h1 {float: left;}
|
data/hobo_files/plugin/generators/hobo_rapid/templates/themes/clean/public/stylesheets/rapid-ui.css
CHANGED
@@ -78,7 +78,7 @@ div.completions-popup ul li {
|
|
78
78
|
text-align: left; width: 1px; white-space: nowrap; vertical-align: top;
|
79
79
|
padding-top: 10px; padding-bottom: 10px;
|
80
80
|
}
|
81
|
-
.field-list textarea, .field-list input.string, .field-list input.password { width:
|
81
|
+
.field-list textarea, .field-list input.string, .field-list input.password { width: 99%; margin: 0; }
|
82
82
|
|
83
83
|
/*input[type=text].wide { width: 100%; }*/
|
84
84
|
textarea { height: 170px; }
|
File without changes
|
data/hobo_files/plugin/init.rb
CHANGED
@@ -1,8 +1,11 @@
|
|
1
1
|
# gem dependencies
|
2
2
|
require 'hobosupport'
|
3
|
-
|
4
|
-
|
5
|
-
|
3
|
+
require 'hobofields'
|
4
|
+
begin
|
5
|
+
require 'will_paginate'
|
6
|
+
rescue MissingSourceFile
|
7
|
+
# OK, Hobo won't do pagination then
|
8
|
+
end
|
6
9
|
|
7
10
|
# Monkey patches, ooh ooh
|
8
11
|
require 'active_record/has_many_association'
|
@@ -24,6 +27,7 @@ require 'hobo/dryml/template_handler'
|
|
24
27
|
require 'extensions/test_case' if RAILS_ENV == "test"
|
25
28
|
|
26
29
|
|
30
|
+
|
27
31
|
ActionView::Base.register_template_handler("dryml", Hobo::Dryml::TemplateHandler)
|
28
32
|
|
29
33
|
class ActionController::Base
|
@@ -1,6 +1,8 @@
|
|
1
1
|
class HoboError < RuntimeError; end
|
2
2
|
|
3
3
|
module Hobo
|
4
|
+
|
5
|
+
VERSION = "0.7.5"
|
4
6
|
|
5
7
|
class RawJs < String; end
|
6
8
|
|
@@ -239,7 +241,7 @@ module Hobo
|
|
239
241
|
end)
|
240
242
|
rescue Hobo::UndefinedAccessError
|
241
243
|
raise HoboError, ("#{object.class.name}##{field} does not support undefined assignements, " +
|
242
|
-
"define
|
244
|
+
"define #{field}_editable_by?(user)")
|
243
245
|
end
|
244
246
|
|
245
247
|
begin
|
@@ -73,7 +73,7 @@ module ::Hobo
|
|
73
73
|
end
|
74
74
|
|
75
75
|
|
76
|
-
#
|
76
|
+
# Declarations
|
77
77
|
|
78
78
|
def models(*models)
|
79
79
|
@models = models
|
@@ -225,17 +225,29 @@ module ::Hobo
|
|
225
225
|
|
226
226
|
|
227
227
|
def new_name_for(name)
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
228
|
+
name = name.to_s
|
229
|
+
underscore = name =~ /^[a-z]/
|
230
|
+
name = name.camelize if underscore
|
231
|
+
|
232
|
+
plural = !renames.has_key?(name) && (p = name.singularize) && renames.has_key?(p)
|
233
|
+
name = p if plural
|
234
|
+
|
235
|
+
# Keep a track of names we've seen to avoid cycles
|
236
|
+
seen = [ name ]
|
237
|
+
|
238
|
+
name = name.gsub(/_.*?_/) { |s| new_name_for(s[1..-2]) }
|
239
|
+
while (newname = renames[name])
|
240
|
+
name = newname
|
241
|
+
name = name.gsub(/_.*?_/) { |s| new_name_for(s[1..-2]) }
|
242
|
+
|
243
|
+
break if name.in?(seen)
|
244
|
+
seen << name
|
238
245
|
end
|
246
|
+
|
247
|
+
name = name.underscore if underscore
|
248
|
+
name = name.pluralize if plural
|
249
|
+
name = name.to_sym if underscore || plural
|
250
|
+
name
|
239
251
|
end
|
240
252
|
|
241
253
|
|
@@ -244,8 +256,6 @@ module ::Hobo
|
|
244
256
|
options.each do |k, v|
|
245
257
|
if k.to_s =~ /^[A-Z]/
|
246
258
|
renames[k] = v.to_s
|
247
|
-
renames[k.to_s.underscore] = v.to_s.underscore.to_sym
|
248
|
-
renames[k.to_s.underscore.pluralize] = v.to_s.underscore.pluralize.to_sym
|
249
259
|
else
|
250
260
|
simple_options[k] = v
|
251
261
|
end
|
@@ -302,7 +312,7 @@ module ::Hobo
|
|
302
312
|
external_options = self.options[option_name]
|
303
313
|
external_options = {} if external_options.nil? || external_options == true
|
304
314
|
name = "#{self.name}_#{option_name}"
|
305
|
-
|
315
|
+
|
306
316
|
sub_bundle_options = external_options.merge(local_options).merge(renames)
|
307
317
|
sub_bundle = class_name.to_s.constantize.new(name, sub_bundle_options)
|
308
318
|
|
@@ -27,7 +27,11 @@ module Hobo
|
|
27
27
|
APPLICATION_TAGLIB = { :src => "taglibs/application" }
|
28
28
|
CORE_TAGLIB = { :src => "core", :plugin => "hobo" }
|
29
29
|
|
30
|
-
DEFAULT_IMPORTS =
|
30
|
+
DEFAULT_IMPORTS = (if defined?(ApplicationHelper)
|
31
|
+
[Hobo::HoboHelper, ApplicationHelper]
|
32
|
+
else
|
33
|
+
[Hobo::HoboHelper]
|
34
|
+
end)
|
31
35
|
|
32
36
|
@renderer_classes = {}
|
33
37
|
@tag_page_renderer_classes = {}
|
@@ -128,7 +128,7 @@ module Hobo::Dryml
|
|
128
128
|
def set_theme(name)
|
129
129
|
if Hobo.current_theme.nil? or Hobo.current_theme == name
|
130
130
|
Hobo.current_theme = name
|
131
|
-
import_taglib(:src => "taglibs/themes/#{name}
|
131
|
+
import_taglib(:src => "taglibs/themes/#{name}/#{name}")
|
132
132
|
end
|
133
133
|
end
|
134
134
|
end
|
@@ -2,18 +2,18 @@ module Hobo::Dryml::Parser
|
|
2
2
|
|
3
3
|
class BaseParser < REXML::Parsers::BaseParser
|
4
4
|
|
5
|
-
|
5
|
+
NEW_REX = REXML::VERSION =~ /3\.1\.(\d)(?:\.(\d))?/ && $1.to_i*1000 + $2.to_i >= 7002
|
6
6
|
|
7
7
|
DRYML_NAME_STR = "#{NCNAME_STR}(?::(?:#{NCNAME_STR})?)?"
|
8
|
-
DRYML_ATTRIBUTE_PATTERN = if
|
9
|
-
/\s*(#{NAME_STR})(?:\s*=\s*(["'])(.*?)\2)?/um
|
10
|
-
else
|
8
|
+
DRYML_ATTRIBUTE_PATTERN = if NEW_REX
|
11
9
|
/\s*(#{NAME_STR})(?:\s*=\s*(["'])(.*?)\4)?/um
|
12
|
-
end
|
13
|
-
DRYML_TAG_MATCH = if REX_3_1_7_1
|
14
|
-
/^<((?>#{DRYML_NAME_STR}))\s*((?>\s+#{NAME_STR}(?:\s*=\s*(["']).*?\3)?)*)\s*(\/)?>/um
|
15
10
|
else
|
11
|
+
/\s*(#{NAME_STR})(?:\s*=\s*(["'])(.*?)\2)?/um
|
12
|
+
end
|
13
|
+
DRYML_TAG_MATCH = if NEW_REX
|
16
14
|
/^<((?>#{DRYML_NAME_STR}))\s*((?>\s+#{NAME_STR}(?:\s*=\s*(["']).*?\5)?)*)\s*(\/)?>/um
|
15
|
+
else
|
16
|
+
/^<((?>#{DRYML_NAME_STR}))\s*((?>\s+#{NAME_STR}(?:\s*=\s*(["']).*?\3)?)*)\s*(\/)?>/um
|
17
17
|
end
|
18
18
|
DRYML_CLOSE_MATCH = /^\s*<\/(#{DRYML_NAME_STR})\s*>/um
|
19
19
|
|
@@ -200,7 +200,8 @@ module Hobo::Dryml::Parser
|
|
200
200
|
md = @source.match(DRYML_TAG_MATCH, true)
|
201
201
|
unless md
|
202
202
|
# Check for missing attribute quotes
|
203
|
-
raise REXML::ParseException.new("missing attribute quote", @source) if
|
203
|
+
raise REXML::ParseException.new("missing attribute quote", @source) if
|
204
|
+
defined?(MISSING_ATTRIBUTE_QUOTES) && @source.match(MISSING_ATTRIBUTE_QUOTES)
|
204
205
|
raise REXML::ParseException.new("malformed XML: missing tag start", @source)
|
205
206
|
|
206
207
|
end
|
@@ -210,7 +211,7 @@ module Hobo::Dryml::Parser
|
|
210
211
|
attrs = md[2].scan(DRYML_ATTRIBUTE_PATTERN)
|
211
212
|
raise REXML::ParseException.new( "error parsing attributes: [#{attrs.join ', '}], excess = \"#$'\"", @source) if $' and $'.strip.size > 0
|
212
213
|
attrs.each { |a,b,c,d,e|
|
213
|
-
val =
|
214
|
+
val = NEW_REX ? e : c
|
214
215
|
if attributes.has_key? a
|
215
216
|
msg = "Duplicate attribute #{a.inspect}"
|
216
217
|
raise REXML::ParseException.new( msg, @source, self)
|
@@ -219,7 +220,7 @@ module Hobo::Dryml::Parser
|
|
219
220
|
}
|
220
221
|
end
|
221
222
|
|
222
|
-
if md[
|
223
|
+
if md[NEW_REX ? 6 : 4]
|
223
224
|
@closed = md[1]
|
224
225
|
#@nsstack.shift
|
225
226
|
else
|