slickgrid-requirejs-rails 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (189) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.md +5 -0
  3. data/Rakefile +40 -0
  4. data/app/assets/stylesheets/slickgrid-requirejs-rails/application.css +13 -0
  5. data/app/controllers/slickgrid-requirejs-rails/application_controller.rb +4 -0
  6. data/app/helpers/slickgrid-requirejs-rails/application_helper.rb +4 -0
  7. data/app/views/layouts/slickgrid-requirejs-rails/application.html.erb +14 -0
  8. data/config/routes.rb +2 -0
  9. data/lib/slickgrid-requirejs-rails.rb +4 -0
  10. data/lib/slickgrid-requirejs-rails/engine.rb +5 -0
  11. data/lib/slickgrid-requirejs-rails/version.rb +3 -0
  12. data/lib/tasks/slickgrid-requirejs-rails_tasks.rake +35 -0
  13. data/test/dummy/README.rdoc +261 -0
  14. data/test/dummy/Rakefile +7 -0
  15. data/test/dummy/app/assets/javascripts/adapters/jquery-adapter.js +4 -0
  16. data/test/dummy/app/assets/javascripts/application.js.coffee +33 -0
  17. data/test/dummy/app/assets/javascripts/jquery.spreadsheet.js.coffee +105 -0
  18. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  19. data/test/dummy/app/assets/stylesheets/examples.css +4 -0
  20. data/test/dummy/app/controllers/application_controller.rb +3 -0
  21. data/test/dummy/app/controllers/examples_controller.rb +4 -0
  22. data/test/dummy/app/helpers/application_helper.rb +2 -0
  23. data/test/dummy/app/helpers/examples_helper.rb +2 -0
  24. data/test/dummy/app/views/examples/simple.html.erb +7 -0
  25. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  26. data/test/dummy/config.ru +4 -0
  27. data/test/dummy/config/application.rb +60 -0
  28. data/test/dummy/config/boot.rb +10 -0
  29. data/test/dummy/config/database.yml +25 -0
  30. data/test/dummy/config/environment.rb +5 -0
  31. data/test/dummy/config/environments/development.rb +37 -0
  32. data/test/dummy/config/environments/production.rb +67 -0
  33. data/test/dummy/config/environments/test.rb +37 -0
  34. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  35. data/test/dummy/config/initializers/better_errors.rb +1 -0
  36. data/test/dummy/config/initializers/inflections.rb +15 -0
  37. data/test/dummy/config/initializers/mime_types.rb +5 -0
  38. data/test/dummy/config/initializers/secret_token.rb +7 -0
  39. data/test/dummy/config/initializers/session_store.rb +8 -0
  40. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  41. data/test/dummy/config/locales/en.yml +5 -0
  42. data/test/dummy/config/requirejs.yml +13 -0
  43. data/test/dummy/config/routes.rb +8 -0
  44. data/test/dummy/db/development.sqlite3 +0 -0
  45. data/test/dummy/log/development.log +2689 -0
  46. data/test/dummy/public/404.html +26 -0
  47. data/test/dummy/public/422.html +26 -0
  48. data/test/dummy/public/500.html +25 -0
  49. data/test/dummy/public/favicon.ico +0 -0
  50. data/test/dummy/script/rails +6 -0
  51. data/test/dummy/test/functional/examples_controller_test.rb +9 -0
  52. data/test/dummy/test/unit/helpers/examples_helper_test.rb +4 -0
  53. data/test/dummy/tmp/cache/assets/C27/240/sprockets%2Fc8d5e87e720ed4622105328524983048 +0 -0
  54. data/test/dummy/tmp/cache/assets/C42/A50/sprockets%2Fd83155902707b71eb877b3e0208205a0 +0 -0
  55. data/test/dummy/tmp/cache/assets/C80/150/sprockets%2F0d3881005b0646df783d5c24683d34f5 +0 -0
  56. data/test/dummy/tmp/cache/assets/C86/850/sprockets%2F75355848fa7b7065acb91b2634b29085 +0 -0
  57. data/test/dummy/tmp/cache/assets/C94/2C0/sprockets%2Fb5279968d5df8680a33776e0b74a8216 +0 -0
  58. data/test/dummy/tmp/cache/assets/CA9/390/sprockets%2F1891532332d1ff2d2ec0c4884168be24 +0 -0
  59. data/test/dummy/tmp/cache/assets/CB0/3D0/sprockets%2F378c2bc8804c6452508a5905c47b38ca +0 -0
  60. data/test/dummy/tmp/cache/assets/CB4/7D0/sprockets%2F1dc73f77b8d81bbc4a23579054295723 +0 -0
  61. data/test/dummy/tmp/cache/assets/CB7/EB0/sprockets%2F4de19cf2920983cc7502b38a537849a3 +0 -0
  62. data/test/dummy/tmp/cache/assets/CBA/210/sprockets%2F9cb316b6777b84fc332524911d7e645e +0 -0
  63. data/test/dummy/tmp/cache/assets/CBD/8E0/sprockets%2F5b5f989386cc9495a08127dbc42b3615 +0 -0
  64. data/test/dummy/tmp/cache/assets/CCA/480/sprockets%2F6d10d00d7c82276924f3e22e6210fa0b +0 -0
  65. data/test/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953 +0 -0
  66. data/test/dummy/tmp/cache/assets/CDC/260/sprockets%2F6b925351de71c9bd9c021310669dfc70 +0 -0
  67. data/test/dummy/tmp/cache/assets/CDE/090/sprockets%2F15056f2ede4e042d8737f4801fa6b157 +0 -0
  68. data/test/dummy/tmp/cache/assets/CE4/AC0/sprockets%2Fe1db88f51455f23258896cb316e52bc1 +0 -0
  69. data/test/dummy/tmp/cache/assets/CF0/B10/sprockets%2Fb50252ad18b893dc145ef2896e38d689 +0 -0
  70. data/test/dummy/tmp/cache/assets/CF1/750/sprockets%2F8c683caf79c53642dd4e12a89c657355 +0 -0
  71. data/test/dummy/tmp/cache/assets/CF4/130/sprockets%2F2e2ec908b79eb4084c57c7c9632899a2 +0 -0
  72. data/test/dummy/tmp/cache/assets/D01/E90/sprockets%2Ffd358252a8aa0b738f61a75ea81b0134 +0 -0
  73. data/test/dummy/tmp/cache/assets/D09/F30/sprockets%2F330e6425d10d2cb797c3f45ca374b84e +0 -0
  74. data/test/dummy/tmp/cache/assets/D0B/C60/sprockets%2F24182be4c99c8f971c1596aa452a2c0a +0 -0
  75. data/test/dummy/tmp/cache/assets/D1F/5D0/sprockets%2F9dba5447e453628c0bfa9137f85df278 +0 -0
  76. data/test/dummy/tmp/cache/assets/D29/260/sprockets%2F5a18f14fa7a839360315acb05b1e3bf0 +0 -0
  77. data/test/dummy/tmp/cache/assets/D32/230/sprockets%2Fb34e03561a646fac533ce7d4b560c2b8 +0 -0
  78. data/test/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
  79. data/test/dummy/tmp/cache/assets/D3F/200/sprockets%2F8acb8521e88321b224d6bbf338d398cc +0 -0
  80. data/test/dummy/tmp/cache/assets/D3F/980/sprockets%2F1e2991c760ec4319a1fe5b94bc2ef633 +0 -0
  81. data/test/dummy/tmp/cache/assets/D48/090/sprockets%2F6d95fa4274b968de1d414e21cf46ca85 +0 -0
  82. data/test/dummy/tmp/cache/assets/D4B/4D0/sprockets%2F6205d4779aae40ce1a9a086c46978fef +0 -0
  83. data/test/dummy/tmp/cache/assets/D4E/D00/sprockets%2F1a6846f0a837ae2524e2f9ec89e6ef43 +0 -0
  84. data/test/dummy/tmp/cache/assets/D54/730/sprockets%2F1202c3cd8b0271cc02327e88b0bfad5e +0 -0
  85. data/test/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6 +0 -0
  86. data/test/dummy/tmp/cache/assets/D5D/FF0/sprockets%2F9e1b9c655d94b7725c984f7ce6b8d6b3 +0 -0
  87. data/test/dummy/tmp/cache/assets/D64/0D0/sprockets%2Fbf47d6bc8fc84f8d8764c1f5955f1786 +0 -0
  88. data/test/dummy/tmp/cache/assets/D68/6C0/sprockets%2Fab07dab58b519282aeaf3ea945f46513 +0 -0
  89. data/test/dummy/tmp/cache/assets/D6A/EF0/sprockets%2F2eb65cc490ad96cc38604918b0caeb90 +0 -0
  90. data/test/dummy/tmp/cache/assets/D71/9A0/sprockets%2F8fe2ebb722d62d1fdd63068c57a6408d +0 -0
  91. data/test/dummy/tmp/cache/assets/D77/210/sprockets%2F6586fb2ab2cc992e642e53e4cc3e2e85 +0 -0
  92. data/test/dummy/tmp/cache/assets/D84/460/sprockets%2Fed41cc36973e3e16cce4f876be7297b8 +0 -0
  93. data/test/dummy/tmp/cache/assets/D86/600/sprockets%2Ff9be8df0f5835948b646a94b47cd23cf +0 -0
  94. data/test/dummy/tmp/cache/assets/D95/530/sprockets%2F0cbcab75dec40d0e637629a484beb653 +0 -0
  95. data/test/dummy/tmp/cache/assets/D98/070/sprockets%2F4c95e212d3de047f6ac4f2fe09c40de2 +0 -0
  96. data/test/dummy/tmp/cache/assets/D98/270/sprockets%2F0e7c025e3de60b80a6c5e5fcc7db6832 +0 -0
  97. data/test/dummy/tmp/cache/assets/D9C/520/sprockets%2Ffc5383ee26303f5906ad273a3fe5dcea +0 -0
  98. data/test/dummy/tmp/cache/assets/D9F/9B0/sprockets%2Ff4b8b3465acc5f71633cf0af5858c4ac +0 -0
  99. data/test/dummy/tmp/cache/assets/DA1/EB0/sprockets%2F2d2f2f5ed3c476dea3c3a3d9e2980a85 +0 -0
  100. data/test/dummy/tmp/cache/assets/DA2/890/sprockets%2F1fd7028cdd4ff7c24e4a630c1f38af88 +0 -0
  101. data/test/dummy/tmp/cache/assets/DA3/080/sprockets%2Ffb77a66783db0b5812e3fdbabe4608f6 +0 -0
  102. data/test/dummy/tmp/cache/assets/DB2/E50/sprockets%2Ff337be9ae1863f27a87c882feae9ee21 +0 -0
  103. data/test/dummy/tmp/cache/assets/DC1/E70/sprockets%2F827c6100c3adc3c91ddfe84da51fbd15 +0 -0
  104. data/test/dummy/tmp/cache/assets/DCA/380/sprockets%2Fc0ccdcba1aa3b504045ebb1b2400b9d0 +0 -0
  105. data/test/dummy/tmp/cache/assets/DCA/EA0/sprockets%2F139ab8cdba6b44b58ae3647dbeea8145 +0 -0
  106. data/test/dummy/tmp/cache/assets/DEF/8E0/sprockets%2F3b4c400d4a5c7db0cd8d02b7e3cb79df +0 -0
  107. data/test/dummy/tmp/cache/assets/E0C/530/sprockets%2F0ce78cd1a399cdb66ca6cd2f93e93f8b +0 -0
  108. data/test/dummy/tmp/cache/assets/E11/4E0/sprockets%2F86e145a39f85cceeaffdff91ebb61449 +0 -0
  109. data/test/dummy/tmp/cache/assets/E15/B80/sprockets%2F68eff298c6dad0b39ddf0d61ccd9896d +0 -0
  110. data/test/dummy/tmp/cache/assets/E22/130/sprockets%2Fbeaa50ffc31b2c6a5625ce1a85efc38e +0 -0
  111. data/test/dummy/tmp/cache/assets/E2D/B60/sprockets%2F5aa2b493bf9c5b69eafecd96aa0af066 +0 -0
  112. data/test/dummy/tmp/cache/assets/E38/8F0/sprockets%2F1cb65daaffa8b6d886108e4eaf6d9bb9 +0 -0
  113. data/test/dummy/tmp/cache/assets/E66/810/sprockets%2F5de7ae60bfff07ae5fd98d19d9b1a4da +0 -0
  114. data/test/dummy/tmp/cache/sass/a27500b667404a158ab7c09449b801b001e64ed8/all.css.scssc +0 -0
  115. data/test/dummy/tmp/cache/sass/a27500b667404a158ab7c09449b801b001e64ed8/default-theme.css.scssc +0 -0
  116. data/test/dummy/tmp/cache/sass/a27500b667404a158ab7c09449b801b001e64ed8/editors.css.scssc +0 -0
  117. data/test/dummy/tmp/cache/sass/a27500b667404a158ab7c09449b801b001e64ed8/grid.css.scssc +0 -0
  118. data/test/integration/navigation_test.rb +10 -0
  119. data/test/slickgrid-requirejs-rails_test.rb +7 -0
  120. data/test/test_helper.rb +15 -0
  121. data/vendor/assets/images/slick/actions.gif +0 -0
  122. data/vendor/assets/images/slick/ajax-loader-small.gif +0 -0
  123. data/vendor/assets/images/slick/arrow_redo.png +0 -0
  124. data/vendor/assets/images/slick/arrow_right_peppermint.png +0 -0
  125. data/vendor/assets/images/slick/arrow_right_spearmint.png +0 -0
  126. data/vendor/assets/images/slick/arrow_undo.png +0 -0
  127. data/vendor/assets/images/slick/bullet_blue.png +0 -0
  128. data/vendor/assets/images/slick/bullet_star.png +0 -0
  129. data/vendor/assets/images/slick/bullet_toggle_minus.png +0 -0
  130. data/vendor/assets/images/slick/bullet_toggle_plus.png +0 -0
  131. data/vendor/assets/images/slick/calendar.gif +0 -0
  132. data/vendor/assets/images/slick/collapse.gif +0 -0
  133. data/vendor/assets/images/slick/comment_yellow.gif +0 -0
  134. data/vendor/assets/images/slick/down.gif +0 -0
  135. data/vendor/assets/images/slick/drag-handle.png +0 -0
  136. data/vendor/assets/images/slick/editor-helper-bg.gif +0 -0
  137. data/vendor/assets/images/slick/expand.gif +0 -0
  138. data/vendor/assets/images/slick/header-bg.gif +0 -0
  139. data/vendor/assets/images/slick/header-columns-bg.gif +0 -0
  140. data/vendor/assets/images/slick/header-columns-over-bg.gif +0 -0
  141. data/vendor/assets/images/slick/help.png +0 -0
  142. data/vendor/assets/images/slick/info.gif +0 -0
  143. data/vendor/assets/images/slick/listview.gif +0 -0
  144. data/vendor/assets/images/slick/pencil.gif +0 -0
  145. data/vendor/assets/images/slick/row-over-bg.gif +0 -0
  146. data/vendor/assets/images/slick/sort-asc.gif +0 -0
  147. data/vendor/assets/images/slick/sort-asc.png +0 -0
  148. data/vendor/assets/images/slick/sort-desc.gif +0 -0
  149. data/vendor/assets/images/slick/sort-desc.png +0 -0
  150. data/vendor/assets/images/slick/stripes.png +0 -0
  151. data/vendor/assets/images/slick/tag_red.png +0 -0
  152. data/vendor/assets/images/slick/tick.png +0 -0
  153. data/vendor/assets/images/slick/user_identity.gif +0 -0
  154. data/vendor/assets/images/slick/user_identity_plus.gif +0 -0
  155. data/vendor/assets/javascripts/jquery.event/drag.js +407 -0
  156. data/vendor/assets/javascripts/jquery.event/drop.js +303 -0
  157. data/vendor/assets/javascripts/slick/controls/slick.columnpicker.js +157 -0
  158. data/vendor/assets/javascripts/slick/controls/slick.pager.js +158 -0
  159. data/vendor/assets/javascripts/slick/plugins/slick.autotooltips.js +88 -0
  160. data/vendor/assets/javascripts/slick/plugins/slick.cellcopymanager.js +93 -0
  161. data/vendor/assets/javascripts/slick/plugins/slick.cellrangedecorator.js +69 -0
  162. data/vendor/assets/javascripts/slick/plugins/slick.cellrangeselector.js +118 -0
  163. data/vendor/assets/javascripts/slick/plugins/slick.cellselectionmodel.js +160 -0
  164. data/vendor/assets/javascripts/slick/plugins/slick.checkboxselectcolumn.js +158 -0
  165. data/vendor/assets/javascripts/slick/plugins/slick.headerbuttons.js +181 -0
  166. data/vendor/assets/javascripts/slick/plugins/slick.headermenu.js +278 -0
  167. data/vendor/assets/javascripts/slick/plugins/slick.rowmovemanager.js +144 -0
  168. data/vendor/assets/javascripts/slick/plugins/slick.rowselectionmodel.js +193 -0
  169. data/vendor/assets/javascripts/slick/slick.core.js +468 -0
  170. data/vendor/assets/javascripts/slick/slick.dataview.aggregators.js +121 -0
  171. data/vendor/assets/javascripts/slick/slick.dataview.js +1061 -0
  172. data/vendor/assets/javascripts/slick/slick.editors.js +517 -0
  173. data/vendor/assets/javascripts/slick/slick.formatters.js +65 -0
  174. data/vendor/assets/javascripts/slick/slick.grid.js +3317 -0
  175. data/vendor/assets/javascripts/slick/slick.groupitemmetadataprovider.js +149 -0
  176. data/vendor/assets/javascripts/slick/slick.remotemodel.js +185 -0
  177. data/vendor/assets/stylesheets/slick/all.css.scss +3 -0
  178. data/vendor/assets/stylesheets/slick/controls/columnpicker.css.scss +30 -0
  179. data/vendor/assets/stylesheets/slick/controls/pager.css.scss +41 -0
  180. data/vendor/assets/stylesheets/slick/controls/slick.columnpicker.css +31 -0
  181. data/vendor/assets/stylesheets/slick/controls/slick.pager.css +41 -0
  182. data/vendor/assets/stylesheets/slick/default-theme.css.scss +104 -0
  183. data/vendor/assets/stylesheets/slick/editors.css.scss +100 -0
  184. data/vendor/assets/stylesheets/slick/grid.css.scss +174 -0
  185. data/vendor/assets/stylesheets/slick/plugins/slick.headerbuttons.css +39 -0
  186. data/vendor/assets/stylesheets/slick/plugins/slick.headermenu.css +59 -0
  187. data/vendor/assets/stylesheets/slick/remotemodel.css.scss +20 -0
  188. data/vendor/assets/stylesheets/slick/slick.grid.css +157 -0
  189. metadata +524 -0
