somatics3-generators 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/.document +5 -0
- data/.gitignore +21 -0
- data/LICENSE +20 -0
- data/README.rdoc +17 -0
- data/Rakefile +60 -0
- data/VERSION +1 -0
- data/bin/somatics +21 -0
- data/bin/somatify +21 -0
- data/lib/generators/somatics/authenticated/authenticated_generator.rb +220 -0
- data/lib/generators/somatics/authenticated/templates/mailer.rb +25 -0
- data/lib/generators/somatics/authenticated/templates/migration.rb +26 -0
- data/lib/generators/somatics/authenticated/templates/model.rb +83 -0
- data/lib/generators/somatics/authenticated/templates/observer.rb +11 -0
- data/lib/generators/somatics/authenticated/templates/test/mailer_test.rb +31 -0
- data/lib/generators/somatics/authenticated/templates/test/model_functional_test.rb +93 -0
- data/lib/generators/somatics/authenticated/templates/test/sessions_functional_test.rb +82 -0
- data/lib/generators/somatics/authenticated/templates/test/unit_test.rb +164 -0
- data/lib/generators/somatics/authenticated/templates/test/users.yml +60 -0
- data/lib/generators/somatics/authenticated_controller/authenticated_controller_generator.rb +323 -0
- data/lib/generators/somatics/authenticated_controller/templates/_model_partial.html.erb +8 -0
- data/lib/generators/somatics/authenticated_controller/templates/activation.erb +3 -0
- data/lib/generators/somatics/authenticated_controller/templates/authenticated_system.rb +189 -0
- data/lib/generators/somatics/authenticated_controller/templates/authenticated_test_helper.rb +10 -0
- data/lib/generators/somatics/authenticated_controller/templates/config/initializers/site_keys.rb +38 -0
- data/lib/generators/somatics/authenticated_controller/templates/controller.rb +55 -0
- data/lib/generators/somatics/authenticated_controller/templates/helper.rb +91 -0
- data/lib/generators/somatics/authenticated_controller/templates/login.html.erb +29 -0
- data/lib/generators/somatics/authenticated_controller/templates/mailer.rb +25 -0
- data/lib/generators/somatics/authenticated_controller/templates/migration.rb +26 -0
- data/lib/generators/somatics/authenticated_controller/templates/model.rb +83 -0
- data/lib/generators/somatics/authenticated_controller/templates/observer.rb +11 -0
- data/lib/generators/somatics/authenticated_controller/templates/session_helper.rb +2 -0
- data/lib/generators/somatics/authenticated_controller/templates/sessions_controller.rb +43 -0
- data/lib/generators/somatics/authenticated_controller/templates/signup.html.erb +19 -0
- data/lib/generators/somatics/authenticated_controller/templates/signup_notification.erb +8 -0
- data/lib/generators/somatics/authenticated_controller/templates/test/mailer_test.rb +31 -0
- data/lib/generators/somatics/authenticated_controller/templates/test/model_functional_test.rb +93 -0
- data/lib/generators/somatics/authenticated_controller/templates/test/sessions_functional_test.rb +82 -0
- data/lib/generators/somatics/authenticated_controller/templates/test/unit_test.rb +164 -0
- data/lib/generators/somatics/authenticated_controller/templates/test/users.yml +60 -0
- data/lib/generators/somatics/helper/helper_generator.rb +16 -0
- data/lib/generators/somatics/install/install_generator.rb +65 -0
- data/lib/generators/somatics/install/templates/config/locales/somatics_en.yml +33 -0
- data/lib/generators/somatics/install/templates/config/locales/somatics_zh-TW.yml +33 -0
- data/lib/generators/somatics/install/templates/controller_admin.rb +16 -0
- data/lib/generators/somatics/install/templates/controller_home.rb +4 -0
- data/lib/generators/somatics/install/templates/helper_admin.rb +68 -0
- data/lib/generators/somatics/install/templates/layout_admin.html.erb +88 -0
- data/lib/generators/somatics/install/templates/lib/somatic_link_renderer.rb +42 -0
- data/lib/generators/somatics/install/templates/partial_menu.html.erb +1 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/add.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/arrow_collapsed.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/arrow_expanded.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/attachment.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/bullet_arrow_left.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/bullet_arrow_right.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/bullet_diamond.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/bullet_end.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/bullet_go.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/bullet_toggle_minus.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/bullet_toggle_plus.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/c.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/cancel.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/changeset.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/comment.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/comments.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/content-left.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/content-right.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/copy.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/csharp.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/database_key.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/default.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/delete.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/document.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/draft.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/duplicate.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/edit.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/exclamation.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/external.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/fav.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/fav_off.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/feed.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/folder.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/folder_open.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/footer-bg.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/footer-left.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/footer-right.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/group.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/help.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/history.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/image.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/lightning.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/link.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/loading.gif +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/locked.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/message.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/milestone.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/move.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/news.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/openid-bg.gif +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/package.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/pdf.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/php.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/plugin.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/projects.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/rails.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/reload.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/report.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/ruby.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/save.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/sort_asc.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/sort_desc.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/stats.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/table_multiple.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/task_done.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/task_late.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/task_parent_end.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/task_todo.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/text.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/text_list_bullets.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/textfield.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/ticket.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/ticket_checked.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/ticket_edit.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/ticket_go.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/ticket_note.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/time.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/time_add.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/toggle_check.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/true.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/unlock.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/user.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/warning.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/wiki_edit.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/xml.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/zip.png +0 -0
- data/lib/generators/somatics/install/templates/public/images/somatics/zoom_in.png +0 -0
- data/lib/generators/somatics/install/templates/public/javascripts/somatics/base.js +231 -0
- data/lib/generators/somatics/install/templates/public/javascripts/somatics/context_menu.js +237 -0
- data/lib/generators/somatics/install/templates/public/javascripts/somatics/controls.js +965 -0
- data/lib/generators/somatics/install/templates/public/javascripts/somatics/dragdrop.js +974 -0
- data/lib/generators/somatics/install/templates/public/javascripts/somatics/effects.js +1123 -0
- data/lib/generators/somatics/install/templates/public/javascripts/somatics/prototype.js +6001 -0
- data/lib/generators/somatics/install/templates/public/javascripts/somatics/rails.js +175 -0
- data/lib/generators/somatics/install/templates/public/javascripts/somatics/select_list_move.js +82 -0
- data/lib/generators/somatics/install/templates/public/stylesheets/somatics/base.css +948 -0
- data/lib/generators/somatics/install/templates/public/stylesheets/somatics/context_menu.css +52 -0
- data/lib/generators/somatics/install/templates/public/stylesheets/somatics/csshover.htc +122 -0
- data/lib/generators/somatics/install/templates/public/stylesheets/somatics/jstoolbar.css +95 -0
- data/lib/generators/somatics/install/templates/view_index.html.erb +1 -0
- data/lib/generators/somatics/scaffold/scaffold_generator.rb +25 -0
- data/lib/generators/somatics/scaffold/templates/_form.html.erb +23 -0
- data/lib/generators/somatics/scaffold/templates/edit.html.erb +6 -0
- data/lib/generators/somatics/scaffold/templates/index.html.erb +27 -0
- data/lib/generators/somatics/scaffold/templates/new.html.erb +5 -0
- data/lib/generators/somatics/scaffold/templates/show.html.erb +12 -0
- data/lib/generators/somatics/scaffold_controller/USAGE +20 -0
- data/lib/generators/somatics/scaffold_controller/scaffold_controller_generator.rb +137 -0
- data/lib/generators/somatics/scaffold_controller/templates/builder_index.pdf.prawn +25 -0
- data/lib/generators/somatics/scaffold_controller/templates/builder_index.xls.builder +24 -0
- data/lib/generators/somatics/scaffold_controller/templates/builder_index.xml.builder +10 -0
- data/lib/generators/somatics/scaffold_controller/templates/controller.rb +140 -0
- data/lib/generators/somatics/scaffold_controller/templates/locales_en.yml +17 -0
- data/lib/generators/somatics/scaffold_controller/templates/locales_zh-TW.yml +20 -0
- data/lib/generators/somatics/scaffold_controller/templates/partial_bulk.html.erb +12 -0
- data/lib/generators/somatics/scaffold_controller/templates/partial_edit.html.erb +7 -0
- data/lib/generators/somatics/scaffold_controller/templates/partial_form.html.erb +13 -0
- data/lib/generators/somatics/scaffold_controller/templates/partial_list.html.erb +42 -0
- data/lib/generators/somatics/scaffold_controller/templates/partial_menu.html.erb +1 -0
- data/lib/generators/somatics/scaffold_controller/templates/partial_show.html.erb +31 -0
- data/lib/generators/somatics/scaffold_controller/templates/view_edit.html.erb +24 -0
- data/lib/generators/somatics/scaffold_controller/templates/view_index.html.erb +28 -0
- data/lib/generators/somatics/scaffold_controller/templates/view_new.html.erb +14 -0
- data/lib/generators/somatics/scaffold_controller/templates/view_show.html.erb +24 -0
- data/lib/generators/somatics.rb +95 -0
- data/lib/somatics3-generators.rb +19 -0
- data/somatics3-generators.gemspec +223 -0
- data/templates/somatics.rb +128 -0
- data/test/helper.rb +10 -0
- data/test/test_somatics3-generators.rb +7 -0
- 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,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,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
|