rocketjob_mission_control 6.0.0 → 6.0.1

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.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/{vendor → app}/assets/fonts/glyphicons-halflings-regular.eot +0 -0
  3. data/{vendor → app}/assets/fonts/glyphicons-halflings-regular.svg +0 -0
  4. data/{vendor → app}/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
  5. data/{vendor → app}/assets/fonts/glyphicons-halflings-regular.woff +0 -0
  6. data/{vendor → app}/assets/fonts/glyphicons-halflings-regular.woff2 +0 -0
  7. data/app/assets/javascripts/rocket_job_mission_control/application.js +9 -10
  8. data/app/assets/javascripts/rocket_job_mission_control/base.js +1 -1
  9. data/{vendor/assets/javascripts → app/assets/javascripts/rocket_job_mission_control}/bootstrap.min.js +0 -0
  10. data/app/assets/javascripts/rocket_job_mission_control/{datatable.js → datatable_init.js} +0 -0
  11. data/{vendor/assets/javascripts → app/assets/javascripts/rocket_job_mission_control}/datatables.min.js +0 -0
  12. data/app/assets/javascripts/rocket_job_mission_control/dirmon_entries.js +1 -1
  13. data/{vendor/assets/javascripts → app/assets/javascripts/rocket_job_mission_control}/jquery-3.5.1.min.js +0 -0
  14. data/app/assets/javascripts/rocket_job_mission_control/nested_fields.js +2 -2
  15. data/app/assets/javascripts/rocket_job_mission_control/selectize.min.js +3 -0
  16. data/app/assets/javascripts/rocket_job_mission_control/selectize_init.js +6 -0
  17. data/app/assets/stylesheets/rocket_job_mission_control/application.css +5 -5
  18. data/{vendor/assets/stylesheets → app/assets/stylesheets/rocket_job_mission_control}/bootstrap.min.css.erb +0 -0
  19. data/{vendor/assets/stylesheets → app/assets/stylesheets/rocket_job_mission_control}/bootstrap.min.css.map +0 -0
  20. data/{vendor/assets/stylesheets → app/assets/stylesheets/rocket_job_mission_control}/datatables.min.css +0 -0
  21. data/{vendor/assets/stylesheets → app/assets/stylesheets/rocket_job_mission_control}/fontawesome-all.min.css.erb +0 -0
  22. data/app/assets/stylesheets/rocket_job_mission_control/selectize.bootstrap3.css +1 -0
  23. data/app/assets/stylesheets/rocket_job_mission_control/selectize.css +19 -0
  24. data/app/helpers/rocket_job_mission_control/application_helper.rb +1 -1
  25. data/app/views/layouts/rocket_job_mission_control/application.html.erb +2 -2
  26. data/lib/rocket_job_mission_control/engine.rb +2 -0
  27. data/lib/rocket_job_mission_control/version.rb +1 -1
  28. metadata +33 -21
  29. data/app/assets/javascripts/rocket_job_mission_control/selectize.js +0 -8
  30. data/vendor/assets/javascripts/microplugin.js +0 -135
  31. data/vendor/assets/javascripts/selectize.js +0 -3058
  32. data/vendor/assets/javascripts/sifter.js +0 -470
  33. data/vendor/assets/stylesheets/selectize.bootstrap3.css +0 -408
  34. data/vendor/assets/stylesheets/selectize.css +0 -317
