relevance-tarantula 0.0.8.0 → 0.0.8.1

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,2 +1,13 @@
1
+ v0.0.8.1
2
+ * Fix numerous installation and initial setup issues
3
+ * Enhance rake tasks to support use of Tarantula in a continuous integration environment
4
+ ** Use "rake tarantula:test" to run headless with build-friendly exit codes
5
+ ** Use "rake tarantula:report" to open the Tarantula report in your browser
6
+ * Update README
7
+ ** Provide better installation and setup documentation
8
+ ** Include example of adding a custom attack handler
9
+ * Simplify design to address concerns about hard-to-read fonts
10
+
1
11
  v0.0.5 Make sure we don't include Relevance::Tarantula into Object - will cause issues Rails dependencies and is a bad idea in general; update Rakefile for dev dependencies; another small clean up tasks
12
+
2
13
  v0.0.1 Tarantula becomes a gem. (Aaron Bedra)
data/MIT-LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2008 Relevance, Inc.
1
+ Copyright (c) 2008-2009 Relevance, Inc.
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.rdoc CHANGED
@@ -92,15 +92,14 @@ This assumes that you have Rails 2.1 or higher installed.
92
92
 
93
93
  config.gem 'relevance-tarantula', :source => "http://gems.github.com", :lib => 'relevance/tarantula'
94
94
 
95
- Since rails doesn't (yet) support loading rake tasks that live inside gems you will need to add the following line into your Rakefile.
96
-
97
- load File.join(RAILS_ROOT, "vendor/gems/relevance-tarantula-0.0.7.1/tasks/tarantula_tasks.rake")
98
-
99
- Substituting the proper version of relevance-tarantula in the path. This assumes that you have vendored tarantula. To do so simply run
100
-
95
+ Since rails doesn't (yet) support loading rake tasks that live inside gems you will need to update your Rakefile. This assumes that you have vendored tarantula. Simply run
96
+
97
+ cd vendor/gems
101
98
  gem unpack relevance-tarantula
102
99
 
103
- from the vendor/gems directory of your application.
100
+ You can then add the following line into your Rakefile, substituting the proper version of relevance-tarantula in the path.
101
+
102
+ load File.join(RAILS_ROOT, "vendor/gems/relevance-tarantula-0.0.8.1/tasks/tarantula_tasks.rake")
104
103
 
105
104
  You can also grab it from Rubyforge, where we will push stable releases but may not be as bleeding edge as the Github gem.
106
105
 
@@ -112,27 +111,6 @@ Please submit your bug reports, patches or feature requests at Lighthouse:
112
111
 
113
112
  http://relevance.lighthouseapp.com/projects/17868-tarantula/overview
114
113
 
115
- == License and Copyright
116
-
117
- (The MIT License)
118
-
119
- Copyright (c) 2008 Relevance, Inc. - http://thinkrelevance.com
120
-
121
- Permission is hereby granted, free of charge, to any person obtaining
122
- a copy of this software and associated documentation files (the
123
- 'Software'), to deal in the Software without restriction, including
124
- without limitation the rights to use, copy, modify, merge, publish,
125
- distribute, sublicense, and/or sell copies of the Software, and to
126
- permit persons to whom the Software is furnished to do so, subject to
127
- the following conditions:
128
-
129
- The above copyright notice and this permission notice shall be
130
- included in all copies or substantial portions of the Software.
114
+ == License
131
115
 
