archangel 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/.jshintrc +2 -0
  3. data/.travis.yml +2 -0
  4. data/Gemfile +0 -1
  5. data/README.md +0 -1
  6. data/app/assets/javascripts/archangel/input/datetimepicker.js +87 -0
  7. data/app/assets/javascripts/archangel/object/translate/datetimepicker.js.erb +41 -0
  8. data/app/models/archangel/entry.rb +27 -0
  9. data/app/models/archangel/page.rb +17 -0
  10. data/app/policies/archangel/application_policy.rb +7 -7
  11. data/app/policies/archangel/asset_policy.rb +1 -1
  12. data/app/policies/archangel/entry_policy.rb +1 -1
  13. data/app/policies/archangel/site_policy.rb +2 -2
  14. data/app/themes/default/assets/javascripts/default/backend.js +4 -4
  15. data/app/themes/default/assets/stylesheets/default/backend.css +3 -0
  16. data/app/themes/default/assets/stylesheets/default/backend/core.scss +1 -1
  17. data/app/themes/default/assets/stylesheets/default/common/_selectize.scss +126 -77
  18. data/app/views/archangel/backend/entries/index.html.erb +1 -1
  19. data/app/views/archangel/backend/pages/index.html.erb +1 -1
  20. data/archangel.gemspec +0 -1
  21. data/config/initializers/simple_form_bootstrap.rb +1 -2
  22. data/config/locales/en.yml +31 -17
  23. data/docs/Extension/Ideas.md +2 -0
  24. data/lib/archangel.rb +0 -1
  25. data/lib/archangel/liquid/tags/application_tag.rb +58 -0
  26. data/lib/archangel/liquid/tags/asset_tag.rb +3 -37
  27. data/lib/archangel/liquid/tags/collection_tag.rb +1 -12
  28. data/lib/archangel/liquid/tags/gist_tag.rb +3 -37
  29. data/lib/archangel/liquid/tags/vimeo_tag.rb +3 -24
  30. data/lib/archangel/liquid/tags/widget_tag.rb +1 -6
  31. data/lib/archangel/liquid/tags/youtube_tag.rb +3 -24
  32. data/lib/archangel/testing_support/factories/archangel_entries.rb +5 -1
  33. data/lib/archangel/testing_support/factories/archangel_sites.rb +2 -0
  34. data/lib/archangel/version.rb +1 -1
  35. data/spec/controllers/archangel/frontend/pages_controller_spec.rb +1 -0
  36. data/spec/features/auth/log_in_spec.rb +56 -26
  37. data/spec/features/frontend/drop_variables_spec.rb +18 -2
  38. data/spec/features/frontend/homepage_redirect_spec.rb +2 -2
  39. data/spec/helpers/archangel/flash_helper_spec.rb +7 -3
  40. data/spec/models/archangel/asset_spec.rb +7 -2
  41. data/spec/models/archangel/collection_spec.rb +0 -3
  42. data/spec/models/archangel/entry_spec.rb +40 -0
  43. data/spec/models/archangel/page_spec.rb +20 -3
  44. data/spec/models/archangel/user_spec.rb +0 -3
  45. data/spec/models/archangel/widget_spec.rb +0 -3
  46. data/vendor/assets/javascripts/daterangepicker/daterangepicker.js +1529 -0
  47. data/vendor/assets/stylesheets/daterangepicker/_daterangepicker.scss +407 -0
  48. metadata +6 -18
  49. data/app/assets/javascripts/archangel/input/datetime_picker.js +0 -46
  50. data/app/assets/javascripts/archangel/object/translate/datetime_picker.js.erb +0 -26
@@ -34,7 +34,7 @@
34
34
 
35
35
  <tbody id="sortable">
36
36
  <% @entries.each do |entry| %>
37
- <tr data-id="<%= entry.id %>">
37
+ <tr class="<%= entry.available_status %>" data-id="<%= entry.id %>">
38
38
  <td class="text-center"><%= fa_icon("sort", title: Archangel.t(:sort)) %></td>
