sweetie 0.1.2 → 1.0.0
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/.gitignore +0 -1
- data/.rspec +3 -0
- data/.travis.yml +3 -2
- data/Gemfile +5 -0
- data/README.md +73 -16
- data/lib/sweetie.rb +2 -3
- data/lib/sweetie/bitbucket.rb +143 -0
- data/lib/sweetie/conversion.rb +86 -0
- data/lib/sweetie/helper.rb +85 -0
- data/lib/sweetie/version.rb +4 -0
- data/spec/source/bitbucket/user_changeset.json +30 -0
- data/spec/source/bitbucket/user_changeset_expectation.txt +1 -0
- data/spec/source/bitbucket/user_repositories.json +143 -0
- data/spec/sweetie_bitbucket_spec.rb +66 -0
- data/spec/sweetie_conversion_spec.rb +31 -0
- data/sweetie.gemspec +22 -18
- metadata +109 -112
- data/doc/Sweetie.html +0 -125
- data/doc/_index.html +0 -121
- data/doc/class_list.html +0 -47
- data/doc/css/common.css +0 -1
- data/doc/css/full_list.css +0 -53
- data/doc/css/style.css +0 -320
- data/doc/file.README.html +0 -95
- data/doc/file_list.html +0 -49
- data/doc/frames.html +0 -13
- data/doc/index.html +0 -95
- data/doc/js/app.js +0 -205
- data/doc/js/full_list.js +0 -150
- data/doc/js/jquery.js +0 -16
- data/doc/method_list.html +0 -126
- data/doc/top-level-namespace.html +0 -103
- data/spec/source/site/css/config.rb +0 -24
- data/spec/source/site/css/sass/site.sass +0 -180
- data/spec/source/site/css/stylesheets/iphone.css +0 -17
- data/spec/source/site/css/stylesheets/site.css +0 -246
- data/spec/source/site/css/stylesheets/syntax.css +0 -60
- data/spec/source/site/js/FancyZoom.js +0 -761
- data/spec/source/site/js/FancyZoomHTML.js +0 -318
- data/spec/source/site/test/config.rb +0 -24
- data/spec/source/site/test/sass/ie.scss +0 -5
- data/spec/source/site/test/sass/print.scss +0 -3
- data/spec/source/site/test/sass/screen.scss +0 -6
- data/spec/source/site/test/stylesheets/ie.css +0 -5
- data/spec/source/site/test/stylesheets/print.css +0 -3
- data/spec/source/site/test/stylesheets/screen.css +0 -69
- data/spec/sweetie_spec.rb +0 -30
@@ -1,246 +0,0 @@
|
|
1
|
-
/* line 13, ../sass/site.sass */
|
2
|
-
* {
|
3
|
-
margin: 5px 0 0 0;
|
4
|
-
padding: 0;
|
5
|
-
}
|
6
|
-
|
7
|
-
/* line 17, ../sass/site.sass */
|
8
|
-
html, body {
|
9
|
-
height: 100%;
|
10
|
-
}
|
11
|
-
|
12
|
-
/* line 20, ../sass/site.sass */
|
13
|
-
body {
|
14
|
-
background-color: white;
|
15
|
-
font: 400 1em trebuchet ms, arial, clean;
|
16
|
-
text-align: center;
|
17
|
-
}
|
18
|
-
|
19
|
-
/* line 25, ../sass/site.sass */
|
20
|
-
h1, h2, h3, h4, h5, h6 {
|
21
|
-
font-size: 110%;
|
22
|
-
margin: 30px 0 10px 0;
|
23
|
-
text-transform: uppercase;
|
24
|
-
}
|
25
|
-
|
26
|
-
/* line 30, ../sass/site.sass */
|
27
|
-
h3 {
|
28
|
-
margin: 20px 0 10px 0;
|
29
|
-
}
|
30
|
-
|
31
|
-
/* line 33, ../sass/site.sass */
|
32
|
-
h1 {
|
33
|
-
font-size: 120%;
|
34
|
-
}
|
35
|
-
|
36
|
-
/* line 36, ../sass/site.sass */
|
37
|
-
h2, h3, h4, h5, h6 {
|
38
|
-
font-size: 110%;
|
39
|
-
}
|
40
|
-
|
41
|
-
/* line 39, ../sass/site.sass */
|
42
|
-
#sitetitle {
|
43
|
-
font: 400 3.5em arial, sans-serif;
|
44
|
-
letter-spacing: -0.1em;
|
45
|
-
text-transform: uppercase;
|
46
|
-
height: 1.15em;
|
47
|
-
}
|
48
|
-
/* line 44, ../sass/site.sass */
|
49
|
-
#sitetitle a {
|
50
|
-
color: #bdbbbb;
|
51
|
-
text-decoration: none;
|
52
|
-
border-bottom: 0px;
|
53
|
-
}
|
54
|
-
|
55
|
-
/* line 49, ../sass/site.sass */
|
56
|
-
#tagseperator {
|
57
|
-
font-size: 3.5em;
|
58
|
-
color: #bdbbbb;
|
59
|
-
}
|
60
|
-
|
61
|
-
/* line 53, ../sass/site.sass */
|
62
|
-
#tagline {
|
63
|
-
font-size: 0.9em;
|
64
|
-
color: #bdbbbb;
|
65
|
-
}
|
66
|
-
|
67
|
-
/* line 57, ../sass/site.sass */
|
68
|
-
a#navlink, a#archivelink {
|
69
|
-
padding-right: 10px;
|
70
|
-
text-transform: uppercase;
|
71
|
-
border-bottom: 0px dotted #0048a2;
|
72
|
-
}
|
73
|
-
|
74
|
-
/* line 62, ../sass/site.sass */
|
75
|
-
a#navlink:hover {
|
76
|
-
color: #3366cc;
|
77
|
-
}
|
78
|
-
|
79
|
-
/* line 65, ../sass/site.sass */
|
80
|
-
a#archivelink {
|
81
|
-
float: right;
|
82
|
-
}
|
83
|
-
|
84
|
-
/* line 68, ../sass/site.sass */
|
85
|
-
.title {
|
86
|
-
margin-bottom: 10px;
|
87
|
-
}
|
88
|
-
|
89
|
-
/* line 71, ../sass/site.sass */
|
90
|
-
.nav {
|
91
|
-
margin-bottom: 40px;
|
92
|
-
border-bottom: 2px solid #bdbbbb;
|
93
|
-
}
|
94
|
-
|
95
|
-
/* line 75, ../sass/site.sass */
|
96
|
-
p {
|
97
|
-
margin: 1em 0;
|
98
|
-
}
|
99
|
-
|
100
|
-
/* line 78, ../sass/site.sass */
|
101
|
-
a {
|
102
|
-
color: #0048a2;
|
103
|
-
text-decoration: none;
|
104
|
-
border-bottom: 1px dotted #0048a2;
|
105
|
-
}
|
106
|
-
|
107
|
-
/* line 83, ../sass/site.sass */
|
108
|
-
a.blog {
|
109
|
-
border-bottom: 0px;
|
110
|
-
}
|
111
|
-
|
112
|
-
/* line 86, ../sass/site.sass */
|
113
|
-
a.blog-small {
|
114
|
-
border-bottom: 0px;
|
115
|
-
float: left;
|
116
|
-
margin-left: 10px;
|
117
|
-
}
|
118
|
-
|
119
|
-
/* line 91, ../sass/site.sass */
|
120
|
-
a:hover {
|
121
|
-
color: #3366cc;
|
122
|
-
border-bottom: none;
|
123
|
-
}
|
124
|
-
|
125
|
-
/* line 95, ../sass/site.sass */
|
126
|
-
table {
|
127
|
-
font-size: inherit;
|
128
|
-
font: 100%;
|
129
|
-
}
|
130
|
-
|
131
|
-
/* line 99, ../sass/site.sass */
|
132
|
-
img {
|
133
|
-
border: 0px dotted #dddddd;
|
134
|
-
}
|
135
|
-
|
136
|
-
/* line 103, ../sass/site.sass */
|
137
|
-
ul li, ol li {
|
138
|
-
margin-left: 40px;
|
139
|
-
}
|
140
|
-
|
141
|
-
/* my posts */
|
142
|
-
/* line 107, ../sass/site.sass */
|
143
|
-
ul.posts {
|
144
|
-
margin: 1em;
|
145
|
-
list-style-type: none;
|
146
|
-
}
|
147
|
-
/* line 110, ../sass/site.sass */
|
148
|
-
ul.posts li {
|
149
|
-
line-height: 1.6em;
|
150
|
-
}
|
151
|
-
/* line 112, ../sass/site.sass */
|
152
|
-
ul.posts span {
|
153
|
-
font-size: 80%;
|
154
|
-
color: #bdbbbb;
|
155
|
-
}
|
156
|
-
|
157
|
-
/* line 116, ../sass/site.sass */
|
158
|
-
ul.archiv {
|
159
|
-
margin: 1em;
|
160
|
-
list-style-type: none;
|
161
|
-
}
|
162
|
-
/* line 119, ../sass/site.sass */
|
163
|
-
ul.archiv li {
|
164
|
-
line-height: 1.5em;
|
165
|
-
margin-left: 15px;
|
166
|
-
}
|
167
|
-
|
168
|
-
/* line 123, ../sass/site.sass */
|
169
|
-
.site {
|
170
|
-
font-size: 100%;
|
171
|
-
text-align: justify;
|
172
|
-
width: 40em;
|
173
|
-
margin: 0 auto 3em auto;
|
174
|
-
line-height: 1.4em;
|
175
|
-
}
|
176
|
-
/* line 130, ../sass/site.sass */
|
177
|
-
.site .footer {
|
178
|
-
font-size: 70%;
|
179
|
-
border-top: 4px solid #bdbbbb;
|
180
|
-
margin-top: 10px;
|
181
|
-
}
|
182
|
-
/* line 134, ../sass/site.sass */
|
183
|
-
.site .footer a {
|
184
|
-
text-decoration: none;
|
185
|
-
border-bottom: 0px dotted #0048a2;
|
186
|
-
}
|
187
|
-
|
188
|
-
/* Posts */
|
189
|
-
/* line 140, ../sass/site.sass */
|
190
|
-
#post pre, .site pre {
|
191
|
-
border: 1px solid #dddddd;
|
192
|
-
background-color: #eeeeff;
|
193
|
-
font: 15px helvetica, arial, clean, sans-serif;
|
194
|
-
padding: 0 0.4em;
|
195
|
-
white-space: pre-wrap;
|
196
|
-
}
|
197
|
-
/* line 146, ../sass/site.sass */
|
198
|
-
#post code, .site code {
|
199
|
-
font-size: 105%;
|
200
|
-
border: 1px dotted #888888;
|
201
|
-
background-color: #ffff88;
|
202
|
-
padding: 0 0.2em;
|
203
|
-
display: inline-block;
|
204
|
-
}
|
205
|
-
/* line 152, ../sass/site.sass */
|
206
|
-
#post .highlight code, .site .highlight code {
|
207
|
-
border: none;
|
208
|
-
background-color: #eeeeff;
|
209
|
-
}
|
210
|
-
|
211
|
-
/* Miscleanous */
|
212
|
-
/* line 157, ../sass/site.sass */
|
213
|
-
span.tweet {
|
214
|
-
float: right;
|
215
|
-
margin-top: 5px;
|
216
|
-
}
|
217
|
-
/* line 160, ../sass/site.sass */
|
218
|
-
span.tweet a {
|
219
|
-
text-decoration: none;
|
220
|
-
border-bottom: none;
|
221
|
-
font-style: italic;
|
222
|
-
}
|
223
|
-
|
224
|
-
/* line 165, ../sass/site.sass */
|
225
|
-
.author {
|
226
|
-
font-size: 80%;
|
227
|
-
color: #bdbbbb;
|
228
|
-
margin: 0 0 1em 0;
|
229
|
-
float: right;
|
230
|
-
}
|
231
|
-
/* line 170, ../sass/site.sass */
|
232
|
-
.author a {
|
233
|
-
text-decoration: none;
|
234
|
-
border-bottom: none;
|
235
|
-
font-style: italic;
|
236
|
-
}
|
237
|
-
|
238
|
-
/* line 175, ../sass/site.sass */
|
239
|
-
#disqus_thread {
|
240
|
-
margin: 2em 0 0 0;
|
241
|
-
}
|
242
|
-
|
243
|
-
/* line 178, ../sass/site.sass */
|
244
|
-
.clearer {
|
245
|
-
clear: both;
|
246
|
-
}
|
@@ -1,60 +0,0 @@
|
|
1
|
-
.highlight { background: #ffffff; }
|
2
|
-
.highlight .c { color: #999988; font-style: italic } /* Comment */
|
3
|
-
.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
|
4
|
-
.highlight .k { font-weight: bold } /* Keyword */
|
5
|
-
.highlight .o { font-weight: bold } /* Operator */
|
6
|
-
.highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */
|
7
|
-
.highlight .cp { color: #999999; font-weight: bold } /* Comment.Preproc */
|
8
|
-
.highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */
|
9
|
-
.highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */
|
10
|
-
.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
|
11
|
-
.highlight .gd .x { color: #000000; background-color: #ffaaaa } /* Generic.Deleted.Specific */
|
12
|
-
.highlight .ge { font-style: italic } /* Generic.Emph */
|
13
|
-
.highlight .gr { color: #aa0000 } /* Generic.Error */
|
14
|
-
.highlight .gh { color: #999999 } /* Generic.Heading */
|
15
|
-
.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
|
16
|
-
.highlight .gi .x { color: #000000; background-color: #aaffaa } /* Generic.Inserted.Specific */
|
17
|
-
.highlight .go { color: #888888 } /* Generic.Output */
|
18
|
-
.highlight .gp { color: #555555 } /* Generic.Prompt */
|
19
|
-
.highlight .gs { font-weight: bold } /* Generic.Strong */
|
20
|
-
.highlight .gu { color: #aaaaaa } /* Generic.Subheading */
|
21
|
-
.highlight .gt { color: #aa0000 } /* Generic.Traceback */
|
22
|
-
.highlight .kc { font-weight: bold } /* Keyword.Constant */
|
23
|
-
.highlight .kd { font-weight: bold } /* Keyword.Declaration */
|
24
|
-
.highlight .kp { font-weight: bold } /* Keyword.Pseudo */
|
25
|
-
.highlight .kr { font-weight: bold } /* Keyword.Reserved */
|
26
|
-
.highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */
|
27
|
-
.highlight .m { color: #009999 } /* Literal.Number */
|
28
|
-
.highlight .s { color: #d14 } /* Literal.String */
|
29
|
-
.highlight .na { color: #008080 } /* Name.Attribute */
|
30
|
-
.highlight .nb { color: #0086B3 } /* Name.Builtin */
|
31
|
-
.highlight .nc { color: #445588; font-weight: bold } /* Name.Class */
|
32
|
-
.highlight .no { color: #008080 } /* Name.Constant */
|
33
|
-
.highlight .ni { color: #800080 } /* Name.Entity */
|
34
|
-
.highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */
|
35
|
-
.highlight .nf { color: #990000; font-weight: bold } /* Name.Function */
|
36
|
-
.highlight .nn { color: #555555 } /* Name.Namespace */
|
37
|
-
.highlight .nt { color: #000080 } /* Name.Tag */
|
38
|
-
.highlight .nv { color: #008080 } /* Name.Variable */
|
39
|
-
.highlight .ow { font-weight: bold } /* Operator.Word */
|
40
|
-
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
|
41
|
-
.highlight .mf { color: #009999 } /* Literal.Number.Float */
|
42
|
-
.highlight .mh { color: #009999 } /* Literal.Number.Hex */
|
43
|
-
.highlight .mi { color: #009999 } /* Literal.Number.Integer */
|
44
|
-
.highlight .mo { color: #009999 } /* Literal.Number.Oct */
|
45
|
-
.highlight .sb { color: #d14 } /* Literal.String.Backtick */
|
46
|
-
.highlight .sc { color: #d14 } /* Literal.String.Char */
|
47
|
-
.highlight .sd { color: #d14 } /* Literal.String.Doc */
|
48
|
-
.highlight .s2 { color: #d14 } /* Literal.String.Double */
|
49
|
-
.highlight .se { color: #d14 } /* Literal.String.Escape */
|
50
|
-
.highlight .sh { color: #d14 } /* Literal.String.Heredoc */
|
51
|
-
.highlight .si { color: #d14 } /* Literal.String.Interpol */
|
52
|
-
.highlight .sx { color: #d14 } /* Literal.String.Other */
|
53
|
-
.highlight .sr { color: #009926 } /* Literal.String.Regex */
|
54
|
-
.highlight .s1 { color: #d14 } /* Literal.String.Single */
|
55
|
-
.highlight .ss { color: #990073 } /* Literal.String.Symbol */
|
56
|
-
.highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */
|
57
|
-
.highlight .vc { color: #008080 } /* Name.Variable.Class */
|
58
|
-
.highlight .vg { color: #008080 } /* Name.Variable.Global */
|
59
|
-
.highlight .vi { color: #008080 } /* Name.Variable.Instance */
|
60
|
-
.highlight .il { color: #009999 } /* Literal.Number.Integer.Long */
|
@@ -1,761 +0,0 @@
|
|
1
|
-
// FancyZoom.js - v1.1 - http://www.fancyzoom.com
|
2
|
-
//
|
3
|
-
// Copyright (c) 2008 Cabel Sasser / Panic Inc
|
4
|
-
// All rights reserved.
|
5
|
-
//
|
6
|
-
// Requires: FancyZoomHTML.js
|
7
|
-
// Instructions: Include JS files in page, call setupZoom() in onLoad. That's it!
|
8
|
-
// Any <a href> links to images will be updated to zoom inline.
|
9
|
-
// Add rel="nozoom" to your <a href> to disable zooming for an image.
|
10
|
-
//
|
11
|
-
// Redistribution and use of this effect in source form, with or without modification,
|
12
|
-
// are permitted provided that the following conditions are met:
|
13
|
-
//
|
14
|
-
// * USE OF SOURCE ON COMMERCIAL (FOR-PROFIT) WEBSITE REQUIRES ONE-TIME LICENSE FEE PER DOMAIN.
|
15
|
-
// Reasonably priced! Visit www.fancyzoom.com for licensing instructions. Thanks!
|
16
|
-
//
|
17
|
-
// * Non-commercial (personal) website use is permitted without license/payment!
|
18
|
-
//
|
19
|
-
// * Redistribution of source code must retain the above copyright notice,
|
20
|
-
// this list of conditions and the following disclaimer.
|
21
|
-
//
|
22
|
-
// * Redistribution of source code and derived works cannot be sold without specific
|
23
|
-
// written prior permission.
|
24
|
-
//
|
25
|
-
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
26
|
-
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
27
|
-
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
28
|
-
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
29
|
-
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
30
|
-
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
31
|
-
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
32
|
-
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
33
|
-
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
34
|
-
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
35
|
-
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
36
|
-
|
37
|
-
var includeCaption = true; // Turn on the "caption" feature, and write out the caption HTML
|
38
|
-
var zoomTime = 5; // Milliseconds between frames of zoom animation
|
39
|
-
var zoomSteps = 15; // Number of zoom animation frames
|
40
|
-
var includeFade = 1; // Set to 1 to fade the image in / out as it zooms
|
41
|
-
var minBorder = 90; // Amount of padding between large, scaled down images, and the window edges
|
42
|
-
var shadowSettings = '0px 5px 25px rgba(0, 0, 0, '; // Blur, radius, color of shadow for compatible browsers
|
43
|
-
|
44
|
-
var zoomImagesURI = '/images/images-global/zoom/'; // Location of the zoom and shadow images
|
45
|
-
|
46
|
-
// Init. Do not add anything below this line, unless it's something awesome.
|
47
|
-
|
48
|
-
var myWidth = 0, myHeight = 0, myScroll = 0; myScrollWidth = 0; myScrollHeight = 0;
|
49
|
-
var zoomOpen = false, preloadFrame = 1, preloadActive = false, preloadTime = 0, imgPreload = new Image();
|
50
|
-
var preloadAnimTimer = 0;
|
51
|
-
|
52
|
-
var zoomActive = new Array(); var zoomTimer = new Array();
|
53
|
-
var zoomOrigW = new Array(); var zoomOrigH = new Array();
|
54
|
-
var zoomOrigX = new Array(); var zoomOrigY = new Array();
|
55
|
-
|
56
|
-
var zoomID = "ZoomBox";
|
57
|
-
var theID = "ZoomImage";
|
58
|
-
var zoomCaption = "ZoomCaption";
|
59
|
-
var zoomCaptionDiv = "ZoomCapDiv";
|
60
|
-
|
61
|
-
if (navigator.userAgent.indexOf("MSIE") != -1) {
|
62
|
-
var browserIsIE = true;
|
63
|
-
}
|
64
|
-
|
65
|
-
// Zoom: Setup The Page! Called in your <body>'s onLoad handler.
|
66
|
-
|
67
|
-
function setupZoom() {
|
68
|
-
prepZooms();
|
69
|
-
insertZoomHTML();
|
70
|
-
zoomdiv = document.getElementById(zoomID);
|
71
|
-
zoomimg = document.getElementById(theID);
|
72
|
-
}
|
73
|
-
|
74
|
-
// Zoom: Inject Javascript functions into hrefs pointing to images, one by one!
|
75
|
-
// Skip any href that contains a rel="nozoom" tag.
|
76
|
-
// This is done at page load time via an onLoad() handler.
|
77
|
-
|
78
|
-
function prepZooms() {
|
79
|
-
if (! document.getElementsByTagName) {
|
80
|
-
return;
|
81
|
-
}
|
82
|
-
var links = document.getElementsByTagName("a");
|
83
|
-
for (i = 0; i < links.length; i++) {
|
84
|
-
if (links[i].getAttribute("href")) {
|
85
|
-
if (links[i].getAttribute("href").search(/(.*)\.(jpg|jpeg|gif|png|bmp|tif|tiff)/gi) != -1) {
|
86
|
-
if (links[i].getAttribute("rel") != "nozoom") {
|
87
|
-
links[i].onclick = function (event) { return zoomClick(this, event); };
|
88
|
-
links[i].onmouseover = function () { zoomPreload(this); };
|
89
|
-
}
|
90
|
-
}
|
91
|
-
}
|
92
|
-
}
|
93
|
-
}
|
94
|
-
|
95
|
-
// Zoom: Load an image into an image object. When done loading, function sets preloadActive to false,
|
96
|
-
// so other bits know that they can proceed with the zoom.
|
97
|
-
// Preloaded image is stored in imgPreload and swapped out in the zoom function.
|
98
|
-
|
99
|
-
function zoomPreload(from) {
|
100
|
-
|
101
|
-
var theimage = from.getAttribute("href");
|
102
|
-
|
103
|
-
// Only preload if we have to, i.e. the image isn't this image already
|
104
|
-
|
105
|
-
if (imgPreload.src.indexOf(from.getAttribute("href").substr(from.getAttribute("href").lastIndexOf("/"))) == -1) {
|
106
|
-
preloadActive = true;
|
107
|
-
imgPreload = new Image();
|
108
|
-
|
109
|
-
// Set a function to fire when the preload is complete, setting flags along the way.
|
110
|
-
|
111
|
-
imgPreload.onload = function() {
|
112
|
-
preloadActive = false;
|
113
|
-
}
|
114
|
-
|
115
|
-
// Load it!
|
116
|
-
imgPreload.src = theimage;
|
117
|
-
}
|
118
|
-
}
|
119
|
-
|
120
|
-
// Zoom: Start the preloading animation cycle.
|
121
|
-
|
122
|
-
function preloadAnimStart() {
|
123
|
-
preloadTime = new Date();
|
124
|
-
document.getElementById("ZoomSpin").style.left = (myWidth / 2) + 'px';
|
125
|
-
document.getElementById("ZoomSpin").style.top = ((myHeight / 2) + myScroll) + 'px';
|
126
|
-
document.getElementById("ZoomSpin").style.visibility = "visible";
|
127
|
-
preloadFrame = 1;
|
128
|
-
document.getElementById("SpinImage").src = zoomImagesURI+'zoom-spin-'+preloadFrame+'.png';
|
129
|
-
preloadAnimTimer = setInterval("preloadAnim()", 100);
|
130
|
-
}
|
131
|
-
|
132
|
-
// Zoom: Display and ANIMATE the jibber-jabber widget. Once preloadActive is false, bail and zoom it up!
|
133
|
-
|
134
|
-
function preloadAnim(from) {
|
135
|
-
if (preloadActive != false) {
|
136
|
-
document.getElementById("SpinImage").src = zoomImagesURI+'zoom-spin-'+preloadFrame+'.png';
|
137
|
-
preloadFrame++;
|
138
|
-
if (preloadFrame > 12) preloadFrame = 1;
|
139
|
-
} else {
|
140
|
-
document.getElementById("ZoomSpin").style.visibility = "hidden";
|
141
|
-
clearInterval(preloadAnimTimer);
|
142
|
-
preloadAnimTimer = 0;
|
143
|
-
zoomIn(preloadFrom);
|
144
|
-
}
|
145
|
-
}
|
146
|
-
|
147
|
-
// ZOOM CLICK: We got a click! Should we do the zoom? Or wait for the preload to complete?
|
148
|
-
// todo?: Double check that imgPreload src = clicked src
|
149
|
-
|
150
|
-
function zoomClick(from, evt) {
|
151
|
-
|
152
|
-
var shift = getShift(evt);
|
153
|
-
|
154
|
-
// Check for Command / Alt key. If pressed, pass them through -- don't zoom!
|
155
|
-
if (! evt && window.event && (window.event.metaKey || window.event.altKey)) {
|
156
|
-
return true;
|
157
|
-
} else if (evt && (evt.metaKey|| evt.altKey)) {
|
158
|
-
return true;
|
159
|
-
}
|
160
|
-
|
161
|
-
// Get browser dimensions
|
162
|
-
getSize();
|
163
|
-
|
164
|
-
// If preloading still, wait, and display the spinner.
|
165
|
-
if (preloadActive == true) {
|
166
|
-
// But only display the spinner if it's not already being displayed!
|
167
|
-
if (preloadAnimTimer == 0) {
|
168
|
-
preloadFrom = from;
|
169
|
-
preloadAnimStart();
|
170
|
-
}
|
171
|
-
} else {
|
172
|
-
// Otherwise, we're loaded: do the zoom!
|
173
|
-
zoomIn(from, shift);
|
174
|
-
}
|
175
|
-
|
176
|
-
return false;
|
177
|
-
|
178
|
-
}
|
179
|
-
|
180
|
-
// Zoom: Move an element in to endH endW, using zoomHost as a starting point.
|
181
|
-
// "from" is an object reference to the href that spawned the zoom.
|
182
|
-
|
183
|
-
function zoomIn(from, shift) {
|
184
|
-
|
185
|
-
zoomimg.src = from.getAttribute("href");
|
186
|
-
|
187
|
-
// Determine the zoom settings from where we came from, the element in the <a>.
|
188
|
-
// If there's no element in the <a>, or we can't get the width, make stuff up
|
189
|
-
|
190
|
-
if (from.childNodes[0].width) {
|
191
|
-
startW = from.childNodes[0].width;
|
192
|
-
startH = from.childNodes[0].height;
|
193
|
-
startPos = findElementPos(from.childNodes[0]);
|
194
|
-
} else {
|
195
|
-
startW = 50;
|
196
|
-
startH = 12;
|
197
|
-
startPos = findElementPos(from);
|
198
|
-
}
|
199
|
-
|
200
|
-
hostX = startPos[0];
|
201
|
-
hostY = startPos[1];
|
202
|
-
|
203
|
-
// Make up for a scrolled containing div.
|
204
|
-
// TODO: This HAS to move into findElementPos.
|
205
|
-
|
206
|
-
if (document.getElementById('scroller')) {
|
207
|
-
hostX = hostX - document.getElementById('scroller').scrollLeft;
|
208
|
-
}
|
209
|
-
|
210
|
-
// Determine the target zoom settings from the preloaded image object
|
211
|
-
|
212
|
-
endW = imgPreload.width;
|
213
|
-
endH = imgPreload.height;
|
214
|
-
|
215
|
-
// Start! But only if we're not zooming already!
|
216
|
-
|
217
|
-
if (zoomActive[theID] != true) {
|
218
|
-
|
219
|
-
// Clear everything out just in case something is already open
|
220
|
-
|
221
|
-
if (document.getElementById("ShadowBox")) {
|
222
|
-
document.getElementById("ShadowBox").style.visibility = "hidden";
|
223
|
-
} else if (! browserIsIE) {
|
224
|
-
|
225
|
-
// Wipe timer if shadow is fading in still
|
226
|
-
if (fadeActive["ZoomImage"]) {
|
227
|
-
clearInterval(fadeTimer["ZoomImage"]);
|
228
|
-
fadeActive["ZoomImage"] = false;
|
229
|
-
fadeTimer["ZoomImage"] = false;
|
230
|
-
}
|
231
|
-
|
232
|
-
document.getElementById("ZoomImage").style.webkitBoxShadow = shadowSettings + '0.0)';
|
233
|
-
}
|
234
|
-
|
235
|
-
document.getElementById("ZoomClose").style.visibility = "hidden";
|
236
|
-
|
237
|
-
// Setup the CAPTION, if existing. Hide it first, set the text.
|
238
|
-
|
239
|
-
if (includeCaption) {
|
240
|
-
document.getElementById(zoomCaptionDiv).style.visibility = "hidden";
|
241
|
-
if (from.getAttribute('title') && includeCaption) {
|
242
|
-
// Yes, there's a caption, set it up
|
243
|
-
document.getElementById(zoomCaption).innerHTML = from.getAttribute('title');
|
244
|
-
} else {
|
245
|
-
document.getElementById(zoomCaption).innerHTML = "";
|
246
|
-
}
|
247
|
-
}
|
248
|
-
|
249
|
-
// Store original position in an array for future zoomOut.
|
250
|
-
|
251
|
-
zoomOrigW[theID] = startW;
|
252
|
-
zoomOrigH[theID] = startH;
|
253
|
-
zoomOrigX[theID] = hostX;
|
254
|
-
zoomOrigY[theID] = hostY;
|
255
|
-
|
256
|
-
// Now set the starting dimensions
|
257
|
-
|
258
|
-
zoomimg.style.width = startW + 'px';
|
259
|
-
zoomimg.style.height = startH + 'px';
|
260
|
-
zoomdiv.style.left = hostX + 'px';
|
261
|
-
zoomdiv.style.top = hostY + 'px';
|
262
|
-
|
263
|
-
// Show the zooming image container, make it invisible
|
264
|
-
|
265
|
-
if (includeFade == 1) {
|
266
|
-
setOpacity(0, zoomID);
|
267
|
-
}
|
268
|
-
zoomdiv.style.visibility = "visible";
|
269
|
-
|
270
|
-
// If it's too big to fit in the window, shrink the width and height to fit (with ratio).
|
271
|
-
|
272
|
-
sizeRatio = endW / endH;
|
273
|
-
if (endW > myWidth - minBorder) {
|
274
|
-
endW = myWidth - minBorder;
|
275
|
-
endH = endW / sizeRatio;
|
276
|
-
}
|
277
|
-
if (endH > myHeight - minBorder) {
|
278
|
-
endH = myHeight - minBorder;
|
279
|
-
endW = endH * sizeRatio;
|
280
|
-
}
|
281
|
-
|
282
|
-
zoomChangeX = ((myWidth / 2) - (endW / 2) - hostX);
|
283
|
-
zoomChangeY = (((myHeight / 2) - (endH / 2) - hostY) + myScroll);
|
284
|
-
zoomChangeW = (endW - startW);
|
285
|
-
zoomChangeH = (endH - startH);
|
286
|
-
|
287
|
-
// Shift key?
|
288
|
-
|
289
|
-
if (shift) {
|
290
|
-
tempSteps = zoomSteps * 7;
|
291
|
-
} else {
|
292
|
-
tempSteps = zoomSteps;
|
293
|
-
}
|
294
|
-
|
295
|
-
// Setup Zoom
|
296
|
-
|
297
|
-
zoomCurrent = 0;
|
298
|
-
|
299
|
-
// Setup Fade with Zoom, If Requested
|
300
|
-
|
301
|
-
if (includeFade == 1) {
|
302
|
-
fadeCurrent = 0;
|
303
|
-
fadeAmount = (0 - 100) / tempSteps;
|
304
|
-
} else {
|
305
|
-
fadeAmount = 0;
|
306
|
-
}
|
307
|
-
|
308
|
-
// Do It!
|
309
|
-
|
310
|
-
zoomTimer[theID] = setInterval("zoomElement('"+zoomID+"', '"+theID+"', "+zoomCurrent+", "+startW+", "+zoomChangeW+", "+startH+", "+zoomChangeH+", "+hostX+", "+zoomChangeX+", "+hostY+", "+zoomChangeY+", "+tempSteps+", "+includeFade+", "+fadeAmount+", 'zoomDoneIn(zoomID)')", zoomTime);
|
311
|
-
zoomActive[theID] = true;
|
312
|
-
}
|
313
|
-
}
|
314
|
-
|
315
|
-
// Zoom it back out.
|
316
|
-
|
317
|
-
function zoomOut(from, evt) {
|
318
|
-
|
319
|
-
// Get shift key status.
|
320
|
-
// IE events don't seem to get passed through the function, so grab it from the window.
|
321
|
-
|
322
|
-
if (getShift(evt)) {
|
323
|
-
tempSteps = zoomSteps * 7;
|
324
|
-
} else {
|
325
|
-
tempSteps = zoomSteps;
|
326
|
-
}
|
327
|
-
|
328
|
-
// Check to see if something is happening/open
|
329
|
-
|
330
|
-
if (zoomActive[theID] != true) {
|
331
|
-
|
332
|
-
// First, get rid of the shadow if necessary.
|
333
|
-
|
334
|
-
if (document.getElementById("ShadowBox")) {
|
335
|
-
document.getElementById("ShadowBox").style.visibility = "hidden";
|
336
|
-
} else if (! browserIsIE) {
|
337
|
-
|
338
|
-
// Wipe timer if shadow is fading in still
|
339
|
-
if (fadeActive["ZoomImage"]) {
|
340
|
-
clearInterval(fadeTimer["ZoomImage"]);
|
341
|
-
fadeActive["ZoomImage"] = false;
|
342
|
-
fadeTimer["ZoomImage"] = false;
|
343
|
-
}
|
344
|
-
|
345
|
-
document.getElementById("ZoomImage").style.webkitBoxShadow = shadowSettings + '0.0)';
|
346
|
-
}
|
347
|
-
|
348
|
-
// ..and the close box...
|
349
|
-
|
350
|
-
document.getElementById("ZoomClose").style.visibility = "hidden";
|
351
|
-
|
352
|
-
// ...and the caption if necessary!
|
353
|
-
|
354
|
-
if (includeCaption && document.getElementById(zoomCaption).innerHTML != "") {
|
355
|
-
// fadeElementSetup(zoomCaptionDiv, 100, 0, 5, 1);
|
356
|
-
document.getElementById(zoomCaptionDiv).style.visibility = "hidden";
|
357
|
-
}
|
358
|
-
|
359
|
-
// Now, figure out where we came from, to get back there
|
360
|
-
|
361
|
-
startX = parseInt(zoomdiv.style.left);
|
362
|
-
startY = parseInt(zoomdiv.style.top);
|
363
|
-
startW = zoomimg.width;
|
364
|
-
startH = zoomimg.height;
|
365
|
-
zoomChangeX = zoomOrigX[theID] - startX;
|
366
|
-
zoomChangeY = zoomOrigY[theID] - startY;
|
367
|
-
zoomChangeW = zoomOrigW[theID] - startW;
|
368
|
-
zoomChangeH = zoomOrigH[theID] - startH;
|
369
|
-
|
370
|
-
// Setup Zoom
|
371
|
-
|
372
|
-
zoomCurrent = 0;
|
373
|
-
|
374
|
-
// Setup Fade with Zoom, If Requested
|
375
|
-
|
376
|
-
if (includeFade == 1) {
|
377
|
-
fadeCurrent = 0;
|
378
|
-
fadeAmount = (100 - 0) / tempSteps;
|
379
|
-
} else {
|
380
|
-
fadeAmount = 0;
|
381
|
-
}
|
382
|
-
|
383
|
-
// Do It!
|
384
|
-
|
385
|
-
zoomTimer[theID] = setInterval("zoomElement('"+zoomID+"', '"+theID+"', "+zoomCurrent+", "+startW+", "+zoomChangeW+", "+startH+", "+zoomChangeH+", "+startX+", "+zoomChangeX+", "+startY+", "+zoomChangeY+", "+tempSteps+", "+includeFade+", "+fadeAmount+", 'zoomDone(zoomID, theID)')", zoomTime);
|
386
|
-
zoomActive[theID] = true;
|
387
|
-
}
|
388
|
-
}
|
389
|
-
|
390
|
-
// Finished Zooming In
|
391
|
-
|
392
|
-
function zoomDoneIn(zoomdiv, theID) {
|
393
|
-
|
394
|
-
// Note that it's open
|
395
|
-
|
396
|
-
zoomOpen = true;
|
397
|
-
zoomdiv = document.getElementById(zoomdiv);
|
398
|
-
|
399
|
-
// Position the table shadow behind the zoomed in image, and display it
|
400
|
-
|
401
|
-
if (document.getElementById("ShadowBox")) {
|
402
|
-
|
403
|
-
setOpacity(0, "ShadowBox");
|
404
|
-
shadowdiv = document.getElementById("ShadowBox");
|
405
|
-
|
406
|
-
shadowLeft = parseInt(zoomdiv.style.left) - 13;
|
407
|
-
shadowTop = parseInt(zoomdiv.style.top) - 8;
|
408
|
-
shadowWidth = zoomdiv.offsetWidth + 26;
|
409
|
-
shadowHeight = zoomdiv.offsetHeight + 26;
|
410
|
-
|
411
|
-
shadowdiv.style.width = shadowWidth + 'px';
|
412
|
-
shadowdiv.style.height = shadowHeight + 'px';
|
413
|
-
shadowdiv.style.left = shadowLeft + 'px';
|
414
|
-
shadowdiv.style.top = shadowTop + 'px';
|
415
|
-
|
416
|
-
document.getElementById("ShadowBox").style.visibility = "visible";
|
417
|
-
fadeElementSetup("ShadowBox", 0, 100, 5);
|
418
|
-
|
419
|
-
} else if (! browserIsIE) {
|
420
|
-
// Or, do a fade of the modern shadow
|
421
|
-
fadeElementSetup("ZoomImage", 0, .8, 5, 0, "shadow");
|
422
|
-
}
|
423
|
-
|
424
|
-
// Position and display the CAPTION, if existing
|
425
|
-
|
426
|
-
if (includeCaption && document.getElementById(zoomCaption).innerHTML != "") {
|
427
|
-
// setOpacity(0, zoomCaptionDiv);
|
428
|
-
zoomcapd = document.getElementById(zoomCaptionDiv);
|
429
|
-
zoomcapd.style.top = parseInt(zoomdiv.style.top) + (zoomdiv.offsetHeight + 15) + 'px';
|
430
|
-
zoomcapd.style.left = (myWidth / 2) - (zoomcapd.offsetWidth / 2) + 'px';
|
431
|
-
zoomcapd.style.visibility = "visible";
|
432
|
-
// fadeElementSetup(zoomCaptionDiv, 0, 100, 5);
|
433
|
-
}
|
434
|
-
|
435
|
-
// Display Close Box (fade it if it's not IE)
|
436
|
-
|
437
|
-
if (!browserIsIE) setOpacity(0, "ZoomClose");
|
438
|
-
document.getElementById("ZoomClose").style.visibility = "visible";
|
439
|
-
if (!browserIsIE) fadeElementSetup("ZoomClose", 0, 100, 5);
|
440
|
-
|
441
|
-
// Get keypresses
|
442
|
-
document.onkeypress = getKey;
|
443
|
-
|
444
|
-
}
|
445
|
-
|
446
|
-
// Finished Zooming Out
|
447
|
-
|
448
|
-
function zoomDone(zoomdiv, theID) {
|
449
|
-
|
450
|
-
// No longer open
|
451
|
-
|
452
|
-
zoomOpen = false;
|
453
|
-
|
454
|
-
// Clear stuff out, clean up
|
455
|
-
|
456
|
-
zoomOrigH[theID] = "";
|
457
|
-
zoomOrigW[theID] = "";
|
458
|
-
document.getElementById(zoomdiv).style.visibility = "hidden";
|
459
|
-
zoomActive[theID] == false;
|
460
|
-
|
461
|
-
// Stop getting keypresses
|
462
|
-
|
463
|
-
document.onkeypress = null;
|
464
|
-
|
465
|
-
}
|
466
|
-
|
467
|
-
// Actually zoom the element
|
468
|
-
|
469
|
-
function zoomElement(zoomdiv, theID, zoomCurrent, zoomStartW, zoomChangeW, zoomStartH, zoomChangeH, zoomStartX, zoomChangeX, zoomStartY, zoomChangeY, zoomSteps, includeFade, fadeAmount, execWhenDone) {
|
470
|
-
|
471
|
-
// console.log("Zooming Step #"+zoomCurrent+ " of "+zoomSteps+" (zoom " + zoomStartW + "/" + zoomChangeW + ") (zoom " + zoomStartH + "/" + zoomChangeH + ") (zoom " + zoomStartX + "/" + zoomChangeX + ") (zoom " + zoomStartY + "/" + zoomChangeY + ") Fade: "+fadeAmount);
|
472
|
-
|
473
|
-
// Test if we're done, or if we continue
|
474
|
-
|
475
|
-
if (zoomCurrent == (zoomSteps + 1)) {
|
476
|
-
zoomActive[theID] = false;
|
477
|
-
clearInterval(zoomTimer[theID]);
|
478
|
-
|
479
|
-
if (execWhenDone != "") {
|
480
|
-
eval(execWhenDone);
|
481
|
-
}
|
482
|
-
} else {
|
483
|
-
|
484
|
-
// Do the Fade!
|
485
|
-
|
486
|
-
if (includeFade == 1) {
|
487
|
-
if (fadeAmount < 0) {
|
488
|
-
setOpacity(Math.abs(zoomCurrent * fadeAmount), zoomdiv);
|
489
|
-
} else {
|
490
|
-
setOpacity(100 - (zoomCurrent * fadeAmount), zoomdiv);
|
491
|
-
}
|
492
|
-
}
|
493
|
-
|
494
|
-
// Calculate this step's difference, and move it!
|
495
|
-
|
496
|
-
moveW = cubicInOut(zoomCurrent, zoomStartW, zoomChangeW, zoomSteps);
|
497
|
-
moveH = cubicInOut(zoomCurrent, zoomStartH, zoomChangeH, zoomSteps);
|
498
|
-
moveX = cubicInOut(zoomCurrent, zoomStartX, zoomChangeX, zoomSteps);
|
499
|
-
moveY = cubicInOut(zoomCurrent, zoomStartY, zoomChangeY, zoomSteps);
|
500
|
-
|
501
|
-
document.getElementById(zoomdiv).style.left = moveX + 'px';
|
502
|
-
document.getElementById(zoomdiv).style.top = moveY + 'px';
|
503
|
-
zoomimg.style.width = moveW + 'px';
|
504
|
-
zoomimg.style.height = moveH + 'px';
|
505
|
-
|
506
|
-
zoomCurrent++;
|
507
|
-
|
508
|
-
clearInterval(zoomTimer[theID]);
|
509
|
-
zoomTimer[theID] = setInterval("zoomElement('"+zoomdiv+"', '"+theID+"', "+zoomCurrent+", "+zoomStartW+", "+zoomChangeW+", "+zoomStartH+", "+zoomChangeH+", "+zoomStartX+", "+zoomChangeX+", "+zoomStartY+", "+zoomChangeY+", "+zoomSteps+", "+includeFade+", "+fadeAmount+", '"+execWhenDone+"')", zoomTime);
|
510
|
-
}
|
511
|
-
}
|
512
|
-
|
513
|
-
// Zoom Utility: Get Key Press when image is open, and act accordingly
|
514
|
-
|
515
|
-
function getKey(evt) {
|
516
|
-
if (! evt) {
|
517
|
-
theKey = event.keyCode;
|
518
|
-
} else {
|
519
|
-
theKey = evt.keyCode;
|
520
|
-
}
|
521
|
-
|
522
|
-
if (theKey == 27) { // ESC
|
523
|
-
zoomOut(this, evt);
|
524
|
-
}
|
525
|
-
}
|
526
|
-
|
527
|
-
////////////////////////////
|
528
|
-
//
|
529
|
-
// FADE Functions
|
530
|
-
//
|
531
|
-
|
532
|
-
function fadeOut(elem) {
|
533
|
-
if (elem.id) {
|
534
|
-
fadeElementSetup(elem.id, 100, 0, 10);
|
535
|
-
}
|
536
|
-
}
|
537
|
-
|
538
|
-
function fadeIn(elem) {
|
539
|
-
if (elem.id) {
|
540
|
-
fadeElementSetup(elem.id, 0, 100, 10);
|
541
|
-
}
|
542
|
-
}
|
543
|
-
|
544
|
-
// Fade: Initialize the fade function
|
545
|
-
|
546
|
-
var fadeActive = new Array();
|
547
|
-
var fadeQueue = new Array();
|
548
|
-
var fadeTimer = new Array();
|
549
|
-
var fadeClose = new Array();
|
550
|
-
var fadeMode = new Array();
|
551
|
-
|
552
|
-
function fadeElementSetup(theID, fdStart, fdEnd, fdSteps, fdClose, fdMode) {
|
553
|
-
|
554
|
-
// alert("Fading: "+theID+" Steps: "+fdSteps+" Mode: "+fdMode);
|
555
|
-
|
556
|
-
if (fadeActive[theID] == true) {
|
557
|
-
// Already animating, queue up this command
|
558
|
-
fadeQueue[theID] = new Array(theID, fdStart, fdEnd, fdSteps);
|
559
|
-
} else {
|
560
|
-
fadeSteps = fdSteps;
|
561
|
-
fadeCurrent = 0;
|
562
|
-
fadeAmount = (fdStart - fdEnd) / fadeSteps;
|
563
|
-
fadeTimer[theID] = setInterval("fadeElement('"+theID+"', '"+fadeCurrent+"', '"+fadeAmount+"', '"+fadeSteps+"')", 15);
|
564
|
-
fadeActive[theID] = true;
|
565
|
-
fadeMode[theID] = fdMode;
|
566
|
-
|
567
|
-
if (fdClose == 1) {
|
568
|
-
fadeClose[theID] = true;
|
569
|
-
} else {
|
570
|
-
fadeClose[theID] = false;
|
571
|
-
}
|
572
|
-
}
|
573
|
-
}
|
574
|
-
|
575
|
-
// Fade: Do the fade. This function will call itself, modifying the parameters, so
|
576
|
-
// many instances can run concurrently. Can fade using opacity, or fade using a box-shadow.
|
577
|
-
|
578
|
-
function fadeElement(theID, fadeCurrent, fadeAmount, fadeSteps) {
|
579
|
-
|
580
|
-
if (fadeCurrent == fadeSteps) {
|
581
|
-
|
582
|
-
// We're done, so clear.
|
583
|
-
|
584
|
-
clearInterval(fadeTimer[theID]);
|
585
|
-
fadeActive[theID] = false;
|
586
|
-
fadeTimer[theID] = false;
|
587
|
-
|
588
|
-
// Should we close it once the fade is complete?
|
589
|
-
|
590
|
-
if (fadeClose[theID] == true) {
|
591
|
-
document.getElementById(theID).style.visibility = "hidden";
|
592
|
-
}
|
593
|
-
|
594
|
-
// Hang on.. did a command queue while we were working? If so, make it happen now
|
595
|
-
|
596
|
-
if (fadeQueue[theID] && fadeQueue[theID] != false) {
|
597
|
-
fadeElementSetup(fadeQueue[theID][0], fadeQueue[theID][1], fadeQueue[theID][2], fadeQueue[theID][3]);
|
598
|
-
fadeQueue[theID] = false;
|
599
|
-
}
|
600
|
-
} else {
|
601
|
-
|
602
|
-
fadeCurrent++;
|
603
|
-
|
604
|
-
// Now actually do the fade adjustment.
|
605
|
-
|
606
|
-
if (fadeMode[theID] == "shadow") {
|
607
|
-
|
608
|
-
// Do a special fade on the webkit-box-shadow of the object
|
609
|
-
|
610
|
-
if (fadeAmount < 0) {
|
611
|
-
document.getElementById(theID).style.webkitBoxShadow = shadowSettings + (Math.abs(fadeCurrent * fadeAmount)) + ')';
|
612
|
-
} else {
|
613
|
-
document.getElementById(theID).style.webkitBoxShadow = shadowSettings + (100 - (fadeCurrent * fadeAmount)) + ')';
|
614
|
-
}
|
615
|
-
|
616
|
-
} else {
|
617
|
-
|
618
|
-
// Set the opacity depending on if we're adding or subtracting (pos or neg)
|
619
|
-
|
620
|
-
if (fadeAmount < 0) {
|
621
|
-
setOpacity(Math.abs(fadeCurrent * fadeAmount), theID);
|
622
|
-
} else {
|
623
|
-
setOpacity(100 - (fadeCurrent * fadeAmount), theID);
|
624
|
-
}
|
625
|
-
}
|
626
|
-
|
627
|
-
// Keep going, and send myself the updated variables
|
628
|
-
clearInterval(fadeTimer[theID]);
|
629
|
-
fadeTimer[theID] = setInterval("fadeElement('"+theID+"', '"+fadeCurrent+"', '"+fadeAmount+"', '"+fadeSteps+"')", 15);
|
630
|
-
}
|
631
|
-
}
|
632
|
-
|
633
|
-
////////////////////////////
|
634
|
-
//
|
635
|
-
// UTILITY functions
|
636
|
-
//
|
637
|
-
|
638
|
-
// Utility: Set the opacity, compatible with a number of browsers. Value from 0 to 100.
|
639
|
-
|
640
|
-
function setOpacity(opacity, theID) {
|
641
|
-
|
642
|
-
var object = document.getElementById(theID).style;
|
643
|
-
|
644
|
-
// If it's 100, set it to 99 for Firefox.
|
645
|
-
|
646
|
-
if (navigator.userAgent.indexOf("Firefox") != -1) {
|
647
|
-
if (opacity == 100) { opacity = 99.9999; } // This is majorly awkward
|
648
|
-
}
|
649
|
-
|
650
|
-
// Multi-browser opacity setting
|
651
|
-
|
652
|
-
object.filter = "alpha(opacity=" + opacity + ")"; // IE/Win
|
653
|
-
object.opacity = (opacity / 100); // Safari 1.2, Firefox+Mozilla
|
654
|
-
|
655
|
-
}
|
656
|
-
|
657
|
-
// Utility: Math functions for animation calucations - From http://www.robertpenner.com/easing/
|
658
|
-
//
|
659
|
-
// t = time, b = begin, c = change, d = duration
|
660
|
-
// time = current frame, begin is fixed, change is basically finish - begin, duration is fixed (frames),
|
661
|
-
|
662
|
-
function linear(t, b, c, d)
|
663
|
-
{
|
664
|
-
return c*t/d + b;
|
665
|
-
}
|
666
|
-
|
667
|
-
function sineInOut(t, b, c, d)
|
668
|
-
{
|
669
|
-
return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
|
670
|
-
}
|
671
|
-
|
672
|
-
function cubicIn(t, b, c, d) {
|
673
|
-
return c*(t/=d)*t*t + b;
|
674
|
-
}
|
675
|
-
|
676
|
-
function cubicOut(t, b, c, d) {
|
677
|
-
return c*((t=t/d-1)*t*t + 1) + b;
|
678
|
-
}
|
679
|
-
|
680
|
-
function cubicInOut(t, b, c, d)
|
681
|
-
{
|
682
|
-
if ((t/=d/2) < 1) return c/2*t*t*t + b;
|
683
|
-
return c/2*((t-=2)*t*t + 2) + b;
|
684
|
-
}
|
685
|
-
|
686
|
-
function bounceOut(t, b, c, d)
|
687
|
-
{
|
688
|
-
if ((t/=d) < (1/2.75)){
|
689
|
-
return c*(7.5625*t*t) + b;
|
690
|
-
} else if (t < (2/2.75)){
|
691
|
-
return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
|
692
|
-
} else if (t < (2.5/2.75)){
|
693
|
-
return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
|
694
|
-
} else {
|
695
|
-
return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
|
696
|
-
}
|
697
|
-
}
|
698
|
-
|
699
|
-
|
700
|
-
// Utility: Get the size of the window, and set myWidth and myHeight
|
701
|
-
// Credit to quirksmode.org
|
702
|
-
|
703
|
-
function getSize() {
|
704
|
-
|
705
|
-
// Window Size
|
706
|
-
|
707
|
-
if (self.innerHeight) { // Everyone but IE
|
708
|
-
myWidth = window.innerWidth;
|
709
|
-
myHeight = window.innerHeight;
|
710
|
-
myScroll = window.pageYOffset;
|
711
|
-
} else if (document.documentElement && document.documentElement.clientHeight) { // IE6 Strict
|
712
|
-
myWidth = document.documentElement.clientWidth;
|
713
|
-
myHeight = document.documentElement.clientHeight;
|
714
|
-
myScroll = document.documentElement.scrollTop;
|
715
|
-
} else if (document.body) { // Other IE, such as IE7
|
716
|
-
myWidth = document.body.clientWidth;
|
717
|
-
myHeight = document.body.clientHeight;
|
718
|
-
myScroll = document.body.scrollTop;
|
719
|
-
}
|
720
|
-
|
721
|
-
// Page size w/offscreen areas
|
722
|
-
|
723
|
-
if (window.innerHeight && window.scrollMaxY) {
|
724
|
-
myScrollWidth = document.body.scrollWidth;
|
725
|
-
myScrollHeight = window.innerHeight + window.scrollMaxY;
|
726
|
-
} else if (document.body.scrollHeight > document.body.offsetHeight) { // All but Explorer Mac
|
727
|
-
myScrollWidth = document.body.scrollWidth;
|
728
|
-
myScrollHeight = document.body.scrollHeight;
|
729
|
-
} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
|
730
|
-
myScrollWidth = document.body.offsetWidth;
|
731
|
-
myScrollHeight = document.body.offsetHeight;
|
732
|
-
}
|
733
|
-
}
|
734
|
-
|
735
|
-
// Utility: Get Shift Key Status
|
736
|
-
// IE events don't seem to get passed through the function, so grab it from the window.
|
737
|
-
|
738
|
-
function getShift(evt) {
|
739
|
-
var shift = false;
|
740
|
-
if (! evt && window.event) {
|
741
|
-
shift = window.event.shiftKey;
|
742
|
-
} else if (evt) {
|
743
|
-
shift = evt.shiftKey;
|
744
|
-
if (shift) evt.stopPropagation(); // Prevents Firefox from doing shifty things
|
745
|
-
}
|
746
|
-
return shift;
|
747
|
-
}
|
748
|
-
|
749
|
-
// Utility: Find the Y position of an element on a page. Return Y and X as an array
|
750
|
-
|
751
|
-
function findElementPos(elemFind)
|
752
|
-
{
|
753
|
-
var elemX = 0;
|
754
|
-
var elemY = 0;
|
755
|
-
do {
|
756
|
-
elemX += elemFind.offsetLeft;
|
757
|
-
elemY += elemFind.offsetTop;
|
758
|
-
} while ( elemFind = elemFind.offsetParent )
|
759
|
-
|
760
|
-
return Array(elemX, elemY);
|
761
|
-
}
|