@@ -1,470 +0,0 @@
1
- /**
2
- * sifter.js
3
- * Copyright (c) 2013 Brian Reavis & contributors
4
- *
5
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
6
- * file except in compliance with the License. You may obtain a copy of the License at:
7
- * http://www.apache.org/licenses/LICENSE-2.0
8
- *
9
- * Unless required by applicable law or agreed to in writing, software distributed under
10
- * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
- * ANY KIND, either express or implied. See the License for the specific language
12
- * governing permissions and limitations under the License.
13
- *
14
- * @author Brian Reavis <brian@thirdroute.com>
15
- */
16
-
17
- (function(root, factory) {
18
- if (typeof define === 'function' && define.amd) {
19
- define(factory);
20
- } else if (typeof exports === 'object') {
21
- module.exports = factory();
22
- } else {
23
- root.Sifter = factory();
24
- }
25
- }(this, function() {
26
-
27
- /**
28
- * Textually searches arrays and hashes of objects
29
- * by property (or multiple properties). Designed
30
- * specifically for autocomplete.
31
- *
32
- * @constructor
33
- * @param {array|object} items
34
- * @param {object} items
35
- */
36
- var Sifter = function(items, settings) {
37
- this.items = items;
38
- this.settings = settings || {diacritics: true};
39
- };
40
-
41
- /**
42
- * Splits a search string into an array of individual
43
- * regexps to be used to match results.
44
- *
45
- * @param {string} query
46
- * @returns {array}
47
- */
48
- Sifter.prototype.tokenize = function(query) {
49
- query = trim(String(query || '').toLowerCase());
50
- if (!query || !query.length) return [];
51
-
52
- var i, n, regex, letter;
53
- var tokens = [];
54
- var words = query.split(/ +/);
55
-
56
- for (i = 0, n = words.length; i < n; i++) {
57
- regex = escape_regex(words[i]);
58
- if (this.settings.diacritics) {
59
- for (letter in DIACRITICS) {
60
- if (DIACRITICS.hasOwnProperty(letter)) {
61
- regex = regex.replace(new RegExp(letter, 'g'), DIACRITICS[letter]);
62
- }
63
- }
64
- }
65
- tokens.push({
66
- string : words[i],
67
- regex : new RegExp(regex, 'i')
68
- });
69
- }
70
-
71
- return tokens;
72
- };
73
-
74
- /**
75
- * Iterates over arrays and hashes.
76
- *
77
- * ```
78
- * this.iterator(this.items, function(item, id) {
79
- * // invoked for each item
80
- * });
81
- * ```
82
- *
83
- * @param {array|object} object
84
- */
85
- Sifter.prototype.iterator = function(object, callback) {
86
- var iterator;
87
- if (is_array(object)) {
88
- iterator = Array.prototype.forEach || function(callback) {
89
- for (var i = 0, n = this.length; i < n; i++) {
90
- callback(this[i], i, this);
91
- }
92
- };
93
- } else {
94
- iterator = function(callback) {
95
- for (var key in this) {
96
- if (this.hasOwnProperty(key)) {
97
- callback(this[key], key, this);
98
- }
99
- }
100
- };
101
- }
102
-
103
- iterator.apply(object, [callback]);
104
- };
105
-
106
- /**
107
- * Returns a function to be used to score individual results.
108
- *
109
- * Good matches will have a higher score than poor matches.
110
- * If an item is not a match, 0 will be returned by the function.
111
- *
112
- * @param {object|string} search
113
- * @param {object} options (optional)
114
- * @returns {function}
115
- */
116
- Sifter.prototype.getScoreFunction = function(search, options) {
117
- var self, fields, tokens, token_count;
118
-
119
- self = this;
120
- search = self.prepareSearch(search, options);
121
- tokens = search.tokens;
122
- fields = search.options.fields;
123
- token_count = tokens.length;
124
-
125
- /**
126
- * Calculates how close of a match the
127
- * given value is against a search token.
128
- *
129
- * @param {mixed} value
130
- * @param {object} token
131
- * @return {number}
132
- */
133
- var scoreValue = function(value, token) {
134
- var score, pos;
135
-
136
- if (!value) return 0;
137
- value = String(value || '');
138
- pos = value.search(token.regex);
139
- if (pos === -1) return 0;
140
- score = token.string.length / value.length;
141
- if (pos === 0) score += 0.5;
142
- return score;
143
- };
144
-
145
- /**
146
- * Calculates the score of an object
147
- * against the search query.
148
- *
149
- * @param {object} token
150
- * @param {object} data
151
- * @return {number}
152
- */
153
- var scoreObject = (function() {
154
- var field_count = fields.length;
155
- if (!field_count) {
156
- return function() { return 0; };
157
- }
158
- if (field_count === 1) {
159
- return function(token, data) {
160
- return scoreValue(data[fields[0]], token);
161
- };
162
- }
163
- return function(token, data) {
164
- for (var i = 0, sum = 0; i < field_count; i++) {
165
- sum += scoreValue(data[fields[i]], token);
166
- }
167
- return sum / field_count;
168
- };
169
- })();
170
-
171
- if (!token_count) {
172
- return function() { return 0; };
173
- }
174
- if (token_count === 1) {
175
- return function(data) {
176
- return scoreObject(tokens[0], data);
177
- };
178
- }
179
-
180
- if (search.options.conjunction === 'and') {
181
- return function(data) {
182
- var score;
183
- for (var i = 0, sum = 0; i < token_count; i++) {
184
- score = scoreObject(tokens[i], data);
185
- if (score <= 0) return 0;
186
- sum += score;
187
- }
188
- return sum / token_count;
189
- };
190
- } else {
191
- return function(data) {
192
- for (var i = 0, sum = 0; i < token_count; i++) {
193
- sum += scoreObject(tokens[i], data);
194
- }
195
- return sum / token_count;
196
- };
197
- }
198
- };
199
-
200
- /**
201
- * Returns a function that can be used to compare two
202
- * results, for sorting purposes. If no sorting should
203
- * be performed, `null` will be returned.
204
- *
205
- * @param {string|object} search
206
- * @param {object} options
207
- * @return function(a,b)
208
- */
209
- Sifter.prototype.getSortFunction = function(search, options) {
210
- var i, n, self, field, fields, fields_count, multiplier, multipliers, get_field, implicit_score, sort;
211
-
212
- self = this;
213
- search = self.prepareSearch(search, options);
214
- sort = (!search.query && options.sort_empty) || options.sort;
215
-
216
- /**
217
- * Fetches the specified sort field value
218
- * from a search result item.
219
- *
220
- * @param {string} name
221
- * @param {object} result
222
- * @return {mixed}
223
- */
224
- get_field = function(name, result) {
225
- if (name === '$score') return result.score;
226
- return self.items[result.id][name];
227
- };
228
-
229
- // parse options
230
- fields = [];
231
- if (sort) {
232
- for (i = 0, n = sort.length; i < n; i++) {
233
- if (search.query || sort[i].field !== '$score') {
234
- fields.push(sort[i]);
235
- }
236
- }
237
- }
238
-
239
- // the "$score" field is implied to be the primary
240
- // sort field, unless it's manually specified
241
- if (search.query) {
242
- implicit_score = true;
243
- for (i = 0, n = fields.length; i < n; i++) {
244
- if (fields[i].field === '$score') {
245
- implicit_score = false;
246
- break;
247
- }
248
- }
249
- if (implicit_score) {
250
- fields.unshift({field: '$score', direction: 'desc'});
251
- }
252
- } else {
253
- for (i = 0, n = fields.length; i < n; i++) {
254
- if (fields[i].field === '$score') {
255
- fields.splice(i, 1);
256
- break;
257
- }
258
- }
259
- }
260
-
261
- multipliers = [];
262
- for (i = 0, n = fields.length; i < n; i++) {
263
- multipliers.push(fields[i].direction === 'desc' ? -1 : 1);
264
- }
265
-
266
- // build function
267
- fields_count = fields.length;
268
- if (!fields_count) {
269
- return null;
270
- } else if (fields_count === 1) {
271
- field = fields[0].field;
272
- multiplier = multipliers[0];
273
- return function(a, b) {
274
- return multiplier * cmp(
275
- get_field(field, a),
276
- get_field(field, b)
277
- );
278
- };
279
- } else {
280
- return function(a, b) {
281
- var i, result, a_value, b_value, field;
282
- for (i = 0; i < fields_count; i++) {
283
- field = fields[i].field;
284
- result = multipliers[i] * cmp(
285
- get_field(field, a),
286
- get_field(field, b)
287
- );
288
- if (result) return result;
289
- }
290
- return 0;
291
- };
292
- }
293
- };
294
-
295
- /**
296
- * Parses a search query and returns an object
297
- * with tokens and fields ready to be populated
298
- * with results.
299
- *
300
- * @param {string} query
301
- * @param {object} options
302
- * @returns {object}
303
- */
304
- Sifter.prototype.prepareSearch = function(query, options) {
305
- if (typeof query === 'object') return query;
306
-
307
- options = extend({}, options);
308
-
309
- var option_fields = options.fields;
310
- var option_sort = options.sort;
311
- var option_sort_empty = options.sort_empty;
312
-
313
- if (option_fields && !is_array(option_fields)) options.fields = [option_fields];
314
- if (option_sort && !is_array(option_sort)) options.sort = [option_sort];
315
- if (option_sort_empty && !is_array(option_sort_empty)) options.sort_empty = [option_sort_empty];
316
-
317
- return {
318
- options : options,
319
- query : String(query || '').toLowerCase(),
320
- tokens : this.tokenize(query),
321
- total : 0,
322
- items : []
323
- };
324
- };
325
-
326
- /**
327
- * Searches through all items and returns a sorted array of matches.
328
- *
329
- * The `options` parameter can contain:
330
- *
331
- * - fields {string|array}
332
- * - sort {array}
333
- * - score {function}
334
- * - filter {bool}
335
- * - limit {integer}
336
- *
337
- * Returns an object containing:
338
- *
339
- * - options {object}
340
- * - query {string}
341
- * - tokens {array}
342
- * - total {int}
343
- * - items {array}
344
- *
345
- * @param {string} query
346
- * @param {object} options
347
- * @returns {object}
348
- */
349
- Sifter.prototype.search = function(query, options) {
350
- var self = this, value, score, search, calculateScore;
351
- var fn_sort;
352
- var fn_score;
353
-
354
- search = this.prepareSearch(query, options);
355
- options = search.options;
356
- query = search.query;
357
-
358
- // generate result scoring function
359
- fn_score = options.score || self.getScoreFunction(search);
360
-
361
- // perform search and sort
362
- if (query.length) {
363
- self.iterator(self.items, function(item, id) {
364
- score = fn_score(item);
365
- if (options.filter === false || score > 0) {
366
- search.items.push({'score': score, 'id': id});
367
- }
368
- });
369
- } else {
370
- self.iterator(self.items, function(item, id) {
371
- search.items.push({'score': 1, 'id': id});
372
- });
373
- }
374
-
375
- fn_sort = self.getSortFunction(search, options);
376
- if (fn_sort) search.items.sort(fn_sort);
377
-
378
- // apply limits
379
- search.total = search.items.length;
380
- if (typeof options.limit === 'number') {
381
- search.items = search.items.slice(0, options.limit);
382
- }
383
-
384
- return search;
385
- };
386
-
387
- // utilities
388
- // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
389
-
390
- var cmp = function(a, b) {
391
- if (typeof a === 'number' && typeof b === 'number') {
392
- return a > b ? 1 : (a < b ? -1 : 0);
393
- }
394
- a = asciifold(String(a || ''));
395
- b = asciifold(String(b || ''));
396
- if (a > b) return 1;
397
- if (b > a) return -1;
398
- return 0;
399
- };
400
-
401
- var extend = function(a, b) {
402
- var i, n, k, object;
403
- for (i = 1, n = arguments.length; i < n; i++) {
404
- object = arguments[i];
405
- if (!object) continue;
406
- for (k in object) {
407
- if (object.hasOwnProperty(k)) {
408
- a[k] = object[k];
409
- }
410
- }
411
- }
412
- return a;
413
- };
414
-
415
- var trim = function(str) {
416
- return (str + '').replace(/^\s+|\s+$|/g, '');
417
- };
418
-
419
- var escape_regex = function(str) {
420
- return (str + '').replace(/([.?*+^$[\]\\(){}|-])/g, '\\$1');
421
- };
422
-
423
- var is_array = Array.isArray || ($ && $.isArray) || function(object) {
424
- return Object.prototype.toString.call(object) === '[object Array]';
425
- };
426
-
427
- var DIACRITICS = {
428
- 'a': '[aÀÁÂÃÄÅàáâãäåĀāąĄ]',
429
- 'c': '[cÇçćĆčČ]',
430
- 'd': '[dđĐďĎð]',
431
- 'e': '[eÈÉÊËèéêëěĚĒēęĘ]',
432
- 'i': '[iÌÍÎÏìíîïĪī]',
433
- 'l': '[lłŁ]',
434
- 'n': '[nÑñňŇńŃ]',
435
- 'o': '[oÒÓÔÕÕÖØòóôõöøŌō]',
436
- 'r': '[rřŘ]',
437
- 's': '[sŠšśŚ]',
438
- 't': '[tťŤ]',
439
- 'u': '[uÙÚÛÜùúûüůŮŪū]',
440
- 'y': '[yŸÿýÝ]',
441
- 'z': '[zŽžżŻźŹ]'
442
- };
443
-
444
- var asciifold = (function() {
445
- var i, n, k, chunk;
446
- var foreignletters = '';
447
- var lookup = {};
448
- for (k in DIACRITICS) {
449
- if (DIACRITICS.hasOwnProperty(k)) {
450
- chunk = DIACRITICS[k].substring(2, DIACRITICS[k].length - 1);
451
- foreignletters += chunk;
452
- for (i = 0, n = chunk.length; i < n; i++) {
453
- lookup[chunk.charAt(i)] = k;
454
- }
455
- }
456
- }
457
- var regexp = new RegExp('[' + foreignletters + ']', 'g');
458
- return function(str) {
459
- return str.replace(regexp, function(foreignletter) {
460
- return lookup[foreignletter];
461
- }).toLowerCase();
462
- };
463
- })();
464
-
465
-
466
- // export
467
- // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
468
-
469
- return Sifter;
470
- }));