page_engine 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/MIT-LICENSE +20 -0
- data/README.markdown +74 -0
- data/Rakefile +39 -0
- data/app/assets/images/page_engine/add.png +0 -0
- data/app/assets/images/page_engine/bullet_add.png +0 -0
- data/app/assets/images/page_engine/bullet_go.png +0 -0
- data/app/assets/images/page_engine/delete.png +0 -0
- data/app/assets/images/page_engine/page_add.png +0 -0
- data/app/assets/images/page_engine/page_copy.png +0 -0
- data/app/assets/images/page_engine/page_delete.png +0 -0
- data/app/assets/images/page_engine/page_edit.png +0 -0
- data/app/assets/images/page_engine/page_gear.png +0 -0
- data/app/assets/images/page_engine/page_green.png +0 -0
- data/app/assets/images/page_engine/page_hidden.png +0 -0
- data/app/assets/images/page_engine/page_lightning.png +0 -0
- data/app/assets/images/page_engine/page_line.jpg +0 -0
- data/app/assets/images/page_engine/page_red.png +0 -0
- data/app/assets/images/page_engine/pencil.png +0 -0
- data/app/assets/images/page_engine/waiting.gif +0 -0
- data/app/assets/images/page_engine/zoom.png +0 -0
- data/app/assets/javascripts/markitup/sets/css/set.js +52 -0
- data/app/assets/javascripts/markitup/sets/html/set.js +64 -0
- data/app/assets/javascripts/markitup/sets/javascript/set.js +6 -0
- data/app/assets/javascripts/markitup/sets/markdown/set.js +53 -0
- data/app/assets/javascripts/markitup/sets/textile/set.js +57 -0
- data/app/assets/javascripts/page_engine.js +189 -0
- data/app/assets/stylesheets/jquery-ui/smoothness/jquery-ui-1.8.15.custom.css +307 -0
- data/app/assets/stylesheets/markitup/sets/css/style.css +69 -0
- data/app/assets/stylesheets/markitup/sets/html/style.css +58 -0
- data/app/assets/stylesheets/markitup/sets/javascript/style.css +0 -0
- data/app/assets/stylesheets/markitup/sets/markdown/style.css +49 -0
- data/app/assets/stylesheets/markitup/sets/textile/style.css +58 -0
- data/app/assets/stylesheets/markitup/skins/markitup/style.css +147 -0
- data/app/assets/stylesheets/markitup/skins/simple/style.css +118 -0
- data/app/assets/stylesheets/page_engine.css +231 -0
- data/app/controllers/admin/page_snippets_controller.rb +64 -0
- data/app/controllers/admin/pages_controller.rb +167 -0
- data/app/controllers/pages_controller.rb +20 -0
- data/app/helpers/pages_helper.rb +234 -0
- data/app/models/page.rb +233 -0
- data/app/models/page_part.rb +35 -0
- data/app/models/page_role.rb +15 -0
- data/app/models/page_snippet.rb +30 -0
- data/app/views/admin/page_snippets/_form.html.haml +10 -0
- data/app/views/admin/page_snippets/destroy.js.erb +3 -0
- data/app/views/admin/page_snippets/edit.html.haml +6 -0
- data/app/views/admin/page_snippets/index.html.haml +20 -0
- data/app/views/admin/page_snippets/new.html.haml +6 -0
- data/app/views/admin/page_snippets/show.html.erb +20 -0
- data/app/views/admin/pages/_form.html.haml +56 -0
- data/app/views/admin/pages/_page.html.haml +19 -0
- data/app/views/admin/pages/_page_list.html.haml +2 -0
- data/app/views/admin/pages/_page_part_fields.html.haml +9 -0
- data/app/views/admin/pages/destroy.js.erb +1 -0
- data/app/views/admin/pages/duplicate.js.erb +5 -0
- data/app/views/admin/pages/edit.html.haml +9 -0
- data/app/views/admin/pages/index.html.haml +10 -0
- data/app/views/admin/pages/new.html.haml +10 -0
- data/app/views/admin/pages/show.html.erb +100 -0
- data/app/views/admin/pages/sort.js.erb +3 -0
- data/app/views/layouts/admin.html.haml +20 -0
- data/app/views/pages/_nav_item.html.haml +10 -0
- data/app/views/pages/_navigation.html.haml +11 -0
- data/app/views/pages/index.html.erb +2 -0
- data/app/views/pages/show.html.erb +2 -0
- data/config/routes.rb +23 -0
- data/db/migrate/20110814185929_create_page_engine.rb +77 -0
- data/db/seed.rb +8 -0
- data/lib/generators/page_engine/page_engine_generator.rb +59 -0
- data/lib/page_engine/class_methods.rb +4 -0
- data/lib/page_engine/defaults.rb +5 -0
- data/lib/page_engine/engine.rb +4 -0
- data/lib/page_engine/exceptions.rb +4 -0
- data/lib/page_engine/extensions.rb +24 -0
- data/lib/page_engine/helpers.rb +10 -0
- data/lib/page_engine/instance_methods.rb +82 -0
- data/lib/page_engine/routes_finder.rb +23 -0
- data/lib/page_engine.rb +41 -0
- data/lib/tasks/page_engine_tasks.rake +4 -0
- metadata +192 -0
@@ -0,0 +1,147 @@
|
|
1
|
+
/* -------------------------------------------------------------------
|
2
|
+
// markItUp! Universal MarkUp Engine, JQuery plugin
|
3
|
+
// By Jay Salvat - http://markitup.jaysalvat.com/
|
4
|
+
// ------------------------------------------------------------------*/
|
5
|
+
.markItUp * {
|
6
|
+
margin:0px; padding:0px;
|
7
|
+
outline:none;
|
8
|
+
}
|
9
|
+
.markItUp a:link,
|
10
|
+
.markItUp a:visited {
|
11
|
+
color:#000;
|
12
|
+
text-decoration:none;
|
13
|
+
}
|
14
|
+
.markItUp {
|
15
|
+
width:700px;
|
16
|
+
margin:5px 0 5px 0;
|
17
|
+
border:5px solid #F5F5F5;
|
18
|
+
}
|
19
|
+
.markItUpContainer {
|
20
|
+
border:1px solid #3C769D;
|
21
|
+
background:#FFF url(/assets/markitup/skins/markitup/bg-container.png) repeat-x top left;
|
22
|
+
padding:5px 5px 2px 5px;
|
23
|
+
font:11px Verdana, Arial, Helvetica, sans-serif;
|
24
|
+
}
|
25
|
+
.markItUpEditor {
|
26
|
+
font:12px 'Courier New', Courier, monospace;
|
27
|
+
padding:5px 5px 5px 35px;
|
28
|
+
border:3px solid #3C769D;
|
29
|
+
width:643px;
|
30
|
+
height:320px;
|
31
|
+
background:#FFF url(/assets/markitup/skins/markitup/bg-editor.png) no-repeat;
|
32
|
+
clear:both;
|
33
|
+
line-height:18px;
|
34
|
+
overflow:auto;
|
35
|
+
}
|
36
|
+
.markItUpPreviewFrame {
|
37
|
+
overflow:auto;
|
38
|
+
background-color:#FFFFFF;
|
39
|
+
border:1px solid #3C769D;
|
40
|
+
width:99.9%;
|
41
|
+
height:300px;
|
42
|
+
margin:5px 0;
|
43
|
+
}
|
44
|
+
.markItUpFooter {
|
45
|
+
width:100%;
|
46
|
+
cursor:n-resize;
|
47
|
+
}
|
48
|
+
.markItUpResizeHandle {
|
49
|
+
overflow:hidden;
|
50
|
+
width:22px; height:5px;
|
51
|
+
margin-left:auto;
|
52
|
+
margin-right:auto;
|
53
|
+
background-image:url(/assets/markitup/skins/markitup/handle.png);
|
54
|
+
cursor:n-resize;
|
55
|
+
}
|
56
|
+
/***************************************************************************************/
|
57
|
+
/* first row of buttons */
|
58
|
+
.markItUpHeader ul li {
|
59
|
+
list-style:none;
|
60
|
+
float:left;
|
61
|
+
position:relative;
|
62
|
+
}
|
63
|
+
.markItUpHeader ul li ul{
|
64
|
+
display:none;
|
65
|
+
}
|
66
|
+
.markItUpHeader ul li:hover > ul{
|
67
|
+
display:block;
|
68
|
+
}
|
69
|
+
.markItUpHeader ul .markItUpDropMenu {
|
70
|
+
background:transparent url(/assets/markitup/skins/markitup/menu.png) no-repeat 115% 50%;
|
71
|
+
margin-right:5px;
|
72
|
+
}
|
73
|
+
.markItUpHeader ul .markItUpDropMenu li {
|
74
|
+
margin-right:0px;
|
75
|
+
}
|
76
|
+
.markItUpHeader ul .markItUpSeparator {
|
77
|
+
margin:0 10px;
|
78
|
+
width:1px;
|
79
|
+
height:16px;
|
80
|
+
overflow:hidden;
|
81
|
+
background-color:#CCC;
|
82
|
+
}
|
83
|
+
.markItUpHeader ul ul .markItUpSeparator {
|
84
|
+
width:auto; height:1px;
|
85
|
+
margin:0px;
|
86
|
+
}
|
87
|
+
/* next rows of buttons */
|
88
|
+
.markItUpHeader ul ul {
|
89
|
+
display:none;
|
90
|
+
position:absolute;
|
91
|
+
top:18px; left:0px;
|
92
|
+
background:#F5F5F5;
|
93
|
+
border:1px solid #3C769D;
|
94
|
+
height:inherit;
|
95
|
+
}
|
96
|
+
.markItUpHeader ul ul li {
|
97
|
+
float:none;
|
98
|
+
border-bottom:1px solid #3C769D;
|
99
|
+
}
|
100
|
+
.markItUpHeader ul ul .markItUpDropMenu {
|
101
|
+
background:#F5F5F5 url(/assets/markitup/skins/markitup/submenu.png) no-repeat 100% 50%;
|
102
|
+
}
|
103
|
+
/* next rows of buttons */
|
104
|
+
.markItUpHeader ul ul ul {
|
105
|
+
position:absolute;
|
106
|
+
top:-1px; left:150px;
|
107
|
+
}
|
108
|
+
.markItUpHeader ul ul ul li {
|
109
|
+
float:none;
|
110
|
+
}
|
111
|
+
.markItUpHeader ul a {
|
112
|
+
display:block;
|
113
|
+
width:16px; height:16px;
|
114
|
+
text-indent:-10000px;
|
115
|
+
background-repeat:no-repeat;
|
116
|
+
padding:3px;
|
117
|
+
margin:0px;
|
118
|
+
}
|
119
|
+
.markItUpHeader ul ul a {
|
120
|
+
display:block;
|
121
|
+
padding-left:0px;
|
122
|
+
text-indent:0;
|
123
|
+
width:120px;
|
124
|
+
padding:5px 5px 5px 25px;
|
125
|
+
background-position:2px 50%;
|
126
|
+
}
|
127
|
+
.markItUpHeader ul ul a:hover {
|
128
|
+
color:#FFF;
|
129
|
+
background-color:#3C769D;
|
130
|
+
}
|
131
|
+
/***************************************************************************************/
|
132
|
+
.html .markItUpEditor {
|
133
|
+
background-image:url(/assets/markitup/skins/markitup/bg-editor-html.png);
|
134
|
+
}
|
135
|
+
.markdown .markItUpEditor {
|
136
|
+
background-image:url(/assets/markitup/skins/markitup/bg-editor-markdown.png);
|
137
|
+
}
|
138
|
+
.textile .markItUpEditor {
|
139
|
+
background-image:url(/assets/markitup/skins/markitup/bg-editor-textile.png);
|
140
|
+
}
|
141
|
+
.bbcode .markItUpEditor {
|
142
|
+
background-image:url(/assets/markitup/skins/markitup/bg-editor-bbcode.png);
|
143
|
+
}
|
144
|
+
.wiki .markItUpEditor,
|
145
|
+
.dotclear .markItUpEditor {
|
146
|
+
background-image:url(/assets/markitup/skins/markitup/bg-editor-wiki.png);
|
147
|
+
}
|
@@ -0,0 +1,118 @@
|
|
1
|
+
/* -------------------------------------------------------------------
|
2
|
+
// markItUp! Universal MarkUp Engine, JQuery plugin
|
3
|
+
// By Jay Salvat - http://markitup.jaysalvat.com/
|
4
|
+
// ------------------------------------------------------------------*/
|
5
|
+
.markItUp * {
|
6
|
+
margin:0px; padding:0px;
|
7
|
+
outline:none;
|
8
|
+
}
|
9
|
+
.markItUp a:link,
|
10
|
+
.markItUp a:visited {
|
11
|
+
color:#000;
|
12
|
+
text-decoration:none;
|
13
|
+
}
|
14
|
+
.markItUp {
|
15
|
+
width:700px;
|
16
|
+
margin:5px 0 5px 0;
|
17
|
+
}
|
18
|
+
.markItUpContainer {
|
19
|
+
font:11px Verdana, Arial, Helvetica, sans-serif;
|
20
|
+
}
|
21
|
+
.markItUpEditor {
|
22
|
+
font:12px 'Courier New', Courier, monospace;
|
23
|
+
padding:5px;
|
24
|
+
width:690px;
|
25
|
+
height:320px;
|
26
|
+
clear:both;
|
27
|
+
line-height:18px;
|
28
|
+
overflow:auto;
|
29
|
+
}
|
30
|
+
.markItUpPreviewFrame {
|
31
|
+
overflow:auto;
|
32
|
+
background-color:#FFF;
|
33
|
+
width:99.9%;
|
34
|
+
height:300px;
|
35
|
+
margin:5px 0;
|
36
|
+
}
|
37
|
+
.markItUpFooter {
|
38
|
+
width:100%;
|
39
|
+
}
|
40
|
+
.markItUpResizeHandle {
|
41
|
+
overflow:hidden;
|
42
|
+
width:22px; height:5px;
|
43
|
+
margin-left:auto;
|
44
|
+
margin-right:auto;
|
45
|
+
background-image:url(/assets/markitup/skins/simple/handle.png);
|
46
|
+
cursor:n-resize;
|
47
|
+
}
|
48
|
+
/***************************************************************************************/
|
49
|
+
/* first row of buttons */
|
50
|
+
.markItUpHeader ul li {
|
51
|
+
list-style:none;
|
52
|
+
float:left;
|
53
|
+
position:relative;
|
54
|
+
}
|
55
|
+
.markItUpHeader ul li:hover > ul{
|
56
|
+
display:block;
|
57
|
+
}
|
58
|
+
.markItUpHeader ul .markItUpDropMenu {
|
59
|
+
background:transparent url(/assets/markitup/skins/simple/menu.png) no-repeat 115% 50%;
|
60
|
+
margin-right:5px;
|
61
|
+
}
|
62
|
+
.markItUpHeader ul .markItUpDropMenu li {
|
63
|
+
margin-right:0px;
|
64
|
+
}
|
65
|
+
/* next rows of buttons */
|
66
|
+
.markItUpHeader ul ul {
|
67
|
+
display:none;
|
68
|
+
position:absolute;
|
69
|
+
top:18px; left:0px;
|
70
|
+
background:#FFF;
|
71
|
+
border:1px solid #000;
|
72
|
+
}
|
73
|
+
.markItUpHeader ul ul li {
|
74
|
+
float:none;
|
75
|
+
border-bottom:1px solid #000;
|
76
|
+
}
|
77
|
+
.markItUpHeader ul ul .markItUpDropMenu {
|
78
|
+
background:#FFF url(/assets/markitup/skins/simple/submenu.png) no-repeat 100% 50%;
|
79
|
+
}
|
80
|
+
.markItUpHeader ul .markItUpSeparator {
|
81
|
+
margin:0 10px;
|
82
|
+
width:1px;
|
83
|
+
height:16px;
|
84
|
+
overflow:hidden;
|
85
|
+
background-color:#CCC;
|
86
|
+
}
|
87
|
+
.markItUpHeader ul ul .markItUpSeparator {
|
88
|
+
width:auto; height:1px;
|
89
|
+
margin:0px;
|
90
|
+
}
|
91
|
+
/* next rows of buttons */
|
92
|
+
.markItUpHeader ul ul ul {
|
93
|
+
position:absolute;
|
94
|
+
top:-1px; left:150px;
|
95
|
+
}
|
96
|
+
.markItUpHeader ul ul ul li {
|
97
|
+
float:none;
|
98
|
+
}
|
99
|
+
.markItUpHeader ul a {
|
100
|
+
display:block;
|
101
|
+
width:16px; height:16px;
|
102
|
+
text-indent:-10000px;
|
103
|
+
background-repeat:no-repeat;
|
104
|
+
padding:3px;
|
105
|
+
margin:0px;
|
106
|
+
}
|
107
|
+
.markItUpHeader ul ul a {
|
108
|
+
display:block;
|
109
|
+
padding-left:0px;
|
110
|
+
text-indent:0;
|
111
|
+
width:120px;
|
112
|
+
padding:5px 5px 5px 25px;
|
113
|
+
background-position:2px 50%;
|
114
|
+
}
|
115
|
+
.markItUpHeader ul ul a:hover {
|
116
|
+
color:#FFF;
|
117
|
+
background-color:#000;
|
118
|
+
}
|
@@ -0,0 +1,231 @@
|
|
1
|
+
/*
|
2
|
+
*= require markitup/skins/simple/style
|
3
|
+
*= require markitup/sets/html/style
|
4
|
+
*= require markitup/sets/textile/style
|
5
|
+
*= require markitup/sets/markdown/style
|
6
|
+
*= require markitup/sets/css/style
|
7
|
+
*= require markitup/sets/javascript/style
|
8
|
+
*/
|
9
|
+
|
10
|
+
.js .hidden {
|
11
|
+
display: none;
|
12
|
+
}
|
13
|
+
|
14
|
+
.icon, nav.pagination .first a, nav.pagination .prev a, nav.pagination .next a, nav.pagination .last a {
|
15
|
+
display: -moz-inline-box;
|
16
|
+
-moz-box-orient: vertical;
|
17
|
+
display: inline-block;
|
18
|
+
vertical-align: middle;
|
19
|
+
*vertical-align: auto;
|
20
|
+
height: 16px;
|
21
|
+
width: 16px;
|
22
|
+
text-indent: -119988px;
|
23
|
+
overflow: hidden;
|
24
|
+
text-align: left;
|
25
|
+
background-image: url(/assets/page_engine/ruby.png);
|
26
|
+
background-repeat: no-repeat;
|
27
|
+
background-position: 50% 50%;
|
28
|
+
vertical-align: middle;
|
29
|
+
cursor: pointer;
|
30
|
+
background-repeat: no-repeat;
|
31
|
+
background-position: center center;
|
32
|
+
}
|
33
|
+
|
34
|
+
.icon, nav.pagination .first a, nav.pagination .prev a, nav.pagination .next a, nav.pagination .last a {
|
35
|
+
*display: inline;
|
36
|
+
}
|
37
|
+
|
38
|
+
.icon.add {
|
39
|
+
background-image: url(/assets/page_engine/add.png);
|
40
|
+
}
|
41
|
+
|
42
|
+
.icon.delete {
|
43
|
+
background-image: url(/assets/page_engine/delete.png);
|
44
|
+
}
|
45
|
+
|
46
|
+
.icon.edit {
|
47
|
+
background-image: url(/assets/page_engine/pencil.png);
|
48
|
+
}
|
49
|
+
|
50
|
+
.icon.show {
|
51
|
+
background-image: url(/assets/page_engine/zoom.png);
|
52
|
+
}
|
53
|
+
|
54
|
+
|
55
|
+
.icon.waiting {
|
56
|
+
background-image: url(/assets/page_engine/waiting.gif);
|
57
|
+
}
|
58
|
+
|
59
|
+
form.button_to {
|
60
|
+
display: inline;
|
61
|
+
}
|
62
|
+
|
63
|
+
form.button_to * {
|
64
|
+
display: inline;
|
65
|
+
}
|
66
|
+
|
67
|
+
ol#page_engine,
|
68
|
+
ol#page_engine ol {
|
69
|
+
margin: 0;
|
70
|
+
padding: 0 0 0 16px;
|
71
|
+
border-left: solid white 1px;
|
72
|
+
}
|
73
|
+
|
74
|
+
ol#page_engine li.page {
|
75
|
+
background: white;
|
76
|
+
}
|
77
|
+
|
78
|
+
ol#page_engine li.placeholder {
|
79
|
+
border: dashed 1px #333;
|
80
|
+
}
|
81
|
+
|
82
|
+
ol#page_engine * {
|
83
|
+
list-style: none;
|
84
|
+
}
|
85
|
+
|
86
|
+
ol#page_engine .icon.add {
|
87
|
+
margin: 0 0 0 6px;
|
88
|
+
background-image: url(/assets/page_engine/page_add.png);
|
89
|
+
}
|
90
|
+
|
91
|
+
ol#page_engine .icon.edit {
|
92
|
+
background-image: url(/assets/page_engine/page_edit.png);
|
93
|
+
}
|
94
|
+
|
95
|
+
ol#page_engine .icon.delete {
|
96
|
+
background-image: url(/assets/page_engine/page_delete.png);
|
97
|
+
}
|
98
|
+
|
99
|
+
ol#page_engine .icon.duplicate {
|
100
|
+
background-image: url(/assets/page_engine/page_copy.png);
|
101
|
+
}
|
102
|
+
|
103
|
+
ol#page_engine .icon.published {
|
104
|
+
margin: 0 6px 0 0;
|
105
|
+
background-image: url(/assets/page_engine/page_green.png);
|
106
|
+
}
|
107
|
+
|
108
|
+
ol#page_engine .icon.live {
|
109
|
+
margin: 0 6px 0 0;
|
110
|
+
background-image: url(/assets/page_engine/page_lightning.png);
|
111
|
+
}
|
112
|
+
|
113
|
+
ol#page_engine .icon.draft {
|
114
|
+
margin: 0 6px 0 0;
|
115
|
+
background-image: url(/assets/page_engine/page_red.png);
|
116
|
+
}
|
117
|
+
|
118
|
+
ol#page_engine .icon.hidden {
|
119
|
+
margin: 0 6px 0 0;
|
120
|
+
background-image: url(/assets/page_engine/page_hidden.png);
|
121
|
+
}
|
122
|
+
|
123
|
+
ol#page_engine .icon.review {
|
124
|
+
margin: 0 6px 0 0;
|
125
|
+
background-image: url(/assets/page_engine/page_gear.png);
|
126
|
+
}
|
127
|
+
|
128
|
+
.page_part .delete {
|
129
|
+
float: right;
|
130
|
+
}
|
131
|
+
|
132
|
+
.page_part.ui-tabs-panel {
|
133
|
+
padding: 5px;
|
134
|
+
}
|
135
|
+
|
136
|
+
.page_part .field textarea {
|
137
|
+
width: 98.5%;
|
138
|
+
}
|
139
|
+
|
140
|
+
.tabs li.tab_with_errors {
|
141
|
+
background: #CC0000 !important;
|
142
|
+
}
|
143
|
+
|
144
|
+
.tabs li.tab_with_errors a {
|
145
|
+
color: white !important;
|
146
|
+
}
|
147
|
+
|
148
|
+
.page_form br {
|
149
|
+
display: none;
|
150
|
+
}
|
151
|
+
|
152
|
+
.page_form .field input[type="text"] {
|
153
|
+
width: 44.6em;
|
154
|
+
}
|
155
|
+
|
156
|
+
.page_form #new_page_part_name {
|
157
|
+
width: 20em;
|
158
|
+
}
|
159
|
+
|
160
|
+
.page_form .field.new_page_part_name {
|
161
|
+
text-align: right;
|
162
|
+
}
|
163
|
+
|
164
|
+
.page_form .field.page_part_title label {
|
165
|
+
width: 6em;
|
166
|
+
display: inline-block;
|
167
|
+
text-align: right;
|
168
|
+
}
|
169
|
+
|
170
|
+
.page_form .field.status label,
|
171
|
+
.page_form .field.css label,
|
172
|
+
.page_form .field.js label,
|
173
|
+
.page_form .field.no_publish_window label,
|
174
|
+
.page_form .field.publish_from label,
|
175
|
+
.page_form .field.publish_to label,
|
176
|
+
.page_form .field.controller_action label,
|
177
|
+
.page_form .field.url label,
|
178
|
+
.page_form .field.display_in_sitemap label,
|
179
|
+
.page_form .field.display_in_menu label,
|
180
|
+
.page_form .field.menu_css_class label,
|
181
|
+
.page_form .field.no_link label,
|
182
|
+
.page_form .field.layout label,
|
183
|
+
.page_form .field.title label,
|
184
|
+
.page_form .field.permalink label,
|
185
|
+
.page_form .field.meta_description label,
|
186
|
+
.page_form .field.meta_keywords label,
|
187
|
+
.page_form .field.page_part_title label,
|
188
|
+
.page_form .field.filter label,
|
189
|
+
.page_form .field.roles label:first-child {
|
190
|
+
padding: 0 10px 0 0;
|
191
|
+
width: 10em;
|
192
|
+
display: inline-block;
|
193
|
+
text-align: right;
|
194
|
+
}
|
195
|
+
|
196
|
+
.page_form .field.page_part_title label,
|
197
|
+
.page_form .field.filter label {
|
198
|
+
width: 4em;
|
199
|
+
}
|
200
|
+
|
201
|
+
.page_form #page_meta_keywords,
|
202
|
+
.page_form #page_meta_description,
|
203
|
+
.page_form #page_css,
|
204
|
+
.page_form #page_js {
|
205
|
+
height: 12em;
|
206
|
+
vertical-align: middle;
|
207
|
+
width: 49.5em;
|
208
|
+
}
|
209
|
+
|
210
|
+
.page_form .field.roles .roles_list {
|
211
|
+
display: inline;
|
212
|
+
}
|
213
|
+
|
214
|
+
form#page_snippet .field.name br,
|
215
|
+
form#page_snippet .field.filter br {
|
216
|
+
display: none;
|
217
|
+
}
|
218
|
+
|
219
|
+
form#page_snippet .field.name label,
|
220
|
+
form#page_snippet .field.filter label {
|
221
|
+
display: inline-block;
|
222
|
+
width: 80px;
|
223
|
+
}
|
224
|
+
|
225
|
+
form#page_snippet .field.name input[type="text"] {
|
226
|
+
width: 645px;
|
227
|
+
}
|
228
|
+
|
229
|
+
form#page_snippet .field.content textarea {
|
230
|
+
width: 98.4%;
|
231
|
+
}
|
@@ -0,0 +1,64 @@
|
|
1
|
+
class Admin::PageSnippetsController < ApplicationController
|
2
|
+
layout 'admin'
|
3
|
+
|
4
|
+
def index
|
5
|
+
@page_snippets = PageSnippet.all
|
6
|
+
|
7
|
+
respond_to do |format|
|
8
|
+
format.html # index.html.erb
|
9
|
+
format.xml { render :xml => @page_snippets }
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def new
|
14
|
+
@page_snippet = PageSnippet.new
|
15
|
+
|
16
|
+
respond_to do |format|
|
17
|
+
format.html # new.html.erb
|
18
|
+
format.xml { render :xml => @page_snippet }
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def edit
|
23
|
+
@page_snippet = PageSnippet.find(params[:id])
|
24
|
+
end
|
25
|
+
|
26
|
+
def create
|
27
|
+
@page_snippet = PageSnippet.new(params[:page_snippet])
|
28
|
+
|
29
|
+
respond_to do |format|
|
30
|
+
if @page_snippet.save
|
31
|
+
format.html { redirect_to(admin_page_snippets_url, :notice => 'Page snippet was successfully created.') }
|
32
|
+
format.xml { render :xml => @page_snippet, :status => :created, :location => @page_snippet }
|
33
|
+
else
|
34
|
+
format.html { render :action => "new" }
|
35
|
+
format.xml { render :xml => @page_snippet.errors, :status => :unprocessable_entity }
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def update
|
41
|
+
@page_snippet = PageSnippet.find(params[:id])
|
42
|
+
|
43
|
+
respond_to do |format|
|
44
|
+
if @page_snippet.update_attributes(params[:page_snippet])
|
45
|
+
format.html { redirect_to(admin_page_snippets_url, :notice => 'Page snippet was successfully updated.') }
|
46
|
+
format.xml { head :ok }
|
47
|
+
else
|
48
|
+
format.html { render :action => "edit" }
|
49
|
+
format.xml { render :xml => @page_snippet.errors, :status => :unprocessable_entity }
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def destroy
|
55
|
+
@page_snippet = PageSnippet.find(params[:id])
|
56
|
+
@page_snippet.destroy
|
57
|
+
|
58
|
+
respond_to do |format|
|
59
|
+
format.html { redirect_to(admin_page_snippets_url) }
|
60
|
+
format.xml { head :ok }
|
61
|
+
format.js
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,167 @@
|
|
1
|
+
class Admin::PagesController < ApplicationController
|
2
|
+
before_filter :get_routes, :except => [:index, :destroy]
|
3
|
+
layout 'admin'
|
4
|
+
|
5
|
+
def index
|
6
|
+
@pages = Page.order(:lft).all.group_by(&:parent_id)
|
7
|
+
|
8
|
+
respond_to do |format|
|
9
|
+
format.html # index.html.erb
|
10
|
+
format.xml { render :xml => @pages }
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
# GET /pages/1
|
15
|
+
# GET /pages/1.xml
|
16
|
+
def show
|
17
|
+
@page = Page.find(params[:id])
|
18
|
+
|
19
|
+
respond_to do |format|
|
20
|
+
format.html # show.html.erb
|
21
|
+
format.xml { render :xml => @page }
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
# GET /pages/new
|
26
|
+
# GET /pages/new.xml
|
27
|
+
def new
|
28
|
+
@page = Page.new
|
29
|
+
Page.page_parts.collect { |page_part| @page.page_parts.build(:title => page_part) }
|
30
|
+
@parent = Page.find_by_permalink(params[:page_id])
|
31
|
+
@roles = PageEngine.class_exists?('Role') ? Role.all : []
|
32
|
+
@page_part_index = 0
|
33
|
+
|
34
|
+
respond_to do |format|
|
35
|
+
format.html # new.html.erb
|
36
|
+
format.xml { render :xml => @page }
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
# GET /pages/1/edit
|
41
|
+
def edit
|
42
|
+
@page = Page.includes([:parent, :page_parts]).where({ :permalink => params[:id] })
|
43
|
+
@page = @page.includes(:required_roles) if PageEngine.class_exists?('Role')
|
44
|
+
@page = @page.first
|
45
|
+
@parent = @page.parent
|
46
|
+
@roles = PageEngine.class_exists?('Role') ? Role.all : []
|
47
|
+
@page_part_index = 0
|
48
|
+
end
|
49
|
+
|
50
|
+
# POST /pages
|
51
|
+
# POST /pages.xml
|
52
|
+
def create
|
53
|
+
@parent = Page.find_by_permalink(params[:page_id])
|
54
|
+
@page = Page.new(params[:page])
|
55
|
+
|
56
|
+
respond_to do |format|
|
57
|
+
if @page.save
|
58
|
+
|
59
|
+
@page.move_to_child_of @parent unless @parent.nil?
|
60
|
+
|
61
|
+
return_path = params.has_key?('continue') ? edit_admin_page_path(@page) : admin_pages_path
|
62
|
+
|
63
|
+
format.html { redirect_to(return_path, :notice => 'Page was successfully created.') }
|
64
|
+
format.xml { render :xml => @page, :status => :created, :location => @page }
|
65
|
+
else
|
66
|
+
@roles = PageEngine.class_exists?('Role') ? Role.all : []
|
67
|
+
format.html { render :action => "new" }
|
68
|
+
format.xml { render :xml => @page.errors, :status => :unprocessable_entity }
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
# PUT /pages/1
|
74
|
+
# PUT /pages/1.xml
|
75
|
+
def update
|
76
|
+
@page = Page.includes([:parent, :page_parts]).find(params[:the_page_id])
|
77
|
+
|
78
|
+
if PageEngine.class_exists?('Role')
|
79
|
+
params[:page][:required_role_ids] ||= []
|
80
|
+
params[:page][:excluded_role_ids] ||= []
|
81
|
+
end
|
82
|
+
|
83
|
+
respond_to do |format|
|
84
|
+
if @page.update_attributes(params[:page])
|
85
|
+
return_path = params.has_key?('continue') ? edit_admin_page_path(@page) : admin_pages_path
|
86
|
+
|
87
|
+
format.html { redirect_to(return_path, :notice => 'Page was successfully updated.') }
|
88
|
+
format.xml { head :ok }
|
89
|
+
else
|
90
|
+
@parent = @page.parent
|
91
|
+
@roles = PageEngine.class_exists?('Role') ? Role.all : []
|
92
|
+
format.html { render :action => "edit" }
|
93
|
+
format.xml { render :xml => @page.errors, :status => :unprocessable_entity }
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
# DELETE /pages/1
|
99
|
+
# DELETE /pages/1.xml
|
100
|
+
def destroy
|
101
|
+
@page = Page.find_by_permalink(params[:id])
|
102
|
+
@page.move_children_to_parent
|
103
|
+
@page.destroy
|
104
|
+
|
105
|
+
respond_to do |format|
|
106
|
+
format.html do
|
107
|
+
redirect_to(admin_pages_path)
|
108
|
+
end
|
109
|
+
format.xml { head :ok }
|
110
|
+
format.js do
|
111
|
+
@pages = Page.order(:lft).all.group_by(&:parent_id)
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
|
117
|
+
def sort
|
118
|
+
params[:pages].values.each do |value|
|
119
|
+
@page = Page.find_by_id(value[:item_id])
|
120
|
+
parent_id = value[:parent_id] == 'root' ? nil : value[:parent_id]
|
121
|
+
|
122
|
+
@page.parent_id = parent_id
|
123
|
+
@page.lft = value[:left].to_i - 1
|
124
|
+
@page.rgt = value[:right].to_i - 1
|
125
|
+
@page.save
|
126
|
+
end
|
127
|
+
|
128
|
+
render :nothing => true
|
129
|
+
end
|
130
|
+
|
131
|
+
def duplicate
|
132
|
+
@original_page = Page.find_by_permalink params[:id], :include => [:page_parts]
|
133
|
+
@page = @original_page.duplicate
|
134
|
+
@pages = {}
|
135
|
+
|
136
|
+
respond_to do |format|
|
137
|
+
format.html { redirect_to admin_pages_path, :notice => 'Page was successfully duplicated' }
|
138
|
+
format.js
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
def parse_content
|
143
|
+
case params[:data_type]
|
144
|
+
when 'textile'
|
145
|
+
render :text => RedCloth.new(params[:data]).to_html
|
146
|
+
when 'markdown'
|
147
|
+
render :text => BlueCloth.new(params[:data]).to_html
|
148
|
+
else
|
149
|
+
render :nothing => true
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
private
|
154
|
+
|
155
|
+
# Retrieve the available routes (:get only) and compile the ones already taken by other pages
|
156
|
+
def get_routes
|
157
|
+
@current = Page.just_controller_and_actions.collect{ |i| i.taken }.compact
|
158
|
+
@routes = {}
|
159
|
+
|
160
|
+
routes = PageEngine.available_routes
|
161
|
+
|
162
|
+
routes.keys.each do |controller|
|
163
|
+
@routes[controller.humanize] = routes[controller].collect { |action| ["#{controller.humanize}::#{action.humanize}", "#{controller}|#{action}"] }
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|