@@ -0,0 +1,303 @@
1
+ /*!
2
+ * jquery.event.drop - v 2.2
3
+ * Copyright (c) 2010 Three Dub Media - http://threedubmedia.com
4
+ * Open Source MIT License - http://threedubmedia.com/code/license
5
+ */
6
+ // Created: 2008-06-04
7
+ // Updated: 2012-05-21
8
+ // REQUIRES: jquery 1.7.x, event.drag 2.2
9
+
10
+ define(['jquery'], function ($) {
11
+
12
+
13
+ // Events: drop, dropstart, dropend
14
+
15
+ // add the jquery instance method
16
+ $.fn.drop = function (str, arg, opts) {
17
+ // figure out the event type
18
+ var type = typeof str == "string" ? str : "",
19
+ // figure out the event handler...
20
+ fn = $.isFunction(str) ? str : $.isFunction(arg) ? arg : null;
21
+ // fix the event type
22
+ if (type.indexOf("drop") !== 0)
23
+ type = "drop" + type;
24
+ // were options passed
25
+ opts = ( str == fn ? arg : opts ) || {};
26
+ // trigger or bind event handler
27
+ return fn ? this.bind(type, opts, fn) : this.trigger(type);
28
+ };
29
+
30
+ // DROP MANAGEMENT UTILITY
31
+ // returns filtered drop target elements, caches their positions
32
+ $.drop = function (opts) {
33
+ opts = opts || {};
34
+ // safely set new options...
35
+ drop.multi = opts.multi === true ? Infinity :
36
+ opts.multi === false ? 1 : !isNaN(opts.multi) ? opts.multi : drop.multi;
37
+ drop.delay = opts.delay || drop.delay;
38
+ drop.tolerance = $.isFunction(opts.tolerance) ? opts.tolerance :
39
+ opts.tolerance === null ? null : drop.tolerance;
40
+ drop.mode = opts.mode || drop.mode || 'intersect';
41
+ };
42
+
43
+ // local refs (increase compression)
44
+ var $event = $.event,
45
+ $special = $event.special,
46
+ // configure the drop special event
47
+ drop = $.event.special.drop = {
48
+
49
+ // these are the default settings
50
+ multi: 1, // allow multiple drop winners per dragged element
51
+ delay: 20, // async timeout delay
52
+ mode: 'overlap', // drop tolerance mode
53
+
54
+ // internal cache
55
+ targets: [],
56
+
57
+ // the key name for stored drop data
58
+ datakey: "dropdata",
59
+
60
+ // prevent bubbling for better performance
61
+ noBubble: true,
62
+
63
+ // count bound related events
64
+ add: function (obj) {
65
+ // read the interaction data
66
+ var data = $.data(this, drop.datakey);
67
+ // count another realted event
68
+ data.related += 1;
69
+ },
70
+
71
+ // forget unbound related events
72
+ remove: function () {
73
+ $.data(this, drop.datakey).related -= 1;
74
+ },
75
+
76
+ // configure the interactions
77
+ setup: function () {
78
+ // check for related events
79
+ if ($.data(this, drop.datakey))
80
+ return;
81
+ // initialize the drop element data
82
+ var data = {
83
+ related: 0,
84
+ active: [],
85
+ anyactive: 0,
86
+ winner: 0,
87
+ location: {}
88
+ };
89
+ // store the drop data on the element
90
+ $.data(this, drop.datakey, data);
91
+ // store the drop target in internal cache
92
+ drop.targets.push(this);
93
+ },
94
+
95
+ // destroy the configure interaction
96
+ teardown: function () {
97
+ var data = $.data(this, drop.datakey) || {};
98
+ // check for related events
99
+ if (data.related)
100
+ return;
101
+ // remove the stored data
102
+ $.removeData(this, drop.datakey);
103
+ // reference the targeted element
104
+ var element = this;
105
+ // remove from the internal cache
106
+ drop.targets = $.grep(drop.targets, function (target) {
107
+ return ( target !== element );
108
+ });
109
+ },
110
+
111
+ // shared event handler
112
+ handler: function (event, dd) {
113
+ // local vars
114
+ var results, $targets;
115
+ // make sure the right data is available
116
+ if (!dd)
117
+ return;
118
+ // handle various events
119
+ switch (event.type) {
120
+ // draginit, from $.event.special.drag
121
+ case 'mousedown': // DROPINIT >>
122
+ case 'touchstart': // DROPINIT >>
123
+ // collect and assign the drop targets
124
+ $targets = $(drop.targets);
125
+ if (typeof dd.drop == "string")
126
+ $targets = $targets.filter(dd.drop);
127
+ // reset drop data winner properties
128
+ $targets.each(function () {
129
+ var data = $.data(this, drop.datakey);
130
+ data.active = [];
131
+ data.anyactive = 0;
132
+ data.winner = 0;
133
+ });
134
+ // set available target elements
135
+ dd.droppable = $targets;
136
+ // activate drop targets for the initial element being dragged
137
+ $special.drag.hijack(event, "dropinit", dd);
138
+ break;
139
+ // drag, from $.event.special.drag
140
+ case 'mousemove': // TOLERATE >>
141
+ case 'touchmove': // TOLERATE >>
142
+ drop.event = event; // store the mousemove event
143
+ if (!drop.timer)
144
+ // monitor drop targets
145
+ drop.tolerate(dd);
146
+ break;
147
+ // dragend, from $.event.special.drag
148
+ case 'mouseup': // DROP >> DROPEND >>
149
+ case 'touchend': // DROP >> DROPEND >>
150
+ drop.timer = clearTimeout(drop.timer); // delete timer
151
+ if (dd.propagates) {
152
+ $special.drag.hijack(event, "drop", dd);
153
+ $special.drag.hijack(event, "dropend", dd);
154
+ }
155
+ break;
156
+
157
+ }
158
+ },
159
+
160
+ // returns the location positions of an element
161
+ locate: function (elem, index) {
162
+ var data = $.data(elem, drop.datakey),
163
+ $elem = $(elem),
164
+ posi = $elem.offset() || {},
165
+ height = $elem.outerHeight(),
166
+ width = $elem.outerWidth(),
167
+ location = {
168
+ elem: elem,
169
+ width: width,
170
+ height: height,
171
+ top: posi.top,
172
+ left: posi.left,
173
+ right: posi.left + width,
174
+ bottom: posi.top + height
175
+ };
176
+ // drag elements might not have dropdata
177
+ if (data) {
178
+ data.location = location;
179
+ data.index = index;
180
+ data.elem = elem;
181
+ }
182
+ return location;
183
+ },
184
+
185
+ // test the location positions of an element against another OR an X,Y coord
186
+ contains: function (target, test) { // target { location } contains test [x,y] or { location }
187
+ return ( ( test[0] || test.left ) >= target.left && ( test[0] || test.right ) <= target.right
188
+ && ( test[1] || test.top ) >= target.top && ( test[1] || test.bottom ) <= target.bottom );
189
+ },
190
+
191
+ // stored tolerance modes
192
+ modes: { // fn scope: "$.event.special.drop" object
193
+ // target with mouse wins, else target with most overlap wins
194
+ 'intersect': function (event, proxy, target) {
195
+ return this.contains(target, [ event.pageX, event.pageY ]) ? // check cursor
196
+ 1e9 : this.modes.overlap.apply(this, arguments); // check overlap
197
+ },
198
+ // target with most overlap wins
199
+ 'overlap': function (event, proxy, target) {
200
+ // calculate the area of overlap...
201
+ return Math.max(0, Math.min(target.bottom, proxy.bottom) - Math.max(target.top, proxy.top))
202
+ * Math.max(0, Math.min(target.right, proxy.right) - Math.max(target.left, proxy.left));
203
+ },
204
+ // proxy is completely contained within target bounds
205
+ 'fit': function (event, proxy, target) {
206
+ return this.contains(target, proxy) ? 1 : 0;
207
+ },
208
+ // center of the proxy is contained within target bounds
209
+ 'middle': function (event, proxy, target) {
210
+ return this.contains(target, [ proxy.left + proxy.width * .5, proxy.top + proxy.height * .5 ]) ? 1 : 0;
211
+ }
212
+ },
213
+
214
+ // sort drop target cache by by winner (dsc), then index (asc)
215
+ sort: function (a, b) {
216
+ return ( b.winner - a.winner ) || ( a.index - b.index );
217
+ },
218
+
219
+ // async, recursive tolerance execution
220
+ tolerate: function (dd) {
221
+ // declare local refs
222
+ var i, drp, drg, data, arr, len, elem,
223
+ // interaction iteration variables
224
+ x = 0, ia, end = dd.interactions.length,
225
+ // determine the mouse coords
226
+ xy = [ drop.event.pageX, drop.event.pageY ],
227
+ // custom or stored tolerance fn
228
+ tolerance = drop.tolerance || drop.modes[ drop.mode ];
229
+ // go through each passed interaction...
230
+ do if (ia = dd.interactions[x]) {
231
+ // check valid interaction
232
+ if (!ia)
233
+ return;
234
+ // initialize or clear the drop data
235
+ ia.drop = [];
236
+ // holds the drop elements
237
+ arr = [];
238
+ len = ia.droppable.length;
239
+ // determine the proxy location, if needed
240
+ if (tolerance)
241
+ drg = drop.locate(ia.proxy);
242
+ // reset the loop
243
+ i = 0;
244
+ // loop each stored drop target
245
+ do if (elem = ia.droppable[i]) {
246
+ data = $.data(elem, drop.datakey);
247
+ drp = data.location;
248
+ if (!drp) continue;
249
+ // find a winner: tolerance function is defined, call it
250
+ data.winner = tolerance ? tolerance.call(drop, drop.event, drg, drp)
251
+ // mouse position is always the fallback
252
+ : drop.contains(drp, xy) ? 1 : 0;
253
+ arr.push(data);
254
+ } while (++i < len); // loop
255
+ // sort the drop targets
256
+ arr.sort(drop.sort);
257
+ // reset the loop
258
+ i = 0;
259
+ // loop through all of the targets again
260
+ do if (data = arr[ i ]) {
261
+ // winners...
262
+ if (data.winner && ia.drop.length < drop.multi) {
263
+ // new winner... dropstart
264
+ if (!data.active[x] && !data.anyactive) {
265
+ // check to make sure that this is not prevented
266
+ if ($special.drag.hijack(drop.event, "dropstart", dd, x, data.elem)[0] !== false) {
267
+ data.active[x] = 1;
268
+ data.anyactive += 1;
269
+ }
270
+ // if false, it is not a winner
271
+ else
272
+ data.winner = 0;
273
+ }
274
+ // if it is still a winner
275
+ if (data.winner)
276
+ ia.drop.push(data.elem);
277
+ }
278
+ // losers...
279
+ else if (data.active[x] && data.anyactive == 1) {
280
+ // former winner... dropend
281
+ $special.drag.hijack(drop.event, "dropend", dd, x, data.elem);
282
+ data.active[x] = 0;
283
+ data.anyactive -= 1;
284
+ }
285
+ } while (++i < len); // loop
286
+ } while (++x < end) // loop
287
+ // check if the mouse is still moving or is idle
288
+ if (drop.last && xy[0] == drop.last.pageX && xy[1] == drop.last.pageY)
289
+ delete drop.timer; // idle, don't recurse
290
+ else // recurse
291
+ drop.timer = setTimeout(function () {
292
+ drop.tolerate(dd);
293
+ }, drop.delay);
294
+ // remember event, to compare idleness
295
+ drop.last = drop.event;
296
+ }
297
+
298
+ };
299
+
300
+ // share the same special event configuration with related events...
301
+ $special.dropinit = $special.dropstart = $special.dropend = drop;
302
+
303
+ }); // confine scope
@@ -0,0 +1,157 @@
1
+ // Universal module definition
2
+ (function (root, factory) {
3
+ if (typeof define === 'function' && define.amd) {
4
+ // AMD. Register as an anonymous module.
5
+ define(['jquery'], factory);
6
+ } else {
7
+ // Browser globals
8
+ root.Slick.Controls = root.Slick.Controls || {};
9
+ root.Slick.Controls.ColumnPicker = factory(root.jQuery);
10
+ }
11
+ }(this, function ($) {
12
+
13
+ function SlickColumnPicker(columns, grid, options) {
14
+ var $menu;
15
+ var columnCheckboxes;
16
+
17
+ var defaults = {
18
+ fadeSpeed:250
19
+ };
20
+
21
+ function init() {
22
+ grid.onHeaderContextMenu.subscribe(handleHeaderContextMenu);
23
+ grid.onColumnsReordered.subscribe(updateColumnOrder);
24
+ options = $.extend({}, defaults, options);
25
+
26
+ $menu = $("<span class='slick-columnpicker' style='display:none;position:absolute;z-index:20;' />").appendTo(document.body);
27
+
28
+ $menu.bind("mouseleave", function (e) {
29
+ $(this).fadeOut(options.fadeSpeed)
30
+ });
31
+ $menu.bind("click", updateColumn);
32
+
33
+ }
34
+
35
+ function handleHeaderContextMenu(e, args) {
36
+ e.preventDefault();
37
+ $menu.empty();
38
+ updateColumnOrder();
39
+ columnCheckboxes = [];
40
+
41
+ var $li, $input;
42
+ for (var i = 0; i < columns.length; i++) {
43
+ $li = $("<li />").appendTo($menu);
44
+ $input = $("<input type='checkbox' />").data("column-id", columns[i].id);
45
+ columnCheckboxes.push($input);
46
+
47
+ if (grid.getColumnIndex(columns[i].id) != null) {
48
+ $input.attr("checked", "checked");
49
+ }
50
+
51
+ $("<label />")
52
+ .text(columns[i].name)
53
+ .prepend($input)
54
+ .appendTo($li);
55
+ }
56
+
57
+ $("<hr/>").appendTo($menu);
58
+ $li = $("<li />").appendTo($menu);
59
+ $input = $("<input type='checkbox' />").data("option", "autoresize");
60
+ $("<label />")
61
+ .text("Force fit columns")
62
+ .prepend($input)
63
+ .appendTo($li);
64
+ if (grid.getOptions().forceFitColumns) {
65
+ $input.attr("checked", "checked");
66
+ }
67
+
68
+ $li = $("<li />").appendTo($menu);
69
+ $input = $("<input type='checkbox' />").data("option", "syncresize");
70
+ $("<label />")
71
+ .text("Synchronous resize")
72
+ .prepend($input)
73
+ .appendTo($li);
74
+ if (grid.getOptions().syncColumnCellResize) {
75
+ $input.attr("checked", "checked");
76
+ }
77
+
78
+ $menu
79
+ .css("top", e.pageY - 10)
80
+ .css("left", e.pageX - 10)
81
+ .fadeIn(options.fadeSpeed);
82
+ }
83
+
84
+ function updateColumnOrder() {
85
+ // Because columns can be reordered, we have to update the `columns`
86
+ // to reflect the new order, however we can't just take `grid.getColumns()`,
87
+ // as it does not include columns currently hidden by the picker.
88
+ // We create a new `columns` structure by leaving currently-hidden
89
+ // columns in their original ordinal position and interleaving the results
90
+ // of the current column sort.
91
+ var current = grid.getColumns().slice(0);
92
+ var ordered = new Array(columns.length);
93
+ for (var i = 0; i < ordered.length; i++) {
94
+ if ( grid.getColumnIndex(columns[i].id) === undefined ) {
95
+ // If the column doesn't return a value from getColumnIndex,
96
+ // it is hidden. Leave it in this position.
97
+ ordered[i] = columns[i];
98
+ } else {
99
+ // Otherwise, grab the next visible column.
100
+ ordered[i] = current.shift();
101
+ }
102
+ }
103
+ columns = ordered;
104
+ }
105
+
106
+ function updateColumn(e) {
107
+ if ($(e.target).data("option") == "autoresize") {
108
+ if (e.target.checked) {
109
+ grid.setOptions({forceFitColumns:true});
110
+ grid.autosizeColumns();
111
+ } else {
112
+ grid.setOptions({forceFitColumns:false});
113
+ }
114
+ return;
115
+ }
116
+
117
+ if ($(e.target).data("option") == "syncresize") {
118
+ if (e.target.checked) {
119
+ grid.setOptions({syncColumnCellResize:true});
120
+ } else {
121
+ grid.setOptions({syncColumnCellResize:false});
122
+ }
123
+ return;
124
+ }
125
+
126
+ if ($(e.target).is(":checkbox")) {
127
+ var visibleColumns = [];
128
+ $.each(columnCheckboxes, function (i, e) {
129
+ if ($(this).is(":checked")) {
130
+ visibleColumns.push(columns[i]);
131
+ }
132
+ });
133
+
134
+ if (!visibleColumns.length) {
135
+ $(e.target).attr("checked", "checked");
136
+ return;
137
+ }
138
+
139
+ grid.setColumns(visibleColumns);
140
+ }
141
+ }
142
+
143
+ function getAllColumns() {
144
+ return columns;
145
+ }
146
+
147
+ init();
148
+
149
+ return {
150
+ "getAllColumns": getAllColumns
151
+ };
152
+ }
153
+
154
+ // Slick.Controls.ColumnPicker
155
+ return SlickColumnPicker;
156
+
157
+ }));