comatose-rubyisbeautiful 3.0.0
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.
- data/CHANGELOG +198 -0
- data/Gemfile +29 -0
- data/Gemfile.lock +130 -0
- data/INSTALL +14 -0
- data/LICENSE +20 -0
- data/Manifest +188 -0
- data/README +0 -0
- data/README.markdown +113 -0
- data/Rakefile +5 -0
- data/SPECS +61 -0
- data/app/controllers/application_controller.rb +3 -0
- data/app/controllers/comatose/admin_controller.rb +425 -0
- data/app/controllers/comatose/application_controller.rb +30 -0
- data/app/controllers/comatose/base_controller.rb +167 -0
- data/app/helpers/application_helper.rb +2 -0
- data/app/helpers/comatose/admin_helper.rb +78 -0
- data/app/helpers/comatose/application_helper.rb +2 -0
- data/app/helpers/comatose/base_helper.rb +5 -0
- data/app/models/comatose/page.rb +166 -0
- data/app/views/comatose/admin/_form.html.erb +108 -0
- data/app/views/comatose/admin/_page_list_item.html.erb +62 -0
- data/app/views/comatose/admin/delete.html.erb +18 -0
- data/app/views/comatose/admin/edit.html.erb +5 -0
- data/app/views/comatose/admin/index.html.erb +34 -0
- data/app/views/comatose/admin/new.html.erb +5 -0
- data/app/views/comatose/admin/reorder.html.erb +30 -0
- data/app/views/comatose/admin/versions.html.erb +40 -0
- data/app/views/layouts/application.html.erb +14 -0
- data/app/views/layouts/comatose/admin.html.erb +44 -0
- data/app/views/layouts/comatose/base.html.erb +14 -0
- data/comatose-rubyisbeautiful.gemspec +65 -0
- data/config/environment.rb +5 -0
- data/config/environments/development.rb +26 -0
- data/config/environments/production.rb +49 -0
- data/config/environments/test.rb +35 -0
- data/config/locales/en.yml +5 -0
- data/config.ru +4 -0
- data/db/seeds.rb +11 -0
- data/lib/comatose/configuration.rb +87 -0
- data/lib/comatose/drop.rb +45 -0
- data/lib/comatose/engine.rb +28 -0
- data/lib/comatose/filters/inline_filter.rb +15 -0
- data/lib/comatose/filters/timeago_filter.rb +14 -0
- data/lib/comatose/filters/translation_filter.rb +11 -0
- data/lib/comatose/locale_constraint.rb +15 -0
- data/lib/comatose/logger.rb +10 -0
- data/lib/comatose/page_wrapper.rb +147 -0
- data/lib/comatose/processing_context.rb +103 -0
- data/lib/comatose/routes.rb +70 -0
- data/lib/comatose/tasks/admin.rb +57 -0
- data/lib/comatose/tasks/data.rb +79 -0
- data/lib/comatose/tasks/setup.rb +118 -0
- data/lib/comatose/text_filters.rb +148 -0
- data/lib/comatose/version.rb +9 -0
- data/lib/comatose.rb +88 -0
- data/lib/generators/comatose/USAGE +7 -0
- data/lib/generators/comatose/comatose_generator.rb +37 -0
- data/lib/generators/comatose/templates/comatose.rb +33 -0
- data/lib/generators/comatose/templates/migration.erb +32 -0
- data/lib/generators/comatose/templates/seeds.erb +2 -0
- data/lib/support/class_options.rb +36 -0
- data/lib/support/inline_rendering.rb +48 -0
- data/lib/support/route_mapper.rb +51 -0
- data/lib/tasks/comatose.rake +9 -0
- data/lib/text_filters/markdown.rb +14 -0
- data/lib/text_filters/markdown_smartypants.rb +15 -0
- data/lib/text_filters/none.rb +8 -0
- data/lib/text_filters/rdoc.rb +13 -0
- data/lib/text_filters/simple.rb +8 -0
- data/lib/text_filters/textile.rb +15 -0
- data/public/404.html +26 -0
- data/public/422.html +26 -0
- data/public/500.html +26 -0
- data/public/favicon.ico +0 -0
- data/public/images/comatose/collapsed.gif +0 -0
- data/public/images/comatose/expanded.gif +0 -0
- data/public/images/comatose/no-children.gif +0 -0
- data/public/images/comatose/page.gif +0 -0
- data/public/images/comatose/rails.png +0 -0
- data/public/images/comatose/spinner.gif +0 -0
- data/public/images/comatose/title-hover-bg.gif +0 -0
- data/public/javascripts/comatose/admin.js +406 -0
- data/public/javascripts/comatose/application.js +2 -0
- data/public/javascripts/comatose/dragdrop.js +974 -0
- data/public/javascripts/editor.js +452 -0
- data/public/javascripts/jquery/GPL-LICENSE.txt +278 -0
- data/public/javascripts/jquery/MIT-LICENSE.txt +20 -0
- data/public/javascripts/jquery/README +67 -0
- data/public/javascripts/jquery/jquery.js +11 -0
- data/public/javascripts/jquery/jquery.ui.draggable.js +1 -0
- data/public/javascripts/jquery/jquery.ui.js +1 -0
- data/public/javascripts/jquery/jquery.ui.resizable.js +1 -0
- data/public/javascripts/jquery/jquery.ui.sortable.js +1 -0
- data/public/javascripts/wymeditor/iframe/default/lbl-blockquote.png +0 -0
- data/public/javascripts/wymeditor/iframe/default/lbl-h1.png +0 -0
- data/public/javascripts/wymeditor/iframe/default/lbl-h2.png +0 -0
- data/public/javascripts/wymeditor/iframe/default/lbl-h3.png +0 -0
- data/public/javascripts/wymeditor/iframe/default/lbl-h4.png +0 -0
- data/public/javascripts/wymeditor/iframe/default/lbl-h5.png +0 -0
- data/public/javascripts/wymeditor/iframe/default/lbl-h6.png +0 -0
- data/public/javascripts/wymeditor/iframe/default/lbl-p.png +0 -0
- data/public/javascripts/wymeditor/iframe/default/lbl-pre.png +0 -0
- data/public/javascripts/wymeditor/iframe/default/wymiframe.css +90 -0
- data/public/javascripts/wymeditor/iframe/default/wymiframe.html +26 -0
- data/public/javascripts/wymeditor/jquery.wymeditor.js +4688 -0
- data/public/javascripts/wymeditor/jquery.wymeditor.min.js +1 -0
- data/public/javascripts/wymeditor/jquery.wymeditor.pack.js +1 -0
- data/public/javascripts/wymeditor/lang/bg.js +45 -0
- data/public/javascripts/wymeditor/lang/ca.js +45 -0
- data/public/javascripts/wymeditor/lang/cs.js +45 -0
- data/public/javascripts/wymeditor/lang/cy.js +45 -0
- data/public/javascripts/wymeditor/lang/de.js +45 -0
- data/public/javascripts/wymeditor/lang/en.js +45 -0
- data/public/javascripts/wymeditor/lang/es.js +45 -0
- data/public/javascripts/wymeditor/lang/fa.js +46 -0
- data/public/javascripts/wymeditor/lang/fi.js +44 -0
- data/public/javascripts/wymeditor/lang/fr.js +45 -0
- data/public/javascripts/wymeditor/lang/gl.js +45 -0
- data/public/javascripts/wymeditor/lang/he.js +45 -0
- data/public/javascripts/wymeditor/lang/hr.js +45 -0
- data/public/javascripts/wymeditor/lang/hu.js +45 -0
- data/public/javascripts/wymeditor/lang/it.js +45 -0
- data/public/javascripts/wymeditor/lang/nb.js +45 -0
- data/public/javascripts/wymeditor/lang/nl.js +45 -0
- data/public/javascripts/wymeditor/lang/nn.js +45 -0
- data/public/javascripts/wymeditor/lang/pl.js +45 -0
- data/public/javascripts/wymeditor/lang/pt-br.js +45 -0
- data/public/javascripts/wymeditor/lang/pt.js +45 -0
- data/public/javascripts/wymeditor/lang/ru.js +45 -0
- data/public/javascripts/wymeditor/lang/sv.js +45 -0
- data/public/javascripts/wymeditor/lang/tr.js +45 -0
- data/public/javascripts/wymeditor/lang/zh_cn.js +47 -0
- data/public/javascripts/wymeditor/plugins/embed/jquery.wymeditor.embed.js +52 -0
- data/public/javascripts/wymeditor/plugins/fullscreen/icon_fullscreen.gif +0 -0
- data/public/javascripts/wymeditor/plugins/fullscreen/jquery.wymeditor.fullscreen.js +127 -0
- data/public/javascripts/wymeditor/plugins/hovertools/jquery.wymeditor.hovertools.js +57 -0
- data/public/javascripts/wymeditor/plugins/resizable/jquery.wymeditor.resizable.js +91 -0
- data/public/javascripts/wymeditor/plugins/resizable/readme.txt +124 -0
- data/public/javascripts/wymeditor/plugins/tidy/README +19 -0
- data/public/javascripts/wymeditor/plugins/tidy/jquery.wymeditor.tidy.js +82 -0
- data/public/javascripts/wymeditor/plugins/tidy/tidy.php +36 -0
- data/public/javascripts/wymeditor/plugins/tidy/wand.png +0 -0
- data/public/javascripts/wymeditor/skins/compact/icons.png +0 -0
- data/public/javascripts/wymeditor/skins/compact/skin.css +134 -0
- data/public/javascripts/wymeditor/skins/compact/skin.js +35 -0
- data/public/javascripts/wymeditor/skins/default/icons.png +0 -0
- data/public/javascripts/wymeditor/skins/default/skin.css +133 -0
- data/public/javascripts/wymeditor/skins/default/skin.js +40 -0
- data/public/javascripts/wymeditor/skins/minimal/images/bg.header.gif +0 -0
- data/public/javascripts/wymeditor/skins/minimal/images/bg.selector.silver.gif +0 -0
- data/public/javascripts/wymeditor/skins/minimal/images/bg.wymeditor.png +0 -0
- data/public/javascripts/wymeditor/skins/minimal/images/icons.silver.gif +0 -0
- data/public/javascripts/wymeditor/skins/minimal/skin.css +131 -0
- data/public/javascripts/wymeditor/skins/minimal/skin.js +30 -0
- data/public/javascripts/wymeditor/skins/silver/COPYING +674 -0
- data/public/javascripts/wymeditor/skins/silver/README +27 -0
- data/public/javascripts/wymeditor/skins/silver/images/bg.header.gif +0 -0
- data/public/javascripts/wymeditor/skins/silver/images/bg.selector.silver.gif +0 -0
- data/public/javascripts/wymeditor/skins/silver/images/bg.wymeditor.png +0 -0
- data/public/javascripts/wymeditor/skins/silver/images/icons.silver.gif +0 -0
- data/public/javascripts/wymeditor/skins/silver/skin.css +297 -0
- data/public/javascripts/wymeditor/skins/silver/skin.js +61 -0
- data/public/javascripts/wymeditor/skins/twopanels/icons.png +0 -0
- data/public/javascripts/wymeditor/skins/twopanels/skin.css +134 -0
- data/public/javascripts/wymeditor/skins/twopanels/skin.js +39 -0
- data/public/javascripts/wymeditor/skins/wymeditor_icon.png +0 -0
- data/public/javascripts/wymeditor.tar +0 -0
- data/public/robots.txt +5 -0
- data/public/stylesheets/comatose/admin.css +488 -0
- data/public/stylesheets/comatose/base.css +9 -0
- data/spec/controllers/comatose/base_controller_spec.rb +14 -0
- data/spec/controllers/foos_controller_spec.rb +5 -0
- data/spec/helpers/foos_helper_spec.rb +15 -0
- data/spec/routing/base_routing_spec.rb +12 -0
- data/spec/spec_helper.rb +27 -0
- data/test/behaviors.rb +106 -0
- data/test/fixtures/comatose_pages.yml +96 -0
- data/test/functional/comatose_admin_controller_test.rb +114 -0
- data/test/functional/comatose_controller_test.rb +45 -0
- data/test/integration/comatose_routing_test.rb +17 -0
- data/test/javascripts/test.html +26 -0
- data/test/javascripts/test_runner.js +307 -0
- data/test/old_test_helper.rb +43 -0
- data/test/performance/browsing_test.rb +9 -0
- data/test/test_helper.rb +13 -0
- data/test/unit/class_options_test.rb +52 -0
- data/test/unit/comatose_page_test.rb +128 -0
- data/test/unit/processing_context_test.rb +108 -0
- data/test/unit/text_filters_test.rb +52 -0
- data.tar.gz.sig +1 -0
- metadata +379 -0
- metadata.gz.sig +0 -0
@@ -0,0 +1,148 @@
|
|
1
|
+
require 'support/class_options'
|
2
|
+
module Comatose
|
3
|
+
class TextFilters
|
4
|
+
|
5
|
+
define_option :default_processor, :erb
|
6
|
+
define_option :default_filter, :none
|
7
|
+
define_option :logger, Comatose.logger
|
8
|
+
|
9
|
+
@registered_filters = { }
|
10
|
+
@registered_titles = { }
|
11
|
+
|
12
|
+
attr_reader :name
|
13
|
+
attr_reader :title
|
14
|
+
|
15
|
+
|
16
|
+
def initialize(name, title)
|
17
|
+
@name = name
|
18
|
+
@title = title
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
# The default create_link method...
|
23
|
+
# Override for your specific filter, if needed, in the #define block
|
24
|
+
def create_link(title, url)
|
25
|
+
%Q|<a href="#{url}">#{title}</a>|
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
# Process the text with using the specified context
|
30
|
+
def process_text(text, context, processor=TextFilters.default_processor)
|
31
|
+
processed_text = nil
|
32
|
+
#Comatose.logger.debug "text before process: #{text}"
|
33
|
+
case
|
34
|
+
when processor == :erb
|
35
|
+
processed_text = process_with_erb(text, context)
|
36
|
+
when processor == :liquid
|
37
|
+
processed_text = process_with_liquid(text, context)
|
38
|
+
else
|
39
|
+
raise "Unknown Text Processor '#{processor.to_s}'"
|
40
|
+
end
|
41
|
+
#Comatose.logger.debug "text after process: #{processed_text}"
|
42
|
+
return processed_text
|
43
|
+
end
|
44
|
+
|
45
|
+
|
46
|
+
class << self
|
47
|
+
private :new
|
48
|
+
attr_reader :registered_filters
|
49
|
+
attr_reader :registered_titles
|
50
|
+
|
51
|
+
# Use this to create and register your TextFilters
|
52
|
+
def define(name, title, &block)
|
53
|
+
begin
|
54
|
+
p = new(name, title)
|
55
|
+
p.instance_eval(&block)
|
56
|
+
if p.respond_to? :render_text
|
57
|
+
registered_titles[title] = name
|
58
|
+
registered_filters[name] = p
|
59
|
+
else
|
60
|
+
raise "#render_text isn't implemented in this class"
|
61
|
+
end
|
62
|
+
rescue LoadError
|
63
|
+
#Comatose.logger.debug "Filter '#{name}' was not included: #{$!}" unless TextFilters.logger.nil?
|
64
|
+
rescue
|
65
|
+
#Comatose.logger.debug "Filter '#{name}' was not included: #{$!}" unless TextFilters.logger.nil?
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
|
70
|
+
def get_filter(name)
|
71
|
+
#Comatose.logger.debug "get_filter: #{name}"
|
72
|
+
name = TextFilters.default_filter if name.nil?
|
73
|
+
name = registered_titles[name] if name.is_a? String
|
74
|
+
registered_filters[name]
|
75
|
+
end
|
76
|
+
|
77
|
+
|
78
|
+
def [](name)
|
79
|
+
get_filter(name)
|
80
|
+
end
|
81
|
+
|
82
|
+
|
83
|
+
def all
|
84
|
+
registered_filters
|
85
|
+
end
|
86
|
+
|
87
|
+
|
88
|
+
def all_titles
|
89
|
+
registered_titles.keys
|
90
|
+
end
|
91
|
+
|
92
|
+
|
93
|
+
def render_text(text, name=nil)
|
94
|
+
get_filter(name).render_text(text)
|
95
|
+
end
|
96
|
+
|
97
|
+
|
98
|
+
def process_text(text, context=nil, name=nil, processor=nil)
|
99
|
+
get_filter(name).process_text(text, context, processor)
|
100
|
+
end
|
101
|
+
|
102
|
+
|
103
|
+
# Call
|
104
|
+
def transform(text, context=nil, name=nil, processor=nil)
|
105
|
+
#Comatose.logger.debug "transform with text #{text}"
|
106
|
+
#Comatose.logger.debug "transform with context #{context}"
|
107
|
+
#Comatose.logger.debug "transform with name #{name}"
|
108
|
+
#Comatose.logger.debug "transform with processor #{processor}"
|
109
|
+
render_text process_text(text, context, name, processor), name
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
private
|
114
|
+
|
115
|
+
# This is an instance method so that it won't puke on requiring
|
116
|
+
# a non-existant library until it's being registered -- the only
|
117
|
+
# place I can really capture the LoadError
|
118
|
+
def require(name)
|
119
|
+
Kernel.require name
|
120
|
+
end
|
121
|
+
|
122
|
+
|
123
|
+
|
124
|
+
def process_with_erb(text, context)
|
125
|
+
Comatose.logger.debug "process erb before: #{text}"
|
126
|
+
output = ERB.new(text).result(context.get_binding)
|
127
|
+
Comatose.logger.debug "process erb after: #{output}"
|
128
|
+
return output
|
129
|
+
rescue => e
|
130
|
+
Comatose.logger.debug e.backtrace.join("\n")
|
131
|
+
raise "ERB Error: #{$!}"
|
132
|
+
end
|
133
|
+
|
134
|
+
|
135
|
+
|
136
|
+
def process_with_liquid(text, context={})
|
137
|
+
#Comatose.logger.debug "process liquid before: text: #{text}"
|
138
|
+
#Comatose.logger.debug "process liquid before: context: #{context}"
|
139
|
+
#context = context.stringify_keys if context.respond_to? :stringify_keys
|
140
|
+
Liquid::Template.parse(text).render(context)
|
141
|
+
rescue => e
|
142
|
+
Comatose.logger.debug e.backtrace.join("\n")
|
143
|
+
raise "Liquid Error: #{$!}"
|
144
|
+
end
|
145
|
+
|
146
|
+
|
147
|
+
end
|
148
|
+
end
|
data/lib/comatose.rb
ADDED
@@ -0,0 +1,88 @@
|
|
1
|
+
require 'acts_as_versioned'
|
2
|
+
require 'acts_as_list'
|
3
|
+
require 'acts_as_tree_rails3'
|
4
|
+
require 'redcloth'
|
5
|
+
require 'liquid'
|
6
|
+
require 'i18n'
|
7
|
+
|
8
|
+
|
9
|
+
require 'comatose/logger'
|
10
|
+
|
11
|
+
module Comatose
|
12
|
+
|
13
|
+
class <<self
|
14
|
+
|
15
|
+
def logger
|
16
|
+
comatose_logger = nil
|
17
|
+
begin
|
18
|
+
comatose_logger = Rails.logger
|
19
|
+
rescue
|
20
|
+
end
|
21
|
+
|
22
|
+
if comatose_logger.blank?
|
23
|
+
comatose_logger = Comatose::Logger.new(File.join(self.root, 'comatose.log'))
|
24
|
+
comatose_logger.level = Logger::DEBUG
|
25
|
+
comatose_logger.formatter = Logger::Formatter.new
|
26
|
+
end
|
27
|
+
return comatose_logger
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
def gem_root
|
32
|
+
gem_root = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
def root
|
37
|
+
comatose_root = nil
|
38
|
+
begin
|
39
|
+
comatose_root = Rails.root
|
40
|
+
rescue
|
41
|
+
end
|
42
|
+
|
43
|
+
if comatose_root.blank?
|
44
|
+
comatose_root = Comatose.gem_root
|
45
|
+
end
|
46
|
+
return comatose_root
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
class ConfigurationError < StandardError; end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
require 'comatose/engine'
|
56
|
+
require 'comatose/locale_constraint'
|
57
|
+
require 'comatose/routes'
|
58
|
+
|
59
|
+
require 'support/class_options'
|
60
|
+
|
61
|
+
require 'comatose/configuration'
|
62
|
+
require 'comatose/drop'
|
63
|
+
require 'comatose/page_wrapper'
|
64
|
+
require 'comatose/processing_context'
|
65
|
+
require 'comatose/text_filters'
|
66
|
+
require 'comatose/version'
|
67
|
+
|
68
|
+
require 'support/inline_rendering'
|
69
|
+
|
70
|
+
Dir[File.join(File.dirname(__FILE__), 'text_filters', '*.rb')].each do |path|
|
71
|
+
require "text_filters/#{File.basename(path)}"
|
72
|
+
end
|
73
|
+
|
74
|
+
Dir[File.join(File.dirname(__FILE__), 'comatose/filters', '*.rb')].each do |path|
|
75
|
+
require "comatose/filters/#{File.basename(path)}"
|
76
|
+
end
|
77
|
+
|
78
|
+
|
79
|
+
|
80
|
+
|
81
|
+
#require 'support/route_mapper'
|
82
|
+
#
|
83
|
+
#
|
84
|
+
#
|
85
|
+
## BCT - TODO: some hook into the greater Rails events it seems
|
86
|
+
##::Dispatcher.to_prepare :comatose do
|
87
|
+
# Comatose.config.after_setup.call
|
88
|
+
##end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'rails/generators/base'
|
2
|
+
require 'rails/generators/active_record'
|
3
|
+
require 'rails/generators/migration'
|
4
|
+
|
5
|
+
module Comatose
|
6
|
+
module Generators
|
7
|
+
class ComatoseGenerator < Rails::Generators::NamedBase
|
8
|
+
|
9
|
+
namespace :comatose
|
10
|
+
source_root File.expand_path("../templates", __FILE__)
|
11
|
+
|
12
|
+
include Rails::Generators::Migration
|
13
|
+
extend ActiveRecord::Generators::Migration
|
14
|
+
|
15
|
+
|
16
|
+
def create_migration_file
|
17
|
+
migration_template "migration.erb", "db/migrate/add_comatose_support.rb"
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
def create_init_file
|
22
|
+
template "comatose.rb", "config/initializers/comatose.rb"
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
def copy_rake_files
|
27
|
+
# TODO
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
def copy_assets
|
32
|
+
# TODO
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
Comatose.configure do |config|
|
2
|
+
config.admin_title = 'Comatose'
|
3
|
+
config.admin_includes = []
|
4
|
+
config.admin_helpers = []
|
5
|
+
config.admin_sub_title = 'The Micro CMS'
|
6
|
+
config.content_type = 'utf-8'
|
7
|
+
config.default_filter = 'None'
|
8
|
+
config.default_processor = :erb
|
9
|
+
config.default_tree_level = 2
|
10
|
+
config.disable_caching = false
|
11
|
+
config.hidden_meta_fields = []
|
12
|
+
config.helpers = []
|
13
|
+
config.includes = []
|
14
|
+
config.allow_import_export = true
|
15
|
+
end
|
16
|
+
|
17
|
+
class Hash
|
18
|
+
# Having the method_missing catchall in conjunction with get_binding
|
19
|
+
# allows us to use the hash as a Context for ERB
|
20
|
+
def method_missing(meth, *arg)
|
21
|
+
if self.has_key? meth.to_s
|
22
|
+
self[meth.to_s]
|
23
|
+
else
|
24
|
+
super
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
# Gets the binding object for use with ERB
|
30
|
+
def get_binding
|
31
|
+
binding
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# class Comatose::Page < ActiveRecord::Base
|
2
|
+
# set_table_name 'comatose_pages'
|
3
|
+
# acts_as_versioned :table_name =>'comatose_page_versions', :if_changed => [ :title, :slug, :keywords, :body ]
|
4
|
+
# end
|
5
|
+
|
6
|
+
class AddComatoseSupport < ActiveRecord::Migration
|
7
|
+
|
8
|
+
# Schema for Comatose version 3.0.0+
|
9
|
+
def self.up
|
10
|
+
create_table :comatose_pages do |t|
|
11
|
+
t.integer "parent_id"
|
12
|
+
t.text "full_path", :default => ''
|
13
|
+
t.string "title", :limit => 255
|
14
|
+
t.string "slug", :limit => 255
|
15
|
+
t.string "keywords", :limit => 255
|
16
|
+
t.string "layout"
|
17
|
+
t.text "body"
|
18
|
+
t.string "filter_type", :limit => 25, :default => "Textile"
|
19
|
+
t.string "author", :limit => 255
|
20
|
+
t.integer "position", :default => 0
|
21
|
+
t.integer "version"
|
22
|
+
t.timestamps
|
23
|
+
end
|
24
|
+
|
25
|
+
Comatose::Page.create_versioned_table rescue "Skipping Comatose::Page.create_versioned_table"
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.down
|
29
|
+
Comatose::Page.drop_versioned_table rescue "Skipping Comatose::Page.drop_versioned_table"
|
30
|
+
drop_table :comatose_pages
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
class Class
|
2
|
+
def define_option(name, default=nil)
|
3
|
+
sym = name.to_sym
|
4
|
+
cattr_reader(sym)
|
5
|
+
cattr_writer(sym)
|
6
|
+
send("#{name.to_s}=", default)
|
7
|
+
end
|
8
|
+
|
9
|
+
def blockable_attr_accessor(sym)
|
10
|
+
module_eval(<<-EVAL, __FILE__, __LINE__)
|
11
|
+
def #{sym}(&block)
|
12
|
+
if block_given?
|
13
|
+
@#{sym} = block
|
14
|
+
else
|
15
|
+
@#{sym}
|
16
|
+
end
|
17
|
+
end
|
18
|
+
def #{sym}=(value)
|
19
|
+
@#{sym} = value
|
20
|
+
end
|
21
|
+
EVAL
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
class Module
|
26
|
+
def attr_accessor_with_default(sym, default = nil, &block)
|
27
|
+
raise 'Default value or block required' unless !default.nil? || block
|
28
|
+
define_method(sym, block_given? ? block : Proc.new { default })
|
29
|
+
module_eval(<<-EVAL, __FILE__, __LINE__)
|
30
|
+
def #{sym}=(value)
|
31
|
+
class << self; attr_reader :#{sym} end
|
32
|
+
@#{sym} = value
|
33
|
+
end
|
34
|
+
EVAL
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# Extends the view to support rendering inline comatose pages...
|
2
|
+
ActionView::Base.class_eval do
|
3
|
+
alias_method :render_otherwise, :render
|
4
|
+
|
5
|
+
def render(options = {}, old_local_assigns = {}, &block) #:nodoc:
|
6
|
+
if options.is_a?(Hash) && page_name = options.delete(:comatose)
|
7
|
+
render_comatose(page_name, options[:params] || options)
|
8
|
+
else
|
9
|
+
render_otherwise(options, old_local_assigns, &block)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def render_comatose(page_path, params = {})
|
14
|
+
params = {
|
15
|
+
:silent => false,
|
16
|
+
:use_cache => true,
|
17
|
+
:locals => {}
|
18
|
+
}.merge(params)
|
19
|
+
if params[:use_cache] and params[:locals].empty?
|
20
|
+
render_cached_comatose_page(page_path, params)
|
21
|
+
else
|
22
|
+
render_comatose_page(page_path, params)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
protected
|
27
|
+
|
28
|
+
def render_cached_comatose_page(page_path, params)
|
29
|
+
key = page_path.gsub(/\//, '+')
|
30
|
+
unless html = controller.read_fragment(key)
|
31
|
+
html = render_comatose_page( page_path, params )
|
32
|
+
controller.write_fragment(key, html) unless Comatose.config.disable_caching
|
33
|
+
end
|
34
|
+
html
|
35
|
+
end
|
36
|
+
|
37
|
+
def render_comatose_page(page_path, params)
|
38
|
+
if page = Comatose::Page.find_by_path(page_path)
|
39
|
+
# Add the request params to the context...
|
40
|
+
params[:locals]['params'] = controller.params
|
41
|
+
html = page.to_html( params[:locals] )
|
42
|
+
else
|
43
|
+
html = params[:silent] ? '' : "<p><tt>#{page_path}</tt> not found</p>"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
@@ -0,0 +1,51 @@
|
|
1
|
+
#class ActionController::Routing::RouteSet::Mapper
|
2
|
+
#
|
3
|
+
# # For mounting a page to a path
|
4
|
+
# def comatose_root(path, options={ })
|
5
|
+
# opts = {
|
6
|
+
# :index => '',
|
7
|
+
# :layout => 'base.html.erb',
|
8
|
+
# :use_cache => 'true',
|
9
|
+
# :cache_path => nil,
|
10
|
+
# :named_route => nil
|
11
|
+
# }.merge(options)
|
12
|
+
# # Ensure the controller is aware of the mount point...
|
13
|
+
# Comatose.add_mount_point(path, opts)
|
14
|
+
# # Add the route...
|
15
|
+
# opts[:controller] = 'comatose'
|
16
|
+
# opts[:action] ='show'
|
17
|
+
# route_name = opts.delete(:named_route)
|
18
|
+
# unless route_name.nil?
|
19
|
+
# named_route(route_name, "#{path}/*page", opts)
|
20
|
+
# else
|
21
|
+
# if opts[:index] == '' # if it maps to the root site URI, name it comatose_root
|
22
|
+
# named_route('comatose_root', "#{path}/*page", opts)
|
23
|
+
# else
|
24
|
+
# connect("#{path}/*page", opts)
|
25
|
+
# end
|
26
|
+
# end
|
27
|
+
# end
|
28
|
+
#
|
29
|
+
#
|
30
|
+
# # For mounting the admin
|
31
|
+
# def comatose_admin(path='comatose_admin', options={ })
|
32
|
+
# opts = {
|
33
|
+
# :controller => 'comatose_admin',
|
34
|
+
# :named_route => 'comatose_admin'
|
35
|
+
# }.merge(options)
|
36
|
+
# route_name = opts.delete(:named_route)
|
37
|
+
# named_route(route_name, "#{path}/:action/:id", opts)
|
38
|
+
# end
|
39
|
+
#
|
40
|
+
#
|
41
|
+
# def method_missing(name, *args, &proc)
|
42
|
+
# if name.to_s.starts_with?('comatose_')
|
43
|
+
# opts = (args.last.is_a?(Hash)) ? args.pop : { }
|
44
|
+
# opts[:named_route] = name.to_s #[9..-1]
|
45
|
+
# comatose_root(*(args << opts))
|
46
|
+
# else
|
47
|
+
# super unless args.length >= 1 && proc.nil?
|
48
|
+
# #Rails.routes.add_named_route(name, *args)
|
49
|
+
# end
|
50
|
+
# end
|
51
|
+
#end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
#
|
2
|
+
# MARKDOWN + SMARTYPANTS
|
3
|
+
#
|
4
|
+
Comatose::TextFilters.define :markdown_smartypants, "Markdown + SmartyPants" do
|
5
|
+
require 'bluecloth'
|
6
|
+
require 'rubypants'
|
7
|
+
|
8
|
+
def render_text(text)
|
9
|
+
RubyPants.new( BlueCloth.new(text).to_html ).to_html
|
10
|
+
end
|
11
|
+
|
12
|
+
def create_link(title, url)
|
13
|
+
"[#{title}](#{url})"
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
#
|
2
|
+
# RDOC
|
3
|
+
#
|
4
|
+
Comatose::TextFilters.define :rdoc, "RDoc" do
|
5
|
+
require 'rdoc/markup/simple_markup'
|
6
|
+
require 'rdoc/markup/simple_markup/to_html'
|
7
|
+
|
8
|
+
def render_text(text)
|
9
|
+
p = SM::SimpleMarkup.new
|
10
|
+
h = SM::ToHtml.new
|
11
|
+
p.convert(text, h)
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
#
|
2
|
+
# TEXTILE
|
3
|
+
#
|
4
|
+
Comatose::TextFilters.define :textile, "Textile" do
|
5
|
+
require 'redcloth'
|
6
|
+
|
7
|
+
def render_text(text)
|
8
|
+
RedCloth.new(text).to_html(:refs_markdown, :textile, :markdown)
|
9
|
+
end
|
10
|
+
|
11
|
+
def create_link(title, url)
|
12
|
+
%Q|"#{title}":#{url}|
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
data/public/404.html
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>The page you were looking for doesn't exist (404)</title>
|
5
|
+
<style type="text/css">
|
6
|
+
body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
|
7
|
+
div.dialog {
|
8
|
+
width: 25em;
|
9
|
+
padding: 0 4em;
|
10
|
+
margin: 4em auto 0 auto;
|
11
|
+
border: 1px solid #ccc;
|
12
|
+
border-right-color: #999;
|
13
|
+
border-bottom-color: #999;
|
14
|
+
}
|
15
|
+
h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
|
16
|
+
</style>
|
17
|
+
</head>
|
18
|
+
|
19
|
+
<body>
|
20
|
+
<!-- This file lives in public/404.html -->
|
21
|
+
<div class="dialog">
|
22
|
+
<h1>The page you were looking for doesn't exist.</h1>
|
23
|
+
<p>You may have mistyped the address or the page may have moved.</p>
|
24
|
+
</div>
|
25
|
+
</body>
|
26
|
+
</html>
|
data/public/422.html
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>The change you wanted was rejected (422)</title>
|
5
|
+
<style type="text/css">
|
6
|
+
body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
|
7
|
+
div.dialog {
|
8
|
+
width: 25em;
|
9
|
+
padding: 0 4em;
|
10
|
+
margin: 4em auto 0 auto;
|
11
|
+
border: 1px solid #ccc;
|
12
|
+
border-right-color: #999;
|
13
|
+
border-bottom-color: #999;
|
14
|
+
}
|
15
|
+
h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
|
16
|
+
</style>
|
17
|
+
</head>
|
18
|
+
|
19
|
+
<body>
|
20
|
+
<!-- This file lives in public/422.html -->
|
21
|
+
<div class="dialog">
|
22
|
+
<h1>The change you wanted was rejected.</h1>
|
23
|
+
<p>Maybe you tried to change something you didn't have access to.</p>
|
24
|
+
</div>
|
25
|
+
</body>
|
26
|
+
</html>
|
data/public/500.html
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>We're sorry, but something went wrong (500)</title>
|
5
|
+
<style type="text/css">
|
6
|
+
body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
|
7
|
+
div.dialog {
|
8
|
+
width: 25em;
|
9
|
+
padding: 0 4em;
|
10
|
+
margin: 4em auto 0 auto;
|
11
|
+
border: 1px solid #ccc;
|
12
|
+
border-right-color: #999;
|
13
|
+
border-bottom-color: #999;
|
14
|
+
}
|
15
|
+
h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
|
16
|
+
</style>
|
17
|
+
</head>
|
18
|
+
|
19
|
+
<body>
|
20
|
+
<!-- This file lives in public/500.html -->
|
21
|
+
<div class="dialog">
|
22
|
+
<h1>We're sorry, but something went wrong.</h1>
|
23
|
+
<p>We've been notified about this issue and we'll take a look at it shortly.</p>
|
24
|
+
</div>
|
25
|
+
</body>
|
26
|
+
</html>
|
data/public/favicon.ico
ADDED
File without changes
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|