39
39
  <% fields.each do |field| %>
40
40
  <td><%= entry.value[field] %></td>
@@ -30,7 +30,7 @@
30
30
 
31
31
  <tbody>
32
32
  <% @pages.each do |page| %>
33
- <tr>
33
+ <tr class="<%= page.published_status %>">
34
34
  <td>
35
35
  <%= page.title %>
36
36
 
@@ -29,7 +29,6 @@ Gem::Specification.new do |s|
29
29
  s.add_dependency "acts_as_tree", "~> 2.7"
30
30
  s.add_dependency "anyway_config", "~> 1.2"
31
31
  s.add_dependency "bootstrap", "~> 4.1"
32
- s.add_dependency "bootstrap3-datetimepicker-rails", "~> 4.17"
33
32
  s.add_dependency "carrierwave", "~> 1.2"
34
33
  s.add_dependency "cocoon", "~> 1.2"
35
34
  s.add_dependency "date_validator", "~> 0.9"
@@ -2,8 +2,7 @@
2
2
 
3
3
  SimpleForm.setup do |config|
4
4
  config.error_notification_class = "alert alert-danger"
5
- config.button_class = "btn btn-default"
6
- config.boolean_label_class = nil
5
+ config.button_class = "btn btn-primary"
7
6
 
8
7
  config.wrappers :vertical_form, tag: "div",
9
8
  class: "form-group",
@@ -20,26 +20,40 @@ en:
20
20
  content_type: Content Type
21
21
  dashboard: Dashboard
22
22
  datetimepicker:
23
- clear: Clear selection
24
- close: Close the picker
23
+ apply: Apply
24
+ cancel: Cancel
25
+ custom_range: Custom
25
26
  date_format: "%Y-%m-%d"
26
27
  date_format_js: YYYY-MM-DD
27
- format: "%Y-%m-%d %H:%M"
28
- format_js: YYYY-MM-DD HH:mm
29
- next_century: Next Century
30
- next_decade: Next Decade
31
- next_month: Next Month
32
- next_year: Next Year
33
- prev_century: Previous Century
34
- prev_decade: Previous Decade
35
- prev_month: Previous Month
36
- prev_year: Previous Year
37
- select_decade: Select Decade
38
- select_month: Select Month
39
- select_year: Select Year
28
+ datetime_format: "%Y-%m-%d %H:%M"
29
+ datetime_format_js: YYYY-MM-DD HH:MM
30
+ days:
31
+ sunday: Sun
32
+ monday: Mon
33
+ tuesday: Tue
34
+ wednesday: Wed
35
+ thursday: Thu
36
+ friday: Fri
37
+ saturday: Sat
38
+ from: From
39
+ months:
40
+ january: January
41
+ february: February
42
+ march: March
43
+ april: April
44
+ may: May
45
+ june: June
46
+ july: July
47
+ august: August
48
+ september: September
49
+ october: October
50
+ november: November
51
+ december: December
52
+ separator: " - "
40
53
  time_format: "%H:%M"
41
- time_format_js: HH:mm
42
- today: Go to today
54
+ time_format_js: HH:MM
55
+ to: To
56
+ week: W
43
57
  destroy: Destroy
44
58
  duplicate_slug: duplicate slug
45
59
  duplicate_field_slug: duplicate slug
@@ -4,6 +4,8 @@ Feeling bored? Looking for ideas?
4
4
 
5
5
  _ \* In no particular order_
6
6
 
7
+ * GDPR
8
+ * https://github.com/prey/gdpr_rails
7
9
  * Preview
8
10
  * Page preview
9
11
  * Angular
@@ -4,7 +4,6 @@ require "acts_as_list"
4
4
  require "acts_as_tree"
5
5
  require "anyway_config"
6
6
  require "bootstrap"
7
- require "bootstrap3-datetimepicker-rails"
8
7
  require "carrierwave"
9
8
  require "cocoon"
10
9
  require "date_validator"
