qor_layout 0.0.1 → 0.0.2
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/Gemfile +1 -7
- data/VERSION +1 -1
- data/app/models/qor/layout/setting.rb +19 -22
- data/lib/qor/layout/action.rb +2 -2
- data/lib/qor/layout/configuration.rb +16 -129
- data/qor_layout.gemspec +2 -0
- metadata +19 -3
data/Gemfile
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.2
|
@@ -30,12 +30,12 @@ module Qor
|
|
30
30
|
|
31
31
|
def values(name, for_setting=false)
|
32
32
|
stored_value = (value || {}).with_indifferent_access[name]
|
33
|
-
gadget_setting = gadget_settings
|
33
|
+
gadget_setting = gadget_settings.find(:meta, name)
|
34
34
|
|
35
35
|
if stored_value =~ /^([\w:]+)\((\d+)\)$/
|
36
36
|
return ($1.constantize.find_by_id($2) rescue stored_value)
|
37
|
-
elsif gadget_setting && (gadget_setting[:type].to_s == 'gadget')
|
38
|
-
gadget_name = gadget_setting[:name] || name
|
37
|
+
elsif gadget_setting && (gadget_setting.options[:type].to_s == 'gadget')
|
38
|
+
gadget_name = gadget_setting.options[:name] || name
|
39
39
|
gadgets = children.where(:name => gadget_name)
|
40
40
|
return (for_setting ? gadgets.map(&:settings) : gadgets)
|
41
41
|
else
|
@@ -44,10 +44,9 @@ module Qor
|
|
44
44
|
end
|
45
45
|
|
46
46
|
def meta_settings
|
47
|
-
gadget_settings.inject({}) do |s, setting|
|
48
|
-
|
49
|
-
|
50
|
-
s.merge({key => value})
|
47
|
+
gadget_settings.children.inject({}) do |s, setting|
|
48
|
+
value = values(setting.name, true)
|
49
|
+
s.merge({setting.name => value})
|
51
50
|
end.with_indifferent_access
|
52
51
|
end
|
53
52
|
|
@@ -58,8 +57,10 @@ module Qor
|
|
58
57
|
def value_attributes=(attrs)
|
59
58
|
attrs = attrs.with_indifferent_access
|
60
59
|
value_attrs = {}
|
61
|
-
gadget_settings.map do |
|
62
|
-
|
60
|
+
gadget_settings.find(:meta).map do |child|
|
61
|
+
key = child.name
|
62
|
+
|
63
|
+
if child.options[:type].to_s =~ /image|file|media/
|
63
64
|
if self.value && (self.value[key] =~ /^([\w:]+)\((\d+)\)$/)
|
64
65
|
asset = $1.constantize.find_by_id($2).update_attribute(:data, attrs[key]) if attrs[key]
|
65
66
|
value_attrs.update({key => self.value[key]})
|
@@ -96,8 +97,8 @@ module Qor
|
|
96
97
|
end
|
97
98
|
|
98
99
|
def settings
|
99
|
-
if gadget.try(:
|
100
|
-
self.instance_eval &gadget.try(:
|
100
|
+
if gadget.first(:context).try(:block)
|
101
|
+
self.instance_eval &gadget.first(:context).try(:block)
|
101
102
|
else
|
102
103
|
meta_settings
|
103
104
|
end
|
@@ -105,15 +106,15 @@ module Qor
|
|
105
106
|
|
106
107
|
def resource_attributes_for_settings
|
107
108
|
attrs = []
|
108
|
-
|
109
|
-
attr_show = !
|
110
|
-
attrs << Qor::ResourceAttribute.new("value_attributes[#{
|
109
|
+
gadget_settings.children.map do |child|
|
110
|
+
attr_show = !child.options[:hidden]
|
111
|
+
attrs << Qor::ResourceAttribute.new("value_attributes[#{child.name}]", child.options) if attr_show
|
111
112
|
end
|
112
113
|
attrs
|
113
114
|
end
|
114
115
|
|
115
116
|
def render_without_style
|
116
|
-
::Mustache.render(gadget.
|
117
|
+
::Mustache.render(gadget.first(:template).try(:value).to_s, settings)
|
117
118
|
end
|
118
119
|
|
119
120
|
def render(edit_mode=false)
|
@@ -124,7 +125,7 @@ module Qor
|
|
124
125
|
style_css = new_style.map {|k,v| "#{k}: #{v}"}.join("; ")
|
125
126
|
|
126
127
|
parse_content.xpath('*').first.set_attribute("qor_layout_elements", id.to_s)
|
127
|
-
parse_content.xpath('*').first.set_attribute("qor_layout_draggable_elements", id.to_s) if gadget.
|
128
|
+
parse_content.xpath('*').first.set_attribute("qor_layout_draggable_elements", id.to_s) if gadget.options[:floating]
|
128
129
|
parse_content.xpath('*').first.set_attribute("style", style_css)
|
129
130
|
extra = edit_mode ? "<div for_qor_layout_elements='#{id}'><a href='/admin/layout_settings/#{id}/edit'><img src='/qor_widget/images/settings.png'/></a></div>" : ""
|
130
131
|
|
@@ -132,15 +133,11 @@ module Qor
|
|
132
133
|
end
|
133
134
|
|
134
135
|
def gadget
|
135
|
-
Qor::Layout::Configuration.
|
136
|
+
Qor::Layout::Configuration.find(:gadget, name)
|
136
137
|
end
|
137
138
|
|
138
139
|
def gadget_settings
|
139
|
-
|
140
|
-
end
|
141
|
-
|
142
|
-
def gadget_children_settings
|
143
|
-
gadget_settings.select {|k,v| v[:type].to_s == 'gadget'}
|
140
|
+
gadget.first(:settings)
|
144
141
|
end
|
145
142
|
|
146
143
|
def method_missing(method_sym, *args, &block)
|
data/lib/qor/layout/action.rb
CHANGED
@@ -2,8 +2,8 @@ module Qor
|
|
2
2
|
module Layout
|
3
3
|
module Action
|
4
4
|
def self.detect_action(app)
|
5
|
-
Qor::Layout::Configuration.
|
6
|
-
return action if action.
|
5
|
+
Qor::Layout::Configuration.find(:action).map do |action|
|
6
|
+
return action if action.first(:detect).block.safe_call(app)
|
7
7
|
end
|
8
8
|
end
|
9
9
|
end
|
@@ -1,144 +1,31 @@
|
|
1
|
+
require 'qor_dsl'
|
2
|
+
|
1
3
|
module Qor
|
2
4
|
module Layout
|
3
5
|
module Configuration
|
4
|
-
|
5
|
-
|
6
|
-
end
|
7
|
-
|
8
|
-
class RawData
|
9
|
-
include Qor::Extlib::Dsl::Configuration::RawData
|
10
|
-
attr_accessor :description, :description_blk, :meta_inputs, :template_blk, :context_blk, :detect_blk
|
11
|
-
|
12
|
-
def layout(name, options = {}, &blk)
|
13
|
-
Qor::Layout::Configuration::Layout.new(blk, self.owner, options.merge(:name => name))
|
14
|
-
end
|
15
|
-
|
16
|
-
def gadget(name, options = {}, &blk)
|
17
|
-
Qor::Layout::Configuration::Gadget.new(blk, self.owner, options.merge(:name => name))
|
18
|
-
end
|
19
|
-
|
20
|
-
def action(name, options = {}, &blk)
|
21
|
-
::Qor::Layout::Configuration::Action.new(blk, self.owner, options.merge(:name => name))
|
22
|
-
end
|
23
|
-
|
24
|
-
def gadgets(name, options = {}, &blk)
|
25
|
-
# TODO define gadgets for layout
|
26
|
-
end
|
27
|
-
|
28
|
-
def settings(&blk)
|
29
|
-
self.meta_inputs = Inputs.new
|
30
|
-
self.meta_inputs.instance_eval(&blk)
|
31
|
-
self.meta_inputs
|
32
|
-
end
|
33
|
-
|
34
|
-
def context(&blk)
|
35
|
-
self.context_blk = blk
|
36
|
-
end
|
37
|
-
|
38
|
-
def template(&blk)
|
39
|
-
self.template_blk = blk
|
40
|
-
end
|
41
|
-
|
42
|
-
def detect(&blk)
|
43
|
-
self.detect_blk = blk
|
44
|
-
end
|
45
|
-
|
46
|
-
def desc(description = nil, &blk)
|
47
|
-
raise 'desc must be string or blcok' unless description.is_a?(String) || blk
|
48
|
-
self.description = description
|
49
|
-
self.description_blk = blk
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
class Base
|
54
|
-
include Qor::Extlib::Dsl::Configuration::Base
|
55
|
-
attr_accessor :name, :floating
|
56
|
-
|
57
|
-
self.raw_data_klazz = ::Qor::Layout::Configuration::RawData
|
58
|
-
def initialize(*arguments)
|
59
|
-
super
|
60
|
-
|
61
|
-
root = arguments[1]
|
6
|
+
include Qor::Dsl
|
7
|
+
default_configs ["config/qor/layout.rb", "config/layout.rb"]
|
62
8
|
|
63
|
-
|
64
|
-
root.group_children ||= {}
|
65
|
-
root.group_children[self.class.to_s] ||= {}
|
66
|
-
root.group_children[self.class.to_s][self.name.to_s] = self
|
67
|
-
end
|
68
|
-
end
|
9
|
+
node :template
|
69
10
|
|
70
|
-
|
71
|
-
|
72
|
-
end
|
11
|
+
node :gadget do
|
12
|
+
node :desc
|
73
13
|
|
74
|
-
|
75
|
-
|
14
|
+
node :settings do
|
15
|
+
node :meta
|
76
16
|
end
|
77
|
-
end
|
78
|
-
|
79
|
-
class Root < Base
|
80
|
-
attr_accessor :group_children
|
81
17
|
|
82
|
-
|
83
|
-
|
84
|
-
children = children[name] if name.present?
|
85
|
-
children
|
86
|
-
end
|
87
|
-
|
88
|
-
def gadgets(name=nil)
|
89
|
-
children = group_children[Gadget.to_s]
|
90
|
-
children = children[name] if name.present?
|
91
|
-
children
|
92
|
-
end
|
93
|
-
|
94
|
-
def gadget_by_name(name)
|
95
|
-
Qor::Layout::Configuration.gadgets.with_indifferent_access[name]
|
96
|
-
end
|
97
|
-
|
98
|
-
def gadget_settings_by_name(name)
|
99
|
-
(gadget_by_name(name).try(:settings) || {}).with_indifferent_access
|
100
|
-
end
|
101
|
-
|
102
|
-
def actions(name=nil)
|
103
|
-
children = group_children[Action.to_s]
|
104
|
-
children = children[name] if name.present?
|
105
|
-
children
|
106
|
-
end
|
18
|
+
node :context
|
19
|
+
node :template, :inherit => true
|
107
20
|
end
|
108
21
|
|
109
|
-
|
22
|
+
node :layout do
|
23
|
+
node :gadgets
|
110
24
|
end
|
111
|
-
class Gadget < Base
|
112
|
-
def settings
|
113
|
-
self.raw_data.meta_inputs.meta_hash.inject({}) do |s, v|
|
114
|
-
s.update({v[0] => {:label => (v[1].with_indifferent_access[:name] || v[0]).to_s}.merge(v[1])})
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
def context_blk
|
119
|
-
self.raw_data.context_blk
|
120
|
-
end
|
121
|
-
|
122
|
-
def template
|
123
|
-
self.raw_data.template_blk.call
|
124
|
-
end
|
125
|
-
end
|
126
|
-
class Action < Base
|
127
|
-
def detect_blk
|
128
|
-
self.raw_data.detect_blk
|
129
|
-
end
|
130
|
-
end
|
131
|
-
|
132
|
-
class << self
|
133
|
-
def load(path="config/layout.rb")
|
134
|
-
@root = Qor::Extlib::Dsl::Configuration.load(::Qor::Layout::Configuration::Root, path)
|
135
|
-
end
|
136
|
-
|
137
|
-
def root
|
138
|
-
@root ||= load
|
139
|
-
end
|
140
25
|
|
141
|
-
|
26
|
+
node :action do
|
27
|
+
node :desc
|
28
|
+
node :detect
|
142
29
|
end
|
143
30
|
end
|
144
31
|
end
|
data/qor_layout.gemspec
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: qor_layout
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,8 +9,24 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-09-
|
13
|
-
dependencies:
|
12
|
+
date: 2012-09-17 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: qor_dsl
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
14
30
|
description: Easily to make your own layout
|
15
31
|
email:
|
16
32
|
- wosmvp@gmail.com
|