character 0.1.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (173) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +4 -1
  3. data/.rspec +1 -0
  4. data/README.md +185 -14
  5. data/Rakefile +8 -1
  6. data/app/assets/images/character/logo.jpg +0 -0
  7. data/app/assets/javascripts/character.coffee +134 -0
  8. data/app/assets/javascripts/character/dashboard/_visitors.coffee +27 -0
  9. data/app/assets/javascripts/character/dashboard/layout.coffee +156 -0
  10. data/app/assets/javascripts/character/dashboard/module.coffee +51 -0
  11. data/app/assets/javascripts/character/generic/details.coffee +233 -0
  12. data/app/assets/javascripts/character/generic/helpers/compact_object.coffee +7 -0
  13. data/app/assets/javascripts/character/generic/helpers/data_inputs.coffee +21 -0
  14. data/app/assets/javascripts/character/generic/helpers/date_select.coffee +45 -0
  15. data/app/assets/javascripts/character/generic/helpers/editor.coffee +11 -0
  16. data/app/assets/javascripts/character/generic/helpers/redactor.coffee +38 -0
  17. data/app/assets/javascripts/character/generic/helpers/reorder.coffee +36 -0
  18. data/app/assets/javascripts/character/generic/layout.coffee +40 -0
  19. data/app/assets/javascripts/character/generic/list.coffee +214 -0
  20. data/app/assets/javascripts/character/generic/model.coffee +135 -0
  21. data/app/assets/javascripts/character/generic/module.coffee +157 -0
  22. data/app/assets/javascripts/character/images/module.coffee +148 -0
  23. data/app/assets/javascripts/character/pages/module.coffee +43 -0
  24. data/app/assets/javascripts/character/posts/module.coffee +113 -0
  25. data/app/assets/javascripts/character/settings/_admins.coffee +61 -0
  26. data/app/assets/javascripts/character/settings/_authors.coffee +56 -0
  27. data/app/assets/javascripts/character/settings/_categories.coffee +61 -0
  28. data/app/assets/javascripts/character/settings/_layout.coffee +7 -0
  29. data/app/assets/javascripts/character/settings/_redirects.coffee +56 -0
  30. data/app/assets/javascripts/character/settings/_website.coffee +7 -0
  31. data/app/assets/javascripts/character/settings/details.coffee +16 -0
  32. data/app/assets/javascripts/character/settings/layout.coffee +46 -0
  33. data/app/assets/javascripts/character/settings/module.coffee +78 -0
  34. data/app/assets/stylesheets/character.scss +37 -0
  35. data/app/assets/stylesheets/character/_admins.scss +30 -0
  36. data/app/assets/stylesheets/character/_authors.scss +30 -0
  37. data/app/assets/stylesheets/character/_categories.scss +32 -0
  38. data/app/assets/stylesheets/character/_dashboard.scss +143 -0
  39. data/app/assets/stylesheets/character/_posts.scss +93 -0
  40. data/app/assets/stylesheets/character/_redirects.scss +35 -0
  41. data/app/assets/stylesheets/character/base.scss +967 -0
  42. data/app/assets/stylesheets/character/typography.scss +29 -0
  43. data/app/controllers/character/api_controller.rb +170 -0
  44. data/app/controllers/character/application_controller.rb +37 -0
  45. data/app/controllers/character/settings_controller.rb +72 -0
  46. data/app/controllers/concerns/character/auth_concern.rb +41 -0
  47. data/app/controllers/concerns/character/instance_concern.rb +31 -0
  48. data/app/controllers/concerns/character/json_object_concern.rb +32 -0
  49. data/app/controllers/concerns/character/model_class_concern.rb +28 -0
  50. data/app/controllers/concerns/character/params_concern.rb +33 -0
  51. data/app/controllers/concerns/character/templates_concern.rb +32 -0
  52. data/app/controllers/concerns/not_found.rb +18 -0
  53. data/app/controllers/concerns/website_settings.rb +18 -0
  54. data/app/controllers/pages_controller.rb +8 -0
  55. data/app/controllers/posts_controller.rb +43 -0
  56. data/app/helpers/character_helper.rb +8 -0
  57. data/app/helpers/page_helper.rb +67 -0
  58. data/app/inputs/foundation_string_input.rb +44 -0
  59. data/app/inputs/foundation_switch_input.rb +35 -0
  60. data/app/models/character/image.rb +12 -0
  61. data/app/models/character/page.rb +21 -0
  62. data/app/models/character/post.rb +32 -12
  63. data/app/models/character/post_author.rb +22 -0
  64. data/app/models/character/post_category.rb +21 -0
  65. data/app/models/character/redirect.rb +15 -0
  66. data/app/models/character/settings/variable.rb +23 -0
  67. data/app/models/character/sitemap/sitemap_generator_helper.rb +15 -0
  68. data/app/models/character/user.rb +29 -0
  69. data/app/models/concerns/created_ago.rb +12 -0
  70. data/app/models/concerns/hideable.rb +27 -0
  71. data/app/models/concerns/orderable.rb +8 -0
  72. data/app/models/concerns/report.rb +11 -0
  73. data/app/models/concerns/report_daily.rb +32 -0
  74. data/app/models/concerns/report_monthly.rb +18 -0
  75. data/app/models/concerns/report_weekly.rb +19 -0
  76. data/app/models/concerns/updated_ago.rb +12 -0
  77. data/app/models/reports/analytics_daily.rb +26 -0
  78. data/app/models/reports/analytics_monthly.rb +16 -0
  79. data/app/models/reports/analytics_weekly.rb +16 -0
  80. data/app/services/google_analytics.rb +43 -0
  81. data/app/uploaders/character/image_uploader.rb +22 -0
  82. data/app/uploaders/character/settings/file_uploader.rb +5 -0
  83. data/app/views/character/character.html.erb +67 -0
  84. data/app/views/character/generic/form.html.erb +8 -0
  85. data/app/views/character/pages/form.html.erb +28 -0
  86. data/app/views/character/posts/form.html.erb +38 -0
  87. data/app/views/character/settings/admins.html.erb +29 -0
  88. data/app/views/character/settings/post_authors.html.erb +28 -0
  89. data/app/views/character/settings/post_categories.html.erb +31 -0
  90. data/app/views/character/settings/redirects.html.erb +30 -0
  91. data/app/views/character/settings/settings_group.html.erb +67 -0
  92. data/app/views/errors/not_found.html.erb +157 -0
  93. data/app/views/pages/_default.html.erb +3 -0
  94. data/app/views/pages/_redactor.html.erb +3 -0
  95. data/app/views/pages/show.html.erb +5 -0
  96. data/app/views/posts/_post.html.erb +17 -0
  97. data/app/views/posts/author.html.erb +18 -0
  98. data/app/views/posts/category.html.erb +18 -0
  99. data/app/views/posts/index.html.erb +18 -0
  100. data/app/views/posts/rss.builder +19 -0
  101. data/app/views/posts/show.html.erb +14 -0
  102. data/app/views/shared/_google_analytics.html.erb +13 -0
  103. data/character.gemspec +48 -5
  104. data/doc/README_old.md +161 -0
  105. data/doc/generic_app.md +19 -0
  106. data/doc/img/demo-1.jpg +0 -0
  107. data/doc/img/demo-2.jpg +0 -0
  108. data/doc/img/demo-3.jpg +0 -0
  109. data/doc/img/demo-4.jpg +0 -0
  110. data/doc/img/demo-5.jpg +0 -0
  111. data/doc/instances.md +39 -0
  112. data/doc/settings.md +1 -0
  113. data/lib/character.rb +29 -1
  114. data/lib/character/engine.rb +33 -1
  115. data/lib/character/generators/bootstrap_generator.rb +51 -0
  116. data/lib/character/instance.rb +59 -0
  117. data/lib/character/routing.rb +42 -5
  118. data/lib/character/settings.rb +101 -0
  119. data/lib/character/templates/admin.coffee +15 -0
  120. data/lib/character/templates/admin.scss +3 -0
  121. data/lib/character/templates/application.html.erb +44 -0
  122. data/lib/character/templates/application.scss +12 -0
  123. data/lib/character/templates/assets.rb +1 -0
  124. data/lib/character/templates/initializer.rb +5 -0
  125. data/lib/character/templates/settings.scss +11 -0
  126. data/lib/character/templates/settings.yml +67 -0
  127. data/lib/character/templates/typography.scss +13 -0
  128. data/lib/character/version.rb +2 -2
  129. data/lib/mongoid/carrierwave_serialization_patch.rb +9 -0
  130. data/lib/tasks/analytics.rake +52 -0
  131. data/test/config/application.rb +65 -0
  132. data/test/config/mongoid.yml +12 -0
  133. data/test/config/secrets.yml +22 -0
  134. data/test/controllers/character/api_controller_test.rb +94 -0
  135. data/test/factories/product_factory.rb +5 -0
  136. data/test/lib/character/engine_test.rb +33 -0
  137. data/test/lib/character/routing_test.rb +31 -0
  138. data/test/test_helper.rb +48 -0
  139. data/vendor/assets/javascripts/backbone.js +944 -794
  140. data/vendor/assets/javascripts/jquery.fileupload.js +1426 -0
  141. data/vendor/assets/javascripts/jquery.form.js +1278 -0
  142. data/vendor/assets/javascripts/jquery.iframe-transport.js +214 -0
  143. data/vendor/assets/javascripts/raphael.js +8117 -0
  144. data/vendor/assets/javascripts/raphael.morris.js +1885 -0
  145. data/vendor/assets/javascripts/underscore.inflection.js +177 -0
  146. data/vendor/assets/javascripts/underscore.string.js +1 -1
  147. data/vendor/assets/stylesheets/csspinner.css +361 -0
  148. data/vendor/assets/stylesheets/normalize.css +423 -0
  149. metadata +499 -49
  150. data/app/controllers/character/posts_controller.rb +0 -27
  151. data/lib/generators/character/install_generator.rb +0 -42
  152. data/lib/generators/character/templates/README +0 -1
  153. data/lib/generators/character/templates/admin/character.rb +0 -3
  154. data/vendor/assets/fonts/general_foundicons.eot +0 -0
  155. data/vendor/assets/fonts/general_foundicons.svg +0 -15
  156. data/vendor/assets/fonts/general_foundicons.ttf +0 -0
  157. data/vendor/assets/fonts/general_foundicons.woff +0 -0
  158. data/vendor/assets/javascripts/character/index.js.coffee +0 -53
  159. data/vendor/assets/javascripts/character/models/post.js.coffee +0 -39
  160. data/vendor/assets/javascripts/character/views/app.js.coffee +0 -81
  161. data/vendor/assets/javascripts/character/views/editor.js.coffee +0 -231
  162. data/vendor/assets/javascripts/character/views/editor_settings.js.coffee +0 -44
  163. data/vendor/assets/javascripts/character/views/index.js.coffee +0 -116
  164. data/vendor/assets/javascripts/character/views/preview.js.coffee +0 -49
  165. data/vendor/assets/javascripts/jquery.smartresize.js +0 -30
  166. data/vendor/assets/javascripts/lodash.js +0 -4258
  167. data/vendor/assets/javascripts/showdown.js +0 -62
  168. data/vendor/assets/stylesheets/character/_base.css.scss +0 -84
  169. data/vendor/assets/stylesheets/character/_icons.css.scss.erb +0 -96
  170. data/vendor/assets/stylesheets/character/_view_editor.css.scss +0 -115
  171. data/vendor/assets/stylesheets/character/_view_index.css.scss +0 -73
  172. data/vendor/assets/stylesheets/character/_view_preview.css.scss +0 -49
  173. data/vendor/assets/stylesheets/character/index.css.scss +0 -32
