esphinx-rails 1.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/Rakefile +21 -0
  4. data/config/environments/production.rb +1 -0
  5. data/config/environments/staging.rb +1 -0
  6. data/config/initializers/assets.rb +7 -0
  7. data/esphinx.gemspec +19 -0
  8. data/lib/assets/javascripts/esphinx/element.js +256 -0
  9. data/lib/assets/javascripts/esphinx/event.js +227 -0
  10. data/lib/assets/javascripts/esphinx/index.js +3 -0
  11. data/lib/assets/javascripts/esphinx/lib/collection.js +51 -0
  12. data/lib/assets/javascripts/esphinx/lib/comparable.js +54 -0
  13. data/lib/assets/javascripts/esphinx/lib/extensions/array.js +541 -0
  14. data/lib/assets/javascripts/esphinx/lib/extensions/function.js +46 -0
  15. data/lib/assets/javascripts/esphinx/lib/extensions/index.js +1 -0
  16. data/lib/assets/javascripts/esphinx/lib/extensions/location.js +111 -0
  17. data/lib/assets/javascripts/esphinx/lib/extensions/map.js +29 -0
  18. data/lib/assets/javascripts/esphinx/lib/extensions/number.js +42 -0
  19. data/lib/assets/javascripts/esphinx/lib/extensions/object.js +502 -0
  20. data/lib/assets/javascripts/esphinx/lib/extensions/string.js +130 -0
  21. data/lib/assets/javascripts/esphinx/lib/extensions/x_path_result.js +31 -0
  22. data/lib/assets/javascripts/esphinx/lib/patterns/gof/flyweight/factory.js +115 -0
  23. data/lib/assets/javascripts/esphinx/lib/patterns/gof/flyweight/flyweight.js +12 -0
  24. data/lib/assets/javascripts/esphinx/lib/patterns/gof/iterator.js +332 -0
  25. data/lib/assets/javascripts/esphinx/lib/patterns/gof/strategies/context.js +42 -0
  26. data/lib/assets/javascripts/esphinx/lib/patterns/gof/strategies/search/graphs/bfs/element.js +78 -0
  27. data/lib/assets/javascripts/esphinx/lib/patterns/gof/strategies/search/graphs/bfs/object.js +83 -0
  28. data/lib/assets/javascripts/esphinx/lib/patterns/gof/strategies/search/graphs/bfs.js +19 -0
  29. data/lib/assets/javascripts/esphinx/lib/patterns/gof/strategies/search/search.js +24 -0
  30. data/lib/assets/javascripts/esphinx/lib/patterns/gof/strategies/search/search_proxy.js +52 -0
  31. data/lib/assets/javascripts/esphinx/lib/patterns/index.js +1 -0
  32. data/lib/assets/javascripts/esphinx/main.js +361 -0
  33. data/lib/assets/javascripts/esphinx/node.js +276 -0
  34. data/lib/assets/javascripts/esphinx/properties/forms.js +161 -0
  35. data/lib/assets/javascripts/esphinx/properties/inputs/text.js +29 -0
  36. data/lib/assets/javascripts/esphinx/property.js +308 -0
  37. data/lib/assets/javascripts/esphinx/query.js +347 -0
  38. data/lib/assets/javascripts/esphinx/samples/sort.js +30 -0
  39. data/lib/assets/javascripts/esphinx/style.js +342 -0
  40. data/lib/assets/javascripts/esphinx/util/ajax.js +152 -0
  41. data/lib/assets/javascripts/esphinx/util/autocomplete.js +356 -0
  42. data/lib/assets/javascripts/esphinx/util/browser.js +66 -0
  43. data/lib/assets/javascripts/esphinx/util/cookie.js +167 -0
  44. data/lib/assets/javascripts/esphinx/util/keyboard.js +110 -0
  45. data/lib/assets/javascripts/esphinx/util/loader.js +84 -0
  46. data/lib/assets/javascripts/esphinx/util/observer.js +58 -0
  47. data/lib/assets/javascripts/esphinx/util/promise.js +127 -0
  48. data/lib/assets/javascripts/esphinx/util/protector.js +142 -0
  49. data/lib/assets/javascripts/esphinx/util/range.js +6 -0
  50. data/lib/assets/javascripts/esphinx/util/scrollbar.js +22 -0
  51. data/lib/esphinx/rails/engine.rb +7 -0
  52. data/lib/esphinx/rails/version.rb +5 -0
  53. data/lib/esphinx-rails.rb +1 -0
  54. data/vendor/assets/javascripts/jquery-2.2.2.min.js +1 -0
  55. metadata +99 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: d566d1cefa1a1296f58f60c5b5d7a952f1663e53
