hamlit 2.8.10 → 2.9.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9781542c57cf0b6dca33b3823113d76fe6ed1fd61e5d380f2be82037aa78fd74
4
- data.tar.gz: 76071735c42f313f42c24833dc4c687a8832b66d6e03420d7080357a4fbea7d1
3
+ metadata.gz: 587d2b8d01739c5529f342f9f316b9d13dcec5c9ba4ca693072e83da857fdf20
4
+ data.tar.gz: 91372701c50b63c2acbcc0f259987da4200a444c33371b1908670edc4c02493f
5
5
  SHA512:
6
- metadata.gz: 06ae78c58435116352cb4c74832e9ecf0ba91c06adb669e42f5c944acb7ccebcccc2d45e8a31c0d8da74292c51713e1ba24aa5e6a0e9fc6a439998cc29462be3
7
- data.tar.gz: 9bdab2b20439608f7f1698393eb7770182506408a9e460b6b7d7602cbde71c1d3bbe98db6738105a56cf15ec1a063a78930d988e3d0241a8b4f960674cb5ff8b
6
+ metadata.gz: 19f57ff4a0c28e5c6759c54120b37104ae3e4eff9e92cde062da1f195b8c39e3ef38a1f1eef4276fff22bd0961dd1cac126c3bdc38ca03137475ff5cc101fdb9
7
+ data.tar.gz: 418735e4c178d9a7bf96d6bbc432a0f00da2fd4068df1bee01254a864f2675c9ebe05c5a391a78c9912095f17b666cb9e688b24e30f33b8390bb86741d9228b5
@@ -4,14 +4,21 @@ All notable changes to this project will be documented in this file. This
4
4
  project adheres to [Semantic Versioning](http://semver.org/). This change log is based upon
5
5
  [keep-a-changelog](https://github.com/olivierlacan/keep-a-changelog).
6
6
 
7
- ## [2.8.10](https://github.com/k0kubun/hamlit/compare/v2.8.8...v2.8.9) - 2018-09-05
7
+ ## [2.9.0](https://github.com/k0kubun/hamlit/compare/v2.8.10...v2.9.0) - 2018-10-16
8
+
9
+ ### Added
10
+
11
+ - Consider aria attribute as another attribute that supports hyphenation and boolean like data attribute.
12
+ [#57](https://github.com/k0kubun/hamlit/pull/57). *Thanks to @francesco-loreti*
13
+
14
+ ## [2.8.10](https://github.com/k0kubun/hamlit/compare/v2.8.9...v2.8.10) - 2018-09-05
8
15
 
9
16
  ### Fixed
10
17
 
11
18
  - Fix uninitialized constant error introduced in v2.8.9
12
19
  [#125](https://github.com/k0kubun/hamlit/pull/125). *Thanks to @vovchynniko*
13
20
 
14
- ## [2.8.9](https://github.com/k0kubun/hamlit/compare/v2.8.8...v2.8.9) - 2018-09-05
21
+ ## [2.8.9](https://github.com/k0kubun/hamlit/compare/v2.8.8...v2.8.9) - 2018-09-05 [YANKED]
15
22
 
16
23
  ### Fixed
17
24
 
@@ -82,7 +82,7 @@ But some helpers are supported on Rails. Some of not-implemented methods are pla
82
82
 
83
83
  ### Limited attributes hyphenation
84
84
  In Haml, `%a{ foo: { bar: 'baz' } }` is rendered as `<a foo-bar='baz'></a>`, whatever foo is.
85
- In Hamlit, this feature is supported only for data attribute. Hamlit renders `%a{ data: { foo: 'bar' } }`
85
+ In Hamlit, this feature is supported only for aria and data attribute. Hamlit renders `%a{ data: { foo: 'bar' } }`
86
86
  as `<a data-foo='bar'></a>` because it's data attribute. This design allows us to reduce work on runtime
87
87
  and the idea is originally in [Faml](https://github.com/eagletmt/faml).
88
88
 
@@ -91,7 +91,7 @@ In Haml, `%a{ foo: false }` is rendered as `<a></a>`, whatever `foo` is.
91
91
  In Hamlit, this feature is supported for only boolean attributes, which are defined by
92
92
  http://www.w3.org/TR/xhtml1/guidelines.html or https://html.spec.whatwg.org/.
93
93
  The list is the same as `ActionView::Helpers::TagHelper::BOOLEAN_ATTRIBUTES`.
94
- In addition, data-\* is also regarded as boolean.
94
+ In addition, aria-\* and data-\* is also regarded as boolean.
95
95
 
96
96
  Since `foo` is not boolean attribute, `%a{ foo: false }` is rendered as `<a foo='false'></a>`
97
97
  This is the same behavior as Rails helpers. Also for `%a{ foo: nil }`,
@@ -102,7 +102,7 @@ is the only difference between Faml and Hamlit.
102
102
  ## 5 Types of Attributes
103
103
 
104
104
  Haml has 3 types of attributes: id, class and others.
105
- In addition, Hamlit treats data and boolean attributes specially.
105
+ In addition, Hamlit treats aria/data and boolean attributes specially.
106
106
  So there are 5 types of attributes in Hamlit.
107
107
 
108
108
  ### id attribute
@@ -143,7 +143,7 @@ and merging multiple classes results in unique alphabetical sort.
143
143
  <div class=''></div>
144
144
  ```
145
145
 
146
- ### data attribute
146
+ ### aria / data attribute
147
147
  Completely compatible with Haml, hyphenation and boolean are supported.
148
148
 
149
149
  ```rb
@@ -156,6 +156,8 @@ Completely compatible with Haml, hyphenation and boolean are supported.
156
156
  <div data-foo='bar'></div>
157
157
  ```
158
158
 
159
+ aria attribute works in the same way as data attribute.
160
+
159
161
  ### boolean attributes
160
162
  No hyphenation but complete boolean support.
161
163
 
@@ -5,9 +5,10 @@
5
5
 
6
6
  VALUE mAttributeBuilder, mObjectRef;
7
7
  static ID id_flatten, id_keys, id_parse, id_prepend, id_tr, id_uniq_bang;
8
- static ID id_data, id_equal, id_hyphen, id_space, id_underscore;
8
+ static ID id_aria, id_data, id_equal, id_hyphen, id_space, id_underscore;
9
9
  static ID id_boolean_attributes, id_xhtml;
10
10
 
11
+ static VALUE str_aria() { return rb_const_get(mAttributeBuilder, id_aria); }
11
12
  static VALUE str_data() { return rb_const_get(mAttributeBuilder, id_data); }
12
13
  static VALUE str_equal() { return rb_const_get(mAttributeBuilder, id_equal); }
13
14
  static VALUE str_hyphen() { return rb_const_get(mAttributeBuilder, id_hyphen); }
@@ -166,32 +167,45 @@ hamlit_build_class(VALUE escape_attrs, VALUE array)
166
167
  }
167
168
  }
168
169
 
170
+ struct merge_data_attrs_var {
171
+ VALUE merged;
172
+ VALUE key_str;
173
+ };
174
+
169
175
  static int
170
- merge_data_attrs_i(VALUE key, VALUE value, VALUE merged)
176
+ merge_data_attrs_i(VALUE key, VALUE value, VALUE ptr)
171
177
  {
178
+ struct merge_data_attrs_var *arg = (struct merge_data_attrs_var *)ptr;
179
+ VALUE merged = arg->merged;
180
+ VALUE key_str = arg->key_str;
181
+
172
182
  if (NIL_P(key)) {
173
- rb_hash_aset(merged, str_data(), value);
183
+ rb_hash_aset(merged, key_str, value);
174
184
  } else {
175
- key = rb_str_concat(rb_str_new_cstr("data-"), to_s(key));
185
+ key = rb_str_concat(rb_str_concat(rb_str_dup(key_str), rb_str_new_cstr("-")), to_s(key));
176
186
  rb_hash_aset(merged, key, value);
177
187
  }
178
188
  return ST_CONTINUE;
179
189
  }
180
190
 
181
191
  static VALUE
182
- merge_data_attrs(VALUE values)
192
+ merge_data_attrs(VALUE values, VALUE key_str)
183
193
  {
184
194
  long i;
185
195
  VALUE value, merged = rb_hash_new();
186
196
 
187
197
  for (i = 0; i < RARRAY_LEN(values); i++) {
198
+ struct merge_data_attrs_var arg;
199
+ arg.merged = merged;
200
+ arg.key_str = key_str;
201
+
188
202
  value = rb_ary_entry(values, i);
189
203
  switch (TYPE(value)) {
190
204
  case T_HASH:
191
- rb_hash_foreach(value, merge_data_attrs_i, merged);
205
+ rb_hash_foreach(value, merge_data_attrs_i, (VALUE)&arg);
192
206
  break;
193
207
  default:
194
- rb_hash_aset(merged, str_data(), value);
208
+ rb_hash_aset(merged, key_str, value);
195
209
  break;
196
210
  }
197
211
  }
@@ -255,12 +269,12 @@ flatten_data_attrs(VALUE attrs)
255
269
  }
256
270
 
257
271
  static VALUE
258
- hamlit_build_data(VALUE escape_attrs, VALUE quote, VALUE values)
272
+ hamlit_build_data(VALUE escape_attrs, VALUE quote, VALUE values, VALUE key_str)
259
273
  {
260
274
  long i;
261
275
  VALUE attrs, buf, keys, key, value;
262
276
 
263
- attrs = merge_data_attrs(values);
277
+ attrs = merge_data_attrs(values, key_str);
264
278
  attrs = flatten_data_attrs(attrs);
265
279
  keys = rb_ary_sort_bang(rb_funcall(attrs, id_keys, 0));
266
280
  buf = rb_str_new("", 0);
@@ -304,7 +318,7 @@ merge_all_attrs_i(VALUE key, VALUE value, VALUE merged)
304
318
  VALUE array;
305
319
 
306
320
  key = to_s(key);
307
- if (str_eq(key, "id", 2) || str_eq(key, "class", 5) || str_eq(key, "data", 4)) {
321
+ if (str_eq(key, "id", 2) || str_eq(key, "class", 5) || str_eq(key, "data", 4) || str_eq(key, "aria", 4)) {
308
322
  array = rb_hash_aref(merged, key);
309
323
  if (NIL_P(array)) {
310
324
  array = rb_ary_new2(1);
@@ -338,6 +352,7 @@ is_boolean_attribute(VALUE key)
338
352
  {
339
353
  VALUE boolean_attributes;
340
354
  if (str_eq(rb_str_substr(key, 0, 5), "data-", 5)) return 1;
355
+ if (str_eq(rb_str_substr(key, 0, 5), "aria-", 5)) return 1;
341
356
 
342
357
  boolean_attributes = rb_const_get(mAttributeBuilder, id_boolean_attributes);
343
358
  return RTEST(rb_ary_includes(boolean_attributes, key));
@@ -364,7 +379,13 @@ hamlit_build_for_class(VALUE escape_attrs, VALUE quote, VALUE buf, VALUE values)
364
379
  void
365
380
  hamlit_build_for_data(VALUE escape_attrs, VALUE quote, VALUE buf, VALUE values)
366
381
  {
367
- rb_str_concat(buf, hamlit_build_data(escape_attrs, quote, values));
382
+ rb_str_concat(buf, hamlit_build_data(escape_attrs, quote, values, str_data()));
383
+ }
384
+
385
+ void
386
+ hamlit_build_for_aria(VALUE escape_attrs, VALUE quote, VALUE buf, VALUE values)
387
+ {
388
+ rb_str_concat(buf, hamlit_build_data(escape_attrs, quote, values, str_aria()));
368
389
  }
369
390
 
370
391
  void
@@ -422,6 +443,8 @@ hamlit_build(VALUE escape_attrs, VALUE quote, VALUE format, VALUE object_ref, VA
422
443
  hamlit_build_for_class(escape_attrs, quote, buf, value);
423
444
  } else if (str_eq(key, "data", 4)) {
424
445
  hamlit_build_for_data(escape_attrs, quote, buf, value);
446
+ } else if (str_eq(key, "aria", 4)) {
447
+ hamlit_build_for_aria(escape_attrs, quote, buf, value);
425
448
  } else if (is_boolean_attribute(key)) {
426
449
  hamlit_build_for_boolean(escape_attrs, quote, format, buf, key, value);
427
450
  } else {
@@ -454,6 +477,17 @@ rb_hamlit_build_class(int argc, VALUE *argv, RB_UNUSED_VAR(VALUE self))
454
477
  return hamlit_build_class(argv[0], array);
455
478
  }
456
479
 
480
+ static VALUE
481
+ rb_hamlit_build_aria(int argc, VALUE *argv, RB_UNUSED_VAR(VALUE self))
482
+ {
483
+ VALUE array;
484
+
485
+ rb_check_arity(argc, 2, UNLIMITED_ARGUMENTS);
486
+ rb_scan_args(argc - 2, argv + 2, "*", &array);
487
+
488
+ return hamlit_build_data(argv[0], argv[1], array, str_aria());
489
+ }
490
+
457
491
  static VALUE
458
492
  rb_hamlit_build_data(int argc, VALUE *argv, RB_UNUSED_VAR(VALUE self))
459
493
  {
@@ -462,7 +496,7 @@ rb_hamlit_build_data(int argc, VALUE *argv, RB_UNUSED_VAR(VALUE self))
462
496
  rb_check_arity(argc, 2, UNLIMITED_ARGUMENTS);
463
497
  rb_scan_args(argc - 2, argv + 2, "*", &array);
464
498
 
465
- return hamlit_build_data(argv[0], argv[1], array);
499
+ return hamlit_build_data(argv[0], argv[1], array, str_data());
466
500
  }
467
501
 
468
502
  static VALUE
@@ -490,6 +524,7 @@ Init_hamlit(void)
490
524
  rb_define_singleton_method(mAttributeBuilder, "build", rb_hamlit_build, -1);
491
525
  rb_define_singleton_method(mAttributeBuilder, "build_id", rb_hamlit_build_id, -1);
492
526
  rb_define_singleton_method(mAttributeBuilder, "build_class", rb_hamlit_build_class, -1);
527
+ rb_define_singleton_method(mAttributeBuilder, "build_aria", rb_hamlit_build_aria, -1);
493
528
  rb_define_singleton_method(mAttributeBuilder, "build_data", rb_hamlit_build_data, -1);
494
529
 
495
530
  id_flatten = rb_intern("flatten");
@@ -499,6 +534,7 @@ Init_hamlit(void)
499
534
  id_tr = rb_intern("tr");
500
535
  id_uniq_bang = rb_intern("uniq!");
501
536
 
537
+ id_aria = rb_intern("ARIA");
502
538
  id_data = rb_intern("DATA");
503
539
  id_equal = rb_intern("EQUAL");
504
540
  id_hyphen = rb_intern("HYPHEN");
@@ -508,6 +544,7 @@ Init_hamlit(void)
508
544
  id_boolean_attributes = rb_intern("BOOLEAN_ATTRIBUTES");
509
545
  id_xhtml = rb_intern("xhtml");
510
546
 
547
+ rb_const_set(mAttributeBuilder, id_aria, rb_obj_freeze(rb_str_new_cstr("aria")));
511
548
  rb_const_set(mAttributeBuilder, id_data, rb_obj_freeze(rb_str_new_cstr("data")));
512
549
  rb_const_set(mAttributeBuilder, id_equal, rb_obj_freeze(rb_str_new_cstr("=")));
513
550
  rb_const_set(mAttributeBuilder, id_hyphen, rb_obj_freeze(rb_str_new_cstr("-")));
@@ -45,9 +45,9 @@ module Hamlit
45
45
  compile_id!(temple, key, values)
46
46
  when 'class'
47
47
  compile_class!(temple, key, values)
48
- when 'data'
48
+ when 'data', 'aria'
49
49
  compile_data!(temple, key, values)
50
- when *AttributeBuilder::BOOLEAN_ATTRIBUTES, /\Adata-/
50
+ when *AttributeBuilder::BOOLEAN_ATTRIBUTES, /\Adata-/, /\Aaria-/
51
51
  compile_boolean!(temple, key, values)
52
52
  else
53
53
  compile_common!(temple, key, values)
@@ -76,7 +76,7 @@ module Hamlit
76
76
 
77
77
  def compile_data!(temple, key, values)
78
78
  args = [@escape_attrs.inspect, "#{@quote.inspect}.freeze", values.map { |v| literal_for(v) }]
79
- build_code = "::Hamlit::AttributeBuilder.build_data(#{args.join(', ')})"
79
+ build_code = "::Hamlit::AttributeBuilder.build_#{key}(#{args.join(', ')})"
80
80
 
81
81
  if values.all? { |type, exp| type == :static || Temple::StaticAnalyzer.static?(exp) }
82
82
  temple << [:static, eval(build_code).to_s]
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Hamlit
3
- VERSION = '2.8.10'
3
+ VERSION = '2.9.0'
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hamlit
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.8.10
4
+ version: 2.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Takashi Kokubun
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-09-05 00:00:00.000000000 Z
11
+ date: 2018-10-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: temple