website_builder_engine 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (102) hide show
  1. data/.gitignore +6 -0
  2. data/Gemfile +20 -0
  3. data/Gemfile.lock +173 -0
  4. data/MIT-LICENSE +20 -0
  5. data/README.textile +260 -0
  6. data/Rakefile +26 -0
  7. data/app/assets/images/website_builder_engine/.gitkeep +0 -0
  8. data/app/assets/javascripts/website_builder_engine/application.js +9 -0
  9. data/app/assets/javascripts/website_builder_engine/articles.js.coffee +3 -0
  10. data/app/assets/javascripts/website_builder_engine/home.js.coffee +3 -0
  11. data/app/assets/javascripts/website_builder_engine/jqueryui.js +406 -0
  12. data/app/assets/javascripts/website_builder_engine/modernizr.js +4 -0
  13. data/app/assets/javascripts/website_builder_engine/offerpages.js.coffee +3 -0
  14. data/app/assets/javascripts/website_builder_engine/respond.js +2 -0
  15. data/app/assets/javascripts/website_builder_engine/settings.js.coffee +3 -0
  16. data/app/assets/javascripts/website_builder_engine/tabs.js +41 -0
  17. data/app/assets/stylesheets/website_builder_engine/application.css +33 -0
  18. data/app/assets/stylesheets/website_builder_engine/articles.css.scss +87 -0
  19. data/app/assets/stylesheets/website_builder_engine/base.css.scss +336 -0
  20. data/app/assets/stylesheets/website_builder_engine/home.css.scss +7 -0
  21. data/app/assets/stylesheets/website_builder_engine/layout.css.scss +64 -0
  22. data/app/assets/stylesheets/website_builder_engine/normalize.css.scss +413 -0
  23. data/app/assets/stylesheets/website_builder_engine/offerpages.css.scss +232 -0
  24. data/app/assets/stylesheets/website_builder_engine/scaffolds.css.scss +56 -0
  25. data/app/assets/stylesheets/website_builder_engine/settings.css.scss +7 -0
  26. data/app/assets/stylesheets/website_builder_engine/skeleton.css.scss +237 -0
  27. data/app/controllers/website_builder_engine/application_controller.rb +5 -0
  28. data/app/controllers/website_builder_engine/articles_controller.rb +113 -0
  29. data/app/controllers/website_builder_engine/home_controller.rb +7 -0
  30. data/app/controllers/website_builder_engine/offerpages_controller.rb +98 -0
  31. data/app/controllers/website_builder_engine/settings_controller.rb +85 -0
  32. data/app/helpers/website_builder_engine/application_helper.rb +4 -0
  33. data/app/models/article.rb +13 -0
  34. data/app/models/offerpage.rb +15 -0
  35. data/app/models/setting.rb +13 -0
  36. data/app/views/layouts/website_builder_engine/application.html.haml +22 -0
  37. data/app/views/layouts/website_builder_engine/home.html.haml +24 -0
  38. data/app/views/shared/_navigation.html.haml +3 -0
  39. data/app/views/website_builder_engine/articles/_form.html.haml +47 -0
  40. data/app/views/website_builder_engine/articles/edit.html.haml +7 -0
  41. data/app/views/website_builder_engine/articles/index.html.haml +16 -0
  42. data/app/views/website_builder_engine/articles/new.html.haml +5 -0
  43. data/app/views/website_builder_engine/articles/publish.html.haml +7 -0
  44. data/app/views/website_builder_engine/articles/show.html.haml +36 -0
  45. data/app/views/website_builder_engine/articles/template.html.haml +72 -0
  46. data/app/views/website_builder_engine/home/index.html.haml +26 -0
  47. data/app/views/website_builder_engine/offerpages/_form.html.haml +49 -0
  48. data/app/views/website_builder_engine/offerpages/edit.html.haml +7 -0
  49. data/app/views/website_builder_engine/offerpages/index.html.haml +16 -0
  50. data/app/views/website_builder_engine/offerpages/new.html.haml +5 -0
  51. data/app/views/website_builder_engine/offerpages/publish.html.haml +7 -0
  52. data/app/views/website_builder_engine/offerpages/show.html.haml +37 -0
  53. data/app/views/website_builder_engine/offerpages/template.html.haml +71 -0
  54. data/app/views/website_builder_engine/settings/_form.html.haml +40 -0
  55. data/app/views/website_builder_engine/settings/edit.html.haml +7 -0
  56. data/app/views/website_builder_engine/settings/index.html.haml +19 -0
  57. data/app/views/website_builder_engine/settings/new.html.haml +5 -0
  58. data/app/views/website_builder_engine/settings/show.html.haml +34 -0
  59. data/app/views/website_builder_engine/welcome/template.html.haml +66 -0
  60. data/config/routes.rb +19 -0
  61. data/db/seeds.rb +68 -0
  62. data/lib/tasks/website_builder_engine_tasks.rake +4 -0
  63. data/lib/website_builder_engine.rb +4 -0
  64. data/lib/website_builder_engine/engine.rb +5 -0
  65. data/script/rails +6 -0
  66. data/spec/dummy/Rakefile +7 -0
  67. data/spec/dummy/app/assets/javascripts/application.js +9 -0
  68. data/spec/dummy/app/assets/stylesheets/application.css +7 -0
  69. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  70. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  71. data/spec/dummy/app/mailers/.gitkeep +0 -0
  72. data/spec/dummy/app/models/.gitkeep +0 -0
  73. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  74. data/spec/dummy/config.ru +4 -0
  75. data/spec/dummy/config/application.rb +51 -0
  76. data/spec/dummy/config/boot.rb +10 -0
  77. data/spec/dummy/config/database.yml +25 -0
  78. data/spec/dummy/config/environment.rb +5 -0
  79. data/spec/dummy/config/environments/development.rb +27 -0
  80. data/spec/dummy/config/environments/production.rb +51 -0
  81. data/spec/dummy/config/environments/test.rb +39 -0
  82. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  83. data/spec/dummy/config/initializers/inflections.rb +10 -0
  84. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  85. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  86. data/spec/dummy/config/initializers/session_store.rb +8 -0
  87. data/spec/dummy/config/initializers/wrap_parameters.rb +12 -0
  88. data/spec/dummy/config/locales/en.yml +5 -0
  89. data/spec/dummy/config/mongoid.yml +20 -0
  90. data/spec/dummy/config/routes.rb +3 -0
  91. data/spec/dummy/db/seeds.rb +68 -0
  92. data/spec/dummy/lib/assets/.gitkeep +0 -0
  93. data/spec/dummy/log/.gitkeep +0 -0
  94. data/spec/dummy/public/404.html +26 -0
  95. data/spec/dummy/public/422.html +26 -0
  96. data/spec/dummy/public/500.html +26 -0
  97. data/spec/dummy/public/favicon.ico +0 -0
  98. data/spec/dummy/script/rails +6 -0
  99. data/spec/spec_helper.rb +41 -0
  100. data/version.rb +3 -0
  101. data/website_builder_engine.gemspec +31 -0
  102. metadata +381 -0
