cardboard_cms 0.1.6 → 0.1.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +0 -6
- data/Gemfile.lock +11 -11
- data/app/assets/images/cardboard/icons/doc.png +0 -0
- data/app/assets/images/cardboard/icons/docx.png +0 -0
- data/app/assets/images/cardboard/icons/pdf.png +0 -0
- data/app/assets/images/cardboard/icons/txt.png +0 -0
- data/app/assets/images/cardboard/icons/xls.png +0 -0
- data/app/assets/images/cardboard/icons/xlsx.png +0 -0
- data/app/assets/images/cardboard/icons/zip.png +0 -0
- data/app/assets/javascripts/cardboard/admin.js +2 -2
- data/app/assets/javascripts/cardboard/main_sidebar.js +7 -1
- data/app/assets/stylesheets/cardboard/_content_sidebar.css.scss +4 -2
- data/app/assets/stylesheets/cardboard/admin.css.scss +8 -6
- data/app/controllers/cardboard/super_user_controller.rb +1 -0
- data/app/helpers/cardboard/public_helper.rb +18 -1
- data/app/models/cardboard/field/boolean.rb +9 -9
- data/app/views/layouts/cardboard/_main_sidebar.html.slim +1 -1
- data/cardboard.gemspec +1 -1
- data/lib/cardboard/helpers/seed.rb +1 -1
- data/lib/cardboard/version.rb +1 -1
- data/lib/cardboard_cms.rb +5 -0
- data/vendor/assets/javascripts/cardboard/jquery.pjax.js +25 -7
- metadata +10 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fe8f9938ba535b8fed9271fb66606e70e78e4a5b
|
4
|
+
data.tar.gz: 4eef9fe937568db71e1cd7af25b5f62f89add959
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 680fb7e71e94677f7930ab992999e43484db299760dbc490a754a60290cb095c0b5f5fc206ecb8c3daf65f5bf7507458d52b02b51016a3a82da3ac2ca7db942e
|
7
|
+
data.tar.gz: 15a04806e88a768d83a769af68f8bacdfc8b13757517538013452c333b6b091eb7197ece71e97d97c83659e673825715819eaf7c93789e6c829947992fbc6b5d
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
cardboard_cms (0.1.
|
4
|
+
cardboard_cms (0.1.8)
|
5
5
|
bootstrap-datepicker-rails
|
6
6
|
bootstrap-sass (~> 2.2)
|
7
7
|
bootstrap-wysihtml5-rails
|
@@ -65,7 +65,7 @@ GEM
|
|
65
65
|
erubis (>= 2.6.6)
|
66
66
|
binding_of_caller (0.7.2)
|
67
67
|
debug_inspector (>= 0.0.1)
|
68
|
-
bootstrap-datepicker-rails (1.
|
68
|
+
bootstrap-datepicker-rails (1.3.0.1)
|
69
69
|
railties (>= 3.0)
|
70
70
|
bootstrap-sass (2.3.2.2)
|
71
71
|
sass (~> 3.2)
|
@@ -79,7 +79,7 @@ GEM
|
|
79
79
|
rack-test (>= 0.5.4)
|
80
80
|
xpath (~> 2.0)
|
81
81
|
chronic (0.10.2)
|
82
|
-
cocoon (1.2.
|
82
|
+
cocoon (1.2.5)
|
83
83
|
coderay (1.0.9)
|
84
84
|
coffee-rails (4.0.1)
|
85
85
|
coffee-script (>= 2.2.0)
|
@@ -87,7 +87,7 @@ GEM
|
|
87
87
|
coffee-script (2.2.0)
|
88
88
|
coffee-script-source
|
89
89
|
execjs
|
90
|
-
coffee-script-source (1.
|
90
|
+
coffee-script-source (1.7.0)
|
91
91
|
columnize (0.3.6)
|
92
92
|
daemons (1.1.9)
|
93
93
|
database_cleaner (1.0.1)
|
@@ -105,7 +105,7 @@ GEM
|
|
105
105
|
orm_adapter (~> 0.1)
|
106
106
|
railties (>= 3.2.6, < 5)
|
107
107
|
warden (~> 1.2.3)
|
108
|
-
dragonfly (1.0)
|
108
|
+
dragonfly (1.0.3)
|
109
109
|
multi_json (~> 1.0)
|
110
110
|
rack
|
111
111
|
erubis (2.7.0)
|
@@ -124,7 +124,7 @@ GEM
|
|
124
124
|
railties (>= 3.1.1)
|
125
125
|
sass-rails (>= 3.1.1)
|
126
126
|
formatador (0.2.4)
|
127
|
-
gon (
|
127
|
+
gon (5.0.1)
|
128
128
|
actionpack (>= 2.3.0)
|
129
129
|
json
|
130
130
|
guard (1.8.2)
|
@@ -147,10 +147,10 @@ GEM
|
|
147
147
|
jquery-rails (3.0.4)
|
148
148
|
railties (>= 3.0, < 5.0)
|
149
149
|
thor (>= 0.14, < 2.0)
|
150
|
-
jquery-ui-rails (4.1.
|
150
|
+
jquery-ui-rails (4.1.1)
|
151
151
|
railties (>= 3.1.0)
|
152
152
|
json (1.8.0)
|
153
|
-
kaminari (0.
|
153
|
+
kaminari (0.15.1)
|
154
154
|
actionpack (>= 3.0.0)
|
155
155
|
activesupport (>= 3.0.0)
|
156
156
|
kaminari-bootstrap (0.1.3)
|
@@ -241,7 +241,7 @@ GEM
|
|
241
241
|
json (~> 1.4)
|
242
242
|
responders (1.0.0)
|
243
243
|
railties (>= 3.2, < 5)
|
244
|
-
sass (3.2.
|
244
|
+
sass (3.2.14)
|
245
245
|
sass-rails (4.0.1)
|
246
246
|
railties (>= 4.0.0, < 5.0)
|
247
247
|
sass (>= 3.1.10)
|
@@ -251,7 +251,7 @@ GEM
|
|
251
251
|
rdoc (~> 3.10)
|
252
252
|
select2-rails (3.5.2)
|
253
253
|
thor (~> 0.14)
|
254
|
-
simple_form (3.0.
|
254
|
+
simple_form (3.0.1)
|
255
255
|
actionpack (>= 4.0.0, < 4.1)
|
256
256
|
activemodel (>= 4.0.0, < 4.1)
|
257
257
|
simplecov (0.7.1)
|
@@ -272,7 +272,7 @@ GEM
|
|
272
272
|
activesupport (>= 3.0)
|
273
273
|
sprockets (~> 2.8)
|
274
274
|
sqlite3 (1.3.7)
|
275
|
-
stringex (2.
|
275
|
+
stringex (2.2.0)
|
276
276
|
temple (0.6.7)
|
277
277
|
thin (1.5.1)
|
278
278
|
daemons (>= 1.0.9)
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -36,11 +36,11 @@ $(document).on('click', '.nav-tabs a', function(e){
|
|
36
36
|
$(this).tab('show');
|
37
37
|
});
|
38
38
|
|
39
|
-
$(document).on("pjax:
|
39
|
+
$(document).on("pjax:success ready cocoon:after-insert", function(e){
|
40
|
+
|
40
41
|
$('select:not([data-search-select])').selectpicker();
|
41
42
|
$('select[data-search-select]').select2({allowClear: true, width: "resolve"});
|
42
43
|
|
43
|
-
|
44
44
|
$('.nav-tabs a:first').tab('show');
|
45
45
|
});
|
46
46
|
|
@@ -2,6 +2,12 @@ $(function(){
|
|
2
2
|
$("a#nav_dashboard_link").click(function(e){
|
3
3
|
e.preventDefault();
|
4
4
|
$("#content_sidebar").toggleClass('toggle');
|
5
|
+
|
6
|
+
// Expand #main_content down to fit the exposed sidebar
|
7
|
+
$("#main_content").css('height',
|
8
|
+
$('#content_sidebar').height() + $('#main_topbar').height()
|
9
|
+
);
|
10
|
+
|
5
11
|
$('#content').toggleClass('toggle');
|
6
12
|
// $(this).toggleClass('active');
|
7
13
|
});
|
@@ -29,4 +35,4 @@ $(function(){
|
|
29
35
|
results.show();
|
30
36
|
});
|
31
37
|
});
|
32
|
-
});
|
38
|
+
});
|
@@ -15,7 +15,9 @@
|
|
15
15
|
display: none;
|
16
16
|
|
17
17
|
&.toggle {
|
18
|
-
|
18
|
+
position: absolute;
|
19
|
+
left: $main_sidebar_width;
|
20
|
+
display: inline;
|
19
21
|
// left: $main_sidebar_width;
|
20
22
|
// -webkit-transition: left $page_nav_slide_speed ease;
|
21
23
|
// -moz-transition: left $page_nav_slide_speed ease;
|
@@ -93,4 +95,4 @@
|
|
93
95
|
}
|
94
96
|
}
|
95
97
|
|
96
|
-
}
|
98
|
+
}
|
@@ -24,15 +24,17 @@ body{
|
|
24
24
|
overflow-x: hidden;
|
25
25
|
}
|
26
26
|
|
27
|
-
#main_content{
|
28
|
-
min-height:100%;
|
29
|
-
overflow: hidden;
|
27
|
+
#main_content {
|
30
28
|
width: 100%;
|
29
|
+
position: relative;
|
30
|
+
min-height: 100%;
|
31
31
|
}
|
32
|
+
|
32
33
|
#main_sidebar, #content_sidebar{
|
33
|
-
|
34
|
-
|
35
|
-
|
34
|
+
top: 0;
|
35
|
+
left: 0;
|
36
|
+
min-height: 100%;
|
37
|
+
position: absolute;
|
36
38
|
}
|
37
39
|
|
38
40
|
.center{
|
@@ -1,6 +1,23 @@
|
|
1
1
|
module Cardboard
|
2
2
|
module PublicHelper
|
3
3
|
|
4
|
+
def dragonfly_image_tag(image, options = {})
|
5
|
+
return nil unless image
|
6
|
+
size = options.delete(:size) || '125x125'
|
7
|
+
image_tag image.thumb(size).url, options
|
8
|
+
end
|
9
|
+
|
10
|
+
def link_to_file(text, file, options = {})
|
11
|
+
return link_to(text, nil, options) unless file && file.url
|
12
|
+
|
13
|
+
html = ""
|
14
|
+
if [:doc, :docx, :xls, :xlsx, :pdf, :zip, :txt].include?(file.format)
|
15
|
+
html += image_tag("cardboard/icons/#{file.format}.png")
|
16
|
+
end
|
17
|
+
html += link_to(text, file.url, options)
|
18
|
+
html.html_safe
|
19
|
+
end
|
20
|
+
|
4
21
|
# Example:
|
5
22
|
# link_to_page 123, class: "btn" do |page|
|
6
23
|
# "hello #{page.title}"
|
@@ -41,7 +58,7 @@ module Cardboard
|
|
41
58
|
inner_nested_pages(Cardboard::Page.arrange(page), &block).try(:html_safe)
|
42
59
|
end
|
43
60
|
|
44
|
-
|
61
|
+
private
|
45
62
|
|
46
63
|
def inner_nested_pages(pages, &block)
|
47
64
|
return unless pages
|
@@ -1,9 +1,14 @@
|
|
1
1
|
module Cardboard
|
2
2
|
class Field::Boolean < Field
|
3
|
-
before_validation :convert_to_boolean
|
4
|
-
|
5
3
|
validate :is_boolean
|
6
|
-
|
4
|
+
|
5
|
+
def value
|
6
|
+
to_boolean(value_uid)
|
7
|
+
end
|
8
|
+
|
9
|
+
def value=(val)
|
10
|
+
self.value_uid = to_boolean(val) #saved as a consistent string 't'
|
11
|
+
end
|
7
12
|
|
8
13
|
def default
|
9
14
|
[true, false].sample
|
@@ -12,12 +17,7 @@ module Cardboard
|
|
12
17
|
private
|
13
18
|
|
14
19
|
def is_boolean
|
15
|
-
errors.add(:value, "is not a valid boolean") if self.
|
16
|
-
end
|
17
|
-
|
18
|
-
def convert_to_boolean
|
19
|
-
self.value = to_boolean(self.value_uid)
|
20
|
-
true # don't return a validation error on false
|
20
|
+
errors.add(:value, "is not a valid boolean") if self.value_uid.nil?
|
21
21
|
end
|
22
22
|
|
23
23
|
def to_boolean(val)
|
data/cardboard.gemspec
CHANGED
@@ -7,7 +7,7 @@ Gem::Specification.new do |s|
|
|
7
7
|
s.license = "GPLv3"
|
8
8
|
s.version = Cardboard::VERSION
|
9
9
|
s.platform = Gem::Platform::RUBY
|
10
|
-
s.authors = ["Michael Elfassy", "
|
10
|
+
s.authors = ["Michael Elfassy", "SmashingBoxes"]
|
11
11
|
s.email = ["michael@smashingboxes.com"]
|
12
12
|
s.homepage = "http://smashingboxes.com"
|
13
13
|
s.summary = "Rails CMS made simple"
|
@@ -29,7 +29,7 @@ module Cardboard
|
|
29
29
|
page_parts.each do |id, part|
|
30
30
|
db_part = db_page.parts.where(identifier: id.to_s).first_or_initialize
|
31
31
|
db_part.part_position_position = part[:position] || :last
|
32
|
-
db_part.update_attributes!(part
|
32
|
+
db_part.update_attributes!(:repeatable => part[:repeatable])
|
33
33
|
|
34
34
|
db_part.subparts.first_or_create!
|
35
35
|
|
data/lib/cardboard/version.rb
CHANGED
data/lib/cardboard_cms.rb
CHANGED
@@ -16,6 +16,11 @@ module Cardboard
|
|
16
16
|
@user_class ||= application.user_class.to_s.camelize.constantize
|
17
17
|
end
|
18
18
|
|
19
|
+
def used_as_cms?
|
20
|
+
@used_as_cms = Cardboard::Page.count > 0 if @used_as_cms.nil? #handle false
|
21
|
+
@used_as_cms
|
22
|
+
end
|
23
|
+
|
19
24
|
def set_resource_controllers
|
20
25
|
Dir[Rails.root.join('app/controllers/cardboard/*_controller.rb')].map.each do |controller|
|
21
26
|
require_dependency controller
|
@@ -1,6 +1,7 @@
|
|
1
1
|
// jquery.pjax.js
|
2
2
|
// copyright chris wanstrath
|
3
3
|
// https://github.com/defunkt/jquery-pjax
|
4
|
+
// version: 1.8.0
|
4
5
|
|
5
6
|
(function($){
|
6
7
|
|
@@ -85,8 +86,7 @@ function handleClick(event, container, options) {
|
|
85
86
|
var defaults = {
|
86
87
|
url: link.href,
|
87
88
|
container: $(link).attr('data-pjax'),
|
88
|
-
target: link
|
89
|
-
fragment: null
|
89
|
+
target: link
|
90
90
|
}
|
91
91
|
|
92
92
|
var opts = $.extend({}, defaults, options)
|
@@ -96,6 +96,7 @@ function handleClick(event, container, options) {
|
|
96
96
|
if (!clickEvent.isDefaultPrevented()) {
|
97
97
|
pjax(opts)
|
98
98
|
event.preventDefault()
|
99
|
+
$(link).trigger('pjax:clicked', [opts])
|
99
100
|
}
|
100
101
|
}
|
101
102
|
|
@@ -127,8 +128,7 @@ function handleSubmit(event, container, options) {
|
|
127
128
|
url: form.action,
|
128
129
|
data: $(form).serializeArray(),
|
129
130
|
container: $(form).attr('data-pjax'),
|
130
|
-
target: form
|
131
|
-
fragment: null
|
131
|
+
target: form
|
132
132
|
}
|
133
133
|
|
134
134
|
pjax($.extend({}, defaults, options))
|
@@ -263,8 +263,22 @@ function pjax(options) {
|
|
263
263
|
window.history.replaceState(pjax.state, container.title, container.url)
|
264
264
|
}
|
265
265
|
|
266
|
+
// Clear out any focused controls before inserting new page contents.
|
267
|
+
document.activeElement.blur()
|
268
|
+
|
266
269
|
if (container.title) document.title = container.title
|
267
270
|
context.html(container.contents)
|
271
|
+
|
272
|
+
// FF bug: Won't autofocus fields that are inserted via JS.
|
273
|
+
// This behavior is incorrect. So if theres no current focus, autofocus
|
274
|
+
// the last field.
|
275
|
+
//
|
276
|
+
// http://www.w3.org/html/wg/drafts/html/master/forms.html
|
277
|
+
var autofocusEl = context.find('input[autofocus], textarea[autofocus]').last()[0]
|
278
|
+
if (autofocusEl && document.activeElement !== autofocusEl) {
|
279
|
+
autofocusEl.focus();
|
280
|
+
}
|
281
|
+
|
268
282
|
executeScriptTags(container.scripts)
|
269
283
|
|
270
284
|
// Scroll to top by default
|
@@ -384,11 +398,15 @@ function onPjaxPopstate(event) {
|
|
384
398
|
var state = event.state
|
385
399
|
|
386
400
|
if (state && state.container) {
|
387
|
-
// When coming forward from a
|
401
|
+
// When coming forward from a separate history session, will get an
|
388
402
|
// initial pop with a state we are already at. Skip reloading the current
|
389
403
|
// page.
|
390
404
|
if (initialPop && initialURL == state.url) return
|
391
405
|
|
406
|
+
// If popping back to the same state, just skip.
|
407
|
+
// Could be clicking back from hashchange rather than a pushState.
|
408
|
+
if (pjax.state.id === state.id) return
|
409
|
+
|
392
410
|
var container = $(state.container)
|
393
411
|
if (container.length) {
|
394
412
|
var direction, contents = cacheMapping[state.id]
|
@@ -648,7 +666,7 @@ function extractContainer(data, xhr, options) {
|
|
648
666
|
// Remove any parent title elements
|
649
667
|
obj.contents = obj.contents.not(function() { return $(this).is('title') })
|
650
668
|
|
651
|
-
// Then scrub any titles from their
|
669
|
+
// Then scrub any titles from their descendants
|
652
670
|
obj.contents.find('title').remove()
|
653
671
|
|
654
672
|
// Gather all script[src] elements
|
@@ -811,7 +829,7 @@ function disable() {
|
|
811
829
|
if ( $.inArray('state', $.event.props) < 0 )
|
812
830
|
$.event.props.push('state')
|
813
831
|
|
814
|
-
|
832
|
+
// Is pjax supported by this browser?
|
815
833
|
$.support.pjax =
|
816
834
|
window.history && window.history.pushState && window.history.replaceState &&
|
817
835
|
// pushState isn't reliable on iOS until 5.
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cardboard_cms
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Elfassy
|
8
|
-
-
|
8
|
+
- SmashingBoxes
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-02-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -491,6 +491,13 @@ files:
|
|
491
491
|
- app/assets/images/cardboard/.gitkeep
|
492
492
|
- app/assets/images/cardboard/bg.png
|
493
493
|
- app/assets/images/cardboard/calendar.png
|
494
|
+
- app/assets/images/cardboard/icons/doc.png
|
495
|
+
- app/assets/images/cardboard/icons/docx.png
|
496
|
+
- app/assets/images/cardboard/icons/pdf.png
|
497
|
+
- app/assets/images/cardboard/icons/txt.png
|
498
|
+
- app/assets/images/cardboard/icons/xls.png
|
499
|
+
- app/assets/images/cardboard/icons/xlsx.png
|
500
|
+
- app/assets/images/cardboard/icons/zip.png
|
494
501
|
- app/assets/images/cardboard/lorem-ipsum-coffe-mug.jpg
|
495
502
|
- app/assets/javascripts/cardboard.js
|
496
503
|
- app/assets/javascripts/cardboard/admin.js
|