cartoonist-pages 0.0.3.5 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,68 @@
1
+ class PageAdminController < ApplicationController
2
+ before_filter :preview!, :only => [:preview]
3
+ before_filter :ensure_ssl!
4
+ before_filter :check_admin!
5
+
6
+ def preview
7
+ @page = Page.preview_from_path params[:id]
8
+ render "page/show", :layout => "page"
9
+ end
10
+
11
+ def preview_content
12
+ render :text => Markdown.render(params[:content]), :layout => false
13
+ end
14
+
15
+ def index
16
+ @unposted = Page.unposted.ordered
17
+ @posted = Page.posted.ordered
18
+ end
19
+
20
+ def create
21
+ path = params[:path].downcase
22
+ raise "Invalid path" unless path =~ /^[-_a-z0-9]+$/
23
+ page = Page.create :title => params[:title], :path => path, :content => params[:content], :locked => true
24
+ redirect_to "/page_admin/#{page.id}/edit"
25
+ end
26
+
27
+ def edit
28
+ @page = Page.find params[:id].to_i
29
+ rescue ActiveRecord::RecordNotFound
30
+ redirect_to "/page_admin/new"
31
+ end
32
+
33
+ def update
34
+ path = params[:path].downcase
35
+ raise "Invalid path" unless path =~ /^[-_a-z0-9]+$/
36
+ page = Page.find params[:id].to_i
37
+ raise "Cannot update locked page!" if page.locked
38
+ page.title = params[:title]
39
+ page.path = path
40
+ page.content = params[:content]
41
+ page.locked = true
42
+ page.comments = !!params[:comments]
43
+ page.in_sitemap = !!params[:in_sitemap]
44
+
45
+ if params[:posted]
46
+ page.posted_at = Date.today
47
+ else
48
+ page.posted_at = nil
49
+ end
50
+
51
+ page.save!
52
+ redirect_to "/page_admin/#{page.id}/edit"
53
+ end
54
+
55
+ def lock
56
+ page = Page.find params[:id].to_i
57
+ page.locked = true
58
+ page.save!
59
+ redirect_to "/page_admin/#{page.id}/edit"
60
+ end
61
+
62
+ def unlock
63
+ page = Page.find params[:id].to_i
64
+ page.locked = false
65
+ page.save!
66
+ redirect_to "/page_admin/#{page.id}/edit"
67
+ end
68
+ end
@@ -0,0 +1,8 @@
1
+ class PageController < ApplicationController
2
+ def show
3
+ path = params[:id].downcase
4
+ @page = Page.from_path path
5
+ render
6
+ cache_page_as "#{path}.#{cache_type}.html"
7
+ end
8
+ end
@@ -0,0 +1,23 @@
1
+ module PageAdminHelper
2
+ def lock_toggle_target
3
+ if @page.locked
4
+ "unlock"
5
+ else
6
+ "lock"
7
+ end
8
+ end
9
+
10
+ def lock_disabled
11
+ if @page.locked
12
+ 'disabled="disabled"'.html_safe
13
+ end
14
+ end
15
+
16
+ def format_posted_at(fmt)
17
+ if @page && @page.posted_at
18
+ @page.posted_at.to_time.strftime fmt
19
+ else
20
+ "not yet posted"
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,43 @@
1
+ class Page < ActiveRecord::Base
2
+ def has_comments?
3
+ comments
4
+ end
5
+
6
+ def in_sitemap?
7
+ in_sitemap
8
+ end
9
+
10
+ class << self
11
+ def sitemap
12
+ posted.in_sitemap
13
+ end
14
+
15
+ def in_sitemap
16
+ where :in_sitemap => true
17
+ end
18
+
19
+ def posted
20
+ where "posted_at IS NOT NULL"
21
+ end
22
+
23
+ def unposted
24
+ where "posted_at IS NULL"
25
+ end
26
+
27
+ def ordered
28
+ order "pages.title ASC"
29
+ end
30
+
31
+ def preview_from_path(path)
32
+ page = where(:path => path).first
33
+ raise ActiveRecord::RecordNotFound.new("No page found!") unless page
34
+ page
35
+ end
36
+
37
+ def from_path(path)
38
+ page = posted.where(:path => path).first
39
+ raise ActiveRecord::RecordNotFound.new("No page found!") unless page
40
+ page
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,17 @@
1
+ <% content_for :content_class, "page-content" %>
2
+
3
+ <% content_for :content do %>
4
+ <div class="page">
5
+ <h1><%= content_for?(:page_title) ? yield(:page_title) : yield(:title) %></h1>
6
+
7
+ <%= yield %>
8
+ </div>
9
+ <% end %>
10
+
11
+ <% content_for :admin_content do %>
12
+ <% if preview? %>
13
+ <p><a href="/admin/main">admin</a></p>
14
+ <% end %>
15
+ <% end %>
16
+
17
+ <%= render :template => "layouts/application" %>
@@ -0,0 +1,8 @@
1
+ <% content_for :subtabs do %>
2
+ <a class="subtab" href="/page_admin"><%= t "admin.page.layout.list" %></a>
3
+ <a class="subtab" href="/page_admin/new"><%= t "admin.page.layout.new" %></a>
4
+ <% end %>
5
+
6
+ <% content_for :page_title, t("admin.page.layout.section") %>
7
+ <% content_for(:content) { yield } %>
8
+ <%= render :template => "layouts/admin" %>
@@ -0,0 +1,7 @@
1
+ <% content_for :title, @page.title %>
2
+
3
+ <% if @page.has_comments? %>
4
+ <% enable_disqus! :path => "#{@page.path}", :title => "#{@page.title}", :category => Setting[:disqus_page_category] %>
5
+ <% end %>
6
+
7
+ <%= markdown @page.content %>
@@ -0,0 +1,87 @@
1
+ <p>
2
+ <a href="/page_admin/<%= @page.path %>/preview">Preview this page</a>
3
+ </p>
4
+
5
+ <p>
6
+ <%= form_tag "/page_admin/#{@page.id}/#{lock_toggle_target}", :method => :post do %>
7
+ <input type="submit" value="<%= lock_toggle_target %>" />
8
+ <% end %>
9
+ </p>
10
+
11
+ <%= form_tag "/page_admin/#{@page.id}", :method => :put do %>
12
+ <p>
13
+ <label>
14
+ <input type="checkbox" name="posted" value="true" <%= checked="checked".html_safe if @page.posted_at %> <%= lock_disabled %> />
15
+ Posted at: <%= format_posted_at "%-m/%-d/%Y" %>
16
+ </label>
17
+
18
+ <label>
19
+ <input type="checkbox" name="comments" value="true" <%= checked="checked".html_safe if @page.has_comments? %> <%= lock_disabled %> />
20
+ Comments
21
+ </label>
22
+
23
+ <label>
24
+ <input type="checkbox" name="in_sitemap" value="true" <%= checked="checked".html_safe if @page.in_sitemap? %> <%= lock_disabled %> />
25
+ In Sitemap
26
+ </label>
27
+ </p>
28
+
29
+ <p>
30
+ Path:
31
+ <input type="text" name="path" size="20" value="<%= @page.path %>" <%= lock_disabled %> />
32
+ </p>
33
+
34
+ <p>
35
+ Title:
36
+ <input type="text" name="title" size="100" value="<%= @page.title %>" <%= lock_disabled %> />
37
+ </p>
38
+
39
+ <p>
40
+ <input type="submit" value="Save" <%= lock_disabled %> />
41
+ <input type="button" value="Preview" class="preview-content" />
42
+ </p>
43
+
44
+ <p>
45
+ Content:<br />
46
+ <textarea name="content" rows="20" cols="100" <%= lock_disabled %>><%= @page.content %></textarea><br />
47
+ </p>
48
+
49
+ <p>
50
+ <input type="submit" value="Save" <%= lock_disabled %> />
51
+ <input type="button" value="Preview" class="preview-content" />
52
+ </p>
53
+ <% end %>
54
+
55
+ <hr />
56
+
57
+ <div class="preview-content">
58
+ </div>
59
+
60
+ <%= javascript_include_tag "https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" %>
61
+ <%= javascript_include_tag "https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/jquery-ui.min.js" %>
62
+ <%= stylesheet_link_tag "http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.17/themes/base/jquery-ui.css" %>
63
+ <%= javascript_tag do %>
64
+ $(function() {
65
+ $(".preview-content").click(function() {
66
+ var $this = $(this).attr("disabled", "disabled");
67
+ $.ajax({
68
+ url: "/page_admin/preview_content",
69
+ type: "post",
70
+ data: {
71
+ authenticity_token: $("form input[name='authenticity_token']").val(),
72
+ content: $("textarea[name='content']").val()
73
+ },
74
+ dataType: "text",
75
+ success: function(text) {
76
+ $(".preview-content").html(text);
77
+ $this.removeAttr("disabled");
78
+ },
79
+ error: function() {
80
+ $(".preview-content").html('<div style="color: red;">There was an error.</div>');
81
+ $this.removeAttr("disabled");
82
+ }
83
+ });
84
+ return false;
85
+ });
86
+ });
87
+ <% end %>
@@ -0,0 +1,22 @@
1
+ <h2><%= t "admin.page.index.not_posted" %></h2>
2
+
3
+ <ul>
4
+ <% @unposted.each do |page| %>
5
+ <li>
6
+ <a href="/page_admin/<%= page.id %>/edit"><%= page.title %></a>
7
+ (<a href="/page_admin/<%= page.path %>/preview"><%= t "admin.page.index.preview" %></a>)
8
+ </li>
9
+ <% end %>
10
+ </ul>
11
+
12
+ <h2><%= t "admin.page.index.posted" %></h2>
13
+
14
+ <ul>
15
+ <% @posted.each do |page| %>
16
+ <li>
17
+ <a href="/page_admin/<%= page.id %>/edit"><%= page.title %></a>
18
+ (<a href="/page_admin/<%= page.path %>/preview"><%= t "admin.page.index.preview" %></a>)
19
+ (<a href="/<%= page.path %>"><%= t "admin.page.index.show" %></a>)
20
+ </li>
21
+ <% end %>
22
+ </ul>
@@ -0,0 +1,51 @@
1
+ <%= form_tag "/page_admin", :method => :post do %>
2
+ <p>
3
+ Path: <input type="text" name="path" autofocus="autofocus" size="20" /><br />
4
+ </p>
5
+
6
+ <p>
7
+ Title: <input type="text" name="title" size="100" /><br />
8
+ </p>
9
+
10
+ <p>
11
+ Content:<br />
12
+ <textarea name="content" rows="20" cols="100"></textarea><br />
13
+ </p>
14
+
15
+ <p>
16
+ <input type="submit" value="Save" />
17
+ <input type="button" value="Preview" class="preview-content" />
18
+ </p>
19
+ <% end %>
20
+
21
+ <hr />
22
+
23
+ <div class="preview-content">
24
+ </div>
25
+
26
+ <%= javascript_include_tag "https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" %>
27
+ <%= javascript_tag do %>
28
+ $(function() {
29
+ $(".preview-content").click(function() {
30
+ var $this = $(this).attr("disabled", "disabled");
31
+ $.ajax({
32
+ url: "/page_admin/preview_content",
33
+ type: "post",
34
+ data: {
35
+ authenticity_token: $("form input[name='authenticity_token']").val(),
36
+ content: $("textarea[name='content']").val()
37
+ },
38
+ dataType: "text",
39
+ success: function(text) {
40
+ $(".preview-content").html(text);
41
+ $this.removeAttr("disabled");
42
+ },
43
+ error: function() {
44
+ $(".preview-content").html('<div style="color: red;">There was an error.</div>');
45
+ $this.removeAttr("disabled");
46
+ }
47
+ });
48
+ return false;
49
+ });
50
+ });
51
+ <% end %>
@@ -1,7 +1,8 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "cartoonist-pages"
3
- s.version = "0.0.3.5"
4
- s.date = "2012-04-12"
3
+ raise "Cannot find version file!" unless File.exists?(File.join(File.dirname(__FILE__), "../CARTOONIST_VERSION"))
4
+ s.version = File.read File.join(File.dirname(__FILE__), "../CARTOONIST_VERSION")
5
+ s.date = Time.now.strftime "%Y-%m-%d"
5
6
  s.summary = "Cartoonist Pages"
