comatose-rubyisbeautiful 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|