adva-markup 0.0.1
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/app/models/content_slice.rb +5 -0
- data/app/models/section_slice.rb +6 -0
- data/app/views/admin/blogs/_form_slice.html.rb +14 -0
- data/app/views/admin/posts/_form_slice.html.rb +10 -0
- data/config/locales/en.yml +2 -0
- data/config/redirects.rb +3 -0
- data/config/routes.rb +3 -0
- data/lib/adva-markup.rb +1 -0
- data/lib/adva/markup.rb +48 -0
- data/lib/adva/markup/action_controller.rb +38 -0
- data/lib/adva/markup/active_record.rb +41 -0
- metadata +118 -0
@@ -0,0 +1,14 @@
|
|
1
|
+
require_dependency 'admin/blogs/_form.html'
|
2
|
+
|
3
|
+
Admin::Blogs::Form.class_eval do
|
4
|
+
include do
|
5
|
+
def fields
|
6
|
+
super
|
7
|
+
fieldset do
|
8
|
+
column do
|
9
|
+
form.input :default_filter, :as => :select, :collection => Adva::Markup.options
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
data/config/redirects.rb
ADDED
data/config/routes.rb
ADDED
data/lib/adva-markup.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'adva/markup'
|
data/lib/adva/markup.rb
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'adva'
|
2
|
+
require 'RedCloth'
|
3
|
+
require 'rdiscount'
|
4
|
+
|
5
|
+
ERB::Util.send(:undef_method, :t) # wtf, redcloth!
|
6
|
+
|
7
|
+
module Adva
|
8
|
+
class Markup < ::Rails::Engine
|
9
|
+
include Adva::Engine
|
10
|
+
|
11
|
+
autoload :ActionController, 'adva/markup/action_controller'
|
12
|
+
autoload :ActiveRecord, 'adva/markup/active_record'
|
13
|
+
|
14
|
+
mattr_accessor :filters
|
15
|
+
self.filters = {
|
16
|
+
:markdown => 'RDiscount',
|
17
|
+
:textile => 'RedCloth'
|
18
|
+
}
|
19
|
+
|
20
|
+
class << self
|
21
|
+
def apply(name, markup)
|
22
|
+
if filter = self.filter(name)
|
23
|
+
filter.new(markup).to_html
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def filter(name)
|
28
|
+
filters[name.to_sym].constantize if name.present? && filters[name.to_sym]
|
29
|
+
end
|
30
|
+
|
31
|
+
def keys
|
32
|
+
@keys ||= filters.keys.map(&:to_s).sort
|
33
|
+
end
|
34
|
+
|
35
|
+
def names
|
36
|
+
@names ||= keys.map { |key| key.titleize }
|
37
|
+
end
|
38
|
+
|
39
|
+
def options
|
40
|
+
@options ||= Hash[*names.zip(keys).flatten]
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
ActionController::Base.extend(Adva::Markup::ActionController::ActMacro)
|
47
|
+
ActiveRecord::Base.extend(Adva::Markup::ActiveRecord::ActMacro)
|
48
|
+
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Adva
|
2
|
+
class Markup
|
3
|
+
module ActionController
|
4
|
+
module ActMacro
|
5
|
+
def filtered_attributes(*models)
|
6
|
+
options = models.extract_options!
|
7
|
+
options[:models] = models.map(&:to_s).map(&:camelize)
|
8
|
+
options[:only] = Array(options[:only]).map(&:to_sym)
|
9
|
+
options[:except] = Array(options[:except]).map(&:to_sym)
|
10
|
+
|
11
|
+
class_inheritable_accessor :filtered_attribute_options
|
12
|
+
self.filtered_attribute_options = options
|
13
|
+
|
14
|
+
include InstanceMethods
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
module InstanceMethods
|
19
|
+
def render(*args)
|
20
|
+
options = filtered_attribute_options
|
21
|
+
excluded = options[:except].include?(params[:action].to_sym)
|
22
|
+
included = options[:only].empty? || options[:only].include?(params[:action].to_sym)
|
23
|
+
|
24
|
+
!excluded && included ? with_filtered_attributes { super } : super
|
25
|
+
end
|
26
|
+
|
27
|
+
def with_filtered_attributes
|
28
|
+
models = filtered_attribute_options[:models].map(&:constantize)
|
29
|
+
models.each { |model| model.read_filtered_attributes = true }
|
30
|
+
yield.tap do
|
31
|
+
models.each { |model| model.read_filtered_attributes = false }
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# TODO make sure this can be called multiple times
|
2
|
+
#
|
3
|
+
module Adva
|
4
|
+
class Markup
|
5
|
+
module ActiveRecord
|
6
|
+
module ActMacro
|
7
|
+
def filters(*attributes)
|
8
|
+
class_inheritable_accessor :filtered_attributes
|
9
|
+
class_inheritable_accessor :read_filtered_attributes
|
10
|
+
|
11
|
+
self.filtered_attributes = attributes
|
12
|
+
self.read_filtered_attributes = false
|
13
|
+
|
14
|
+
before_save :filter_attributes!
|
15
|
+
include InstanceMethods
|
16
|
+
include attribute_readers_module
|
17
|
+
end
|
18
|
+
|
19
|
+
def attribute_readers_module
|
20
|
+
Module.new.tap do |readers|
|
21
|
+
filtered_attributes.each do |name|
|
22
|
+
readers.module_eval <<-rb
|
23
|
+
def #{name}; read_filtered_attributes ? send(:#{name}_html) : super; end
|
24
|
+
rb
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
module InstanceMethods
|
31
|
+
def filter_attributes!
|
32
|
+
filtered_attributes.each do |name|
|
33
|
+
value = self.send(name)
|
34
|
+
value = Adva::Markup.apply(filter, value) if respond_to?(:filter) && filter
|
35
|
+
write_attribute(:"#{name}_html", value)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
metadata
ADDED
@@ -0,0 +1,118 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: adva-markup
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 29
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 1
|
10
|
+
version: 0.0.1
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Sven Fuchs
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2010-10-29 00:00:00 +02:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: adva-core
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 3
|
30
|
+
segments:
|
31
|
+
- 0
|
32
|
+
version: "0"
|
33
|
+
type: :runtime
|
34
|
+
version_requirements: *id001
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: rdiscount
|
37
|
+
prerelease: false
|
38
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
hash: 3
|
44
|
+
segments:
|
45
|
+
- 0
|
46
|
+
version: "0"
|
47
|
+
type: :runtime
|
48
|
+
version_requirements: *id002
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
name: RedCloth
|
51
|
+
prerelease: false
|
52
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
53
|
+
none: false
|
54
|
+
requirements:
|
55
|
+
- - ">="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
hash: 3
|
58
|
+
segments:
|
59
|
+
- 0
|
60
|
+
version: "0"
|
61
|
+
type: :runtime
|
62
|
+
version_requirements: *id003
|
63
|
+
description: "[description]"
|
64
|
+
email: nobody@adva-cms.org
|
65
|
+
executables: []
|
66
|
+
|
67
|
+
extensions: []
|
68
|
+
|
69
|
+
extra_rdoc_files: []
|
70
|
+
|
71
|
+
files:
|
72
|
+
- app/views/admin/blogs/_form_slice.html.rb
|
73
|
+
- app/views/admin/posts/_form_slice.html.rb
|
74
|
+
- app/models/content_slice.rb
|
75
|
+
- app/models/section_slice.rb
|
76
|
+
- config/redirects.rb
|
77
|
+
- config/routes.rb
|
78
|
+
- config/locales/en.yml
|
79
|
+
- lib/adva/markup.rb
|
80
|
+
- lib/adva/markup/action_controller.rb
|
81
|
+
- lib/adva/markup/active_record.rb
|
82
|
+
- lib/adva-markup.rb
|
83
|
+
has_rdoc: true
|
84
|
+
homepage: http://github.com/svenfuchs/adva-cms2
|
85
|
+
licenses: []
|
86
|
+
|
87
|
+
post_install_message:
|
88
|
+
rdoc_options: []
|
89
|
+
|
90
|
+
require_paths:
|
91
|
+
- lib
|
92
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
93
|
+
none: false
|
94
|
+
requirements:
|
95
|
+
- - ">="
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
hash: 3
|
98
|
+
segments:
|
99
|
+
- 0
|
100
|
+
version: "0"
|
101
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
102
|
+
none: false
|
103
|
+
requirements:
|
104
|
+
- - ">="
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
hash: 3
|
107
|
+
segments:
|
108
|
+
- 0
|
109
|
+
version: "0"
|
110
|
+
requirements: []
|
111
|
+
|
112
|
+
rubyforge_project: "[none]"
|
113
|
+
rubygems_version: 1.3.7
|
114
|
+
signing_key:
|
115
|
+
specification_version: 3
|
116
|
+
summary: "[summary]"
|
117
|
+
test_files: []
|
118
|
+
|