fume 0.6.7 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +7 -0
- data/VERSION +1 -1
- data/fume.gemspec +4 -1
- data/lib/fume/app_setting_loader.rb +13 -0
- data/lib/fume/authlogic.rb +1 -1
- data/lib/fume/cancan.rb +1 -1
- data/lib/fume/rails_ext.rb +16 -1
- data/lib/fume/railtie.rb +2 -2
- data/lib/fume/simple_nav.rb +49 -0
- data/lib/fume.rb +2 -1
- metadata +42 -64
- data/lib/fume/simple_theme.rb +0 -59
- data/rails_generators/fume/simple_theme/simple_theme_gen.rb +0 -9
- data/rails_generators/fume/simple_theme/templates/public/stylesheets/reset.css +0 -89
- data/rails_generators/fume/simple_theme/templates/public/stylesheets/reset.less +0 -1
- data/rails_generators/fume/simple_theme/templates/public/themes/simple_theme/demo.html +0 -513
- data/rails_generators/fume/simple_theme/templates/public/themes/simple_theme/simple-theme-ie-patch.js +0 -19
- data/rails_generators/fume/simple_theme/templates/public/themes/simple_theme/simple-theme.css +0 -864
- data/rails_generators/fume/simple_theme/templates/public/themes/simple_theme/simple-theme.less +0 -539
- data/rails_generators/fume/simple_theme/templates/public/themes/simple_theme/src/base.less +0 -9
- data/rails_generators/fume/simple_theme/templates/public/themes/simple_theme/src/function.less +0 -17
- data/rails_generators/fume/simple_theme/templates/public/themes/simple_theme/src/layout.less +0 -432
- data/rails_generators/fume/simple_theme/templates/public/themes/simple_theme/src/reset.less +0 -18
- data/rails_generators/fume/simple_theme/templates/public/themes/simple_theme/src/vendor/yui-3.0/base.css +0 -80
- data/rails_generators/fume/simple_theme/templates/public/themes/simple_theme/src/vendor/yui-3.0/fonts.css +0 -47
- data/rails_generators/fume/simple_theme/templates/public/themes/simple_theme/src/vendor/yui-3.0/reset.css +0 -126
- data/rails_generators/fume/simple_theme/templates/public/themes/vendor/jquery-1.4.2.js +0 -6240
- data/rails_generators/fume/simple_theme/templates/public/themes/vendor/jquery-ui-1.8.js +0 -10921
- data/rails_generators/fume/simple_theme/templates/public/themes/vendor/jquery-ui-1.8.ui-darkness/ui-bg_flat_30_cccccc_40x100.png +0 -0
- data/rails_generators/fume/simple_theme/templates/public/themes/vendor/jquery-ui-1.8.ui-darkness/ui-bg_flat_50_5c5c5c_40x100.png +0 -0
- data/rails_generators/fume/simple_theme/templates/public/themes/vendor/jquery-ui-1.8.ui-darkness/ui-bg_glass_20_555555_1x400.png +0 -0
- data/rails_generators/fume/simple_theme/templates/public/themes/vendor/jquery-ui-1.8.ui-darkness/ui-bg_glass_40_0078a3_1x400.png +0 -0
- data/rails_generators/fume/simple_theme/templates/public/themes/vendor/jquery-ui-1.8.ui-darkness/ui-bg_glass_40_ffc73d_1x400.png +0 -0
- data/rails_generators/fume/simple_theme/templates/public/themes/vendor/jquery-ui-1.8.ui-darkness/ui-bg_gloss-wave_25_333333_500x100.png +0 -0
- data/rails_generators/fume/simple_theme/templates/public/themes/vendor/jquery-ui-1.8.ui-darkness/ui-bg_highlight-soft_80_eeeeee_1x100.png +0 -0
- data/rails_generators/fume/simple_theme/templates/public/themes/vendor/jquery-ui-1.8.ui-darkness/ui-bg_inset-soft_25_000000_1x100.png +0 -0
- data/rails_generators/fume/simple_theme/templates/public/themes/vendor/jquery-ui-1.8.ui-darkness/ui-bg_inset-soft_30_f58400_1x100.png +0 -0
- data/rails_generators/fume/simple_theme/templates/public/themes/vendor/jquery-ui-1.8.ui-darkness/ui-icons_222222_256x240.png +0 -0
- data/rails_generators/fume/simple_theme/templates/public/themes/vendor/jquery-ui-1.8.ui-darkness/ui-icons_4b8e0b_256x240.png +0 -0
- data/rails_generators/fume/simple_theme/templates/public/themes/vendor/jquery-ui-1.8.ui-darkness/ui-icons_a83300_256x240.png +0 -0
- data/rails_generators/fume/simple_theme/templates/public/themes/vendor/jquery-ui-1.8.ui-darkness/ui-icons_cccccc_256x240.png +0 -0
- data/rails_generators/fume/simple_theme/templates/public/themes/vendor/jquery-ui-1.8.ui-darkness/ui-icons_ffffff_256x240.png +0 -0
- data/rails_generators/fume/simple_theme/templates/public/themes/vendor/jquery-ui-1.8.ui-darkness.css +0 -480
- data/rails_generators/fume/simple_theme/templates/public/themes/vendor/jquery-ui-i18n-1.8.js +0 -1176
- data/rails_generators/fume/simple_theme/templates/public/themes/vendor/jquery.ba-bbq-1.2.1.js +0 -1137
- data/rails_generators/fume/simple_theme/templates/public/themes/vendor/jquery.corner-2.09.js +0 -239
- data/rails_generators/fume/simple_theme/templates/public/themes/vendor/jquery.timepicker-0.2.1.js +0 -413
data/rails_generators/fume/simple_theme/templates/public/themes/vendor/jquery.corner-2.09.js
DELETED
@@ -1,239 +0,0 @@
|
|
1
|
-
/*!
|
2
|
-
* jQuery corner plugin: simple corner rounding
|
3
|
-
* Examples and documentation at: http://jquery.malsup.com/corner/
|
4
|
-
* version 2.09 (11-MAR-2010)
|
5
|
-
* Requires jQuery v1.3.2 or later
|
6
|
-
* Dual licensed under the MIT and GPL licenses:
|
7
|
-
* http://www.opensource.org/licenses/mit-license.php
|
8
|
-
* http://www.gnu.org/licenses/gpl.html
|
9
|
-
* Authors: Dave Methvin and Mike Alsup
|
10
|
-
*/
|
11
|
-
|
12
|
-
/**
|
13
|
-
* corner() takes a single string argument: $('#myDiv').corner("effect corners width")
|
14
|
-
*
|
15
|
-
* effect: name of the effect to apply, such as round, bevel, notch, bite, etc (default is round).
|
16
|
-
* corners: one or more of: top, bottom, tr, tl, br, or bl. (default is all corners)
|
17
|
-
* width: width of the effect; in the case of rounded corners this is the radius.
|
18
|
-
* specify this value using the px suffix such as 10px (yes, it must be pixels).
|
19
|
-
*/
|
20
|
-
;(function($) {
|
21
|
-
|
22
|
-
var style = document.createElement('div').style;
|
23
|
-
var moz = style['MozBorderRadius'] !== undefined;
|
24
|
-
var webkit = style['WebkitBorderRadius'] !== undefined;
|
25
|
-
var radius = style['borderRadius'] !== undefined || style['BorderRadius'] !== undefined;
|
26
|
-
var mode = document.documentMode || 0;
|
27
|
-
var noBottomFold = $.browser.msie && (($.browser.version < 8 && !mode) || mode < 8);
|
28
|
-
|
29
|
-
var expr = $.browser.msie && (function() {
|
30
|
-
var div = document.createElement('div');
|
31
|
-
try { div.style.setExpression('width','0+0'); div.style.removeExpression('width'); }
|
32
|
-
catch(e) { return false; }
|
33
|
-
return true;
|
34
|
-
})();
|
35
|
-
|
36
|
-
function sz(el, p) {
|
37
|
-
return parseInt($.css(el,p))||0;
|
38
|
-
};
|
39
|
-
function hex2(s) {
|
40
|
-
var s = parseInt(s).toString(16);
|
41
|
-
return ( s.length < 2 ) ? '0'+s : s;
|
42
|
-
};
|
43
|
-
function gpc(node) {
|
44
|
-
while(node) {
|
45
|
-
var v = $.css(node,'backgroundColor');
|
46
|
-
if (v && v != 'transparent' && v != 'rgba(0, 0, 0, 0)') {
|
47
|
-
if (v.indexOf('rgb') >= 0) {
|
48
|
-
var rgb = v.match(/\d+/g);
|
49
|
-
return '#'+ hex2(rgb[0]) + hex2(rgb[1]) + hex2(rgb[2]);
|
50
|
-
}
|
51
|
-
return v;
|
52
|
-
}
|
53
|
-
node = node.parentNode; // keep walking if transparent
|
54
|
-
}
|
55
|
-
return '#ffffff';
|
56
|
-
};
|
57
|
-
|
58
|
-
function getWidth(fx, i, width) {
|
59
|
-
switch(fx) {
|
60
|
-
case 'round': return Math.round(width*(1-Math.cos(Math.asin(i/width))));
|
61
|
-
case 'cool': return Math.round(width*(1+Math.cos(Math.asin(i/width))));
|
62
|
-
case 'sharp': return Math.round(width*(1-Math.cos(Math.acos(i/width))));
|
63
|
-
case 'bite': return Math.round(width*(Math.cos(Math.asin((width-i-1)/width))));
|
64
|
-
case 'slide': return Math.round(width*(Math.atan2(i,width/i)));
|
65
|
-
case 'jut': return Math.round(width*(Math.atan2(width,(width-i-1))));
|
66
|
-
case 'curl': return Math.round(width*(Math.atan(i)));
|
67
|
-
case 'tear': return Math.round(width*(Math.cos(i)));
|
68
|
-
case 'wicked': return Math.round(width*(Math.tan(i)));
|
69
|
-
case 'long': return Math.round(width*(Math.sqrt(i)));
|
70
|
-
case 'sculpt': return Math.round(width*(Math.log((width-i-1),width)));
|
71
|
-
case 'dogfold':
|
72
|
-
case 'dog': return (i&1) ? (i+1) : width;
|
73
|
-
case 'dog2': return (i&2) ? (i+1) : width;
|
74
|
-
case 'dog3': return (i&3) ? (i+1) : width;
|
75
|
-
case 'fray': return (i%2)*width;
|
76
|
-
case 'notch': return width;
|
77
|
-
case 'bevelfold':
|
78
|
-
case 'bevel': return i+1;
|
79
|
-
}
|
80
|
-
};
|
81
|
-
|
82
|
-
$.fn.corner = function(options) {
|
83
|
-
// in 1.3+ we can fix mistakes with the ready state
|
84
|
-
if (this.length == 0) {
|
85
|
-
if (!$.isReady && this.selector) {
|
86
|
-
var s = this.selector, c = this.context;
|
87
|
-
$(function() {
|
88
|
-
$(s,c).corner(options);
|
89
|
-
});
|
90
|
-
}
|
91
|
-
return this;
|
92
|
-
}
|
93
|
-
|
94
|
-
return this.each(function(index){
|
95
|
-
var $this = $(this);
|
96
|
-
// meta values override options
|
97
|
-
var o = [$this.attr($.fn.corner.defaults.metaAttr) || '', options || ''].join(' ').toLowerCase();
|
98
|
-
var keep = /keep/.test(o); // keep borders?
|
99
|
-
var cc = ((o.match(/cc:(#[0-9a-f]+)/)||[])[1]); // corner color
|
100
|
-
var sc = ((o.match(/sc:(#[0-9a-f]+)/)||[])[1]); // strip color
|
101
|
-
var width = parseInt((o.match(/(\d+)px/)||[])[1]) || 10; // corner width
|
102
|
-
var re = /round|bevelfold|bevel|notch|bite|cool|sharp|slide|jut|curl|tear|fray|wicked|sculpt|long|dog3|dog2|dogfold|dog/;
|
103
|
-
var fx = ((o.match(re)||['round'])[0]);
|
104
|
-
var fold = /dogfold|bevelfold/.test(o);
|
105
|
-
var edges = { T:0, B:1 };
|
106
|
-
var opts = {
|
107
|
-
TL: /top|tl|left/.test(o), TR: /top|tr|right/.test(o),
|
108
|
-
BL: /bottom|bl|left/.test(o), BR: /bottom|br|right/.test(o)
|
109
|
-
};
|
110
|
-
if ( !opts.TL && !opts.TR && !opts.BL && !opts.BR )
|
111
|
-
opts = { TL:1, TR:1, BL:1, BR:1 };
|
112
|
-
|
113
|
-
// support native rounding
|
114
|
-
if ($.fn.corner.defaults.useNative && fx == 'round' && (radius || moz || webkit) && !cc && !sc) {
|
115
|
-
if (opts.TL)
|
116
|
-
$this.css(radius ? 'border-top-left-radius' : moz ? '-moz-border-radius-topleft' : '-webkit-border-top-left-radius', width + 'px');
|
117
|
-
if (opts.TR)
|
118
|
-
$this.css(radius ? 'border-top-right-radius' : moz ? '-moz-border-radius-topright' : '-webkit-border-top-right-radius', width + 'px');
|
119
|
-
if (opts.BL)
|
120
|
-
$this.css(radius ? 'border-bottom-left-radius' : moz ? '-moz-border-radius-bottomleft' : '-webkit-border-bottom-left-radius', width + 'px');
|
121
|
-
if (opts.BR)
|
122
|
-
$this.css(radius ? 'border-bottom-right-radius' : moz ? '-moz-border-radius-bottomright' : '-webkit-border-bottom-right-radius', width + 'px');
|
123
|
-
return;
|
124
|
-
}
|
125
|
-
|
126
|
-
var strip = document.createElement('div');
|
127
|
-
$(strip).css({
|
128
|
-
overflow: 'hidden',
|
129
|
-
height: '1px',
|
130
|
-
minHeight: '1px',
|
131
|
-
fontSize: '1px',
|
132
|
-
backgroundColor: sc || 'transparent',
|
133
|
-
borderStyle: 'solid'
|
134
|
-
});
|
135
|
-
|
136
|
-
var pad = {
|
137
|
-
T: parseInt($.css(this,'paddingTop'))||0, R: parseInt($.css(this,'paddingRight'))||0,
|
138
|
-
B: parseInt($.css(this,'paddingBottom'))||0, L: parseInt($.css(this,'paddingLeft'))||0
|
139
|
-
};
|
140
|
-
|
141
|
-
if (typeof this.style.zoom != undefined) this.style.zoom = 1; // force 'hasLayout' in IE
|
142
|
-
if (!keep) this.style.border = 'none';
|
143
|
-
strip.style.borderColor = cc || gpc(this.parentNode);
|
144
|
-
var cssHeight = $(this).outerHeight();
|
145
|
-
|
146
|
-
for (var j in edges) {
|
147
|
-
var bot = edges[j];
|
148
|
-
// only add stips if needed
|
149
|
-
if ((bot && (opts.BL || opts.BR)) || (!bot && (opts.TL || opts.TR))) {
|
150
|
-
strip.style.borderStyle = 'none '+(opts[j+'R']?'solid':'none')+' none '+(opts[j+'L']?'solid':'none');
|
151
|
-
var d = document.createElement('div');
|
152
|
-
$(d).addClass('jquery-corner');
|
153
|
-
var ds = d.style;
|
154
|
-
|
155
|
-
bot ? this.appendChild(d) : this.insertBefore(d, this.firstChild);
|
156
|
-
|
157
|
-
if (bot && cssHeight != 'auto') {
|
158
|
-
if ($.css(this,'position') == 'static')
|
159
|
-
this.style.position = 'relative';
|
160
|
-
ds.position = 'absolute';
|
161
|
-
ds.bottom = ds.left = ds.padding = ds.margin = '0';
|
162
|
-
if (expr)
|
163
|
-
ds.setExpression('width', 'this.parentNode.offsetWidth');
|
164
|
-
else
|
165
|
-
ds.width = '100%';
|
166
|
-
}
|
167
|
-
else if (!bot && $.browser.msie) {
|
168
|
-
if ($.css(this,'position') == 'static')
|
169
|
-
this.style.position = 'relative';
|
170
|
-
ds.position = 'absolute';
|
171
|
-
ds.top = ds.left = ds.right = ds.padding = ds.margin = '0';
|
172
|
-
|
173
|
-
// fix ie6 problem when blocked element has a border width
|
174
|
-
if (expr) {
|
175
|
-
var bw = sz(this,'borderLeftWidth') + sz(this,'borderRightWidth');
|
176
|
-
ds.setExpression('width', 'this.parentNode.offsetWidth - '+bw+'+ "px"');
|
177
|
-
}
|
178
|
-
else
|
179
|
-
ds.width = '100%';
|
180
|
-
}
|
181
|
-
else {
|
182
|
-
ds.position = 'relative';
|
183
|
-
ds.margin = !bot ? '-'+pad.T+'px -'+pad.R+'px '+(pad.T-width)+'px -'+pad.L+'px' :
|
184
|
-
(pad.B-width)+'px -'+pad.R+'px -'+pad.B+'px -'+pad.L+'px';
|
185
|
-
}
|
186
|
-
|
187
|
-
for (var i=0; i < width; i++) {
|
188
|
-
var w = Math.max(0,getWidth(fx,i, width));
|
189
|
-
var e = strip.cloneNode(false);
|
190
|
-
e.style.borderWidth = '0 '+(opts[j+'R']?w:0)+'px 0 '+(opts[j+'L']?w:0)+'px';
|
191
|
-
bot ? d.appendChild(e) : d.insertBefore(e, d.firstChild);
|
192
|
-
}
|
193
|
-
|
194
|
-
if (fold && $.support.boxModel) {
|
195
|
-
if (bot && noBottomFold) continue;
|
196
|
-
for (var c in opts) {
|
197
|
-
if (!opts[c]) continue;
|
198
|
-
if (bot && (c == 'TL' || c == 'TR')) continue;
|
199
|
-
if (!bot && (c == 'BL' || c == 'BR')) continue;
|
200
|
-
|
201
|
-
var common = { position: 'absolute', border: 'none', margin: 0, padding: 0, overflow: 'hidden', backgroundColor: strip.style.borderColor };
|
202
|
-
var $horz = $('<div/>').css(common).css({ width: width + 'px', height: '1px' });
|
203
|
-
switch(c) {
|
204
|
-
case 'TL': $horz.css({ bottom: 0, left: 0 }); break;
|
205
|
-
case 'TR': $horz.css({ bottom: 0, right: 0 }); break;
|
206
|
-
case 'BL': $horz.css({ top: 0, left: 0 }); break;
|
207
|
-
case 'BR': $horz.css({ top: 0, right: 0 }); break;
|
208
|
-
}
|
209
|
-
d.appendChild($horz[0]);
|
210
|
-
|
211
|
-
var $vert = $('<div/>').css(common).css({ top: 0, bottom: 0, width: '1px', height: width + 'px' });
|
212
|
-
switch(c) {
|
213
|
-
case 'TL': $vert.css({ left: width }); break;
|
214
|
-
case 'TR': $vert.css({ right: width }); break;
|
215
|
-
case 'BL': $vert.css({ left: width }); break;
|
216
|
-
case 'BR': $vert.css({ right: width }); break;
|
217
|
-
}
|
218
|
-
d.appendChild($vert[0]);
|
219
|
-
}
|
220
|
-
}
|
221
|
-
}
|
222
|
-
}
|
223
|
-
});
|
224
|
-
};
|
225
|
-
|
226
|
-
$.fn.uncorner = function() {
|
227
|
-
if (radius || moz || webkit)
|
228
|
-
this.css(radius ? 'border-radius' : moz ? '-moz-border-radius' : '-webkit-border-radius', 0);
|
229
|
-
$('div.jquery-corner', this).remove();
|
230
|
-
return this;
|
231
|
-
};
|
232
|
-
|
233
|
-
// expose options
|
234
|
-
$.fn.corner.defaults = {
|
235
|
-
useNative: true, // true if plugin should attempt to use native browser support for border radius rounding
|
236
|
-
metaAttr: 'data-corner' // name of meta attribute to use for options
|
237
|
-
};
|
238
|
-
|
239
|
-
})(jQuery);
|
data/rails_generators/fume/simple_theme/templates/public/themes/vendor/jquery.timepicker-0.2.1.js
DELETED
@@ -1,413 +0,0 @@
|
|
1
|
-
/*!
|
2
|
-
* jQuery UI Timepicker 0.2.1
|
3
|
-
*
|
4
|
-
* Copyright (c) 2009 Martin Milesich (http://milesich.com/)
|
5
|
-
*
|
6
|
-
* Some parts are
|
7
|
-
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
8
|
-
*
|
9
|
-
* $Id: timepicker.js 28 2009-08-11 20:31:23Z majlo $
|
10
|
-
*
|
11
|
-
* Depends:
|
12
|
-
* ui.core.js
|
13
|
-
* ui.datepicker.js
|
14
|
-
* ui.slider.js
|
15
|
-
*/
|
16
|
-
(function($) {
|
17
|
-
|
18
|
-
/**
|
19
|
-
* Extending default values
|
20
|
-
*/
|
21
|
-
$.extend($.datepicker._defaults, {
|
22
|
-
'stepMinutes': 1, // Number of minutes to step up/down
|
23
|
-
'stepHours': 1, // Number of hours to step up/down
|
24
|
-
'time24h': false, // True if 24h time
|
25
|
-
'showTime': false, // Show timepicker with datepicker
|
26
|
-
'altTimeField': '' // Selector for an alternate field to store time into
|
27
|
-
});
|
28
|
-
|
29
|
-
/**
|
30
|
-
* _hideDatepicker must be called with null
|
31
|
-
*/
|
32
|
-
$.datepicker._connectDatepickerOverride = $.datepicker._connectDatepicker;
|
33
|
-
$.datepicker._connectDatepicker = function(target, inst) {
|
34
|
-
$.datepicker._connectDatepickerOverride(target, inst);
|
35
|
-
|
36
|
-
// showButtonPanel is required with timepicker
|
37
|
-
if (this._get(inst, 'showTime')) {
|
38
|
-
inst.settings['showButtonPanel'] = true;
|
39
|
-
}
|
40
|
-
|
41
|
-
var showOn = this._get(inst, 'showOn');
|
42
|
-
|
43
|
-
if (showOn == 'button' || showOn == 'both') {
|
44
|
-
// Unbind all click events
|
45
|
-
inst.trigger.unbind('click');
|
46
|
-
|
47
|
-
// Bind new click event
|
48
|
-
inst.trigger.click(function() {
|
49
|
-
if ($.datepicker._datepickerShowing && $.datepicker._lastInput == target)
|
50
|
-
$.datepicker._hideDatepicker(null); // This override is all about the "null"
|
51
|
-
else
|
52
|
-
$.datepicker._showDatepicker(target);
|
53
|
-
return false;
|
54
|
-
});
|
55
|
-
}
|
56
|
-
};
|
57
|
-
|
58
|
-
/**
|
59
|
-
* Datepicker does not have an onShow event so I need to create it.
|
60
|
-
* What I actually doing here is copying original _showDatepicker
|
61
|
-
* method to _showDatepickerOverload method.
|
62
|
-
*/
|
63
|
-
$.datepicker._showDatepickerOverride = $.datepicker._showDatepicker;
|
64
|
-
$.datepicker._showDatepicker = function (input) {
|
65
|
-
// Call the original method which will show the datepicker
|
66
|
-
$.datepicker._showDatepickerOverride(input);
|
67
|
-
|
68
|
-
input = input.target || input;
|
69
|
-
|
70
|
-
// find from button/image trigger
|
71
|
-
if (input.nodeName.toLowerCase() != 'input') input = $('input', input.parentNode)[0];
|
72
|
-
|
73
|
-
// Do not show timepicker if datepicker is disabled
|
74
|
-
if ($.datepicker._isDisabledDatepicker(input)) return;
|
75
|
-
|
76
|
-
// Get instance to datepicker
|
77
|
-
var inst = $.datepicker._getInst(input);
|
78
|
-
|
79
|
-
var showTime = $.datepicker._get(inst, 'showTime');
|
80
|
-
|
81
|
-
// If showTime = True show the timepicker
|
82
|
-
if (showTime) $.timepicker.show(input);
|
83
|
-
};
|
84
|
-
|
85
|
-
/**
|
86
|
-
* Same as above. Here I need to extend the _checkExternalClick method
|
87
|
-
* because I don't want to close the datepicker when the sliders get focus.
|
88
|
-
*/
|
89
|
-
$.datepicker._checkExternalClickOverride = $.datepicker._checkExternalClick;
|
90
|
-
$.datepicker._checkExternalClick = function (event) {
|
91
|
-
if (!$.datepicker._curInst) return;
|
92
|
-
var $target = $(event.target);
|
93
|
-
|
94
|
-
if (($target.parents('#' + $.timepicker._mainDivId).length == 0)) {
|
95
|
-
$.datepicker._checkExternalClickOverride(event);
|
96
|
-
}
|
97
|
-
};
|
98
|
-
|
99
|
-
/**
|
100
|
-
* Datepicker has onHide event but I just want to make it simple for you
|
101
|
-
* so I hide the timepicker when datepicker hides.
|
102
|
-
*/
|
103
|
-
$.datepicker._hideDatepickerOverride = $.datepicker._hideDatepicker;
|
104
|
-
$.datepicker._hideDatepicker = function(input, duration) {
|
105
|
-
// Some lines from the original method
|
106
|
-
var inst = this._curInst;
|
107
|
-
|
108
|
-
if (!inst || (input && inst != $.data(input, PROP_NAME))) return;
|
109
|
-
|
110
|
-
// Get the value of showTime property
|
111
|
-
var showTime = this._get(inst, 'showTime');
|
112
|
-
|
113
|
-
if (input === undefined && showTime) {
|
114
|
-
if (inst.input) {
|
115
|
-
inst.input.val(this._formatDate(inst));
|
116
|
-
inst.input.trigger('change'); // fire the change event
|
117
|
-
}
|
118
|
-
|
119
|
-
this._updateAlternate(inst);
|
120
|
-
|
121
|
-
if (showTime) $.timepicker.update(this._formatDate(inst));
|
122
|
-
}
|
123
|
-
|
124
|
-
// Hide datepicker
|
125
|
-
$.datepicker._hideDatepickerOverride(input, duration);
|
126
|
-
|
127
|
-
// Hide the timepicker if enabled
|
128
|
-
if (showTime) {
|
129
|
-
$.timepicker.hide();
|
130
|
-
}
|
131
|
-
};
|
132
|
-
|
133
|
-
/**
|
134
|
-
* This is a complete replacement of the _selectDate method.
|
135
|
-
* If showed with timepicker do not close when date is selected.
|
136
|
-
*/
|
137
|
-
$.datepicker._selectDate = function(id, dateStr) {
|
138
|
-
var target = $(id);
|
139
|
-
var inst = this._getInst(target[0]);
|
140
|
-
var showTime = this._get(inst, 'showTime');
|
141
|
-
dateStr = (dateStr != null ? dateStr : this._formatDate(inst));
|
142
|
-
if (!showTime) {
|
143
|
-
if (inst.input)
|
144
|
-
inst.input.val(dateStr);
|
145
|
-
this._updateAlternate(inst);
|
146
|
-
}
|
147
|
-
var onSelect = this._get(inst, 'onSelect');
|
148
|
-
if (onSelect)
|
149
|
-
onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]); // trigger custom callback
|
150
|
-
else if (inst.input && !showTime)
|
151
|
-
inst.input.trigger('change'); // fire the change event
|
152
|
-
if (inst.inline)
|
153
|
-
this._updateDatepicker(inst);
|
154
|
-
else if (!inst.stayOpen) {
|
155
|
-
if (showTime) {
|
156
|
-
this._updateDatepicker(inst);
|
157
|
-
} else {
|
158
|
-
this._hideDatepicker(null, this._get(inst, 'duration'));
|
159
|
-
this._lastInput = inst.input[0];
|
160
|
-
if (typeof(inst.input[0]) != 'object')
|
161
|
-
inst.input[0].focus(); // restore focus
|
162
|
-
this._lastInput = null;
|
163
|
-
}
|
164
|
-
}
|
165
|
-
};
|
166
|
-
|
167
|
-
/**
|
168
|
-
* We need to resize the timepicker when the datepicker has been changed.
|
169
|
-
*/
|
170
|
-
$.datepicker._updateDatepickerOverride = $.datepicker._updateDatepicker;
|
171
|
-
$.datepicker._updateDatepicker = function(inst) {
|
172
|
-
$.datepicker._updateDatepickerOverride(inst);
|
173
|
-
$.timepicker.resize();
|
174
|
-
};
|
175
|
-
|
176
|
-
function Timepicker() {}
|
177
|
-
|
178
|
-
Timepicker.prototype = {
|
179
|
-
init: function()
|
180
|
-
{
|
181
|
-
this._mainDivId = 'ui-timepicker-div';
|
182
|
-
this._inputId = null;
|
183
|
-
this._orgValue = null;
|
184
|
-
this._orgHour = null;
|
185
|
-
this._orgMinute = null;
|
186
|
-
this._colonPos = -1;
|
187
|
-
this._visible = false;
|
188
|
-
this.tpDiv = $('<div id="' + this._mainDivId + '" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all ui-helper-hidden-accessible" style="width: 100px; display: none; position: absolute;"></div>');
|
189
|
-
this._generateHtml();
|
190
|
-
},
|
191
|
-
|
192
|
-
show: function (input)
|
193
|
-
{
|
194
|
-
// Get instance to datepicker
|
195
|
-
var inst = $.datepicker._getInst(input);
|
196
|
-
|
197
|
-
this._time24h = $.datepicker._get(inst, 'time24h');
|
198
|
-
this._altTimeField = $.datepicker._get(inst, 'altTimeField');
|
199
|
-
|
200
|
-
var stepMinutes = parseInt($.datepicker._get(inst, 'stepMinutes'), 10) || 1;
|
201
|
-
var stepHours = parseInt($.datepicker._get(inst, 'stepHours'), 10) || 1;
|
202
|
-
|
203
|
-
if (60 % stepMinutes != 0) { stepMinutes = 1; }
|
204
|
-
if (24 % stepHours != 0) { stepHours = 1; }
|
205
|
-
|
206
|
-
$('#hourSlider').slider('option', 'max', 24 - stepHours);
|
207
|
-
$('#hourSlider').slider('option', 'step', stepHours);
|
208
|
-
|
209
|
-
$('#minuteSlider').slider('option', 'max', 60 - stepMinutes);
|
210
|
-
$('#minuteSlider').slider('option', 'step', stepMinutes);
|
211
|
-
|
212
|
-
this._inputId = input.id;
|
213
|
-
|
214
|
-
if (!this._visible) {
|
215
|
-
this._parseTime();
|
216
|
-
this._orgValue = $('#' + this._inputId).val();
|
217
|
-
}
|
218
|
-
|
219
|
-
this.resize();
|
220
|
-
|
221
|
-
$('#' + this._mainDivId).show();
|
222
|
-
|
223
|
-
this._visible = true;
|
224
|
-
|
225
|
-
var dpDiv = $('#' + $.datepicker._mainDivId);
|
226
|
-
var dpDivPos = dpDiv.position();
|
227
|
-
|
228
|
-
var viewWidth = (window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth) + $(document).scrollLeft();
|
229
|
-
var tpRight = this.tpDiv.offset().left + this.tpDiv.outerWidth();
|
230
|
-
|
231
|
-
if (tpRight > viewWidth) {
|
232
|
-
dpDiv.css('left', dpDivPos.left - (tpRight - viewWidth) - 5);
|
233
|
-
this.tpDiv.css('left', dpDiv.offset().left + dpDiv.outerWidth() + 'px');
|
234
|
-
}
|
235
|
-
},
|
236
|
-
|
237
|
-
update: function (fd)
|
238
|
-
{
|
239
|
-
var curTime = $('#' + this._mainDivId + ' span.fragHours').text()
|
240
|
-
+ ':'
|
241
|
-
+ $('#' + this._mainDivId + ' span.fragMinutes').text();
|
242
|
-
|
243
|
-
if (!this._time24h) {
|
244
|
-
curTime += ' ' + $('#' + this._mainDivId + ' span.fragAmpm').text();
|
245
|
-
}
|
246
|
-
|
247
|
-
var curDate = $('#' + this._inputId).val();
|
248
|
-
|
249
|
-
$('#' + this._inputId).val(fd + ' ' + curTime);
|
250
|
-
|
251
|
-
if (this._altTimeField) {
|
252
|
-
$(this._altTimeField).each(function() { $(this).val(curTime); });
|
253
|
-
}
|
254
|
-
},
|
255
|
-
|
256
|
-
hide: function ()
|
257
|
-
{
|
258
|
-
this._visible = false;
|
259
|
-
$('#' + this._mainDivId).hide();
|
260
|
-
},
|
261
|
-
|
262
|
-
resize: function ()
|
263
|
-
{
|
264
|
-
var dpDiv = $('#' + $.datepicker._mainDivId);
|
265
|
-
var dpDivPos = dpDiv.position();
|
266
|
-
|
267
|
-
var hdrHeight = $('#' + $.datepicker._mainDivId + ' > div.ui-datepicker-header:first-child').height();
|
268
|
-
|
269
|
-
$('#' + this._mainDivId + ' > div.ui-datepicker-header:first-child').css('height', hdrHeight);
|
270
|
-
|
271
|
-
this.tpDiv.css({
|
272
|
-
'height': dpDiv.height(),
|
273
|
-
'top' : dpDivPos.top,
|
274
|
-
'left' : dpDivPos.left + dpDiv.outerWidth() + 'px'
|
275
|
-
});
|
276
|
-
|
277
|
-
$('#hourSlider').css('height', this.tpDiv.height() - (3.5 * hdrHeight));
|
278
|
-
$('#minuteSlider').css('height', this.tpDiv.height() - (3.5 * hdrHeight));
|
279
|
-
},
|
280
|
-
|
281
|
-
_generateHtml: function ()
|
282
|
-
{
|
283
|
-
var html = '';
|
284
|
-
|
285
|
-
html += '<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix ui-corner-all">';
|
286
|
-
html += '<div class="ui-datepicker-title" style="margin:0">';
|
287
|
-
html += '<span class="fragHours">08</span><span class="delim">:</span><span class="fragMinutes">45</span> <span class="fragAmpm"></span></div></div><table>';
|
288
|
-
html += '<tr><th>Hour</th><th>Minute</th></tr>';
|
289
|
-
html += '<tr><td align="center"><div id="hourSlider" class="slider"></div></td><td align="center"><div id="minuteSlider" class="slider"></div></td></tr>';
|
290
|
-
html += '</table>';
|
291
|
-
|
292
|
-
this.tpDiv.empty().append(html);
|
293
|
-
$('body').append(this.tpDiv);
|
294
|
-
|
295
|
-
var self = this;
|
296
|
-
|
297
|
-
$('#hourSlider').slider({
|
298
|
-
orientation: "vertical",
|
299
|
-
range: 'min',
|
300
|
-
min: 0,
|
301
|
-
max: 23,
|
302
|
-
step: 1,
|
303
|
-
slide: function(event, ui) {
|
304
|
-
self._writeTime('hour', ui.value);
|
305
|
-
},
|
306
|
-
stop: function(event, ui) {
|
307
|
-
$('#' + self._inputId).focus();
|
308
|
-
}
|
309
|
-
});
|
310
|
-
|
311
|
-
$('#minuteSlider').slider({
|
312
|
-
orientation: "vertical",
|
313
|
-
range: 'min',
|
314
|
-
min: 0,
|
315
|
-
max: 59,
|
316
|
-
step: 1,
|
317
|
-
slide: function(event, ui) {
|
318
|
-
self._writeTime('minute', ui.value);
|
319
|
-
},
|
320
|
-
stop: function(event, ui) {
|
321
|
-
$('#' + self._inputId).focus();
|
322
|
-
}
|
323
|
-
});
|
324
|
-
|
325
|
-
$('#hourSlider > a').css('padding', 0);
|
326
|
-
$('#minuteSlider > a').css('padding', 0);
|
327
|
-
},
|
328
|
-
|
329
|
-
_writeTime: function (type, value)
|
330
|
-
{
|
331
|
-
if (type == 'hour') {
|
332
|
-
if (!this._time24h) {
|
333
|
-
if (value < 12) {
|
334
|
-
$('#' + this._mainDivId + ' span.fragAmpm').text('am');
|
335
|
-
} else {
|
336
|
-
$('#' + this._mainDivId + ' span.fragAmpm').text('pm');
|
337
|
-
value -= 12;
|
338
|
-
}
|
339
|
-
|
340
|
-
if (value == 0) value = 12;
|
341
|
-
} else {
|
342
|
-
$('#' + this._mainDivId + ' span.fragAmpm').text('');
|
343
|
-
}
|
344
|
-
|
345
|
-
if (value < 10) value = '0' + value;
|
346
|
-
$('#' + this._mainDivId + ' span.fragHours').text(value);
|
347
|
-
}
|
348
|
-
|
349
|
-
if (type == 'minute') {
|
350
|
-
if (value < 10) value = '0' + value;
|
351
|
-
$('#' + this._mainDivId + ' span.fragMinutes').text(value);
|
352
|
-
}
|
353
|
-
},
|
354
|
-
|
355
|
-
_parseTime: function ()
|
356
|
-
{
|
357
|
-
var dt = $('#' + this._inputId).val();
|
358
|
-
|
359
|
-
this._colonPos = dt.search(':');
|
360
|
-
|
361
|
-
var m = 0, h = 0, a = '';
|
362
|
-
|
363
|
-
if (this._colonPos != -1) {
|
364
|
-
h = parseInt(dt.substr(this._colonPos - 2, 2), 10);
|
365
|
-
m = parseInt(dt.substr(this._colonPos + 1, 2), 10);
|
366
|
-
a = jQuery.trim(dt.substr(this._colonPos + 3, 3));
|
367
|
-
}
|
368
|
-
|
369
|
-
a = a.toLowerCase();
|
370
|
-
|
371
|
-
if (a != 'am' && a != 'pm') {
|
372
|
-
a = '';
|
373
|
-
}
|
374
|
-
|
375
|
-
if (h < 0) h = 0;
|
376
|
-
if (m < 0) m = 0;
|
377
|
-
|
378
|
-
if (h > 23) h = 23;
|
379
|
-
if (m > 59) m = 59;
|
380
|
-
|
381
|
-
if (a == 'pm' && h < 12) h += 12;
|
382
|
-
if (a == 'am' && h == 12) h = 0;
|
383
|
-
|
384
|
-
this._setTime('hour', h);
|
385
|
-
this._setTime('minute', m);
|
386
|
-
|
387
|
-
this._orgHour = h;
|
388
|
-
this._orgMinute = m;
|
389
|
-
},
|
390
|
-
|
391
|
-
_setTime: function (type, value)
|
392
|
-
{
|
393
|
-
if (isNaN(value)) value = 0;
|
394
|
-
if (value < 0) value = 0;
|
395
|
-
if (value > 23 && type == 'hour') value = 23;
|
396
|
-
if (value > 59 && type == 'minute') value = 59;
|
397
|
-
|
398
|
-
if (type == 'hour') {
|
399
|
-
$('#hourSlider').slider('value', value);
|
400
|
-
}
|
401
|
-
|
402
|
-
if (type == 'minute') {
|
403
|
-
$('#minuteSlider').slider('value', value);
|
404
|
-
}
|
405
|
-
|
406
|
-
this._writeTime(type, value);
|
407
|
-
}
|
408
|
-
};
|
409
|
-
|
410
|
-
$.timepicker = new Timepicker();
|
411
|
-
$('document').ready(function () {$.timepicker.init();});
|
412
|
-
|
413
|
-
})(jQuery);
|