spiderfw 0.6.24 → 0.6.25
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/VERSION +1 -1
- data/apps/core/components/public/js/spider.js +14 -1
- data/apps/core/forms/widgets/form/form.rb +22 -34
- data/lib/spiderfw/app.rb +10 -0
- data/lib/spiderfw/cmd/commands/app.rb +3 -1
- data/lib/spiderfw/cmd/commands/console.rb +2 -2
- data/lib/spiderfw/controller/controller.rb +1 -1
- data/lib/spiderfw/model/storage/db/connectors/mysql.rb +16 -0
- data/lib/spiderfw/model/storage/db/connectors/mysql2.rb +9 -0
- data/lib/spiderfw/model/storage.rb +7 -3
- data/lib/spiderfw/setup/app_manager.rb +38 -10
- data/lib/spiderfw/setup/spider_setup_wizard.rb +1 -1
- data/lib/spiderfw/templates/layout.rb +12 -8
- data/lib/spiderfw/templates/template.rb +30 -5
- data/lib/spiderfw/templates/template_blocks.rb +2 -2
- data/lib/spiderfw/widget/widget.rb +1 -1
- metadata +156 -244
- data/apps/core/components/public/js/jquery/plugins/jquery.ui.nestedSortable.js +0 -356
- data/blueprints/.DS_Store +0 -0
- data/blueprints/home/.DS_Store +0 -0
- data/blueprints/install/.DS_Store +0 -0
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.6.
|
1
|
+
0.6.25
|
@@ -689,6 +689,19 @@ jQuery.parseISODate = function(iso){
|
|
689
689
|
else return null;
|
690
690
|
};
|
691
691
|
|
692
|
+
// Same as toISOString, but without time, and ignoring timezone
|
693
|
+
Date.prototype.toISODate = (function(){
|
694
|
+
function t(i){return i<10?"0"+i:i;};
|
695
|
+
return function(){
|
696
|
+
return "".concat(
|
697
|
+
this.getFullYear(), "-",
|
698
|
+
t(this.getMonth() + 1), "-",
|
699
|
+
t(this.getDate())
|
700
|
+
);
|
701
|
+
};
|
702
|
+
})();
|
703
|
+
|
704
|
+
|
692
705
|
if (!Date.prototype.toISOString){
|
693
706
|
Date.prototype.toISOString = (function(){
|
694
707
|
function t(i){return i<10?"0"+i:i;};
|
@@ -785,4 +798,4 @@ function basename(path){
|
|
785
798
|
|
786
799
|
function dirname(path){
|
787
800
|
return path.replace(/\\/g, '/').replace(/\/[^\/]*$/, '');
|
788
|
-
}
|
801
|
+
}
|
@@ -148,42 +148,30 @@ module Spider; module Forms
|
|
148
148
|
|
149
149
|
def load_widgets(template=@template)
|
150
150
|
super
|
151
|
-
if @action == :sub
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
@sub_element.integrated_from.model.primary_keys.each do |key|
|
163
|
-
cond[@sub_element.reverse.to_s+'.'+key.name.to_s] = @obj.get("#{@sub_element.integrated_from.name}.#{key.name}")
|
164
|
-
end
|
165
|
-
else
|
166
|
-
@model.primary_keys.each do |key|
|
167
|
-
cond[@sub_element.reverse.to_s+'.'+key.name.to_s] = @obj.get(key)
|
168
|
-
end
|
151
|
+
if (@action == :sub)
|
152
|
+
@crud = Spider::Components::Crud.new(@request, @response)
|
153
|
+
@crud.id = "crud_#{@sub_element.name.to_s}"
|
154
|
+
@crud.model = @sub_element.model
|
155
|
+
add_widget(@crud)
|
156
|
+
@scene.crud = @crud
|
157
|
+
@obj = load
|
158
|
+
cond = {}
|
159
|
+
if @sub_element.integrated?
|
160
|
+
@sub_element.integrated_from.model.primary_keys.each do |key|
|
161
|
+
cond[@sub_element.reverse.to_s+'.'+key.name.to_s] = @obj.get("#{@sub_element.integrated_from.name}.#{key.name}")
|
169
162
|
end
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
@sub_element.model.elements_array.each do |el|
|
174
|
-
sub_elements << el.name unless el.integrated? || el.model == @model
|
163
|
+
else
|
164
|
+
@model.primary_keys.each do |key|
|
165
|
+
cond[@sub_element.reverse.to_s+'.'+key.name.to_s] = @obj.get(key)
|
175
166
|
end
|
176
|
-
@crud.attributes[:table_elements] = sub_elements
|
177
|
-
# else
|
178
|
-
# @crud = Spider::Forms::Form.new(@request, @response)
|
179
|
-
# @form.id = "crud_#{@sub_element.name.to_s}"
|
180
|
-
# @form.model = @sub_element.model
|
181
|
-
# add_widget(@crud)
|
182
|
-
# @scene.crud = @crud
|
183
|
-
# @obj.load
|
184
|
-
# debugger
|
185
|
-
# @form.pk = @obj.get(@sub_element).id
|
186
167
|
end
|
168
|
+
@crud.fixed = cond
|
169
|
+
sub_elements = []
|
170
|
+
#sub_elements += @sub_element.model.primary_keys.map{ |k| k.name }
|
171
|
+
@sub_element.model.elements_array.each do |el|
|
172
|
+
sub_elements << el.name unless el.integrated? || el.model == @model
|
173
|
+
end
|
174
|
+
@crud.attributes[:table_elements] = sub_elements
|
187
175
|
else
|
188
176
|
create_inputs
|
189
177
|
end
|
@@ -263,7 +251,7 @@ module Spider; module Forms
|
|
263
251
|
if ([:choice, :multiple_choice, :state, :multiple_state].include?(el.association) && !el.extended?)
|
264
252
|
widget_type = el.type.attributes[:estimated_size] && el.type.attributes[:estimated_size] > 30 ?
|
265
253
|
SearchSelect : Select
|
266
|
-
elsif @attributes[:show_related] && @pk
|
254
|
+
elsif @attributes[:show_related] && @pk && el.multiple?
|
267
255
|
@sub_links[el.name] = sub_link(el)
|
268
256
|
end
|
269
257
|
end
|
data/lib/spiderfw/app.rb
CHANGED
@@ -516,6 +516,11 @@ END_OF_EVAL
|
|
516
516
|
def self.parse_hash(h)
|
517
517
|
spec = self.new
|
518
518
|
h.each do |key, value|
|
519
|
+
unless spec.respond_to?(:"#{key}")
|
520
|
+
Spider.output("Bad spec key #{key} in:", :ERROR)
|
521
|
+
Spider.output(h.inspect, :ERROR)
|
522
|
+
next
|
523
|
+
end
|
519
524
|
if value.is_a?(Array)
|
520
525
|
spec.send(:"#{key}", *value)
|
521
526
|
else
|
@@ -544,6 +549,11 @@ END_OF_EVAL
|
|
544
549
|
self.gems_optional.map{ |g| g.is_a?(Array) ? g.first : g }
|
545
550
|
end
|
546
551
|
|
552
|
+
def branch(val=nil)
|
553
|
+
@branch = val if val
|
554
|
+
@branch
|
555
|
+
end
|
556
|
+
|
547
557
|
end
|
548
558
|
|
549
559
|
# Helper class to sort the runtime dependencies of an app using TSort.
|
@@ -109,6 +109,7 @@ module Spider::CommandLine
|
|
109
109
|
install.short_desc = _("Install an app")
|
110
110
|
install.options = CmdParse::OptionParserWrapper.new do |opt|
|
111
111
|
opt.on("--[no-]git", _("Use git for installing apps"), "-g"){ |r| @git = r }
|
112
|
+
opt.on("--rw", _("Use read-write git repository"), "-w"){ |rw| @rw = true }
|
112
113
|
opt.on("--no-dependencies", _("Don't install other apps this one depends on"), "-d"){ |d|
|
113
114
|
@no_deps = true
|
114
115
|
}
|
@@ -130,7 +131,8 @@ module Spider::CommandLine
|
|
130
131
|
require 'spiderfw/setup/app_manager'
|
131
132
|
options = {
|
132
133
|
:use_git => @git, :all => @all, :no_deps => @no_deps, :optional => @optional,
|
133
|
-
:no_gems => @no_gems, :no_optional_gems => @no_optional_gems, :no_activate => @no_activate
|
134
|
+
:no_gems => @no_gems, :no_optional_gems => @no_optional_gems, :no_activate => @no_activate,
|
135
|
+
:rw => @rw
|
134
136
|
}
|
135
137
|
options[:url] = @server_url if @server_url
|
136
138
|
options[:branch] = @branch if @branch
|
@@ -37,7 +37,7 @@ module Spider::CommandLine
|
|
37
37
|
if @opts[:irb]
|
38
38
|
ENV['SPIDER_RUNMODE'] = $SPIDER_RUNMODE if ($SPIDER_RUNMODE)
|
39
39
|
ENV['SPIDER_CONFIG_SETS'] = $SPIDER_CONFIG_SETS.join(',') if ($SPIDER_CONFIG_SETS)
|
40
|
-
exec("#{@opts[:irb]} -I #{$SPIDER_LIB} -r spiderfw")
|
40
|
+
exec("#{@opts[:irb]} -I #{$SPIDER_LIB} -r spiderfw/init")
|
41
41
|
elsif @opts[:ripl]
|
42
42
|
require 'ripl/irb'
|
43
43
|
require 'ripl/multi_line'
|
@@ -68,4 +68,4 @@ module Spider::CommandLine
|
|
68
68
|
|
69
69
|
end
|
70
70
|
|
71
|
-
end
|
71
|
+
end
|
@@ -121,7 +121,7 @@ module Spider
|
|
121
121
|
def url(action=nil)
|
122
122
|
u = @default_route || ''
|
123
123
|
u += "/#{action}" if action
|
124
|
-
if @default_dispatcher
|
124
|
+
if @default_dispatcher && @default_dispatcher != self
|
125
125
|
u = @default_dispatcher.url + '/' + u
|
126
126
|
elsif self.app
|
127
127
|
u = self.app.url + '/' + u
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'mysql'
|
2
|
+
|
3
|
+
module Spider; module Model; module Storage; module Db; module Connectors
|
4
|
+
|
5
|
+
module Mysql
|
6
|
+
|
7
|
+
def self.new_connection(host=nil, user=nil, passwd=nil, db=nil, port=nil, sock=nil, flag=nil)
|
8
|
+
conn = ::Mysql2::Client.new(
|
9
|
+
:host => host, :username => user, :password => passwd, :database => db, :port => port, :socket => sock
|
10
|
+
)
|
11
|
+
return conn
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
|
16
|
+
end; end; end; end; end
|
@@ -17,9 +17,13 @@ module Spider; module Model
|
|
17
17
|
Thread.current[:storages][type] ||= {}
|
18
18
|
return Thread.current[:storages][type][url] if Thread.current[:storages][type][url]
|
19
19
|
klass = nil
|
20
|
-
|
21
|
-
|
22
|
-
|
20
|
+
begin
|
21
|
+
matches = url.match(/^(.+?):\/\/(.+)/)
|
22
|
+
adapter = matches[1]
|
23
|
+
rest = matches[2]
|
24
|
+
rescue => exc
|
25
|
+
Spider.output _("The connection string %s is not correct") % url, :error
|
26
|
+
end
|
23
27
|
if adapter =~ /(.+):(.+)/
|
24
28
|
connector = $1
|
25
29
|
adapter = $2
|
@@ -125,7 +125,7 @@ module Spider
|
|
125
125
|
use_git = false
|
126
126
|
if spec.git_repo && !options[:no_git]
|
127
127
|
app_path = File.join(@home_path, "apps/#{spec.app_id}")
|
128
|
-
use_git = true if File.
|
128
|
+
use_git = true if File.exists?(File.join(app_path, '.git'))
|
129
129
|
end
|
130
130
|
if use_git && !self.class.git_available?
|
131
131
|
Spider.output _("Can't update app #{spec.id} via git, since git gem is not available") % spec.app_id, :ERROR
|
@@ -267,7 +267,7 @@ module Spider
|
|
267
267
|
if ::File.directory?(File.join(@home_path, '.git'))
|
268
268
|
repo = Git.open(@home_path)
|
269
269
|
end
|
270
|
-
repo_url = spec.git_repo_rw
|
270
|
+
repo_url = options[:rw] ? spec.git_repo_rw : spec.git_repo
|
271
271
|
Spider.output _("Fetching %s from %s") % [spec.app_id, repo_url]
|
272
272
|
|
273
273
|
if options[:ssh_user] && repo_url =~ /ssh:\/\/([^@]+@)?(.+)/
|
@@ -281,21 +281,33 @@ module Spider
|
|
281
281
|
`git submodule init`
|
282
282
|
`git submodule update`
|
283
283
|
repo.add(['.gitmodules', "apps/#{spec.id}"])
|
284
|
-
|
284
|
+
begin
|
285
|
+
repo.commit(_("Added app %s") % spec.id)
|
286
|
+
rescue Git::GitExecuteError => exc
|
287
|
+
# If no changes added, it means the app was deleted and then reinstalled,
|
288
|
+
# no need to raise an exception
|
289
|
+
raise unless exc.message =~ /no changes added/
|
290
|
+
end
|
285
291
|
end
|
286
292
|
else
|
287
293
|
Dir.chdir(File.join(@home_path, 'apps')) do
|
288
294
|
Git.clone(repo_url, spec.id)
|
289
295
|
end
|
290
296
|
end
|
297
|
+
app_path = File.join(@home_path, "apps", spec.id)
|
298
|
+
if spec.branch != 'master'
|
299
|
+
reset_git_env
|
300
|
+
Dir.chdir(app_path) do
|
301
|
+
`git checkout #{spec.branch}`
|
302
|
+
end
|
303
|
+
end
|
291
304
|
end
|
292
305
|
|
293
306
|
def pack_install(spec, options={})
|
294
307
|
require 'rubygems/package'
|
295
308
|
client = AppServerClient.new(spec.app_server)
|
296
309
|
print _("Fetching %s from server... ") % spec.app_id
|
297
|
-
|
298
|
-
tmp_path = client.fetch_app(spec.app_id, options[:branch])
|
310
|
+
tmp_path = client.fetch_app(spec.app_id, spec.branch)
|
299
311
|
Spider.output _("Fetched.")
|
300
312
|
dest = File.join(@home_path, "apps/#{spec.app_id}")
|
301
313
|
FileUtils.mkdir_p(dest)
|
@@ -336,9 +348,14 @@ module Spider
|
|
336
348
|
app_path = File.join(@home_path, "apps", spec.id)
|
337
349
|
app_repo = Git.open(app_path)
|
338
350
|
Spider.output _("Updating %s from %s") % [spec.app_id, spec.git_repo]
|
339
|
-
options[:branch] ||= 'master'
|
340
351
|
Dir.chdir(app_path) do
|
341
|
-
|
352
|
+
response = `git status`
|
353
|
+
unless response =~ /working directory clean/
|
354
|
+
Spider.output(_("You have local modifications in the #{spec.id} app"), :ERROR)
|
355
|
+
Spider.output(_("Commit them or reset repo to update"), :ERROR)
|
356
|
+
exit
|
357
|
+
end
|
358
|
+
`git checkout master`
|
342
359
|
end
|
343
360
|
response = err = nil
|
344
361
|
Dir.chdir(app_path) do
|
@@ -348,9 +365,10 @@ module Spider
|
|
348
365
|
Spider.output err, :ERROR
|
349
366
|
raise "Unable to update"
|
350
367
|
end
|
351
|
-
|
352
|
-
|
353
|
-
|
368
|
+
if spec.branch != 'master'
|
369
|
+
Dir.chdir(app_path) do
|
370
|
+
`git checkout #{spec.branch}`
|
371
|
+
end
|
354
372
|
end
|
355
373
|
# response = err = nil
|
356
374
|
# Dir.chdir(app_path) do
|
@@ -476,6 +494,16 @@ module Spider
|
|
476
494
|
end
|
477
495
|
|
478
496
|
|
497
|
+
private
|
498
|
+
|
499
|
+
def reset_git_env
|
500
|
+
ENV['GIT_WORK_TREE'] = nil
|
501
|
+
ENV["GIT_INDEX_FILE"] = nil
|
502
|
+
ENV["GIT_WORK_TREE"] = nil
|
503
|
+
ENV["GIT_DIR"] = nil
|
504
|
+
end
|
505
|
+
|
506
|
+
|
479
507
|
end
|
480
508
|
|
481
509
|
end
|
@@ -197,7 +197,7 @@ module Spider
|
|
197
197
|
end
|
198
198
|
ask _("Database type: "), :db_type, :choices => ['sqlite', 'mysql', 'oracle'], \
|
199
199
|
:default => url_db_type
|
200
|
-
|
200
|
+
return unless @db_type
|
201
201
|
unless @db_type == 'sqlite'
|
202
202
|
db = wizard_instance(get_db_wizard(@db_type))
|
203
203
|
db.parse_url(conf["url"]) if conf && conf["url"] && @db_type == url_db_type
|
@@ -33,7 +33,7 @@ module Spider
|
|
33
33
|
assets = {:css => [], :js => []}
|
34
34
|
compress_assets = {:js => {}, :css => {}}
|
35
35
|
seen = {}
|
36
|
-
|
36
|
+
js_translations = {}
|
37
37
|
use_cdn = Spider.conf.get('assets.use_cdn')
|
38
38
|
cname = File.basename(@path, '.layout.shtml')
|
39
39
|
cname = File.basename(cname, '.shtml')
|
@@ -49,7 +49,7 @@ module Spider
|
|
49
49
|
|
50
50
|
ass = compile_asset(ass)
|
51
51
|
|
52
|
-
res = prepare_asset(ass, compress_assets,
|
52
|
+
res = prepare_asset(ass, compress_assets, js_translations)
|
53
53
|
assets[:css] += res[:css]
|
54
54
|
assets[:js] += res[:js]
|
55
55
|
|
@@ -87,18 +87,16 @@ module Spider
|
|
87
87
|
@content[:yield_to] = @template
|
88
88
|
@scene.assets = @template_assets
|
89
89
|
@scene.extend(LayoutScene)
|
90
|
-
if
|
90
|
+
if js_translations.empty?
|
91
91
|
@scene.js_translations = ""
|
92
92
|
else
|
93
|
-
translations = {}
|
94
|
-
js_messages.each{ |msg| translations[msg] = _(msg) }
|
95
|
-
@scene.js_translations = "var translations = #{translations.to_json}"
|
93
|
+
@scene.js_translations = "var translations = #{js_translations.to_json}"
|
96
94
|
end
|
97
95
|
|
98
96
|
@assets_prepared = true
|
99
97
|
end
|
100
98
|
|
101
|
-
def prepare_asset(ass, compress_assets={},
|
99
|
+
def prepare_asset(ass, compress_assets={}, js_translations={})
|
102
100
|
type = ass[:type].to_sym
|
103
101
|
assets = {:css => [], :js => []}
|
104
102
|
pub_dest = nil
|
@@ -168,7 +166,13 @@ module Spider
|
|
168
166
|
if ass[:gettext] && type == :js
|
169
167
|
msg_path = asset_gettext_messages_file(ass[:path])
|
170
168
|
if File.exists?(msg_path)
|
171
|
-
js_messages
|
169
|
+
js_messages = JSON.parse(File.read(msg_path))
|
170
|
+
Spider::GetText.in_domain(ass[:app].short_name) do
|
171
|
+
js_messages.each{ |msg|
|
172
|
+
next if js_translations.key?(msg)
|
173
|
+
js_translations[msg] = _(msg)
|
174
|
+
}
|
175
|
+
end
|
172
176
|
else
|
173
177
|
Spider.logger.warn("Javascript Gettext file #{msg_path} not found")
|
174
178
|
end
|
@@ -29,6 +29,7 @@ module Spider
|
|
29
29
|
attr_accessor :runtime_overrides
|
30
30
|
attr_reader :overrides, :path, :subtemplates, :widgets, :content
|
31
31
|
attr_accessor :asset_profiles
|
32
|
+
attr_accessor :subtemplate_of
|
32
33
|
|
33
34
|
@@registered = {}
|
34
35
|
@@widget_plugins = {}
|
@@ -258,7 +259,12 @@ module Spider
|
|
258
259
|
end
|
259
260
|
end
|
260
261
|
@compiled = self.class.cache.fetch(cache_path) do
|
261
|
-
|
262
|
+
begin
|
263
|
+
compile(:mode => @mode)
|
264
|
+
rescue Exception
|
265
|
+
Spider.logger.error("Failed compilation of template #{@path}:")
|
266
|
+
raise
|
267
|
+
end
|
262
268
|
end
|
263
269
|
end
|
264
270
|
|
@@ -268,7 +274,7 @@ module Spider
|
|
268
274
|
compiled.source_path = @path
|
269
275
|
doc = open(@path){ |f| Hpricot.XML(f) }
|
270
276
|
root = get_el(doc)
|
271
|
-
|
277
|
+
process_tags(root)
|
272
278
|
apply_overrides(root)
|
273
279
|
root.search('tpl:placeholder').remove # remove empty placeholders
|
274
280
|
owner_class = @owner ? @owner.class : @owner_class
|
@@ -288,7 +294,6 @@ module Spider
|
|
288
294
|
root.search('.to_delete').remove
|
289
295
|
root.search('tpl:assets').each do |ass|
|
290
296
|
if wattr = ass.get_attribute('widgets')
|
291
|
-
widgets = []
|
292
297
|
wattr.split(/,\s*/).each do |w|
|
293
298
|
w_templates = nil
|
294
299
|
if w =~ /(\.+)\((.+)\)/
|
@@ -332,6 +337,7 @@ module Spider
|
|
332
337
|
compiled.block = root_block.compile(options)
|
333
338
|
subtemplates.each do |id, sub|
|
334
339
|
sub.owner_class = @subtemplate_owners[id]
|
340
|
+
sub.subtemplate_of = options[:owner_class]
|
335
341
|
compiled.subtemplates[id] = sub.compile(options.merge({:mode => :widget})) # FIXME! :mode => :widget is wrong, it's just a quick kludge
|
336
342
|
@assets += compiled.subtemplates[id].assets
|
337
343
|
end
|
@@ -510,6 +516,7 @@ module Spider
|
|
510
516
|
ext_owner = @owner.class
|
511
517
|
ext_app = ext_owner.app
|
512
518
|
end
|
519
|
+
@extended_app = ext_app
|
513
520
|
ext_search_paths = nil
|
514
521
|
if ext_owner && ext_owner.respond_to?(:template_paths)
|
515
522
|
ext_search_paths = ext_owner.template_paths
|
@@ -522,7 +529,6 @@ module Spider
|
|
522
529
|
assets += root.children_of_type('tpl:assets')
|
523
530
|
end
|
524
531
|
@dependencies << ext
|
525
|
-
tpl = Template.new(ext)
|
526
532
|
root = get_el(ext)
|
527
533
|
if ext_app.short_name != our_domain
|
528
534
|
root.set_attribute('tpl:text-domain', ext_app.short_name)
|
@@ -827,6 +833,18 @@ module Spider
|
|
827
833
|
if override.name == 'tpl:delete'
|
828
834
|
found.remove
|
829
835
|
else
|
836
|
+
td = nil
|
837
|
+
orig_td = nil
|
838
|
+
if @extended_app
|
839
|
+
td = @definer_class.respond_to?(:app) ? @definer_class.app.short_name : nil
|
840
|
+
orig_td = @extended_app.short_name
|
841
|
+
elsif @subtemplate_of
|
842
|
+
td = @subtemplate_of.respond_to?(:app) ? @subtemplate_of.app.short_name : nil
|
843
|
+
orig_td = @definer_class.respond_to?(:app) ? @definer_class.app.short_name : nil
|
844
|
+
end
|
845
|
+
if td && orig_td && td != orig_td
|
846
|
+
override.innerHTML = '<tpl:pass tpl:text-domain="'+td+'">'+override.innerHTML+'</tpl:pass>'
|
847
|
+
end
|
830
848
|
found.each do |f|
|
831
849
|
o_doc = nil
|
832
850
|
if override.name == 'tpl:override-content'
|
@@ -837,10 +855,16 @@ module Spider
|
|
837
855
|
if o_search = o.get_attribute('search')
|
838
856
|
o_doc ||= Hpricot("<o>#{overridden}</o>")
|
839
857
|
ovr = o_doc.root.search(o_search).to_html
|
840
|
-
end
|
858
|
+
end
|
859
|
+
if orig_td
|
860
|
+
ovr = '<tpl:pass tpl:text-domain="'+orig_td+'">'+ovr+'</tpl:pass>'
|
861
|
+
end
|
841
862
|
o.swap(ovr)
|
842
863
|
end
|
843
864
|
elsif override.name == 'tpl:override' || override.name == 'tpl:content'
|
865
|
+
if orig_td
|
866
|
+
f.set_attribute('tpl:text-domain', orig_td)
|
867
|
+
end
|
844
868
|
overridden = f.to_html
|
845
869
|
parent = f.parent
|
846
870
|
if f == el
|
@@ -872,6 +896,7 @@ module Spider
|
|
872
896
|
elsif override.name == 'tpl:after'
|
873
897
|
f.after(override.innerHTML)
|
874
898
|
end
|
899
|
+
|
875
900
|
end
|
876
901
|
end
|
877
902
|
end
|
@@ -37,6 +37,8 @@ module Spider
|
|
37
37
|
block = :Run
|
38
38
|
elsif el.name == 'sp:yield'
|
39
39
|
block = :Yield
|
40
|
+
elsif !skip_attributes && el.has_attribute?('tpl:text-domain')
|
41
|
+
block = :TextDomain
|
40
42
|
elsif el.name == 'sp:pass' || el.name == 'tpl:pass' || el.name == 'sp:template'
|
41
43
|
block = :Pass
|
42
44
|
elsif el.name == 'sp:debugger'
|
@@ -45,8 +47,6 @@ module Spider
|
|
45
47
|
block = :ParentContext
|
46
48
|
elsif el.name == 'sp:recurse'
|
47
49
|
block = :Recurse
|
48
|
-
elsif !skip_attributes && el.has_attribute?('tpl:text-domain')
|
49
|
-
block = :TextDomain
|
50
50
|
elsif Spider::Template.registered?(el.name)
|
51
51
|
klass = Spider::Template.get_registered_class(el.name)
|
52
52
|
if klass < ::Spider::Widget
|