somatics3-generators 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (181) hide show
  1. data/.document +5 -0
  2. data/.gitignore +21 -0
  3. data/LICENSE +20 -0
  4. data/README.rdoc +17 -0
  5. data/Rakefile +60 -0
  6. data/VERSION +1 -0
  7. data/bin/somatics +21 -0
  8. data/bin/somatify +21 -0
  9. data/lib/generators/somatics/authenticated/authenticated_generator.rb +220 -0
  10. data/lib/generators/somatics/authenticated/templates/mailer.rb +25 -0
  11. data/lib/generators/somatics/authenticated/templates/migration.rb +26 -0
  12. data/lib/generators/somatics/authenticated/templates/model.rb +83 -0
  13. data/lib/generators/somatics/authenticated/templates/observer.rb +11 -0
  14. data/lib/generators/somatics/authenticated/templates/test/mailer_test.rb +31 -0
  15. data/lib/generators/somatics/authenticated/templates/test/model_functional_test.rb +93 -0
  16. data/lib/generators/somatics/authenticated/templates/test/sessions_functional_test.rb +82 -0
  17. data/lib/generators/somatics/authenticated/templates/test/unit_test.rb +164 -0
  18. data/lib/generators/somatics/authenticated/templates/test/users.yml +60 -0
  19. data/lib/generators/somatics/authenticated_controller/authenticated_controller_generator.rb +323 -0
  20. data/lib/generators/somatics/authenticated_controller/templates/_model_partial.html.erb +8 -0
  21. data/lib/generators/somatics/authenticated_controller/templates/activation.erb +3 -0
  22. data/lib/generators/somatics/authenticated_controller/templates/authenticated_system.rb +189 -0
  23. data/lib/generators/somatics/authenticated_controller/templates/authenticated_test_helper.rb +10 -0
  24. data/lib/generators/somatics/authenticated_controller/templates/config/initializers/site_keys.rb +38 -0
  25. data/lib/generators/somatics/authenticated_controller/templates/controller.rb +55 -0
  26. data/lib/generators/somatics/authenticated_controller/templates/helper.rb +91 -0
  27. data/lib/generators/somatics/authenticated_controller/templates/login.html.erb +29 -0
  28. data/lib/generators/somatics/authenticated_controller/templates/mailer.rb +25 -0
  29. data/lib/generators/somatics/authenticated_controller/templates/migration.rb +26 -0
  30. data/lib/generators/somatics/authenticated_controller/templates/model.rb +83 -0
  31. data/lib/generators/somatics/authenticated_controller/templates/observer.rb +11 -0
  32. data/lib/generators/somatics/authenticated_controller/templates/session_helper.rb +2 -0
  33. data/lib/generators/somatics/authenticated_controller/templates/sessions_controller.rb +43 -0
  34. data/lib/generators/somatics/authenticated_controller/templates/signup.html.erb +19 -0
  35. data/lib/generators/somatics/authenticated_controller/templates/signup_notification.erb +8 -0
  36. data/lib/generators/somatics/authenticated_controller/templates/test/mailer_test.rb +31 -0
  37. data/lib/generators/somatics/authenticated_controller/templates/test/model_functional_test.rb +93 -0
  38. data/lib/generators/somatics/authenticated_controller/templates/test/sessions_functional_test.rb +82 -0
  39. data/lib/generators/somatics/authenticated_controller/templates/test/unit_test.rb +164 -0
  40. data/lib/generators/somatics/authenticated_controller/templates/test/users.yml +60 -0
  41. data/lib/generators/somatics/helper/helper_generator.rb +16 -0
  42. data/lib/generators/somatics/install/install_generator.rb +65 -0
  43. data/lib/generators/somatics/install/templates/config/locales/somatics_en.yml +33 -0
  44. data/lib/generators/somatics/install/templates/config/locales/somatics_zh-TW.yml +33 -0
  45. data/lib/generators/somatics/install/templates/controller_admin.rb +16 -0
  46. data/lib/generators/somatics/install/templates/controller_home.rb +4 -0
  47. data/lib/generators/somatics/install/templates/helper_admin.rb +68 -0
  48. data/lib/generators/somatics/install/templates/layout_admin.html.erb +88 -0
  49. data/lib/generators/somatics/install/templates/lib/somatic_link_renderer.rb +42 -0
  50. data/lib/generators/somatics/install/templates/partial_menu.html.erb +1 -0
  51. data/lib/generators/somatics/install/templates/public/images/somatics/add.png +0 -0
  52. data/lib/generators/somatics/install/templates/public/images/somatics/arrow_collapsed.png +0 -0
  53. data/lib/generators/somatics/install/templates/public/images/somatics/arrow_expanded.png +0 -0
  54. data/lib/generators/somatics/install/templates/public/images/somatics/attachment.png +0 -0
  55. data/lib/generators/somatics/install/templates/public/images/somatics/bullet_arrow_left.png +0 -0
  56. data/lib/generators/somatics/install/templates/public/images/somatics/bullet_arrow_right.png +0 -0
  57. data/lib/generators/somatics/install/templates/public/images/somatics/bullet_diamond.png +0 -0
  58. data/lib/generators/somatics/install/templates/public/images/somatics/bullet_end.png +0 -0
  59. data/lib/generators/somatics/install/templates/public/images/somatics/bullet_go.png +0 -0
  60. data/lib/generators/somatics/install/templates/public/images/somatics/bullet_toggle_minus.png +0 -0
  61. data/lib/generators/somatics/install/templates/public/images/somatics/bullet_toggle_plus.png +0 -0
  62. data/lib/generators/somatics/install/templates/public/images/somatics/c.png +0 -0
  63. data/lib/generators/somatics/install/templates/public/images/somatics/cancel.png +0 -0
  64. data/lib/generators/somatics/install/templates/public/images/somatics/changeset.png +0 -0
  65. data/lib/generators/somatics/install/templates/public/images/somatics/comment.png +0 -0
  66. data/lib/generators/somatics/install/templates/public/images/somatics/comments.png +0 -0
  67. data/lib/generators/somatics/install/templates/public/images/somatics/content-left.png +0 -0
  68. data/lib/generators/somatics/install/templates/public/images/somatics/content-right.png +0 -0
  69. data/lib/generators/somatics/install/templates/public/images/somatics/copy.png +0 -0
  70. data/lib/generators/somatics/install/templates/public/images/somatics/csharp.png +0 -0
  71. data/lib/generators/somatics/install/templates/public/images/somatics/database_key.png +0 -0
  72. data/lib/generators/somatics/install/templates/public/images/somatics/default.png +0 -0
  73. data/lib/generators/somatics/install/templates/public/images/somatics/delete.png +0 -0
  74. data/lib/generators/somatics/install/templates/public/images/somatics/document.png +0 -0
  75. data/lib/generators/somatics/install/templates/public/images/somatics/draft.png +0 -0
  76. data/lib/generators/somatics/install/templates/public/images/somatics/duplicate.png +0 -0
  77. data/lib/generators/somatics/install/templates/public/images/somatics/edit.png +0 -0
  78. data/lib/generators/somatics/install/templates/public/images/somatics/exclamation.png +0 -0
  79. data/lib/generators/somatics/install/templates/public/images/somatics/external.png +0 -0
  80. data/lib/generators/somatics/install/templates/public/images/somatics/fav.png +0 -0
  81. data/lib/generators/somatics/install/templates/public/images/somatics/fav_off.png +0 -0
  82. data/lib/generators/somatics/install/templates/public/images/somatics/feed.png +0 -0
  83. data/lib/generators/somatics/install/templates/public/images/somatics/folder.png +0 -0
  84. data/lib/generators/somatics/install/templates/public/images/somatics/folder_open.png +0 -0
  85. data/lib/generators/somatics/install/templates/public/images/somatics/footer-bg.png +0 -0
  86. data/lib/generators/somatics/install/templates/public/images/somatics/footer-left.png +0 -0
  87. data/lib/generators/somatics/install/templates/public/images/somatics/footer-right.png +0 -0
  88. data/lib/generators/somatics/install/templates/public/images/somatics/group.png +0 -0
  89. data/lib/generators/somatics/install/templates/public/images/somatics/help.png +0 -0
  90. data/lib/generators/somatics/install/templates/public/images/somatics/history.png +0 -0
  91. data/lib/generators/somatics/install/templates/public/images/somatics/image.png +0 -0
  92. data/lib/generators/somatics/install/templates/public/images/somatics/lightning.png +0 -0
  93. data/lib/generators/somatics/install/templates/public/images/somatics/link.png +0 -0
  94. data/lib/generators/somatics/install/templates/public/images/somatics/loading.gif +0 -0
  95. data/lib/generators/somatics/install/templates/public/images/somatics/locked.png +0 -0
  96. data/lib/generators/somatics/install/templates/public/images/somatics/message.png +0 -0
  97. data/lib/generators/somatics/install/templates/public/images/somatics/milestone.png +0 -0
  98. data/lib/generators/somatics/install/templates/public/images/somatics/move.png +0 -0
  99. data/lib/generators/somatics/install/templates/public/images/somatics/news.png +0 -0
  100. data/lib/generators/somatics/install/templates/public/images/somatics/openid-bg.gif +0 -0
  101. data/lib/generators/somatics/install/templates/public/images/somatics/package.png +0 -0
  102. data/lib/generators/somatics/install/templates/public/images/somatics/pdf.png +0 -0
  103. data/lib/generators/somatics/install/templates/public/images/somatics/php.png +0 -0
  104. data/lib/generators/somatics/install/templates/public/images/somatics/plugin.png +0 -0
  105. data/lib/generators/somatics/install/templates/public/images/somatics/projects.png +0 -0
  106. data/lib/generators/somatics/install/templates/public/images/somatics/rails.png +0 -0
  107. data/lib/generators/somatics/install/templates/public/images/somatics/reload.png +0 -0
  108. data/lib/generators/somatics/install/templates/public/images/somatics/report.png +0 -0
  109. data/lib/generators/somatics/install/templates/public/images/somatics/ruby.png +0 -0
  110. data/lib/generators/somatics/install/templates/public/images/somatics/save.png +0 -0
  111. data/lib/generators/somatics/install/templates/public/images/somatics/sort_asc.png +0 -0
  112. data/lib/generators/somatics/install/templates/public/images/somatics/sort_desc.png +0 -0
  113. data/lib/generators/somatics/install/templates/public/images/somatics/stats.png +0 -0
  114. data/lib/generators/somatics/install/templates/public/images/somatics/table_multiple.png +0 -0
  115. data/lib/generators/somatics/install/templates/public/images/somatics/task_done.png +0 -0
  116. data/lib/generators/somatics/install/templates/public/images/somatics/task_late.png +0 -0
  117. data/lib/generators/somatics/install/templates/public/images/somatics/task_parent_end.png +0 -0
  118. data/lib/generators/somatics/install/templates/public/images/somatics/task_todo.png +0 -0
  119. data/lib/generators/somatics/install/templates/public/images/somatics/text.png +0 -0
  120. data/lib/generators/somatics/install/templates/public/images/somatics/text_list_bullets.png +0 -0
  121. data/lib/generators/somatics/install/templates/public/images/somatics/textfield.png +0 -0
  122. data/lib/generators/somatics/install/templates/public/images/somatics/ticket.png +0 -0
  123. data/lib/generators/somatics/install/templates/public/images/somatics/ticket_checked.png +0 -0
  124. data/lib/generators/somatics/install/templates/public/images/somatics/ticket_edit.png +0 -0
  125. data/lib/generators/somatics/install/templates/public/images/somatics/ticket_go.png +0 -0
  126. data/lib/generators/somatics/install/templates/public/images/somatics/ticket_note.png +0 -0
  127. data/lib/generators/somatics/install/templates/public/images/somatics/time.png +0 -0
  128. data/lib/generators/somatics/install/templates/public/images/somatics/time_add.png +0 -0
  129. data/lib/generators/somatics/install/templates/public/images/somatics/toggle_check.png +0 -0
  130. data/lib/generators/somatics/install/templates/public/images/somatics/true.png +0 -0
  131. data/lib/generators/somatics/install/templates/public/images/somatics/unlock.png +0 -0
  132. data/lib/generators/somatics/install/templates/public/images/somatics/user.png +0 -0
  133. data/lib/generators/somatics/install/templates/public/images/somatics/warning.png +0 -0
  134. data/lib/generators/somatics/install/templates/public/images/somatics/wiki_edit.png +0 -0
  135. data/lib/generators/somatics/install/templates/public/images/somatics/xml.png +0 -0
  136. data/lib/generators/somatics/install/templates/public/images/somatics/zip.png +0 -0
  137. data/lib/generators/somatics/install/templates/public/images/somatics/zoom_in.png +0 -0
  138. data/lib/generators/somatics/install/templates/public/javascripts/somatics/base.js +231 -0
  139. data/lib/generators/somatics/install/templates/public/javascripts/somatics/context_menu.js +237 -0
  140. data/lib/generators/somatics/install/templates/public/javascripts/somatics/controls.js +965 -0
  141. data/lib/generators/somatics/install/templates/public/javascripts/somatics/dragdrop.js +974 -0
  142. data/lib/generators/somatics/install/templates/public/javascripts/somatics/effects.js +1123 -0
  143. data/lib/generators/somatics/install/templates/public/javascripts/somatics/prototype.js +6001 -0
  144. data/lib/generators/somatics/install/templates/public/javascripts/somatics/rails.js +175 -0
  145. data/lib/generators/somatics/install/templates/public/javascripts/somatics/select_list_move.js +82 -0
  146. data/lib/generators/somatics/install/templates/public/stylesheets/somatics/base.css +948 -0
  147. data/lib/generators/somatics/install/templates/public/stylesheets/somatics/context_menu.css +52 -0
  148. data/lib/generators/somatics/install/templates/public/stylesheets/somatics/csshover.htc +122 -0
  149. data/lib/generators/somatics/install/templates/public/stylesheets/somatics/jstoolbar.css +95 -0
  150. data/lib/generators/somatics/install/templates/view_index.html.erb +1 -0
  151. data/lib/generators/somatics/scaffold/scaffold_generator.rb +25 -0
  152. data/lib/generators/somatics/scaffold/templates/_form.html.erb +23 -0
  153. data/lib/generators/somatics/scaffold/templates/edit.html.erb +6 -0
  154. data/lib/generators/somatics/scaffold/templates/index.html.erb +27 -0
  155. data/lib/generators/somatics/scaffold/templates/new.html.erb +5 -0
  156. data/lib/generators/somatics/scaffold/templates/show.html.erb +12 -0
  157. data/lib/generators/somatics/scaffold_controller/USAGE +20 -0
  158. data/lib/generators/somatics/scaffold_controller/scaffold_controller_generator.rb +137 -0
  159. data/lib/generators/somatics/scaffold_controller/templates/builder_index.pdf.prawn +25 -0
  160. data/lib/generators/somatics/scaffold_controller/templates/builder_index.xls.builder +24 -0
  161. data/lib/generators/somatics/scaffold_controller/templates/builder_index.xml.builder +10 -0
  162. data/lib/generators/somatics/scaffold_controller/templates/controller.rb +140 -0
  163. data/lib/generators/somatics/scaffold_controller/templates/locales_en.yml +17 -0
  164. data/lib/generators/somatics/scaffold_controller/templates/locales_zh-TW.yml +20 -0
  165. data/lib/generators/somatics/scaffold_controller/templates/partial_bulk.html.erb +12 -0
  166. data/lib/generators/somatics/scaffold_controller/templates/partial_edit.html.erb +7 -0
  167. data/lib/generators/somatics/scaffold_controller/templates/partial_form.html.erb +13 -0
  168. data/lib/generators/somatics/scaffold_controller/templates/partial_list.html.erb +42 -0
  169. data/lib/generators/somatics/scaffold_controller/templates/partial_menu.html.erb +1 -0
  170. data/lib/generators/somatics/scaffold_controller/templates/partial_show.html.erb +31 -0
  171. data/lib/generators/somatics/scaffold_controller/templates/view_edit.html.erb +24 -0
  172. data/lib/generators/somatics/scaffold_controller/templates/view_index.html.erb +28 -0
  173. data/lib/generators/somatics/scaffold_controller/templates/view_new.html.erb +14 -0
  174. data/lib/generators/somatics/scaffold_controller/templates/view_show.html.erb +24 -0
  175. data/lib/generators/somatics.rb +95 -0
  176. data/lib/somatics3-generators.rb +19 -0
  177. data/somatics3-generators.gemspec +223 -0
  178. data/templates/somatics.rb +128 -0
  179. data/test/helper.rb +10 -0
  180. data/test/test_somatics3-generators.rb +7 -0
  181. metadata +301 -0