@@ -11,6 +11,64 @@ module Archangel
11
11
  #
12
12
  class ApplicationTag < ::Liquid::Tag
13
13
  include ::ActionView::Helpers::TagHelper
14
+
15
+ ##
16
+ # Regex for asset name
17
+ #
18
+ ASSET_SYNTAX = /
19
+ #{::Liquid::QuotedString}
20
+ |
21
+ (
22
+ [\w-]+\.[\w]+
23
+ |
24
+ #{::Liquid::QuotedString}
25
+ )
26
+ /ox
27
+
28
+ ##
29
+ # Regex for tag syntax
30
+ #
31
+ ASSET_ATTRIBUTES_SYNTAX = /
32
+ (?<asset>#{ASSET_SYNTAX})
33
+ \s*
34
+ (?<attributes>.*)
35
+ \s*
36
+ /omx
37
+
38
+ ##
39
+ # Regex for "key: value" attributes
40
+ #
41
+ # Example
42
+ # {% tag_name "[slug]" [foo: bar, bat: "baz"] %}
43
+ #
44
+ KEY_VALUE_ATTRIBUTES_SYNTAX = /
45
+ (?<key>\w+)
46
+ \s*
47
+ \:
48
+ \s*
49
+ (?<value>#{::Liquid::QuotedFragment})
50
+ /ox
51
+
52
+ ##
53
+ # Slug and attributes syntax
54
+ #
55
+ # Example
56
+ # {% tag_name "[slug]" [attributes] %}
57
+ #
58
+ SLUG_ATTRIBUTES_SYNTAX = /
59
+ (?<slug>#{::Liquid::QuotedFragment}+)
60
+ \s*
61
+ (?<attributes>.*)
62
+ \s*
63
+ /omx
64
+
65
+ ##
66
+ # Slug syntax
67
+ #
68
+ # Example
69
+ # {% tag_name "[slug]" %}
70
+ #
71
+ SLUG_SYNTAX = /(?<slug>#{::Liquid::QuotedFragment}+)\s*/o
14
72
  end
15
73
  end
16
74
  end
@@ -17,40 +17,6 @@ module Archangel
17
17
  class AssetTag < ApplicationTag
18
18
  include ::ActionView::Helpers::UrlHelper
19
19
 
20
- ##
21
- # Regex for tag key
22
- #
23
- KEY_SYNTAX = /
24
- #{::Liquid::QuotedString}
25
- |
26
- (
27
- [\w-]+\.[\w]+
28
- |
29
- #{::Liquid::QuotedString}
30
- )
31
- /ox
32
-
33
- ##
34
- # Regex for tag syntax
35
- #
36
- SYNTAX = /
37
- (?<key>#{KEY_SYNTAX})
38
- \s*
39
- (?<attributes>.*)
40
- \s*
41
- /omx
42
-
43
- ##
44
- # Regex for attributes
45
- #
46
- SYNTAX_ATTRIBUTES = /
47
- (?<key>\w+)
48
- \s*
49
- \:
50
- \s*
51
- (?<value>#{::Liquid::QuotedFragment})
52
- /ox
53
-
54
20
  ##
55
21
  # Asset for Liquid
56
22
  #
@@ -61,13 +27,13 @@ module Archangel
61
27
  def initialize(tag_name, markup, options)
62
28
  super
63
29
 
64
- match = SYNTAX.match(markup)
30
+ match = ASSET_ATTRIBUTES_SYNTAX.match(markup)
65
31
 
66
32
  if match.blank?
67
33
  raise ::Liquid::SyntaxError, Archangel.t("errors.syntax.asset")
68
34
  end
69
35
 
70
- @key = ::Liquid::Variable.new(match[:key], options).name
36
+ @key = ::Liquid::Variable.new(match[:asset], options).name
71
37
  @attributes = {}
72
38
 
73
39
  build_attributes(match[:attributes])
@@ -95,7 +61,7 @@ module Archangel
95
61
  attr_reader :attributes, :key, :size
96
62
 
97
63
  def build_attributes(attrs)
98
- attrs.scan(SYNTAX_ATTRIBUTES) do |key, value|
64
+ attrs.scan(KEY_VALUE_ATTRIBUTES_SYNTAX) do |key, value|
99
65
  @attributes[key.to_sym] = ::Liquid::Expression.parse(value)
100
66
  end
101
67
 
@@ -32,17 +32,6 @@ module Archangel
32
32
  \s*
33
33
  /omx
34
34
 
35
- ##
36
- # Regex for attributes
37
- #
38
- SYNTAX_ATTRIBUTES = /
39
- (?<key>\w+)
40
- \s*
41
- \:
42
- \s*
43
- (?<value>#{::Liquid::QuotedFragment})
44
- /ox
45
-
46
35
  ##
47
36
  # Collection for Liquid
48
37
  #
@@ -63,7 +52,7 @@ module Archangel
63
52
  @value = ::Liquid::Variable.new(match[:value], options).name
64
53
  @attributes = {}
65
54
 
66
- match[:attributes].scan(SYNTAX_ATTRIBUTES) do |key, value|
55
+ match[:attributes].scan(KEY_VALUE_ATTRIBUTES_SYNTAX) do |key, value|
67
56
  @attributes[key.to_sym] = ::Liquid::Expression.parse(value)
68
57
  end
69
58
  end
@@ -13,40 +13,6 @@ module Archangel
13
13
  class GistTag < ApplicationTag
14
14
  include ::ActionView::Helpers::AssetTagHelper
15
15
 
16
- ##
17
- # Regex for tag key
18
- #
19
- KEY_SYNTAX = /
20
- #{::Liquid::QuotedString}
21
- |
22
- (
23
- [\w-]+\.[\w]+
24
- |
25
- #{::Liquid::QuotedString}
26
- )
27
- /ox
28
-
29
- ##
30
- # Regex for tag syntax
31
- #
32
- SYNTAX = /
33
- (?<key>#{KEY_SYNTAX})
34
- \s*
35
- (?<attributes>.*)
36
- \s*
37
- /omx
38
-
39
- ##
40
- # Regex for attributes
41
- #
42
- SYNTAX_ATTRIBUTES = /
43
- (?<key>\w+)
44
- \s*
45
- \:
46
- \s*
47
- (?<value>#{::Liquid::QuotedFragment})
48
- /ox
49
-
50
16
  ##
51
17
  # Asset for Liquid
52
18
  #
@@ -57,16 +23,16 @@ module Archangel
57
23
  def initialize(tag_name, markup, options)
58
24
  super
59
25
 
60
- match = SYNTAX.match(markup)
26
+ match = ASSET_ATTRIBUTES_SYNTAX.match(markup)
61
27
 
62
28
  if match.blank?
63
29
  raise ::Liquid::SyntaxError, Archangel.t("errors.syntax.gist")
64
30
  end
65
31
 
66
- @key = ::Liquid::Variable.new(match[:key], options).name
32
+ @key = ::Liquid::Variable.new(match[:asset], options).name
67
33
  @attributes = {}
68
34
 
69
- match[:attributes].scan(SYNTAX_ATTRIBUTES) do |key, value|
35
+ match[:attributes].scan(KEY_VALUE_ATTRIBUTES_SYNTAX) do |key, value|
70
36
  @attributes[key.to_sym] = ::Liquid::Expression.parse(value)
71
37
  end
72
38
  end
@@ -18,27 +18,6 @@ module Archangel
18
18
  # {% vimeo "183344978" frameborder:4 %}
19
19
  #
20
20
  class VimeoTag < ApplicationTag
21
- ##
22
- # Regex for tag syntax
23
- #
24
- SYNTAX = /
25
- (?<key>#{::Liquid::QuotedFragment}+)
26
- \s*
27
- (?<attributes>.*)
28
- \s*
29
- /omx
30
-
31
- ##
32
- # Regex for attributes
33
- #
34
- SYNTAX_ATTRIBUTES = /
35
- (?<key>\w+)
36
- \s*
37
- \:
38
- \s*
39
- (?<value>#{::Liquid::QuotedFragment})
40
- /ox
41
-
42
21
  ##
43
22
  # Vimeo video embed for Liquid
44
23
  #
@@ -49,16 +28,16 @@ module Archangel
49
28
  def initialize(tag_name, markup, options)
50
29
  super
51
30
 
52
- match = SYNTAX.match(markup)
31
+ match = SLUG_ATTRIBUTES_SYNTAX.match(markup)
53
32
 
54
33
  if match.blank?
55
34
  raise ::Liquid::SyntaxError, Archangel.t("errors.syntax.vimeo")
56
35
  end
57
36
 
58
- @key = ::Liquid::Variable.new(match[:key], options).name
37
+ @key = ::Liquid::Variable.new(match[:slug], options).name
59
38
  @attributes = {}
60
39
 
61
- match[:attributes].scan(SYNTAX_ATTRIBUTES) do |key, value|
40
+ match[:attributes].scan(KEY_VALUE_ATTRIBUTES_SYNTAX) do |key, value|
62
41
  @attributes[key.to_sym] = ::Liquid::Expression.parse(value)
63
42
  end
64
43
  end
@@ -12,11 +12,6 @@ module Archangel
12
12
  # {% widget widget-name %}
13
13
  #
14
14
  class WidgetTag < ApplicationTag
15
- ##
16
- # Regex for tag syntax
17
- #
18
- SYNTAX = /(?<slug>#{::Liquid::QuotedFragment}+)\s*/o
19
-
20
15
  ##
21
16
  # Widget for Liquid
22
17
  #
@@ -27,7 +22,7 @@ module Archangel
27
22
  def initialize(tag_name, markup, options)
28
23
  super
29
24
 
30
- match = SYNTAX.match(markup)
25
+ match = SLUG_SYNTAX.match(markup)
31
26
 
32
27
  if match.blank?
33
28
  raise ::Liquid::SyntaxError, Archangel.t("errors.syntax.widget")
@@ -23,27 +23,6 @@ module Archangel
23
23
  # {% youtube "-X2atEH7nCg" frameborder:4 %}
24
24
  #
25
25
  class YoutubeTag < ApplicationTag
26
- ##
27
- # Regex for tag syntax
28
- #
29
- SYNTAX = /
30
- (?<key>#{::Liquid::QuotedFragment}+)
31
- \s*
32
- (?<attributes>.*)
33
- \s*
34
- /omx
35
-
36
- ##
37
- # Regex for attributes
38
- #
39
- SYNTAX_ATTRIBUTES = /
40
- (?<key>\w+)
41
- \s*
42
- \:
43
- \s*
44
- (?<value>#{::Liquid::QuotedFragment})
45
- /ox
46
-
47
26
  ##
48
27
  # YouTube video embed for Liquid
49
28
  #
@@ -54,16 +33,16 @@ module Archangel
54
33
  def initialize(tag_name, markup, options)
55
34
  super
56
35
 
57
- match = SYNTAX.match(markup)
36
+ match = SLUG_ATTRIBUTES_SYNTAX.match(markup)
58
37
 
59
38
  if match.blank?
60
39
  raise ::Liquid::SyntaxError, Archangel.t("errors.syntax.youtube")
61
40
  end
62
41
 
63
- @key = ::Liquid::Variable.new(match[:key], options).name
42
+ @key = ::Liquid::Variable.new(match[:slug], options).name
64
43
  @attributes = {}
65
44
 
66
- match[:attributes].scan(SYNTAX_ATTRIBUTES) do |key, value|
45
+ match[:attributes].scan(KEY_VALUE_ATTRIBUTES_SYNTAX) do |key, value|
67
46
  @attributes[key.to_sym] = ::Liquid::Expression.parse(value)
68
47
  end
69
48
  end