132
- THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
133
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
134
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
135
- IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
136
- CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
137
- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
138
- SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
116
+ Tarantula is released under the MIT license.
@@ -0,0 +1,11 @@
1
+ /*nifty corners layout*/
2
+
3
+ window.onload=function(){
4
+ Nifty("div#menu a","small transparent top");
5
+ Nifty("ul#intro li","same-height");
6
+ Nifty("div.date");
7
+ Nifty("div#content,div#side","same-height");
8
+ Nifty("div.comments div");
9
+ Nifty("div#footer");
10
+ Nifty("div#container","bottom");
11
+ }
@@ -0,0 +1,298 @@
1
+ /* Nifty Corners Cube - rounded corners with CSS and Javascript
2
+ Copyright 2006 Alessandro Fulciniti (a.fulciniti@html.it)
3
+
4
+ This program is free software; you can redistribute it and/or modify
5
+ it under the terms of the GNU General Public License as published by
6
+ the Free Software Foundation; either version 2 of the License, or
7
+ (at your option) any later version.
8
+
9
+ This program is distributed in the hope that it will be useful,
10
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ GNU General Public License for more details.
13
+
14
+ You should have received a copy of the GNU General Public License
15
+ along with this program; if not, write to the Free Software
16
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17
+ */
18
+
19
+ var niftyOk=(document.getElementById && document.createElement && Array.prototype.push);
20
+ var niftyCss=false;
21
+
22
+ String.prototype.find=function(what){
23
+ return(this.indexOf(what)>=0 ? true : false);
24
+ }
25
+
26
+ var oldonload=window.onload;
27
+ if(typeof(NiftyLoad)!='function') NiftyLoad=function(){};
28
+ if(typeof(oldonload)=='function')
29
+ window.onload=function(){oldonload();AddCss();NiftyLoad()};
30
+ else window.onload=function(){AddCss();NiftyLoad()};
31
+
32
+ function AddCss(){
33
+ niftyCss=true;
34
+ var l=CreateEl("link");
35
+ l.setAttribute("type","text/css");
36
+ l.setAttribute("rel","stylesheet");
37
+ l.setAttribute("href","../stylesheets/niftyCorners.css");
38
+ l.setAttribute("media","screen");
39
+ document.getElementsByTagName("head")[0].appendChild(l);
40
+ }
41
+
42
+ function Nifty(selector,options){
43
+ if(niftyOk==false) return;
44
+ if(niftyCss==false) AddCss();
45
+ var i,v=selector.split(","),h=0;
46
+ if(options==null) options="";
47
+ if(options.find("fixed-height"))
48
+ h=getElementsBySelector(v[0])[0].offsetHeight;
49
+ for(i=0;i<v.length;i++)
50
+ Rounded(v[i],options);
51
+ if(options.find("height")) SameHeight(selector,h);
52
+ }
53
+
54
+ function Rounded(selector,options){
55
+ var i,top="",bottom="",v=new Array();
56
+ if(options!=""){
57
+ options=options.replace("left","tl bl");
58
+ options=options.replace("right","tr br");
59
+ options=options.replace("top","tr tl");
60
+ options=options.replace("bottom","br bl");
61
+ options=options.replace("transparent","alias");
62
+ if(options.find("tl")){
63
+ top="both";
64
+ if(!options.find("tr")) top="left";
65
+ }
66
+ else if(options.find("tr")) top="right";
67
+ if(options.find("bl")){
68
+ bottom="both";
69
+ if(!options.find("br")) bottom="left";
70
+ }
71
+ else if(options.find("br")) bottom="right";
72
+ }
73
+ if(top=="" && bottom=="" && !options.find("none")){top="both";bottom="both";}
74
+ v=getElementsBySelector(selector);
75
+ for(i=0;i<v.length;i++){
76
+ FixIE(v[i]);
77
+ if(top!="") AddTop(v[i],top,options);
78
+ if(bottom!="") AddBottom(v[i],bottom,options);
79
+ }
80
+ }
81
+
82
+ function AddTop(el,side,options){
83
+ var d=CreateEl("b"),lim=4,border="",p,i,btype="r",bk,color;
84
+ d.style.marginLeft="-"+getPadding(el,"Left")+"px";
85
+ d.style.marginRight="-"+getPadding(el,"Right")+"px";
86
+ if(options.find("alias") || (color=getBk(el))=="transparent"){
87
+ color="transparent";bk="transparent"; border=getParentBk(el);btype="t";
88
+ }
89
+ else{
90
+ bk=getParentBk(el); border=Mix(color,bk);
91
+ }
92
+ d.style.background=bk;
93
+ d.className="niftycorners";
94
+ p=getPadding(el,"Top");
95
+ if(options.find("small")){
96
+ d.style.marginBottom=(p-2)+"px";
97
+ btype+="s"; lim=2;
98
+ }
99
+ else if(options.find("big")){
100
+ d.style.marginBottom=(p-10)+"px";
101
+ btype+="b"; lim=8;
102
+ }
103
+ else d.style.marginBottom=(p-5)+"px";
104
+ for(i=1;i<=lim;i++)
105
+ d.appendChild(CreateStrip(i,side,color,border,btype));
106
+ el.style.paddingTop="0";
107
+ el.insertBefore(d,el.firstChild);
108
+ }
109
+
110
+ function AddBottom(el,side,options){
111
+ var d=CreateEl("b"),lim=4,border="",p,i,btype="r",bk,color;
112
+ d.style.marginLeft="-"+getPadding(el,"Left")+"px";
113
+ d.style.marginRight="-"+getPadding(el,"Right")+"px";
114
+ if(options.find("alias") || (color=getBk(el))=="transparent"){
115
+ color="transparent";bk="transparent"; border=getParentBk(el);btype="t";
116
+ }
117
+ else{
118
+ bk=getParentBk(el); border=Mix(color,bk);
119
+ }
120
+ d.style.background=bk;
121
+ d.className="niftycorners";
122
+ p=getPadding(el,"Bottom");
123
+ if(options.find("small")){
124
+ d.style.marginTop=(p-2)+"px";
125
+ btype+="s"; lim=2;
126
+ }
127
+ else if(options.find("big")){
128
+ d.style.marginTop=(p-10)+"px";
129
+ btype+="b"; lim=8;
130
+ }
131
+ else d.style.marginTop=(p-5)+"px";
132
+ for(i=lim;i>0;i--)
133
+ d.appendChild(CreateStrip(i,side,color,border,btype));
134
+ el.style.paddingBottom=0;
135
+ el.appendChild(d);
136
+ }
137
+
138
+ function CreateStrip(index,side,color,border,btype){
139
+ var x=CreateEl("b");
140
+ x.className=btype+index;
141
+ x.style.backgroundColor=color;
142
+ x.style.borderColor=border;
143
+ if(side=="left"){
144
+ x.style.borderRightWidth="0";
145
+ x.style.marginRight="0";
146
+ }
147
+ else if(side=="right"){
148
+ x.style.borderLeftWidth="0";
149
+ x.style.marginLeft="0";
150
+ }
151
+ return(x);
152
+ }
153
+
154
+ function CreateEl(x){
155
+ return(document.createElement(x));
156
+ }
157
+
158
+ function FixIE(el){
159
+ if(el.currentStyle!=null && el.currentStyle.hasLayout!=null && el.currentStyle.hasLayout==false)
160
+ el.style.display="inline-block";
161
+ }
162
+
163
+ function SameHeight(selector,maxh){
164
+ var i,v=selector.split(","),t,j,els=[],gap;
165
+ for(i=0;i<v.length;i++){
166
+ t=getElementsBySelector(v[i]);
167
+ els=els.concat(t);
168
+ }
169
+ for(i=0;i<els.length;i++){
170
+ if(els[i].offsetHeight>maxh) maxh=els[i].offsetHeight;
171
+ els[i].style.height="auto";
172
+ }
173
+ for(i=0;i<els.length;i++){
174
+ gap=maxh-els[i].offsetHeight;
175
+ if(gap>0){
176
+ t=CreateEl("b");t.className="niftyfill";t.style.height=gap+"px";
177
+ nc=els[i].lastChild;
178
+ if(nc.className=="niftycorners")
179
+ els[i].insertBefore(t,nc);
180
+ else els[i].appendChild(t);
181
+ }
182
+ }
183
+ }
184
+
185
+ function getElementsBySelector(selector){
186
+ var i,j,selid="",selclass="",tag=selector,tag2="",v2,k,f,a,s=[],objlist=[],c;
187
+ if(selector.find("#")){ //id selector like "tag#id"
188
+ if(selector.find(" ")){ //descendant selector like "tag#id tag"
189
+ s=selector.split(" ");
190
+ var fs=s[0].split("#");
191
+ if(fs.length==1) return(objlist);
192
+ f=document.getElementById(fs[1]);
193
+ if(f){
194
+ v=f.getElementsByTagName(s[1]);
195
+ for(i=0;i<v.length;i++) objlist.push(v[i]);
196
+ }
197
+ return(objlist);
198
+ }
199
+ else{
200
+ s=selector.split("#");
201
+ tag=s[0];
202
+ selid=s[1];
203
+ if(selid!=""){
204
+ f=document.getElementById(selid);
205
+ if(f) objlist.push(f);
206
+ return(objlist);
207
+ }
208
+ }
209
+ }
210
+ if(selector.find(".")){ //class selector like "tag.class"
211
+ s=selector.split(".");
212
+ tag=s[0];
213
+ selclass=s[1];
214
+ if(selclass.find(" ")){ //descendant selector like tag1.classname tag2
215
+ s=selclass.split(" ");
216
+ selclass=s[0];
217
+ tag2=s[1];
218
+ }
219
+ }
220
+ var v=document.getElementsByTagName(tag); // tag selector like "tag"
221
+ if(selclass==""){
222
+ for(i=0;i<v.length;i++) objlist.push(v[i]);
223
+ return(objlist);
224
+ }
225
+ for(i=0;i<v.length;i++){
226
+ c=v[i].className.split(" ");
227
+ for(j=0;j<c.length;j++){
228
+ if(c[j]==selclass){
229
+ if(tag2=="") objlist.push(v[i]);
230
+ else{
231
+ v2=v[i].getElementsByTagName(tag2);
232
+ for(k=0;k<v2.length;k++) objlist.push(v2[k]);
233
+ }
234
+ }
235
+ }
236
+ }
237
+ return(objlist);
238
+ }
239
+
240
+ function getParentBk(x){
241
+ var el=x.parentNode,c;
242
+ while(el.tagName.toUpperCase()!="HTML" && (c=getBk(el))=="transparent")
243
+ el=el.parentNode;
244
+ if(c=="transparent") c="#FFFFFF";
245
+ return(c);
246
+ }
247
+
248
+ function getBk(x){
249
+ var c=getStyleProp(x,"backgroundColor");
250
+ if(c==null || c=="transparent" || c.find("rgba(0, 0, 0, 0)"))
251
+ return("transparent");
252
+ if(c.find("rgb")) c=rgb2hex(c);
253
+ return(c);
254
+ }
255
+
256
+ function getPadding(x,side){
257
+ var p=getStyleProp(x,"padding"+side);
258
+ if(p==null || !p.find("px")) return(0);
259
+ return(parseInt(p));
260
+ }
261
+
262
+ function getStyleProp(x,prop){
263
+ if(x.currentStyle)
264
+ return(x.currentStyle[prop]);
265
+ if(document.defaultView.getComputedStyle)
266
+ return(document.defaultView.getComputedStyle(x,'')[prop]);
267
+ return(null);
268
+ }
269
+
270
+ function rgb2hex(value){
271
+ var hex="",v,h,i;
272
+ var regexp=/([0-9]+)[, ]+([0-9]+)[, ]+([0-9]+)/;
273
+ var h=regexp.exec(value);
274
+ for(i=1;i<4;i++){
275
+ v=parseInt(h[i]).toString(16);
276
+ if(v.length==1) hex+="0"+v;
277
+ else hex+=v;
278
+ }
279
+ return("#"+hex);
280
+ }
281
+
282
+ function Mix(c1,c2){
283
+ var i,step1,step2,x,y,r=new Array(3);
284
+ if(c1.length==4)step1=1;
285
+ else step1=2;
286
+ if(c2.length==4) step2=1;
287
+ else step2=2;
288
+ for(i=0;i<3;i++){
289
+ x=parseInt(c1.substr(1+step1*i,step1),16);
290
+ if(step1==1) x=16*x+x;
291
+ y=parseInt(c2.substr(1+step2*i,step2),16);
292
+ if(step2==1) y=16*y+y;
293
+ r[i]=Math.floor((x*50+y*50)/100);
294
+ r[i]=r[i].toString(16);
295
+ if(r[i].length==1) r[i]="0"+r[i];
296
+ }
297
+ return("#"+r[0]+r[1]+r[2]);
298
+ }
@@ -0,0 +1,298 @@
1
+ /* Nifty Corners Cube - rounded corners with CSS and Javascript
2
+ Copyright 2006 Alessandro Fulciniti (a.fulciniti@html.it)
3
+
4
+ This program is free software; you can redistribute it and/or modify
5
+ it under the terms of the GNU General Public License as published by
6
+ the Free Software Foundation; either version 2 of the License, or
7
+ (at your option) any later version.
8
+
9
+ This program is distributed in the hope that it will be useful,
10
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ GNU General Public License for more details.
13
+
14
+ You should have received a copy of the GNU General Public License
15
+ along with this program; if not, write to the Free Software
16
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17
+ */
18
+
19
+ var niftyOk=(document.getElementById && document.createElement && Array.prototype.push);
20
+ var niftyCss=false;
21
+
22
+ String.prototype.find=function(what){
23
+ return(this.indexOf(what)>=0 ? true : false);
24
+ }
25
+
26
+ var oldonload=window.onload;
27
+ if(typeof(NiftyLoad)!='function') NiftyLoad=function(){};
28
+ if(typeof(oldonload)=='function')
29
+ window.onload=function(){oldonload();AddCss();NiftyLoad()};
30
+ else window.onload=function(){AddCss();NiftyLoad()};
31
+
32
+ function AddCss(){
33
+ niftyCss=true;
34
+ var l=CreateEl("link");
35
+ l.setAttribute("type","text/css");
36
+ l.setAttribute("rel","stylesheet");
37
+ l.setAttribute("href","stylesheets/niftyCorners.css");
38
+ l.setAttribute("media","screen");
39
+ document.getElementsByTagName("head")[0].appendChild(l);
40
+ }
41
+
42
+ function Nifty(selector,options){
43
+ if(niftyOk==false) return;
44
+ if(niftyCss==false) AddCss();
45
+ var i,v=selector.split(","),h=0;
46
+ if(options==null) options="";
47
+ if(options.find("fixed-height"))
48
+ h=getElementsBySelector(v[0])[0].offsetHeight;
49
+ for(i=0;i<v.length;i++)
50
+ Rounded(v[i],options);
51
+ if(options.find("height")) SameHeight(selector,h);
52
+ }
53
+
54
+ function Rounded(selector,options){
55
+ var i,top="",bottom="",v=new Array();
56
+ if(options!=""){
57
+ options=options.replace("left","tl bl");
58
+ options=options.replace("right","tr br");
59
+ options=options.replace("top","tr tl");
60
+ options=options.replace("bottom","br bl");
61
+ options=options.replace("transparent","alias");
62
+ if(options.find("tl")){
63
+ top="both";
64
+ if(!options.find("tr")) top="left";
65
+ }
66
+ else if(options.find("tr")) top="right";
67
+ if(options.find("bl")){
68
+ bottom="both";
69
+ if(!options.find("br")) bottom="left";
70
+ }
71
+ else if(options.find("br")) bottom="right";
72
+ }
73
+ if(top=="" && bottom=="" && !options.find("none")){top="both";bottom="both";}
74
+ v=getElementsBySelector(selector);
75
+ for(i=0;i<v.length;i++){
76
+ FixIE(v[i]);
77
+ if(top!="") AddTop(v[i],top,options);
78
+ if(bottom!="") AddBottom(v[i],bottom,options);
79
+ }
80
+ }
81
+
82
+ function AddTop(el,side,options){
83
+ var d=CreateEl("b"),lim=4,border="",p,i,btype="r",bk,color;
84
+ d.style.marginLeft="-"+getPadding(el,"Left")+"px";
85
+ d.style.marginRight="-"+getPadding(el,"Right")+"px";
86
+ if(options.find("alias") || (color=getBk(el))=="transparent"){
87
+ color="transparent";bk="transparent"; border=getParentBk(el);btype="t";
88
+ }
89
+ else{
90
+ bk=getParentBk(el); border=Mix(color,bk);
91
+ }
92
+ d.style.background=bk;
93
+ d.className="niftycorners";
94
+ p=getPadding(el,"Top");
95
+ if(options.find("small")){
96
+ d.style.marginBottom=(p-2)+"px";
97
+ btype+="s"; lim=2;
98
+ }
99
+ else if(options.find("big")){
100
+ d.style.marginBottom=(p-10)+"px";
101
+ btype+="b"; lim=8;
102
+ }
103
+ else d.style.marginBottom=(p-5)+"px";
104
+ for(i=1;i<=lim;i++)
105
+ d.appendChild(CreateStrip(i,side,color,border,btype));
106
+ el.style.paddingTop="0";
107
+ el.insertBefore(d,el.firstChild);
108
+ }
109
+
110
+ function AddBottom(el,side,options){
111
+ var d=CreateEl("b"),lim=4,border="",p,i,btype="r",bk,color;
112
+ d.style.marginLeft="-"+getPadding(el,"Left")+"px";
113
+ d.style.marginRight="-"+getPadding(el,"Right")+"px";
114
+ if(options.find("alias") || (color=getBk(el))=="transparent"){
115
+ color="transparent";bk="transparent"; border=getParentBk(el);btype="t";
116
+ }
117
+ else{
118
+ bk=getParentBk(el); border=Mix(color,bk);
119
+ }
120
+ d.style.background=bk;
121
+ d.className="niftycorners";
122
+ p=getPadding(el,"Bottom");
123
+ if(options.find("small")){
124
+ d.style.marginTop=(p-2)+"px";
125
+ btype+="s"; lim=2;
126
+ }
127
+ else if(options.find("big")){
128
+ d.style.marginTop=(p-10)+"px";
129
+ btype+="b"; lim=8;
130
+ }
131
+ else d.style.marginTop=(p-5)+"px";
132
+ for(i=lim;i>0;i--)
133
+ d.appendChild(CreateStrip(i,side,color,border,btype));
134
+ el.style.paddingBottom=0;
135
+ el.appendChild(d);
136
+ }
137
+
138
+ function CreateStrip(index,side,color,border,btype){
139
+ var x=CreateEl("b");
140
+ x.className=btype+index;
141
+ x.style.backgroundColor=color;
142
+ x.style.borderColor=border;
143
+ if(side=="left"){
144
+ x.style.borderRightWidth="0";
145
+ x.style.marginRight="0";
146
+ }
147
+ else if(side=="right"){
148
+ x.style.borderLeftWidth="0";
149
+ x.style.marginLeft="0";
150
+ }
151
+ return(x);
152
+ }
153
+
154
+ function CreateEl(x){
155
+ return(document.createElement(x));
156
+ }
157
+
158
+ function FixIE(el){
159
+ if(el.currentStyle!=null && el.currentStyle.hasLayout!=null && el.currentStyle.hasLayout==false)
160
+ el.style.display="inline-block";
161
+ }
162
+
163
+ function SameHeight(selector,maxh){
164
+ var i,v=selector.split(","),t,j,els=[],gap;
165
+ for(i=0;i<v.length;i++){
166
+ t=getElementsBySelector(v[i]);
167
+ els=els.concat(t);
168
+ }
169
+ for(i=0;i<els.length;i++){
170
+ if(els[i].offsetHeight>maxh) maxh=els[i].offsetHeight;
171
+ els[i].style.height="auto";
172
+ }
173
+ for(i=0;i<els.length;i++){
174
+ gap=maxh-els[i].offsetHeight;
175
+ if(gap>0){
176
+ t=CreateEl("b");t.className="niftyfill";t.style.height=gap+"px";
177
+ nc=els[i].lastChild;
178
+ if(nc.className=="niftycorners")
179
+ els[i].insertBefore(t,nc);
180
+ else els[i].appendChild(t);
181
+ }
182
+ }
183
+ }
184
+
185
+ function getElementsBySelector(selector){
186
+ var i,j,selid="",selclass="",tag=selector,tag2="",v2,k,f,a,s=[],objlist=[],c;
187
+ if(selector.find("#")){ //id selector like "tag#id"
188
+ if(selector.find(" ")){ //descendant selector like "tag#id tag"
189
+ s=selector.split(" ");
190
+ var fs=s[0].split("#");
191
+ if(fs.length==1) return(objlist);
192
+ f=document.getElementById(fs[1]);
193
+ if(f){
194
+ v=f.getElementsByTagName(s[1]);
195
+ for(i=0;i<v.length;i++) objlist.push(v[i]);
196
+ }
197
+ return(objlist);
198
+ }
199
+ else{
200
+ s=selector.split("#");
201
+ tag=s[0];
202
+ selid=s[1];
203
+ if(selid!=""){
204
+ f=document.getElementById(selid);
205
+ if(f) objlist.push(f);
206
+ return(objlist);
207
+ }
208
+ }
209
+ }
210
+ if(selector.find(".")){ //class selector like "tag.class"
211
+ s=selector.split(".");
212
+ tag=s[0];
213
+ selclass=s[1];
214
+ if(selclass.find(" ")){ //descendant selector like tag1.classname tag2
215
+ s=selclass.split(" ");
216
+ selclass=s[0];
217
+ tag2=s[1];
218
+ }
219
+ }
220
+ var v=document.getElementsByTagName(tag); // tag selector like "tag"
221
+ if(selclass==""){
222
+ for(i=0;i<v.length;i++) objlist.push(v[i]);
223
+ return(objlist);
224
+ }
225
+ for(i=0;i<v.length;i++){
226
+ c=v[i].className.split(" ");
227
+ for(j=0;j<c.length;j++){
228
+ if(c[j]==selclass){
229
+ if(tag2=="") objlist.push(v[i]);
230
+ else{
231
+ v2=v[i].getElementsByTagName(tag2);
232
+ for(k=0;k<v2.length;k++) objlist.push(v2[k]);
233
+ }
234
+ }
235
+ }
236
+ }
237
+ return(objlist);
238
+ }
239
+
240
+ function getParentBk(x){
241
+ var el=x.parentNode,c;
242
+ while(el.tagName.toUpperCase()!="HTML" && (c=getBk(el))=="transparent")
243
+ el=el.parentNode;
244
+ if(c=="transparent") c="#FFFFFF";
245
+ return(c);
246
+ }
247
+
248
+ function getBk(x){
249
+ var c=getStyleProp(x,"backgroundColor");
250
+ if(c==null || c=="transparent" || c.find("rgba(0, 0, 0, 0)"))
251
+ return("transparent");
252
+ if(c.find("rgb")) c=rgb2hex(c);
253
+ return(c);
254
+ }
255
+
256
+ function getPadding(x,side){
257
+ var p=getStyleProp(x,"padding"+side);
258
+ if(p==null || !p.find("px")) return(0);
259
+ return(parseInt(p));
260
+ }
261
+
262
+ function getStyleProp(x,prop){
263
+ if(x.currentStyle)
264
+ return(x.currentStyle[prop]);
265
+ if(document.defaultView.getComputedStyle)
266
+ return(document.defaultView.getComputedStyle(x,'')[prop]);
267
+ return(null);
268
+ }
269
+
270
+ function rgb2hex(value){
271
+ var hex="",v,h,i;
272
+ var regexp=/([0-9]+)[, ]+([0-9]+)[, ]+([0-9]+)/;
273
+ var h=regexp.exec(value);
274
+ for(i=1;i<4;i++){
275
+ v=parseInt(h[i]).toString(16);
276
+ if(v.length==1) hex+="0"+v;
277
+ else hex+=v;
278
+ }
279
+ return("#"+hex);
280
+ }
281
+
282
+ function Mix(c1,c2){
283
+ var i,step1,step2,x,y,r=new Array(3);
284
+ if(c1.length==4)step1=1;
285
+ else step1=2;
286
+ if(c2.length==4) step2=1;
287
+ else step2=2;
288
+ for(i=0;i<3;i++){
289
+ x=parseInt(c1.substr(1+step1*i,step1),16);
290
+ if(step1==1) x=16*x+x;
291
+ y=parseInt(c2.substr(1+step2*i,step2),16);
292
+ if(step2==1) y=16*y+y;
293
+ r[i]=Math.floor((x*50+y*50)/100);
294
+ r[i]=r[i].toString(16);
295
+ if(r[i].length==1) r[i]="0"+r[i];
296
+ }
297
+ return("#"+r[0]+r[1]+r[2]);
298
+ }