6
7
  s.description = "This core plugin for Cartoonist adds arbitrary pages."
7
8
  s.authors = ["Mike Virata-Stone"]
@@ -0,0 +1,15 @@
1
+ en:
2
+ admin:
3
+ layout:
4
+ tab:
5
+ pages: Pages
6
+ page:
7
+ index:
8
+ not_posted: Not yet posted
9
+ posted: Posted
10
+ preview: preview
11
+ show: show
12
+ layout:
13
+ list: List
14
+ new: New Page
15
+ section: Pages
@@ -0,0 +1,17 @@
1
+ class CreatePages < ActiveRecord::Migration
2
+ def change
3
+ create_table :pages do |t|
4
+ t.string :title, :null => false
5
+ t.string :path, :null => false
6
+ t.date :posted_at
7
+ t.text :content, :null => false
8
+ t.boolean :locked, :null => false, :default => false
9
+ t.boolean :comments, :null => false, :default => false
10
+ t.boolean :in_sitemap, :null => false, :default => false
11
+ t.timestamps
12
+ end
13
+
14
+ add_index :pages, :title, :unique => true
15
+ add_index :pages, :path, :unique => true
16
+ end
17
+ end
@@ -1,4 +1,36 @@
1
1
  module CartoonistPages
2
2
  class Engine < ::Rails::Engine
