handlebarsjs 0.12.0 → 0.13.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4809376b984ba78e6b4144fdef39bfc08139b5dd25f8408745acc153b7a16ea3
4
- data.tar.gz: dd1bf3b3439aa212cf5e8d48bd1260fd999cdab23f8c6e7bc5649710aa3e236e
3
+ metadata.gz: f82a12060506efbddff4c69305414c8ad24cbecf14a897eae1805b6ae40a7fa5
4
+ data.tar.gz: 7d4b3aef04fd506d04fdcee4bcdc3256b6835ac92f856a1e9644ec77ff0cf194
5
5
  SHA512:
6
- metadata.gz: d59da9c6173ac1c25b9f2d0a07a57f5accd892ea1d57478e51223f7f78f08ea0b72b24add2471abcfc83921ff56b74e2cc602773c1c9d83a7feb3dc71f27a638
7
- data.tar.gz: 2479a971ab4c7e0d06708fc1cfb729d9bde647fd87a5e25b617f18ea511c518ffc5a1b8edef7f5eae707e358a3a97a099939268f63cedd736cb4985d54390d28
6
+ metadata.gz: ed39a269924ab2d1794104373d6dbe38fd6ced1b77a32bf1982f5e7310f7929713b6005d3940ecbf57ea89db54d1709efca994f629ccf4c01f60c7ff6e2c0e36
7
+ data.tar.gz: 9c05a160e762f831cd667b8c4ac14e930eed9900507f66429ff25b9b6a71f1193fea05aa49bf43c9d9b8ccf8d3ed93ce97e21d01656b70410a96c3ba8c6652e0
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ # [0.12.0](https://github.com/klueless-io/handlebarsjs/compare/v0.11.3...v0.12.0) (2023-07-19)
2
+
3
+
4
+ ### Features
5
+
6
+ * add omit ([cd516d1](https://github.com/klueless-io/handlebarsjs/commit/cd516d11c3f4e304952d6bbbcd31140c82edf11d))
7
+ * reset version ([dff1b8e](https://github.com/klueless-io/handlebarsjs/commit/dff1b8e710a9e433610f5a4326c8b4e9d4a927b9))
8
+
1
9
  ## [0.11.3](https://github.com/klueless-io/handlebarsjs/compare/v0.11.2...v0.11.3) (2023-07-19)
2
10
 
3
11
 
data/lib/_.rb CHANGED
@@ -32,7 +32,6 @@ 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
34
  require_relative 'handlebarsjs/helpers/misc/format_json'
35
- require_relative 'handlebarsjs/helpers/misc/omit'
36
35
  require_relative 'handlebarsjs/helpers/misc/safe'
37
36
  require_relative 'handlebarsjs/helpers/str/padl'
38
37
  require_relative 'handlebarsjs/helpers/str/padr'
@@ -4,6 +4,7 @@ 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 :block
7
8
  attr_reader :safe
8
9
  attr_reader :parameter_names
9
10
 
@@ -13,23 +14,34 @@ module Handlebarsjs
13
14
  def initialize(cmdlet = nil, safe: nil, parameter_names: nil)
14
15
  initialize_cmdlet(cmdlet)
15
16
  initialize_safe(safe)
17
+ initialize_block(block)
16
18
  initialize_parameter_names(parameter_names)
17
19
  end
18
20
 
19
21
  class << self
20
22
  attr_reader :cmdlet
23
+ attr_reader :block
21
24
  attr_reader :safe
22
25
  attr_reader :parameter_names
23
26
 
24
- def register_cmdlet(cmdlet, safe: false, parameter_names: [])
27
+ # Register the cmdlet to be used by the helper
28
+ #
29
+ # By default, it will register an function expression helper
30
+ # You can use HTML by setting safe to true
31
+ #
32
+ # @param cmdlet [Handlebarsjs::Cmdlet::Base] the cmdlet to be used by the helper
33
+ # @param block [Boolean] whether or not this is a wrapped block
34
+ # @param safe [Boolean] whether or not the cmdlet should return HTML
35
+ # @param parameter_names [Array] the parameter names to be used by the cmdlet
36
+ def register_cmdlet(cmdlet, block: false, safe: false, parameter_names: [])
25
37
  @cmdlet = cmdlet
38
+ @block = block
26
39
  @safe = safe
27
40
  @parameter_names = parameter_names
28
41
  end
29
42
  end
30
43
 
31
- # If you need to wrap the return value in a specific
32
- # Handlebars Type, eg. SafeString, then you can override this method
44
+ # If you need to wrap the return value then you can override this method
33
45
  def wrapper(value)
34
46
  value
35
47
  end
@@ -54,6 +66,12 @@ module Handlebarsjs
54
66
  @safe = false if @safe.nil?
55
67
  end
56
68
 
69
+ def initialize_block(block)
70
+ @block = block
71
+ @block = self.class.block if @block.nil? && self.class.block
72
+ @block = false if @block.nil?
73
+ end
74
+
57
75
  def initialize_parameter_names(parameter_names)
58
76
  @parameter_names = parameter_names
59
77
  @parameter_names = self.class.parameter_names if parameter_names.nil? && self.class.parameter_names
@@ -11,13 +11,29 @@ module Handlebarsjs
11
11
  end
12
12
 
13
13
  class << self
14
- def register_helper_script(name)
14
+ def register_helper_script(name, parameter_names = [], safe: false, block: false)
15
+ if safe && block
16
+ block_helper_safe(name, parameter_names)
17
+ elsif safe
18
+ # register_safe_string_helper_script(name, parameter_names)
19
+ function_helper_safe(name, parameter_names)
20
+ elsif block
21
+ block_helper(name, parameter_names)
22
+ else
23
+ function_helper(name)
24
+ end
25
+ end
26
+
27
+ # In handlebars, this is a simple function expression
28
+ def function_helper(name)
29
+ # Not sure why I am not using paramater names, but currently it works for the existing use cases
15
30
  <<-JAVASCRIPT
16
31
  Handlebars.registerHelper('#{name}', ruby_#{name})
17
32
  JAVASCRIPT
18
33
  end
19
34
 
20
- def register_safe_string_helper_script(name, parameter_names)
35
+ # In handlebars, this is also a simple function expression that returns a SafeString when HTML is desired
36
+ def function_helper_safe(name, parameter_names)
21
37
  parameters = (parameter_names + ['_opts']).join(', ')
22
38
 
23
39
  <<-JAVASCRIPT
@@ -26,6 +42,28 @@ module Handlebarsjs
26
42
  })
27
43
  JAVASCRIPT
28
44
  end
45
+
46
+ def block_helper(name, parameter_names)
47
+ parameters = (parameter_names + ['opts']).join(', ')
48
+ ruby_parameters = parameters.length.positive? ? ", #{parameters}" : ''
49
+
50
+ <<-JAVASCRIPT
51
+ Handlebars.registerHelper('#{name}', function (#{parameters}) {
52
+ return ruby_#{name}(opts.fn(this)#{ruby_parameters});
53
+ })
54
+ JAVASCRIPT
55
+ end
56
+
57
+ def block_helper_safe(name, parameter_names)
58
+ parameters = (parameter_names + ['opts']).join(', ')
59
+ ruby_parameters = parameters.length.positive? ? ", #{parameters}" : ''
60
+
61
+ <<-JAVASCRIPT
62
+ Handlebars.registerHelper('#{name}', function (#{parameters}) {
63
+ return new Handlebars.SafeString(ruby_#{name}(opts.fn(this)#{ruby_parameters}));
64
+ })
65
+ JAVASCRIPT
66
+ end
29
67
  end
30
68
 
31
69
  def process_template(template, options = {})
@@ -41,11 +79,15 @@ module Handlebarsjs
41
79
 
42
80
  handlebars_lib_path = File.join(gem_path, Handlebarsjs::HANDLEBARS_LIBRARY_PATH)
43
81
  handlebars_api_path = File.join(gem_path, Handlebarsjs::HANDLEBARS_API_PATH)
82
+ handlebars_helpers_path = File.join(gem_path, Handlebarsjs::HANDLEBARS_HELPERS_PATH)
44
83
 
45
84
  handlebars_snapshot.add_library('handlebars', path: handlebars_lib_path)
46
85
 
47
- # Support functions for working with
86
+ # Support my custom functions from handlebars-api
48
87
  handlebars_snapshot.add_library('handlebars-api', path: handlebars_api_path)
88
+
89
+ # I have not been able to get block helpers working through ruby and so if I just need some custom JS only helpers, such as block then this is the place to do it
90
+ handlebars_snapshot.add_library('handlebars-helper', path: handlebars_helpers_path)
49
91
  end
50
92
 
51
93
  def add_configured_helpers
@@ -139,9 +139,18 @@ module Handlebarsjs
139
139
  end
140
140
 
141
141
  def build_register_helper_script(helper_entry)
142
- return Handlebarsjs::Handlebars.register_safe_string_helper_script(helper_entry[:name], helper_entry[:parameters]) if helper_entry[:safe]
142
+ # When registering a helper, set the safe flag to true when you want a HTML Safe String
143
+ # register_cmdlet(Cmdlet::SomeHtmlCommand, safe: true, parameter_names: %i[value])
144
+ name = helper_entry[:name]
145
+ safe = helper_entry[:safe] || false
146
+ block = helper_entry[:block] || false
147
+ parameter_names = helper_entry[:parameters] || []
148
+
149
+ Handlebarsjs::Handlebars.register_helper_script(name, parameter_names, safe: safe, block: block)
150
+
151
+ # return Handlebarsjs::Handlebars.register_safe_string_helper_script(helper_entry[:name], helper_entry[:parameters]) if helper_entry[:safe]
143
152
 
144
- Handlebarsjs::Handlebars.register_helper_script(helper_entry[:name])
153
+ # Handlebarsjs::Handlebars.register_helper_script(helper_entry[:name])
145
154
  end
146
155
  end
147
156
  end
@@ -1,8 +1,14 @@
1
- Handlebars.registerHelper('loud', function (input) {
2
- return input.toUpperCase()
3
- })
1
+ // Put any custom helper that you can't get to work directly with Ruby in here.
2
+ // Exampe: I have had a lot of trouble getting the block helpers to work with Ruby
3
+ // Handlebars.registerHelper('loud', function (input) {
4
+ // return input.toUpperCase()
5
+ // })
4
6
 
5
- Handlebars.registerHelper('allow_html', function (some_html) {
6
- return new Handlebars.SafeString(some_html);
7
- })
7
+ // Handlebars.registerHelper('allow_html', function (some_html) {
8
+ // return new Handlebars.SafeString(some_html);
9
+ // })
8
10
 
11
+ Handlebars.registerHelper('omit', function (_options) {
12
+ // return options.fn(this)
13
+ return ''
14
+ })
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Handlebarsjs
4
- VERSION = '0.12.0'
4
+ VERSION = '0.13.0'
5
5
  end
data/lib/handlebarsjs.rb CHANGED
@@ -16,6 +16,7 @@ require_relative '_'
16
16
  module Handlebarsjs
17
17
  HANDLEBARS_LIBRARY_PATH = 'lib/handlebarsjs/javascript/handlebars-4.7.7.js'
18
18
  HANDLEBARS_API_PATH = 'lib/handlebarsjs/javascript/handlebars-api.js'
19
+ HANDLEBARS_HELPERS_PATH = 'lib/handlebarsjs/javascript/handlebars-helpers.js'
19
20
 
20
21
  # raise Handlebarsjs::Error, 'Sample message'
21
22
  Error = Class.new(StandardError)
data/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "handlebarsjs",
3
- "version": "0.12.0",
3
+ "version": "0.13.0",
4
4
  "lockfileVersion": 2,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "handlebarsjs",
9
- "version": "0.12.0",
9
+ "version": "0.13.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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "handlebarsjs",
3
- "version": "0.12.0",
3
+ "version": "0.13.0",
4
4
  "description": "handlebarsjs GEM wraps the handlebars.js library and provides ruby/javascript interoperability",
5
5
  "scripts": {
6
6
  "release": "semantic-release"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: handlebarsjs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.0
4
+ version: 0.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Cruwys
@@ -128,7 +128,6 @@ files:
128
128
  - lib/handlebarsjs/helpers/inflection/pluralize_number_word.rb
129
129
  - lib/handlebarsjs/helpers/inflection/singularize.rb
130
130
  - lib/handlebarsjs/helpers/misc/format_json.rb
131
- - lib/handlebarsjs/helpers/misc/omit.rb
132
131
  - lib/handlebarsjs/helpers/misc/safe.rb
133
132
  - lib/handlebarsjs/helpers/str/padl.rb
134
133
  - lib/handlebarsjs/helpers/str/padr.rb
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Handlebarsjs
4
- module Helpers
5
- # Miscellaneous cmdlets
6
- module Misc
7
- # Omit: this content will not get written out, useful for commenting out code
8
- class Omit < Handlebarsjs::BaseHelper
9
- register_cmdlet(Cmdlet::Misc::Omit)
10
-
11
- def to_proc
12
- ->(value, _opts) { wrapper(cmdlet.call(value)) }
13
- end
14
- end
15
- end
16
- end
17
- end