4
+ data.tar.gz: 199f1ca54abde4caf59ce392d24418df7c16d76d
5
+ SHA512:
6
+ metadata.gz: 475e105cfc42966a10f63b1024f75dbb50f5567a9b0423af7f4af10deecfcbe37e749048a1ffe4efee5394d1428b9439a59f2a0900f134b6da7d8aa79a062e1e
7
+ data.tar.gz: d9e01840069b9c4b94804c4f0eaa69ddf97b3885134ec19f04d0e16be331baf709dca1012138c5d02895e3a46ad4e36322ab14b045bc0f6d5e4ae62efffd8399
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2014 YOURNAME
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env rake
2
+ begin
3
+ require 'bundler/setup'
4
+ rescue LoadError
5
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
+ end
7
+ begin
8
+ require 'rdoc/task'
9
+ rescue LoadError
10
+ require 'rdoc/rdoc'
11
+ require 'rake/rdoctask'
12
+ RDoc::Task = Rake::RDocTask
13
+ end
14
+
15
+ RDoc::Task.new(:rdoc) do |rdoc|
16
+ rdoc.rdoc_dir = 'rdoc'
17
+ rdoc.title = 'esphinx-rails'
18
+ rdoc.options << '--line-numbers'
19
+ rdoc.rdoc_files.include('README.rdoc')
20
+ rdoc.rdoc_files.include('lib/**/*.rb')
21
+ end
@@ -0,0 +1 @@
1
+ Rails.application.config.assets.precompile += %w( esphinx.js )
@@ -0,0 +1 @@
1
+ Rails.application.config.assets.precompile += %w( esphinx.js )
@@ -0,0 +1,7 @@
1
+ # See what's difference between .application and .application.egine, if there is a effective difference.
2
+ # Rails.application.engine.config.assets.compile += ...
3
+
4
+ # Configs to Production
5
+
6
+ # precompilation on deploy. Basicaly, must be precompile the assets that contains "//= require_tree .", that mount all files in one.
7
+ Rails.application.config.assets.precompile += %w( esphinx.js )
data/esphinx.gemspec ADDED
@@ -0,0 +1,19 @@
1
+ $:.push File.expand_path("../lib", __FILE__)
2
+
3
+ require "esphinx/rails/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "esphinx-rails"
7
+ s.version = ESphinx::Rails::VERSION
8
+ s.authors = ["rplaurindo"]
9
+ s.email = ["rafaelplaurindo@gmail.com"]
10
+ s.homepage = "https://rubygems.org/gems/esphinx-rails"
11
+ s.summary = %q{Summary of ESphinx}
12
+ s.description = %q{Abstraction helpers for Javascript.}
13
+ s.license = "MIT"
14
+ s.test_files = Dir["test/**/*"]
15
+
16
+ s.files = Dir["{config,lib,vendor}/**/*", "MIT-LICENSE", "Rakefile", "README.md", "esphinx.gemspec"]
17
+ s.require_paths = %w{config lib vendor}
18
+
19
+ end
@@ -0,0 +1,256 @@
1
+ var
2
+ esPhinx;
3
+
4
+
5
+ (function($) {
6
+ "use strict";
7
+
8
+ $.prototype.extend({
9
+
10
+ // TODO
11
+ // selectText: function(start = 0, end) {
12
+ selectText: function(start, end) {
13
+ if (isNaN(start)) {start = 0;}
14
+
15
+ var
16
+ mainReference = this,
17
+ node = mainReference.asNode(),
18
+ aux,
19
+ text;
20
+
21
+ // selectionStart and selectionEnd only exists for input elements
22
+ if (node instanceof window.HTMLInputElement) {
23
+ text = $(node).value();
24
+
25
+ if (!start || start != "number") {
26
+ $.reverseEach(text, node.selectionStart,
27
+ function(c, i) {
28
+ // debugger
29
+ if (c == " ") {
30
+ start = i;
31
+ this.finalize();
32
+ }
33
+ });
34
+ }
35
+
36
+ if (!end || typeof end != "number") {
37
+ $.reverseEach(text, node.selectionEnd,
38
+ function(c, i) {
39
+ if (c == " ") {
40
+ end = i;
41
+ this.finalizeOnReverse();
42
+ }
43
+ });
44
+ }
45
+
46
+ if (end < start) {
47
+ aux = start;
48
+ start = end;
49
+ end = aux;
50
+ }
51
+
52
+ node.setSelectionRange(start, end);
53
+ mainReference.focus();
54
+
55
+ return mainReference;
56
+ }
57
+
58
+ },
59
+
60
+ attribute: function(attrName, value) {
61
+ var
62
+ attr,
63
+ node = this.asNode(),
64
+
65
+ block = function(node) {
66
+ node.setAttribute(attrName, value);
67
+ };
68
+
69
+ if (this.length === 0) {
70
+ return this;
71
+ }
72
+
73
+ if (typeof value == "boolean" || value || value === "") {
74
+ this.each(block);
75
+
76
+ return this;
77
+ } else {
78
+ attr = node.getAttribute(attrName);
79
+ if (attr) {
80
+ return attr;
81
+ }
82
+ }
83
+
84
+ return undefined;
85
+ },
86
+
87
+ property: function(propertyName, value) {
88
+ var
89
+ node = this.asNode(),
90
+
91
+ block = function(node) {
92
+ node[propertyName] = value;
93
+ };
94
+
95
+ if (this.length === 0) {
96
+ return this;
97
+ }
98
+
99
+ if (typeof value == "boolean" || value || value === "") {
100
+ this.each(block);
101
+
102
+ return this;
103
+ } else {
104
+ if (node[propertyName] ||
105
+ typeof node[propertyName] == "boolean") {
106
+ return node[propertyName];
107
+ }
108
+ }
109
+
110
+ return undefined;
111
+ },
112
+
113
+ tagName: function() {
114
+ if (this.some() && this.asNode() instanceof window.Element) {
115
+ return this.property("tagName").toLowerCase();
116
+ }
117
+
118
+ return "";
119
+ },
120
+
121
+ focus: function() {
122
+ this.asNode().focus();
123
+ return this;
124
+ },
125
+
126
+ select: function() {
127
+ return this.property("selected", true);
128
+ },
129
+
130
+ selected: function() {
131
+ return this.property("selected");
132
+ },
133
+
134
+ unselect: function() {
135
+ return this.property("selected", false);
136
+ },
137
+
138
+ removeClass: function(classList) {
139
+ var
140
+ currentClassList,
141
+ pattern,
142
+ removed,
143
+
144
+ block = function(node) {
145
+ currentClassList = $(node).attribute("class");
146
+ removed = currentClassList.replace(pattern, "");
147
+ $(node).attribute("class", removed.replace(/( )+/g, " ")
148
+ .trim());
149
+ };
150
+
151
+ if (arguments.length > 1) {
152
+ classList = Array.from(arguments);
153
+ pattern = new RegExp("\\b((" + classList
154
+ .join(")|(") + "))(?=(\\b| ))", "g");
155
+ } else {
156
+ pattern = new RegExp("\\b((" + classList.split(" ")
157
+ .join(")|(") + "))(?=(\\b| ))", "g");
158
+ }
159
+
160
+ this.each(block);
161
+
162
+ return this;
163
+ },
164
+
165
+ addClass: function(classList) {
166
+ var
167
+ currentClassList,
168
+ asString,
169
+
170
+ block = function(node) {
171
+ currentClassList = $(node).attribute("class") || "";
172
+ $(node).attribute("class", (currentClassList + " " +
173
+ asString).trim());
174
+ };
175
+
176
+ if (arguments.length > 1) {
177
+ classList = Array.from(arguments);
178
+ asString = classList.join(" ");
179
+ } else if (typeof classList == "string") {
180
+ asString = classList;
181
+ }
182
+
183
+ this.each(block);
184
+
185
+ return this;
186
+ },
187
+
188
+ check: function() {
189
+ return this.property("checked", true);
190
+ },
191
+
192
+ checked: function() {
193
+ return this.property("checked");
194
+ },
195
+
196
+ uncheck: function() {
197
+ return this.property("checked", false);
198
+ },
199
+
200
+ visible: function() {
201
+ var
202
+ asIterable,
203
+ iterator,
204
+ visible = true,
205
+
206
+ callback = function(element) {
207
+ element = $(element);
208
+ if (element.css("display") == "none" ||
209
+ element.css("visibility") == "hidden" ||
210
+ element.css("opacity") === 0) {
211
+ visible = false;
212
+ } else {
213
+ visible = true;
214
+ iterator.finalize();
215
+ }
216
+ };
217
+
218
+ if (this.some()) {
219
+ asIterable = this.asArray();
220
+ iterator = Iterable.Proxy.new(asIterable);
221
+ iterator.each(callback);
222
+ }
223
+
224
+ return visible;
225
+ },
226
+
227
+ removeAttr: function(attrName) {
228
+ var
229
+ block = function(node) {
230
+ node.removeAttribute(attrName);
231
+ };
232
+
233
+ this.each(block);
234
+
235
+ return this;
236
+ },
237
+
238
+ html: function(content) {
239
+ var
240
+ callback = function(element) {
241
+ element.innerHTML = content;
242
+ };
243
+
244
+ if (typeof content == "string") {
245
+ this.elements().selectEach(callback);
246
+ } else {
247
+ this.clean();
248
+ this.append(content);
249
+ }
250
+
251
+ return this;
252
+ }
253
+
254
+ });
255
+
256
+ }(esPhinx));
@@ -0,0 +1,227 @@
1
+ var
2
+ esPhinx;
3
+
4
+
5
+ (function($) {
6
+ "use strict";
7
+
8
+ var
9
+ nodes = [],
10
+ mappedListeners = {},
11
+
12
+ mapped = function(node) {
13
+ var
14
+ index = nodes.indexOfEquivalence(node);
15
+
16
+ return mappedListeners[index];
17
+ },
18
+
19
+ mapEventListener = function(node, eventName, runOnListener) {
20
+ var
21
+ index,
22
+ mappedNode = mapped(node),
23
+ map = {};
24
+
25
+ if (runOnListener) {
26
+ map[eventName] = [runOnListener];
27
+ if (mappedNode) {
28
+ if (mappedNode[eventName]) {
29
+ mappedNode[eventName].push(runOnListener);
30
+ } else {
31
+ mappedNode[eventName] = map[eventName];
32
+ }
33
+ return mappedNode[eventName];
34
+ } else {
35
+ nodes.push(node);
36
+ index = nodes.length - 1;
37
+ mappedListeners[index] = map;
38
+ return mappedListeners[index][eventName];
39
+ }
40
+ } else {
41
+ if (mappedNode) {
42
+ return mappedNode[eventName];
43
+ } else {
44
+ return [];
45
+ }
46
+ }
47
+ },
48
+
49
+ removeListener = function(node, eventName, runOnListener) {
50
+ var
51
+ mappedNode = mapped(node),
52
+ callbacks = mappedNode[eventName];
53
+
54
+ callbacks.delete(runOnListener);
55
+ },
56
+
57
+ removeListeners = function(node, eventName) {
58
+ var
59
+ mappedNode = mapped(node);
60
+
61
+ delete mappedNode[eventName];
62
+ },
63
+
64
+ mapEach = function(eventName, runOnListener, callback) {
65
+ var
66
+ iteratorBlock = function(node) {
67
+ if (node instanceof window.Node || node == window) {
68
+ mapEventListener(node, eventName, runOnListener);
69
+ callback.call(node);
70
+ }
71
+ };
72
+
73
+ this.each(iteratorBlock);
74
+ },
75
+
76
+ // qual seria o evento neste caso, para, por exemplo, usar o stopPropagation?
77
+ onChangeNode = function(runOnListener) {
78
+ var
79
+ added,
80
+ self = this,
81
+
82
+ callback = function(mutation) {
83
+ added = $(mutation.addedNodes).elements();
84
+ if (added.some()) {
85
+ runOnListener.call(self, added.asArray());
86
+ }
87
+ },
88
+
89
+ observeCallback = function(mutations) {
90
+ mutations.forEach(callback);
91
+
92
+ };
93
+
94
+
95
+ mapEach.call(self, "changeNode", runOnListener,
96
+ function() {
97
+ $(this).observe(observeCallback);
98
+ }
99
+ );
100
+
101
+ },
102
+
103
+ // will see how to unbind the node event
104
+ // offChangeNode = function(runOnListener) {
105
+ // // disconnect
106
+ // },
107
+
108
+ on = function(eventName, capture, runOnListener) {
109
+ var
110
+ cloned,
111
+ runOnLoad,
112
+ imgs,
113
+ self = this,
114
+ html = $("html"),
115
+ clone = self.clone(true),
116
+
117
+ callback = function(node) {
118
+ cloned = $(node);
119
+ cloned.hide();
120
+ html.prepend(node);
121
+
122
+ node.addEventListener(eventName, runOnLoad, capture);
123
+ },
124
+
125
+ iteratorBlock = function(node) {
126
+ node.removeEventListener(eventName, runOnLoad, capture);
127
+ };
128
+
129
+ if (typeof capture == "function") {
130
+ runOnListener = capture;
131
+ capture = false;
132
+ } else if (typeof capture != "boolean") {
133
+ capture = false;
134
+ }
135
+
136
+ switch (eventName) {
137
+ case "changeNode":
138
+ return onChangeNode.call(self, runOnListener);
139
+ case "load":
140
+ imgs = clone.find("img");
141
+ if (imgs.some()) {
142
+ clone = imgs;
143
+ }
144
+
145
+ runOnLoad = function(e) {
146
+ runOnListener.call(this, e);
147
+ html.remove(clone);
148
+
149
+ clone.each(iteratorBlock);
150
+ };
151
+
152
+ clone.each(callback);
153
+ break;
154
+
155
+ default:
156
+ mapEach.call(self, eventName, runOnListener,
157
+ function() {
158
+ this.addEventListener(eventName, runOnListener,
159
+ capture);
160
+ });
161
+ }
162
+ };
163
+
164
+
165
+ $.prototype.extend(true, {
166
+
167
+ on: function(eventName, capture, runOnListener) {
168
+ on.call(this, eventName, capture, runOnListener);
169
+
170
+ return this;
171
+ },
172
+
173
+ off: function(eventName, capture, runOnListener) {
174
+ var
175
+ callback,
176
+ node,
177
+
178
+ iteratorBlock = function(runOnListener) {
179
+ var
180
+ booleanIteratorBlock = function(capture) {
181
+ node.removeEventListener(eventName, runOnListener,
182
+ capture);
183
+ };
184
+
185
+ [true, false].forEach(booleanIteratorBlock);
186
+ removeListeners(node, eventName);
187
+ };
188
+
189
+ if (typeof capture == "function") {
190
+ runOnListener = capture;
191
+ capture = false;
192
+ } else if (typeof capture != "boolean") {
193
+ capture = false;
194
+ }
195
+
196
+ if (runOnListener) {
197
+ callback = function(n) {
198
+ node = n;
199
+ node.removeEventListener(eventName, runOnListener, capture);
200
+ removeListener(node, eventName, runOnListener);
201
+ };
202
+ } else {
203
+ callback = function(n) {
204
+ node = n;
205
+ if (mapped(node)) {
206
+ mapEventListener(node, eventName)
207
+ .forEach(iteratorBlock);
208
+ }
209
+ };
210
+ }
211
+
212
+ this.each(callback);
213
+
214
+ return this;
215
+ },
216
+
217
+ attachedEvent: function(eventName) {
218
+ if (mapped(this.asNode())[eventName]) {
219
+ return true;
220
+ }
221
+
222
+ return false;
223
+ }
224
+
225
+ });
226
+
227
+ })(esPhinx);