atomic_cms 0.2.1 → 0.2.2

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.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/.eslintrc +16 -0
  3. data/.gitignore +11 -0
  4. data/.rspec +2 -0
  5. data/.rubocop.yml +5 -0
  6. data/.ruby-version +1 -0
  7. data/Gemfile +2 -0
  8. data/Gemfile.lock +243 -0
  9. data/README.md +175 -0
  10. data/Rakefile +15 -0
  11. data/app/assets/images/icon_add_component.png +0 -0
  12. data/app/assets/images/icon_add_component@2x.png +0 -0
  13. data/app/assets/javascripts/atomic_cms.js +286 -0
  14. data/app/assets/stylesheets/atomic_cms.css.scss +135 -0
  15. data/app/components/array_component.rb +11 -0
  16. data/app/controllers/atomic_cms/components_controller.rb +7 -0
  17. data/app/controllers/atomic_cms/media_controller.rb +18 -0
  18. data/app/controllers/concerns/media_scrubber.rb +28 -0
  19. data/app/helpers/component_helper.rb +21 -0
  20. data/app/models/atomic_cms/image.rb +6 -0
  21. data/app/models/atomic_cms/media.rb +12 -0
  22. data/app/views/components/_children_field.html.slim +6 -0
  23. data/app/views/components/_edit.html.slim +2 -0
  24. data/app/views/components/_file_field.slim +5 -0
  25. data/app/views/components/_markdown_field.slim +5 -0
  26. data/app/views/components/_select_field.slim +5 -0
  27. data/app/views/components/_template_field.slim +1 -0
  28. data/app/views/components/_text_area_field.slim +4 -0
  29. data/app/views/components/_text_field.slim +3 -0
  30. data/atomic_cms.gemspec +30 -0
  31. data/bin/rails +12 -0
  32. data/config/routes.rb +4 -0
  33. data/db/migrate/20151013175254_create_media.rb +9 -0
  34. data/lib/generators/atomic_cms/assets/assets_generator.rb +33 -7
  35. data/lib/generators/atomic_cms/scaffold/scaffold_generator.rb +76 -0
  36. data/lib/generators/atomic_cms/templates/admin.erb +79 -0
  37. data/lib/generators/atomic_cms/templates/controller.erb +16 -0
  38. data/lib/generators/atomic_cms/templates/model.erb +4 -0
  39. data/lib/generators/atomic_cms/templates/show.html.slim +1 -0
  40. data/vendor/assets/javascripts/angular-markdown.js +19 -0
  41. data/vendor/assets/javascripts/showdown.min.js +2 -0
  42. metadata +40 -21
@@ -1,22 +1,48 @@
1
1
  module AtomicCms
2
2
  module Generators
3
3
  class AssetsGenerator < Rails::Generators::Base
4
+ def install_bourbon
5
+ gem "bourbon", "~> 4.2.6"
6
+ end
7
+
8
+ def install_neat
9
+ gem "neat", "~> 1.7.2"
10
+ end
11
+
12
+ def install_bitters
13
+ gem "bitters", "~> 1.1.0"
14
+ run "bitters install --path ./app/assets/stylesheets"
15
+ end
16
+
17
+ def install_angular
18
+ gem "angularjs-rails", "~> 1.3", "< 1.4"
19
+ end
20
+
4
21
  def initialize_active_admin_javascript
5
- javascript_asset = 'app/assets/javascripts/active_admin.js.coffee'
22
+ javascript_asset = "app/assets/javascripts/active_admin.js.coffee"
6
23
  entries = [
7
- '#= require angular',
8
- '#= require angular-sanitize',
9
- '#= require atomic_cms'
24
+ "#= require angular",
25
+ "#= require angular-sanitize",
26
+ "#= require atomic_cms"
10
27
  ]
11
28
  append_to_file( asset_file: javascript_asset, entries: entries )
12
29
  end
13
30
 
14
31
  def initialize_active_admin_scss
