romo 0.16.2 → 0.17.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
  SHA1:
3
- metadata.gz: a9a6e3ce2613489f0aa2630a85e7846cf427c8a6
4
- data.tar.gz: d2f6680786dea0ab3f5fbe8c595951d43a35fb22
3
+ metadata.gz: 1fe66b6570bc33ace62de2e8fd9c4346714ea4a4
4
+ data.tar.gz: 9cc7f175aa978376a86f4a85d005fdab750a817f
5
5
  SHA512:
6
- metadata.gz: 19f2c44434b4f3a64334447a98a6bf9821ea7976bdcbd2d74a478d16d7d00ccdc1bedfed8f241a0a27caeba5e8008c4698029f6b535778ee07f521073bcaea75
7
- data.tar.gz: eb02c4703da3032e95b8f3e2ba8d5c36cd1c04b4b4f3eaa73f6859611591bc21861d211083b080d6c77bffc5597a75b5ca5c0ca122bb8e7910d40fc4f89e7f52
6
+ metadata.gz: 29b9803211c7b536f484844996ade3def60287dbdd6a6d06b4af646f899c35f88d9dbef95fdcc036707d6a706569fc21e74fec50c7ed09028d4ef0b9ea9ad9e6
7
+ data.tar.gz: e9cbde2242c2fcc0b332f6ed53081388bb750a2d9d05e919d1c1144cd53e7599371093768025d020e0c82bd1ef0e6170e1d18d4b946336034a17ff185dfa8f0e
@@ -0,0 +1,18 @@
1
+ @import 'css/romo/vars';
2
+ @import 'css/romo/mixins';
3
+
4
+ .romo-indicator-text-input-wrapper {
5
+ position: relative;
6
+ }
7
+
8
+ .romo-indicator-text-input-indicator {
9
+ display: inline-block;
10
+ position: absolute;
11
+ right: 6px;
12
+ vertical-align: middle;
13
+ cursor: pointer;
14
+ }
15
+ .romo-indicator-text-input-indicator.disabled {
16
+ cursor: $notAllowedCursor;
17
+ color: $disabledColor;
18
+ }
@@ -148,6 +148,10 @@
148
148
 
149
149
  // style handling
150
150
 
151
+ Romo.prototype.getComputedStyle = function(node, styleName) {
152
+ return window.getComputedStyle(node, null).getPropertyValue(styleName);
153
+ }
154
+
151
155
  Romo.prototype.parseZIndex = function(elem) {
152
156
  // for the case where z-index is set directly on the elem
153
157
  var val = this.parseElemZIndex(elem);
@@ -156,9 +160,7 @@
156
160
  }
157
161
 
158
162
  // for the case where z-index is inherited from a parent elem
