handlebarsjs 0.7.0 → 0.8.0
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/lib/_.rb +1 -0
- data/lib/handlebarsjs/base_helper.rb +30 -4
- data/lib/handlebarsjs/handlebars.rb +18 -0
- data/lib/handlebarsjs/handlebars_configuration.rb +1 -2
- data/lib/handlebarsjs/handlebars_configuration_defaults.rb +8 -1
- data/lib/handlebarsjs/handlebars_snapshot.rb +67 -13
- data/lib/handlebarsjs/helpers/misc/safe.rb +17 -0
- data/lib/handlebarsjs/javascript/handlebars-4.7.7.js +17 -0
- data/lib/handlebarsjs/javascript/handlebars-helpers.js +10 -1
- data/lib/handlebarsjs/version.rb +1 -1
- data/package-lock.json +2 -2
- data/package.json +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d738c40219cfaa348afd07afcb59bc572ea7ee40d2cb35f5b28f7b9273e05e01
|
4
|
+
data.tar.gz: 65f1494627bc268671e240d1d133a73dd79ccbdfdbbb3f0eb38baa19831cff47
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0a720a3372be65f40f4e43450c480b416679366011eda8e3d6fc9dc479ddbbcc05d11a3f408fed14d9da7c615cea72d890afffc9c142a2e31f18c8ab5e606d30
|
7
|
+
data.tar.gz: 46c659bce100021e60775a1b1b25faeb399cdc6caf8747dee1778eef395be16aa20f2bd0c5a3f1ee45a86044b320ba919117ae52f13ccd85a9fa325542e82acf
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
# [0.7.0](https://github.com/klueless-io/handlebarsjs/compare/v0.6.3...v0.7.0) (2022-07-15)
|
2
|
+
|
3
|
+
|
4
|
+
### Features
|
5
|
+
|
6
|
+
* add alias support ([ae81c61](https://github.com/klueless-io/handlebarsjs/commit/ae81c61d569dd44e9ae50832f69a0f29d30e9523))
|
7
|
+
|
1
8
|
## [0.6.3](https://github.com/klueless-io/handlebarsjs/compare/v0.6.2...v0.6.3) (2022-07-14)
|
2
9
|
|
3
10
|
|
data/lib/_.rb
CHANGED
@@ -31,3 +31,4 @@ require_relative 'handlebarsjs/helpers/inflection/pluralize'
|
|
31
31
|
require_relative 'handlebarsjs/helpers/inflection/pluralize_number'
|
32
32
|
require_relative 'handlebarsjs/helpers/inflection/pluralize_number_word'
|
33
33
|
require_relative 'handlebarsjs/helpers/inflection/singularize'
|
34
|
+
require_relative 'handlebarsjs/helpers/misc/safe'
|
@@ -4,20 +4,27 @@ module Handlebarsjs
|
|
4
4
|
# Extend base helper for each of your custom handlebars-helpers
|
5
5
|
class BaseHelper
|
6
6
|
attr_reader :cmdlet
|
7
|
+
attr_reader :safe
|
8
|
+
attr_reader :parameter_names
|
7
9
|
|
8
10
|
# Preferred way to register the internal command is via register_cmdlet
|
9
11
|
# but you can also register the command directly in the initializer and
|
10
12
|
# that can be handy if you use a custom configured cmdlet
|
11
|
-
def initialize(cmdlet = nil)
|
12
|
-
|
13
|
-
|
13
|
+
def initialize(cmdlet = nil, safe: nil, parameter_names: nil)
|
14
|
+
initialize_cmdlet(cmdlet)
|
15
|
+
initialize_safe(safe)
|
16
|
+
initialize_parameter_names(parameter_names)
|
14
17
|
end
|
15
18
|
|
16
19
|
class << self
|
17
20
|
attr_reader :cmdlet
|
21
|
+
attr_reader :safe
|
22
|
+
attr_reader :parameter_names
|
18
23
|
|
19
|
-
def register_cmdlet(cmdlet)
|
24
|
+
def register_cmdlet(cmdlet, safe: false, parameter_names: [])
|
20
25
|
@cmdlet = cmdlet
|
26
|
+
@safe = safe
|
27
|
+
@parameter_names = parameter_names
|
21
28
|
end
|
22
29
|
end
|
23
30
|
|
@@ -33,5 +40,24 @@ module Handlebarsjs
|
|
33
40
|
def to_proc
|
34
41
|
->(value, _opts) { wrapper(cmdlet.call(value)) }
|
35
42
|
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def initialize_cmdlet(cmdlet)
|
47
|
+
@cmdlet = cmdlet
|
48
|
+
@cmdlet = self.class.cmdlet.new if @cmdlet.nil? && self.class.cmdlet
|
49
|
+
end
|
50
|
+
|
51
|
+
def initialize_safe(safe)
|
52
|
+
@safe = safe
|
53
|
+
@safe = self.class.safe if @safe.nil? && self.class.safe
|
54
|
+
@safe = false if @safe.nil?
|
55
|
+
end
|
56
|
+
|
57
|
+
def initialize_parameter_names(parameter_names)
|
58
|
+
@parameter_names = parameter_names
|
59
|
+
@parameter_names = self.class.parameter_names if parameter_names.nil? && self.class.parameter_names
|
60
|
+
@parameter_names = [] if @parameter_names.nil?
|
61
|
+
end
|
36
62
|
end
|
37
63
|
end
|
@@ -10,6 +10,24 @@ module Handlebarsjs
|
|
10
10
|
add_configured_helpers
|
11
11
|
end
|
12
12
|
|
13
|
+
class << self
|
14
|
+
def register_helper_script(name)
|
15
|
+
<<-JAVASCRIPT
|
16
|
+
Handlebars.registerHelper('#{name}', ruby_#{name})
|
17
|
+
JAVASCRIPT
|
18
|
+
end
|
19
|
+
|
20
|
+
def register_safe_string_helper_script(name, parameter_names)
|
21
|
+
parameters = (parameter_names + ['_opts']).join(', ')
|
22
|
+
|
23
|
+
<<-JAVASCRIPT
|
24
|
+
Handlebars.registerHelper('#{name}', function (#{parameters}) {
|
25
|
+
return new Handlebars.SafeString(ruby_#{name}(#{parameters}));
|
26
|
+
})
|
27
|
+
JAVASCRIPT
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
13
31
|
def process_template(template, options = {})
|
14
32
|
# TODO: process template function may be improved with some type of caching
|
15
33
|
context.call('process_template', template, options)
|
@@ -1,8 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Handlebarsjs
|
4
|
-
#
|
5
|
-
# Structure for storing Cmdlet configuration
|
4
|
+
# Configuration data such has helpers for handlebarsjs
|
6
5
|
class HandlebarsConfiguration
|
7
6
|
include KLog::Logging
|
8
7
|
|
@@ -8,6 +8,7 @@ module Handlebarsjs
|
|
8
8
|
add_case_defaults
|
9
9
|
add_comparison_defaults
|
10
10
|
add_inflection_defaults
|
11
|
+
add_misc_defaults
|
11
12
|
end
|
12
13
|
|
13
14
|
def add_array_defaults
|
@@ -31,7 +32,7 @@ module Handlebarsjs
|
|
31
32
|
config.handlebars.helper(:lower, Handlebarsjs::Helpers::Case::Lower.new, aliases: %i[lowercase downcase])
|
32
33
|
config.handlebars.helper(:slash, Handlebarsjs::Helpers::Case::Slash.new, aliases: %i[forward_slash slash_forward])
|
33
34
|
config.handlebars.helper(:snake, Handlebarsjs::Helpers::Case::Snake.new)
|
34
|
-
config.handlebars.helper(:title, Handlebarsjs::Helpers::Case::Title.new)
|
35
|
+
config.handlebars.helper(:title, Handlebarsjs::Helpers::Case::Title.new, aliases: %i[titleize])
|
35
36
|
config.handlebars.helper(:upper, Handlebarsjs::Helpers::Case::Upper.new, aliases: %i[upcase uppercase])
|
36
37
|
end
|
37
38
|
end
|
@@ -60,5 +61,11 @@ module Handlebarsjs
|
|
60
61
|
config.handlebars.helper(:singularize, Handlebarsjs::Helpers::Inflection::Singularize.new)
|
61
62
|
end
|
62
63
|
end
|
64
|
+
|
65
|
+
def add_misc_defaults
|
66
|
+
KConfig.configure do |config|
|
67
|
+
config.handlebars.helper(:safe, Handlebarsjs::Helpers::Misc::Safe.new)
|
68
|
+
end
|
69
|
+
end
|
63
70
|
end
|
64
71
|
end
|
@@ -25,10 +25,23 @@ module Handlebarsjs
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def add_helper(name, helper)
|
28
|
-
|
29
|
-
|
28
|
+
add_helper_entry(
|
29
|
+
name: name,
|
30
|
+
helper: helper,
|
31
|
+
callback: helper.to_proc,
|
32
|
+
safe: helper.safe,
|
33
|
+
parameters: helper.parameter_names
|
34
|
+
)
|
35
|
+
end
|
30
36
|
|
31
|
-
|
37
|
+
def add_callback(name, callback, safe, parameters)
|
38
|
+
add_helper_entry(
|
39
|
+
name: name,
|
40
|
+
helper: nil,
|
41
|
+
callback: callback,
|
42
|
+
safe: safe,
|
43
|
+
parameters: parameters
|
44
|
+
)
|
32
45
|
end
|
33
46
|
|
34
47
|
def register_helper(name)
|
@@ -43,18 +56,16 @@ module Handlebarsjs
|
|
43
56
|
@snapshot ||= MiniRacer::Snapshot.new(script)
|
44
57
|
end
|
45
58
|
|
46
|
-
# rubocop:disable Style/DocumentDynamicEvalDefinition
|
47
59
|
def new_context
|
48
60
|
context = MiniRacer::Context.new(snapshot: snapshot)
|
49
61
|
|
50
|
-
helpers.each do |
|
51
|
-
context
|
52
|
-
context
|
62
|
+
helpers.each do |helper_entry|
|
63
|
+
attach_ruby(context, helper_entry)
|
64
|
+
eval_register_helper(context, helper_entry)
|
53
65
|
end
|
54
66
|
|
55
67
|
context
|
56
68
|
end
|
57
|
-
# rubocop:enable Style/DocumentDynamicEvalDefinition
|
58
69
|
|
59
70
|
# not currently used
|
60
71
|
def dirty?
|
@@ -66,6 +77,19 @@ module Handlebarsjs
|
|
66
77
|
log.structure(data)
|
67
78
|
end
|
68
79
|
|
80
|
+
def debug_register_scripts
|
81
|
+
register_scripts = helpers.map do |helper|
|
82
|
+
# Handlebarsjs::Handlebars.register_safe_string_helper_script(
|
83
|
+
# helper[:name]
|
84
|
+
# )
|
85
|
+
# helper[:helper].build_register_helper_script(
|
86
|
+
# helper[:name],
|
87
|
+
# safe: helper[:safe]
|
88
|
+
# )
|
89
|
+
end
|
90
|
+
puts register_scripts.join("\n")
|
91
|
+
end
|
92
|
+
|
69
93
|
private
|
70
94
|
|
71
95
|
def add_script(name, type, script: nil, path: nil)
|
@@ -76,12 +100,18 @@ module Handlebarsjs
|
|
76
100
|
add_script_item(name, type, script, path)
|
77
101
|
end
|
78
102
|
|
79
|
-
def add_helper_entry(
|
80
|
-
|
81
|
-
name: name,
|
82
|
-
helper: helper,
|
83
|
-
callback: callback
|
103
|
+
def add_helper_entry(**args)
|
104
|
+
entry = {
|
105
|
+
name: args[:name],
|
106
|
+
helper: args[:helper],
|
107
|
+
callback: args[:callback],
|
108
|
+
safe: args[:safe],
|
109
|
+
parameters: args[:parameters]
|
84
110
|
}
|
111
|
+
|
112
|
+
@helpers << entry
|
113
|
+
|
114
|
+
entry
|
85
115
|
end
|
86
116
|
|
87
117
|
def add_script_item(name, type, script, path = nil)
|
@@ -93,5 +123,29 @@ module Handlebarsjs
|
|
93
123
|
path: path
|
94
124
|
}
|
95
125
|
end
|
126
|
+
|
127
|
+
# This context should be on handlebars, not snapshot (I THINK)
|
128
|
+
def attach_ruby(context, helper_entry)
|
129
|
+
name = helper_entry[:name]
|
130
|
+
callback = helper_entry[:callback]
|
131
|
+
|
132
|
+
context.attach("ruby_#{name}", callback)
|
133
|
+
end
|
134
|
+
|
135
|
+
def eval_register_helper(context, helper_entry)
|
136
|
+
script = if helper_entry[:safe]
|
137
|
+
Handlebarsjs::Handlebars.register_safe_string_helper_script(helper_entry[:name], helper_entry[:parameters])
|
138
|
+
else
|
139
|
+
Handlebarsjs::Handlebars.register_helper_script(helper_entry[:name])
|
140
|
+
end
|
141
|
+
|
142
|
+
context.eval(script)
|
143
|
+
end
|
144
|
+
|
145
|
+
def build_register_helper_script(helper_entry)
|
146
|
+
return Handlebarsjs::Handlebars.register_safe_string_helper_script(helper_entry[:name], helper_entry[:parameters]) if helper_entry[:safe]
|
147
|
+
|
148
|
+
Handlebarsjs::Handlebars.register_helper_script(helper_entry[:name])
|
149
|
+
end
|
96
150
|
end
|
97
151
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Handlebarsjs
|
4
|
+
module Helpers
|
5
|
+
# Miscellaneous cmdlets
|
6
|
+
module Misc
|
7
|
+
# Safe: pass through the value with <> and single and double quotes left as is
|
8
|
+
class Safe < Handlebarsjs::BaseHelper
|
9
|
+
register_cmdlet(Cmdlet::Misc::Safe, safe: true, parameter_names: [:value])
|
10
|
+
|
11
|
+
def to_proc
|
12
|
+
->(value, _opts) { wrapper(cmdlet.call(value)) }
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -314,6 +314,23 @@ return /******/ (function(modules) { // webpackBootstrap
|
|
314
314
|
logger: _logger2['default'],
|
315
315
|
log: _logger2['default'].log,
|
316
316
|
|
317
|
+
|
318
|
+
// Handlebars.registerHelper('encodeMyString',function(inputData){
|
319
|
+
// return new Handlebars.SafeString(inputData);
|
320
|
+
// });
|
321
|
+
// safeStringHelper: safeStringHelper(name, fn)
|
322
|
+
|
323
|
+
// How do I write a callback function to wrap a callback function in javascript
|
324
|
+
// registerSafeHelper: function registerSafeHelper(name, fn) {
|
325
|
+
// new_function: function(fn) {
|
326
|
+
// return function(context, options) {
|
327
|
+
// return new Handlebars.SafeString(fn(context, options)); "<hello />"
|
328
|
+
// };
|
329
|
+
// }
|
330
|
+
// registerHelper(name, new_function)
|
331
|
+
// },
|
332
|
+
|
333
|
+
|
317
334
|
registerHelper: function registerHelper(name, fn) {
|
318
335
|
if (_utils.toString.call(name) === objectType) {
|
319
336
|
if (fn) {
|
@@ -1,3 +1,12 @@
|
|
1
1
|
Handlebars.registerHelper('loud', function (input) {
|
2
2
|
return input.toUpperCase()
|
3
|
-
})
|
3
|
+
})
|
4
|
+
|
5
|
+
Handlebars.registerHelper('allow_html', function (some_html) {
|
6
|
+
return new Handlebars.SafeString(some_html);
|
7
|
+
})
|
8
|
+
|
9
|
+
// Handlebars.registerHelper('i_am_safe_xxx', function (some_html) {
|
10
|
+
// some_html = "doe some thing"
|
11
|
+
// return new Handlebars.SafeString(some_html);
|
12
|
+
// })
|
data/lib/handlebarsjs/version.rb
CHANGED
data/package-lock.json
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
{
|
2
2
|
"name": "handlebarsjs",
|
3
|
-
"version": "0.
|
3
|
+
"version": "0.8.0",
|
4
4
|
"lockfileVersion": 2,
|
5
5
|
"requires": true,
|
6
6
|
"packages": {
|
7
7
|
"": {
|
8
8
|
"name": "handlebarsjs",
|
9
|
-
"version": "0.
|
9
|
+
"version": "0.8.0",
|
10
10
|
"devDependencies": {
|
11
11
|
"@klueless-js/semantic-release-rubygem": "github:klueless-js/semantic-release-rubygem",
|
12
12
|
"@semantic-release/changelog": "^6.0.1",
|
data/package.json
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: handlebarsjs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Cruwys
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-07-
|
11
|
+
date: 2022-07-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cmdlet
|
@@ -128,6 +128,7 @@ files:
|
|
128
128
|
- lib/handlebarsjs/helpers/inflection/pluralize_number.rb
|
129
129
|
- lib/handlebarsjs/helpers/inflection/pluralize_number_word.rb
|
130
130
|
- lib/handlebarsjs/helpers/inflection/singularize.rb
|
131
|
+
- lib/handlebarsjs/helpers/misc/safe.rb
|
131
132
|
- lib/handlebarsjs/javascript.rb
|
132
133
|
- lib/handlebarsjs/javascript/handlebars-4.7.7.js
|
133
134
|
- lib/handlebarsjs/javascript/handlebars-api.js
|