PageRenderTime 69ms CodeModel.GetById 17ms RepoModel.GetById 1ms app.codeStats 0ms

/front-end-1/scripts/select.js

https://gitlab.com/CDNDR/good-night-medical
JavaScript | 196 lines | 172 code | 23 blank | 1 comment | 30 complexity | 5ae77b9811723ef1f2b0c88d569e486f MD5 | raw file
  1. // Для Drop Down jQuery UI
  2. $(function() {
  3. $('#select-img').ddslick({
  4. onSelected: function displayDataConsole(data) {
  5. console.log(data);
  6. }
  7. });
  8. });
  9. (function(e) {
  10. e.fn.ddslick = function(l) {
  11. if (c[l]) {
  12. return c[l].apply(this, Array.prototype.slice.call(arguments, 1))
  13. } else {
  14. if (typeof l === "object" || !l) {
  15. return c.init.apply(this, arguments)
  16. } else { e.error("Method " + l + " does not exists.") }
  17. }
  18. };
  19. var c = {},
  20. d = {data: [],
  21. keepJSONItemsOnTop: false,
  22. selectText: "",
  23. defaultSelectedIndex: null,
  24. truncateDescription: true,
  25. imagePosition: "left",
  26. showSelectedHTML: true,
  27. clickOffToClose: true,
  28. embedCSS: false,
  29. onSelected: function(){}},
  30. i = '<div class="dd-select">' +
  31. '<input class="dd-selected-value" type="hidden" />' +
  32. '<a class="dd-selected"></a>' +
  33. '<span class="dd-pointer dd-pointer-down"></span>' +
  34. '</div>',
  35. a = '<ul class="dd-options"></ul>';
  36. c.init = function(l) {
  37. var l = e.extend({}, d, l);
  38. return this.each(function() {
  39. var p = e(this),
  40. q = p.data("ddslick");
  41. if (!q) {
  42. var n = [],
  43. o = l.data;
  44. p.find("option").each(function() {
  45. var w = e(this),
  46. v = w.data();
  47. n.push({ text: e.trim(w.text()), value: w.val(), selected: w.is(":selected"), description: v.description, imageSrc: v.imagesrc })
  48. });
  49. if (l.keepJSONItemsOnTop) { e.merge(l.data, n) }
  50. else { l.data = e.merge(n, l.data) }
  51. var m = p,
  52. s = e('<div id="' + p.attr("id") + '"></div>');
  53. p.replaceWith(s);
  54. p = s;
  55. p.addClass("dd-container").append(i).append(a);
  56. var n = p.find(".dd-select"),
  57. u = p.find(".dd-options");
  58. e.each(l.data, function(v, w) {
  59. if (w.selected) { l.defaultSelectedIndex = v }
  60. u.append('<li><a class="dd-option">' +
  61. (w.value ? ' <input class="dd-option-value" type="hidden" value="' +
  62. w.value + '" />' : "") +
  63. (w.imageSrc ? ' <img class="dd-option-image' +
  64. (l.imagePosition == "right" ? " dd-image-right" : "") +
  65. '" src="' +
  66. w.imageSrc +
  67. '" />' : "") +
  68. (w.text ? ' <label class="dd-option-text">' +
  69. w.text + "</label>" : "") +
  70. (w.description ? ' <small class="dd-option-description dd-desc">' +
  71. w.description + "</small>" : "") +
  72. "</a></li>")
  73. });
  74. var t = { settings: l,
  75. original: m,
  76. selectedIndex: -1,
  77. selectedItem: null,
  78. selectedData: null};
  79. p.data("ddslick", t);
  80. if (l.selectText.length > 0 && l.defaultSelectedIndex == null)
  81. { p.find(".dd-selected").html(l.selectText) }
  82. else {
  83. var r = (l.defaultSelectedIndex != null && l.defaultSelectedIndex >= 0 && l.defaultSelectedIndex < l.data.length) ? l.defaultSelectedIndex : 0;
  84. j(p, r);
  85. }
  86. p.find(".dd-select").on("click.ddslick", function() { f(p) });
  87. p.find(".dd-option").on("click.ddslick", function() { j(p, e(this).closest("li").index()) });
  88. if (l.clickOffToClose) {
  89. u.addClass("dd-click-off-close");
  90. p.on("click.ddslick", function(v) { v.stopPropagation() });
  91. e("body").on("click", function() { e(".dd-click-off-close").slideUp(50).siblings(".dd-select").find(".dd-pointer").removeClass("dd-pointer-up") });
  92. }
  93. }
  94. })
  95. };
  96. c.select = function(l) {
  97. return this.each(function() {
  98. if (l.index !== undefined) { j(e(this), l.index) }
  99. })
  100. };
  101. c.open = function() {
  102. return this.each(function() {
  103. var m = e(this),
  104. l = m.data("ddslick");
  105. if (l) { f(m) }
  106. })
  107. };
  108. c.close = function() {
  109. return this.each(function() {
  110. var m = e(this),
  111. l = m.data("ddslick");
  112. if (l) { k(m) }
  113. })
  114. };
  115. function j(q, s) {
  116. var u = q.data("ddslick");
  117. var r = q.find(".dd-selected"),
  118. n = r.siblings(".dd-selected-value"),
  119. v = q.find(".dd-options"),
  120. l = r.siblings(".dd-pointer"),
  121. p = q.find(".dd-option").eq(s),
  122. m = p.closest("li"),
  123. o = u.settings,
  124. t = u.settings.data[s];
  125. q.find(".dd-option").removeClass("dd-option-selected");
  126. p.addClass("dd-option-selected");
  127. u.selectedIndex = s;
  128. u.selectedItem = m;
  129. u.selectedData = t;
  130. if (o.showSelectedHTML) { r.html((t.imageSrc ? '<img class="dd-selected-image' + (o.imagePosition == "right" ? " dd-image-right" : "") + '" src="' + t.imageSrc + '" />' : "") + (t.text ? '<label class="dd-selected-text">' + t.text + "</label>" : "") + (t.description ? '<small class="dd-selected-description dd-desc' + (o.truncateDescription ? " dd-selected-description-truncated" : "") + '" >' + t.description + "</small>" : "")) } else { r.html(t.text) }
  131. n.val(t.value);
  132. u.original.val(t.value);
  133. q.data("ddslick", u);
  134. k(q);
  135. g(q);
  136. if (typeof o.onSelected == "function") { o.onSelected.call(this, u) }
  137. }
  138. function f(p) {
  139. var o = p.find(".dd-select"),
  140. m = o.siblings(".dd-options"),
  141. l = o.find(".dd-pointer"),
  142. n = m.is(":visible");
  143. e(".dd-click-off-close").not(m).slideUp(50);
  144. e(".dd-pointer").removeClass("dd-pointer-up");
  145. if (n) {
  146. m.slideUp("fast");
  147. l.removeClass("dd-pointer-up")
  148. } else {
  149. m.slideDown("fast");
  150. l.addClass("dd-pointer-up")
  151. }
  152. h(p)
  153. }
  154. function k(l) {
  155. l.find(".dd-options").slideUp(50);
  156. l.find(".dd-pointer").removeClass("dd-pointer-up").removeClass("dd-pointer-up")
  157. }
  158. function g(o) {
  159. var n = o.find(".dd-select").css("height");
  160. var m = o.find(".dd-selected-description");
  161. var l = o.find(".dd-selected-image");
  162. if (m.length <= 0 && l.length > 0) { o.find(".dd-selected-text").css("lineHeight", n) }
  163. }
  164. function h(l) {
  165. l.find(".dd-option").each(function() {
  166. var p = e(this);
  167. var n = p.css("height");
  168. var o = p.find(".dd-option-description");
  169. var m = l.find(".dd-option-image");
  170. if (o.length <= 0 && m.length > 0) { p.find(".dd-option-text").css("lineHeight", n) }
  171. })
  172. }
  173. })(jQuery);