Subversion Repository Public Repository

Nextrek

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

Commits for Nextrek/s2s/development/Component_DataGridBehavior_CE4F231B812401459218A74604DDF88C533C.js

Diff revisions: vs.
Revision Author Commited Message
1101 Diff Diff ASorrentino picture ASorrentino Wed 16 May, 2018 21:31:54 +0000
1096 Diff Diff ASorrentino picture ASorrentino Wed 16 May, 2018 13:01:21 +0000

Testi

1086 Diff Diff ASorrentino picture ASorrentino Fri 11 May, 2018 21:50:37 +0000
1084 MOliva picture MOliva Fri 11 May, 2018 12:41:55 +0000