3
+ Cartoonist::Admin::Tab.add :pages, :url => "/page_admin", :order => 2
4
+ Cartoonist::Migration.add_for self
5
+
6
+ Cartoonist::Backup.for :pages do
7
+ Page.order(:id).all
8
+ end
9
+
10
+ Cartoonist::Sitemap.add do
11
+ Page.sitemap.map do |page|
12
+ SitemapEntry.new "/#{page.path}", page.posted_at, :monthly, "0.4"
13
+ end
14
+ end
15
+
16
+ Cartoonist::Routes.add_end do
17
+ match ":id", :controller => "page", :action => "show"
18
+ end
19
+
20
+ Cartoonist::Routes.add do
21
+ resources :page_admin do
22
+ member do
23
+ post "lock"
24
+ post "post"
25
+ get "preview"
26
+ post "unlock"
27
+ post "unpost"
28
+ end
29
+
30
+ collection do
31
+ post "preview_content"
32
+ end
33
+ end
34
+ end
3
35
  end
4
36
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cartoonist-pages
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3.5
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-12 00:00:00.000000000 Z
12
+ date: 2012-04-16 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: This core plugin for Cartoonist adds arbitrary pages.
15
15
  email: reasonnumber@gmail.com
@@ -18,7 +18,19 @@ extensions: []
18
18
  extra_rdoc_files: []
19
19
  files:
20
20
  - .gitignore
21
+ - app/controllers/page_admin_controller.rb
22
+ - app/controllers/page_controller.rb
23
+ - app/helpers/page_admin_helper.rb
24
+ - app/models/page.rb
25
+ - app/views/layouts/page.html.erb
26
+ - app/views/layouts/page_admin.html.erb
27
+ - app/views/page/show.html.erb
28
+ - app/views/page_admin/edit.html.erb
29
+ - app/views/page_admin/index.html.erb
30
+ - app/views/page_admin/new.html.erb
21
31
  - cartoonist-pages.gemspec
32
+ - config/locales/en.yml
33
+ - db/migrate/20120316072549_create_pages.rb
22
34
  - lib/cartoonist-pages.rb
23
35
  - lib/cartoonist-pages/engine.rb
24
36
  homepage: http://reasonnumber.com/cartoonist