15
- scss_asset = 'app/assets/stylesheets/active_admin.scss'
32
+ scss_asset = "app/assets/stylesheets/active_admin.scss"
16
33
  entries = [
17
- '@import "atomic_cms"',
34
+ '@import "bourbon";',
35
+ '@import "neat";',
36
+ '@import "base/variables";',
37
+ '@import "base/grid-settings";',
38
+ '@import "atomic_cms";',
18
39
  '',
19
40
  '#component_preview {',
41
+ ' @import "base/buttons";',
42
+ ' @import "base/forms";',
43
+ ' @import "base/lists";',
44
+ ' @import "base/tables";',
45
+ ' @import "base/typography";',
20
46
  ' // When editing a page through Atomic CMS',
21
47
  ' // images with broken links should not be displayed.',
22
48
  ' img[src="image"] { display:none !important; }',
@@ -28,7 +54,7 @@ module AtomicCms
28
54
  private
29
55
 
30
56
  def append_to_file(options)
31
- open(options[:asset_file], 'a') do |asset_file|
57
+ open(options[:asset_file], "a") do |asset_file|
32
58
  options[:entries].each do |entry|
33
59
  asset_file.puts entry
34
60
  end
@@ -0,0 +1,76 @@
1
+ require "active_support/core_ext/string"
2
+
3
+ module AtomicCms
4
+ module Generators
5
+ class ScaffoldGenerator < Rails::Generators::Base
6
+ argument :model_name, required: true
7
+
8
+ desc <<-DESC.strip_heredoc
9
+ Create a model, controller, view, admin resource, and route.
10
+ DESC
11
+
12
+ source_root File.expand_path("../../templates", __FILE__)
13
+
14
+ def install_model_template
15
+ setup_scaffold
16
+ create_template(
17
+ template_name: "model.erb",
18
+ full_path: "app/models/#{@scaffold.model_file_name}.rb"
19
+ )
20
+ end
21
+
22
+ def install_controller_template
23
+ create_template(
24
+ template_name: "controller.erb",
25
+ full_path: controller_template_name
26
+ )
27
+ end
28
+
29
+ def install_admin_template
30
+ create_template(
31
+ template_name: "admin.erb",
32
+ full_path: "app/admin/#{@scaffold.model_file_name}.rb"
33
+ )
34
+ end
35
+
36
+ def install_show_view_template
37
+ create_template(
38
+ template_name: "show.html.slim",
39
+ full_path: "app/views/#{@scaffold.view_folder}/show.html.slim"
40
+ )
41
+ end
42
+
43
+ def create_migration
44
+ generate "migration", "create#{@scaffold.model_name} name:string content:text"
45
+ end
46
+
47
+ def set_route
48
+ inject_into_file(
49
+ "config/routes.rb",
50
+ "\n resources :#{@scaffold.controller_file_name}\n",
51
+ after: %r{/atomic_cms"}
52
+ )
53
+ end
54
+
55
+ private
56
+
57
+ def setup_scaffold
58
+ @scaffold = OpenStruct.new(
59
+ model_name: model_name.singularize.titlecase,
60
+ model_file_name: model_name.singularize.downcase.underscore,
61
+ controller_name: model_name.pluralize.titlecase,
62
+ controller_file_name: model_name.pluralize.downcase,
63
+ view_folder: model_name.singularize.downcase.underscore
64
+ )
65
+ end
66
+
67
+ def create_template(options)
68
+ template(options[:template_name], options[:full_path])
69
+ end
70
+
71
+ def controller_template_name
72
+ "app/controllers/#{@scaffold.controller_file_name}_controller.rb"
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,79 @@
1
+ ActiveAdmin.register <%= @scaffold.model_name %> do
2
+ permit_params :content
3
+
4
+ index do
5
+ selectable_column
6
+ column :created_at
7
+ column :updated_at
8
+ actions
9
+ end
10
+
11
+ form html: { class: "edit-atomic-content" } do |f|
12
+ f.semantic_errors(*f.object.errors.keys)
13
+
14
+ # new form
15
+ if !f.object.persisted?
16
+ f.inputs "Details" do
17
+ # f.input :name
18
+ end
19
+ f.actions
20
+
21
+ # edit form
22
+ else
23
+ div class: "buttons" do
24
+ render partial: "admin/edit_buttons"
25
+ f.actions
26
+ end
27
+
28
+ columns do
29
+ column span: 3 do
30
+ panel "Draft", id: "draft-panel" do
31
+ render partial: "components/edit", locals: { f: f }
32
+ end
33
+ end
34
+
35
+ column id: "edit-node-column" do
36
+ div id: "edit-<%= @scaffold.model_file_name %>" do
37
+ f.inputs "<%= @scaffold.model_name %> Details" do
38
+ # f.input :name
39
+ end
40
+ end
41
+
42
+ div id: "edit-node" do
43
+ f.inputs "Edit Element" do
44
+ div id: "edit-node-fields"
45
+ end
46
+
47
+ f.actions do
48
+ li class: "move" do
49
+ a "Up", "#", class: "button", id: "move-node-up"
50
+ end
51
+ li class: "move" do
52
+ a "Down", "#", class: "button", id: "move-node-down"
53
+ end
54
+ li class: "cancel" do
55
+ a "Done", "#", class: "button", id: "done-edit-node"
56
+ end
57
+ li class: "delete" do
58
+ a "Delete", "#", class: "button", id: "delete-node"
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+
67
+ show do
68
+ div id: "component_preview" do
69
+ div page.content_render
70
+ end
71
+ end
72
+
73
+ controller do
74
+ # permit all params until we can whitelist content_object
75
+ def permitted_params
76
+ params.permit!
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,16 @@
1
+ require 'json'
2
+
3
+ class <%= @scaffold.controller_name %>Controller < ApplicationController
4
+ def show
5
+ # Standard find by ID
6
+ <%= "@#{@scaffold.model_file_name}" %> = <%= @scaffold.model_name %>.find(params[:id])
7
+ # Find by path
8
+ <%= "@#{@scaffold.model_file_name}" %> = <%= @scaffold.model_name %>.find_by_path(request.path)
9
+ if <%= "@#{@scaffold.model_file_name}" %>
10
+ render :show
11
+ else
12
+ render file: "#{Rails.root}/public/404.html", status: :not_found
13
+ Rails.logger.error "404 - Page #{request.path} cannot be found."
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,4 @@
1
+ class <%= @scaffold.model_name %> < ActiveRecord::Base
2
+ include AtomicCms::HasComponents
3
+ component_attr :content
4
+ end
@@ -0,0 +1 @@
1
+ = <%= "@#{@scaffold.model_file_name}" %>.content_object.render
@@ -0,0 +1,19 @@
1
+ 'use strict';
2
+
3
+ angular.module('markdown', [])
4
+ .provider('markdown', [function () {
5
+ var opts = {};
6
+ return {
7
+ config: function (newOpts) {
8
+ opts = newOpts;
9
+ },
10
+ $get: function () {
11
+ return new window.Showdown.converter(opts);
12
+ }
13
+ };
14
+ }])
15
+ .filter('markdown', ['markdown', function (markdown) {
16
+ return function (text) {
17
+ return markdown.makeHtml(text || '');
18
+ };
19
+ }]);
@@ -0,0 +1,2 @@
1
+ /*! showdown 01-03-2015 */
2
+ var Showdown={extensions:{}},forEach=Showdown.forEach=function(a,b){if("function"==typeof a.forEach)a.forEach(b);else{var c,d=a.length;for(c=0;d>c;c++)b(a[c],c,a)}},stdExtName=function(a){return a.replace(/[_-]||\s/g,"").toLowerCase()};Showdown.converter=function(a){var b,c,d,e=0,f=[],g=[];if("undefined"!=typeof module&&"undefined"!=typeof exports&&"undefined"!=typeof require){var h=require("fs");if(h){var i=h.readdirSync((__dirname||".")+"/extensions").filter(function(a){return~a.indexOf(".js")}).map(function(a){return a.replace(/\.js$/,"")});Showdown.forEach(i,function(a){var b=stdExtName(a);Showdown.extensions[b]=require("./extensions/"+a)})}}if(this.makeHtml=function(a){return b={},c={},d=[],a=a.replace(/~/g,"~T"),a=a.replace(/\$/g,"~D"),a=a.replace(/\r\n/g,"\n"),a=a.replace(/\r/g,"\n"),a="\n\n"+a+"\n\n",a=M(a),a=a.replace(/^[ \t]+$/gm,""),Showdown.forEach(f,function(b){a=l(b,a)}),a=z(a),a=n(a),a=m(a),a=p(a),a=K(a),a=a.replace(/~D/g,"$$"),a=a.replace(/~T/g,"~"),Showdown.forEach(g,function(b){a=l(b,a)}),a},a&&a.extensions){var j=this;Showdown.forEach(a.extensions,function(a){if("string"==typeof a&&(a=Showdown.extensions[stdExtName(a)]),"function"!=typeof a)throw"Extension '"+a+"' could not be loaded. It was either not found or is not a valid extension.";Showdown.forEach(a(j),function(a){a.type?"language"===a.type||"lang"===a.type?f.push(a):("output"===a.type||"html"===a.type)&&g.push(a):g.push(a)})})}var k,l=function(a,b){if(a.regex){var c=new RegExp(a.regex,"g");return b.replace(c,a.replace)}return a.filter?a.filter(b):void 0},m=function(a){return a+="~0",a=a.replace(/^[ ]{0,3}\[(.+)\]:[ \t]*\n?[ \t]*<?(\S+?)>?[ \t]*\n?[ \t]*(?:(\n*)["(](.+?)[")][ \t]*)?(?:\n+|(?=~0))/gm,function(a,d,e,f,g){return d=d.toLowerCase(),b[d]=G(e),f?f+g:(g&&(c[d]=g.replace(/"/g,"&quot;")),"")}),a=a.replace(/~0/,"")},n=function(a){a=a.replace(/\n/g,"\n\n");return a=a.replace(/^(<(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|ins|del)\b[^\r]*?\n<\/\2>[ \t]*(?=\n+))/gm,o),a=a.replace(/^(<(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|style|section|header|footer|nav|article|aside)\b[^\r]*?<\/\2>[ \t]*(?=\n+)\n)/gm,o),a=a.replace(/(\n[ ]{0,3}(<(hr)\b([^<>])*?\/?>)[ \t]*(?=\n{2,}))/g,o),a=a.replace(/(\n\n[ ]{0,3}<!(--[^\r]*?--\s*)+>[ \t]*(?=\n{2,}))/g,o),a=a.replace(/(?:\n\n)([ ]{0,3}(?:<([?%])[^\r]*?\2>)[ \t]*(?=\n{2,}))/g,o),a=a.replace(/\n\n/g,"\n")},o=function(a,b){var c=b;return c=c.replace(/\n\n/g,"\n"),c=c.replace(/^\n/,""),c=c.replace(/\n+$/g,""),c="\n\n~K"+(d.push(c)-1)+"K\n\n"},p=function(a){a=w(a);var b=A("<hr />");return a=a.replace(/^[ ]{0,2}([ ]?\*[ ]?){3,}[ \t]*$/gm,b),a=a.replace(/^[ ]{0,2}([ ]?\-[ ]?){3,}[ \t]*$/gm,b),a=a.replace(/^[ ]{0,2}([ ]?\_[ ]?){3,}[ \t]*$/gm,b),a=x(a),a=y(a),a=E(a),a=n(a),a=F(a)},q=function(a){return a=B(a),a=r(a),a=H(a),a=u(a),a=s(a),a=I(a),a=G(a),a=D(a),a=a.replace(/ +\n/g," <br />\n")},r=function(a){var b=/(<[a-z\/!$]("[^"]*"|'[^']*'|[^'">])*>|<!(--.*?--\s*)+>)/gi;return a=a.replace(b,function(a){var b=a.replace(/(.)<\/?code>(?=.)/g,"$1`");return b=N(b,"\\`*_")})},s=function(a){return a=a.replace(/(\[((?:\[[^\]]*\]|[^\[\]])*)\][ ]?(?:\n[ ]*)?\[(.*?)\])()()()()/g,t),a=a.replace(/(\[((?:\[[^\]]*\]|[^\[\]])*)\]\([ \t]*()<?(.*?(?:\(.*?\).*?)?)>?[ \t]*((['"])(.*?)\6[ \t]*)?\))/g,t),a=a.replace(/(\[([^\[\]]+)\])()()()()()/g,t)},t=function(a,d,e,f,g,h,i,j){void 0==j&&(j="");var k=d,l=e,m=f.toLowerCase(),n=g,o=j;if(""==n)if(""==m&&(m=l.toLowerCase().replace(/ ?\n/g," ")),n="#"+m,void 0!=b[m])n=b[m],void 0!=c[m]&&(o=c[m]);else{if(!(k.search(/\(\s*\)$/m)>-1))return k;n=""}n=N(n,"*_");var p='<a href="'+n+'"';return""!=o&&(o=o.replace(/"/g,"&quot;"),o=N(o,"*_"),p+=' title="'+o+'"'),p+=">"+l+"</a>"},u=function(a){return a=a.replace(/(!\[(.*?)\][ ]?(?:\n[ ]*)?\[(.*?)\])()()()()/g,v),a=a.replace(/(!\[(.*?)\]\s?\([ \t]*()<?(\S+?)>?[ \t]*((['"])(.*?)\6[ \t]*)?\))/g,v)},v=function(a,d,e,f,g,h,i,j){var k=d,l=e,m=f.toLowerCase(),n=g,o=j;if(o||(o=""),""==n){if(""==m&&(m=l.toLowerCase().replace(/ ?\n/g," ")),n="#"+m,void 0==b[m])return k;n=b[m],void 0!=c[m]&&(o=c[m])}l=l.replace(/"/g,"&quot;"),n=N(n,"*_");var p='<img src="'+n+'" alt="'+l+'"';return o=o.replace(/"/g,"&quot;"),o=N(o,"*_"),p+=' title="'+o+'"',p+=" />"},w=function(a){function b(a){return a.replace(/[^\w]/g,"").toLowerCase()}return a=a.replace(/^(.+)[ \t]*\n=+[ \t]*\n+/gm,function(a,c){return A('<h1 id="'+b(c)+'">'+q(c)+"</h1>")}),a=a.replace(/^(.+)[ \t]*\n-+[ \t]*\n+/gm,function(a,c){return A('<h2 id="'+b(c)+'">'+q(c)+"</h2>")}),a=a.replace(/^(\#{1,6})[ \t]*(.+?)[ \t]*\#*\n+/gm,function(a,c,d){var e=c.length;return A("<h"+e+' id="'+b(d)+'">'+q(d)+"</h"+e+">")})},x=function(a){a+="~0";var b=/^(([ ]{0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(~0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm;return e?a=a.replace(b,function(a,b,c){var d=b,e=c.search(/[*+-]/g)>-1?"ul":"ol";d=d.replace(/\n{2,}/g,"\n\n\n");var f=k(d);return f=f.replace(/\s+$/,""),f="<"+e+">"+f+"</"+e+">\n"}):(b=/(\n\n|^\n?)(([ ]{0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(~0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/g,a=a.replace(b,function(a,b,c,d){var e=b,f=c,g=d.search(/[*+-]/g)>-1?"ul":"ol",f=f.replace(/\n{2,}/g,"\n\n\n"),h=k(f);return h=e+"<"+g+">\n"+h+"</"+g+">\n"})),a=a.replace(/~0/,"")};k=function(a){return e++,a=a.replace(/\n{2,}$/,"\n"),a+="~0",a=a.replace(/(\n)?(^[ \t]*)([*+-]|\d+[.])[ \t]+([^\r]+?(\n{1,2}))(?=\n*(~0|\2([*+-]|\d+[.])[ \t]+))/gm,function(a,b,c,d,e){var f=e,g=b;return g||f.search(/\n{2,}/)>-1?f=p(L(f)):(f=x(L(f)),f=f.replace(/\n$/,""),f=q(f)),"<li>"+f+"</li>\n"}),a=a.replace(/~0/g,""),e--,a};var y=function(a){return a+="~0",a=a.replace(/(?:\n\n|^)((?:(?:[ ]{4}|\t).*\n+)+)(\n*[ ]{0,3}[^ \t\n]|(?=~0))/g,function(a,b,c){var d=b,e=c;return d=C(L(d)),d=M(d),d=d.replace(/^\n+/g,""),d=d.replace(/\n+$/g,""),d="<pre><code>"+d+"\n</code></pre>",A(d)+e}),a=a.replace(/~0/,"")},z=function(a){return a+="~0",a=a.replace(/(?:^|\n)```(.*)\n([\s\S]*?)\n```/g,function(a,b,c){var d=b,e=c;return e=C(e),e=M(e),e=e.replace(/^\n+/g,""),e=e.replace(/\n+$/g,""),e="<pre><code"+(d?' class="'+d+'"':"")+">"+e+"\n</code></pre>",A(e)}),a=a.replace(/~0/,"")},A=function(a){return a=a.replace(/(^\n+|\n+$)/g,""),"\n\n~K"+(d.push(a)-1)+"K\n\n"},B=function(a){return a=a.replace(/(^|[^\\])(`+)([^\r]*?[^`])\2(?!`)/gm,function(a,b,c,d){var e=d;return e=e.replace(/^([ \t]*)/g,""),e=e.replace(/[ \t]*$/g,""),e=C(e),b+"<code>"+e+"</code>"})},C=function(a){return a=a.replace(/&/g,"&amp;"),a=a.replace(/</g,"&lt;"),a=a.replace(/>/g,"&gt;"),a=N(a,"*_{}[]\\",!1)},D=function(a){return a=a.replace(/(\*\*|__)(?=\S)([^\r]*?\S[*_]*)\1/g,"<strong>$2</strong>"),a=a.replace(/(\*|_)(?=\S)([^\r]*?\S)\1/g,"<em>$2</em>")},E=function(a){return a=a.replace(/((^[ \t]*>[ \t]?.+\n(.+\n)*\n*)+)/gm,function(a,b){var c=b;return c=c.replace(/^[ \t]*>[ \t]?/gm,"~0"),c=c.replace(/~0/g,""),c=c.replace(/^[ \t]+$/gm,""),c=p(c),c=c.replace(/(^|\n)/g,"$1 "),c=c.replace(/(\s*<pre>[^\r]+?<\/pre>)/gm,function(a,b){var c=b;return c=c.replace(/^ /gm,"~0"),c=c.replace(/~0/g,"")}),A("<blockquote>\n"+c+"\n</blockquote>")})},F=function(a){a=a.replace(/^\n+/g,""),a=a.replace(/\n+$/g,"");for(var b=a.split(/\n{2,}/g),c=[],e=b.length,f=0;e>f;f++){var g=b[f];g.search(/~K(\d+)K/g)>=0?c.push(g):g.search(/\S/)>=0&&(g=q(g),g=g.replace(/^([ \t]*)/g,"<p>"),g+="</p>",c.push(g))}e=c.length;for(var f=0;e>f;f++)for(;c[f].search(/~K(\d+)K/)>=0;){var h=d[RegExp.$1];h=h.replace(/\$/g,"$$$$"),c[f]=c[f].replace(/~K\d+K/,h)}return c.join("\n\n")},G=function(a){return a=a.replace(/&(?!#?[xX]?(?:[0-9a-fA-F]+|\w+);)/g,"&amp;"),a=a.replace(/<(?![a-z\/?\$!])/gi,"&lt;")},H=function(a){return a=a.replace(/\\(\\)/g,O),a=a.replace(/\\([`*_{}\[\]()>#+-.!])/g,O)},I=function(a){return a=a.replace(/<((https?|ftp|dict):[^'">\s]+)>/gi,'<a href="$1">$1</a>'),a=a.replace(/<(?:mailto:)?([-.\w]+\@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)>/gi,function(a,b){return J(K(b))})},J=function(a){var b=[function(a){return"&#"+a.charCodeAt(0)+";"},function(a){return"&#x"+a.charCodeAt(0).toString(16)+";"},function(a){return a}];return a="mailto:"+a,a=a.replace(/./g,function(a){if("@"==a)a=b[Math.floor(2*Math.random())](a);else if(":"!=a){var c=Math.random();a=c>.9?b[2](a):c>.45?b[1](a):b[0](a)}return a}),a='<a href="'+a+'">'+a+"</a>",a=a.replace(/">.+:/g,'">')},K=function(a){return a=a.replace(/~E(\d+)E/g,function(a,b){var c=parseInt(b);return String.fromCharCode(c)})},L=function(a){return a=a.replace(/^(\t|[ ]{1,4})/gm,"~0"),a=a.replace(/~0/g,"")},M=function(a){return a=a.replace(/\t(?=\t)/g," "),a=a.replace(/\t/g,"~A~B"),a=a.replace(/~B(.+?)~A/g,function(a,b){for(var c=b,d=4-c.length%4,e=0;d>e;e++)c+=" ";return c}),a=a.replace(/~A/g," "),a=a.replace(/~B/g,"")},N=function(a,b,c){var d="(["+b.replace(/([\[\]\\])/g,"\\$1")+"])";c&&(d="\\\\"+d);var e=new RegExp(d,"g");return a=a.replace(e,O)},O=function(a,b){var c=b.charCodeAt(0);return"~E"+c+"E"}},"undefined"!=typeof module&&(module.exports=Showdown),"function"==typeof define&&define.amd&&define("showdown",function(){return Showdown}),"undefined"!=typeof angular&&"undefined"!=typeof Showdown&&!function(a,b){function c(){function a(){var a=new b.converter(c);this.makeHtml=function(b){return a.makeHtml(b)},this.stripHtml=function(a){return String(a).replace(/<[^>]+>/gm,"")}}var c={extensions:[],stripHtml:!0};this.setOption=function(a,b){return c.key=b,this},this.getOption=function(a){return c.hasOwnProperty(a)?c.key:null},this.loadExtension=function(a){return c.extensions.push(a),this},this.$get=function(){return new a}}function d(a){var b=function(b,c){b.$watch("model",function(b){var d;d="string"==typeof b?a.makeHtml(b):typeof b,c.html(d)})};return{restrict:"A",link:b,scope:{model:"=sdModelToHtml"}}}function e(){return function(a){return String(a).replace(/<[^>]+>/gm,"")}}a.provider("$Showdown",c).directive("sdModelToHtml",["$Showdown",d]).filter("sdStripHtml",e)}(angular.module("Showdown",[]),Showdown);
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: atomic_cms
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Don Humphreys
@@ -38,26 +38,6 @@ dependencies:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
40
  version: 1.0.0.pre2
41
- - !ruby/object:Gem::Dependency
42
- name: angularjs-rails
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '1.3'
48
- - - "<"
49
- - !ruby/object:Gem::Version
50
- version: '1.4'
51
- type: :runtime
52
- prerelease: false
53
- version_requirements: !ruby/object:Gem::Requirement
54
- requirements:
55
- - - "~>"
56
- - !ruby/object:Gem::Version
57
- version: '1.3'
58
- - - "<"
59
- - !ruby/object:Gem::Version
60
- version: '1.4'
61
41
  - !ruby/object:Gem::Dependency
62
42
  name: atomic_assets
63
43
  requirement: !ruby/object:Gem::Requirement
@@ -252,12 +232,49 @@ executables: []
252
232
  extensions: []
253
233
  extra_rdoc_files: []
254
234
  files:
235
+ - ".eslintrc"
236
+ - ".gitignore"
237
+ - ".rspec"
238
+ - ".rubocop.yml"
239
+ - ".ruby-version"
240
+ - Gemfile
241
+ - Gemfile.lock
242
+ - README.md
243
+ - Rakefile
244
+ - app/assets/images/icon_add_component.png
245
+ - app/assets/images/icon_add_component@2x.png
246
+ - app/assets/javascripts/atomic_cms.js
247
+ - app/assets/stylesheets/atomic_cms.css.scss
248
+ - app/components/array_component.rb
249
+ - app/controllers/atomic_cms/components_controller.rb
250
+ - app/controllers/atomic_cms/media_controller.rb
251
+ - app/controllers/concerns/media_scrubber.rb
252
+ - app/helpers/component_helper.rb
253
+ - app/models/atomic_cms/image.rb
254
+ - app/models/atomic_cms/media.rb
255
+ - app/views/components/_children_field.html.slim
256
+ - app/views/components/_edit.html.slim
257
+ - app/views/components/_file_field.slim
258
+ - app/views/components/_markdown_field.slim
259
+ - app/views/components/_select_field.slim
260
+ - app/views/components/_template_field.slim
261
+ - app/views/components/_text_area_field.slim
262
+ - app/views/components/_text_field.slim
263
+ - atomic_cms.gemspec
264
+ - bin/rails
265
+ - config/routes.rb
266
+ - db/migrate/20151013175254_create_media.rb
255
267
  - lib/atomic_cms.rb
256
268
  - lib/atomic_cms/editor.rb
257
269
  - lib/atomic_cms/engine.rb
258
270
  - lib/atomic_cms/has_components.rb
259
271
  - lib/generators/atomic_cms/assets/assets_generator.rb
260
272
  - lib/generators/atomic_cms/install/install_generator.rb
273
+ - lib/generators/atomic_cms/scaffold/scaffold_generator.rb
274
+ - lib/generators/atomic_cms/templates/admin.erb
275
+ - lib/generators/atomic_cms/templates/controller.erb
276
+ - lib/generators/atomic_cms/templates/model.erb
277
+ - lib/generators/atomic_cms/templates/show.html.slim
261
278
  - spec/controllers/media_controller_spec.rb
262
279
  - spec/controllers/media_scrubber_spec.rb
263
280
  - spec/dummy/README.rdoc
@@ -302,6 +319,8 @@ files:
302
319
  - spec/support/media_upload_shared_examples.rb
303
320
  - spec/uploads/cat.jpg
304
321
  - spec/uploads/pdf.pdf
322
+ - vendor/assets/javascripts/angular-markdown.js
323
+ - vendor/assets/javascripts/showdown.min.js
305
324
  homepage:
306
325
  licenses: []
307
326
  metadata: {}