kf5 0.3.3 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/LICENSE.txt +1 -1
- data/README.md +8 -2
- data/app/assets/javascripts/kf5.turbolinks.js +4 -3
- data/lib/kf5/version.rb +1 -1
- data/lib/kf5/view_helper.rb +1 -1
- metadata +3 -4
- data/app/assets/javascripts/kf5.js +0 -609
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d83a317cfcb4a8b7ce82d2842121e0c3bed1aaea
|
4
|
+
data.tar.gz: 15deb7bcb118dd873e7cd5e8447c814f4bb709d3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 66f74b3e0e67130d5889aee6132965b0eab5ef79e455e0b9c1a0708af10c0c454946df090c6abff2266042a430d4fa9d35601a129dfd2c287522743500acbfb8
|
7
|
+
data.tar.gz: 699d0b568532a923af50228d1bc151347b0517da8e0e811979fc5e8d448ac09b1d8c0799fba256dd718e0b6767a49e587be77133b82d4c4d7243b40278938abf
|
data/CHANGELOG.md
CHANGED
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
@@ -32,7 +32,7 @@ For rails, create config `config/initializers/kf5.rb`
|
|
32
32
|
KF5.configure do |config|
|
33
33
|
config.domain = "your.domain"
|
34
34
|
|
35
|
-
#
|
35
|
+
# disable SSO if key is nil
|
36
36
|
config.key = "your key of KF5 service"
|
37
37
|
|
38
38
|
# 1: login for 30 days, 0: login for 30 minutes
|
@@ -76,10 +76,16 @@ In view, you can use `kf5_tag` to include javascript plugin.
|
|
76
76
|
= kf5_tag
|
77
77
|
```
|
78
78
|
|
79
|
+
### Turbolinks
|
80
|
+
If you're using turbolinks, add the following to js file:
|
81
|
+
```JavaScript
|
82
|
+
//= require kf5.turbolinks
|
83
|
+
```
|
84
|
+
|
79
85
|
## License
|
80
86
|
|
81
87
|
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
82
88
|
|
83
89
|
## Contact
|
84
90
|
The project's website is located at https://github.com/emn178/kf5
|
85
|
-
Author: emn178@gmail.com
|
91
|
+
Author: Chen, Yi-Cyuan (emn178@gmail.com)
|
@@ -1,14 +1,15 @@
|
|
1
|
-
|
1
|
+
(function ($) {
|
2
2
|
var widgets = $();
|
3
3
|
|
4
4
|
$(document).on('page:before-unload', function store() {
|
5
|
-
if(!widgets.length) {
|
5
|
+
if (!widgets.length) {
|
6
6
|
widgets = $('#kf5-support-123456789');
|
7
|
-
if(widgets.length) {
|
7
|
+
if (widgets.length) {
|
8
8
|
widgets = $([widgets[0], widgets.prev()[0], widgets.prev().prev()[0]]);
|
9
9
|
}
|
10
10
|
}
|
11
11
|
});
|
12
|
+
|
12
13
|
$(document).on('page:load', function (argument) {
|
13
14
|
$('body').append(widgets);
|
14
15
|
});
|
data/lib/kf5/version.rb
CHANGED
data/lib/kf5/view_helper.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module KF5
|
2
2
|
module ViewHelper
|
3
3
|
def kf5_tag
|
4
|
-
javascript_include_tag "kf5.js", :id => "kf5-provide-supportBox", :"kf5-domain" => "#{KF5.configuration.domain}.kf5.com"
|
4
|
+
javascript_include_tag "//assets.kf5.com/supportbox/main.js", :id => "kf5-provide-supportBox", :"kf5-domain" => "#{KF5.configuration.domain}.kf5.com"
|
5
5
|
end
|
6
6
|
end
|
7
7
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kf5
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chen Yi-Cyuan
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-05-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -95,7 +95,6 @@ files:
|
|
95
95
|
- LICENSE.txt
|
96
96
|
- README.md
|
97
97
|
- Rakefile
|
98
|
-
- app/assets/javascripts/kf5.js
|
99
98
|
- app/assets/javascripts/kf5.turbolinks.js
|
100
99
|
- kf5.gemspec
|
101
100
|
- lib/kf5.rb
|
@@ -126,7 +125,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
126
125
|
version: '0'
|
127
126
|
requirements: []
|
128
127
|
rubyforge_project:
|
129
|
-
rubygems_version: 2.
|
128
|
+
rubygems_version: 2.5.1
|
130
129
|
signing_key:
|
131
130
|
specification_version: 4
|
132
131
|
summary: A simple presenter pattern for ruby. It can work in rails.
|
@@ -1,609 +0,0 @@
|
|
1
|
-
//= require kf5.turbolinks
|
2
|
-
|
3
|
-
(function(window, config)
|
4
|
-
{
|
5
|
-
"use strict";
|
6
|
-
|
7
|
-
var
|
8
|
-
script = window.document.getElementById('kf5-provide-supportBox'),
|
9
|
-
parts = script.src.split('//'),
|
10
|
-
host = parts.length > 1 ? parts[0] + '//' + parts[1].split('/')[0] : '',
|
11
|
-
kf5Domain = script.getAttribute('kf5-domain'),
|
12
|
-
supportboxConfigURL = '//' + kf5Domain + '/supportbox/buttonconfig',
|
13
|
-
_config = {
|
14
|
-
btn_name : '帮助按钮',
|
15
|
-
facade : '1',
|
16
|
-
color : '#7A88FF',
|
17
|
-
position : 'right',
|
18
|
-
iframeURL : '//' + kf5Domain + '/supportbox/index',
|
19
|
-
btn_icon : '//assets.kf5.com/supportbox/images/icon2.png',
|
20
|
-
styleURL : '//assets.kf5.com/supportbox/css/btn.css',
|
21
|
-
template : '<div id="kw-tab" class="kf5-support-btn" style="{{bg_color}}"> <img src="{{btn_icon}}" alt=""><span>{{title}}</span> </div> <div id="kw-block" class="kf5-support"> <a id="kw-close" class="kf5-close" title="关闭"><i class="kf5-icon-clear"></i></a> <div id="kw-loading" class="kf5-loading"> </div> <iframe id="kw-widget-iframe" src="" scrolling="no" frameborder="0"></iframe> </div>'
|
22
|
-
};
|
23
|
-
|
24
|
-
function KF5SupportBox(config)
|
25
|
-
{
|
26
|
-
this.config = config || {};
|
27
|
-
|
28
|
-
this.init();
|
29
|
-
}
|
30
|
-
|
31
|
-
window.KF5SupportBox = KF5SupportBox;
|
32
|
-
|
33
|
-
KF5SupportBox.prototype = {
|
34
|
-
|
35
|
-
el: null,
|
36
|
-
|
37
|
-
getElement: function(selector)
|
38
|
-
{
|
39
|
-
return window.document.getElementById(selector.replace('#', ''));
|
40
|
-
},
|
41
|
-
|
42
|
-
getOpt: function(key)
|
43
|
-
{
|
44
|
-
if(this.config.hasOwnProperty(key))
|
45
|
-
{
|
46
|
-
return this.config[key];
|
47
|
-
}
|
48
|
-
else
|
49
|
-
{
|
50
|
-
return _config[key];
|
51
|
-
}
|
52
|
-
},
|
53
|
-
|
54
|
-
init: function()
|
55
|
-
{
|
56
|
-
this._prepareStyle();
|
57
|
-
|
58
|
-
return this;
|
59
|
-
},
|
60
|
-
|
61
|
-
initElements: function()
|
62
|
-
{
|
63
|
-
this._prepareElement();
|
64
|
-
this.append();
|
65
|
-
|
66
|
-
this._bindEvents();
|
67
|
-
},
|
68
|
-
|
69
|
-
append: function()
|
70
|
-
{
|
71
|
-
window.document.body.appendChild(this.el);
|
72
|
-
|
73
|
-
return this;
|
74
|
-
},
|
75
|
-
|
76
|
-
_prepareStyle: function()
|
77
|
-
{
|
78
|
-
var link = window.document.createElement('link');
|
79
|
-
|
80
|
-
link.rel = 'styleSheet';
|
81
|
-
link.type = 'text/css';
|
82
|
-
link.href = this.getOpt('styleURL');
|
83
|
-
|
84
|
-
var self = this;
|
85
|
-
link.onload = function()
|
86
|
-
{
|
87
|
-
self.initElements();
|
88
|
-
link.onload = null;
|
89
|
-
};
|
90
|
-
|
91
|
-
window.document.body.appendChild(link);
|
92
|
-
|
93
|
-
return this;
|
94
|
-
},
|
95
|
-
|
96
|
-
_prepareElement: function()
|
97
|
-
{
|
98
|
-
var className = 'kf5-support-123456789';
|
99
|
-
|
100
|
-
// 位置
|
101
|
-
if(this.getOpt('position') === 'left')
|
102
|
-
{
|
103
|
-
className += ' kf5-left';
|
104
|
-
}
|
105
|
-
else
|
106
|
-
{
|
107
|
-
className += ' kf5-right'
|
108
|
-
}
|
109
|
-
|
110
|
-
// 外观
|
111
|
-
className += ' kf5-style' + (parseInt(this.getOpt('facade')) || 1);
|
112
|
-
|
113
|
-
// 设备
|
114
|
-
if(this.getOpt('is_mobile'))
|
115
|
-
{
|
116
|
-
className += ' kf5-mobile';
|
117
|
-
}
|
118
|
-
|
119
|
-
this.el = window.document.createElement('div');
|
120
|
-
this.el.setAttribute('class', className);
|
121
|
-
this.el.setAttribute('id', 'kf5-support-123456789');
|
122
|
-
this.el.innerHTML = this.getOpt('template')
|
123
|
-
.replace('{{title}}', this.getOpt('btn_name') || '获取帮助')
|
124
|
-
.replace('{{btn_icon}}', this.getOpt('btn_icon'))
|
125
|
-
.replace('{{bg_color}}', this.getOpt('color') ? 'background:' + this.getOpt('color') : '');
|
126
|
-
|
127
|
-
return this;
|
128
|
-
},
|
129
|
-
|
130
|
-
_bindEvents: function()
|
131
|
-
{
|
132
|
-
var self = this;
|
133
|
-
this.getElement('#kw-tab').onclick = function()
|
134
|
-
{
|
135
|
-
self.open();
|
136
|
-
};
|
137
|
-
|
138
|
-
this.getElement('#kw-close').onclick = function()
|
139
|
-
{
|
140
|
-
self.close();
|
141
|
-
};
|
142
|
-
|
143
|
-
this.getElement('#kw-widget-iframe').onload = function()
|
144
|
-
{
|
145
|
-
// setTimeout(function()
|
146
|
-
// {
|
147
|
-
self.getElement('#kw-loading').style.display = 'none';
|
148
|
-
// }, 2000);
|
149
|
-
|
150
|
-
};
|
151
|
-
|
152
|
-
if(cookie('kf5-supportBox-autoOpen'))
|
153
|
-
{
|
154
|
-
this.open();
|
155
|
-
}
|
156
|
-
|
157
|
-
return this;
|
158
|
-
},
|
159
|
-
|
160
|
-
loadIframe: function()
|
161
|
-
{
|
162
|
-
var iframe = this.getElement('#kw-widget-iframe');
|
163
|
-
|
164
|
-
if(!iframe.getAttribute('src'))
|
165
|
-
{
|
166
|
-
iframe.setAttribute('src', this.getOpt('iframeURL'));
|
167
|
-
}
|
168
|
-
|
169
|
-
return this;
|
170
|
-
},
|
171
|
-
|
172
|
-
// resizeIframe: function(data)
|
173
|
-
// {
|
174
|
-
// var elem = this.getElement('#kw-block');
|
175
|
-
|
176
|
-
// if(elem)
|
177
|
-
// {
|
178
|
-
// elem.style.height = parseFloat(data) + 'px';
|
179
|
-
// }
|
180
|
-
// },
|
181
|
-
|
182
|
-
open: function(e)
|
183
|
-
{
|
184
|
-
if(!this.isOpened)
|
185
|
-
{
|
186
|
-
var self = this;
|
187
|
-
|
188
|
-
this.loadIframe();
|
189
|
-
slideDown(this.getElement('#kw-tab'), {duration: 200, easing: 'swing'});
|
190
|
-
slideUp(self.getElement('#kw-block'), {duration: 200, easing: 'swing'});
|
191
|
-
|
192
|
-
cookie('kf5-supportBox-autoOpen', 1, {expires: 3 / 24, path: '/'});
|
193
|
-
|
194
|
-
this.isOpened = true;
|
195
|
-
}
|
196
|
-
},
|
197
|
-
|
198
|
-
close: function(e)
|
199
|
-
{
|
200
|
-
// slideDown(this.getElement('#kw-block'), 200);
|
201
|
-
// showElement(this.getElement('#kw-tab'));
|
202
|
-
var self = this;
|
203
|
-
|
204
|
-
slideDown(
|
205
|
-
this.getElement('#kw-block'),
|
206
|
-
{
|
207
|
-
duration: 200,
|
208
|
-
easing: 'swing',
|
209
|
-
callback: function()
|
210
|
-
{
|
211
|
-
slideUp(
|
212
|
-
self.getElement('#kw-tab'),
|
213
|
-
{
|
214
|
-
duration: 200,
|
215
|
-
easing: 'swing'
|
216
|
-
}
|
217
|
-
);
|
218
|
-
}
|
219
|
-
}
|
220
|
-
);
|
221
|
-
|
222
|
-
cookie('kf5-supportBox-autoOpen', null, {path: '/'});
|
223
|
-
|
224
|
-
this.isOpened = false;
|
225
|
-
}
|
226
|
-
};
|
227
|
-
|
228
|
-
var supportbox;
|
229
|
-
function onload()
|
230
|
-
{
|
231
|
-
if(supportbox)
|
232
|
-
{
|
233
|
-
return;
|
234
|
-
}
|
235
|
-
|
236
|
-
var script = window.document.createElement('script'),
|
237
|
-
configURL = supportboxConfigURL;
|
238
|
-
|
239
|
-
embed(configURL, function(win)
|
240
|
-
{
|
241
|
-
if(win.KF5_SUPPORTBOX_BUTTON && win.KF5_SUPPORTBOX_BUTTON.show)
|
242
|
-
{
|
243
|
-
supportbox = new KF5SupportBox(win.KF5_SUPPORTBOX_BUTTON);
|
244
|
-
|
245
|
-
// 延时自动加载iframe
|
246
|
-
// setTimeout(function()
|
247
|
-
// {
|
248
|
-
// supportbox.loadIframe();
|
249
|
-
// }, 30 * 1000);
|
250
|
-
}
|
251
|
-
});
|
252
|
-
}
|
253
|
-
|
254
|
-
window.addEventListener('load', onload, false);
|
255
|
-
|
256
|
-
if(!window.initializeKF5SupportBox)
|
257
|
-
{
|
258
|
-
// 暴露初始化方法,以解决特殊情况下load事件无法触发
|
259
|
-
window.initializeKF5SupportBox = onload;
|
260
|
-
}
|
261
|
-
|
262
|
-
// allow cross origin operation
|
263
|
-
window.addEventListener('message', function(e)
|
264
|
-
{
|
265
|
-
var context, cmd, data;
|
266
|
-
|
267
|
-
if(e.data)
|
268
|
-
{
|
269
|
-
context = e.data.match(/^([^ ]+)(?: +(.*))?/);
|
270
|
-
cmd = context[1];
|
271
|
-
data = context[2];
|
272
|
-
}
|
273
|
-
|
274
|
-
if(cmd === 'CMD::showSupportbox')
|
275
|
-
{
|
276
|
-
if(supportbox)
|
277
|
-
{
|
278
|
-
supportbox.open();
|
279
|
-
}
|
280
|
-
}
|
281
|
-
else if(cmd === 'CMD::hideSupportbox')
|
282
|
-
{
|
283
|
-
if(supportbox)
|
284
|
-
{
|
285
|
-
supportbox.close();
|
286
|
-
}
|
287
|
-
}
|
288
|
-
else if(cmd === 'CMD::resizeIframe')
|
289
|
-
{
|
290
|
-
// supportbox.resizeIframe(data);
|
291
|
-
}
|
292
|
-
});
|
293
|
-
|
294
|
-
function embed(mainJS, output)
|
295
|
-
{
|
296
|
-
var domain, doc, iframeWindow, iframeDoc,
|
297
|
-
iframe = window.document.createElement("iframe");
|
298
|
-
|
299
|
-
iframe.src = "javascript:false",
|
300
|
-
iframe.title = "",
|
301
|
-
iframe.role = "presentation",
|
302
|
-
(iframe.frameElement || iframe).style.cssText = "display: none",
|
303
|
-
window.document.body.appendChild(iframe);
|
304
|
-
iframeWindow = iframe.contentWindow,
|
305
|
-
iframeDoc = iframeWindow.document;
|
306
|
-
|
307
|
-
try {
|
308
|
-
doc = iframeDoc
|
309
|
-
} catch (c) {
|
310
|
-
domain = window.document.domain,
|
311
|
-
iframe.src = 'javascript:var doc=document.open();doc.domain="' + domain + '";void(0);',
|
312
|
-
doc = iframeDoc
|
313
|
-
}
|
314
|
-
|
315
|
-
doc.open().start = function() {
|
316
|
-
if(output)
|
317
|
-
{
|
318
|
-
if(typeof output === 'object')
|
319
|
-
{
|
320
|
-
output.iframeWindow = iframeWindow;
|
321
|
-
}
|
322
|
-
else if(typeof output === 'function')
|
323
|
-
{
|
324
|
-
output(iframeWindow);
|
325
|
-
}
|
326
|
-
}
|
327
|
-
},
|
328
|
-
|
329
|
-
doc.write('<body onload="document.start();">'),
|
330
|
-
doc.write('<script src="' + mainJS + '""></script>'),
|
331
|
-
doc.close();
|
332
|
-
}
|
333
|
-
|
334
|
-
function getStyle(el, style)
|
335
|
-
{
|
336
|
-
var
|
337
|
-
pnum = (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source,
|
338
|
-
rmargin = /^margin/,
|
339
|
-
rposition = /^(top|right|bottom|left)$/,
|
340
|
-
rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ),
|
341
|
-
|
342
|
-
getStyles, curCSS;
|
343
|
-
|
344
|
-
if ( window.getComputedStyle ) {
|
345
|
-
getStyles = function( elem ) {
|
346
|
-
return elem.ownerDocument.defaultView.getComputedStyle( elem, null );
|
347
|
-
};
|
348
|
-
|
349
|
-
curCSS = function( elem, name, computed ) {
|
350
|
-
var width, minWidth, maxWidth, ret,
|
351
|
-
style = elem.style;
|
352
|
-
|
353
|
-
computed = computed || getStyles( elem );
|
354
|
-
|
355
|
-
// getPropertyValue is only needed for .css('filter') in IE9, see #12537
|
356
|
-
ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined;
|
357
|
-
|
358
|
-
if ( computed ) {
|
359
|
-
|
360
|
-
// if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
|
361
|
-
// ret = jQuery.style( elem, name );
|
362
|
-
// }
|
363
|
-
|
364
|
-
// A tribute to the "awesome hack by Dean Edwards"
|
365
|
-
// Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right
|
366
|
-
// Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
|
367
|
-
// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
|
368
|
-
if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
|
369
|
-
|
370
|
-
// Remember the original values
|
371
|
-
width = style.width;
|
372
|
-
minWidth = style.minWidth;
|
373
|
-
maxWidth = style.maxWidth;
|
374
|
-
|
375
|
-
// Put in the new values to get a computed value out
|
376
|
-
style.minWidth = style.maxWidth = style.width = ret;
|
377
|
-
ret = computed.width;
|
378
|
-
|
379
|
-
// Revert the changed values
|
380
|
-
style.width = width;
|
381
|
-
style.minWidth = minWidth;
|
382
|
-
style.maxWidth = maxWidth;
|
383
|
-
}
|
384
|
-
}
|
385
|
-
|
386
|
-
// Support: IE
|
387
|
-
// IE returns zIndex value as an integer.
|
388
|
-
return ret === undefined ?
|
389
|
-
ret :
|
390
|
-
ret + "";
|
391
|
-
};
|
392
|
-
} else if ( document.documentElement.currentStyle ) {
|
393
|
-
getStyles = function( elem ) {
|
394
|
-
return elem.currentStyle;
|
395
|
-
};
|
396
|
-
|
397
|
-
curCSS = function( elem, name, computed ) {
|
398
|
-
var left, rs, rsLeft, ret,
|
399
|
-
style = elem.style;
|
400
|
-
|
401
|
-
computed = computed || getStyles( elem );
|
402
|
-
ret = computed ? computed[ name ] : undefined;
|
403
|
-
|
404
|
-
// Avoid setting ret to empty string here
|
405
|
-
// so we don't default to auto
|
406
|
-
if ( ret == null && style && style[ name ] ) {
|
407
|
-
ret = style[ name ];
|
408
|
-
}
|
409
|
-
|
410
|
-
// From the awesome hack by Dean Edwards
|
411
|
-
// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
|
412
|
-
|
413
|
-
// If we're not dealing with a regular pixel number
|
414
|
-
// but a number that has a weird ending, we need to convert it to pixels
|
415
|
-
// but not position css attributes, as those are proportional to the parent element instead
|
416
|
-
// and we can't measure the parent instead because it might trigger a "stacking dolls" problem
|
417
|
-
if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {
|
418
|
-
|
419
|
-
// Remember the original values
|
420
|
-
left = style.left;
|
421
|
-
rs = elem.runtimeStyle;
|
422
|
-
rsLeft = rs && rs.left;
|
423
|
-
|
424
|
-
// Put in the new values to get a computed value out
|
425
|
-
if ( rsLeft ) {
|
426
|
-
rs.left = elem.currentStyle.left;
|
427
|
-
}
|
428
|
-
style.left = name === "fontSize" ? "1em" : ret;
|
429
|
-
ret = style.pixelLeft + "px";
|
430
|
-
|
431
|
-
// Revert the changed values
|
432
|
-
style.left = left;
|
433
|
-
if ( rsLeft ) {
|
434
|
-
rs.left = rsLeft;
|
435
|
-
}
|
436
|
-
}
|
437
|
-
|
438
|
-
// Support: IE
|
439
|
-
// IE returns zIndex value as an integer.
|
440
|
-
return ret === undefined ?
|
441
|
-
ret :
|
442
|
-
ret + "" || "auto";
|
443
|
-
};
|
444
|
-
}
|
445
|
-
|
446
|
-
return curCSS && curCSS(el, style);
|
447
|
-
}
|
448
|
-
|
449
|
-
var easing = {
|
450
|
-
|
451
|
-
swing: function(p)
|
452
|
-
{
|
453
|
-
return 0.5 - Math.cos( p * Math.PI ) / 2;
|
454
|
-
},
|
455
|
-
|
456
|
-
linear: function(p)
|
457
|
-
{
|
458
|
-
return p;
|
459
|
-
}
|
460
|
-
};
|
461
|
-
|
462
|
-
function slideUp(elem, options)
|
463
|
-
{
|
464
|
-
var originalStyle = elem.getAttribute('style');
|
465
|
-
elem.style.display = 'block';
|
466
|
-
var originalHeight = parseInt(getStyle(elem, 'height'));
|
467
|
-
|
468
|
-
elem.style.height = '0px';
|
469
|
-
|
470
|
-
var duration = options.duration || 500;
|
471
|
-
var tStart = Date.now(),
|
472
|
-
percent = 0,
|
473
|
-
timer = setInterval(function()
|
474
|
-
{
|
475
|
-
percent = (Date.now() - tStart) / duration;
|
476
|
-
percent = percent > 1 ? 1 : percent;
|
477
|
-
|
478
|
-
elem.style.height = (easing[options.easing || 'swing'](percent)
|
479
|
-
* originalHeight) + 'px';
|
480
|
-
|
481
|
-
if(percent >= 1)
|
482
|
-
{
|
483
|
-
clearInterval(timer);
|
484
|
-
timer = null;
|
485
|
-
|
486
|
-
if(originalStyle)
|
487
|
-
{
|
488
|
-
elem.setAttribute('style', originalStyle);
|
489
|
-
}
|
490
|
-
else
|
491
|
-
{
|
492
|
-
elem.removeAttribute('style');
|
493
|
-
}
|
494
|
-
elem.style.display = 'block';
|
495
|
-
|
496
|
-
options.callback && options.callback.call(elem);
|
497
|
-
}
|
498
|
-
}, 1000 / 60);
|
499
|
-
}
|
500
|
-
|
501
|
-
function slideDown(elem, options)
|
502
|
-
{
|
503
|
-
var originalStyle = elem.getAttribute('style');
|
504
|
-
elem.style.display = 'block';
|
505
|
-
|
506
|
-
var originalHeight = parseInt(getStyle(elem, 'height'));
|
507
|
-
|
508
|
-
var duration = options.duration || 500;
|
509
|
-
var tStart = Date.now(),
|
510
|
-
percent = 0,
|
511
|
-
timer = setInterval(function()
|
512
|
-
{
|
513
|
-
percent = (Date.now() - tStart) / duration;
|
514
|
-
percent = percent > 1 ? 1 : percent;
|
515
|
-
|
516
|
-
elem.style.height = (easing[options.easing || 'swing'](1 - percent)
|
517
|
-
* originalHeight) + 'px';
|
518
|
-
|
519
|
-
if(percent >= 1)
|
520
|
-
{
|
521
|
-
clearInterval(timer);
|
522
|
-
timer = null;
|
523
|
-
|
524
|
-
if(originalStyle)
|
525
|
-
{
|
526
|
-
elem.setAttribute('style', originalStyle);
|
527
|
-
}
|
528
|
-
else
|
529
|
-
{
|
530
|
-
elem.removeAttribute('style');
|
531
|
-
}
|
532
|
-
elem.style.display = 'none';
|
533
|
-
|
534
|
-
options.callback && options.callback.call(elem);
|
535
|
-
}
|
536
|
-
}, 1000 / 60);
|
537
|
-
}
|
538
|
-
|
539
|
-
function hideElement(el)
|
540
|
-
{
|
541
|
-
el.style.display = 'none';
|
542
|
-
}
|
543
|
-
|
544
|
-
function showElement(el)
|
545
|
-
{
|
546
|
-
el.style.display = 'block';
|
547
|
-
}
|
548
|
-
|
549
|
-
function cookie(name, value, options)
|
550
|
-
{
|
551
|
-
if (typeof value != 'undefined')
|
552
|
-
{ // name and value given, set cookie
|
553
|
-
options = options || {};
|
554
|
-
if (value === null) {
|
555
|
-
value = '';
|
556
|
-
options.expires = -1;
|
557
|
-
}
|
558
|
-
var expires = '';
|
559
|
-
if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
|
560
|
-
var date;
|
561
|
-
if (typeof options.expires == 'number') {
|
562
|
-
date = new Date();
|
563
|
-
date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
|
564
|
-
} else {
|
565
|
-
date = options.expires;
|
566
|
-
}
|
567
|
-
expires = '; expires=' + date.toUTCString();
|
568
|
-
}
|
569
|
-
var path = options.path ? '; path=' + (options.path) : '';
|
570
|
-
var domain = options.domain ? '; domain=' + (options.domain) : '';
|
571
|
-
var secure = options.secure ? '; secure' : '';
|
572
|
-
document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
|
573
|
-
} else {
|
574
|
-
var cookieValue = null;
|
575
|
-
if (document.cookie && document.cookie != '') {
|
576
|
-
var cookies = document.cookie.split(';');
|
577
|
-
for (var i = 0; i < cookies.length; i++) {
|
578
|
-
var cookie = cookies[i].replace(/^\s+|\s+$/g, '');
|
579
|
-
if (cookie.substring(0, name.length + 1) == (name + '=')) {
|
580
|
-
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
|
581
|
-
break;
|
582
|
-
}
|
583
|
-
}
|
584
|
-
}
|
585
|
-
return cookieValue;
|
586
|
-
}
|
587
|
-
}
|
588
|
-
|
589
|
-
function isPC()
|
590
|
-
{
|
591
|
-
var userAgentInfo = navigator.userAgent;
|
592
|
-
var Agents = ['Android', 'iPhone',
|
593
|
-
'SymbianOS', 'Windows Phone',
|
594
|
-
'iPad', 'iPod'];
|
595
|
-
var flag = true;
|
596
|
-
|
597
|
-
for(var i = 0; i < Agents.length; i++)
|
598
|
-
{
|
599
|
-
if(userAgentInfo.indexOf(Agents[i]) !== -1)
|
600
|
-
{
|
601
|
-
flag = false;
|
602
|
-
break;
|
603
|
-
}
|
604
|
-
}
|
605
|
-
|
606
|
-
return flag;
|
607
|
-
}
|
608
|
-
|
609
|
-
})(window);
|