decorators.html 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>QUnit Example</title>
  6. <link href="../../dist/css/select2.css" rel="stylesheet"/>
  7. <script src="../../vendor/almond-0.2.9.js" type="text/javascript"></script>
  8. <script src="../../vendor/jquery-2.1.0.js" type="text/javascript"></script>
  9. <script src="../../dist/js/select2.js"></script>
  10. </head>
  11. <body>
  12. <input type="text" style="width:300px" autofocus/><br/>
  13. <select style="width:300px" id="source">
  14. <option value="AK">Alaska</option>
  15. <option value="HI">Hawaii</option>
  16. <option value="CA">California</option>
  17. <option value="NV">Nevada</option>
  18. <option value="OR">Oregon</option>
  19. <option value="WA">Washington</option>
  20. <option value="AZ">Arizona</option>
  21. <option value="CO">Colorado</option>
  22. <option value="ID">Idaho</option>
  23. <option value="MT">Montana</option>
  24. <option value="NE">Nebraska</option>
  25. <option value="NM">New Mexico</option>
  26. <option value="ND">North Dakota</option>
  27. <option value="UT">Utah</option>
  28. <option value="WY">Wyoming</option>
  29. <option value="AL">Alabama</option>
  30. <option value="AR">Arkansas</option>
  31. <option value="IL">Illinois</option>
  32. <option value="IA">Iowa</option>
  33. <option value="KS">Kansas</option>
  34. <option value="KY">Kentucky</option>
  35. <option value="LA">Louisiana</option>
  36. <option value="MN">Minnesota</option>
  37. <option value="MS">Mississippi</option>
  38. <option value="MO">Missouri</option>
  39. <option value="OK">Oklahoma</option>
  40. <option value="SD">South Dakota</option>
  41. <option value="TX">Texas</option>
  42. <option value="TN">Tennessee</option>
  43. <option value="WI">Wisconsin</option>
  44. <option value="CT">Connecticut</option>
  45. <option value="DE">Delaware</option>
  46. <option value="FL">Florida</option>
  47. <option value="GA">Georgia</option>
  48. <option value="IN">Indiana</option>
  49. <option value="ME">Maine</option>
  50. <option value="MD">Maryland</option>
  51. <option value="MA">Massachusetts</option>
  52. <option value="MI">Michigan</option>
  53. <option value="NH">New Hampshire</option>
  54. <option value="NJ">New Jersey</option>
  55. <option value="NY">New York</option>
  56. <option value="NC">North Carolina</option>
  57. <option value="OH">Ohio</option>
  58. <option value="PA">Pennsylvania</option>
  59. <option value="RI">Rhode Island</option>
  60. <option value="SC">South Carolina</option>
  61. <option value="VT">Vermont</option>
  62. <option value="VA">Virginia</option>
  63. <option value="WV">West Virginia</option>
  64. </select><br/>
  65. <input type="text" style="width:300px" /><br/>
  66. <select style="width:300px">
  67. <option value="AK">Alaska</option>
  68. <option value="HI">Hawaii</option>
  69. <option value="CA">California</option>
  70. <option value="NV">Nevada</option>
  71. <option value="OR">Oregon</option>
  72. <option value="WA">Washington</option>
  73. <option value="AZ">Arizona</option>
  74. <option value="CO">Colorado</option>
  75. <option value="ID">Idaho</option>
  76. <option value="MT">Montana</option>
  77. <option value="NE">Nebraska</option>
  78. <option value="NM">New Mexico</option>
  79. <option value="ND">North Dakota</option>
  80. <option value="UT">Utah</option>
  81. <option value="WY">Wyoming</option>
  82. <option value="AL">Alabama</option>
  83. <option value="AR">Arkansas</option>
  84. <option value="IL">Illinois</option>
  85. <option value="IA">Iowa</option>
  86. <option value="KS">Kansas</option>
  87. <option value="KY">Kentucky</option>
  88. <option value="LA">Louisiana</option>
  89. <option value="MN">Minnesota</option>
  90. <option value="MS">Mississippi</option>
  91. <option value="MO">Missouri</option>
  92. <option value="OK">Oklahoma</option>
  93. <option value="SD">South Dakota</option>
  94. <option value="TX">Texas</option>
  95. <option value="TN">Tennessee</option>
  96. <option value="WI">Wisconsin</option>
  97. <option value="CT">Connecticut</option>
  98. <option value="DE">Delaware</option>
  99. <option value="FL">Florida</option>
  100. <option value="GA">Georgia</option>
  101. <option value="IN">Indiana</option>
  102. <option value="ME">Maine</option>
  103. <option value="MD">Maryland</option>
  104. <option value="MA">Massachusetts</option>
  105. <option value="MI">Michigan</option>
  106. <option value="NH">New Hampshire</option>
  107. <option value="NJ">New Jersey</option>
  108. <option value="NY">New York</option>
  109. <option value="NC">North Carolina</option>
  110. <option value="OH">Ohio</option>
  111. <option value="PA">Pennsylvania</option>
  112. <option value="RI">Rhode Island</option>
  113. <option value="SC">South Carolina</option>
  114. <option value="VT">Vermont</option>
  115. <option value="VA">Virginia</option>
  116. <option value="WV">West Virginia</option>
  117. </select>
  118. <style>
  119. .clear {
  120. background-color: transparent;
  121. border: none;
  122. box-sizing: border-box;
  123. color: #666;
  124. cursor: pointer;
  125. display: none;
  126. font-size: 15px;
  127. font-weight: bold;
  128. height: 26px;
  129. outline: 0;
  130. position: absolute;
  131. top: 1px;
  132. right: 4px;
  133. width: 26px;
  134. }
  135. .clear:hover {
  136. color: #000;
  137. }
  138. .clearable {
  139. padding-right: 31px;
  140. }
  141. .clearable .clear {
  142. display: inline;
  143. }
  144. </style>
  145. <script>
  146. require(["select2/core", "select2/utils", "select2/selection/single",
  147. "select2/dropdown"], function (Select2, Utils, Selection, Dropdown) {
  148. function ClearSelection () { }
  149. ClearSelection.prototype.render = function (decorated) {
  150. var $selection = decorated.call(this);
  151. var $clear = $(
  152. '<button class="clear">&times;</button>'
  153. )
  154. $selection.append($clear);
  155. $selection.addClass("clearable");
  156. this.$clear = $clear;
  157. return $selection;
  158. };
  159. ClearSelection.prototype.bind = function (decorated, container, $container) {
  160. var self = this;
  161. decorated.call(this, container, $container);
  162. this.$container = $container;
  163. this.$clear.on("mousedown", function (evt) {
  164. evt.stopPropagation();
  165. var $first = $container.find("li").first();
  166. $first.mouseup();
  167. });
  168. };
  169. ClearSelection.prototype.update = function (decorated, data) {
  170. decorated.call(this, data);
  171. if (data.length == 0 || this.$container.find("li").length == 0) {
  172. this.$selection.removeClass("clearable");
  173. return;
  174. }
  175. var firstOption = this.$container.find("li").first().data("data");
  176. var firstData = data[0];
  177. if (firstOption.id == firstData.id) {
  178. this.$selection.removeClass("clearable");
  179. } else {
  180. this.$selection.addClass("clearable");
  181. }
  182. };
  183. function DropdownFooter () { }
  184. DropdownFooter.prototype.render = function (decorated) {
  185. var $dropdown = decorated.call(this);
  186. $dropdown.append('<div class="footer">My custom footer</div>');
  187. return $dropdown;
  188. }
  189. function DropdownHeader () { }
  190. DropdownHeader.prototype.render = function (decorated) {
  191. var $dropdown = decorated.call(this);
  192. $dropdown.prepend('<div class="header">Some custom header</div>');
  193. return $dropdown;
  194. }
  195. var CustomSelection = Utils.Decorate(Selection, ClearSelection)
  196. var CustomDropdown = Utils.Decorate(
  197. Utils.Decorate(Dropdown, DropdownHeader),
  198. DropdownFooter
  199. );
  200. var s2 = new Select2($("#source"), {
  201. selectionAdapter: CustomSelection,
  202. dropdownAdapter: CustomDropdown
  203. });
  204. });
  205. </script>
  206. </body>
  207. </html>