poke_js 0.1.6 → 0.1.7
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/assets/javascripts/poke_js.js +37 -31
- data/app/views/layouts/application.js.erb +3 -4
- data/lib/poke_js.rb +1 -0
- data/lib/poke_js/controller.rb +38 -0
- data/lib/poke_js/version.rb +1 -1
- data/lib/poke_js/view_helpers.rb +57 -32
- metadata +3 -2
@@ -18,42 +18,47 @@ POKE = {
|
|
18
18
|
return $.extend(found_namespace, definition);
|
19
19
|
},
|
20
20
|
|
21
|
-
|
22
|
-
|
23
|
-
levels.
|
24
|
-
|
25
|
-
var current_namespace = APP;
|
21
|
+
traverse_namespace: function(namespace, levels) {
|
22
|
+
if (!$.isArray(levels)) levels = [levels.controller, levels.format, levels.action];
|
23
|
+
levels = POKE.formatted_levels(levels);
|
26
24
|
|
25
|
+
var current_level = namespace;
|
26
|
+
var level;
|
27
27
|
for (var i=0;i<levels.length;i++) {
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
current_namespace = current_namespace[level];
|
28
|
+
level = levels[i];
|
29
|
+
current_level = current_level[level];
|
30
|
+
if (typeof current_level === "undefined") return undefined;
|
32
31
|
}
|
33
|
-
return
|
32
|
+
return current_level;
|
34
33
|
},
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
34
|
+
formatted_levels: function(levels) {
|
35
|
+
var formatted_levels = [];
|
36
|
+
var level;
|
37
|
+
for (var i=0;i<levels.length;i++) {
|
38
|
+
level = levels[i];
|
39
|
+
formatted_levels = formatted_levels.concat(level.split('/'));
|
40
|
+
}
|
41
|
+
return formatted_levels;
|
41
42
|
},
|
42
|
-
exec: function(controller, format, action) {
|
43
|
-
var action_namespace = POKE.get_action_namespace(controller, format)
|
44
43
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
44
|
+
create_namespace: function(namespace) {
|
45
|
+
var current_level = window;
|
46
|
+
$.each(namespace.split("."), function(index, level) {
|
47
|
+
if (!$.isPlainObject(current_level[level])) current_level[level] = {};
|
48
|
+
current_level = current_level[level];
|
49
|
+
});
|
50
|
+
},
|
49
51
|
|
50
|
-
|
51
|
-
|
52
|
-
|
52
|
+
exec_all: function(params) {
|
53
|
+
POKE.exec("application", params.format, "before", params);
|
54
|
+
POKE.exec(params.controller, params.format, "before", params);
|
55
|
+
POKE.exec(params.controller, params.format, params.action, params);
|
56
|
+
POKE.exec(params.controller, params.format, "after", params);
|
57
|
+
POKE.exec("application", params.format, "after", params);
|
53
58
|
},
|
54
|
-
|
55
|
-
var
|
56
|
-
|
59
|
+
exec: function(controller, format, action, params) {
|
60
|
+
var action_namespace = APP.traverse_namespace([controller, format, action]);
|
61
|
+
if ($.isFunction(action_namespace)) action_namespace(params);
|
57
62
|
}
|
58
63
|
};
|
59
64
|
|
@@ -67,8 +72,9 @@ if (POKE.blank(window["APP"])) {
|
|
67
72
|
},
|
68
73
|
define: function(namespace_string, definition) {
|
69
74
|
return POKE.define(APP.namespace_string(namespace_string), definition);
|
75
|
+
},
|
76
|
+
traverse_namespace: function(levels) {
|
77
|
+
return POKE.traverse_namespace(APP, levels);
|
70
78
|
}
|
71
79
|
};
|
72
|
-
}
|
73
|
-
$(POKE.init);
|
74
|
-
$(document).on('page:change', POKE.init);
|
80
|
+
}
|
@@ -1,6 +1,5 @@
|
|
1
1
|
(function() {
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
POKE.exec_all('<%= poke_js_template[0] %>', 'js', '<%= poke_js_template[1] %>');
|
2
|
+
POKE.create_namespace('<%= poke_js_params %>');
|
3
|
+
<%= poke_js_params %> = <%= define_poke_js_params { yield } %>;
|
4
|
+
POKE.exec_all(<%= poke_js_params %>);
|
6
5
|
})();
|
data/lib/poke_js.rb
CHANGED
@@ -0,0 +1,38 @@
|
|
1
|
+
module PokeJs
|
2
|
+
module Controller
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
included do
|
5
|
+
helper_method :poke_js_template
|
6
|
+
helper_method :extract_template
|
7
|
+
end
|
8
|
+
|
9
|
+
def poke_js_template
|
10
|
+
extract_template(@poke_js_template)
|
11
|
+
end
|
12
|
+
|
13
|
+
protected
|
14
|
+
def extract_template(template)
|
15
|
+
extracted_template = [controller_path, action_name]
|
16
|
+
if template
|
17
|
+
array = if template.class == Array
|
18
|
+
template
|
19
|
+
else
|
20
|
+
split = template.to_s.split('/')
|
21
|
+
template_controller = split[0..-2]
|
22
|
+
unless template_controller.empty?
|
23
|
+
template_controller = [template_controller.join('/')]
|
24
|
+
end
|
25
|
+
template_controller + [split.last]
|
26
|
+
end
|
27
|
+
if array.size == 1
|
28
|
+
extracted_template[1] = array.first
|
29
|
+
else
|
30
|
+
extracted_template = array
|
31
|
+
end
|
32
|
+
end
|
33
|
+
extracted_template
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
::ActionController::Base.send :include, PokeJs::Controller
|
data/lib/poke_js/version.rb
CHANGED
data/lib/poke_js/view_helpers.rb
CHANGED
@@ -9,15 +9,37 @@ module PokeJs
|
|
9
9
|
result
|
10
10
|
end
|
11
11
|
|
12
|
-
def poke_js_template
|
13
|
-
extract_template(@poke_js_template)
|
14
|
-
end
|
15
|
-
|
16
12
|
def with_template(template)
|
17
13
|
old_template = @poke_js_template
|
18
14
|
@poke_js_template = template
|
19
|
-
yield
|
15
|
+
result = yield
|
20
16
|
@poke_js_template = old_template
|
17
|
+
result
|
18
|
+
end
|
19
|
+
|
20
|
+
def poke_js_params(template=@poke_js_template)
|
21
|
+
controller, action = extract_template(template)
|
22
|
+
raw "APP.#{controller.gsub("/", ".")}.#{request.format.symbol}.#{action}_params"
|
23
|
+
end
|
24
|
+
|
25
|
+
def define_poke_js_params(template=@poke_js_template)
|
26
|
+
controller, action = extract_template(template)
|
27
|
+
|
28
|
+
params = { controller: controller, action: action, method: request.method, path: request.env['PATH_INFO'], format: request.format.symbol }
|
29
|
+
if self.respond_to? :add_params
|
30
|
+
params.reverse_merge! add_params
|
31
|
+
end
|
32
|
+
javascript = params.to_json
|
33
|
+
if block_given?
|
34
|
+
if yield
|
35
|
+
javascript = "$.extend(#{yield}, #{javascript});"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
raw javascript
|
39
|
+
end
|
40
|
+
|
41
|
+
def head_poke
|
42
|
+
raw "#{source_poke}\n#{poke}"
|
21
43
|
end
|
22
44
|
|
23
45
|
def poke(template=@poke_js_template, format=formats.first)
|
@@ -25,18 +47,34 @@ module PokeJs
|
|
25
47
|
poke_lambda = -> do
|
26
48
|
if format == :html
|
27
49
|
with_format(:js) do
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
50
|
+
javascript_tag do
|
51
|
+
raw %Q/
|
52
|
+
POKE.create_namespace('#{poke_js_params}');
|
53
|
+
#{poke_js_params} = #{ define_poke_js_params do
|
54
|
+
if lookup_context.template_exists? "#{controller}/#{action}_params"
|
55
|
+
render(template: "#{controller}/#{action}_params")
|
56
|
+
end
|
57
|
+
end };
|
58
|
+
#{
|
59
|
+
if @source_poke
|
60
|
+
%Q/$(function() { POKE.exec_all(#{poke_js_params}); });/
|
61
|
+
else
|
62
|
+
%Q/
|
63
|
+
POKE.define('POKE', {
|
64
|
+
params: #{poke_js_params},
|
65
|
+
init: function() { POKE.exec_all(POKE.params); },
|
66
|
+
});
|
67
|
+
$(POKE.init);
|
68
|
+
/
|
69
|
+
end
|
70
|
+
}
|
71
|
+
/
|
34
72
|
end
|
35
73
|
end
|
36
74
|
elsif format == :js
|
37
75
|
content_for :head do
|
38
76
|
javascript_tag do
|
39
|
-
"$(function(){#{render :
|
77
|
+
raw "$(function(){#{render template: "#{controller}/#{action}", formats: [:js], layout: "layouts/application"}});"
|
40
78
|
end
|
41
79
|
end
|
42
80
|
end
|
@@ -49,27 +87,14 @@ module PokeJs
|
|
49
87
|
end
|
50
88
|
end
|
51
89
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
split = template.to_s.split('/')
|
60
|
-
template_controller = split[0..-2]
|
61
|
-
unless template_controller.empty?
|
62
|
-
template_controller = [template_controller.join('/')]
|
63
|
-
end
|
64
|
-
template_controller + [split.last]
|
65
|
-
end
|
66
|
-
if array.size == 1
|
67
|
-
extracted_template[1] = array.first
|
68
|
-
else
|
69
|
-
extracted_template = array
|
70
|
-
end
|
90
|
+
def source_poke
|
91
|
+
source_template = flash[:source_template]
|
92
|
+
if source_template
|
93
|
+
@source_poke = true
|
94
|
+
result = poke source_template
|
95
|
+
@source_poke = false
|
96
|
+
result
|
71
97
|
end
|
72
|
-
extracted_template
|
73
98
|
end
|
74
99
|
end
|
75
100
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: poke_js
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-03-
|
12
|
+
date: 2013-03-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -59,6 +59,7 @@ files:
|
|
59
59
|
- app/assets/javascripts/poke_js.js
|
60
60
|
- app/views/layouts/application.js.erb
|
61
61
|
- lib/poke_js.rb
|
62
|
+
- lib/poke_js/controller.rb
|
62
63
|
- lib/poke_js/version.rb
|
63
64
|
- lib/poke_js/view_helpers.rb
|
64
65
|
- poke_js.gemspec
|