@@ -0,0 +1,93 @@
1
+ //---------------------------------------------------------
2
+ // REDACTOR
3
+ //---------------------------------------------------------
4
+
5
+ .character {
6
+ .post h1 { margin-top: 0!important; }
7
+ .post, .page { padding: 40px;
8
+ max-width: 780px;
9
+ margin: 0 auto;
10
+ .redactor_editor { border: none;
11
+ padding: 0px;
12
+ overflow: inherit;
13
+ }
14
+ .redactor_box { margin-top: 13px;
15
+ margin-bottom: 100px;
16
+ }
17
+ }
18
+ }
19
+
20
+ // CUSTOM TOOLBAR POSITION
21
+
22
+ .chr-redactor-toolbar { position: absolute;
23
+ width: 100%;
24
+ left: 0;
25
+ top: 71px;
26
+ visibility: hidden;
27
+ padding: 0 25px;
28
+ border-bottom: 1px solid rgba(0, 0, 0, 0.1);
29
+ background-color: #fff;
30
+ .redactor_toolbar.redactor-toolbar-external { border: 0; }
31
+ }
32
+
33
+ .chr-show-redactor-toolbar {
34
+ .chr-redactor-toolbar { visibility: visible; }
35
+ }
36
+
37
+ //---------------------------------------------------------
38
+ // POST FORM
39
+ //---------------------------------------------------------
40
+
41
+ .character_post_category_id select,
42
+ .character_post_author_id select,
43
+ .character_post_published_at { width: 40%;
44
+ }
45
+
46
+ // FEATURED IMAGE
47
+
48
+ .character-post-featured-image-upload { display: none; // hide featured image by default
49
+ margin: 0 0 -40px;
50
+ height: 82px;
51
+ cursor: pointer;
52
+ background-position: center center;
53
+ background-size: cover;
54
+ text-align: center;
55
+
56
+ &:before { content: '\f03e';
57
+ font-family: FontAwesome;
58
+ color: $list_border_color;
59
+ position: relative;
60
+ font-size: 48px;
61
+ top: 20px;
62
+ }
63
+ &:hover { border-color: $secondary_color;
64
+ &:before { color: $secondary_color;
65
+ }
66
+ }
67
+
68
+ &.has-image { box-shadow: inset 0 0 1px 0px rgba(0,0,0,.5);
69
+ margin: -1px -1px 20px -1px;
70
+ @include single-transition(height, .2s, .25s);
71
+ &:before { content: '';
72
+ }
73
+ }
74
+
75
+ .remove { font-size: 24px;
76
+ color: rgba(255,255,255,.7);
77
+ margin: 12px 25px;
78
+ float: right;
79
+ opacity: .0;
80
+ }
81
+ }
82
+
83
+ .character-post-featured-image-upload.has-image.select,
84
+ .character-post-featured-image-upload.has-image:hover,
85
+ .fullscreen .character-post-featured-image-upload.has-image { height: 244px;
86
+ @include single-transition(height, .2s, .25s);
87
+ .remove { opacity: 1;
88
+ @include single-transition(opacity, .2s, .45s);
89
+
90
+ &:hover { color: #fff;
91
+ }
92
+ }
93
+ }
@@ -0,0 +1,35 @@
1
+ //---------------------------------------------------------
2
+ // REDIRECTS
3
+ //---------------------------------------------------------
4
+
5
+ .redirects .simple_form {
6
+ .input.string.objects_destination > input,
7
+ .input.string.objects_path > input { font-size: 1.2em;
8
+ border-bottom: none;
9
+ margin-bottom: 0;
10
+ padding: .3em .5em;
11
+ }
12
+ .objects_path { float: left;
13
+ width: 30em;
14
+ }
15
+ .input.string.objects_destination > input {
16
+ border-top: 1px solid #e6e9f0;
17
+ padding-right: 60px;
18
+ }
19
+ .input.select.objects_type { float: right;
20
+ margin: 0;
21
+ select { position: relative; bottom: -5px; }
22
+ }
23
+ .action_add { @include button;
24
+ margin-top: 4em;
25
+ }
26
+ .action_delete { position: absolute;
27
+ margin-left: -35px;
28
+ margin-top: 25px;
29
+ }
30
+ .fields { margin-bottom: 1em;
31
+ }
32
+ #template,
33
+ #template .action_delete { display: none;
34
+ }
35
+ }
@@ -0,0 +1,967 @@
1
+ /* CONTENT of _base.scss:
2
+ - generic
3
+ - mixins
4
+ - login
5
+ - menu
6
+ - layout
7
+ - scopes
8
+ - buttons
9
+ - icons
10
+ - search
11
+ - settings
12
+ - error
13
+ - images
14
+ - redactor
15
+ */
16
+
17
+ //---------------------------------------------------------
18
+ // GENERIC
19
+ //---------------------------------------------------------
20
+
21
+ // http://www.paulirish.com/2012/box-sizing-border-box-ftw/
22
+ // apply a natural box layout model to all elements
23
+ *, *:before, *:after { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; }
24
+
25
+ // this makes no bouncing effect when scrolling on mac with touchpad
26
+ html { overflow: hidden;
27
+ // Make everything look a little nicer in webkit
28
+ -webkit-font-smoothing: antialiased;
29
+ }
30
+
31
+ // antialiased fonts on webkit browsers
32
+ body { background-color: $menu_color;
33
+ }
34
+
35
+ b, strong { font-weight: $font_bold;
36
+ }
37
+
38
+
39
+
40
+
41
+
42
+
43
+
44
+
45
+ //---------------------------------------------------------
46
+ // MIXINS
47
+ //---------------------------------------------------------
48
+
49
+ @import "compass/reset/utilities";
50
+ @import "compass/css3/transition";
51
+
52
+ @mixin font { font-family: 'Open Sans', sans-serif;
53
+ font-weight: $font_regular;
54
+ }
55
+
56
+ @mixin position($left, $top, $right, $bottom, $z-index: 0) {
57
+ position: absolute;
58
+ left: $left; top: $top; right: $right; bottom: $bottom;
59
+ z-index: $z-index;
60
+ }
61
+
62
+ @mixin scrollable { overflow: hidden;
63
+ overflow-y: auto;
64
+ }
65
+
66
+ @mixin reset-list { margin: 0;
67
+ padding: 0;
68
+ @include reset-list-style;
69
+ }
70
+
71
+ // https://github.com/michaelsacca/Compass-Placeholder-Text-Mixin
72
+ @mixin input-placeholder {
73
+ &.placeholder { @content; }
74
+ &:-moz-placeholder { @content; }
75
+ &::-moz-placeholder { @content; }
76
+ &:-ms-input-placeholder { @content; }
77
+ &::-webkit-input-placeholder { @content; }
78
+ }
79
+
80
+ @mixin triangle($dir, $size, $color) { display: inline-block;
81
+ width: 0px;
82
+ height: 0px;
83
+ border-style: solid;
84
+ content: '';
85
+ @if ( $dir == "down" ) { border-width: $size $size 0 $size;
86
+ border-color: $color transparent transparent transparent;
87
+ } @else { border-width: 0 $size $size $size;
88
+ border-color: transparent transparent $color transparent;
89
+ }
90
+ }
91
+
92
+ @mixin input { @include simple_form_input(#e6e9f0, #6dd2f2); }
93
+
94
+
95
+
96
+
97
+
98
+
99
+
100
+
101
+ //---------------------------------------------------------
102
+ // LOGIN
103
+ //---------------------------------------------------------
104
+
105
+ @mixin login-button { color: #fff;
106
+ display: block;
107
+ width: 200px;
108
+ border: 2px solid #fff;
109
+ padding: 10px 0;
110
+ border-radius: 4px;
111
+ font-weight: $font_bold;
112
+ text-align: center;
113
+ opacity: .7;
114
+ text-decoration: none;
115
+ &:hover { opacity: 1;
116
+ }
117
+ }
118
+
119
+ .chr-login { @include font;
120
+ position: fixed;
121
+ width: 100%;
122
+ height: 100%;
123
+ background-size: cover;
124
+ background-repeat: no-repeat;
125
+ background-position: center center;
126
+ background-attachment: fixed;
127
+ .browserid_login { position: absolute;
128
+ top: 20px;
129
+ right: 20px;
130
+ @include login-button;
131
+ }
132
+ }
133
+
134
+ .chr-no-access { @include font;
135
+ color: #fff;
136
+ max-width: 400px;
137
+ margin: 50px auto;
138
+ text-align: center;
139
+ .browserid_logout { @include login-button;
140
+ margin: 50px auto;
141
+ }
142
+ h2 { margin-bottom: 0;
143
+ }
144
+ }
145
+
146
+
147
+
148
+
149
+
150
+
151
+
152
+
153
+
154
+ //---------------------------------------------------------
155
+ // MENU
156
+ //---------------------------------------------------------
157
+
158
+ .chr-menu { position: absolute;
159
+ width: 90px;
160
+ height: 100%;
161
+ z-index: 1;
162
+ text-align: center;
163
+ @include font;
164
+
165
+ ul { @include reset-list;
166
+ border-bottom: 1px solid $menu_border_color;
167
+ }
168
+
169
+ a { border-top: 1px solid $menu_border_color;
170
+ display: block;
171
+ width: 90px;
172
+ color: #fff;
173
+ font-weight: $font_bold;
174
+ font-size: 10px;
175
+ padding: 21px 0 18px;
176
+ text-decoration: none;
177
+ }
178
+ a.active { background-color: $menu_active_color;
179
+ }
180
+ .browserid_logout { padding: 0;
181
+ &:before { content: 'Sign out';
182
+ width: 90px;
183
+ height: 71px;
184
+ background: rgba(0,0,0, .75);
185
+ color: #fff;
186
+ font-weight: $font_semi_bold;
187
+ font-size: 14px;
188
+ position: absolute;
189
+ top: 0;
190
+ left: 0;
191
+ padding-top: 25px;
192
+ opacity: 0;
193
+ transition: opacity 0.25s;
194
+ }
195
+ &:hover {
196
+ &:before { opacity: 1;
197
+ }
198
+ }
199
+ }
200
+ }
201
+
202
+ .chr-menu-user { margin: 17px 0 16px;
203
+ border-radius: 18px;
204
+ vertical-align: top;
205
+ width: 36px;
206
+ height: 36px;
207
+ }
208
+
209
+ .chr-menu-icon { display: block;
210
+ font-size: 24px;
211
+ color: $menu_icon_color;
212
+ margin-bottom: 3px;
213
+ }
214
+
215
+ .chr-menu-item-settings { @include position(0, inherit, inherit, 0, 1);
216
+ }
217
+
218
+
219
+
220
+
221
+
222
+
223
+
224
+ //---------------------------------------------------------
225
+ // LAYOUT
226
+ //---------------------------------------------------------
227
+
228
+ .chr-content { @include position(90px, 0, 0, 0, 2);
229
+ background-color: #fff;
230
+ }
231
+
232
+ .chr-logo { background-position: 50% 50%;
233
+ background-repeat: no-repeat no-repeat;
234
+ }
235
+
236
+ .chr-layout .left { @include position(0, 0, inherit, 0, 2);
237
+ width: 35%;
238
+ }
239
+
240
+ .chr-layout .right { @include position(inherit, 0, 0, 0, 3);
241
+ width: 65%;
242
+ overflow: hidden;
243
+ }
244
+
245
+ .chr-layout .fullscreen { background: rgba(0,0,0,0.05);
246
+ width: 100%;
247
+ }
248
+
249
+ .chr-list,
250
+ .chr-list-header,
251
+ .chr-details-header { @include font;
252
+ a { text-decoration: none;
253
+ }
254
+ }
255
+
256
+ .chr-list-header,
257
+ .chr-details-header { background: $header_color;
258
+ height: 71px;
259
+ border-bottom: 1px solid $header_border_color;
260
+
261
+ .title { font-size: 16px;
262
+ font-weight: $font_bold;
263
+ color: #fff;
264
+ white-space: nowrap;
265
+ text-overflow: ellipsis;
266
+ overflow: hidden;
267
+ }
268
+ .meta { font-size: 12px;
269
+ color: $meta_color;
270
+ }
271
+
272
+ > div > a { opacity: .7;
273
+ color: #fff;
274
+ cursor: pointer;
275
+ &:hover { opacity: 1;
276
+ }
277
+ }
278
+ }
279
+
280
+ .chr-list-header { @include position(0, 0, 0, inherit, 2);
281
+ border-right: 1px solid $header_border_color;
282
+ padding: 23px 25px 27px;
283
+ }
284
+
285
+ .chr-details-header { @include position(0, 0, 0, inherit, 3);
286
+ padding: 23px 25px 27px;
287
+ }
288
+
289
+ .chr-list { @include position(0, 71px, 0, 0, 1);
290
+ @include scrollable;
291
+ background-color: $list_color;
292
+ border-right: 1px solid $list_border_color;
293
+
294
+ ul { @include reset-list;
295
+ margin-bottom: 5em;
296
+ }
297
+ .empty { text-align: center;
298
+ line-height: 5;
299
+ color: rgba(0,0,0,.25);
300
+ font-size: 13px;
301
+ text-transform: uppercase;
302
+ }
303
+ .placeholder { background: #fff;
304
+ min-height: 80px;
305
+ }
306
+ }
307
+
308
+ .chr-list-item {
309
+ a { background: $list_item_color;
310
+ border-bottom: 1px solid $list_border_color;
311
+ display: block;
312
+ height: 81px;
313
+ padding: 20px 25px;
314
+ }
315
+
316
+ &.active a { background: $list_item_active_color;
317
+ border-bottom: 2px solid $secondary_color;
318
+ }
319
+
320
+ // Default list item layout
321
+ .title,
322
+ .meta { white-space: nowrap;
323
+ text-overflow: ellipsis;
324
+ overflow: hidden;
325
+ font-size: 12px;
326
+ color: $list_item_meta_color;
327
+ }
328
+
329
+ .title { font-size: 14px;
330
+ font-weight: $font_bold;
331
+ color: #474a4c;
332
+ margin-bottom: 4px;
333
+ }
334
+
335
+ .thumbnail { width: 42px;
336
+ height: 42px;
337
+ border-radius: 4px;
338
+ margin-right: 20px;
339
+ float: left;
340
+ display: none;
341
+ margin-top: -1px;
342
+ }
343
+
344
+ &.has-thumbnail .thumbnail { display: inline-block;
345
+ }
346
+ }
347
+
348
+ .chr-details-content { @include position(0, 71px, 0, 0, 1);
349
+ @include scrollable;
350
+ background-color: #fff;
351
+ .simple_form { @include simple_form();
352
+ @include font;
353
+ margin: 0 auto;
354
+ padding: 60px;
355
+ // remove button for nested form images
356
+ .nested_form.images .remove_nested_fields {
357
+ @extend .chr-icon, .icon-close-alt;
358
+ &:before { content: ''; }
359
+ }
360
+
361
+ //a { color: $secondary_color; }
362
+ }
363
+
364
+ .chr-form-scrolled-up { background-color: #f7f7f7;
365
+ border-bottom: 1px solid $list_border_color;
366
+ > .simple_form { padding-top: 1.5em; padding-bottom: 0em; margin-bottom: 1.5em;
367
+ }
368
+ }
369
+ }
370
+
371
+
372
+
373
+
374
+
375
+
376
+
377
+
378
+
379
+ //---------------------------------------------------------
380
+ // SCOPES
381
+ //---------------------------------------------------------
382
+
383
+ .chr-list-header {
384
+ .dropdown { cursor: pointer;
385
+ &:after { @include triangle('down', 4px, #fff);
386
+ position: relative;
387
+ top: -2px;
388
+ margin-left: 5px;
389
+ }
390
+ }
391
+ .scope ul { @include reset-list;
392
+ display: none;
393
+ background-color: #fff;
394
+ color: #fff;
395
+ position: absolute;
396
+ left: 25px;
397
+ top: 60px;
398
+ min-width: 150px;
399
+ border-radius: 3px;
400
+ box-shadow: 0px 1px 2px 0px rgba(65, 77, 100, .2);
401
+ &:before { @include triangle('up', 8px, #fff);
402
+ position: absolute;
403
+ margin-top: -8px;
404
+ left: 20px;
405
+ }
406
+ a { font-size: 14px;
407
+ font-weight: $font_bold;
408
+ color: $list_scope_color;
409
+ padding: 10px 14px;
410
+ display: block;
411
+ &:hover { background-color: #f8fcfd;
412
+ }
413
+ &.active { color: #fff;
414
+ background-color: $secondary_color;
415
+ }
416
+ }
417
+ li:first-child a { border-top-left-radius:3px; border-top-right-radius:3px; }
418
+ li:last-child a { border-bottom-left-radius:3px; border-bottom-right-radius:3px; }
419
+ }
420
+ .scope ul.show { display: inline-block;
421
+ }
422
+ }
423
+
424
+
425
+
426
+
427
+
428
+
429
+
430
+
431
+
432
+
433
+ //---------------------------------------------------------
434
+ // BUTTONS
435
+ //---------------------------------------------------------
436
+
437
+ @mixin button { background: #fff;
438
+ display: block;
439
+ text-align: center;
440
+ font-size: 12px;
441
+ font-weight: $font_semi_bold;
442
+ color: #9ca1ab;
443
+ border: 2px solid $list_border_color;
444
+ border-radius: 4px;
445
+ width: 120px;
446
+ padding: 6px 0;
447
+ height: 33px;
448
+ &:hover { border: 3px solid $secondary_color;
449
+ padding-top: 5px;
450
+ color: $secondary_color;
451
+ }
452
+ }
453
+
454
+ .chr-details-header button { background: $header_color;
455
+ color: #fff;
456
+ font-size: 12px;
457
+ font-weight: $font_semi_bold;
458
+ border: 2px solid #fff;
459
+ border-radius: 4px;
460
+ width: 120px;
461
+ padding: 6px 0;
462
+ height: 33px;
463
+ &:not(.invert):hover { border: 3px solid #fff;
464
+ padding-top: 5px;
465
+ }
466
+ &.invert { background-color: #fff;
467
+ color: $header_color;
468
+ &:hover { color: $secondary_color;
469
+ }
470
+ }
471
+ }
472
+
473
+ .chr-details-header .published { display: none;
474
+ width: 33px;
475
+ height: 33px;
476
+ color: #fff;
477
+ float: right;
478
+ margin: 7px 10px 0 0;
479
+ font-size: 20px;
480
+ padding: 6px;
481
+ cursor: pointer;
482
+ .fa-eye-slash { display: none; }
483
+ .fa-eye { display: block; }
484
+ &.off { opacity: .75;
485
+ .fa-eye-slash { display: block; }
486
+ .fa-eye { display: none; }
487
+ }
488
+ }
489
+
490
+ .chr-list-header .new,
491
+ .chr-list-header .search,
492
+ .chr-details-header .cancel,
493
+ .chr-details-header .save { float: right;
494
+ }
495
+
496
+ .chr-list-header {
497
+ .new, .search { margin-left: 23px;
498
+ }
499
+ }
500
+
501
+ .chr-details {
502
+ .save { margin-top: -4px;
503
+ }
504
+ .cancel { margin-top: -4px;
505
+ margin-right: 10px;
506
+ }
507
+ }
508
+
509
+ .chr-details.update {
510
+ .chr-details-header { padding: 12px 25px;
511
+ .save { margin-top: 7px;
512
+ }
513
+ .cancel { margin-top: 7px;
514
+ }
515
+ }
516
+ }
517
+
518
+ .chr-list-item {
519
+ &:before { font-family: FontAwesome;
520
+ content: "\f105";
521
+ float: right;
522
+ margin: 25px 25px 0 5px;
523
+ font-size: 28px;
524
+ color: #e0e3ea;
525
+ }
526
+
527
+ &.active:before { color: $list_item_meta_color;
528
+ }
529
+ }
530
+
531
+ .chr-list .ui-sortable .chr-list-item {
532
+ a {
533
+ &:before { font-family: FontAwesome;
534
+ content: "\f142";
535
+ float: left;
536
+ font-size: 20px;
537
+ color: #e0e3ea;
538
+ margin: 12px 0px 0 -15px;
539
+ }
540
+ &:hover {
541
+ &:before { color: $list_item_meta_color;
542
+ }
543
+ }
544
+ }
545
+ }
546
+
547
+
548
+
549
+
550
+
551
+
552
+
553
+
554
+
555
+ //---------------------------------------------------------
556
+ // ICONS
557
+ //---------------------------------------------------------
558
+
559
+ .chr-icon { background-size: contain;
560
+ background-repeat: no-repeat;
561
+ background-position: top left;
562
+ display: inline-block;
563
+ width: 20px;
564
+ height: 20px;
565
+
566
+ &.icon-flip { -webkit-transform:scaleX(-1);
567
+ -moz-transform:scaleX(-1);
568
+ -ms-transform:scaleX(-1);
569
+ -o-transform:scaleX(-1);
570
+ transform:scaleX(-1);
571
+ }
572
+ &.icon-search { background-image: url('data:image/svg+xml;utf8,<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 19.999 19.999" enable-background="new 0 0 19.999 19.999" xml:space="preserve"><path fill="#fff" d="M19.706,18.292l-7.106-7.106C13.476,10.018,14,8.572,14,7c0-3.866-3.134-7-7-7S0,3.134,0,7c0,3.866,3.134,7,7,7c1.572,0,3.018-0.525,4.186-1.399l7.106,7.106c0.181,0.181,0.431,0.293,0.707,0.293c0.552,0,1-0.448,1-1C19.999,18.723,19.887,18.473,19.706,18.292z M6.999,11.999c-2.761,0-5-2.239-5-5s2.239-5,5-5s5,2.239,5,5S9.761,11.999,6.999,11.999z"/></svg>');
573
+ }
574
+ &.icon-plus { background-image: url('data:image/svg+xml;utf8,<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 20 20" enable-background="new 0 0 20 20" xml:space="preserve"><path fill="#fff" d="M19,9h-8V1c0-0.552-0.448-1-1-1S9,0.448,9,1v8H1c-0.552,0-1,0.448-1,1c0,0.552,0.448,1,1,1h8v8c0,0.552,0.448,1,1,1 s1-0.448,1-1v-8h8c0.552,0,1-0.448,1-1C20,9.448,19.552,9,19,9z"/></svg>');
575
+ }
576
+ &.icon-plus-alt { background-image: url('data:image/svg+xml;utf8,<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 20 20" enable-background="new 0 0 20 20" xml:space="preserve"><path fill="#d1d6e0" d="M19,9h-8V1c0-0.552-0.448-1-1-1S9,0.448,9,1v8H1c-0.552,0-1,0.448-1,1c0,0.552,0.448,1,1,1h8v8c0,0.552,0.448,1,1,1 s1-0.448,1-1v-8h8c0.552,0,1-0.448,1-1C20,9.448,19.552,9,19,9z"/></svg>');
577
+ }
578
+ &.icon-close { background-image: url('data:image/svg+xml;utf8,<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 20 20" enable-background="new 0 0 20 20" xml:space="preserve"><path fill="#fff" d="M19.79,18.293L11.498,10l8.293-8.293l0,0C19.971,1.526,20.083,1.276,20.083,1c0-0.552-0.448-1-1-1c-0.276,0-0.526,0.112-0.707,0.293l-8.293,8.293L1.79,0.293l0,0C1.609,0.112,1.359,0,1.083,0c-0.552,0-1,0.448-1,1c0,0.276,0.112,0.526,0.293,0.707L8.669,10l-8.293,8.293C0.195,18.474,0.083,18.724,0.083,19c0,0.552,0.448,1,1,1c0.276,0,0.526-0.112,0.707-0.293l0,0l8.293-8.293l8.293,8.293C18.557,19.888,18.807,20,19.083,20c0.552,0,1-0.448,1-1C20.083,18.724,19.971,18.474,19.79,18.293L19.79,18.293z"/></svg>');
579
+ }
580
+ &.icon-close-alt { background-image: url('data:image/svg+xml;utf8,<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 20 20" enable-background="new 0 0 20 20" xml:space="preserve"><path fill="#d1d6e0" d="M19.79,18.293L11.498,10l8.293-8.293l0,0C19.971,1.526,20.083,1.276,20.083,1c0-0.552-0.448-1-1-1c-0.276,0-0.526,0.112-0.707,0.293l-8.293,8.293L1.79,0.293l0,0C1.609,0.112,1.359,0,1.083,0c-0.552,0-1,0.448-1,1c0,0.276,0.112,0.526,0.293,0.707L8.669,10l-8.293,8.293C0.195,18.474,0.083,18.724,0.083,19c0,0.552,0.448,1,1,1c0.276,0,0.526-0.112,0.707-0.293l0,0l8.293-8.293l8.293,8.293C18.557,19.888,18.807,20,19.083,20c0.552,0,1-0.448,1-1C20.083,18.724,19.971,18.474,19.79,18.293L19.79,18.293z"/></svg>');
581
+ }
582
+ }
583
+
584
+
585
+
586
+
587
+
588
+
589
+
590
+
591
+
592
+
593
+ //---------------------------------------------------------
594
+ // SEARCH
595
+ //---------------------------------------------------------
596
+
597
+ .chr-list-search { position: absolute;
598
+ margin-left: -25px;
599
+ width: 100%;
600
+ display: none;
601
+ background-color: $header_color;
602
+ padding: 0 25px;
603
+ z-index: 1;
604
+ &.active { display: block;
605
+ }
606
+ input { background-color: transparent;
607
+ border: none;
608
+ color: #fff;
609
+ width: 80%;
610
+ @include input-placeholder { color: $meta_color; @include font; }
611
+ @include no-focus-border;
612
+ position: relative;
613
+ top: -4px;
614
+ font-size: 14px;
615
+ margin-left: 5px;
616
+ }
617
+ a { float: right;
618
+ }
619
+ .fa-search { margin-right: 5px;
620
+ color: #fff;
621
+ }
622
+ }
623
+
624
+
625
+
626
+
627
+
628
+
629
+
630
+
631
+
632
+
633
+
634
+ //---------------------------------------------------------
635
+ // SETTINGS
636
+ //---------------------------------------------------------
637
+
638
+ .chr-content.settings {
639
+ .chr-layout .left { width: 25%; }
640
+ .chr-layout .right { width: 75%; }
641
+ .chr-list-item a { height: 60px; }
642
+ .chr-list-item:before { margin: 15px 25px 0 0; }
643
+ }
644
+
645
+ .chr-form-large .simple_form { font-size: 15px;
646
+ max-width: 45em;
647
+ .input:not(.hidden) {
648
+ &.text, &.email, &.string { margin-bottom: 0;
649
+ & > textarea,
650
+ & > input { font-size: 1.6em;
651
+ color: #414d64;
652
+ font-weight: $font_semi_bold;
653
+ border: none;
654
+ border-bottom: 1px solid #e6e9f0;
655
+ box-shadow: none;
656
+ border-radius: 0px;
657
+ padding: 1em inherit;
658
+ &:focus { border-color: #e6e9f0;
659
+ }
660
+ }
661
+ }
662
+ }
663
+ }
664
+
665
+ .chr-settings-file-upload {
666
+ label.file { margin-bottom: 0; }
667
+ a { color: $secondary_color; }
668
+ .input { margin-top: 5px; }
669
+ }
670
+
671
+
672
+
673
+
674
+
675
+
676
+
677
+
678
+ //---------------------------------------------------------
679
+ // ERROR
680
+ //---------------------------------------------------------
681
+
682
+ // Transition effect: http://tympanus.net/Development/FullscreenOverlayStyles/index8.html
683
+
684
+ .chr-error { position: fixed;
685
+ width: 100%;
686
+ height: 100%;
687
+ top: 0;
688
+ left: 0;
689
+ // effects
690
+ visibility: hidden;
691
+ -webkit-transform: translateY(100%);
692
+ transform: translateY(100%);
693
+ -webkit-transition: -webkit-transform 0.5s, visibility 0s 0.5s;
694
+ transition: transform 0.5s, visibility 0s 0.5s;
695
+
696
+ &.open { visibility: visible;
697
+ -webkit-transform: translateY(0%);
698
+ transform: translateY(0%);
699
+ -webkit-transition: -webkit-transform 0.5s;
700
+ transition: transform 0.5s;
701
+ }
702
+ }
703
+
704
+ .chr-error-message { height: 100%;
705
+
706
+ pre { position: relative;
707
+ width:100%;
708
+ height: 100%;
709
+ border: none;
710
+ background: #fff;
711
+ font-size: .8em;
712
+ margin-top: 0;
713
+ padding: 7em;
714
+ word-wrap: break-word;
715
+ }
716
+ }
717
+
718
+ .chr-error-close { width: 51px;
719
+ height: 51px;
720
+ position: fixed;
721
+ background-color: #C52F24;
722
+ color: #fff;
723
+ top: 0;
724
+ left: 0;
725
+ font-weight: 300;
726
+ border: none;
727
+ padding: 3px 0 0;
728
+ @include no-focus-border;
729
+ &:hover { background-color: darken(#C52F24, 5%);
730
+ }
731
+ }
732
+
733
+ .character { -webkit-transition: -webkit-transform 0.5s;
734
+ transition: transform 0.5s;
735
+ &.error-open { -webkit-transform: scale(0.9);
736
+ transform: scale(0.9);
737
+ }
738
+ }
739
+
740
+
741
+
742
+
743
+
744
+
745
+
746
+
747
+
748
+ //---------------------------------------------------------
749
+ // IMAGES
750
+ //---------------------------------------------------------
751
+
752
+ .character-image { height: auto;
753
+ margin: 20px auto 0;
754
+ img { width: 100%;
755
+ display: block;
756
+ }
757
+ // TODO: update
758
+ &.character-image-upload { border: 3px solid #fff;
759
+ border-radius: 0;
760
+ opacity: 1;
761
+ padding: 1px;
762
+ &:before { content: '';
763
+ }
764
+ &:hover { border-color: $secondary_color;
765
+ @include single-transition(border-color, .2s);
766
+ }
767
+ }
768
+ }
769
+
770
+ // Transition effect: http://tympanus.net/Development/FullscreenOverlayStyles/index5.html
771
+
772
+ .chr-images { @include font;
773
+ position: fixed;
774
+ width: 100%;
775
+ height: 100%;
776
+ top: 0;
777
+ left: 0;
778
+ background-color: rgba(255,255,255, .7);
779
+ z-index: 2;
780
+
781
+ // effects
782
+ visibility: hidden;
783
+ display: none; // TODO: check Chrome issue: hover form elements
784
+ opacity: 0;
785
+ @include single-transition(opacity, 0.2s);
786
+ &.open { visibility: visible;
787
+ display: block; // TODO: check Chrome issue: hover form elements
788
+ opacity: 1;
789
+ @include single-transition(opacity, 0.4s);
790
+ }
791
+
792
+ // effects
793
+ .chr-images-dialog { visibility: hidden;
794
+ opacity: 0;
795
+ // TODO: refactor with compass
796
+ -webkit-transform: scale(0.9);
797
+ transform: scale(0.9);
798
+ -webkit-transition: -webkit-transform 0.2s, opacity 0.2s, visibility 0s 0.2s;
799
+ transition: transform 0.2s, opacity 0.2s, visibility 0s 0.2s;
800
+ }
801
+
802
+ &.open .chr-images-dialog { visibility: visible;
803
+ opacity: 1;
804
+ // TODO: refactor with compass
805
+ -webkit-transform: scale(1);
806
+ transform: scale(1);
807
+ -webkit-transition: -webkit-transform 0.4s, opacity 0.4s;
808
+ transition: transform 0.4s, opacity 0.4s;
809
+ }
810
+ }
811
+
812
+ .chr-images-dialog { @include position(50%, 40px, auto, 40px);
813
+ background-color: #f9fafb;
814
+ border: 1px solid #e6e9f0;
815
+ box-shadow: 0px 0px 12px 0px rgba(65, 77, 100, .1);
816
+ }
817
+
818
+ .chr-images-header { height: 52px;
819
+ border-bottom: 1px solid #edeff1;
820
+ padding: 14px 20px;
821
+ background-color: #fff;
822
+ .title { font-size: 16px;
823
+ color: #414d64;
824
+ font-weight: $font_semi_bold;
825
+ }
826
+ }
827
+
828
+ .chr-images-close { float: right;
829
+ border: none;
830
+ padding: 0;
831
+ background-color: transparent;
832
+ margin-top: 2px;
833
+ @include no-focus-border;
834
+ }
835
+
836
+ .chr-images-footer { @include position(0px, auto, 0px, 0px);
837
+ border-top: 1px solid #edeff1;
838
+ height: 72px;
839
+ padding: 20px;
840
+ background-color: #fff;
841
+
842
+ .right { float: right;
843
+ }
844
+
845
+ .button { background: transparent;
846
+ text-align: center;
847
+ color: #9ca1ab;
848
+ font-size: 12px;
849
+ font-weight: $font_semi_bold;
850
+ border: 2px solid #e6e9f0;
851
+ border-radius: 4px;
852
+ width: 120px;
853
+ padding: 6px 0;
854
+ @include no-focus-border;
855
+ cursor: pointer;
856
+ position: relative;
857
+ overflow: hidden;
858
+
859
+ &:first-child { margin-left: 10px; }
860
+
861
+ &.disabled { background-color: #e6e9f0; }
862
+
863
+ &:not(.disabled):hover { color: $secondary_color;
864
+ border-color: $secondary_color;
865
+ }
866
+ }
867
+
868
+ .chr-images-upload { @include position(0px, 0px, auto, auto);
869
+ width: 156px;
870
+ height: 34px;
871
+ cursor: pointer;
872
+ padding-left: 120px;
873
+ }
874
+ }
875
+
876
+ .chr-images-grid { @include position(0, 52px, 0, 72px);
877
+ overflow: hidden;
878
+ overflow-y: scroll;
879
+ ul { @include reset-list;
880
+ padding: 10px;
881
+ display: inline-block;
882
+ }
883
+
884
+ li { float: left;
885
+ margin: 7px;
886
+ width: 156px;
887
+ height: 156px;
888
+ border: 3px solid #f9fafb;
889
+ background-repeat: no-repeat;
890
+ background-position: top left;
891
+
892
+ &:not(.placeholder) { cursor: pointer; }
893
+
894
+ &:not(.placeholder):hover { border-color: $list_border_color;
895
+ box-shadow: inset 0 0 1px 1px #fff;
896
+ }
897
+
898
+ &.placeholder { border-color: $list_border_color;
899
+ border-style: dashed;
900
+ border-radius: 8px;
901
+ // &:before { font-family: FontAwesome;
902
+ // font-size: 40px;
903
+ // color: $list_border_color;
904
+ // content: '\f0ed';
905
+ // position: relative;
906
+ // left: 56px;
907
+ // top: 52px;
908
+ // display: none;
909
+ // }
910
+ }
911
+ }
912
+
913
+ li.selected:hover,
914
+ li.selected { border-color: $secondary_color;
915
+ box-shadow: inset 0 0 1px 1px #fff;
916
+ @include single-transition(border-color, .4s);
917
+ }
918
+
919
+ &.dragover {
920
+ &:before { width: 100%;
921
+ height: 100%;
922
+ position: absolute;
923
+ background-color: rgba(18, 160, 206, 0.8);
924
+ font-family: FontAwesome;
925
+ font-size: 80px;
926
+ color: #fff;
927
+ content: '\f0ed';
928
+
929
+ display: flex;
930
+ align-items: center;
931
+ justify-content: center;
932
+ }
933
+ }
934
+ }
935
+
936
+ .placeholder.csspinner.double-up:after { border-color: $list_border_color; }
937
+ .placeholder.csspinner:before { background-color: transparent; }
938
+
939
+
940
+
941
+
942
+
943
+
944
+
945
+
946
+
947
+
948
+
949
+ //---------------------------------------------------------
950
+ // REDACTOR
951
+ //---------------------------------------------------------
952
+
953
+ .character {
954
+ .redactor_box textarea { background-color: #fff;
955
+ color: #444;
956
+ padding-top: 10px;
957
+ }
958
+
959
+ .redactor_toolbar li a:hover { background-color: $secondary_color; }
960
+ .redactor_toolbar li a:active,
961
+ .redactor_toolbar li a.redactor_act { background-color: $secondary_color;
962
+ color: #fff;
963
+ }
964
+ .redactor_dropdown { @include font;
965
+ a:hover { background-color: $list_color; }
966
+ }
967
+ }