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,64 @@
1
+ /*
2
+ * SWFUpload jQuery Plugin v1.0.0
3
+ *
4
+ * Copyright (c) 2009 Adam Royle
5
+ * Licensed under the MIT license.
6
+ *
7
+ */
8
+
9
+ (function($){
10
+
11
+ var defaultHandlers = ['swfupload_loaded_handler','file_queued_handler','file_queue_error_handler','file_dialog_start_handler','file_dialog_complete_handler','upload_start_handler','upload_progress_handler','upload_error_handler','upload_success_handler','upload_complete_handler','queue_complete_handler'];
12
+ var additionalHandlers = [];
13
+
14
+ $.fn.swfupload = function(){
15
+ var args = $.makeArray(arguments);
16
+ return this.each(function(){
17
+ var swfu;
18
+ if (args.length == 1 && typeof(args[0]) == 'object') {
19
+ swfu = $(this).data('__swfu');
20
+ if (!swfu) {
21
+ var settings = args[0];
22
+ var $magicUploadControl = $(this);
23
+ var handlers = [];
24
+ $.merge(handlers, defaultHandlers);
25
+ $.merge(handlers, additionalHandlers);
26
+ $.each(handlers, function(i, v){
27
+ var eventName = v.replace(/_handler$/, '').replace(/_([a-z])/g, function(){ return arguments[1].toUpperCase(); });
28
+ settings[v] = function() {
29
+ var event = $.Event(eventName);
30
+ $magicUploadControl.trigger(event, $.makeArray(arguments));
31
+ return !event.isDefaultPrevented();
32
+ };
33
+ });
34
+ $(this).data('__swfu', new SWFUpload(settings));
35
+ }
36
+ } else if (args.length > 0 && typeof(args[0]) == 'string') {
37
+ var methodName = args.shift();
38
+ swfu = $(this).data('__swfu');
39
+ if (swfu && swfu[methodName]) {
40
+ swfu[methodName].apply(swfu, args);
41
+ }
42
+ }
43
+ });
44
+ };
45
+
46
+ $.swfupload = {
47
+ additionalHandlers: function() {
48
+ if (arguments.length === 0) {
49
+ return additionalHandlers.slice();
50
+ } else {
51
+ $(arguments).each(function(i, v){
52
+ $.merge(additionalHandlers, $.makeArray(v));
53
+ });
54
+ }
55
+ },
56
+ defaultHandlers: function() {
57
+ return defaultHandlers.slice();
58
+ },
59
+ getInstance: function(el) {
60
+ return $(el).data('__swfu');
61
+ }
62
+ };
63
+
64
+ })(jQuery);
@@ -0,0 +1,104 @@
1
+ (function($) {
2
+ $.fn.tipsy = function(options) {
3
+
4
+ options = $.extend({}, $.fn.tipsy.defaults, options);
5
+
6
+ return this.each(function() {
7
+
8
+ var opts = $.fn.tipsy.elementOptions(this, options);
9
+
10
+ $(this).hover(function() {
11
+
12
+ $.data(this, 'cancel.tipsy', true);
13
+
14
+ var tip = $.data(this, 'active.tipsy');
15
+ if (!tip) {
16
+ tip = $('<div class="tipsy"><div class="tipsy-inner"/></div>');
17
+ tip.css({position: 'absolute', zIndex: 100000});
18
+ $.data(this, 'active.tipsy', tip);
19
+ }
20
+
21
+ if ($(this).attr('title') || typeof($(this).attr('original-title')) != 'string') {
22
+ $(this).attr('original-title', $(this).attr('title') || '').removeAttr('title');
23
+ }
24
+
25
+ var title;
26
+ if (typeof opts.title == 'string') {
27
+ title = $(this).attr(opts.title == 'title' ? 'original-title' : opts.title);
28
+ } else if (typeof opts.title == 'function') {
29
+ title = opts.title.call(this);
30
+ }
31
+
32
+ tip.find('.tipsy-inner')[opts.html ? 'html' : 'text'](title || opts.fallback);
33
+
34
+ var pos = $.extend({}, $(this).offset(), {width: this.offsetWidth, height: this.offsetHeight});
35
+ tip.get(0).className = 'tipsy'; // reset classname in case of dynamic gravity
36
+ tip.remove().css({top: 0, left: 0, visibility: 'hidden', display: 'block'}).appendTo(document.body);
37
+ var actualWidth = tip[0].offsetWidth, actualHeight = tip[0].offsetHeight;
38
+ var gravity = (typeof opts.gravity == 'function') ? opts.gravity.call(this) : opts.gravity;
39
+
40
+ switch (gravity.charAt(0)) {
41
+ case 'n':
42
+ tip.css({top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2}).addClass('tipsy-north');
43
+ break;
44
+ case 's':
45
+ tip.css({top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2}).addClass('tipsy-south');
46
+ break;
47
+ case 'e':
48
+ tip.css({top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth}).addClass('tipsy-east');
49
+ break;
50
+ case 'w':
51
+ tip.css({top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width}).addClass('tipsy-west');
52
+ break;
53
+ }
54
+
55
+ if (opts.fade) {
56
+ tip.css({opacity: 0, display: 'block', visibility: 'visible'}).animate({opacity: 0.8});
57
+ } else {
58
+ tip.css({visibility: 'visible'});
59
+ }
60
+
61
+ }, function() {
62
+ $.data(this, 'cancel.tipsy', false);
63
+ var self = this;
64
+ setTimeout(function() {
65
+ if ($.data(this, 'cancel.tipsy')) return;
66
+ var tip = $.data(self, 'active.tipsy');
67
+ if (opts.fade) {
68
+ tip.stop().fadeOut(function() { $(this).remove(); });
69
+ } else {
70
+ tip.remove();
71
+ }
72
+ }, 100);
73
+
74
+ });
75
+
76
+ });
77
+
78
+ };
79
+
80
+ // Overwrite this method to provide options on a per-element basis.
81
+ // For example, you could store the gravity in a 'tipsy-gravity' attribute:
82
+ // return $.extend({}, options, {gravity: $(ele).attr('tipsy-gravity') || 'n' });
83
+ // (remember - do not modify 'options' in place!)
84
+ $.fn.tipsy.elementOptions = function(ele, options) {
85
+ return $.metadata ? $.extend({}, options, $(ele).metadata()) : options;
86
+ };
87
+
88
+ $.fn.tipsy.defaults = {
89
+ fade: false,
90
+ fallback: '',
91
+ gravity: 'n',
92
+ html: false,
93
+ title: 'title'
94
+ };
95
+
96
+ $.fn.tipsy.autoNS = function() {
97
+ return $(this).offset().top > ($(document).scrollTop() + $(window).height() / 2) ? 's' : 'n';
98
+ };
99
+
100
+ $.fn.tipsy.autoWE = function() {
101
+ return $(this).offset().left > ($(document).scrollLeft() + $(window).width() / 2) ? 'e' : 'w';
102
+ };
103
+
104
+ })(jQuery);
@@ -0,0 +1,461 @@
1
+ /*
2
+
3
+ TO DO: Test in all browsers, clean up theme file, prepare documentation, minisite?
4
+
5
+ Uniform v1.5
6
+ Copyright © 2009 Josh Pyles / Pixelmatrix Design LLC
7
+ http://pixelmatrixdesign.com
8
+
9
+ Requires jQuery 1.3 or newer
10
+
11
+ Much thanks to Thomas Reynolds and Buck Wilson for their help and advice on this
12
+
13
+ Also, thanks to David Kaneda and Eugene Bond for their contributions to the plugin
14
+
15
+ License:
16
+ MIT License - http://www.opensource.org/licenses/mit-license.php
17
+
18
+ Usage:
19
+
20
+ $(function(){
21
+ $("select, :radio, :checkbox").uniform();
22
+ });
23
+
24
+ You can customize the classes that Uniform uses:
25
+
26
+ $("select, :radio, :checkbox").uniform({
27
+ selectClass: 'mySelectClass',
28
+ radioClass: 'myRadioClass',
29
+ checkboxClass: 'myCheckboxClass',
30
+ checkedClass: 'myCheckedClass',
31
+ focusClass: 'myFocusClass'
32
+ });
33
+
34
+ Enjoy!
35
+
36
+ */
37
+
38
+ (function($) {
39
+ $.uniform = {
40
+ options: {
41
+ selectClass: 'selector',
42
+ radioClass: 'radio',
43
+ checkboxClass: 'checker',
44
+ fileClass: 'uploader',
45
+ filenameClass: 'filename',
46
+ fileBtnClass: 'action',
47
+ fileDefaultText: 'No file selected',
48
+ fileBtnText: 'Choose File',
49
+ checkedClass: 'checked',
50
+ focusClass: 'focus',
51
+ disabledClass: 'disabled',
52
+ activeClass: 'active',
53
+ hoverClass: 'hover',
54
+ useID: true,
55
+ idPrefix: 'uniform',
56
+ resetSelector: false
57
+ },
58
+ elements: []
59
+ };
60
+
61
+ if($.browser.msie && $.browser.version < 7){
62
+ $.selectOpacity = false;
63
+ }else{
64
+ $.selectOpacity = true;
65
+ }
66
+
67
+ $.fn.uniform = function(options) {
68
+
69
+ options = $.extend($.uniform.options, options);
70
+
71
+ var el = this;
72
+ //code for specifying a reset button
73
+ if(options.resetSelector != false){
74
+ $(options.resetSelector).mouseup(function(){
75
+ function resetThis(){
76
+ $.uniform.update(el);
77
+ }
78
+ setTimeout(resetThis, 10);
79
+ });
80
+ }
81
+
82
+ function doSelect(elem){
83
+
84
+ var divTag = $('<div />'),
85
+ spanTag = $('<span />');
86
+
87
+ divTag.addClass(options.selectClass);
88
+
89
+ if(options.useID){
90
+ divTag.attr("id", options.idPrefix+"-"+elem.attr("id"));
91
+ }
92
+
93
+ spanTag.html(elem.children(":selected").text());
94
+
95
+ elem.css('opacity', 0);
96
+ elem.wrap(divTag);
97
+ elem.before(spanTag);
98
+
99
+ //redefine variables
100
+ divTag = elem.parent("div");
101
+ spanTag = elem.siblings("span");
102
+
103
+ elem.change(function() {
104
+ spanTag.text(elem.children(":selected").text());
105
+ })
106
+ .focus(function() {
107
+ divTag.addClass(options.focusClass);
108
+ })
109
+ .blur(function() {
110
+ divTag.removeClass(options.focusClass);
111
+ })
112
+ .mousedown(function() {
113
+ divTag.addClass(options.activeClass);
114
+ })
115
+ .mouseup(function() {
116
+ divTag.removeClass(options.activeClass);
117
+ })
118
+ .hover(function() {
119
+ divTag.addClass(options.hoverClass);
120
+ }, function() {
121
+ divTag.removeClass(options.hoverClass);
122
+ })
123
+ .keypress(function(){
124
+ spanTag.text(elem.children(":selected").text());
125
+ });
126
+
127
+ //handle disabled state
128
+ if($(elem).attr("disabled")){
129
+ //box is checked by default, check our box
130
+ divTag.addClass(options.disabledClass);
131
+ }
132
+
133
+ storeElement(elem);
134
+
135
+ }
136
+
137
+ function doCheckbox(elem){
138
+
139
+ var divTag = $('<div />'),
140
+ spanTag = $('<span />');
141
+
142
+ divTag.addClass(options.checkboxClass);
143
+
144
+ //assign the id of the element
145
+ if(options.useID){
146
+ divTag.attr("id", options.idPrefix+"-"+elem.attr("id"));
147
+ }
148
+
149
+ //wrap with the proper elements
150
+ $(elem).wrap(divTag);
151
+ $(elem).wrap(spanTag);
152
+
153
+ //redefine variables
154
+ spanTag = elem.parent();
155
+ divTag = spanTag.parent();
156
+
157
+ //hide normal input and add focus classes
158
+ $(elem)
159
+ .css("opacity", 0)
160
+ .focus(function(){
161
+
162
+ divTag.addClass(options.focusClass);
163
+ })
164
+ .blur(function(){
165
+
166
+ divTag.removeClass(options.focusClass);
167
+ })
168
+ .click(function(){
169
+
170
+ if(!$(elem).attr("checked")){
171
+ //box was just unchecked, uncheck span
172
+ spanTag.removeClass(options.checkedClass);
173
+ }else{
174
+ //box was just checked, check span.
175
+ spanTag.addClass(options.checkedClass);
176
+ }
177
+ })
178
+ .mousedown(function() {
179
+ divTag.addClass(options.activeClass);
180
+ })
181
+ .mouseup(function() {
182
+ divTag.removeClass(options.activeClass);
183
+ })
184
+ .hover(function() {
185
+ divTag.addClass(options.hoverClass);
186
+ }, function() {
187
+ divTag.removeClass(options.hoverClass);
188
+ });
189
+
190
+ //handle defaults
191
+ if($(elem).attr("checked")){
192
+ //box is checked by default, check our box
193
+ spanTag.addClass(options.checkedClass);
194
+ }
195
+
196
+ //handle disabled state
197
+ if($(elem).attr("disabled")){
198
+ //box is checked by default, check our box
199
+ divTag.addClass(options.disabledClass);
200
+ }
201
+
202
+ storeElement(elem);
203
+
204
+ }
205
+
206
+ function doRadio(elem){
207
+
208
+ var divTag = $('<div />'),
209
+ spanTag = $('<span />');
210
+
211
+ divTag.addClass(options.radioClass);
212
+
213
+ if(options.useID){
214
+ divTag.attr("id", options.idPrefix+"-"+elem.attr("id"));
215
+ }
216
+
217
+ //wrap with the proper elements
218
+ $(elem).wrap(divTag);
219
+ $(elem).wrap(spanTag);
220
+
221
+ //redefine variables
222
+ spanTag = elem.parent();
223
+ divTag = spanTag.parent();
224
+
225
+ //hide normal input and add focus classes
226
+ $(elem)
227
+ .css("opacity", 0)
228
+ .focus(function(){
229
+ divTag.addClass(options.focusClass);
230
+ })
231
+ .blur(function(){
232
+ divTag.removeClass(options.focusClass);
233
+ })
234
+ .click(function(){
235
+ if(!$(elem).attr("checked")){
236
+ //box was just unchecked, uncheck span
237
+ spanTag.removeClass(options.checkedClass);
238
+ }else{
239
+ //box was just checked, check span
240
+ $("."+options.radioClass + " span."+options.checkedClass + ":has([name='" + $(elem).attr('name') + "'])").removeClass(options.checkedClass);
241
+ spanTag.addClass(options.checkedClass);
242
+ }
243
+ })
244
+ .mousedown(function() {
245
+ if(!$(elem).is(":disabled")){
246
+ divTag.addClass(options.activeClass);
247
+ }
248
+ })
249
+ .mouseup(function() {
250
+ divTag.removeClass(options.activeClass);
251
+ })
252
+ .hover(function() {
253
+ divTag.addClass(options.hoverClass);
254
+ }, function() {
255
+ divTag.removeClass(options.hoverClass);
256
+ });
257
+
258
+ //handle defaults
259
+ if($(elem).attr("checked")){
260
+ //box is checked by default, check span
261
+ spanTag.addClass(options.checkedClass);
262
+ }
263
+ //handle disabled state
264
+ if($(elem).attr("disabled")){
265
+ //box is checked by default, check our box
266
+ divTag.addClass(options.disabledClass);
267
+ }
268
+
269
+ storeElement(elem);
270
+
271
+ }
272
+
273
+ function doFile(elem){
274
+ //sanitize input
275
+ $el = $(elem);
276
+
277
+ var divTag = $('<div />'),
278
+ filenameTag = $('<span>'+options.fileDefaultText+'</span>'),
279
+ btnTag = $('<span>'+options.fileBtnText+'</span>');
280
+
281
+ divTag.addClass(options.fileClass);
282
+ filenameTag.addClass(options.filenameClass);
283
+ btnTag.addClass(options.fileBtnClass);
284
+
285
+ if(options.useID){
286
+ divTag.attr("id", options.idPrefix+"-"+$el.attr("id"));
287
+ }
288
+
289
+ //wrap with the proper elements
290
+ $el.wrap(divTag);
291
+ $el.after(btnTag);
292
+ $el.after(filenameTag);
293
+
294
+ //redefine variables
295
+ divTag = $el.closest("div");
296
+ filenameTag = $el.siblings("."+options.filenameClass);
297
+ btnTag = $el.siblings("."+options.fileBtnClass);
298
+
299
+ //set the size
300
+ if(!$el.attr("size")){
301
+ var divWidth = divTag.width();
302
+ //$el.css("width", divWidth);
303
+ $el.attr("size", divWidth/10);
304
+ }
305
+
306
+ //actions
307
+ $el
308
+ .css("opacity", 0)
309
+ .focus(function(){
310
+ divTag.addClass(options.focusClass);
311
+ })
312
+ .blur(function(){
313
+ divTag.removeClass(options.focusClass);
314
+ })
315
+ .change(function(){
316
+ var filename = $el.val();
317
+ filename = filename.split("/");
318
+ filename = filename[(filename.length-1)];
319
+ filenameTag.text($el.val());
320
+ })
321
+ .mousedown(function() {
322
+ if(!$(elem).is(":disabled")){
323
+ divTag.addClass(options.activeClass);
324
+ }
325
+ })
326
+ .mouseup(function() {
327
+ divTag.removeClass(options.activeClass);
328
+ })
329
+ .hover(function() {
330
+ divTag.addClass(options.hoverClass);
331
+ }, function() {
332
+ divTag.removeClass(options.hoverClass);
333
+ });
334
+
335
+ //handle defaults
336
+ if($el.attr("disabled")){
337
+ //box is checked by default, check our box
338
+ divTag.addClass(options.disabledClass);
339
+ }
340
+
341
+ storeElement(elem);
342
+
343
+ }
344
+
345
+ function storeElement(elem){
346
+ //store this element in our global array
347
+ elem = $(elem).get();
348
+ if(elem.length > 1){
349
+ $.each(elem, function(i, val){
350
+ $.uniform.elements.push(val);
351
+ });
352
+ }else{
353
+ $.uniform.elements.push(elem);
354
+ }
355
+ }
356
+
357
+ $.uniform.update = function(elem){
358
+ if(elem == undefined){
359
+ elem = $($.uniform.elements);
360
+ }
361
+ //sanitize input
362
+ elem = $(elem);
363
+
364
+ elem.each(function(){
365
+ //do to each item in the selector
366
+ //function to reset all classes
367
+ $e = $(this);
368
+
369
+ if($e.is("select")){
370
+ //element is a select
371
+ spanTag = $e.siblings("span");
372
+ divTag = $e.parent("div");
373
+
374
+ divTag.removeClass(options.hoverClass+" "+options.focusClass+" "+options.activeClass);
375
+
376
+ //reset current selected text
377
+ spanTag.html($e.children(":selected").text());
378
+
379
+ if($e.is(":disabled")){
380
+ divTag.addClass(options.disabledClass);
381
+ }else{
382
+ divTag.removeClass(options.disabledClass);
383
+ }
384
+
385
+ }else if($e.is(":checkbox")){
386
+ //element is a checkbox
387
+ spanTag = $e.closest("span");
388
+ divTag = $e.closest("div");
389
+
390
+ divTag.removeClass(options.hoverClass+" "+options.focusClass+" "+options.activeClass);
391
+ spanTag.removeClass(options.checkedClass);
392
+
393
+ if($e.is(":checked")){
394
+ spanTag.addClass(options.checkedClass);
395
+ }
396
+ if($e.is(":disabled")){
397
+ divTag.addClass(options.disabledClass);
398
+ }else{
399
+ divTag.removeClass(options.disabledClass);
400
+ }
401
+
402
+ }else if($e.is(":radio")){
403
+ //element is a radio
404
+ spanTag = $e.closest("span");
405
+ divTag = $e.closest("div");
406
+
407
+ divTag.removeClass(options.hoverClass+" "+options.focusClass+" "+options.activeClass);
408
+ spanTag.removeClass(options.checkedClass);
409
+
410
+ if($e.is(":checked")){
411
+ spanTag.addClass(options.checkedClass);
412
+ }
413
+
414
+ if($e.is(":disabled")){
415
+ divTag.addClass(options.disabledClass);
416
+ }else{
417
+ divTag.removeClass(options.disabledClass);
418
+ }
419
+ }else if($e.is(":file")){
420
+ divTag = $e.parent("div");
421
+ filenameTag = $e.siblings(options.filenameClass);
422
+ btnTag = $e.siblings(options.fileBtnClass);
423
+
424
+ divTag.removeClass(options.hoverClass+" "+options.focusClass+" "+options.activeClass);
425
+
426
+ filenameTag.text($e.val());
427
+
428
+ if($e.is(":disabled")){
429
+ divTag.addClass(options.disabledClass);
430
+ }else{
431
+ divTag.removeClass(options.disabledClass);
432
+ }
433
+ }
434
+ });
435
+ }
436
+
437
+ return this.each(function() {
438
+ if($.selectOpacity){
439
+ var elem = $(this);
440
+
441
+ if(elem.is("select")){
442
+ //element is a select
443
+ if(elem.attr("multiple") != true){
444
+ //element is not a multi-select
445
+ doSelect(elem);
446
+ }
447
+ }else if(elem.is(":checkbox")){
448
+ //element is a checkbox
449
+ doCheckbox(elem);
450
+ }else if(elem.is(":radio")){
451
+ //element is a radio
452
+ doRadio(elem);
453
+ }else if(elem.is(":file")){
454
+ //element is a file upload
455
+ doFile(elem);
456
+ }
457
+
458
+ }
459
+ });
460
+ };
461
+ })(jQuery);