159
- var parentIndexes = $.map(elem.parents(), function(item) {
160
- return item; // converts the collection to an array
161
- }).reduce($.proxy(function(prev, curr) {
163
+ var parentIndexes = this.toArray(elem.parents()).reduce($.proxy(function(prev, curr) {
162
164
  var pval = this.parseElemZIndex($(curr));
163
165
  if (pval !== 0) {
164
166
  prev.push(pval);
@@ -170,13 +172,20 @@
170
172
  }
171
173
 
172
174
  Romo.prototype.parseElemZIndex = function(elem) {
173
- var val = parseInt(document.defaultView.getComputedStyle(elem[0], null).getPropertyValue("z-index"));
175
+ var val = parseInt(this.getComputedStyle(elem[0], "z-index"));
174
176
  if (!isNaN(val)) {
175
177
  return val;
176
178
  }
177
179
  return 0;
178
180
  }
179
181
 
182
+ // elem handling
183
+
184
+ Romo.prototype.toArray = function(elems) {
185
+ // converts a collection of elements (`$()`) to an array of nodes
186
+ return $.map(elems, function(node){ return node; })
187
+ }
188
+
180
189
  // private
181
190
 
182
191
  Romo.prototype._addEventCallback = function(name, callback) {
@@ -49,7 +49,7 @@ RomoDatepicker.prototype.doBindElem = function() {
49
49
  // parent-child elems so it will be removed when the elem (input) is removed.
50
50
  // delay adding it b/c the `append` statement above is not a "move", it is
51
51
  // a "remove" and "add" so if added immediately the "remove" part will
52
- // incorrectly remove the wrapper. Any value will do - I chose 100 arbitrarily.
52
+ // incorrectly remove the wrapper. Any value will do - I chose 1 arbitrarily.
53
53
  setTimeout($.proxy(function() {
54
54
  Romo.parentChildElems.add(this.elem, [elemWrapper]);
55
55
  }, this), 1);
@@ -66,11 +66,13 @@ RomoForm.prototype.doBindForm = function() {
66
66
 
67
67
  RomoForm.prototype.onFormKeyPress = function(e) {
68
68
  if (this.elem.data('romo-form-disable-keypress') !== true) {
69
- var target = $(e.target);
70
-
71
- if (target.is(':not(TEXTAREA)') && e.keyCode === 13 /* Enter */) {
69
+ var targetElem = $(e.target);
70
+ if (targetElem.is(':not(TEXTAREA)') && e.keyCode === 13 /* Enter */) {
72
71
  e.preventDefault();
73
- this.onSubmitClick();
72
+ if (this.elem.data('romo-form-disable-enter-submit') !== true &&
73
+ targetElem.data('romo-form-disable-enter-submit') !== true) {
74
+ this.onSubmitClick();
75
+ }
74
76
  }
75
77
  }
76
78
  }
@@ -209,9 +211,7 @@ RomoForm.prototype._getSerializeObj = function() {
209
211
  }
210
212
 
211
213
  RomoForm.prototype._getListValueInputNamesDelims = function() {
212
- return $.map(this.elem.find('[data-romo-form-list-values="true"]'), function(item){
213
- return item; // converts the collection to an array
214
- }).reduce($.proxy(function(prev, curr) {
214
+ return Romo.toArray(this.elem.find('[data-romo-form-list-values="true"]')).reduce($.proxy(function(prev, curr) {
215
215
  prev[$(curr).attr('name')] = $(curr).data('romo-form-list-values-delim') || this.defaultListValuesDelim;
216
216
  return prev;
217
217
  }, this), {});
@@ -0,0 +1,123 @@
1
+ $.fn.romoIndicatorTextInput = function() {
2
+ return $.map(this, function(element) {
3
+ return new RomoIndicatorTextInput(element);
4
+ });
5
+ }
6
+
7
+ var RomoIndicatorTextInput = function(element) {
8
+ this.elem = $(element);
9
+ this.defaultIndicatorClass = undefined;
10
+ this.defaultIndicatorWidthPx = 0;
11
+
12
+ this.doInit();
13
+ this.doBindElem();
14
+
15
+ this.elem.trigger('indicatorTextInput:ready', [this]);
16
+ }
17
+
18
+ RomoIndicatorTextInput.prototype.doInit = function() {
19
+ // override as needed
20
+ }
21
+
22
+ RomoIndicatorTextInput.prototype.doBindElem = function() {
23
+ var elemWrapper = $('<div class="romo-indicator-text-input-wrapper"></div>');
24
+ elemWrapper.css({'display': (this.elem.data('romo-indicator-text-input-elem-display') || 'inline-block')});
25
+ if (this.elem.data('romo-indicator-text-input-btn-group') === true) {
26
+ elemWrapper.addClass('romo-btn-group');
27
+ }
28
+
29
+ this.elem.before(elemWrapper);
30
+ elemWrapper.append(this.elem);
31
+
32
+ // the elem wrapper should be treated like a child elem. add it to Romo's
33
+ // parent-child elems so it will be removed when the elem (input) is removed.
34
+ // delay adding it b/c the `append` statement above is not a "move", it is
35
+ // a "remove" and "add" so if added immediately the "remove" part will
36
+ // incorrectly remove the wrapper. Any value will do - I chose 1 arbitrarily.
37
+ setTimeout($.proxy(function() {
38
+ Romo.parentChildElems.add(this.elem, [elemWrapper]);
39
+ }, this), 1);
40
+
41
+ this.elem.attr('autocomplete', 'off');
42
+
43
+ this.indicatorElem = $();
44
+ var indicatorClass = this.elem.data('romo-indicator-text-input-indicator') || this.defaultIndicatorClass;
45
+ if (indicatorClass !== undefined && indicatorClass !== 'none') {
46
+ this.indicatorElem = $('<i class="romo-indicator-text-input-indicator '+indicatorClass+'"></i>');
47
+ this.indicatorElem.css({'line-height': this.elem.css('height')});
48
+ if (this.elem.prop('disabled') === true) {
49
+ this.indicatorElem.addClass('disabled');
50
+ }
51
+ if (this.elem.css('display') === 'none') {
52
+ this._hide(this.indicatorElem);
53
+ }
54
+ this.indicatorElem.on('click', $.proxy(this.onIndicatorClick, this));
55
+
56
+ var indicatorWidthPx = this.elem.data('romo-indicator-text-input-indicator-width-px') || this.defaultIndicatorWidthPx;
57
+ // left-side spacing
58
+ // + indicator width
59
+ // + right-side spacing
60
+ var indicatorPaddingPx = 4 + indicatorWidthPx + 4;
61
+ this.elem.css({'padding-right': indicatorPaddingPx + 'px'});
62
+ this.elem.after(this.indicatorElem);
63
+ }
64
+
65
+ this.elem.on('indicatorTextInput:triggerEnable', $.proxy(function(e) {
66
+ this.doEnable();
67
+ }, this));
68
+ this.elem.on('indicatorTextInput:triggerDisable', $.proxy(function(e) {
69
+ this.doDisable();
70
+ }, this));
71
+ this.elem.on('indicatorTextInput:triggerShow', $.proxy(function(e) {
72
+ this.doShow();
73
+ }, this));
74
+ this.elem.on('indicatorTextInput:triggerHide', $.proxy(function(e) {
75
+ this.doHide();
76
+ }, this));
77
+ }
78
+
79
+ RomoIndicatorTextInput.prototype.doEnable = function() {
80
+ this.elem.prop('disabled', false);
81
+ this.elem.removeClass('disabled');
82
+ this.indicatorElem.removeClass('disabled');
83
+ }
84
+
85
+ RomoIndicatorTextInput.prototype.doDisable = function() {
86
+ this.elem.prop('disabled', true);
87
+ this.elem.addClass('disabled');
88
+ this.indicatorElem.addClass('disabled');
89
+ }
90
+
91
+ RomoIndicatorTextInput.prototype.doShow = function() {
92
+ this._show(this.elem);
93
+ this._show(this.indicatorElem);
94
+ }
95
+
96
+ RomoIndicatorTextInput.prototype.doHide = function() {
97
+ this._hide(this.elem);
98
+ this._hide(this.indicatorElem);
99
+ }
100
+
101
+ RomoIndicatorTextInput.prototype.onIndicatorClick = function(e) {
102
+ if (e !== undefined) {
103
+ e.preventDefault();
104
+ e.stopPropagation();
105
+ }
106
+ if (this.elem.prop('disabled') === false) {
107
+ this.elem.focus();
108
+ }
109
+ }
110
+
111
+ // private
112
+
113
+ RomoIndicatorTextInput.prototype._show = function(elem) {
114
+ elem.css('display', '');
115
+ }
116
+
117
+ RomoIndicatorTextInput.prototype._hide = function(elem) {
118
+ elem.css('display', 'none');
119
+ }
120
+
121
+ Romo.onInitUI(function(e) {
122
+ Romo.initUIElems(e, '[data-romo-indicator-text-input-auto="true"]').romoIndicatorTextInput();
123
+ });
@@ -0,0 +1,44 @@
1
+ var RomoWordBoundaryFilter = function(filterString, setElems, getElemTextContentCallback) {
2
+ this.boundaryCharsRegex = /[\s-_]+/;
3
+ this.matchingNodes = [];
4
+ this.notMatchingNodes = [];
5
+ this.filters = filterString
6
+ .trim()
7
+ .toLowerCase()
8
+ .split(this.boundaryCharsRegex);
9
+
10
+ Romo.toArray(setElems).forEach($.proxy(function(node) {
11
+ var contentStack = getElemTextContentCallback($(node))
12
+ .trim()
13
+ .toLowerCase()
14
+ .split(this.boundaryCharsRegex).reverse();
15
+
16
+ var match = this.filters.reduce($.proxy(function(filterMatch, filter) {
17
+ if (filterMatch === false) {
18
+ // short-circuit the reduce
19
+ return false;
20
+ } else {
21
+ var contentMatch = false;
22
+ do {
23
+ var content = contentStack.pop();
24
+ if (content !== undefined && content.indexOf(filter) === 0) {
25
+ contentMatch = true;
26
+ // we found a match for this filter so we need to
27
+ // break out of this do...while and go to next filter
28
+ content = undefined;
29
+ }
30
+ } while(content !== undefined);
31
+ return contentMatch;
32
+ }
33
+ }, this), true);
34
+
35
+ if (match === true) {
36
+ this.matchingNodes.push(node);
37
+ } else {
38
+ this.notMatchingNodes.push(node);
39
+ }
40
+ }, this));
41
+
42
+ this.matchingElems = $(this.matchingNodes);
43
+ this.notMatchingElems = $(this.notMatchingNodes);
44
+ }
data/lib/romo/dassets.rb CHANGED
@@ -34,6 +34,7 @@ module Romo::Dassets
34
34
  'css/romo/grid_table.css',
35
35
  'css/romo/dropdown.css',
36
36
  'css/romo/modal.css',
37
+ 'css/romo/indicator_text_input.css',
37
38
  'css/romo/select.css',
38
39
  'css/romo/datepicker.css',
39
40
  'css/romo/tooltip.css',
@@ -42,11 +43,13 @@ module Romo::Dassets
42
43
  ]
43
44
  c.combination "js/romo.js", [
44
45
  'js/romo/base.js',
46
+ 'js/romo/word_boundary_filter.js',
45
47
  'js/romo/invoke.js',
46
48
  'js/romo/onkey.js',
47
49
  'js/romo/form.js',
48
50
  'js/romo/dropdown.js',
49
51
  'js/romo/dropdown_form.js',
52
+ 'js/romo/indicator_text_input.js',
50
53
  'js/romo/select_dropdown.js',
51
54
  'js/romo/select.js',
52
55
  'js/romo/datepicker.js',
data/lib/romo/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Romo
2
- VERSION = "0.16.2"
2
+ VERSION = "0.17.0"
3
3
  end
@@ -34,6 +34,7 @@ module Romo::Dassets
34
34
  'css/romo/grid_table.css',
35
35
  'css/romo/dropdown.css',
36
36
  'css/romo/modal.css',
37
+ 'css/romo/indicator_text_input.css',
37
38
  'css/romo/select.css',
38
39
  'css/romo/datepicker.css',
39
40
  'css/romo/tooltip.css',
@@ -44,11 +45,13 @@ module Romo::Dassets
44
45
 
45
46
  exp_js_sources = [
46
47
  'js/romo/base.js',
48
+ 'js/romo/word_boundary_filter.js',
47
49
  'js/romo/invoke.js',
48
50
  'js/romo/onkey.js',
49
51
  'js/romo/form.js',
50
52
  'js/romo/dropdown.js',
51
53
  'js/romo/dropdown_form.js',
54
+ 'js/romo/indicator_text_input.js',
52
55
  'js/romo/select_dropdown.js',
53
56
  'js/romo/select.js',
54
57
  'js/romo/datepicker.js',
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: romo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.16.2
4
+ version: 0.17.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kelly Redding
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2016-10-26 00:00:00 Z
13
+ date: 2016-11-01 00:00:00 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: assert
@@ -66,6 +66,7 @@ files:
66
66
  - assets/css/romo/forms.scss
67
67
  - assets/css/romo/grid.scss
68
68
  - assets/css/romo/grid_table.scss
69
+ - assets/css/romo/indicator_text_input.scss
69
70
  - assets/css/romo/labels.scss
70
71
  - assets/css/romo/lists.scss
71
72
  - assets/css/romo/modal.scss
@@ -82,6 +83,7 @@ files:
82
83
  - assets/js/romo/dropdown_form.js
83
84
  - assets/js/romo/form.js
84
85
  - assets/js/romo/indicator.js
86
+ - assets/js/romo/indicator_text_input.js
85
87
  - assets/js/romo/inline.js
86
88
  - assets/js/romo/inline_form.js
87
89
  - assets/js/romo/invoke.js
@@ -92,6 +94,7 @@ files:
92
94
  - assets/js/romo/select_dropdown.js
93
95
  - assets/js/romo/sortable.js
94
96
  - assets/js/romo/tooltip.js
97
+ - assets/js/romo/word_boundary_filter.js
95
98
  - lib/romo.rb
96
99
  - lib/romo/dassets.rb
97
100
  - lib/romo/version.rb