@@ -0,0 +1,52 @@
1
+ #context-menu { position: absolute; z-index: 40; font-size: 0.9em;}
2
+
3
+ #context-menu ul, #context-menu li, #context-menu a {
4
+ display:block;
5
+ margin:0;
6
+ padding:0;
7
+ border:0;
8
+ }
9
+
10
+ #context-menu ul {
11
+ width:150px;
12
+ border-top:1px solid #ddd;
13
+ border-left:1px solid #ddd;
14
+ border-bottom:1px solid #777;
15
+ border-right:1px solid #777;
16
+ background:white;
17
+ list-style:none;
18
+ }
19
+
20
+ #context-menu li {
21
+ position:relative;
22
+ padding:1px;
23
+ z-index:39;
24
+ }
25
+ #context-menu li.folder ul { position:absolute; left:168px; /* IE6 */ top:-2px; }
26
+ #context-menu li.folder>ul { left:148px; }
27
+
28
+ #context-menu.reverse-y li.folder>ul { top:auto; bottom:0; }
29
+ #context-menu.reverse-x li.folder ul { left:auto; right:168px; /* IE6 */ }
30
+ #context-menu.reverse-x li.folder>ul { right:148px; }
31
+
32
+ #context-menu a {
33
+ border:1px solid white;
34
+ text-decoration:none !important;
35
+ background-repeat: no-repeat;
36
+ background-position: 1px 50%;
37
+ padding: 1px 0px 1px 20px;
38
+ width:100%; /* IE */
39
+ }
40
+ #context-menu li>a { width:auto; } /* others */
41
+ #context-menu a.disabled, #context-menu a.disabled:hover {color: #ccc;}
42
+ #context-menu li a.submenu { background:url("/images/admin/bullet_arrow_right.png") right no-repeat; }
43
+ #context-menu a:hover { border-color:gray; background-color:#eee; color:#2A5685; }
44
+ #context-menu li.folder a:hover { background-color:#eee; }
45
+ #context-menu li.folder:hover { z-index:40; }
46
+ #context-menu ul ul, #context-menu li:hover ul ul { display:none; }
47
+ #context-menu li:hover ul, #context-menu li:hover li:hover ul { display:block; }
48
+
49
+ /* selected element */
50
+ .context-menu-selection { background-color:#507AAA !important; color:#f8f8f8 !important; }
51
+ .context-menu-selection a, .context-menu-selection a:hover { color:#f8f8f8 !important; }
52
+ .context-menu-selection:hover { background-color:#507AAA !important; color:#f8f8f8 !important; }
@@ -0,0 +1,122 @@
1
+ <attach event="ondocumentready" handler="parseStylesheets" />
2
+ <script>
3
+ /**
4
+ * Whatever:hover - V1.42.060206 - hover & active
5
+ * ------------------------------------------------------------
6
+ * (c) 2005 - Peter Nederlof
7
+ * Peterned - http://www.xs4all.nl/~peterned/
8
+ * License - http://creativecommons.org/licenses/LGPL/2.1/
9
+ *
10
+ * Whatever:hover is free software; you can redistribute it and/or
11
+ * modify it under the terms of the GNU Lesser General Public
12
+ * License as published by the Free Software Foundation; either
13
+ * version 2.1 of the License, or (at your option) any later version.
14
+ *
15
+ * Whatever:hover is distributed in the hope that it will be useful,
16
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18
+ * Lesser General Public License for more details.
19
+ *
20
+ * Credits and thanks to:
21
+ * Arnoud Berendsen, Martin Reurings, Robert Hanson
22
+ *
23
+ * howto: body { behavior:url("csshover.htc"); }
24
+ * ------------------------------------------------------------
25
+ */
26
+
27
+ var csshoverReg = /(^|\s)(([^a]([^ ]+)?)|(a([^#.][^ ]+)+)):(hover|active)/i,
28
+ currentSheet, doc = window.document, hoverEvents = [], activators = {
29
+ onhover:{on:'onmouseover', off:'onmouseout'},
30
+ onactive:{on:'onmousedown', off:'onmouseup'}
31
+ }
32
+
33
+ function parseStylesheets() {
34
+ if(!/MSIE (5|6)/.test(navigator.userAgent)) return;
35
+ window.attachEvent('onunload', unhookHoverEvents);
36
+ var sheets = doc.styleSheets, l = sheets.length;
37
+ for(var i=0; i<l; i++)
38
+ parseStylesheet(sheets[i]);
39
+ }
40
+ function parseStylesheet(sheet) {
41
+ if(sheet.imports) {
42
+ try {
43
+ var imports = sheet.imports, l = imports.length;
44
+ for(var i=0; i<l; i++) parseStylesheet(sheet.imports[i]);
45
+ } catch(securityException){}
46
+ }
47
+
48
+ try {
49
+ var rules = (currentSheet = sheet).rules, l = rules.length;
50
+ for(var j=0; j<l; j++) parseCSSRule(rules[j]);
51
+ } catch(securityException){}
52
+ }
53
+
54
+ function parseCSSRule(rule) {
55
+ var select = rule.selectorText, style = rule.style.cssText;
56
+ if(!csshoverReg.test(select) || !style) return;
57
+
58
+ var pseudo = select.replace(/[^:]+:([a-z-]+).*/i, 'on$1');
59
+ var newSelect = select.replace(/(\.([a-z0-9_-]+):[a-z]+)|(:[a-z]+)/gi, '.$2' + pseudo);
60
+ var className = (/\.([a-z0-9_-]*on(hover|active))/i).exec(newSelect)[1];
61
+ var affected = select.replace(/:(hover|active).*$/, '');
62
+ var elements = getElementsBySelect(affected);
63
+ if(elements.length == 0) return;
64
+
65
+ currentSheet.addRule(newSelect, style);
66
+ for(var i=0; i<elements.length; i++)
67
+ new HoverElement(elements[i], className, activators[pseudo]);
68
+ }
69
+
70
+ function HoverElement(node, className, events) {
71
+ if(!node.hovers) node.hovers = {};
72
+ if(node.hovers[className]) return;
73
+ node.hovers[className] = true;
74
+ hookHoverEvent(node, events.on, function() { node.className += ' ' + className; });
75
+ hookHoverEvent(node, events.off, function() { node.className = node.className.replace(new RegExp('\\s+'+className, 'g'),''); });
76
+ }
77
+ function hookHoverEvent(node, type, handler) {
78
+ node.attachEvent(type, handler);
79
+ hoverEvents[hoverEvents.length] = {
80
+ node:node, type:type, handler:handler
81
+ };
82
+ }
83
+
84
+ function unhookHoverEvents() {
85
+ for(var e,i=0; i<hoverEvents.length; i++) {
86
+ e = hoverEvents[i];
87
+ e.node.detachEvent(e.type, e.handler);
88
+ }
89
+ }
90
+
91
+ function getElementsBySelect(rule) {
92
+ var parts, nodes = [doc];
93
+ parts = rule.split(' ');
94
+ for(var i=0; i<parts.length; i++) {
95
+ nodes = getSelectedNodes(parts[i], nodes);
96
+ } return nodes;
97
+ }
98
+ function getSelectedNodes(select, elements) {
99
+ var result, node, nodes = [];
100
+ var identify = (/\#([a-z0-9_-]+)/i).exec(select);
101
+ if(identify) {
102
+ var element = doc.getElementById(identify[1]);
103
+ return element? [element]:nodes;
104
+ }
105
+
106
+ var classname = (/\.([a-z0-9_-]+)/i).exec(select);
107
+ var tagName = select.replace(/(\.|\#|\:)[a-z0-9_-]+/i, '');
108
+ var classReg = classname? new RegExp('\\b' + classname[1] + '\\b'):false;
109
+ for(var i=0; i<elements.length; i++) {
110
+ result = tagName? elements[i].all.tags(tagName):elements[i].all;
111
+ for(var j=0; j<result.length; j++) {
112
+ node = result[j];
113
+ if(classReg && !classReg.test(node.className)) continue;
114
+ nodes[nodes.length] = node;
115
+ }
116
+ }
117
+
118
+ return nodes;
119
+ }
120
+
121
+ window.parseStylesheets = parseStylesheets;
122
+ </script>
@@ -0,0 +1,95 @@
1
+ .jstEditor {
2
+ padding-left: 0px;
3
+ }
4
+ .jstEditor textarea, .jstEditor iframe {
5
+ margin: 0;
6
+ }
7
+
8
+ .jstHandle {
9
+ height: 10px;
10
+ font-size: 0.1em;
11
+ cursor: s-resize;
12
+ /*background: transparent url(img/resizer.png) no-repeat 45% 50%;*/
13
+ }
14
+
15
+ .jstElements {
16
+ padding: 3px 3px;
17
+ }
18
+
19
+ .jstElements button {
20
+ margin-right : 6px;
21
+ width : 24px;
22
+ height: 24px;
23
+ padding: 4px;
24
+ border-style: solid;
25
+ border-width: 1px;
26
+ border-color: #ddd;
27
+ background-color : #f7f7f7;
28
+ background-position : 50% 50%;
29
+ background-repeat: no-repeat;
30
+ }
31
+ .jstElements button:hover {
32
+ border-color : #000;
33
+ }
34
+ .jstElements button span {
35
+ display : none;
36
+ }
37
+ .jstElements span {
38
+ display : inline;
39
+ }
40
+
41
+ .jstSpacer {
42
+ width : 0px;
43
+ font-size: 1px;
44
+ margin-right: 4px;
45
+ }
46
+
47
+ .jstElements .help { float: right; margin-right: 1em; padding-top: 8px; font-size: 0.9em; }
48
+
49
+ /* Buttons
50
+ -------------------------------------------------------- */
51
+ .jstb_strong {
52
+ background-image: url(/images/admin/jstoolbar/bt_strong.png);
53
+ }
54
+ .jstb_em {
55
+ background-image: url(/images/admin/jstoolbar/bt_em.png);
56
+ }
57
+ .jstb_ins {
58
+ background-image: url(/images/admin/jstoolbar/bt_ins.png);
59
+ }
60
+ .jstb_del {
61
+ background-image: url(/images/admin/jstoolbar/bt_del.png);
62
+ }
63
+ .jstb_code {
64
+ background-image: url(/images/admin/jstoolbar/bt_code.png);
65
+ }
66
+ .jstb_h1 {
67
+ background-image: url(/images/admin/jstoolbar/bt_h1.png);
68
+ }
69
+ .jstb_h2 {
70
+ background-image: url(/images/admin/jstoolbar/bt_h2.png);
71
+ }
72
+ .jstb_h3 {
73
+ background-image: url(/images/admin/jstoolbar/bt_h3.png);
74
+ }
75
+ .jstb_ul {
76
+ background-image: url(/images/admin/jstoolbar/bt_ul.png);
77
+ }
78
+ .jstb_ol {
79
+ background-image: url(/images/admin/jstoolbar/bt_ol.png);
80
+ }
81
+ .jstb_bq {
82
+ background-image: url(/images/admin/jstoolbar/bt_bq.png);
83
+ }
84
+ .jstb_unbq {
85
+ background-image: url(/images/admin/jstoolbar/bt_bq_remove.png);
86
+ }
87
+ .jstb_pre {
88
+ background-image: url(/images/admin/jstoolbar/bt_pre.png);
89
+ }
90
+ .jstb_link {
91
+ background-image: url(/images/admin/jstoolbar/bt_link.png);
92
+ }
93
+ .jstb_img {
94
+ background-image: url(/images/admin/jstoolbar/bt_img.png);
95
+ }
@@ -0,0 +1 @@
1
+ <h2><%%= t('Overview') %></h2>
@@ -0,0 +1,25 @@
1
+ require 'generators/somatics'
2
+ require 'rails/generators/rails/resource/resource_generator'
3
+ require 'rails/generators/resource_helpers'
4
+
5
+ module Somatics
6
+ module Generators
7
+ class ScaffoldGenerator < Rails::Generators::ModelGenerator #metagenerator
8
+ include Rails::Generators::ResourceHelpers
9
+
10
+ hook_for :scaffold_controller, :required => true # do |controller|
11
+ # invoke controller, [ controller_name, attributes], {:namespace => 'admin' }
12
+ # end
13
+
14
+ #
15
+ # class_option :namespace, :banner => "NAME", :type => :string, :required => false, :default => "admin",
16
+ # :desc => "namespace to generate the controller for"
17
+
18
+ # include SomaticsHelpers
19
+
20
+ # remove_hook_for :resource_controller
21
+ # remove_class_option :actions
22
+
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,23 @@
1
+ <%%= form_for(@<%= singular_name %>) do |f| %>
2
+ <%% if @<%= singular_name %>.errors.any? %>
3
+ <div id="error_explanation">
4
+ <h2><%%= pluralize(@<%= singular_name %>.errors.count, "error") %> prohibited this <%= singular_name %> from being saved:</h2>
5
+
6
+ <ul>
7
+ <%% @<%= singular_name %>.errors.full_messages.each do |msg| %>
8
+ <li><%%= msg %></li>
9
+ <%% end %>
10
+ </ul>
11
+ </div>
12
+ <%% end %>
13
+
14
+ <% for attribute in attributes -%>
15
+ <div class="field">
16
+ <%%= f.label :<%= attribute.name %> %><br />
17
+ <%%= f.<%= attribute.field_type %> :<%= attribute.name %> %>
18
+ </div>
19
+ <% end -%>
20
+ <div class="actions">
21
+ <%%= f.submit %>
22
+ </div>
23
+ <%% end %>
@@ -0,0 +1,6 @@
1
+ <h1>Editing <%= singular_name %></h1>
2
+
3
+ <%%= render 'form' %>
4
+
5
+ <%%= link_to 'Show', @<%= singular_name %> %> |
6
+ <%%= link_to 'Back', <%= plural_name %>_path %>
@@ -0,0 +1,27 @@
1
+ <h1>Listing <%= plural_name %></h1>
2
+
3
+ <table>
4
+ <tr>
5
+ <% for attribute in attributes -%>
6
+ <th><%= attribute.human_name %></th>
7
+ <% end -%>
8
+ <th></th>
9
+ <th></th>
10
+ <th></th>
11
+ </tr>
12
+
13
+ <%% @<%= plural_name %>.each do |<%= singular_name %>| %>
14
+ <tr>
15
+ <% for attribute in attributes -%>
16
+ <td><%%= <%= singular_name %>.<%= attribute.name %> %></td>
17
+ <% end -%>
18
+ <td><%%= link_to 'Show', <%= singular_name %> %></td>
19
+ <td><%%= link_to 'Edit', edit_<%= singular_name %>_path(<%= singular_name %>) %></td>
20
+ <td><%%= link_to 'Destroy', <%= singular_name %>, :confirm => 'Are you sure?', :method => :delete %></td>
21
+ </tr>
22
+ <%% end %>
23
+ </table>
24
+
25
+ <br />
26
+
27
+ <%%= link_to 'New <%= human_name %>', new_<%= singular_name %>_path %>
@@ -0,0 +1,5 @@
1
+ <h1>New <%= singular_name %></h1>
2
+
3
+ <%%= render 'form' %>
4
+
5
+ <%%= link_to 'Back', <%= plural_name %>_path %>
@@ -0,0 +1,12 @@
1
+ <p id="notice"><%%= notice %></p>
2
+
3
+ <% for attribute in attributes -%>
4
+ <p>
5
+ <b><%= attribute.human_name %>:</b>
6
+ <%%= @<%= singular_name %>.<%= attribute.name %> %>
7
+ </p>
8
+
9
+ <% end -%>
10
+
11
+ <%%= link_to 'Edit', edit_<%= singular_name %>_path(@<%= singular_name %>) %> |
12
+ <%%= link_to 'Back', <%= plural_name %>_path %>
@@ -0,0 +1,20 @@
1
+ Description:
2
+ Stubs out a scaffolded controller and its views. Pass the model name,
3
+ either CamelCased or under_scored, and a list of views as arguments.
4
+ The controller name is retrieved as a pluralized version of the model
5
+ name.
6
+
7
+ To create a controller within a module, specify the model name as a
8
+ path like 'parent_module/controller_name'.
9
+
10
+ This generates a controller class in app/controllers and invokes helper,
11
+ template engine and test framework generators.
12
+
13
+ Example:
14
+ `rails generate scaffold_controller CreditCard`
15
+
16
+ Credit card controller with URLs like /credit_card/debit.
17
+ Controller: app/controllers/credit_cards_controller.rb
18
+ Functional Test: test/functional/credit_cards_controller_test.rb
19
+ Views: app/views/credit_cards/index.html.erb [...]
20
+ Helper: app/helpers/credit_cards_helper.rb
@@ -0,0 +1,137 @@
1
+ require 'generators/somatics'
2
+ require 'rails/generators/resource_helpers'
3
+
4
+ module Somatics
5
+ module Generators
6
+ class ScaffoldControllerGenerator < Rails::Generators::NamedBase
7
+ extend TemplatePath
8
+ include Rails::Generators::ResourceHelpers
9
+
10
+ check_class_collision :suffix => "Controller"
11
+ # remove_hook_for :template_engine, :test_framework, :helper # TODO
12
+
13
+ argument :attributes, :type => :array, :default => [], :banner => "field:type field:type"
14
+
15
+ class_option :orm, :banner => "NAME", :type => :string, :required => true,
16
+ :desc => "ORM to generate the controller for"
17
+ class_option :namespace, :banner => "NAME", :type => :string, :required => false, :default => "admin", :desc => "namespace to generate the controller for"
18
+ class_option :header, :type => :boolean, :default => false, :desc => "generate header menu tab"
19
+ class_option :locales, :type => :array, :banner => "LOCALE LOCALE", :default => %w( en zh-TW ),
20
+ :desc => "Supported Locales"
21
+
22
+ def create_controller_files
23
+ template 'controller.rb', File.join('app/controllers', options[:namespace], class_path, "#{controller_file_name}_controller.rb")
24
+ end
25
+ def create_view_files
26
+ template "partial_form.html.erb", File.join('app/views',options[:namespace], class_path, controller_file_name, "_form.html.erb" )
27
+ template "partial_list.html.erb", File.join('app/views',options[:namespace], class_path, controller_file_name, "_list.html.erb" )
28
+ template "partial_show.html.erb", File.join('app/views',options[:namespace], class_path, controller_file_name, "_show.html.erb" )
29
+ template "partial_edit.html.erb", File.join('app/views',options[:namespace], class_path, controller_file_name, "_edit.html.erb" )
30
+ template "partial_bulk.html.erb", File.join('app/views',options[:namespace], class_path, controller_file_name, "_bulk.html.erb" )
31
+ template "view_index.html.erb", File.join('app/views',options[:namespace], class_path, controller_file_name, "index.html.erb" )
32
+ template "view_new.html.erb", File.join('app/views',options[:namespace], class_path, controller_file_name, "new.html.erb" )
33
+ template "view_show.html.erb", File.join('app/views',options[:namespace], class_path, controller_file_name, "show.html.erb" )
34
+ template "view_edit.html.erb", File.join('app/views',options[:namespace], class_path, controller_file_name, "edit.html.erb" )
35
+ template "builder_index.xml.builder", File.join('app/views',options[:namespace], class_path, controller_file_name, "index.xml.builder")
36
+ template "builder_index.xls.builder", File.join('app/views',options[:namespace], class_path, controller_file_name, "index.xls.builder")
37
+ template "builder_index.pdf.prawn", File.join('app/views',options[:namespace], class_path, controller_file_name, "index.pdf.prawn" )
38
+ end
39
+
40
+ def add_header_menu_tab
41
+ look_for = "<li><%= link_to '#{file_name.humanize}', '/admin/#{controller_file_name}', :class => (match_controller?('#{controller_file_name}')) ? 'selected' : ''%></li>\n"
42
+ gsub_file File.join('app/views/admin/shared', "_menu.html.erb"), look_for, ''
43
+ append_file File.join('app/views/admin/shared', "_menu.html.erb"), look_for
44
+ end
45
+
46
+ def create_locales_files
47
+ # # Locales templates
48
+ options[:locales].each do |locale|
49
+ template "locales_#{locale}.yml", File.join('config/locales', "#{controller_file_name}_#{locale}.yml")
50
+ end
51
+ end
52
+
53
+ def add_resource_route
54
+ route_config = "namespace :#{namespace_name} do "
55
+ route_config << class_path.collect{|namespace| "namespace :#{namespace} do " }.join(" ")
56
+ route_config << "resources :#{file_name.pluralize}"
57
+ route_config << " end" * class_path.size
58
+ route_config << " end"
59
+ route route_config
60
+ end
61
+
62
+ # Test Cases
63
+ hook_for :test_framework, :as => :scaffold
64
+
65
+ protected
66
+
67
+ def namespace_class
68
+ options[:namespace].classify
69
+ end
70
+
71
+ def namespace_name
72
+ options[:namespace].underscore
73
+ end
74
+
75
+ # hook_for :template_engine, :test_framework, :as => :somatics_scaffold
76
+ # Invoke the helper using the controller name (pluralized)
77
+ # hook_for :helper, :as => :scaffold do |invoked|
78
+ # invoke invoked, [ controller_name ]
79
+ # end
80
+
81
+ # # Controller, helper, views, test and stylesheets directories.
82
+ # m.directory(File.join('app/models', class_path))
83
+ # m.directory(File.join('app/controllers', controller_class_path))
84
+ # m.directory(File.join('app/helpers', controller_class_path))
85
+ # m.directory(File.join('app/views', controller_class_path, controller_file_name))
86
+ # m.directory(File.join('app/views', controller_class_path, "shared"))
87
+ # m.directory(File.join('test/functional', controller_class_path))
88
+ # m.directory(File.join('test/unit', class_path))
89
+ # m.directory(File.join('test/unit/helpers', controller_class_path))
90
+ # m.directory(File.join('public/stylesheets', class_path))
91
+ # m.directory(File.join('public/javascripts', class_path))
92
+ #
93
+ # m.template 'controller.rb', File.join('app/controllers', controller_class_path, "#{controller_file_name}_controller.rb")
94
+ # m.template 'helper.rb', File.join('app/helpers', controller_class_path, "#{controller_file_name}_helper.rb")
95
+ #
96
+ # # Views and Builders
97
+ # m.template "partial_form.html.erb", File.join('app/views', controller_class_path, controller_file_name, "_form.html.erb")
98
+ # m.template "partial_list.html.erb", File.join('app/views', controller_class_path, controller_file_name, "_list.html.erb")
99
+ # m.template "partial_show.html.erb", File.join('app/views', controller_class_path, controller_file_name, "_show.html.erb")
100
+ # m.template "partial_edit.html.erb", File.join('app/views', controller_class_path, controller_file_name, "_edit.html.erb")
101
+ # m.template "partial_bulk.html.erb", File.join('app/views', controller_class_path, controller_file_name, "_bulk.html.erb")
102
+ # m.template "view_index.html.erb", File.join('app/views', controller_class_path, controller_file_name, "index.html.erb")
103
+ # m.template "view_new.html.erb", File.join('app/views', controller_class_path, controller_file_name, "new.html.erb")
104
+ # m.template "view_show.html.erb", File.join('app/views', controller_class_path, controller_file_name, "show.html.erb")
105
+ # m.template "view_edit.html.erb", File.join('app/views', controller_class_path, controller_file_name, "edit.html.erb")
106
+ # m.template "builder_index.xml.builder", File.join('app/views', controller_class_path, controller_file_name, "index.xml.builder")
107
+ # m.template "builder_index.xls.builder", File.join('app/views', controller_class_path, controller_file_name, "index.xls.builder")
108
+ # m.template "builder_index.pdf.prawn", File.join('app/views', controller_class_path, controller_file_name, "index.pdf.prawn")
109
+ #
110
+ # # Locales templates
111
+ # %w( en zh-TW ).each do |locale|
112
+ # m.template "locales_#{locale}.yml", File.join('config/locales', "#{controller_file_name}_#{locale}.yml")
113
+ # end
114
+ #
115
+ # # Application, Layout and Stylesheet and Javascript.
116
+ # # m.template_without_destroy 'layout.html.erb', File.join('app/views/layouts', controller_class_path, "admin.html.erb"), :collision => :skip
117
+ # # m.template_without_destroy 'application_helper.rb', File.join('app/helpers', controller_class_path, "admin_helper.rb"), :collision => :skip
118
+ # # m.template_without_destroy 'partial_menu.html.erb', File.join('app/views', controller_class_path, "shared", "_menu.html.erb"), :collision => :skip
119
+ # m.header_menu(controller_file_name) unless options[:no_header_menu]
120
+ # # m.template_without_destroy 'context_menu.js', 'public/javascripts/context_menu.js', :collision => :skip
121
+ # # m.template_without_destroy 'select_list_move.js', 'public/javascripts/select_list_move.js', :collision => :skip
122
+ # # m.template('style.css', 'public/stylesheets/scaffold.css')
123
+ #
124
+ # m.template('functional_test.rb', File.join('test/functional', controller_class_path, "#{controller_file_name}_controller_test.rb"))
125
+ # m.template('helper_test.rb', File.join('test/unit/helpers', controller_class_path, "#{controller_file_name}_helper_test.rb"))
126
+ #
127
+ # m.admin_route_resources controller_file_name
128
+ #
129
+ # if options[:admin_authenticated] || options[:authenticated]
130
+ # generate_sessions_controller(m)
131
+ # else
132
+ # m.dependency 'model', [name] + @args, :collision => :skip
133
+ # end
134
+
135
+ end
136
+ end
137
+ end
@@ -0,0 +1,25 @@
1
+ pdf.header pdf.margin_box.top_left do
2
+ # pdf.image "#{RAILS_ROOT}/public/images/logo.png", :fit => [60,24]
3
+ pdf.text "<%= plural_name.humanize %>", :size => 16, :align => :center
4
+ end
5
+
6
+ fields = params[:fields]# - [""]
7
+
8
+ entries = @<%= plural_name %>.collect do |<%= singular_name %>|
9
+ fields.collect do |f|
10
+ <%= singular_name %>.send(f)
11
+ end
12
+ end
13
+
14
+ x_pos = ((pdf.bounds.width / 2) - 150)
15
+ y_pos = ((pdf.bounds.height / 2) + 300)
16
+ pdf.bounding_box([x_pos, y_pos], :width => 300, :height => 450) do
17
+ pdf.table entries, :border_style => :grid,
18
+ :row_colors => ["FFFFFF","DDDDDD"],
19
+ :headers => @headers,
20
+ :position => :center,
21
+ :font_size => 9
22
+ end
23
+
24
+ pdf.number_pages "<page>/<total>", [pdf.bounds.right - 50, 0]
25
+
@@ -0,0 +1,24 @@
1
+ excel_document(xml) do
2
+ xml.Worksheet 'ss:Name' => '<%= plural_name.humanize %>' do
3
+ xml.Table do
4
+ # Header
5
+ xml.Row do
6
+ @headers.each do |header|
7
+ xml.Cell { xml.Data header, 'ss:Type' => 'String' }
8
+ end
9
+ end
10
+
11
+ # Rows
12
+ unless @<%= plural_name %>.blank?
13
+ for <%= singular_name %> in @<%= plural_name %>
14
+ xml.Row do
15
+ @fields.each do |f|
16
+ xml.Cell { xml.Data <%= singular_name %>.send(f), 'ss:Type' => 'String' }
17
+ end
18
+ end
19
+ end
20
+ end
21
+
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,10 @@
1
+ xml.instruct!
2
+ xml.<%= plural_name %> do
3
+ @<%= plural_name %>.each do |<%= singular_name %>|
4
+ xml.<%= singular_name %> do
5
+ @fields.each do |f|
6
+ xml.tag! f, <%= singular_name %>.send(f)
7
+ end
8
+ end
9
+ end
10
+ end