Nextrek
@ 1101
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 |
var Component_DataGridBehavior, extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, hasProp = {}.hasOwnProperty; Component_DataGridBehavior = (function(superClass) { var DataSource, DataWrapper; extend(Component_DataGridBehavior, superClass); DataWrapper = (function() { function DataWrapper(data) { this.data = data; this.viewData = [true, false, false, true, false]; } return DataWrapper; })(); DataSource = (function() { function DataSource(source) { var i, k, ref; this.source = source || []; this.length = this.source.length; this.wrappedSource = new Array(this.source.length); for (i = k = 0, ref = this.wrappedSource.length; 0 <= ref ? k <= ref : k >= ref; i = 0 <= ref ? ++k : --k) { this.wrappedSource[i] = null; } } DataSource.prototype.set = function(source) { var i, k, ref, results; this.source = source || []; this.length = this.source.length; this.wrappedSource = new Array(this.source.length); results = []; for (i = k = 0, ref = this.wrappedSource.length; 0 <= ref ? k <= ref : k >= ref; i = 0 <= ref ? ++k : --k) { results.push(this.wrappedSource[i] = null); } return results; }; DataSource.prototype.itemAt = function(index) { var item; item = this.wrappedSource[index]; if (!item) { item = new DataWrapper(this.source[index]); this.wrappedSource[index] = item; } return item; }; DataSource.prototype.setItemAt = function(index, data) { if (this.wrappedSource[index]) { this.wrappedSource[index].data = data; } return this.source[index] = data; }; return DataSource; })(); Component_DataGridBehavior.accessors("dataSource", { set: function(v) { if (v !== this.dataSource_.source) { this.dataSource_.set(v); return this.resize(); } }, get: function() { return this.dataSource_; } }); /** * Called if this object instance is restored from a data-bundle. It can be used * re-assign event-handler, anonymous functions, etc. * * @method onDataBundleRestore. * @param Object data - The data-bundle * @param gs.ObjectCodecContext context - The codec-context. */ Component_DataGridBehavior.prototype.onDataBundleRestore = function(data, context) { return this.setupEventHandlers(); }; /** * The data-grid behavior component defines the logic for a data-grid. A data-grid * allows to display items from a associated data-source using a specified * item-template. Unlike a stack-layout, a data-grid is optimized to display even high amounts of items but they all * need to use the same item-template with same size. * * @module ui * @class Component_DataGridBehavior * @extends gs.Component_Visual * @memberof ui * @constructor * @params {Object} params - The params-object containing the data-grid settings. */ function Component_DataGridBehavior(params) { Component_DataGridBehavior.__super__.constructor.call(this); this.params = params || {}; /** * The item-template descriptor used for each item of the data-grid. * @property template * @type Object */ this.template = this.params.template; /** * The data-source used for the data-grid. Can be an array or a formula. * @property dataSource * @type Object[]|string */ this.dataSource_ = null; /** * Stores the item-objects needed for rendering. They are created from the item-template. * @property items * @protected * @type gs.Object_Base[] */ this.items = this.params.items || []; /** * Numbers of columns. * @property columns * @type number */ this.columns = this.params.columns || 1; /** * Indicates if the data-grid is initialized and ready for rendering. * @property initialized * @protected * @type boolean */ this.initialized = false; /** * Defines a horizontal and vertical spacing between items. * @property spacing * @default [0, 10] * @type number[] */ this.spacing = this.params.spacing || [0, 0]; } /** * Adds event-handlers for mouse/touch events * * @method setupEventHandlers */ Component_DataGridBehavior.prototype.setupEventHandlers = function() { return gs.GlobalEventManager.on("mouseWheel", (function(_this) { return function() { var r; r = _this.object.dstRect; if (Rect.contains(r.x, r.y, r.width, r.height, Input.Mouse.x - _this.object.origin.x, Input.Mouse.y - _this.object.origin.y)) { return _this.updateScroll(); } }; })(this)); }; /** * Sets up the data-grid. * * @method setup */ Component_DataGridBehavior.prototype.setup = function() { var item; if (this.object.dstRect.width === 1) { return; } this.initialized = true; if (!this.template.size) { item = ui.UIManager.createControlFromDescriptor(this.template.descriptor, this.object); item.index = 0; item.update(); this.template.size = [item.dstRect.width, item.dstRect.height]; item.dispose(); } if (this.params.dataSource.exec) { this.dataSource_ = new DataSource(ui.Component_FormulaHandler.fieldValue(this.object, this.params.dataSource) || []); } else { this.dataSource_ = new DataSource(this.params.dataSource || []); } this.resize(); this.setupEventHandlers(); Component_DataGridBehavior.__super__.setup.call(this); return this.object.scrollableHeight = Math.max(0, this.object.contentHeight - this.object.dstRect.height); }; /** * Scrolls to the end. * * @method scrollToEnd */ Component_DataGridBehavior.prototype.scrollToEnd = function() { return this.object.scrollOffsetY = this.object.scrollableHeight; }; /** * Updates scrolling. * * @method updateScroll */ Component_DataGridBehavior.prototype.updateScroll = function() { this.object.scrollableHeight = Math.max(0, this.object.contentHeight - this.object.dstRect.height); if (Input.Mouse.wheel <= -1) { this.object.scrollOffsetY = Math.max(this.object.scrollOffsetY - Input.Mouse.wheelSpeed * 0.1, 0); } if (Input.Mouse.wheel >= 1) { this.object.scrollOffsetY = Math.min(this.object.scrollOffsetY - Input.Mouse.wheelSpeed * 0.1, this.object.scrollableHeight); } return this.object.scrollOffsetY = Math.max(Math.min(this.object.scrollOffsetY, this.object.scrollableHeight), 0); }; /** * Resizes the data-grid and creates the necessary display objects from the data-grid template. * * @method resize */ Component_DataGridBehavior.prototype.resize = function() { var height, index, item, itemsX, itemsY, k, l, len, m, ref, ref1, ref2, totalItemsY, width, x, y; width = this.object.dstRect.width; height = this.object.dstRect.height; itemsX = this.columns || 1; itemsY = Math.ceil((height - this.spacing[1]) / (this.template.size[1] + this.spacing[1])) + this.columns + 1; totalItemsY = Math.ceil(this.dataSource.length / this.columns); ref = this.items; for (k = 0, len = ref.length; k < len; k++) { item = ref[k]; if (item != null) { item.dispose(); } } this.items = []; for (y = l = 0, ref1 = itemsY; 0 <= ref1 ? l < ref1 : l > ref1; y = 0 <= ref1 ? ++l : --l) { for (x = m = 0, ref2 = itemsX; 0 <= ref2 ? m < ref2 : m > ref2; x = 0 <= ref2 ? ++m : --m) { index = y * itemsX + x; if (index < this.dataSource.length) { item = ui.UIManager.createControlFromDescriptor(this.template.descriptor, this.object); item.data[0] = this.dataSource.itemAt(index).data; item.dstRect.x = this.spacing[0] + x * (this.template.size[0] + this.spacing[0]); item.dstRect.y = this.spacing[1] + y * (this.template.size[1] + this.spacing[1]); item.dstRect.width = this.template.size[0]; item.dstRect.height = this.template.size[1]; item.index = index; item.ui.viewData = this.dataSource.itemAt(index).viewData; this.items[item.index] = item; this.object.addObject(item); } } } this.object.scrollableHeight = this.spacing[1] + totalItemsY * (this.template.size[1] + this.spacing[1]) - height; this.object.scrollOffsetY = 0; return this.object.contentHeight = this.spacing[1] + totalItemsY * (this.template.size[1] + this.spacing[1]); }; Component_DataGridBehavior.prototype.itemAtIndex = function(index) { return this.items.first(function(item) { return item.index === index; }); }; Component_DataGridBehavior.prototype.indexForItem = function(item) { return item.index; }; /** * Updates the data-grid. * * @method update */ Component_DataGridBehavior.prototype.update = function() { var column, i, item, itemIndex, itemsY, j, k, offset, ref, ref1, results, row, scrollOffset; Component_DataGridBehavior.__super__.update.call(this); if (!this.initialized) { this.setup(); } scrollOffset = this.object.scrollOffsetY; offset = Math.floor(scrollOffset / (this.template.size[1] + this.spacing[1])) * this.columns; i = offset; itemIndex = 0; itemsY = Math.ceil((this.object.dstRect.height - this.spacing[1]) / (this.template.size[1] + this.spacing[1])) * this.columns + this.columns + 1; while (i < Math.min(offset + itemsY, this.dataSource.length)) { row = Math.floor(i / this.columns); column = i % this.columns; item = this.items[itemIndex]; if (item) { item.data[0] = this.dataSource.itemAt(i).data; if (this.object.clipRect) { item.clipRect = this.object.clipRect; } item.index = i; item.ui.viewData = this.dataSource.itemAt(i).viewData; item.dstRect.x = this.spacing[0] + column * (this.template.size[0] + this.spacing[0]); item.dstRect.y = this.spacing[1] + (row - (offset / this.columns)) * (this.template.size[1] + this.spacing[1]) + (-scrollOffset % (this.template.size[1] + this.spacing[1])); item.visible = true; item.update(); item.update(); itemIndex++; } i++; } results = []; for (j = k = ref = itemIndex, ref1 = this.items.length; ref <= ref1 ? k < ref1 : k > ref1; j = ref <= ref1 ? ++k : --k) { if (this.items[j]) { this.items[j].visible = false; results.push(this.items[j].update()); } else { results.push(void 0); } } return results; }; return Component_DataGridBehavior; })(gs.Component_Visual); ui.Component_DataGridBehavior = Component_DataGridBehavior; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLElBQUEsMEJBQUE7RUFBQTs7O0FBQU07QUFDRixNQUFBOzs7O0VBQU07SUFDVyxxQkFBQyxJQUFEO01BQ1QsSUFBQyxDQUFBLElBQUQsR0FBUTtNQUNSLElBQUMsQ0FBQSxRQUFELEdBQVksQ0FBQyxJQUFELEVBQU0sS0FBTixFQUFVLEtBQVYsRUFBYyxJQUFkLEVBQW1CLEtBQW5CO0lBRkg7Ozs7OztFQUlYO0lBQ1csb0JBQUMsTUFBRDtBQUNULFVBQUE7TUFBQSxJQUFDLENBQUEsTUFBRCxHQUFVLE1BQUEsSUFBVTtNQUNwQixJQUFDLENBQUEsTUFBRCxHQUFVLElBQUMsQ0FBQSxNQUFNLENBQUM7TUFDbEIsSUFBQyxDQUFBLGFBQUQsR0FBcUIsSUFBQSxLQUFBLENBQU0sSUFBQyxDQUFBLE1BQU0sQ0FBQyxNQUFkO0FBQ3JCLFdBQWtDLG9HQUFsQztRQUFBLElBQUMsQ0FBQSxhQUFjLENBQUEsQ0FBQSxDQUFmLEdBQW9CO0FBQXBCO0lBSlM7O3lCQU1iLEdBQUEsR0FBSyxTQUFDLE1BQUQ7QUFDRCxVQUFBO01BQUEsSUFBQyxDQUFBLE1BQUQsR0FBVSxNQUFBLElBQVU7TUFDcEIsSUFBQyxDQUFBLE1BQUQsR0FBVSxJQUFDLENBQUEsTUFBTSxDQUFDO01BQ2xCLElBQUMsQ0FBQSxhQUFELEdBQXFCLElBQUEsS0FBQSxDQUFNLElBQUMsQ0FBQSxNQUFNLENBQUMsTUFBZDtBQUNyQjtXQUFrQyxvR0FBbEM7cUJBQUEsSUFBQyxDQUFBLGFBQWMsQ0FBQSxDQUFBLENBQWYsR0FBb0I7QUFBcEI7O0lBSkM7O3lCQU1MLE1BQUEsR0FBUSxTQUFDLEtBQUQ7QUFDSixVQUFBO01BQUEsSUFBQSxHQUFPLElBQUMsQ0FBQSxhQUFjLENBQUEsS0FBQTtNQUN0QixJQUFHLENBQUMsSUFBSjtRQUNJLElBQUEsR0FBVyxJQUFBLFdBQUEsQ0FBWSxJQUFDLENBQUEsTUFB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LEtBQU0sQ0FBQSxDQUFBLENBQUUsQ0FBQyxPQUFWLEdBQW9CO3FCQUNwQixJQUFDLENBQUEsS0FBTSxDQUFBLENBQUEsQ0FBRSxDQUFDLE1BQVYsQ0FBQSxHQUZKO09BQUEsTUFBQTs2QkFBQTs7QUFESjs7RUEvQkk7Ozs7R0FoTzZCLEVBQUUsQ0FBQzs7QUFzUTVDLEVBQUUsQ0FBQywwQkFBSCxHQUFnQyIsInNvdXJjZXNDb250ZW50IjpbIiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuI1xuIyAgIFNjcmlwdDogQ29tcG9uZW50X0RhdGFHcmlkQmVoYXZpb3JcbiNcbiMgICAkJENPUFlSSUdIVCQkXG4jXG4jID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbmNsYXNzIENvbXBvbmVudF9EYXRhR3JpZEJlaGF2aW9yIGV4dGVuZHMgZ3MuQ29tcG9uZW50X1Zpc3VhbFxuICAgIGNsYXNzIERhdGFXcmFwcGVyXG4gICAgICAgIGNvbnN0cnVjdG9yOiAoZGF0YSkgLT5cbiAgICAgICAgICAgIEBkYXRhID0gZGF0YVxuICAgICAgICAgICAgQHZpZXdEYXRhID0gW3llcywgbm8sIG5vLCB5ZXMsIG5vXVxuICAgIFxuICAgIGNsYXNzIERhdGFTb3VyY2VcbiAgICAgICAgY29uc3RydWN0b3I6IChzb3VyY2UpIC0+XG4gICAgICAgICAgICBAc291cmNlID0gc291cmNlIHx8IFtdXG4gICAgICAgICAgICBAbGVuZ3RoID0gQHNvdXJjZS5sZW5ndGhcbiAgICAgICAgICAgIEB3cmFwcGVkU291cmNlID0gbmV3IEFycmF5KEBzb3VyY2UubGVuZ3RoKVxuICAgICAgICAgICAgQHdyYXBwZWRTb3VyY2VbaV0gPSBudWxsIGZvciBpIGluIFswLi5Ad3JhcHBlZFNvdXJjZS5sZW5ndGhdXG4gICAgICAgICAgICAgICAgXG4gICAgICAgIHNldDogKHNvdXJjZSkgLT5cbiAgICAgICAgICAgIEBzb3VyY2UgPSBzb3VyY2UgfHwgW11cbiAgICAgICAgICAgIEBsZW5ndGggPSBAc291cmNlLmxlbmd0aFxuICAgICAgICAgICAgQHdyYXBwZWRTb3VyY2UgPSBuZXcgQXJyYXkoQHNvdXJjZS5sZW5ndGgpXG4gICAgICAgICAgICBAd3JhcHBlZFNvdXJjZVtpXSA9IG51bGwgZm9yIGkgaW4gWzAuLkB3cmFwcGVkU291cmNlLmxlbmd0aF1cbiAgICAgICAgICAgIFxuICAgICAgICBpdGVtQXQ6IChpbmRleCkgLT5cbiAgICAgICAgICAgIGl0ZW0gPSBAd3JhcHBlZFNvdXJjZVtpbmRleF1cbiAgICAgICAgICAgIGlmICFpdGVtXG4gICAgICAgICAgICAgICAgaXRlbSA9IG5ldyBEYXRhV3JhcHBlcihAc291cmNlW2luZGV4XSlcbiAgICAgICAgICAgICAgICBAd3JhcHBlZFNvdXJjZVtpbmRleF0gPSBpdGVtXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gaXRlbVxuICAgIFxuICAgICAgICBzZXRJdGVtQXQ6KGluZGV4LCBkYXRhKSAtPlxuICAgICAgICAgICAgaWYgQHdyYXBwZWRTb3VyY2VbaW5kZXhdXG4gICAgICAgICAgICAgICAgQHdyYXBwZWRTb3VyY2VbaW5kZXhdLmRhdGEgPSBkYXRhXG4gICAgICAgICAgICBAc291cmNlW2luZGV4XSA9IGRhdGFcbiAgICAgICAgICAgIFxuICAgIEBhY2Nlc3NvcnMgXCJkYXRhU291cmNlXCIsIFxuICAgICAgICBzZXQ6ICh2KSAtPlxuICAgICAgICAgICAgaWYgdiAhPSBAZGF0YVNvdXJjZV8uc291cmNlXG4gICAgICAgICAgICAgICAgQGRhdGFTb3VyY2VfLnNldCh2KVxuICAgICAgICAgICAgICAgIEByZXNpemUoKVxuICAgICAgICBnZXQ6IC0+IEBkYXRhU291cmNlX1xuICAgICAgICBcbiAgICAjIyMqXG4gICAgKiBDYWxsZWQgaWYgdGhpcyBvYmplY3QgaW5zdGFuY2UgaXMgcmVzdG9yZWQgZnJvbSBhIGRhdGEtYnVuZGxlLiBJdCBjYW4gYmUgdXNlZFxuICAgICogcmUtYXNzaWduIGV2ZW50LWhhbmRsZXIsIGFub255bW91cyBmdW5jdGlvbnMsIGV0Yy5cbiAgICAqIFxuICAgICogQG1ldGhvZCBvbkRhdGFCdW5kbGVSZXN0b3JlLlxuICAgICogQHBhcmFtIE9iamVjdCBkYXRhIC0gVGhlIGRhdGEtYnVuZGxlXG4gICAgKiBAcGFyYW0gZ3MuT2JqZWN0Q29kZWNDb250ZXh0IGNvbnRleHQgLSBUaGUgY29kZWMtY29udGV4dC5cbiAgICAjIyNcbiAgICBvbkRhdGFCdW5kbGVSZXN0b3JlOiAoZGF0YSwgY29udGV4dCkgLT5cbiAgICAgICAgQHNldHVwRXZlbnRIYW5kbGVycygpXG4gICAgICAgIFxuICAgICMjIypcbiAgICAqIFRoZSBkYXRhLWdyaWQgYmVoYXZpb3IgY29tcG9uZW50IGRlZmluZXMgdGhlIGxvZ2ljIGZvciBhIGRhdGEtZ3JpZC4gQSBkYXRhLWdyaWRcbiAgICAqIGFsbG93cyB0byBkaXNwbGF5IGl0ZW1zIGZyb20gYSBhc3NvY2lhdGVkIGRhdGEtc291cmNlIHVzaW5nIGEgc3BlY2lmaWVkXG4gICAgKiBpdGVtLXRlbXBsYXRlLiBVbmxpa2UgYSBzdGFjay1sYXlvdXQsIGEgZGF0YS1ncmlkIGlzIG9wdGltaXplZCB0byBkaXNwbGF5IGV2ZW4gaGlnaCBhbW91bnRzIG9mIGl0ZW1zIGJ1dCB0aGV5IGFsbFxuICAgICogbmVlZCB0byB1c2UgdGhlIHNhbWUgaXRlbS10ZW1wbGF0ZSB3aXRoIHNhbWUgc2l6ZS5cbiAgICAqXG4gICAgKiBAbW9kdWxlIHVpXG4gICAgKiBAY2xhc3MgQ29tcG9uZW50X0RhdGFHcmlkQmVoYXZpb3JcbiAgICAqIEBleHRlbmRzIGdzLkNvbXBvbmVudF9WaXN1YWxcbiAgICAqIEBtZW1iZXJvZiB1aVxuICAgICogQGNvbnN0cnVjdG9yXG4gICAgKiBAcGFyYW1zIHtPYmplY3R9IHBhcmFtcyAtIFRoZSBwYXJhbXMtb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGRhdGEtZ3JpZCBzZXR0aW5ncy5cbiAgICAjIyNcbiAgICBjb25zdHJ1Y3RvcjogKHBhcmFtcykgLT5cbiAgICAgICAgc3VwZXIoKVxuICAgICAgICBAcGFyYW1zID0gcGFyYW1zIHx8IHt9XG4gICAgICAgICMjIypcbiAgICAgICAgKiBUaGUgaXRlbS10ZW1wbGF0ZSBkZXNjcmlwdG9yIHVzZWQgZm9yIGVhY2ggaXRlbSBvZiB0aGUgZGF0YS1ncmlkLlxuICAgICAgICAqIEBwcm9wZXJ0eSB0ZW1wbGF0ZVxuICAgICAgICAqIEB0eXBlIE9iamVjdFxuICAgICAgICAjIyNcbiAgICAgICAgQHRlbXBsYXRlID0gQHBhcmFtcy50ZW1wbGF0ZVxuICAgICAgICBcbiAgICAgICAgIyMjKlxuICAgICAgICAqIFRoZSBkYXRhLXNvdXJjZSB1c2VkIGZvciB0aGUgZGF0YS1ncmlkLiBDYW4gYmUgYW4gYXJyYXkgb3IgYSBmb3JtdWxhLlxuICAgICAgICAqIEBwcm9wZXJ0eSBkYXRhU291cmNlXG4gICAgICAgICogQHR5cGUgT2JqZWN0W118c3RyaW5nXG4gICAgICAgICMjI1xuICAgICAgICBAZGF0YVNvdXJjZV8gPSBudWxsXG4gICAgICAgIFxuICAgICAgICAjIyMqXG4gICAgICAgICogU3RvcmVzIHRoZSBpdGVtLW9iamVjdHMgbmVlZGVkIGZvciByZW5kZXJpbmcuIFRoZXkgYXJlIGNyZWF0ZWQgZnJvbSB0aGUgaXRlbS10ZW1wbGF0ZS5cbiAgICAgICAgKiBAcHJvcGVydHkgaXRlbXNcbiAgICAgICAgKiBAcHJvdGVjdGVkXG4gICAgICAgICogQHR5cGUgZ3MuT2JqZWN0X0Jhc2VbXVxuICAgICAgICAjIyNcbiAgICAgICAgQGl0ZW1zID0gQHBhcmFtcy5pdGVtcyB8fCBbXVxuICAgICAgICBcbiAgICAgICAgIyMjKlxuICAgICAgICAqIE51bWJlcnMgb2YgY29sdW1ucy5cbiAgICAgICAgKiBAcHJvcGVydHkgY29sdW1uc1xuICAgICAgICAqIEB0eXBlIG51bWJlclxuICAgICAgICAjIyNcbiAgICAgICAgQGNvbHVtbnMgPSBAcGFyYW1zLmNvbHVtbnMgfHwgMVxuICAgICAgICBcbiAgICAgICAgIyMjKlxuICAgICAgICAqIEluZGljYXRlcyBpZiB0aGUgZGF0YS1ncmlkIGlzIGluaXRpYWxpemVkIGFuZCByZWFkeSBmb3IgcmVuZGVyaW5nLlxuICAgICAgICAqIEBwcm9wZXJ0eSBpbml0aWFsaXplZFxuICAgICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgICAgKiBAdHlwZSBib29sZWFuXG4gICAgICAgICMjI1xuICAgICAgICBAaW5pdGlhbGl6ZWQgPSBub1xuICAgICAgICBcbiAgICAgICAgIyMjKlxuICAgICAgICAqIERlZmluZXMgYSBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBzcGFjaW5nIGJldHdlZW4gaXRlbXMuXG4gICAgICAgICogQHByb3BlcnR5IHNwYWNpbmdcbiAgICAgICAgKiBAZGVmYXVsdCBbMCwgMTBdICAgICAgICBcbiAgICAgICAgKiBAdHlwZSBudW1iZXJbXVxuICAgICAgICAjIyNcbiAgICAgICAgQHNwYWNpbmcgPSBAcGFyYW1zLnNwYWNpbmcgfHwgWzAsIDBdXG4gICAgIFxuICAgICMjIypcbiAgICAqIEFkZHMgZXZlbnQtaGFuZGxlcnMgZm9yIG1vdXNlL3RvdWNoIGV2ZW50c1xuICAgICpcbiAgICAqIEBtZXRob2Qgc2V0dXBFdmVudEhhbmRsZXJzXG4gICAgIyMjIFxuICAgIHNldHVwRXZlbnRIYW5kbGVyczogLT5cbiAgICAgICAgZ3MuR2xvYmFsRXZlbnRNYW5hZ2VyLm9uIFwibW91c2VXaGVlbFwiLCA9PlxuICAgICAgICAgICAgciA9IEBvYmplY3QuZHN0UmVjdFxuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiBSZWN0LmNvbnRhaW5zKHIueCwgci55LCByLndpZHRoLCByLmhlaWdodCwgSW5wdXQuTW91c2UueCAtIEBvYmplY3Qub3JpZ2luLngsIElucHV0Lk1vdXNlLnkgLSBAb2JqZWN0Lm9yaWdpbi55KVxuICAgICAgICAgICAgICAgIEB1cGRhdGVTY3JvbGwoKVxuICAgIFxuICAgICMjIypcbiAgICAqIFNldHMgdXAgdGhlIGRhdGEtZ3JpZC5cbiAgICAqXG4gICAgKiBAbWV0aG9kIHNldHVwXG4gICAgIyMjICAgXG4gICAgc2V0dXA6IC0+XG4gICAgICAgIGlmIEBvYmplY3QuZHN0UmVjdC53aWR0aCA9PSAxIHRoZW4gcmV0dXJuXG4gICAgICAgIEBpbml0aWFsaXplZCA9IHllc1xuXG4gICAgICAgIGlmICFAdGVtcGxhdGUuc2l6ZVxuICAgICAgICAgICAgaXRlbSA9IHVpLlVJTWFuYWdlci5jcmVhdGVDb250cm9sRnJvbURlc2NyaXB0b3IoQHRlbXBsYXRlLmRlc2NyaXB0b3IsIEBvYmplY3QpXG4gICAgICAgICAgICBpdGVtLmluZGV4ID0gMFxuICAgICAgICAgICAgaXRlbS51cGRhdGUoKVxuICAgICAgICAgICAgQHRlbXBsYXRlLnNpemUgPSBbaXRlbS5kc3RSZWN0LndpZHRoLCBpdGVtLmRzdFJlY3QuaGVpZ2h0XVxuICAgICAgICAgICAgaXRlbS5kaXNwb3NlKClcbiAgICAgICAgICAgIFxuICAgICAgICBpZiBAcGFyYW1zLmRhdGFTb3VyY2UuZXhlY1xuICAgICAgICAgICAgQGRhdGFTb3VyY2VfID0gbmV3IERhdGFTb3VyY2UodWkuQ29tcG9uZW50X0Zvcm11bGFIYW5kbGVyLmZpZWxkVmFsdWUoQG9iamVjdCwgQHBhcmFtcy5kYXRhU291cmNlKSB8fCBbXSlcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgQGRhdGFTb3VyY2VfID0gbmV3IERhdGFTb3VyY2UoQHBhcmFtcy5kYXRhU291cmNlIHx8IFtdKVxuICAgICAgICBcbiAgICAgICAgQHJlc2l6ZSgpXG4gICAgICAgIFxuICAgICAgICBAc2V0dXBFdmVudEhhbmRsZXJzKClcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgc3VwZXIoKVxuICAgIFxuICAgICAgICBAb2JqZWN0LnNjcm9sbGFibGVIZWlnaHQgPSBNYXRoLm1heCgwLCBAb2JqZWN0LmNvbnRlbnRIZWlnaHQgLSBAb2JqZWN0LmRzdFJlY3QuaGVpZ2h0KVxuICAgICBcbiAgICBcbiAgICAjIyMqXG4gICAgKiBTY3JvbGxzIHRvIHRoZSBlbmQuXG4gICAgKlxuICAgICogQG1ldGhvZCBzY3JvbGxUb0VuZFxuICAgICMjIyAgICBcbiAgICBzY3JvbGxUb0VuZDogLT5cbiAgICAgICAgQG9iamVjdC5zY3JvbGxPZmZzZXRZID0gQG9iamVjdC5zY3JvbGxhYmxlSGVpZ2h0XG4gICAgICAgIFxuICAgICMjIypcbiAgICAqIFVwZGF0ZXMgc2Nyb2xsaW5nLlxuICAgICpcbiAgICAqIEBtZXRob2QgdXBkYXRlU2Nyb2xsXG4gICAgIyMjXG4gICAgdXBkYXRlU2Nyb2xsOiAtPlxuICAgICAgICBAb2JqZWN0LnNjcm9sbGFibGVIZWlnaHQgPSBNYXRoLm1heCgwLCBAb2JqZWN0LmNvbnRlbnRIZWlnaHQgLSBAb2JqZWN0LmRzdFJlY3QuaGVpZ2h0KVxuICAgICAgICBpZiBJbnB1dC5Nb3VzZS53aGVlbCA8PSAtMVxuICAgICAgICAgICAgQG9iamVjdC5zY3JvbGxPZmZzZXRZID0gTWF0aC5tYXgoQG9iamVjdC5zY3JvbGxPZmZzZXRZIC0gSW5wdXQuTW91c2Uud2hlZWxTcGVlZCAqIDAuMSwgMClcbiAgICAgICAgICAgXG4gICAgICAgIGlmIElucHV0Lk1vdXNlLndoZWVsID49IDFcbiAgICAgICAgICAgIEBvYmplY3Quc2Nyb2xsT2Zmc2V0WSA9IE1hdGgubWluKEBvYmplY3Quc2Nyb2xsT2Zmc2V0WSAtIElucHV0Lk1vdXNlLndoZWVsU3BlZWQgKiAwLjEsIEBvYmplY3Quc2Nyb2xsYWJsZUhlaWdodClcbiAgICAgICAgICAgIFxuICAgIFxuICAgICAgICBAb2JqZWN0LnNjcm9sbE9mZnNldFkgPSBNYXRoLm1heChNYXRoLm1pbihAb2JqZWN0LnNjcm9sbE9mZnNldFksIEBvYmplY3Quc2Nyb2xsYWJsZUhlaWdodCksIDApXG4gICAgICAgICBcbiAgICAjIyMqXG4gICAgKiBSZXNpemVzIHRoZSBkYXRhLWdyaWQgYW5kIGNyZWF0ZXMgdGhlIG5lY2Vzc2FyeSBkaXNwbGF5IG9iamVjdHMgZnJvbSB0aGUgZGF0YS1ncmlkIHRlbXBsYXRlLlxuICAgICpcbiAgICAqIEBtZXRob2QgcmVzaXplXG4gICAgIyMjICAgICBcbiAgICByZXNpemU6IC0+XG4gICAgICAgIHdpZHRoID0gQG9iamVjdC5kc3RSZWN0LndpZHRoXG4gICAgICAgIGhlaWdodCA9IEBvYmplY3QuZHN0UmVjdC5oZWlnaHRcbiAgICAgICAgXG4gICAgICAgIGl0ZW1zWCA9IEBjb2x1bW5zIHx8IDFcbiAgICAgICAgaXRlbXNZID0gTWF0aC5jZWlsKChoZWlnaHQtQHNwYWNpbmdbMV0pIC8gKEB0ZW1wbGF0ZS5zaXplWzFdK0BzcGFjaW5nWzFdKSkgKyBAY29sdW1ucysxXG4gICAgICAgIHRvdGFsSXRlbXNZID0gTWF0aC5jZWlsKEBkYXRhU291cmNlLmxlbmd0aCAvIEBjb2x1bW5zKVxuICAgICAgICBcbiAgICAgICAgaXRlbT8uZGlzcG9zZSgpIGZvciBpdGVtIGluIEBpdGVtc1xuICAgICAgICBAaXRlbXMgPSBbXSAjbmV3IEFycmF5KGl0ZW1zWCAqIGl0ZW1zWSlcbiAgICAgICAgXG4gICAgICAgIGZvciB5IGluIFswLi4uaXRlbXNZXVxuICAgICAgICAgICAgZm9yIHggaW4gWzAuLi5pdGVtc1hdXG4gICAgICAgICAgICAgICAgaW5kZXggID0geSAqIGl0ZW1zWCArIHhcbiAgICAgICAgICAgICAgICBpZiBpbmRleCA8IEBkYXRhU291cmNlLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICBpdGVtID0gdWkuVUlNYW5hZ2VyLmNyZWF0ZUNvbnRyb2xGcm9tRGVzY3JpcHRvcihAdGVtcGxhdGUuZGVzY3JpcHRvciwgQG9iamVjdClcblxuICAgICAgICAgICAgICAgICAgICBpdGVtLmRhdGFbMF0gPSBAZGF0YVNvdXJjZS5pdGVtQXQoaW5kZXgpLmRhdGEgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBpdGVtLmRzdFJlY3QueCA9IEBzcGFjaW5nWzBdICsgeCAqIChAdGVtcGxhdGUuc2l6ZVswXStAc3BhY2luZ1swXSlcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5kc3RSZWN0LnkgPSBAc3BhY2luZ1sxXSArIHkgKiAoQHRlbXBsYXRlLnNpemVbMV0rQHNwYWNpbmdbMV0pXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uZHN0UmVjdC53aWR0aCA9IEB0ZW1wbGF0ZS5zaXplWzBdXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uZHN0UmVjdC5oZWlnaHQgPSBAdGVtcGxhdGUuc2l6ZVsxXVxuICAgICAgICAgICAgICAgICAgICBpdGVtLmluZGV4ID0gaW5kZXhcbiAgICAgICAgICAgICAgICAgICAgaXRlbS51aS52aWV3RGF0YSA9IEBkYXRhU291cmNlLml0ZW1BdChpbmRleCkudmlld0RhdGFcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIEBpdGVtc1tpdGVtLmluZGV4XSA9IGl0ZW1cbiAgICAgICAgICAgICAgICAgICAgQG9iamVjdC5hZGRPYmplY3QoaXRlbSlcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgQG9iamVjdC5zY3JvbGxhYmxlSGVpZ2h0ID0gQHNwYWNpbmdbMV0gKyB0b3RhbEl0ZW1zWSAqIChAdGVtcGxhdGUuc2l6ZVsxXStAc3BhY2luZ1sxXSkgLSBoZWlnaHRcbiAgICAgICAgQG9iamVjdC5zY3JvbGxPZmZzZXRZID0gMFxuICAgICAgICBAb2JqZWN0LmNvbnRlbnRIZWlnaHQgPSBAc3BhY2luZ1sxXSArIHRvdGFsSXRlbXNZICogKEB0ZW1wbGF0ZS5zaXplWzFdK0BzcGFjaW5nWzFdKVxuXG4gICAgaXRlbUF0SW5kZXg6IChpbmRleCkgLT5cbiAgICAgICAgQGl0ZW1zLmZpcnN0IChpdGVtKSAtPiBpdGVtLmluZGV4ID09IGluZGV4XG4gICAgICAgIFxuICAgIGluZGV4Rm9ySXRlbTogKGl0ZW0pIC0+IGl0ZW0uaW5kZXhcbiAgICAgICAgXG4gICAgIyMjKlxuICAgICogVXBkYXRlcyB0aGUgZGF0YS1ncmlkLlxuICAgICpcbiAgICAqIEBtZXRob2QgdXBkYXRlXG4gICAgIyMjICBcbiAgICB1cGRhdGU6IC0+XG4gICAgICAgIHN1cGVyKClcbiAgICAgICAgXG4gICAgICAgIGlmIG5vdCBAaW5pdGlhbGl6ZWRcbiAgICAgICAgICAgIEBzZXR1cCgpXG4gICAgICAgIFxuICAgICAgICBzY3JvbGxPZmZzZXQgPSBAb2JqZWN0LnNjcm9sbE9mZnNldFlcbiAgICAgICAgb2Zmc2V0ID0gTWF0aC5mbG9vcigoc2Nyb2xsT2Zmc2V0KSAvIChAdGVtcGxhdGUuc2l6ZVsxXStAc3BhY2luZ1sxXSkpICogQGNvbHVtbnNcbiAgICAgICAgaSA9IG9mZnNldFxuICAgICAgICBpdGVtSW5kZXggPSAwXG4gICAgICAgIGl0ZW1zWSA9IE1hdGguY2VpbCgoQG9iamVjdC5kc3RSZWN0LmhlaWdodC1Ac3BhY2luZ1sxXSkgLyAgKEB0ZW1wbGF0ZS5zaXplWzFdK0BzcGFjaW5nWzFdKSkgKiBAY29sdW1ucyArIEBjb2x1bW5zKzFcbiAgICAgICAgXG4gICAgICAgIHdoaWxlIGkgPCBNYXRoLm1pbihvZmZzZXQraXRlbXNZLCBAZGF0YVNvdXJjZS5sZW5ndGgpXG4gICAgICAgICAgICByb3cgPSBNYXRoLmZsb29yKGkgLyBAY29sdW1ucylcbiAgICAgICAgICAgIGNvbHVtbiA9IGkgJSBAY29sdW1uc1xuICAgICAgICAgICAgaXRlbSA9IEBpdGVtc1tpdGVtSW5kZXhdXG4gICAgICAgICAgICBpZiBpdGVtXG4gICAgICAgICAgICAgICAgaXRlbS5kYXRhWzBdID0gQGRhdGFTb3VyY2UuaXRlbUF0KGkpLmRhdGFcbiAgICAgICAgICAgICAgICBpZiBAb2JqZWN0LmNsaXBSZWN0XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uY2xpcFJlY3QgPSBAb2JqZWN0LmNsaXBSZWN0XG4gICAgICAgICAgICAgICAgaXRlbS5pbmRleCA9IGlcbiAgICAgICAgICAgICAgICBpdGVtLnVpLnZpZXdEYXRhID0gQGRhdGFTb3VyY2UuaXRlbUF0KGkpLnZpZXdEYXRhXG4gICAgICAgICAgICAgICAgaXRlbS5kc3RSZWN0LnggPSBAc3BhY2luZ1swXSArIGNvbHVtbiAqIChAdGVtcGxhdGUuc2l6ZVswXStAc3BhY2luZ1swXSlcbiAgICAgICAgICAgICAgICBpdGVtLmRzdFJlY3QueSA9IEBzcGFjaW5nWzFdICsgKHJvdy0ob2Zmc2V0L0Bjb2x1bW5zKSkgKiAoQHRlbXBsYXRlLnNpemVbMV0rQHNwYWNpbmdbMV0pICsgKC1zY3JvbGxPZmZzZXQgJSAoQHRlbXBsYXRlLnNpemVbMV0rQHNwYWNpbmdbMV0pKVxuICAgICAgICAgICAgICAgIGl0ZW0udmlzaWJsZSA9IHllc1xuICAgICAgICAgICAgICAgIGl0ZW0udXBkYXRlKClcbiAgICAgICAgICAgICAgICBpdGVtLnVwZGF0ZSgpXG4gICAgICAgICAgICAgICAgaXRlbUluZGV4KytcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICBpKytcbiAgICAgICAgXG4gICAgICAgIGZvciBqIGluIFtpdGVtSW5kZXguLi5AaXRlbXMubGVuZ3RoXVxuICAgICAgICAgICAgaWYgQGl0ZW1zW2pdXG4gICAgICAgICAgICAgICAgQGl0ZW1zW2pdLnZpc2libGUgPSBub1xuICAgICAgICAgICAgICAgIEBpdGVtc1tqXS51cGRhdGUoKVxuICAgICAgICBcbiAgICAgICAgXG4gICAgICAgIFxudWkuQ29tcG9uZW50X0RhdGFHcmlkQmVoYXZpb3IgPSBDb21wb25lbnRfRGF0YUdyaWRCZWhhdmlvciJdfQ== //# sourceURL=Component_DataGridBehavior_174.js |