atreides 2.0.3 → 2.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (163) hide show
  1. data/LICENSE +1 -1
  2. data/app/assets/javascripts/atreides/admin_base.js.erb +11 -16
  3. data/app/assets/stylesheets/atreides/admin_base.css.erb +2 -3
  4. data/app/controllers/atreides/admin_controller.rb +14 -0
  5. data/app/models/atreides/{preferences.rb → preference.rb} +1 -1
  6. data/app/views/admin/atreides/common/_sidebar_publish.html.haml +16 -0
  7. data/app/views/admin/atreides/features/_form.html.haml +11 -18
  8. data/app/views/admin/atreides/pages/_form.html.haml +1 -4
  9. data/app/views/admin/atreides/posts/_form_sidebar.html.haml +1 -8
  10. data/app/views/admin/common/_list_table.html.haml +30 -0
  11. data/app/views/admin/common/_list_table_row.html.haml +11 -0
  12. data/app/views/admin/common/_pagination.html.haml +1 -0
  13. data/app/views/admin/common/_search_form.html.haml +4 -0
  14. data/lib/assets/flash/atreides/player.swf +0 -0
  15. data/lib/assets/flash/atreides/slideshowpro.swf +0 -0
  16. data/lib/assets/flash/atreides/swfupload.swf +0 -0
  17. data/lib/assets/images/atreides/share/aim_16.png +0 -0
  18. data/lib/assets/images/atreides/share/apple_16.png +0 -0
  19. data/lib/assets/images/atreides/share/bebo_16.png +0 -0
  20. data/lib/assets/images/atreides/share/blogger_16.png +0 -0
  21. data/lib/assets/images/atreides/share/brightkite_16.png +0 -0
  22. data/lib/assets/images/atreides/share/cargo_16.png +0 -0
  23. data/lib/assets/images/atreides/share/delicious_16.png +0 -0
  24. data/lib/assets/images/atreides/share/designfloat_16.png +0 -0
  25. data/lib/assets/images/atreides/share/designmoo_16.png +0 -0
  26. data/lib/assets/images/atreides/share/deviantart_16.png +0 -0
  27. data/lib/assets/images/atreides/share/digg_16.png +0 -0
  28. data/lib/assets/images/atreides/share/digg_alt_16.png +0 -0
  29. data/lib/assets/images/atreides/share/dopplr_16.png +0 -0
  30. data/lib/assets/images/atreides/share/dribbble_16.png +0 -0
  31. data/lib/assets/images/atreides/share/email_16.png +0 -0
  32. data/lib/assets/images/atreides/share/ember_16.png +0 -0
  33. data/lib/assets/images/atreides/share/evernote_16.png +0 -0
  34. data/lib/assets/images/atreides/share/facebook_16.png +0 -0
  35. data/lib/assets/images/atreides/share/flickr_16.png +0 -0
  36. data/lib/assets/images/atreides/share/friendfeed_16.png +0 -0
  37. data/lib/assets/images/atreides/share/gamespot_16.png +0 -0
  38. data/lib/assets/images/atreides/share/google_16.png +0 -0
  39. data/lib/assets/images/atreides/share/google_voice_16.png +0 -0
  40. data/lib/assets/images/atreides/share/google_wave_16.png +0 -0
  41. data/lib/assets/images/atreides/share/googletalk_16.png +0 -0
  42. data/lib/assets/images/atreides/share/gowalla_16.png +0 -0
  43. data/lib/assets/images/atreides/share/grooveshark_16.png +0 -0
  44. data/lib/assets/images/atreides/share/ilike_16.png +0 -0
  45. data/lib/assets/images/atreides/share/komodomedia_azure_16.png +0 -0
  46. data/lib/assets/images/atreides/share/komodomedia_wood_16.png +0 -0
  47. data/lib/assets/images/atreides/share/lastfm_16.png +0 -0
  48. data/lib/assets/images/atreides/share/license.txt +9 -0
  49. data/lib/assets/images/atreides/share/linkedin_16.png +0 -0
  50. data/lib/assets/images/atreides/share/mixx_16.png +0 -0
  51. data/lib/assets/images/atreides/share/mobileme_16.png +0 -0
  52. data/lib/assets/images/atreides/share/mynameise_16.png +0 -0
  53. data/lib/assets/images/atreides/share/myspace_16.png +0 -0
  54. data/lib/assets/images/atreides/share/netvibes_16.png +0 -0
  55. data/lib/assets/images/atreides/share/newsvine_16.png +0 -0
  56. data/lib/assets/images/atreides/share/openid_16.png +0 -0
  57. data/lib/assets/images/atreides/share/orkut_16.png +0 -0
  58. data/lib/assets/images/atreides/share/pandora_16.png +0 -0
  59. data/lib/assets/images/atreides/share/paypal_16.png +0 -0
  60. data/lib/assets/images/atreides/share/picasa_16.png +0 -0
  61. data/lib/assets/images/atreides/share/plurk_16.png +0 -0
  62. data/lib/assets/images/atreides/share/posterous_16.png +0 -0
  63. data/lib/assets/images/atreides/share/qik_16.png +0 -0
  64. data/lib/assets/images/atreides/share/readernaut_16.png +0 -0
  65. data/lib/assets/images/atreides/share/reddit_16.png +0 -0
  66. data/lib/assets/images/atreides/share/roboto_16.png +0 -0
  67. data/lib/assets/images/atreides/share/rss_16.png +0 -0
  68. data/lib/assets/images/atreides/share/sharethis_16.png +0 -0
  69. data/lib/assets/images/atreides/share/skype_16.png +0 -0
  70. data/lib/assets/images/atreides/share/stumbleupon_16.png +0 -0
  71. data/lib/assets/images/atreides/share/technorati_16.png +0 -0
  72. data/lib/assets/images/atreides/share/tumblr_16.png +0 -0
  73. data/lib/assets/images/atreides/share/twitter_16.png +0 -0
  74. data/lib/assets/images/atreides/share/viddler_16.png +0 -0
  75. data/lib/assets/images/atreides/share/vimeo_16.png +0 -0
  76. data/lib/assets/images/atreides/share/virb_16.png +0 -0
  77. data/lib/assets/images/atreides/share/windows_16.png +0 -0
  78. data/lib/assets/images/atreides/share/wordpress_16.png +0 -0
  79. data/lib/assets/images/atreides/share/xing_16.png +0 -0
  80. data/lib/assets/images/atreides/share/yahoo_16.png +0 -0
  81. data/lib/assets/images/atreides/share/yahoobuzz_16.png +0 -0
  82. data/lib/assets/images/atreides/share/yelp_16.png +0 -0
  83. data/lib/assets/images/atreides/share/youtube_16.png +0 -0
  84. data/lib/assets/javascripts/atreides/facebox.js +309 -0
  85. data/lib/assets/javascripts/atreides/fileuploader.js +1250 -0
  86. data/lib/assets/javascripts/atreides/galleria.js +2 -0
  87. data/lib/assets/javascripts/atreides/galleria/src/galleria.js +3816 -0
  88. data/lib/assets/javascripts/atreides/galleria/src/plugins/galleria.flickr.js +221 -0
  89. data/lib/assets/javascripts/atreides/galleria/src/plugins/galleria.history.js +602 -0
  90. data/lib/assets/javascripts/atreides/galleria/src/themes/classic/classic-loader.gif +0 -0
  91. data/lib/assets/javascripts/atreides/galleria/src/themes/classic/classic-map.png +0 -0
  92. data/lib/assets/javascripts/atreides/galleria/src/themes/classic/galleria.classic.css +202 -0
  93. data/lib/assets/javascripts/atreides/galleria/src/themes/classic/galleria.classic.js +92 -0
  94. data/lib/assets/javascripts/atreides/galleria/src/themes/fullscreen/b.png +0 -0
  95. data/lib/assets/javascripts/atreides/galleria/src/themes/fullscreen/down.gif +0 -0
  96. data/lib/assets/javascripts/atreides/galleria/src/themes/fullscreen/fix.gif +0 -0
  97. data/lib/assets/javascripts/atreides/galleria/src/themes/fullscreen/fullscreen-demo.html +34 -0
  98. data/lib/assets/javascripts/atreides/galleria/src/themes/fullscreen/galleria.fullscreen.css +46 -0
  99. data/lib/assets/javascripts/atreides/galleria/src/themes/fullscreen/galleria.fullscreen.js +193 -0
  100. data/lib/assets/javascripts/atreides/galleria/src/themes/fullscreen/i.png +0 -0
  101. data/lib/assets/javascripts/atreides/galleria/src/themes/fullscreen/l.gif +0 -0
  102. data/lib/assets/javascripts/atreides/galleria/src/themes/fullscreen/l2.png +0 -0
  103. data/lib/assets/javascripts/atreides/galleria/src/themes/fullscreen/loader.gif +0 -0
  104. data/lib/assets/javascripts/atreides/galleria/src/themes/fullscreen/n.gif +0 -0
  105. data/lib/assets/javascripts/atreides/galleria/src/themes/fullscreen/p.gif +0 -0
  106. data/lib/assets/javascripts/atreides/galleria/src/themes/fullscreen/r.gif +0 -0
  107. data/lib/assets/javascripts/atreides/galleria/src/themes/fullscreen/r2.png +0 -0
  108. data/lib/assets/javascripts/atreides/galleria/src/themes/fullscreen/up.gif +0 -0
  109. data/lib/assets/javascripts/atreides/jquery.autogrow.js +132 -0
  110. data/lib/assets/javascripts/atreides/jquery.cookie.js +96 -0
  111. data/lib/assets/javascripts/atreides/jquery.countdown.js +759 -0
  112. data/lib/assets/javascripts/atreides/jquery.cycle.js +918 -0
  113. data/lib/assets/javascripts/atreides/jquery.easing.1.3.js +205 -0
  114. data/lib/assets/javascripts/atreides/jquery.flash.js +288 -0
  115. data/lib/assets/javascripts/atreides/jquery.iphone-checkboxes.js +214 -0
  116. data/lib/assets/javascripts/atreides/jquery.jBreadCrumb.1.1.js +240 -0
  117. data/lib/assets/javascripts/atreides/jquery.multipleselectbox-min.js +15 -0
  118. data/lib/assets/javascripts/atreides/jquery.multipleselectbox.js +446 -0
  119. data/lib/assets/javascripts/atreides/jquery.swfupload.js +64 -0
  120. data/lib/assets/javascripts/atreides/jquery.tipsy.js +104 -0
  121. data/lib/assets/javascripts/atreides/jquery.uniform.js +461 -0
  122. data/lib/assets/javascripts/atreides/jtags.js +125 -0
  123. data/lib/assets/javascripts/atreides/raphael-min.js +7 -0
  124. data/lib/assets/javascripts/atreides/raphael.analytics.js +205 -0
  125. data/lib/assets/javascripts/atreides/raphael.path.methods.js +53 -0
  126. data/lib/assets/javascripts/atreides/raphael.pie.js +44 -0
  127. data/lib/assets/javascripts/atreides/sifr.js +18 -0
  128. data/lib/assets/javascripts/atreides/swfobject.js +4 -0
  129. data/lib/assets/javascripts/atreides/swfupload/handlers.js +290 -0
  130. data/lib/assets/javascripts/atreides/swfupload/swfupload.cookies.js +53 -0
  131. data/lib/assets/javascripts/atreides/swfupload/swfupload.js +980 -0
  132. data/lib/assets/javascripts/atreides/swfupload/swfupload.queue.js +98 -0
  133. data/lib/assets/javascripts/atreides/swfupload/swfupload.speed.js +342 -0
  134. data/lib/assets/javascripts/atreides/swfupload/swfupload.swfobject.js +111 -0
  135. data/lib/assets/javascripts/atreides/underscore-1.1.6.js +807 -0
  136. data/lib/assets/stylesheets/atreides/admin_grid.css +258 -0
  137. data/lib/assets/stylesheets/atreides/facebox.css +80 -0
  138. data/lib/assets/stylesheets/atreides/formtastic.css +144 -0
  139. data/lib/assets/stylesheets/atreides/galleria.css +24 -0
  140. data/lib/assets/stylesheets/atreides/ie.css +35 -0
  141. data/lib/assets/stylesheets/atreides/images/bg_fallback.png +0 -0
  142. data/lib/assets/stylesheets/atreides/images/icon_sprite.png +0 -0
  143. data/lib/assets/stylesheets/atreides/images/progress_bar.gif +0 -0
  144. data/lib/assets/stylesheets/atreides/images/slider_handles.png +0 -0
  145. data/lib/assets/stylesheets/atreides/images/ui-icons_222222_256x240.png +0 -0
  146. data/lib/assets/stylesheets/atreides/images/ui-icons_454545_256x240.png +0 -0
  147. data/lib/assets/stylesheets/atreides/jquery-ui.css +738 -0
  148. data/lib/assets/stylesheets/atreides/multipleselectbox.css +33 -0
  149. data/lib/assets/stylesheets/atreides/print.css +29 -0
  150. data/lib/assets/stylesheets/atreides/public_grid.css +258 -0
  151. data/lib/assets/stylesheets/atreides/tipsy.css +7 -0
  152. data/lib/assets/stylesheets/atreides/uniform.default.css +476 -0
  153. data/lib/atreides.rb +4 -0
  154. data/lib/atreides/schema.rb +53 -0
  155. data/lib/atreides/time_zone.rb +6 -0
  156. data/lib/atreides/version.rb +1 -1
  157. data/lib/generators/templates/create_pages.rb +1 -2
  158. data/lib/generators/templates/create_posts.rb +1 -2
  159. metadata +155 -13
  160. data/app/views/admin/common/_list_table.html.erb +0 -37
  161. data/app/views/admin/common/_list_table_row.html.erb +0 -18
  162. data/app/views/admin/common/_pagination.html.erb +0 -1
  163. 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);