@finqu/cool 1.2.5 → 1.2.7

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 (44) hide show
  1. package/dist/css/cool-grid.css +2 -2
  2. package/dist/css/cool-grid.css.map +1 -1
  3. package/dist/css/cool-grid.min.css +1 -1
  4. package/dist/css/cool-grid.min.css.map +1 -1
  5. package/dist/css/cool-reboot.css +2 -2
  6. package/dist/css/cool-reboot.css.map +1 -1
  7. package/dist/css/cool-reboot.min.css +1 -1
  8. package/dist/css/cool-reboot.min.css.map +1 -1
  9. package/dist/css/cool.css +3 -2
  10. package/dist/css/cool.css.map +3 -3
  11. package/dist/css/cool.min.css +2 -2
  12. package/dist/css/cool.min.css.map +1 -1
  13. package/dist/js/cool.bundle.js +83 -23
  14. package/dist/js/cool.bundle.js.map +1 -1
  15. package/dist/js/cool.bundle.min.js +2 -2
  16. package/dist/js/cool.bundle.min.js.map +1 -1
  17. package/dist/js/cool.esm.js +83 -23
  18. package/dist/js/cool.esm.js.map +1 -1
  19. package/dist/js/cool.esm.min.js +2 -2
  20. package/dist/js/cool.esm.min.js.map +1 -1
  21. package/dist/js/cool.js +83 -23
  22. package/dist/js/cool.js.map +1 -1
  23. package/dist/js/cool.min.js +2 -2
  24. package/dist/js/cool.min.js.map +1 -1
  25. package/html/index.html +86 -0
  26. package/js/dist/collapse.js +2 -2
  27. package/js/dist/common.js +2 -2
  28. package/js/dist/dropdown.js +792 -691
  29. package/js/dist/dropdown.js.map +1 -1
  30. package/js/dist/popover.js +1840 -1727
  31. package/js/dist/popover.js.map +1 -1
  32. package/js/dist/sectiontabs.js +2 -2
  33. package/js/dist/select.js +4456 -3710
  34. package/js/dist/select.js.map +1 -1
  35. package/js/dist/tooltip.js +2 -2
  36. package/js/src/dropdown.js +10 -3
  37. package/js/src/popover.js +6 -0
  38. package/js/src/select.js +72 -20
  39. package/package.json +1 -1
  40. package/scss/LISENCE +1 -1
  41. package/scss/_frame.scss +1 -0
  42. package/scss/cool-grid.scss +2 -2
  43. package/scss/cool-reboot.scss +2 -2
  44. package/scss/cool.scss +2 -2
package/dist/js/cool.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /*!
2
- * Cool UI v1.2.4 (https://finqu.fi)
3
- * Copyright 2011-2019 Finqu Oy
2
+ * Cool UI v1.2.6 (https://finqu.fi)
3
+ * Copyright 2011-2020 Finqu Oy
4
4
  * Licensed under the ISC license - (http://opensource.org/licenses/ISC)
5
5
  */
