compass-jquery-plugin 0.3.2.3 → 0.3.2.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (235) hide show
  1. data/README.md +54 -37
  2. data/VERSION.yml +1 -1
  3. data/lib/handle_attributes.rb +4 -4
  4. data/lib/handle_js_files.rb +5 -5
  5. data/lib/jqtouch_theme.rb +2 -2
  6. data/lib/jquery/dynatree.rb +2 -2
  7. data/lib/jquery/emulators.rb +1 -1
  8. data/lib/jquery/flash_messages.rb +6 -6
  9. data/lib/jquery/graphics.rb +5 -0
  10. data/lib/jquery/gridify/assertions.rb +1 -1
  11. data/lib/jquery/gridify/grid.rb +76 -59
  12. data/lib/jquery/gridify/grid_column.rb +73 -67
  13. data/lib/jquery/gridify/grid_finder.rb +79 -79
  14. data/lib/jquery/gridify/grid_options.rb +154 -149
  15. data/lib/jquery/gridify/grid_view.rb +143 -143
  16. data/lib/jquery/gridify.rb +25 -25
  17. data/lib/jquery/ical/calendar.rb +2 -2
  18. data/lib/jquery/ical/event.rb +48 -44
  19. data/lib/jquery/ical/helpers/ui_event_helper.rb +3 -3
  20. data/lib/jquery/jqgrid/jqgrid.rb +58 -58
  21. data/lib/jquery/jqgrid.rb +1 -1
  22. data/lib/jquery/jqtouch.rb +1 -1
  23. data/lib/jquery/jquery.rb +117 -117
  24. data/lib/jquery/jquery_auto_complete.rb +9 -9
  25. data/lib/jquery/jquery_json_response.rb +12 -12
  26. data/lib/jquery/jquery_selector_assertions.rb +55 -53
  27. data/lib/jquery/jstree.rb +2 -2
  28. data/lib/jquery/mobile.rb +1 -1
  29. data/lib/jquery/ribbon.rb +2 -2
  30. data/lib/jquery/secret_sauce/controller/ui_dialog_controls.rb +5 -5
  31. data/lib/jquery/secret_sauce/controller/ui_grid_controls.rb +5 -5
  32. data/lib/jquery/secret_sauce/helpers/ui_dialog_helper.rb +1 -1
  33. data/lib/jquery/secret_sauce/helpers/ui_form_helper.rb +39 -39
  34. data/lib/jquery/secret_sauce/helpers/ui_grid_helper.rb +74 -74
  35. data/lib/jquery/secret_sauce/model/find_for_grid.rb +21 -21
  36. data/lib/jquery/secret_sauce.rb +1 -1
  37. data/lib/jquery/tools.rb +1 -1
  38. data/lib/jquery_mobile_theme.rb +2 -2
  39. data/lib/jquery_ui_theme.rb +12 -12
  40. data/templates/dynatree/config/initializers/dynatree.rb +3 -3
  41. data/templates/dynatree/jquery/dynatree/aero.scss +16 -16
  42. data/templates/dynatree/jquery/dynatree/aqua.scss +16 -16
  43. data/templates/dynatree/jquery/dynatree/crystal.scss +16 -16
  44. data/templates/dynatree/jquery/dynatree/xp.scss +17 -17
  45. data/templates/dynatree/jquery.dynatree.js +2926 -2912
  46. data/templates/emulators/config/initializers/emulators.rb +6 -6
  47. data/templates/graphics/config/initializers/graphics.rb +5 -0
  48. data/templates/graphics/jquery/ganttView.scss +89 -0
  49. data/templates/graphics/jquery.ganttView.js +1669 -0
  50. data/templates/graphics/jquery.ganttView.min.js +70 -0
  51. data/templates/{jquery → graphics}/jquery.sparkline.js +466 -438
  52. data/templates/{jquery → graphics}/jquery.sparkline.min.js +0 -0
  53. data/templates/graphics/manifest.rb +9 -0
  54. data/templates/jqgrid/config/initializers/jqgrid.rb +1 -1
  55. data/templates/jqgrid/i18n/jqgrid/locale-ar.js +131 -125
  56. data/templates/jqgrid/i18n/jqgrid/locale-bg.js +135 -131
  57. data/templates/jqgrid/i18n/jqgrid/locale-bg1251.js +135 -131
  58. data/templates/jqgrid/i18n/jqgrid/locale-cat.js +132 -126
  59. data/templates/jqgrid/i18n/jqgrid/locale-cn.js +137 -131
  60. data/templates/jqgrid/i18n/jqgrid/locale-cs.js +133 -127
  61. data/templates/jqgrid/i18n/jqgrid/locale-da.js +132 -126
  62. data/templates/jqgrid/i18n/jqgrid/locale-de.js +138 -132
  63. data/templates/jqgrid/i18n/jqgrid/locale-el.js +131 -125
  64. data/templates/jqgrid/i18n/jqgrid/locale-en.js +133 -127
  65. data/templates/jqgrid/i18n/jqgrid/locale-es.js +133 -127
  66. data/templates/jqgrid/i18n/jqgrid/locale-fa.js +19 -16
  67. data/templates/jqgrid/i18n/jqgrid/locale-fi.js +132 -126
  68. data/templates/jqgrid/i18n/jqgrid/locale-fr.js +131 -125
  69. data/templates/jqgrid/i18n/jqgrid/locale-gl.js +131 -125
  70. data/templates/jqgrid/i18n/jqgrid/locale-he.js +132 -126
  71. data/templates/jqgrid/i18n/jqgrid/locale-hu.js +133 -127
  72. data/templates/jqgrid/i18n/jqgrid/locale-is.js +131 -125
  73. data/templates/jqgrid/i18n/jqgrid/locale-it.js +8 -1
  74. data/templates/jqgrid/i18n/jqgrid/locale-ja.js +139 -136
  75. data/templates/jqgrid/i18n/jqgrid/locale-nl.js +4 -1
  76. data/templates/jqgrid/i18n/jqgrid/locale-no.js +14 -1
  77. data/templates/jqgrid/i18n/jqgrid/locale-pl.js +132 -126
  78. data/templates/jqgrid/i18n/jqgrid/locale-pt-br.js +132 -126
  79. data/templates/jqgrid/i18n/jqgrid/locale-pt.js +130 -124
  80. data/templates/jqgrid/i18n/jqgrid/locale-ro.js +144 -138
  81. data/templates/jqgrid/i18n/jqgrid/locale-ru.js +132 -126
  82. data/templates/jqgrid/i18n/jqgrid/locale-sk.js +132 -126
  83. data/templates/jqgrid/i18n/jqgrid/locale-sr.js +133 -127
  84. data/templates/jqgrid/i18n/jqgrid/locale-sv.js +132 -126
  85. data/templates/jqgrid/i18n/jqgrid/locale-tr.js +131 -125
  86. data/templates/jqgrid/i18n/jqgrid/locale-ua.js +132 -126
  87. data/templates/jqgrid/jquery.jqGrid.js +12735 -10444
  88. data/templates/jqgrid/jquery.jqGrid.min.js +477 -469
  89. data/templates/jqgrid/public/stylesheets/ellipsis-xbl.xml +12 -10
  90. data/templates/jqtouch/config/initializers/jqtouch.rb +3 -3
  91. data/templates/jqtouch/jquery/touch/jqtouch.scss +1 -1
  92. data/templates/jqtouch/jquery.jqtouch.js +10025 -10043
  93. data/templates/jquery/config/initializers/jquery.rb +2 -4
  94. data/templates/jquery/history.adapter.jquery.js +71 -0
  95. data/templates/jquery/history.adapter.jquery.min.js +4 -0
  96. data/templates/jquery/history.html4.js +690 -0
  97. data/templates/jquery/history.html4.min.js +21 -0
  98. data/templates/jquery/history.js +1297 -0
  99. data/templates/jquery/history.min.js +29 -0
  100. data/templates/jquery/i18n/jquery.ui/datepicker-af.js +20 -20
  101. data/templates/jquery/i18n/jquery.ui/datepicker-ar-DZ.js +19 -19
  102. data/templates/jquery/i18n/jquery.ui/datepicker-ar.js +19 -19
  103. data/templates/jquery/i18n/jquery.ui/datepicker-az.js +19 -19
  104. data/templates/jquery/i18n/jquery.ui/datepicker-bg.js +8 -8
  105. data/templates/jquery/i18n/jquery.ui/datepicker-bs.js +20 -20
  106. data/templates/jquery/i18n/jquery.ui/datepicker-ca.js +20 -20
  107. data/templates/jquery/i18n/jquery.ui/datepicker-cs.js +20 -20
  108. data/templates/jquery/i18n/jquery.ui/datepicker-da.js +14 -14
  109. data/templates/jquery/i18n/jquery.ui/datepicker-de.js +20 -20
  110. data/templates/jquery/i18n/jquery.ui/datepicker-el.js +20 -20
  111. data/templates/jquery/i18n/jquery.ui/datepicker-en-AU.js +20 -20
  112. data/templates/jquery/i18n/jquery.ui/datepicker-en-GB.js +20 -20
  113. data/templates/jquery/i18n/jquery.ui/datepicker-en-NZ.js +20 -20
  114. data/templates/jquery/i18n/jquery.ui/datepicker-eo.js +20 -20
  115. data/templates/jquery/i18n/jquery.ui/datepicker-es.js +20 -20
  116. data/templates/jquery/i18n/jquery.ui/datepicker-et.js +20 -20
  117. data/templates/jquery/i18n/jquery.ui/datepicker-eu.js +20 -20
  118. data/templates/jquery/i18n/jquery.ui/datepicker-fa.js +18 -18
  119. data/templates/jquery/i18n/jquery.ui/datepicker-fi.js +15 -15
  120. data/templates/jquery/i18n/jquery.ui/datepicker-fo.js +20 -20
  121. data/templates/jquery/i18n/jquery.ui/datepicker-fr-CH.js +20 -20
  122. data/templates/jquery/i18n/jquery.ui/datepicker-fr.js +22 -22
  123. data/templates/jquery/i18n/jquery.ui/datepicker-gl.js +20 -20
  124. data/templates/jquery/i18n/jquery.ui/datepicker-he.js +20 -20
  125. data/templates/jquery/i18n/jquery.ui/datepicker-hr.js +20 -20
  126. data/templates/jquery/i18n/jquery.ui/datepicker-hu.js +20 -20
  127. data/templates/jquery/i18n/jquery.ui/datepicker-hu.min.js +1 -1
  128. data/templates/jquery/i18n/jquery.ui/datepicker-hy.js +20 -20
  129. data/templates/jquery/i18n/jquery.ui/datepicker-id.js +20 -20
  130. data/templates/jquery/i18n/jquery.ui/datepicker-is.js +20 -20
  131. data/templates/jquery/i18n/jquery.ui/datepicker-it.js +20 -20
  132. data/templates/jquery/i18n/jquery.ui/datepicker-ja.js +20 -20
  133. data/templates/jquery/i18n/jquery.ui/datepicker-ko.js +20 -20
  134. data/templates/jquery/i18n/jquery.ui/datepicker-kz.js +20 -20
  135. data/templates/jquery/i18n/jquery.ui/datepicker-lt.js +20 -20
  136. data/templates/jquery/i18n/jquery.ui/datepicker-lv.js +20 -20
  137. data/templates/jquery/i18n/jquery.ui/datepicker-ml.js +20 -20
  138. data/templates/jquery/i18n/jquery.ui/datepicker-ms.js +20 -20
  139. data/templates/jquery/i18n/jquery.ui/datepicker-nl.js +20 -20
  140. data/templates/jquery/i18n/jquery.ui/datepicker-no.js +16 -16
  141. data/templates/jquery/i18n/jquery.ui/datepicker-no.min.js +2 -2
  142. data/templates/jquery/i18n/jquery.ui/datepicker-pl.js +20 -20
  143. data/templates/jquery/i18n/jquery.ui/datepicker-pt-BR.js +20 -20
  144. data/templates/jquery/i18n/jquery.ui/datepicker-pt.js +20 -20
  145. data/templates/jquery/i18n/jquery.ui/datepicker-rm.js +18 -18
  146. data/templates/jquery/i18n/jquery.ui/datepicker-ro.js +20 -20
  147. data/templates/jquery/i18n/jquery.ui/datepicker-ru.js +20 -20
  148. data/templates/jquery/i18n/jquery.ui/datepicker-sk.js +20 -20
  149. data/templates/jquery/i18n/jquery.ui/datepicker-sl.js +20 -20
  150. data/templates/jquery/i18n/jquery.ui/datepicker-sq.js +20 -20
  151. data/templates/jquery/i18n/jquery.ui/datepicker-sr-SR.js +20 -20
  152. data/templates/jquery/i18n/jquery.ui/datepicker-sr.js +20 -20
  153. data/templates/jquery/i18n/jquery.ui/datepicker-sv.js +14 -14
  154. data/templates/jquery/i18n/jquery.ui/datepicker-ta.js +20 -20
  155. data/templates/jquery/i18n/jquery.ui/datepicker-th.js +20 -20
  156. data/templates/jquery/i18n/jquery.ui/datepicker-tr.js +20 -20
  157. data/templates/jquery/i18n/jquery.ui/datepicker-uk.js +20 -20
  158. data/templates/jquery/i18n/jquery.ui/datepicker-vi.js +20 -20
  159. data/templates/jquery/i18n/jquery.ui/datepicker-zh-CN.js +20 -20
  160. data/templates/jquery/i18n/jquery.ui/datepicker-zh-HK.js +20 -20
  161. data/templates/jquery/i18n/jquery.ui/datepicker-zh-TW.js +20 -20
  162. data/templates/jquery/{partials → jquery/ui}/_flash_messages.scss +0 -0
  163. data/templates/jquery/jquery/ui/_theme.scss +14 -13
  164. data/templates/jquery/jquery/ui/contextMenu/configure.png +0 -0
  165. data/templates/jquery/jquery/ui/contextMenu/copy.png +0 -0
  166. data/templates/jquery/jquery/ui/contextMenu/cut.png +0 -0
  167. data/templates/jquery/jquery/ui/contextMenu/delete.png +0 -0
  168. data/templates/jquery/jquery/ui/contextMenu/edit.png +0 -0
  169. data/templates/jquery/jquery/ui/contextMenu/exit.png +0 -0
  170. data/templates/jquery/jquery/ui/contextMenu/new.png +0 -0
  171. data/templates/jquery/jquery/ui/contextMenu/paste.png +0 -0
  172. data/templates/jquery/jquery/ui/contextMenu/rename.png +0 -0
  173. data/templates/jquery/jquery/ui/contextMenu/show.png +0 -0
  174. data/templates/jquery/jquery/ui/contextMenu/trash.png +0 -0
  175. data/templates/jquery/jquery/ui/contextMenu.scss +16 -10
  176. data/templates/jquery/jquery-ui.js +11839 -23066
  177. data/templates/jquery/jquery-ui.min.js +401 -795
  178. data/templates/jquery/jquery.bgiframe.js +27 -25
  179. data/templates/jquery/jquery.contextMenu.js +209 -196
  180. data/templates/jquery/jquery.cookie.js +3 -1
  181. data/templates/jquery/jquery.dotimeout.js +236 -228
  182. data/templates/jquery/jquery.dst.js +154 -151
  183. data/templates/jquery/jquery.farbtastic.js +293 -293
  184. data/templates/jquery/jquery.flashMessages.js +26 -0
  185. data/templates/jquery/jquery.flashMessages.min.js +1 -0
  186. data/templates/jquery/jquery.form.js +803 -786
  187. data/templates/jquery/jquery.haml.js +248 -247
  188. data/templates/jquery/jquery.hotkeys.js +89 -89
  189. data/templates/jquery/jquery.js +8141 -8106
  190. data/templates/jquery/jquery.layout.js +2451 -2415
  191. data/templates/jquery/jquery.min.js +167 -166
  192. data/templates/jquery/jquery.mousewheel.js +62 -54
  193. data/templates/jquery/jquery.offline.js +171 -171
  194. data/templates/jquery/jquery.pngFix.js +76 -76
  195. data/templates/jquery/jquery.replacetext.js +83 -83
  196. data/templates/jquery/jquery.themeswitchertool.js +202 -177
  197. data/templates/jquery/jquery.tmpl.js +478 -473
  198. data/templates/jquery/jquery.tmplPlus.js +82 -81
  199. data/templates/jquery/jrails.js +178 -175
  200. data/templates/jquery/json.js +77 -7
  201. data/templates/jquery/json2.js +480 -0
  202. data/templates/jquery/json2.min.js +7 -0
  203. data/templates/jquery/lib/tasks/haml.rake +2 -2
  204. data/templates/jquery/manifest.rb +21 -17
  205. data/templates/jstree/jquery.jstree.js +5967 -4536
  206. data/templates/mobile/config/initializers/mobile.rb +1 -1
  207. data/templates/mobile/jquery/mobile/_base.scss +944 -927
  208. data/templates/mobile/jquery/mobile/default.scss +61 -48
  209. data/templates/mobile/jquery/mobile/valencia.scss +56 -42
  210. data/templates/mobile/jquery.mobile.js +4461 -4347
  211. data/templates/mobile/jquery.mobile.min.js +11 -2
  212. data/templates/mobile/lib/tasks/jquery.mobile.rake +12 -12
  213. data/templates/ribbon/config/initializers/ribbon.rb +2 -2
  214. data/templates/ribbon/jquery.ribbon.js +50 -29
  215. data/templates/secret_sauce/secret_sauce.js +8 -8
  216. data/templates/tools/flowplayer.js +945 -1
  217. data/templates/tools/jquery.tools.js +4645 -4335
  218. data/templates/tools/jquery.tools.min.js +37 -37
  219. data/templates/tools/lib/tasks/jquery.tools.rake +4 -4
  220. data/templates/tools/swfobject.js +813 -773
  221. metadata +33 -21
  222. data/templates/jquery/haml.js +0 -506
  223. data/templates/jquery/haml.min.js +0 -5
  224. data/templates/jquery/jquery/ui/contextMenu/door.png +0 -0
  225. data/templates/jquery/jquery/ui/contextMenu/page_white_copy.png +0 -0
  226. data/templates/jquery/jquery/ui/contextMenu/page_white_delete.png +0 -0
  227. data/templates/jquery/jquery/ui/contextMenu/page_white_edit.png +0 -0
  228. data/templates/jquery/jquery/ui/contextMenu/page_white_new.png +0 -0
  229. data/templates/jquery/jquery/ui/contextMenu/page_white_paste.png +0 -0
  230. data/templates/jquery/jquery.compat-1.3.js +0 -291
  231. data/templates/jquery/jquery.compat-1.3.min.js +0 -6
  232. data/templates/jquery/jquery.flash_messages.js +0 -5
  233. data/templates/jquery/jquery.flash_messages.min.js +0 -1
  234. data/templates/jquery/jquery.history.js +0 -194
  235. data/templates/jquery/jquery.history.min.js +0 -5
