atreides 2.0.3 → 2.0.4
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/LICENSE +1 -1
- data/app/assets/javascripts/atreides/admin_base.js.erb +11 -16
- data/app/assets/stylesheets/atreides/admin_base.css.erb +2 -3
- data/app/controllers/atreides/admin_controller.rb +14 -0
- data/app/models/atreides/{preferences.rb → preference.rb} +1 -1
- data/app/views/admin/atreides/common/_sidebar_publish.html.haml +16 -0
- data/app/views/admin/atreides/features/_form.html.haml +11 -18
- data/app/views/admin/atreides/pages/_form.html.haml +1 -4
- data/app/views/admin/atreides/posts/_form_sidebar.html.haml +1 -8
- data/app/views/admin/common/_list_table.html.haml +30 -0
- data/app/views/admin/common/_list_table_row.html.haml +11 -0
- data/app/views/admin/common/_pagination.html.haml +1 -0
- data/app/views/admin/common/_search_form.html.haml +4 -0
- data/lib/assets/flash/atreides/player.swf +0 -0
- data/lib/assets/flash/atreides/slideshowpro.swf +0 -0
- data/lib/assets/flash/atreides/swfupload.swf +0 -0
- data/lib/assets/images/atreides/share/aim_16.png +0 -0
- data/lib/assets/images/atreides/share/apple_16.png +0 -0
- data/lib/assets/images/atreides/share/bebo_16.png +0 -0
- data/lib/assets/images/atreides/share/blogger_16.png +0 -0
- data/lib/assets/images/atreides/share/brightkite_16.png +0 -0
- data/lib/assets/images/atreides/share/cargo_16.png +0 -0
- data/lib/assets/images/atreides/share/delicious_16.png +0 -0
- data/lib/assets/images/atreides/share/designfloat_16.png +0 -0
- data/lib/assets/images/atreides/share/designmoo_16.png +0 -0
- data/lib/assets/images/atreides/share/deviantart_16.png +0 -0
- data/lib/assets/images/atreides/share/digg_16.png +0 -0
- data/lib/assets/images/atreides/share/digg_alt_16.png +0 -0
- data/lib/assets/images/atreides/share/dopplr_16.png +0 -0
- data/lib/assets/images/atreides/share/dribbble_16.png +0 -0
- data/lib/assets/images/atreides/share/email_16.png +0 -0
- data/lib/assets/images/atreides/share/ember_16.png +0 -0
- data/lib/assets/images/atreides/share/evernote_16.png +0 -0
- data/lib/assets/images/atreides/share/facebook_16.png +0 -0
- data/lib/assets/images/atreides/share/flickr_16.png +0 -0
- data/lib/assets/images/atreides/share/friendfeed_16.png +0 -0
- data/lib/assets/images/atreides/share/gamespot_16.png +0 -0
- data/lib/assets/images/atreides/share/google_16.png +0 -0
- data/lib/assets/images/atreides/share/google_voice_16.png +0 -0
- data/lib/assets/images/atreides/share/google_wave_16.png +0 -0
- data/lib/assets/images/atreides/share/googletalk_16.png +0 -0
- data/lib/assets/images/atreides/share/gowalla_16.png +0 -0
- data/lib/assets/images/atreides/share/grooveshark_16.png +0 -0
- data/lib/assets/images/atreides/share/ilike_16.png +0 -0
- data/lib/assets/images/atreides/share/komodomedia_azure_16.png +0 -0
- data/lib/assets/images/atreides/share/komodomedia_wood_16.png +0 -0
- data/lib/assets/images/atreides/share/lastfm_16.png +0 -0
- data/lib/assets/images/atreides/share/license.txt +9 -0
- data/lib/assets/images/atreides/share/linkedin_16.png +0 -0
- data/lib/assets/images/atreides/share/mixx_16.png +0 -0
- data/lib/assets/images/atreides/share/mobileme_16.png +0 -0
- data/lib/assets/images/atreides/share/mynameise_16.png +0 -0
- data/lib/assets/images/atreides/share/myspace_16.png +0 -0
- data/lib/assets/images/atreides/share/netvibes_16.png +0 -0
- data/lib/assets/images/atreides/share/newsvine_16.png +0 -0
- data/lib/assets/images/atreides/share/openid_16.png +0 -0
- data/lib/assets/images/atreides/share/orkut_16.png +0 -0
- data/lib/assets/images/atreides/share/pandora_16.png +0 -0
- data/lib/assets/images/atreides/share/paypal_16.png +0 -0
- data/lib/assets/images/atreides/share/picasa_16.png +0 -0
- data/lib/assets/images/atreides/share/plurk_16.png +0 -0
- data/lib/assets/images/atreides/share/posterous_16.png +0 -0
- data/lib/assets/images/atreides/share/qik_16.png +0 -0
- data/lib/assets/images/atreides/share/readernaut_16.png +0 -0
- data/lib/assets/images/atreides/share/reddit_16.png +0 -0
- data/lib/assets/images/atreides/share/roboto_16.png +0 -0
- data/lib/assets/images/atreides/share/rss_16.png +0 -0
- data/lib/assets/images/atreides/share/sharethis_16.png +0 -0
- data/lib/assets/images/atreides/share/skype_16.png +0 -0
- data/lib/assets/images/atreides/share/stumbleupon_16.png +0 -0
- data/lib/assets/images/atreides/share/technorati_16.png +0 -0
- data/lib/assets/images/atreides/share/tumblr_16.png +0 -0
- data/lib/assets/images/atreides/share/twitter_16.png +0 -0
- data/lib/assets/images/atreides/share/viddler_16.png +0 -0
- data/lib/assets/images/atreides/share/vimeo_16.png +0 -0
- data/lib/assets/images/atreides/share/virb_16.png +0 -0
- data/lib/assets/images/atreides/share/windows_16.png +0 -0
- data/lib/assets/images/atreides/share/wordpress_16.png +0 -0
- data/lib/assets/images/atreides/share/xing_16.png +0 -0
- data/lib/assets/images/atreides/share/yahoo_16.png +0 -0
- data/lib/assets/images/atreides/share/yahoobuzz_16.png +0 -0
- data/lib/assets/images/atreides/share/yelp_16.png +0 -0
- data/lib/assets/images/atreides/share/youtube_16.png +0 -0
- data/lib/assets/javascripts/atreides/facebox.js +309 -0
- data/lib/assets/javascripts/atreides/fileuploader.js +1250 -0
- data/lib/assets/javascripts/atreides/galleria.js +2 -0
- data/lib/assets/javascripts/atreides/galleria/src/galleria.js +3816 -0
- data/lib/assets/javascripts/atreides/galleria/src/plugins/galleria.flickr.js +221 -0
- data/lib/assets/javascripts/atreides/galleria/src/plugins/galleria.history.js +602 -0
- data/lib/assets/javascripts/atreides/galleria/src/themes/classic/classic-loader.gif +0 -0
- data/lib/assets/javascripts/atreides/galleria/src/themes/classic/classic-map.png +0 -0
- data/lib/assets/javascripts/atreides/galleria/src/themes/classic/galleria.classic.css +202 -0
- data/lib/assets/javascripts/atreides/galleria/src/themes/classic/galleria.classic.js +92 -0
- data/lib/assets/javascripts/atreides/galleria/src/themes/fullscreen/b.png +0 -0
- data/lib/assets/javascripts/atreides/galleria/src/themes/fullscreen/down.gif +0 -0
- data/lib/assets/javascripts/atreides/galleria/src/themes/fullscreen/fix.gif +0 -0
- data/lib/assets/javascripts/atreides/galleria/src/themes/fullscreen/fullscreen-demo.html +34 -0
- data/lib/assets/javascripts/atreides/galleria/src/themes/fullscreen/galleria.fullscreen.css +46 -0
- data/lib/assets/javascripts/atreides/galleria/src/themes/fullscreen/galleria.fullscreen.js +193 -0
- data/lib/assets/javascripts/atreides/galleria/src/themes/fullscreen/i.png +0 -0
- data/lib/assets/javascripts/atreides/galleria/src/themes/fullscreen/l.gif +0 -0
- data/lib/assets/javascripts/atreides/galleria/src/themes/fullscreen/l2.png +0 -0
- data/lib/assets/javascripts/atreides/galleria/src/themes/fullscreen/loader.gif +0 -0
- data/lib/assets/javascripts/atreides/galleria/src/themes/fullscreen/n.gif +0 -0
- data/lib/assets/javascripts/atreides/galleria/src/themes/fullscreen/p.gif +0 -0
- data/lib/assets/javascripts/atreides/galleria/src/themes/fullscreen/r.gif +0 -0
- data/lib/assets/javascripts/atreides/galleria/src/themes/fullscreen/r2.png +0 -0
- data/lib/assets/javascripts/atreides/galleria/src/themes/fullscreen/up.gif +0 -0
- data/lib/assets/javascripts/atreides/jquery.autogrow.js +132 -0
- data/lib/assets/javascripts/atreides/jquery.cookie.js +96 -0
- data/lib/assets/javascripts/atreides/jquery.countdown.js +759 -0
- data/lib/assets/javascripts/atreides/jquery.cycle.js +918 -0
- data/lib/assets/javascripts/atreides/jquery.easing.1.3.js +205 -0
- data/lib/assets/javascripts/atreides/jquery.flash.js +288 -0
- data/lib/assets/javascripts/atreides/jquery.iphone-checkboxes.js +214 -0
- data/lib/assets/javascripts/atreides/jquery.jBreadCrumb.1.1.js +240 -0
- data/lib/assets/javascripts/atreides/jquery.multipleselectbox-min.js +15 -0
- data/lib/assets/javascripts/atreides/jquery.multipleselectbox.js +446 -0
- data/lib/assets/javascripts/atreides/jquery.swfupload.js +64 -0
- data/lib/assets/javascripts/atreides/jquery.tipsy.js +104 -0
- data/lib/assets/javascripts/atreides/jquery.uniform.js +461 -0
- data/lib/assets/javascripts/atreides/jtags.js +125 -0
- data/lib/assets/javascripts/atreides/raphael-min.js +7 -0
- data/lib/assets/javascripts/atreides/raphael.analytics.js +205 -0
- data/lib/assets/javascripts/atreides/raphael.path.methods.js +53 -0
- data/lib/assets/javascripts/atreides/raphael.pie.js +44 -0
- data/lib/assets/javascripts/atreides/sifr.js +18 -0
- data/lib/assets/javascripts/atreides/swfobject.js +4 -0
- data/lib/assets/javascripts/atreides/swfupload/handlers.js +290 -0
- data/lib/assets/javascripts/atreides/swfupload/swfupload.cookies.js +53 -0
- data/lib/assets/javascripts/atreides/swfupload/swfupload.js +980 -0
- data/lib/assets/javascripts/atreides/swfupload/swfupload.queue.js +98 -0
- data/lib/assets/javascripts/atreides/swfupload/swfupload.speed.js +342 -0
- data/lib/assets/javascripts/atreides/swfupload/swfupload.swfobject.js +111 -0
- data/lib/assets/javascripts/atreides/underscore-1.1.6.js +807 -0
- data/lib/assets/stylesheets/atreides/admin_grid.css +258 -0
- data/lib/assets/stylesheets/atreides/facebox.css +80 -0
- data/lib/assets/stylesheets/atreides/formtastic.css +144 -0
- data/lib/assets/stylesheets/atreides/galleria.css +24 -0
- data/lib/assets/stylesheets/atreides/ie.css +35 -0
- data/lib/assets/stylesheets/atreides/images/bg_fallback.png +0 -0
- data/lib/assets/stylesheets/atreides/images/icon_sprite.png +0 -0
- data/lib/assets/stylesheets/atreides/images/progress_bar.gif +0 -0
- data/lib/assets/stylesheets/atreides/images/slider_handles.png +0 -0
- data/lib/assets/stylesheets/atreides/images/ui-icons_222222_256x240.png +0 -0
- data/lib/assets/stylesheets/atreides/images/ui-icons_454545_256x240.png +0 -0
- data/lib/assets/stylesheets/atreides/jquery-ui.css +738 -0
- data/lib/assets/stylesheets/atreides/multipleselectbox.css +33 -0
- data/lib/assets/stylesheets/atreides/print.css +29 -0
- data/lib/assets/stylesheets/atreides/public_grid.css +258 -0
- data/lib/assets/stylesheets/atreides/tipsy.css +7 -0
- data/lib/assets/stylesheets/atreides/uniform.default.css +476 -0
- data/lib/atreides.rb +4 -0
- data/lib/atreides/schema.rb +53 -0
- data/lib/atreides/time_zone.rb +6 -0
- data/lib/atreides/version.rb +1 -1
- data/lib/generators/templates/create_pages.rb +1 -2
- data/lib/generators/templates/create_posts.rb +1 -2
- metadata +155 -13
- data/app/views/admin/common/_list_table.html.erb +0 -37
- data/app/views/admin/common/_list_table_row.html.erb +0 -18
- data/app/views/admin/common/_pagination.html.erb +0 -1
- data/app/views/admin/common/_search_form.html.erb +0 -6
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
// iPhone-style Checkboxes jQuery plugin
|
|
3
|
+
// Copyright Thomas Reynolds, licensed GPL & MIT
|
|
4
|
+
*/
|
|
5
|
+
;(function($, iphoneStyle) {
|
|
6
|
+
|
|
7
|
+
// Constructor
|
|
8
|
+
$[iphoneStyle] = function(elem, options) {
|
|
9
|
+
this.$elem = $(elem);
|
|
10
|
+
|
|
11
|
+
// Import options into instance variables
|
|
12
|
+
var obj = this;
|
|
13
|
+
$.each(options, function(key, value) {
|
|
14
|
+
obj[key] = value;
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
// Initialize the control
|
|
18
|
+
this.wrapCheckboxWithDivs();
|
|
19
|
+
this.attachEvents();
|
|
20
|
+
this.disableTextSelection();
|
|
21
|
+
|
|
22
|
+
if (this.resizeHandle) { this.optionallyResize('handle'); }
|
|
23
|
+
if (this.resizeContainer) { this.optionallyResize('container'); }
|
|
24
|
+
|
|
25
|
+
this.initialPosition();
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
$.extend($[iphoneStyle].prototype, {
|
|
29
|
+
// Wrap the existing input[type=checkbox] with divs for styling and grab DOM references to the created nodes
|
|
30
|
+
wrapCheckboxWithDivs: function() {
|
|
31
|
+
this.$elem.wrap('<div class="' + this.containerClass + '" />');
|
|
32
|
+
this.container = this.$elem.parent();
|
|
33
|
+
|
|
34
|
+
this.offLabel = $('<label class="'+ this.labelOffClass +'">' +
|
|
35
|
+
'<span>'+ this.uncheckedLabel +'</span>' +
|
|
36
|
+
'</label>').appendTo(this.container);
|
|
37
|
+
this.offSpan = this.offLabel.children('span');
|
|
38
|
+
|
|
39
|
+
this.onLabel = $('<label class="'+ this.labelOnClass +'">' +
|
|
40
|
+
'<span>'+ this.checkedLabel +'</span>' +
|
|
41
|
+
'</label>').appendTo(this.container);
|
|
42
|
+
this.onSpan = this.onLabel.children('span');
|
|
43
|
+
|
|
44
|
+
this.handle = $('<div class="' + this.handleClass + '">' +
|
|
45
|
+
'<div class="' + this.handleRightClass + '">' +
|
|
46
|
+
'<div class="' + this.handleCenterClass + '" />' +
|
|
47
|
+
'</div>' +
|
|
48
|
+
'</div>').appendTo(this.container);
|
|
49
|
+
},
|
|
50
|
+
|
|
51
|
+
// Disable IE text selection, other browsers are handled in CSS
|
|
52
|
+
disableTextSelection: function() {
|
|
53
|
+
if (!$.browser.msie) { return; }
|
|
54
|
+
|
|
55
|
+
// Elements containing text should be unselectable
|
|
56
|
+
$.each([this.handle, this.offLabel, this.onLabel, this.container], function(el) {
|
|
57
|
+
$(el).attr("unselectable", "on");
|
|
58
|
+
});
|
|
59
|
+
},
|
|
60
|
+
|
|
61
|
+
// Automatically resize the handle or container
|
|
62
|
+
optionallyResize: function(mode) {
|
|
63
|
+
var onLabelWidth = this.onLabel.width(),
|
|
64
|
+
offLabelWidth = this.offLabel.width(),
|
|
65
|
+
newWidth = (onLabelWidth < offLabelWidth) ? onLabelWidth : offLabelWidth;
|
|
66
|
+
|
|
67
|
+
if (mode == 'container') { newWidth += this.handle.width() + 15; }
|
|
68
|
+
this[mode].css({ width: newWidth });
|
|
69
|
+
},
|
|
70
|
+
|
|
71
|
+
attachEvents: function() {
|
|
72
|
+
var obj = this;
|
|
73
|
+
|
|
74
|
+
// A mousedown anywhere in the control will start tracking for dragging
|
|
75
|
+
this.container
|
|
76
|
+
.bind('mousedown touchstart', function(event) {
|
|
77
|
+
event.preventDefault();
|
|
78
|
+
|
|
79
|
+
if (obj.$elem.is(':disabled')) { return; }
|
|
80
|
+
|
|
81
|
+
var x = event.pageX || event.originalEvent.changedTouches[0].pageX;
|
|
82
|
+
$[iphoneStyle].currentlyClicking = obj.handle;
|
|
83
|
+
$[iphoneStyle].dragStartPosition = x - (parseInt(obj.handle.css('left'), 10) || 0);
|
|
84
|
+
})
|
|
85
|
+
|
|
86
|
+
// Utilize event bubbling to handle drag on any element beneath the container
|
|
87
|
+
.bind('iPhoneDrag', function(event, x) {
|
|
88
|
+
event.preventDefault();
|
|
89
|
+
|
|
90
|
+
if (obj.$elem.is(':disabled')) { return; }
|
|
91
|
+
|
|
92
|
+
var p = (x - $[iphoneStyle].dragStartPosition) / obj.rightSide;
|
|
93
|
+
if (p < 0) { p = 0; }
|
|
94
|
+
if (p > 1) { p = 1; }
|
|
95
|
+
|
|
96
|
+
obj.handle.css({ left: p * obj.rightSide });
|
|
97
|
+
obj.onLabel.css({ width: p * obj.rightSide + 4 });
|
|
98
|
+
obj.offSpan.css({ marginRight: -p * obj.rightSide });
|
|
99
|
+
obj.onSpan.css({ marginLeft: -(1 - p) * obj.rightSide });
|
|
100
|
+
})
|
|
101
|
+
|
|
102
|
+
// Utilize event bubbling to handle drag end on any element beneath the container
|
|
103
|
+
.bind('iPhoneDragEnd', function(event, x) {
|
|
104
|
+
if (obj.$elem.is(':disabled')) { return; }
|
|
105
|
+
|
|
106
|
+
if ($[iphoneStyle].dragging) {
|
|
107
|
+
var p = (x - $[iphoneStyle].dragStartPosition) / obj.rightSide;
|
|
108
|
+
obj.$elem.attr('checked', (p >= 0.5));
|
|
109
|
+
} else {
|
|
110
|
+
obj.$elem.attr('checked', !obj.$elem.attr('checked'));
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
$[iphoneStyle].currentlyClicking = null;
|
|
114
|
+
$[iphoneStyle].dragging = null;
|
|
115
|
+
obj.$elem.change();
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
// Animate when we get a change event
|
|
119
|
+
this.$elem.change(function() {
|
|
120
|
+
if (obj.$elem.is(':disabled')) {
|
|
121
|
+
obj.container.addClass(obj.disabledClass);
|
|
122
|
+
return false;
|
|
123
|
+
} else {
|
|
124
|
+
obj.container.removeClass(obj.disabledClass);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
var new_left = obj.$elem.attr('checked') ? obj.rightSide : 0;
|
|
128
|
+
|
|
129
|
+
obj.handle.animate({ left: new_left }, obj.duration);
|
|
130
|
+
obj.onLabel.animate({ width: new_left + 4 }, obj.duration);
|
|
131
|
+
obj.offSpan.animate({ marginRight: -new_left }, obj.duration);
|
|
132
|
+
obj.onSpan.animate({ marginLeft: new_left - obj.rightSide }, obj.duration);
|
|
133
|
+
});
|
|
134
|
+
},
|
|
135
|
+
|
|
136
|
+
// Setup the control's inital position
|
|
137
|
+
initialPosition: function() {
|
|
138
|
+
this.offLabel.css({ width: this.container.width() - 5 });
|
|
139
|
+
|
|
140
|
+
var offset = ($.browser.msie && $.browser.version < 7) ? 3 : 6;
|
|
141
|
+
this.rightSide = this.container.width() - this.handle.width() - offset;
|
|
142
|
+
|
|
143
|
+
if (this.$elem.is(':checked')) {
|
|
144
|
+
this.handle.css({ left: this.rightSide });
|
|
145
|
+
this.onLabel.css({ width: this.rightSide + 4 });
|
|
146
|
+
this.offSpan.css({ marginRight: -this.rightSide });
|
|
147
|
+
} else {
|
|
148
|
+
this.onLabel.css({ width: 0 });
|
|
149
|
+
this.onSpan.css({ marginLeft: -this.rightSide });
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
if (this.$elem.is(':disabled')) {
|
|
153
|
+
this.container.addClass(this.disabledClass);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
// jQuery-specific code
|
|
159
|
+
$.fn[iphoneStyle] = function(options) {
|
|
160
|
+
var checkboxes = this.filter(':checkbox');
|
|
161
|
+
|
|
162
|
+
// Fail early if we don't have any checkboxes passed in
|
|
163
|
+
if (!checkboxes.length) { return this; }
|
|
164
|
+
|
|
165
|
+
// Merge options passed in with global defaults
|
|
166
|
+
var opt = $.extend({}, $[iphoneStyle].defaults, options);
|
|
167
|
+
|
|
168
|
+
checkboxes.each(function() {
|
|
169
|
+
$(this).data(iphoneStyle, new $[iphoneStyle](this, opt));
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
if (!$[iphoneStyle].initComplete) {
|
|
173
|
+
// As the mouse moves on the page, animate if we are in a drag state
|
|
174
|
+
$(document)
|
|
175
|
+
.bind('mousemove touchmove', function(event) {
|
|
176
|
+
if (!$[iphoneStyle].currentlyClicking) { return; }
|
|
177
|
+
if (event.pageX != $[iphoneStyle].dragStartPosition) { $[iphoneStyle].dragging = true; }
|
|
178
|
+
event.preventDefault();
|
|
179
|
+
|
|
180
|
+
var x = event.pageX || event.originalEvent.changedTouches[0].pageX;
|
|
181
|
+
$(event.target).trigger('iPhoneDrag', [x]);
|
|
182
|
+
})
|
|
183
|
+
|
|
184
|
+
// When the mouse comes up, leave drag state
|
|
185
|
+
.bind('mouseup touchend', function(event) {
|
|
186
|
+
if (!$[iphoneStyle].currentlyClicking) { return; }
|
|
187
|
+
event.preventDefault();
|
|
188
|
+
|
|
189
|
+
var x = event.pageX || event.originalEvent.changedTouches[0].pageX;
|
|
190
|
+
$($[iphoneStyle].currentlyClicking).trigger('iPhoneDragEnd', [x]);
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
$[iphoneStyle].initComplete = true;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
return this;
|
|
197
|
+
}; // End of $.fn[iphoneStyle]
|
|
198
|
+
|
|
199
|
+
$[iphoneStyle].defaults = {
|
|
200
|
+
duration: 200, // Time spent during slide animation
|
|
201
|
+
checkedLabel: 'ON', // Text content of "on" state
|
|
202
|
+
uncheckedLabel: 'OFF', // Text content of "off" state
|
|
203
|
+
resizeHandle: true, // Automatically resize the handle to cover either label
|
|
204
|
+
resizeContainer: true, // Automatically resize the widget to contain the labels
|
|
205
|
+
disabledClass: 'iPhoneCheckDisabled',
|
|
206
|
+
containerClass: 'iPhoneCheckContainer',
|
|
207
|
+
labelOnClass: 'iPhoneCheckLabelOn',
|
|
208
|
+
labelOffClass: 'iPhoneCheckLabelOff',
|
|
209
|
+
handleClass: 'iPhoneCheckHandle',
|
|
210
|
+
handleCenterClass: 'iPhoneCheckHandleCenter',
|
|
211
|
+
handleRightClass: 'iPhoneCheckHandleRight'
|
|
212
|
+
};
|
|
213
|
+
|
|
214
|
+
})(jQuery, 'iphoneStyle');
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author Jason Roy for CompareNetworks Inc.
|
|
3
|
+
* Thanks to mikejbond for suggested udaptes
|
|
4
|
+
*
|
|
5
|
+
* Version 1.1
|
|
6
|
+
* Copyright (c) 2009 CompareNetworks Inc.
|
|
7
|
+
*
|
|
8
|
+
* Licensed under the MIT license:
|
|
9
|
+
* http://www.opensource.org/licenses/mit-license.php
|
|
10
|
+
*
|
|
11
|
+
*/
|
|
12
|
+
(function($)
|
|
13
|
+
{
|
|
14
|
+
|
|
15
|
+
// Private variables
|
|
16
|
+
|
|
17
|
+
var _options = {};
|
|
18
|
+
var _container = {};
|
|
19
|
+
var _breadCrumbElements = {};
|
|
20
|
+
var _autoIntervalArray = [];
|
|
21
|
+
var _easingEquation;
|
|
22
|
+
|
|
23
|
+
// Public functions
|
|
24
|
+
|
|
25
|
+
jQuery.fn.jBreadCrumb = function(options)
|
|
26
|
+
{
|
|
27
|
+
_options = $.extend({}, $.fn.jBreadCrumb.defaults, options);
|
|
28
|
+
|
|
29
|
+
return this.each(function()
|
|
30
|
+
{
|
|
31
|
+
_container = $(this);
|
|
32
|
+
setupBreadCrumb();
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
// Private functions
|
|
38
|
+
|
|
39
|
+
function setupBreadCrumb()
|
|
40
|
+
{
|
|
41
|
+
//Check if easing plugin exists. If it doesn't, use "swing"
|
|
42
|
+
if(typeof(jQuery.easing) == 'object')
|
|
43
|
+
{
|
|
44
|
+
_easingEquation = 'easeOutQuad'
|
|
45
|
+
}
|
|
46
|
+
else
|
|
47
|
+
{
|
|
48
|
+
_easingEquation = 'swing'
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
//The reference object containing all of the breadcrumb elements
|
|
52
|
+
_breadCrumbElements = jQuery(_container).find('li');
|
|
53
|
+
|
|
54
|
+
//Keep it from overflowing in ie6 & 7
|
|
55
|
+
jQuery(_container).find('ul').wrap('<div style="overflow:hidden; position:relative; width: ' + jQuery(_container).css("width") + ';"><div>');
|
|
56
|
+
//Set an arbitrary width width to avoid float drop on the animation
|
|
57
|
+
jQuery(_container).find('ul').width(5000);
|
|
58
|
+
|
|
59
|
+
//If the breadcrumb contains nothing, don't do anything
|
|
60
|
+
if (_breadCrumbElements.length > 0)
|
|
61
|
+
{
|
|
62
|
+
jQuery(_breadCrumbElements[_breadCrumbElements.length - 1]).addClass('last');
|
|
63
|
+
jQuery(_breadCrumbElements[0]).addClass('first');
|
|
64
|
+
|
|
65
|
+
//If the breadcrumb object length is long enough, compress.
|
|
66
|
+
|
|
67
|
+
if (_breadCrumbElements.length > _options.minimumCompressionElements)
|
|
68
|
+
{
|
|
69
|
+
compressBreadCrumb();
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
function compressBreadCrumb()
|
|
75
|
+
{
|
|
76
|
+
|
|
77
|
+
// Factor to determine if we should compress the element at all
|
|
78
|
+
var finalElement = jQuery(_breadCrumbElements[_breadCrumbElements.length - 1]);
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
// If the final element is really long, compress more elements
|
|
82
|
+
if (jQuery(finalElement).width() > _options.maxFinalElementLength)
|
|
83
|
+
{
|
|
84
|
+
if (_options.beginingElementsToLeaveOpen > 0)
|
|
85
|
+
{
|
|
86
|
+
_options.beginingElementsToLeaveOpen--;
|
|
87
|
+
|
|
88
|
+
}
|
|
89
|
+
if (_options.endElementsToLeaveOpen > 0)
|
|
90
|
+
{
|
|
91
|
+
_options.endElementsToLeaveOpen--;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// If the final element is within the short and long range, compress to the default end elements and 1 less beginning elements
|
|
95
|
+
if (jQuery(finalElement).width() < _options.maxFinalElementLength && jQuery(finalElement).width() > _options.minFinalElementLength)
|
|
96
|
+
{
|
|
97
|
+
if (_options.beginingElementsToLeaveOpen > 0)
|
|
98
|
+
{
|
|
99
|
+
_options.beginingElementsToLeaveOpen--;
|
|
100
|
+
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
var itemsToRemove = _breadCrumbElements.length - 1 - _options.endElementsToLeaveOpen;
|
|
105
|
+
|
|
106
|
+
// We compress only elements determined by the formula setting below
|
|
107
|
+
|
|
108
|
+
//TODO : Make this smarter, it's only checking the final elements length. It could also check the amount of elements.
|
|
109
|
+
jQuery(_breadCrumbElements[_breadCrumbElements.length - 1]).css(
|
|
110
|
+
{
|
|
111
|
+
background: 'none'
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
$(_breadCrumbElements).each(function(i, listElement)
|
|
115
|
+
{
|
|
116
|
+
if (i > _options.beginingElementsToLeaveOpen && i < itemsToRemove)
|
|
117
|
+
{
|
|
118
|
+
|
|
119
|
+
jQuery(listElement).find('a').wrap('<span></span>').width(jQuery(listElement).find('a').width() + 10);
|
|
120
|
+
|
|
121
|
+
// Add the overlay png.
|
|
122
|
+
jQuery(listElement).append(jQuery('<div class="' + _options.overlayClass + '"></div>').css(
|
|
123
|
+
{
|
|
124
|
+
display: 'block'
|
|
125
|
+
})).css(
|
|
126
|
+
{
|
|
127
|
+
background: 'none'
|
|
128
|
+
});
|
|
129
|
+
if (isIE6OrLess())
|
|
130
|
+
{
|
|
131
|
+
fixPNG(jQuery(listElement).find('.' + _options.overlayClass).css(
|
|
132
|
+
{
|
|
133
|
+
width: '20px',
|
|
134
|
+
right: "-1px"
|
|
135
|
+
}));
|
|
136
|
+
}
|
|
137
|
+
var options =
|
|
138
|
+
{
|
|
139
|
+
id: i,
|
|
140
|
+
width: jQuery(listElement).width(),
|
|
141
|
+
listElement: jQuery(listElement).find('span'),
|
|
142
|
+
isAnimating: false,
|
|
143
|
+
element: jQuery(listElement).find('span')
|
|
144
|
+
|
|
145
|
+
};
|
|
146
|
+
jQuery(listElement).bind('mouseover', options, expandBreadCrumb).bind('mouseout', options, shrinkBreadCrumb);
|
|
147
|
+
jQuery(listElement).find('a').unbind('mouseover', expandBreadCrumb).unbind('mouseout', shrinkBreadCrumb);
|
|
148
|
+
listElement.autoInterval = setInterval(function()
|
|
149
|
+
{
|
|
150
|
+
clearInterval(listElement.autoInterval);
|
|
151
|
+
jQuery(listElement).find('span').animate(
|
|
152
|
+
{
|
|
153
|
+
width: _options.previewWidth
|
|
154
|
+
}, _options.timeInitialCollapse, _options.easing);
|
|
155
|
+
}, (150 * (i - 2)));
|
|
156
|
+
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
};
|
|
161
|
+
|
|
162
|
+
function expandBreadCrumb(e)
|
|
163
|
+
{
|
|
164
|
+
var elementID = e.data.id;
|
|
165
|
+
var originalWidth = e.data.width;
|
|
166
|
+
jQuery(e.data.element).stop();
|
|
167
|
+
jQuery(e.data.element).animate(
|
|
168
|
+
{
|
|
169
|
+
width: originalWidth
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
duration: _options.timeExpansionAnimation,
|
|
173
|
+
easing: _options.easing,
|
|
174
|
+
queue: false
|
|
175
|
+
});
|
|
176
|
+
return false;
|
|
177
|
+
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
function shrinkBreadCrumb(e)
|
|
181
|
+
{
|
|
182
|
+
var elementID = e.data.id;
|
|
183
|
+
jQuery(e.data.element).stop();
|
|
184
|
+
jQuery(e.data.element).animate(
|
|
185
|
+
{
|
|
186
|
+
width: _options.previewWidth
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
duration: _options.timeCompressionAnimation,
|
|
190
|
+
easing: _options.easing,
|
|
191
|
+
queue: false
|
|
192
|
+
});
|
|
193
|
+
return false;
|
|
194
|
+
};
|
|
195
|
+
|
|
196
|
+
function isIE6OrLess()
|
|
197
|
+
{
|
|
198
|
+
var isIE6 = $.browser.msie && /MSIE\s(5\.5|6\.)/.test(navigator.userAgent);
|
|
199
|
+
return isIE6;
|
|
200
|
+
};
|
|
201
|
+
// Fix The Overlay for IE6
|
|
202
|
+
function fixPNG(element)
|
|
203
|
+
{
|
|
204
|
+
var image;
|
|
205
|
+
if (jQuery(element).is('img'))
|
|
206
|
+
{
|
|
207
|
+
image = jQuery(element).attr('src');
|
|
208
|
+
}
|
|
209
|
+
else
|
|
210
|
+
{
|
|
211
|
+
image = $(element).css('backgroundImage');
|
|
212
|
+
image.match(/^url\(["']?(.*\.png)["']?\)$/i);
|
|
213
|
+
image = RegExp.$1;
|
|
214
|
+
;
|
|
215
|
+
}
|
|
216
|
+
$(element).css(
|
|
217
|
+
{
|
|
218
|
+
'backgroundImage': 'none',
|
|
219
|
+
'filter': "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=scale, src='" + image + "')"
|
|
220
|
+
});
|
|
221
|
+
};
|
|
222
|
+
|
|
223
|
+
// Public global variables
|
|
224
|
+
|
|
225
|
+
jQuery.fn.jBreadCrumb.defaults =
|
|
226
|
+
{
|
|
227
|
+
maxFinalElementLength: 400,
|
|
228
|
+
minFinalElementLength: 200,
|
|
229
|
+
minimumCompressionElements: 4,
|
|
230
|
+
endElementsToLeaveOpen: 1,
|
|
231
|
+
beginingElementsToLeaveOpen: 1,
|
|
232
|
+
timeExpansionAnimation: 800,
|
|
233
|
+
timeCompressionAnimation: 500,
|
|
234
|
+
timeInitialCollapse: 600,
|
|
235
|
+
easing: _easingEquation,
|
|
236
|
+
overlayClass: 'chevronOverlay',
|
|
237
|
+
previewWidth: 5
|
|
238
|
+
};
|
|
239
|
+
|
|
240
|
+
})(jQuery);
|