@@ -0,0 +1,5 @@
1
+ module WebsiteBuilderEngine
2
+ class ApplicationController < ActionController::Base
3
+ include FrontendHelpers::Html5Helper
4
+ end
5
+ end
@@ -0,0 +1,113 @@
1
+ module WebsiteBuilderEngine
2
+ class ArticlesController < ApplicationController
3
+
4
+ before_filter :get_settings, :only => [:publish, :index, :new, :destroy]
5
+
6
+ def publish
7
+ # create an article page
8
+ @article = Article.find(params[:id])
9
+ @related_items = Hash.new
10
+ if @article.related_items
11
+ @article.related_items.each do |id|
12
+ item = Article.find(id)
13
+ @related_items[item.title] = "#{item.filename}.html"
14
+ end
15
+ end
16
+ @permalink = "http://#{@settings.domain}/#{@settings.articles_directory}/#{@article.filename}.html"
17
+ @content = RedCloth.new(@article.content).to_html.html_safe
18
+ @sidebar = RedCloth.new(@article.sidebar).to_html.html_safe if @article.sidebar
19
+ article_page = render_to_string(:template => "website_builder_engine/articles/template.html.haml", :layout => false )
20
+ FileUtils.makedirs(@file_path) unless File.exists?(@file_path)
21
+ File.open("#{@file_path + @article.filename}.html", 'w') {|f| f.write(article_page) }
22
+ @article.update_attribute(:published, true)
23
+ # create (or recreate) the welcome page
24
+ @articles = Article.where(published: true)
25
+ @welcome_sidebar = RedCloth.new(@settings.sidebar).to_html.html_safe if @settings.sidebar
26
+ welcome_page = render_to_string(:template => "website_builder_engine/welcome/template.html.haml", :layout => false )
27
+ File.open("#{@docroot_path}index.html", 'w') {|f| f.write(welcome_page) }
28
+ respond_to do |format|
29
+ format.html { redirect_to articles_path, notice: "Built a webpage for the article \"#{@article.title}\"" }
30
+ end
31
+
32
+ end
33
+
34
+ def index
35
+ @articles = Article.all
36
+
37
+ respond_to do |format|
38
+ format.html # index.html.erb
39
+ end
40
+ end
41
+
42
+ def show
43
+ @article = Article.find(params[:id])
44
+ respond_to do |format|
45
+ format.html # show.html.erb
46
+ end
47
+ end
48
+
49
+ def new
50
+ @article = Article.new
51
+ @articles = Article.all
52
+ @article.related_items = []
53
+ @article.sidebar = @settings.sidebar if @settings.sidebar
54
+ respond_to do |format|
55
+ format.html # new.html.erb
56
+ end
57
+ end
58
+
59
+ def edit
60
+ @article = Article.find(params[:id])
61
+ @articles = Article.all
62
+ end
63
+
64
+ def create
65
+ @article = Article.new(params[:article])
66
+ if params[:format] == 'html'
67
+ p1 = HTMLToTextileParser.new
68
+ p2 = HTMLToTextileParser.new
69
+ p1.feed(params[:offerpage][:content])
70
+ @offerpage.content = p1.to_textile
71
+ p2.feed(params[:offerpage][:sidebar])
72
+ @offerpage.sidebar = p2.to_textile
73
+ end
74
+ respond_to do |format|
75
+ if @article.save
76
+ format.html { redirect_to articles_path, notice: 'Article was successfully created.' }
77
+ else
78
+ format.html { render action: "new" }
79
+ end
80
+ end
81
+ end
82
+
83
+ def update
84
+ @article = Article.find(params[:id])
85
+ params[:article][:related_items] ||= []
86
+ respond_to do |format|
87
+ if @article.update_attributes(params[:article])
88
+ format.html { redirect_to articles_path, notice: 'Article was successfully updated.' }
89
+ else
90
+ format.html { render action: "edit" }
91
+ end
92
+ end
93
+ end
94
+
95
+ def destroy
96
+ @article = Article.find(params[:id])
97
+ @article.destroy
98
+ @settings = Setting.first
99
+ FileUtils.remove_file("#{@file_path + @article.filename}.html", force = true)
100
+ respond_to do |format|
101
+ format.html { redirect_to articles_url }
102
+ end
103
+ end
104
+
105
+ protected
106
+ def get_settings
107
+ @settings = Setting.first
108
+ @docroot_path = "#{Rails.root}/public/"
109
+ @file_path = "#{@docroot_path}#{@settings.articles_directory}/"
110
+ @url_path = "/#{@settings.articles_directory}/"
111
+ end
112
+ end
113
+ end
@@ -0,0 +1,7 @@
1
+ module WebsiteBuilderEngine
2
+ class HomeController < ApplicationController
3
+ layout 'website_builder_engine/home'
4
+ def index
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,98 @@
1
+ module WebsiteBuilderEngine
2
+ class OfferpagesController < ApplicationController
3
+
4
+ before_filter :get_settings, :only => [:publish, :index, :new, :destroy]
5
+
6
+ def publish
7
+ @offerpage = Offerpage.find(params[:id])
8
+ @permalink = "http://#{@settings.domain}/#{@settings.offerpages_directory}/#{@offerpage.filename}.html"
9
+ offerpage_page = render_to_string(:template => "website_builder_engine/offerpages/template.html.haml", :layout => false )
10
+ FileUtils.makedirs(@file_path) unless File.exists?(@file_path)
11
+ File.open("#{@file_path + @offerpage.filename}.html", 'w') {|f| f.write(offerpage_page) }
12
+ @offerpage.update_attribute(:published, true)
13
+ respond_to do |format|
14
+ format.html { redirect_to offerpages_path, notice: "Built a webpage for the offer page \"#{@offerpage.title}\"" }
15
+ end
16
+
17
+ end
18
+
19
+ def index
20
+ @offerpages = Offerpage.all
21
+ respond_to do |format|
22
+ format.html # index.html.erb
23
+ end
24
+ end
25
+
26
+ def show
27
+ @offerpage = Offerpage.find(params[:id])
28
+ respond_to do |format|
29
+ format.html # show.html.erb
30
+ end
31
+ end
32
+
33
+ def new
34
+ @offerpage = Offerpage.new
35
+ respond_to do |format|
36
+ format.html # new.html.erb
37
+ end
38
+ end
39
+
40
+ def edit
41
+ @offerpage = Offerpage.find(params[:id])
42
+ end
43
+
44
+ def create
45
+ @offerpage = Offerpage.new(params[:offerpage])
46
+ if params[:format] == 'html'
47
+ p1 = HTMLToTextileParser.new
48
+ p2 = HTMLToTextileParser.new
49
+ p3 = HTMLToTextileParser.new
50
+ p4 = HTMLToTextileParser.new
51
+ p1.feed(params[:offerpage][:content_block1])
52
+ @offerpage.content_block1 = p1.to_textile
53
+ p2.feed(params[:offerpage][:content_block2])
54
+ @offerpage.content_block2 = p2.to_textile
55
+ p3.feed(params[:offerpage][:offer_block])
56
+ @offerpage.offer_block = p3.to_textile
57
+ p4.feed(params[:offerpage][:testimonials])
58
+ @offerpage.testimonials = p4.to_textile
59
+ end
60
+ respond_to do |format|
61
+ if @offerpage.save
62
+ format.html { redirect_to offerpages_path, notice: 'Offerpage was successfully created.' }
63
+ else
64
+ format.html { render action: "new" }
65
+ end
66
+ end
67
+ end
68
+
69
+ def update
70
+ @offerpage = Offerpage.find(params[:id])
71
+ respond_to do |format|
72
+ if @offerpage.update_attributes(params[:offerpage])
73
+ format.html { redirect_to offerpages_path, notice: 'Offerpage was successfully updated.' }
74
+ else
75
+ format.html { render action: "edit" }
76
+ end
77
+ end
78
+ end
79
+
80
+ def destroy
81
+ @offerpage = Offerpage.find(params[:id])
82
+ @offerpage.destroy
83
+ @settings = Setting.first
84
+ FileUtils.remove_file("#{@file_path + @offerpage.filename}.html", force = true)
85
+ respond_to do |format|
86
+ format.html { redirect_to offerpages_url }
87
+ end
88
+ end
89
+
90
+ protected
91
+ def get_settings
92
+ @settings = Setting.first
93
+ @docroot_path = "#{Rails.root}/public/"
94
+ @file_path = "#{@docroot_path}#{@settings.offerpages_directory}/"
95
+ @url_path = "/#{@settings.offerpages_directory}/"
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,85 @@
1
+ module WebsiteBuilderEngine
2
+ class SettingsController < ApplicationController
3
+ # GET /settings
4
+ # GET /settings.json
5
+ def index
6
+ @settings = Setting.all
7
+
8
+ respond_to do |format|
9
+ format.html # index.html.erb
10
+ format.json { render json: @settings }
11
+ end
12
+ end
13
+
14
+ # GET /settings/1
15
+ # GET /settings/1.json
16
+ def show
17
+ @setting = Setting.find(params[:id])
18
+
19
+ respond_to do |format|
20
+ format.html # show.html.erb
21
+ format.json { render json: @setting }
22
+ end
23
+ end
24
+
25
+ # GET /settings/new
26
+ # GET /settings/new.json
27
+ def new
28
+ @setting = Setting.new
29
+
30
+ respond_to do |format|
31
+ format.html # new.html.erb
32
+ format.json { render json: @setting }
33
+ end
34
+ end
35
+
36
+ # GET /settings/1/edit
37
+ def edit
38
+ @setting = Setting.find(params[:id])
39
+ end
40
+
41
+ # POST /settings
42
+ # POST /settings.json
43
+ def create
44
+ @setting = Setting.new(params[:setting])
45
+
46
+ respond_to do |format|
47
+ if @setting.save
48
+ format.html { redirect_to @setting, notice: 'Setting was successfully created.' }
49
+ format.json { render json: @setting, status: :created, location: @setting }
50
+ else
51
+ format.html { render action: "new" }
52
+ format.json { render json: @setting.errors, status: :unprocessable_entity }
53
+ end
54
+ end
55
+ end
56
+
57
+ # PUT /settings/1
58
+ # PUT /settings/1.json
59
+ def update
60
+ @setting = Setting.find(params[:id])
61
+
62
+ respond_to do |format|
63
+ if @setting.update_attributes(params[:setting])
64
+ format.html { redirect_to @setting, notice: 'Setting was successfully updated.' }
65
+ format.json { head :ok }
66
+ else
67
+ format.html { render action: "edit" }
68
+ format.json { render json: @setting.errors, status: :unprocessable_entity }
69
+ end
70
+ end
71
+ end
72
+
73
+ # DELETE /settings/1
74
+ # DELETE /settings/1.json
75
+ def destroy
76
+ @setting = Setting.find(params[:id])
77
+ @setting.destroy
78
+
79
+ respond_to do |format|
80
+ format.html { redirect_to settings_url }
81
+ format.json { head :ok }
82
+ end
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,4 @@
1
+ module WebsiteBuilderEngine
2
+ module ApplicationHelper
3
+ end
4
+ end
@@ -0,0 +1,13 @@
1
+ class Article
2
+ include Mongoid::Document
3
+ field :title, :type => String
4
+ field :filename, :type => String
5
+ field :description, :type => String
6
+ field :keywords, :type => String
7
+ field :headline, :type => String
8
+ field :subhead, :type => String
9
+ field :content, :type => String
10
+ field :sidebar, :type => String
11
+ field :published, :type => Boolean
12
+ field :related_items, :type => Array
13
+ end
@@ -0,0 +1,15 @@
1
+ class Offerpage
2
+ include Mongoid::Document
3
+ field :title, :type => String
4
+ field :filename, :type => String
5
+ field :description, :type => String
6
+ field :keywords, :type => String
7
+ field :headline, :type => String
8
+ field :subhead, :type => String
9
+ field :content_block1, :type => String
10
+ field :content_block2, :type => String
11
+ field :offer_block, :type => String
12
+ field :testimonials, :type => String
13
+ field :video, :type => String
14
+ field :published, :type => Boolean
15
+ end
@@ -0,0 +1,13 @@
1
+ class Setting
2
+ include Mongoid::Document
3
+ field :site_name, :type => String
4
+ field :site_title, :type => String
5
+ field :site_tagline, :type => String
6
+ field :site_description, :type => String
7
+ field :site_keywords, :type => String
8
+ field :twitter_account, :type => String
9
+ field :domain, :type => String
10
+ field :articles_directory, :type => String
11
+ field :offerpages_directory, :type => String
12
+ field :sidebar, :type => String
13
+ end
@@ -0,0 +1,22 @@
1
+ - html_tag class: 'no-js' do
2
+ %head
3
+ %title testapp
4
+ %meta{:charset => "utf-8"}
5
+ %meta{"http-equiv" => "X-UA-Compatible", :content => "IE=edge,chrome=1"}
6
+ %meta{:name => "viewport", :content => "width=device-width, initial-scale=1, maximum-scale=1"}
7
+ = stylesheet_link_tag "website_builder_engine/application"
8
+ = javascript_include_tag "website_builder_engine/application"
9
+ = csrf_meta_tags
10
+ %body{:class => params[:controller]}
11
+ #container.container
12
+ %header.sixteen.columns
13
+ %nav
14
+ %ul
15
+ = render 'shared/navigation'
16
+ %hr/
17
+ - flash.each do |name, msg|
18
+ = content_tag :div, msg, :id => "flash_#{name}" if msg.is_a?(String)
19
+ #main{:role => "main"}
20
+ = yield
21
+ %footer.sixteen.columns
22
+ %hr/
@@ -0,0 +1,24 @@
1
+ - html_tag class: 'no-js' do
2
+ %head
3
+ %title html5-website-builder
4
+ %meta{:charset => "utf-8"}/
5
+ %meta{:content => "", :name => "description"}
6
+ %meta{:content => "", :name => "author"}
7
+ %meta{:content => "width=device-width, initial-scale=1, maximum-scale=1", :name => "viewport"}/
8
+ = stylesheet_link_tag "website_builder_engine/application"
9
+ = javascript_include_tag "website_builder_engine/application"
10
+ = csrf_meta_tags
11
+ %body{:class => params[:controller]}
12
+ #container.container
13
+ %header.sixteen.columns
14
+ %h1.remove-bottom{:style => "margin-top: 40px"} Website Builder
15
+ %nav
16
+ %ul
17
+ = render 'shared/navigation'
18
+ %hr/
19
+ - flash.each do |name, msg|
20
+ = content_tag :div, msg, :id => "flash_#{name}" if msg.is_a?(String)
21
+ #main{:role => "main"}
22
+ = yield
23
+ %footer.sixteen.columns
24
+ %hr/
@@ -0,0 +1,3 @@
1
+ %li
2
+ = link_to_unless_current('Builder', { :controller => "home", :action => "index" }) do
3
+ = link_to('View Site', '/index.html')
@@ -0,0 +1,47 @@
1
+ = form_for @article do |f|
2
+ -if @article.errors.any?
3
+ #error_explanation
4
+ %h2= "#{pluralize(@article.errors.count, "error")} prohibited this article from being saved:"
5
+ %ul
6
+ - @article.errors.full_messages.each do |msg|
7
+ %li= msg
8
+
9
+ .field
10
+ = f.label :title
11
+ = f.text_field :title
12
+ .field
13
+ = f.label :filename
14
+ = f.text_field :filename
15
+ .field
16
+ = f.label :description
17
+ = f.text_field :description
18
+ .field
19
+ = f.label :keywords
20
+ = f.text_field :keywords
21
+ .field
22
+ = f.label :headline
23
+ = f.text_field :headline
24
+ .field
25
+ = f.label :subhead
26
+ = f.text_field :subhead
27
+ .field
28
+ = radio_button_tag(:format, "textile")
29
+ = label_tag(:format_textile, "Textile")
30
+ = radio_button_tag(:format, "html")
31
+ = label_tag(:format_html, "Convert HTML to Textile")
32
+ .field
33
+ = f.label :content
34
+ = f.text_area :content
35
+ .field
36
+ = f.label :sidebar
37
+ = f.text_area :sidebar
38
+ .field
39
+ = f.label :related_item
40
+ = f.fields_for :related_item do |b|
41
+ - Article.all.each do |item|
42
+ %div
43
+ = check_box_tag "article[related_items][]", item.id,
44
+ (@article.related_items.include?(item._id.to_s) if @article.related_items)
45
+ = item.title
46
+ .actions
47
+ = f.submit 'Save'