@@ -12,283 +12,284 @@
12
12
 
13
13
  (function ($) {
14
14
 
15
- var action_queue = [], data_cache = {};
15
+ var action_queue = [], data_cache = {};
16
16
 
17
- // Test an object for it's constructor type. Sort of a reverse, discriminatory instanceof
18
- function isTypeOf(t, c) {
19
- if (t === undefined) {
20
- return c === 'undefined';
21
- }
22
- if (t === null) {
23
- return c === 'null';
17
+ // Test an object for it's constructor type. Sort of a reverse, discriminatory instanceof
18
+ function isTypeOf(t, c) {
19
+ if (t === undefined) {
20
+ return c === 'undefined';
21
+ }
22
+ if (t === null) {
23
+ return c === 'null';
24
+ }
25
+ return t.constructor.toString().match(new RegExp(c, 'i')) !== null;
24
26
  }
25
- return t.constructor.toString().match(new RegExp(c, 'i')) !== null;
26
- }
27
27
 
28
- // Parses declarations out of the flat attribute array
29
- function extractor(attrs, symbol) {
30
- if (!attrs || !attrs[symbol]) {
31
- return undefined;
32
- }
33
- var extract = attrs[symbol];
34
- delete attrs[symbol];
35
- return extract;
36
- }
37
-
38
- function is_selector(obj) {
39
- // Must be string of at least 2 length
40
- if (typeof obj !== "string" || obj.length < 2) {
41
- return false;
28
+ // Parses declarations out of the flat attribute array
29
+ function extractor(attrs, symbol) {
30
+ if (!attrs || !attrs[symbol]) {
31
+ return undefined;
32
+ }
33
+ var extract = attrs[symbol];
34
+ delete attrs[symbol];
35
+ return extract;
42
36
  }
43
- // Must start with '.', '#', or '%'
44
- var c = obj.charAt(0);
45
- if (!(c === '.' || c === '#' || c === '%')) {
46
- return false;
37
+
38
+ function is_selector(obj) {
39
+ // Must be string of at least 2 length
40
+ if (typeof obj !== "string" || obj.length < 2) {
41
+ return false;
42
+ }
43
+ // Must start with '.', '#', or '%'
44
+ var c = obj.charAt(0);
45
+ if (!(c === '.' || c === '#' || c === '%')) {
46
+ return false;
47
+ }
48
+ return true;
47
49
  }
48
- return true;
49
- }
50
50
 
51
51
 
52
- // The workhorse that creates the node.
53
- function exec_haml(node, haml) {
52
+ // The workhorse that creates the node.
53
+ function exec_haml(node, haml) {
54
+
55
+ var css, actions, input, selector, classes, ids, tag, newnode, attributes;
54
56
 
55
- var css, actions, input, selector, classes, ids, tag, newnode, attributes;
57
+ // Shallow copy haml so we don't eat our input when we shift the array
58
+ // Also this turns "arguments" pseudo-arrays to real arrays
59
+ input = Array.prototype.slice.call(haml, 0);
56
60
 
57
- // Shallow copy haml so we don't eat our input when we shift the array
58
- // Also this turns "arguments" pseudo-arrays to real arrays
59
- input = Array.prototype.slice.call(haml, 0);
61
+ function apply_haml(parent, part) {
60
62
 
61
- function apply_haml(parent, part) {
63
+ // Ignore undefined and null, they only break things.
64
+ if (part === undefined || part === null) {
65
+ return;
66
+ }
62
67
 
63
- // Ignore undefined and null, they only break things.
64
- if (part === undefined || part === null) {
65
- return;
66
- }
68
+ // Pass dom and jquery nodes through as is
69
+ if (part.nodeType || part.jquery) {
70
+ parent.append(part);
71
+ return;
72
+ }
67
73
 
68
- // Pass dom and jquery nodes through as is
69
- if (part.nodeType || part.jquery) {
70
- parent.append(part);
71
- return;
72
- }
74
+ // Strings and numbers are text nodes
75
+ if (isTypeOf(part, 'String') && part.length > 0) {
76
+ // Strip of leading backslash
77
+ if (part[0] === '\\') {
78
+ part = part.substr(1);
79
+ }
80
+ parent.append(document.createTextNode(part));
81
+ return;
82
+ }
83
+ if (isTypeOf(part, 'Number')) {
84
+ parent.append(document.createTextNode(part));
85
+ return;
86
+ }
73
87
 
74
- // Strings and numbers are text nodes
75
- if (isTypeOf(part, 'String') && part.length > 0) {
76
- // Strip of leading backslash
77
- if (part[0] === '\\') {
78
- part = part.substr(1);
88
+ // Recursivly run arrays
89
+ if (isTypeOf(part, 'Array') && part.length > 0) {
90
+ exec_haml(parent, part);
91
+ return;
92
+ }
79
93
  }
80
- parent.append(document.createTextNode(part));
81
- return;
82
- }
83
- if (isTypeOf(part, 'Number')) {
84
- parent.append(document.createTextNode(part));
85
- return;
86
- }
87
-
88
- // Recursivly run arrays
89
- if (isTypeOf(part, 'Array') && part.length > 0) {
90
- exec_haml(parent, part);
91
- return;
92
- }
93
- }
94
94
 
95
- if (input.length && input.length > 0)
96
- {
97
- if (is_selector(input[0])) {
98
- // Pull the selector off the front
99
- // Parse out the selector information
100
- // Default tag to div if not specified
101
- selector = input.shift();
102
- classes = selector.match(/\.[^\.#]+/g);
103
- ids = selector.match(/#[^\.#]+/g);
104
- tag = selector.match(/^%([^\.#]+)/g);
105
- tag = tag ? tag[0].substr(1) : 'div';
106
-
107
- // Create the node
108
- newnode = $(document.createElement(tag));
109
-
110
- // Parse the attributes if there are any
111
- if (input.length > 0 && isTypeOf(input[0], 'Object') && !input[0].nodeType && !input[0].jquery) {
112
- attributes = input.shift();
113
- css = extractor(attributes, 'css');
114
- actions = extractor(attributes, '$');
115
- newnode.attr(attributes);
95
+ if (input.length && input.length > 0) {
96
+ if (is_selector(input[0])) {
97
+ // Pull the selector off the front
98
+ // Parse out the selector information
99
+ // Default tag to div if not specified
100
+ selector = input.shift();
101
+ classes = selector.match(/\.[^\.#]+/g);
102
+ ids = selector.match(/#[^\.#]+/g);
103
+ tag = selector.match(/^%([^\.#]+)/g);
104
+ tag = tag ? tag[0].substr(1) : 'div';
105
+
106
+ // Create the node
107
+ newnode = $(document.createElement(tag));
108
+
109
+ // Parse the attributes if there are any
110
+ if (input.length > 0 && isTypeOf(input[0], 'Object') && !input[0].nodeType && !input[0].jquery) {
111
+ attributes = input.shift();
112
+ css = extractor(attributes, 'css');
113
+ actions = extractor(attributes, '$');
114
+ newnode.attr(attributes);
115
+ }
116
+
117
+ // Add in the ids from the selector
118
+ if (ids) {
119
+ $.each(ids, function () {
120
+ var id, old_id;
121
+ id = this.substr(1);
122
+ old_id = newnode.attr('id');
123
+ if (old_id) {
124
+ newnode.attr('id', old_id + " " + id);
125
+ }
126
+ else {
127
+ newnode.attr('id', id);
128
+ }
129
+ });
130
+ }
131
+
132
+ // Add in the classes from the selector
133
+ if (classes) {
134
+ $.each(classes, function () {
135
+ newnode.addClass(this.substr(1));
136
+ });
137
+ }
138
+
139
+ // Add in any css from underscore styles
140
+ if (css) {
141
+ newnode.css(css);
142
+ }
143
+
144
+ // Move a level deeper in the dom tree
145
+ node.append(newnode);
146
+ node = newnode;
147
+
148
+ // Process jquery actions as well
149
+ if (actions) {
150
+ $.each(actions, function (method) {
151
+ action_queue.push({node: node, method: method, params: this});
152
+ });
153
+ }
154
+ }
155
+
156
+ // Add in content with recursive call
157
+ $.each(input, function () {
158
+ apply_haml(node, this);
159
+ });
160
+ }
161
+ else {
162
+ apply_haml(node, input);
116
163
  }
164
+ }
117
165
 
118
- // Add in the ids from the selector
119
- if (ids) {
120
- $.each(ids, function () {
121
- var id, old_id;
122
- id = this.substr(1);
123
- old_id = newnode.attr('id');
124
- if (old_id) {
125
- newnode.attr('id', old_id + " " + id);
166
+ // jQuery events are queued up till we're sure the node exists in the main dom. Once
167
+ // it's safe, this function is called to actually flush the queue and execute the function calls.
168
+ function flush_queue() {
169
+ $.each(action_queue, function () {
170
+ // $ is a special case that means onload
171
+ if (this.method === '$') {
172
+ this.params.apply(this.node, []);
126
173
  }
174
+ // otherwise call method on the jquery object with given params.
127
175
  else {
128
- newnode.attr('id', id);
176
+ if (!isTypeOf(this.params, 'Array')) {
177
+ this.params = [this.params];
178
+ }
179
+ this.node[this.method].apply(this.node, this.params);
129
180
  }
130
- });
131
- }
181
+ });
182
+ action_queue = [];
183
+ }
132
184
 
133
- // Add in the classes from the selector
134
- if (classes) {
135
- $.each(classes, function () {
136
- newnode.addClass(this.substr(1));
137
- });
138
- }
185
+ function real_haml(haml) {
186
+ var newnode;
139
187
 
140
- // Add in any css from underscore styles
141
- if (css) {
142
- newnode.css(css);
143
- }
188
+ // Build the dom on a non-attached node
189
+ newnode = $(document.createElement("div"));
190
+ exec_haml(newnode, haml);
144
191
 
145
- // Move a level deeper in the dom tree
146
- node.append(newnode);
147
- node = newnode;
192
+ // Then attach it's children to the page.
193
+ this.append(newnode.contents());
148
194
 
149
- // Process jquery actions as well
150
- if (actions) {
151
- $.each(actions, function (method) {
152
- action_queue.push({node: node, method: method, params: this});
153
- });
195
+ // Flush action queue once we're on the page
196
+ if (this.closest('body').length > 0) {
197
+ flush_queue();
154
198
  }
155
- }
156
199
 
157
- // Add in content with recursive call
158
- $.each(input, function () {
159
- apply_haml(node, this);
160
- });
200
+ return newnode.contents();
161
201
  }
162
- else
163
- {
164
- apply_haml(node, input);
165
- }
166
- }
167
-
168
- // jQuery events are queued up till we're sure the node exists in the main dom. Once
169
- // it's safe, this function is called to actually flush the queue and execute the function calls.
170
- function flush_queue() {
171
- $.each(action_queue, function () {
172
- // $ is a special case that means onload
173
- if (this.method === '$') {
174
- this.params.apply(this.node, []);
175
- }
176
- // otherwise call method on the jquery object with given params.
177
- else {
178
- if (!isTypeOf(this.params, 'Array')) {
179
- this.params = [this.params];
180
- }
181
- this.node[this.method].apply(this.node, this.params);
182
- }
183
- });
184
- action_queue = [];
185
- }
186
202
 
187
- function real_haml(haml) {
188
- var newnode;
189
-
190
- // Build the dom on a non-attached node
191
- newnode = $(document.createElement("div"));
192
- exec_haml(newnode, haml);
193
-
194
- // Then attach it's children to the page.
195
- this.append(newnode.contents());
196
-
197
- // Flush action queue once we're on the page
198
- if (this.closest('body').length > 0) {
199
- flush_queue();
200
- }
203
+ // Like the original haml, but returns the new nodes instead of the
204
+ // original matched set.
205
+ $.fn.insertHaml = function (/* haml1, haml2, ... */) {
206
+ return real_haml.call(this,
207
+ Array.prototype.slice.call(arguments, 0)
208
+ );
209
+ };
210
+
211
+ // Calling haml on a node converts the passed in array to dom children
212
+ $.fn.haml = function (/* haml1, haml2, ... */) {
213
+ real_haml.call(this,
214
+ Array.prototype.slice.call(arguments, 0)
215
+ );
216
+
217
+ // Return "this" to allow for chaining.
218
+ return this;
219
+
220
+ };
221
+
222
+ // static helper functions
223
+ $.haml = {
224
+ // This is a constructor to create a piece of page that is re-drawable.
225
+ // The passed in callback is the function that provides the haml input.
226
+ // Call inject() on the resulting object to place it in the haml document stream
227
+ // and call update() on the placeholder whenever you want it to redraw itself.
228
+ placeholder: function (callback) {
229
+ var children;
230
+
231
+ function inject() {
232
+ // Build the dom on a non-attached node
233
+ var node = $(document.createElement("div"));
234
+ node.haml(callback.apply(this, arguments));
235
+ children = node.contents();
236
+ return children;
237
+ }
201
238
 
202
- return newnode.contents();
203
- }
204
-
205
- // Like the original haml, but returns the new nodes instead of the
206
- // original matched set.
207
- $.fn.insertHaml = function (/* haml1, haml2, ... */) {
208
- return real_haml.call(this,
209
- Array.prototype.slice.call(arguments, 0)
210
- );
211
- };
212
-
213
- // Calling haml on a node converts the passed in array to dom children
214
- $.fn.haml = function (/* haml1, haml2, ... */) {
215
- real_haml.call(this,
216
- Array.prototype.slice.call(arguments, 0)
217
- );
218
-
219
- // Return "this" to allow for chaining.
220
- return this;
221
-
222
- };
223
-
224
- // static helper functions
225
- $.haml = {
226
- // This is a constructor to create a piece of page that is re-drawable.
227
- // The passed in callback is the function that provides the haml input.
228
- // Call inject() on the resulting object to place it in the haml document stream
229
- // and call update() on the placeholder whenever you want it to redraw itself.
230
- placeholder: function (callback) {
231
- var children;
232
-
233
- function inject() {
234
- // Build the dom on a non-attached node
235
- var node = $(document.createElement("div"));
236
- node.haml(callback.apply(this, arguments));
237
- children = node.contents();
238
- return children;
239
- }
240
-
241
- // Replace the first child node with the new children and remove other
242
- // old children if there are any.
243
- function update() {
244
- var args = arguments;
245
- $.each(children, function (i, child) {
246
- if (i === 0) {
247
- $(child).replaceWith(inject.apply(this, args));
248
- } else {
249
- $(child).remove();
250
- }
251
- });
252
- flush_queue();
253
- }
254
-
255
- return {
256
- inject: inject,
257
- update: update
258
- };
259
- },
260
-
261
- // data_provider is a function that has the form "function (on_data)" where
262
- // on_data is of the form "function (data)" so that OnDemand can call
263
- // data_provider giving it a callback, and the callback will be called with
264
- // the data when it's available.
265
- // onDemand returns functions that returns a placeholder. See above for details.
266
- onDemand: function (data_provider, loading_message) {
267
- var placeholder;
268
-
269
- loading_message = ["%div", {style: "text-align: center; cursor: wait"}, loading_message || "Loading..."];
270
-
271
- return function (renderer/*, param1, param2...*/) {
272
- var params = Array.prototype.slice.call(arguments, 1);
273
- function render_haml() {
274
- var key = Util.stringify(params);
275
- if (data_cache[key] !== undefined) {
276
- // If data is in data_cache, render directly
277
- return renderer(data_cache[key]);
278
- } else {
279
- // Otherwise put in a placeholder and then replace once the data is known
280
- function on_data(data) {
281
- data_cache[key] = data;
282
- placeholder.update();
239
+ // Replace the first child node with the new children and remove other
240
+ // old children if there are any.
241
+ function update() {
242
+ var args = arguments;
243
+ $.each(children, function (i, child) {
244
+ if (i === 0) {
245
+ $(child).replaceWith(inject.apply(this, args));
246
+ } else {
247
+ $(child).remove();
248
+ }
249
+ });
250
+ flush_queue();
283
251
  }
284
- data_provider.apply(this, [on_data].concat(params));
285
- return loading_message;
286
- }
252
+
253
+ return {
254
+ inject: inject,
255
+ update: update
256
+ };
257
+ },
258
+
259
+ // data_provider is a function that has the form "function (on_data)" where
260
+ // on_data is of the form "function (data)" so that OnDemand can call
261
+ // data_provider giving it a callback, and the callback will be called with
262
+ // the data when it's available.
263
+ // onDemand returns functions that returns a placeholder. See above for details.
264
+ onDemand: function (data_provider, loading_message) {
265
+ var placeholder;
266
+
267
+ loading_message = ["%div", {style: "text-align: center; cursor: wait"}, loading_message || "Loading..."];
268
+
269
+ return function (renderer/*, param1, param2...*/) {
270
+ var params = Array.prototype.slice.call(arguments, 1);
271
+
272
+ function render_haml() {
273
+ var key = Util.stringify(params);
274
+ if (data_cache[key] !== undefined) {
275
+ // If data is in data_cache, render directly
276
+ return renderer(data_cache[key]);
277
+ } else {
278
+ // Otherwise put in a placeholder and then replace once the data is known
279
+ function on_data(data) {
280
+ data_cache[key] = data;
281
+ placeholder.update();
282
+ }
283
+
284
+ data_provider.apply(this, [on_data].concat(params));
285
+ return loading_message;
286
+ }
287
+ }
288
+
289
+ placeholder = $.haml.placeholder(render_haml);
290
+ return placeholder;
291
+ };
287
292
  }
288
- placeholder = $.haml.placeholder(render_haml);
289
- return placeholder;
290
- };
291
- }
292
- };
293
+ };
293
294
 
294
295
  }(jQuery));