qor_layout 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|