6
6
  (function (global, factory) {
@@ -1675,6 +1675,7 @@
1675
1675
  _proto.buildCache = function buildCache() {
1676
1676
  this.$el = $(this.el);
1677
1677
  this.$container = this.$el.data('container') ? $(this.$el.data('container')) : $(this.opts.container);
1678
+ this.containerAutoDetect = this.$el.data('containerAutoDetect') ? this.$el.data('containerAutoDetect') : this.opts.containerAutoDetect;
1678
1679
  this.id = 'popover-' + this.generateUUID();
1679
1680
  this.animation = this.$el.data('animation') ? this.$el.data('animation') : this.opts.animation;
1680
1681
  this.animationIn = this.$el.data('animationIn') ? this.$el.data('animationIn') : this.opts.animationIn;
@@ -1685,6 +1686,10 @@
1685
1686
  this.placementChanged = false;
1686
1687
  this.title = this.$el.data('title') ? this.$el.data('title') : this.opts.title;
1687
1688
  this.content = this.$el.data('content') ? this.$el.data('content') : this.opts.content;
1689
+
1690
+ if (this.containerAutoDetect) {
1691
+ this.$container = this.$el.offsetParent();
1692
+ }
1688
1693
  } // Bind events that trigger methods
1689
1694
  ;
1690
1695
 
@@ -2109,6 +2114,7 @@
2109
2114
 
2110
2115
  $.fn[NAME].defaults = {
2111
2116
  container: '.content-inner',
2117
+ containerAutoDetect: false,
2112
2118
  trigger: 'focus',
2113
2119
  placement: 'bottom',
2114
2120
  animation: true,
@@ -2247,6 +2253,7 @@
2247
2253
  _this3.allowNoneOnRadioSelect = _this3.$el.data('allowNoneOnRadioSelect') ? _this3.$el.data('allowNoneOnRadioSelect') : _this3.opts.allowNoneOnRadioSelect;
2248
2254
  _this3.showValidStateIcon = _this3.$el.data('showValidStateIcon') ? _this3.$el.data('showValidStateIcon') : _this3.opts.showValidStateIcon;
2249
2255
  _this3.itemsToExclude = _this3.$el.data('itemsToExclude') ? _this3.$el.data('itemsToExclude').replace(/\s/g, '').split(',') : _this3.opts.itemsToExclude;
2256
+ _this3.primaryKeyword = _this3.$el.data('primaryKeyword') ? _this3.$el.data('primaryKeyword') : _this3.opts.primaryKeyword;
2250
2257
  _this3.preventClose = false;
2251
2258
 
2252
2259
  if (_this3.itemsToExclude.length > 0) {
@@ -2261,13 +2268,13 @@
2261
2268
  _this3.data = _this3.$el.data('setData');
2262
2269
  }
2263
2270
 
2264
- if (typeof _this3.data[_this3.name].filter !== 'undefined' && self.itemsToExclude) {
2271
+ if (_this3.data[_this3.name] !== 'undefined' && _this3.data[_this3.name].length > 0 && self.itemsToExclude) {
2265
2272
  _this3.data[_this3.name] = _this3.data[_this3.name].filter(function (item) {
2266
2273
  return self.itemsToExclude.indexOf(parseInt(item.id, 10)) === -1;
2267
2274
  });
2268
2275
  }
2269
2276
 
2270
- if (typeof _this3.items.filter !== 'undefined' && self.itemsToExclude) {
2277
+ if (_this3.items !== 'undefined' && _this3.items.lengths > 0 && self.itemsToExclude) {
2271
2278
  _this3.items = _this3.items.filter(function (item) {
2272
2279
  return self.itemsToExclude.indexOf(parseInt(item.id, 10)) === -1;
2273
2280
  });
@@ -2290,10 +2297,12 @@
2290
2297
  if (!_this3.$select.length) {
2291
2298
  var items = _this3._renderItemList(_this3.items);
2292
2299
 
2293
- _this3.$select = $("\n <div class=\"select-content\">\n\n " + _this3._renderSearch() + "\n\n <div class=\"select-scrollable-content\">" + items + "</div>\n\n " + _this3._renderFooter() + "\n\n </div>\n ");
2300
+ _this3.$select = $("\n <div class=\"select-content\">\n\n " + _this3._renderSearch() + "\n\n <div class=\"select-scrollable-content\"></div>\n\n " + _this3._renderFooter() + "\n\n </div>\n ");
2294
2301
 
2295
2302
  _this3.$el.append(_this3.$select);
2296
2303
 
2304
+ _this3.$select.find('.select-scrollable-content').append(items);
2305
+
2297
2306
  secondaryResolve();
2298
2307
  } else {
2299
2308
  secondaryResolve();
@@ -2603,14 +2612,30 @@
2603
2612
  url: searchUrl
2604
2613
  }).done(function (data) {
2605
2614
  var items = data.map(function (item) {
2606
- item.id = item.id.toString();
2615
+ item.id = item[self.primaryKeyword].toString();
2607
2616
  return item;
2608
2617
  });
2618
+ var itemIds = items.map(function (item) {
2619
+ return parseInt(item.id, 10);
2620
+ }); // Remove value from data if it doesn't exist anymore
2621
+
2622
+ self.data[self.name] = self.data[self.name].filter(function (value) {
2623
+ return itemIds.indexOf(parseInt(value, 10)) > -1;
2624
+ });
2625
+
2626
+ if (self.data[self.name].length == 0) {
2627
+ self.$selectIconContainer.html(self.selectIconDefault);
2628
+ }
2629
+
2609
2630
  items = items.filter(function (item) {
2610
2631
  return self.data[self.name].indexOf(item.id) > -1 && self.itemsToExclude.indexOf(parseInt(item.id, 10)) === -1 && parseInt(item.id, 10) > 0;
2611
2632
  });
2612
- var result = $(self._renderItemList(items));
2633
+
2634
+ var result = self._renderItemList(items);
2635
+
2613
2636
  $.when(self.$scrollableContent.append(result)).then(function () {
2637
+ var $inputs = self.$scrollableContent.find(':input');
2638
+
2614
2639
  if (self.$scrollableContent[0].offsetHeight < self.$scrollableContent[0].scrollHeight) {
2615
2640
  self.scroll.update();
2616
2641
  self.scroll.settings.suppressScrollY = false;
@@ -2621,22 +2646,22 @@
2621
2646
  self.$scrollableContent.removeClass('ps-show-rail-y');
2622
2647
  }
2623
2648
 
2624
- if (self.$select.find(':input[type="checkbox"]').length) {
2649
+ if (self.$scrollableContent.find(':input[type="checkbox"]').length) {
2625
2650
  self.type = 'checkbox';
2626
- } else if (self.$select.find(':input[type="radio"]').length) {
2651
+ } else if (self.$scrollableContent.find(':input[type="radio"]').length) {
2627
2652
  self.type = 'radio';
2628
2653
  }
2629
2654
 
2630
2655
  if (self.type == 'checkbox') {
2631
2656
  self.data[self.name].forEach(function (value) {
2632
- var $input = self.$select.find(':input').filter(function () {
2657
+ var $input = $inputs.filter(function () {
2633
2658
  return this.value == value;
2634
2659
  });
2635
2660
  $input.prop('checked', true);
2636
2661
  self.onSelect($input[0]);
2637
2662
  });
2638
2663
  } else if (self.type == 'radio') {
2639
- var $input = self.$select.find(':input').filter(function () {
2664
+ var $input = $inputs.filter(function () {
2640
2665
  return this.value == self.data[self.name];
2641
2666
  });
2642
2667
  $input.prop('checked', true);
@@ -2651,22 +2676,35 @@
2651
2676
  });
2652
2677
  });
2653
2678
  } else {
2654
- if (this.$select.find(':input[type="checkbox"]').length) {
2679
+ // Remove value from data if it doesn't exist anymore
2680
+ var $inputs = this.$scrollableContent.find(':input');
2681
+ var inputValues = $inputs.length > 0 ? $inputs.map(function () {
2682
+ return parseInt(this.value, 10);
2683
+ }).get() : [];
2684
+ this.data[this.name] = this.data[this.name].filter(function (value) {
2685
+ return inputValues.indexOf(parseInt(value, 10)) > -1;
2686
+ });
2687
+
2688
+ if (this.data[this.name].length == 0) {
2689
+ this.$selectIconContainer.html(this.selectIconDefault);
2690
+ }
2691
+
2692
+ if (this.$scrollableContent.find(':input[type="checkbox"]').length) {
2655
2693
  this.type = 'checkbox';
2656
- } else if (this.$select.find(':input[type="radio"]').length) {
2694
+ } else if (this.$scrollableContent.find(':input[type="radio"]').length) {
2657
2695
  this.type = 'radio';
2658
2696
  }
2659
2697
 
2660
2698
  if (this.type == 'checkbox') {
2661
2699
  this.data[this.name].forEach(function (value) {
2662
- var $input = self.$select.find(':input').filter(function () {
2700
+ var $input = $inputs.filter(function () {
2663
2701
  return this.value == value;
2664
2702
  });
2665
2703
  $input.prop('checked', true);
2666
2704
  self.onSelect($input[0]);
2667
2705
  });
2668
2706
  } else if (this.type == 'radio') {
2669
- var $input = this.$select.find(':input').filter(function () {
2707
+ var $input = $inputs.filter(function () {
2670
2708
  return this.value == self.data[self.name];
2671
2709
  });
2672
2710
  $input.prop('checked', true);
@@ -2694,13 +2732,15 @@
2694
2732
  url: this.searchApi + this.searchString
2695
2733
  }).done(function (data) {
2696
2734
  var items = data.map(function (item) {
2697
- item.id = item.id.toString();
2735
+ item.id = item[self.primaryKeyword].toString();
2698
2736
  return item;
2699
2737
  });
2700
2738
  items = items.filter(function (item) {
2701
2739
  return self.data[self.name].indexOf(item.id) === -1 && self.itemsToExclude.indexOf(parseInt(item.id, 10)) === -1 && parseInt(item.id, 10) > 0;
2702
2740
  });
2703
- var result = $(self._renderItemList(items));
2741
+
2742
+ var result = self._renderItemList(items);
2743
+
2704
2744
  $.when(self.$scrollableContent.append(result)).then(function () {
2705
2745
  var faNameSpace = self.opts.faPro ? 'fal' : 'fas';
2706
2746
  self.$searchIconContainer.html("<i class=\"" + faNameSpace + " fa-times icon\"></i>");
@@ -2822,10 +2862,22 @@
2822
2862
  ;
2823
2863
 
2824
2864
  _proto.onSelect = function onSelect(el) {
2865
+ var self = this;
2825
2866
  var onSelect = this.opts.onSelect;
2867
+ var data = $(el).parents('.select-item').data();
2868
+
2869
+ if (this.searchApi.length && !$.isEmptyObject(data)) {
2870
+ if ($(el).length && el.checked) {
2871
+ this.items.push(data);
2872
+ } else {
2873
+ this.items = $.grep(this.items, function (item) {
2874
+ return item[self.primaryKeyword] != data.id;
2875
+ });
2876
+ }
2877
+ }
2826
2878
 
2827
2879
  if (typeof onSelect === 'function') {
2828
- onSelect.call(el);
2880
+ onSelect.call(el, data, this);
2829
2881
  }
2830
2882
  } // Add more items after plugin is already initialized
2831
2883
  ;
@@ -3012,7 +3064,7 @@
3012
3064
  };
3013
3065
 
3014
3066
  _proto._renderItemList = function _renderItemList(items) {
3015
- var result = '';
3067
+ var result = [];
3016
3068
 
3017
3069
  for (var i = 0; i < items.length; ++i) {
3018
3070
  var item = items[i];
@@ -3030,7 +3082,7 @@
3030
3082
  }
3031
3083
  }
3032
3084
 
3033
- result += "\n\n <div class=\"select-item\">\n\n <div class=\"select-item-" + this.type + "\">\n\n <div class=\"styled-" + this.type + "\">\n\n <input type=\"" + this.type + "\" id=\"select-" + this.name + "-" + items[i].id + "\" value=\"" + items[i].id + "\" tabindex=\"-1\">\n\n <label for=\"select-" + this.name + "-" + items[i].id + "\">\n\n <span class=\"radio-inner\">\n <svg viewBox=\"0 0 18 18\">\n <polyline points=\"1.5 6 4.5 9 10.5 1\"></polyline>\n </svg>\n </span>\n\n <span class=\"" + this.type + "-label\"" + (typeof this.labelTemplate !== 'function' ? ' data-label' : '') + ">\n " + label + "\n </span>\n\n </label>\n\n </div>\n\n </div>\n\n </div>\n\n ";
3085
+ result.push($("\n\n <div class=\"select-item\">\n\n <div class=\"select-item-" + this.type + "\">\n\n <div class=\"styled-" + this.type + "\">\n\n <input type=\"" + this.type + "\" id=\"select-" + this.name + "-" + items[i].id + "\" value=\"" + items[i].id + "\" tabindex=\"-1\">\n\n <label for=\"select-" + this.name + "-" + items[i].id + "\">\n\n <span class=\"radio-inner\">\n <svg viewBox=\"0 0 18 18\">\n <polyline points=\"1.5 6 4.5 9 10.5 1\"></polyline>\n </svg>\n </span>\n\n <span class=\"" + this.type + "-label\"" + (typeof this.labelTemplate !== 'function' ? ' data-label' : '') + ">\n " + label + "\n </span>\n\n </label>\n\n </div>\n\n </div>\n\n </div>\n\n ").data(item));
3034
3086
  }
3035
3087
 
3036
3088
  return result;
@@ -3119,7 +3171,8 @@
3119
3171
  allowNoneOnRadioSelect: true,
3120
3172
  preventUncheck: false,
3121
3173
  showValidStateIcon: true,
3122
- itemsToExclude: []
3174
+ itemsToExclude: [],
3175
+ primaryKeyword: 'id'
3123
3176
  };
3124
3177
  }
3125
3178
 
@@ -3404,13 +3457,20 @@
3404
3457
  // and let's assume that this containing parent fits and is inside
3405
3458
  // viewport
3406
3459
  var $containingParent = this.$container.parent();
3460
+ var index = 0;
3407
3461
 
3408
- while ($containingParent.css('overflow-x') !== 'hidden' && $containingParent.css('overflow') !== 'hidden' && ($containingParent.prop('tagName') || '').toLowerCase() !== 'body') {
3462
+ while ($containingParent.css('overflow-x') !== 'hidden' && $containingParent.css('overflow') !== 'hidden' && ($containingParent.prop('tagName') || '').toLowerCase() !== 'body' && index < 100) {
3409
3463
  $containingParent = $containingParent.parent();
3410
3464
 
3411
- if (!$containingParent) {
3465
+ if (!$containingParent.get(0)) {
3412
3466
  return;
3413
3467
  }
3468
+
3469
+ ++index;
3470
+ }
3471
+
3472
+ if (!$containingParent.get(0)) {
3473
+ return;
3414
3474
  }
3415
3475
 
3416
3476
  var containingBoundingRect = $containingParent.get(0).getBoundingClientRect();