PageSourceSearch

https://masonrymagazine.com/DXR.axd?r=23_19-Y3vLw&order=16

js masonrymagazine.com collected 2026-10-02 04:04:49 UTC 20,407 bytes, 476 lines download raw bytes

1ASPx.IS(function(ASPx, dx, DevExpress){
2(function(dx) {
3 var BootstrapClientCardView = ASPx.CreateClass(ASPxClientCardView, {
4  constructor: function(name) {
5   this.constructor.prototype.constructor.call(this, name);
6   this.HeaderFilterButtonClassName = FILTER_BUTTON_CLASS;
7   this.checkBoxImageProperties = {};
8   this.accessibilityCompliant = true;
9  },
10  Initialize: function() {
11   ASPxClientCardView.prototype.Initialize.call(this);
12   this.attachHtmlHandlers();
13  },
14  InitializeAdjustment: function() {
15   ASPxClientCardView.prototype.InitializeAdjustment.call(this);
16   this.initializeCardImagesAdjustment();
17  },
18  attachHtmlHandlers: function() {
19   this.attachHeaderHandlers();
20   this.attachMainContentHandlers();
21   this.attachDataItemHandlers();
22  },
23  detachHtmlHandlers: function() {
24  },
25  attachHeaderHandlers: function() {
26   var columnCount = this.columns.length;
27   for(var i = 0; i < columnCount; i++)
28    this.attachHeaderHandler(this.columns[i]);
29  },
30  attachHeaderHandler: function(column) {
31   var headerElement = this.GetHeader(column.index, false) || this.GetHeader(column.index, true);
32   if(headerElement) this.attachHeaderHandlerOnElement(headerElement);
33  },
34  attachHeaderHandlerOnElement: function(headerElement) {
35   ASPx.Evt.AttachEventToElement(headerElement, "mousedown", function(evt) {
36    this.HeaderMouseDown(headerElement, evt);
37   }.bind(this));
38   var links = headerElement.querySelectorAll("a");
39   for(var i = 0, link; link = links[i]; i++)
40    link.ondragstart = function() { return false; };
41   var sortElements = headerElement.querySelectorAll(SELECTORS.HEADER_SORT);
42   for(var i = 0, sortEl; sortEl = sortElements[i]; i++)
43    this.attachHeaderSortHandler(sortEl, headerElement);
44  },
45  attachHeaderSortHandler: function(el, headerElement) {
46   ASPx.Evt.AttachEventToElement(el, "click", function(evt) {
47    window.setTimeout(function() {
48     if(this.contextMenuActivating) {
49      this.contextMenuActivating = false;
50      return;
51     }
52     if(!this.canSortByColumn(headerElement) || this.InRegularCallback())
53      return;
54     this.SortBy(this.getColumnIndex(headerElement.id), evt.ctrlKey ? "NONE" : "", !evt.shiftKey && !evt.ctrlKey);
55    }.bind(this), 0);
56    return ASPx.Evt.PreventEvent(evt);
57   }.bind(this));
58  },
59  InitializeBubbleEvents: function() { },
60  attachMainContentHandlers: function () {
61   var mainTable = this.GetMainTable();
62   ASPx.Evt.AttachEventToElement(mainTable, "click", function (evt) {
63    if(this.NeedProcessTableClick(evt))
64     this.mainTableClick(evt);
65   }.bind(this), true);
66   ASPx.Evt.AttachEventToElement(mainTable, "dblclick", function (evt) {
67    if(this.NeedProcessTableClick(evt))
68     this.mainTableDblClick(evt);
69   }.bind(this), true);
70  },
71  attachDataItemHandlers: function() {
72   if(!this.allowBatchEditing) return;
73   var datachecks = this.GetMainElement().querySelectorAll(SELECTORS.BATCHEDIT_DATACHECK);
74   for (var i = 0, check; check = datachecks[i]; i++) {
75    if (!this.isCurrentCardViewElement(check)) continue;
76    if (!check.disabled)
77     this.attachDataCellCheckHandler(check);
78   }
79   var list = this.GetFocusableLayoutItemsList();
80   for(var i = 0; i < this.pageRowCount; i++) {
81    var rowIndex = i + this.visibleStartIndex;
82    var row = this.GetDataItem(rowIndex);
83    if(row) {
84     for(var j = 0; j < list.length; j++) {
85      var itemPath = list[j].path;
86      var itemElement = this.GetFormLayoutItemCellByPath(rowIndex, itemPath);
87      if(itemElement) {
88       var dataElement = this.getDataElement(itemElement);
89       if(dataElement) dataElement.tabIndex = 0;
90      }
91     }
92    }
93   }
94   var batchEditHelperOwner = this.GetBatchEditHelperOwner();
95   if(batchEditHelperOwner) {
96    var etalonItem = batchEditHelperOwner.GetEtalonNewItem();
97    if(etalonItem) {
98     for(var j = 0; j < list.length; j++) {
99      var itemPath = list[j].path;
100      var itemElement = this.GetFormLayoutItemCellByPath(this.EtalonBatchRecordPostFix, itemPath);
101      if(itemElement) {
102       var dataElement = this.getDataElement(itemElement);
103       if(dataElement) dataElement.tabIndex = 0;
104      }
105     }
106    }
107   }
108  },
109  attachDataCellCheckHandler: function (check) {
110   ASPx.Evt.AttachEventToElement(check, "click", function (evt) {
111    this.ProcessTableClick(evt, false);
112   }.bind(this));
113  },
114  prepareBatchEditors: function() {
115   var container = this.GetChildElement("DXBEsC");
116   var editorsContainers = container.querySelectorAll("[data-dxci]");
117   for(var i = editorsContainers.length - 1; i >= 0; i--) {
118    editorsContainers[i].id = this.name + "_" + "DXBEC" + ASPx.Attr.GetAttribute(editorsContainers[i], "data-dxci");
119   }
120  },
121  GetGridTD: function() {
122   return this.GetMainElement();
123  },
124  GetMainTable: function() { 
125   return ASPx.GetNodeByClassName(this.GetMainElement(), "dxbs-content");
126  },
127  IsMainTableChildElement: function(src) {
128   if(!src) return true;
129   return ASPx.GetIsParent(this.GetMainTable(), src);
130  },
131  GetFormLayoutItemCellByChild: function(element) { 
132   var cell = ASPx.GetParentByClassName(element, "form-group");
133   return cell ? cell.parentNode : null;
134  },
135  GetLoadingPanelElement: function(){
136   return ASPx.BootstrapLoadingPanelManager.getLoadingPanel(this.name, this.loadingPanel);
137  },
138  GetLoadingDiv: function(){
139   return ASPx.BootstrapLoadingPanelManager.getLoadingDiv(this.name, this.loadingPanel);
140  },
141  IsRecoverButton: function(button) {
142   return ASPx.Attr.GetAttribute(button, "data-toggle") === DATA_TOGGLES.ROW_RECOVER;
143  },
144  getDataElement: function(itemElement){
145   var element = ASPx.GetNodeByClassName(itemElement, ASPx.BootstrapCssSelectors.FormControlStatic);
146   if(!element)
147    element = ASPx.GetNodeByClassName(itemElement, "form-group");
148   return element;
149  },
150  ShowLoadingPanelInsideHeaderFilterPopup: function() {
151   var popup = this.GetHeaderFilterPopup();
152   var container = popup.GetContentContainer(-1);
153   var lp = ASPx.BootstrapLoadingPanelManager.getLoadingPanel(this.name + "_HF", this.loadingPanel, true);
154   if(lp) {
155    ASPx.Security.setInnerHtml(container, "", ASPx.Security.DataType.Trusted);
156    container.appendChild(lp);
157    popup.AfterSetWindowContentHtml(-1, container);
158   }
159  },
160  CreateLoadingPanelInline: function(parentElement, centerInParent){
161   var lp = ASPxClientGridView.prototype.CreateLoadingPanelInline.call(this, parentElement, centerInParent);
162   if(lp) lp.style.opacity = 1;
163  },
164  ProcessFullCallbackResult: function(result) {
165   this.needAttachHtmlHandler = true;
166   this.detachHtmlHandlers();
167   ASPxClientCardView.prototype.ProcessFullCallbackResult.call(this, result);
168  },
169  OnCallbackFinalized: function() {
170   if(this.needAttachHtmlHandler) {
171    this.needAttachHtmlHandler = false;
172    this.attachHtmlHandlers();
173   }
174   this.calculateCardsHeight();
175   this.initializeCardImagesAdjustment();
176   ASPxClientCardView.prototype.OnCallbackFinalized.call(this);
177  },
178  allowRestoreFocusOnCallbacks: function(){
179   return true;
180  },
181  OnPopupEditFormInit: function(popup) {
182   popup.CloseUp.AddHandler(function(s, e) {
183    if (e.closeReason === ASPxClientPopupControlCloseReason.Escape || e.closeReason === ASPxClientPopupControlCloseReason.CloseButton)
184     this.ScheduleUserCommand(['CancelEdit', -1], false);
185   }.bind(this));
186   ASPxClientCardView.prototype.OnPopupEditFormInit.call(this, popup);
187  },
188  CreateBatchEditHelper: function() { return new ASPx.BootstrapCardViewBatchEditHelper(this.CreateBatchEditHelperOwner()); },
189  CreateBatchEditHelperOwner: function() { return new ASPx.BootstrapCardViewBatchEditHelperOwner(this); },
190  CreateCellFocusHelper: function() { return new ASPx.BootstrapCardViewCellFocusHelper(this); },
191  CreateFilterHelper: function() { return new ASPx.BootstrapCardViewFilterHelper(this); },
192  CreateCallbackHelper: function () { return new BootstrapCardViewCallbackHelper(this); },
193  CreateToolbarHelper: function() { return new ASPx.BootstrapCardViewToolbarHelper(this); },
194  CreateNavigationHelper: function() { 
195   return typeof(ASPx.BootstrapCardViewNavigationHelper) != "undefined" ? new ASPx.BootstrapCardViewNavigationHelper(this) : null;
196  },
197  CreateStyleHelper: function() { return new BootstrapCardViewStyleHelper(this); },
198  CreateEndlessPagingHelper: function() { return new ASPx.BootstrapCardViewEndlessPagingHelper(this); },
199  ApplyItemStyle: function(visibleIndex, styleInfo) {
200   var item = this.GetItem(visibleIndex);
201   var cardContent = ASPx.GetChildByClassName(item, CARD_CLASS);
202   this.ApplyElementStyle(cardContent || item, styleInfo);
203  },
204  CreateEditingErrorItem: function() {
205   return document.createElement("div");
206  },
207  WrapErrorCard: function(card) {
208   var errorContainer = document.createElement("DIV");
209   ASPx.AddClassNameToElement(errorContainer, this.ErrorCardErrorContainerClassName);
210   ASPx.AddClassNameToElement(errorContainer, ASPx.BootstrapCssSelectors.BackgroundDanger);
211   var cardContent = ASPx.GetChildByClassName(card, ASPx.BootstrapCssSelectors.Panel);
212   var cardBody = ASPx.GetChildByClassName(cardContent, ASPx.BootstrapCssSelectors.PanelBody);
213   cardContent.insertBefore(errorContainer, cardBody);
214  },
215  PrepareCommandButtons: function() {
216   var mainElement = this.GetMainElement();
217   var buttons = mainElement.querySelectorAll("[data-toggle]");
218   for(var btn, i = 0; btn = buttons[i]; i++) {
219    var dataToggle = ASPx.Attr.GetAttribute(btn, "data-toggle");
220    if(!COMMANDS[dataToggle] || !this.isCurrentCardViewElement(btn) || btn.hasHandler) continue;
221    ASPx.Evt.AttachEventToElement(btn, "click", this.OnCommandButtonClick.bind(this, btn, dataToggle));
222    btn.hasHandler = true;
223   }
224  },
225  OnCommandButtonClick: function(btn, dataToggle) {
226   if(this.accessibilityCompliant && ASPx.Attr.IsExistsAttribute(btn, ASPx.Attr.Aria.disabled))
227    return;
228   var commandInfo = COMMANDS[dataToggle];
229   if(!commandInfo.hasIndex)
230    this.ScheduleUserCommand([commandInfo.method], commandInfo.postponed, btn);
231   else if (commandInfo.hasArgs) {
232    var visibleIndex = this.tryFindParentCardIndex(btn);
233    var args = ASPx.Attr.GetAttribute(btn, "data-args");
234    this.ScheduleUserCommand([commandInfo.method, args, visibleIndex >= 0 ? visibleIndex : INT32_MINVALUE], commandInfo.postponed, btn);
235   }
236   else {
237    var visibleIndex = this.tryFindParentCardIndex(btn);
238    this.ScheduleUserCommand([commandInfo.method, visibleIndex >= 0 ? visibleIndex : INT32_MINVALUE], commandInfo.postponed, btn);
239   }
240  },
241  IsCancelButton: function(button) {
242   return ASPx.Attr.GetAttribute(button, "data-toggle") === "cardview-cancelchanges";
243  },
244  GetBatchEditCommandButtons: function() {
245   var mainElement = this.GetMainElement();
246   var buttons = mainElement.querySelectorAll(SELECTORS.BATCHEDIT_SAVECHANGES + "," + SELECTORS.BATCHEDIT_CANCELCHANGES + "," + SELECTORS.BATCHEDIT_UPDATESUMMARIES);
247   var arr = [];
248   for(var btn, i = 0; btn = buttons[i]; i++) {
249    if(!this.isCurrentCardViewElement(btn)) continue;
250    arr.push(btn);
251   }
252   return arr;
253  },
254  isCurrentCardViewElement: function(element) {
255   return ASPx.GetParentByClassName(element, CARDVIEW_CLASS) === this.GetMainElement();
256  },
257  tryFindParentCardIndex: function(element) {
258   var regEx = this.GetItemVisibleIndexRegExp();
259   var cardEl = ASPx.GetParentByClassName(element, CARD_CLASS);
260   if(cardEl) {
261    var matches = regEx.exec(cardEl.parentNode.id);
262    if(matches && matches.length == 3)
263     return parseInt(matches[2]);
264   }
265   return -1;
266  },
267  isHeaderFilterButton: function(el) {
268   return ASPx.Attr.GetAttribute(el, "data-toggle") === DATA_TOGGLES.FILTER_POPUP ||
269    ASPx.Attr.GetAttribute(el.parentNode, "data-toggle") === DATA_TOGGLES.FILTER_POPUP;
270  },
271  CreateInternalCheckBoxCollection: function() {
272   if(!this.internalCheckBoxCollection)
273    this.internalCheckBoxCollection = new ASPx.BootstrapCheckBoxInternalCollection(true, false, false);
274   this.CompleteInternalCheckBoxCollection();
275  },
276  IsNativeCheckBoxes: function() {
277   return false;
278  },
279  IsCheckBoxDisabled: function(icbInputElement) {
280   return false;
281  },
282  AddInternalCheckBoxToCollection: function(icbMainElement, visibleIndex, enabled) {
283   var internalCheckBox = null;
284   if(this.IsLastCallbackProcessedAsEndless())
285    internalCheckBox = this.internalCheckBoxCollection.Get(icbMainElement.id);
286   if(internalCheckBox && internalCheckBox.mainElement != icbMainElement) {
287    this.internalCheckBoxCollection.Remove(icbMainElement.id);
288    internalCheckBox = null;
289   }
290   if(!internalCheckBox) {
291    internalCheckBox = this.internalCheckBoxCollection.Add(icbMainElement.id, icbMainElement);
292    if(visibleIndex >= 0) {
293     internalCheckBox.CheckedChanged.AddHandler(function(s, e) {
294      var rowCheckBox = this.GetDataRowSelBtn(visibleIndex);
295      if(this.allowSelectSingleRowOnly)
296       this._selectAllSelBtn(false, rowCheckBox.id);
297      if(!this.RaiseInternalCheckBoxClick(visibleIndex)) {
298       this.ScheduleCommand(function() { this.SelectItem(visibleIndex, s.GetChecked()); }.bind(this), true);
299       this.mainTableClickCore(e, true);
300      }
301     }.bind(this));
302    }
303    else {
304     internalCheckBox.CheckedChanged.AddHandler(function(s, e) {
305      this.ScheduleCommand(function() {
306       var index = this.tryGetNumberFromEndOfString(s.mainElement.id).value;
307       var columnSelectAllSettings = this.GetColumnSelectAllSettings(index);
308       if(!columnSelectAllSettings)
309        return;
310       switch(columnSelectAllSettings.mode) {
311        case 1:
312         if(s.GetChecked())
313          this.SelectAllRowsOnPage();
314         else
315          this.UnselectAllRowsOnPage();
316         break;
317        case 2:
318         if(s.GetChecked())
319          this.SelectItemsCore(null, true, true);
320         else
321          this.UnselectFilteredItemsCore(true);
322         break;
323       }
324       this.UpdateSelectAllCheckboxesState();
325      }.bind(this), true);
326      this.mainTableClickCore(e, true);
327     }.bind(this));
328    }
329   }
330  },
331  selectItemCheckbox: function(visibleIndex, checked) {
332   var checkBox = this.GetDataRowSelBtn(visibleIndex);
333   if(checkBox) {
334    var internalCheckBox = this.internalCheckBoxCollection.Get(checkBox.id);
335    if(internalCheckBox)
336     internalCheckBox.SetValue(!!checked);
337   }
338  },
339  GetDataRowSelBtn: function(index) {
340   var item = this.GetItem(index);
341   return item && item.querySelector(SELECTORS.ROW_SELECT_CHECKBOX);
342  },
343  calculateCardsHeight: function() {
344   var cards = this.GetMainTable().querySelectorAll("." + CARD_CLASS + " > ." + ASPx.BootstrapCssSelectors.PanelBody);
345   var height = 0;
346   for(var i = 0; i < cards.length; i++)
347    cards[i].style.height = "";
348   for(var i = 0; i < cards.length; i++){
349    if(cards[i].offsetHeight > height)
350     height = cards[i].offsetHeight;
351   }
352   for(var i = 0; i < cards.length; i++)
353    cards[i].style.height = height + "px";
354  },
355  initializeCardImagesAdjustment: function() {
356   var images = this.GetMainTable().querySelectorAll("." + CARD_CLASS + " > ." + ASPx.BootstrapCssSelectors.PanelBody + " img");
357   for(var i = 0; i < images.length; i++){ 
358    if(!images[i].complete) 
359     images[i].onload = function() { this.calculateCardsHeight(); }.bind(this);
360   }
361  },
362  AdjustControlCore: function() {
363   this.calculateCardsHeight();
364   this.UpdateScrollableControls();
365  },
366  OnBrowserWindowResize: function(e) {
367   this.AdjustControl();
368  },
369  BrowserWindowResizeSubscriber: function() {
370   return true;
371  },
372  GetEditFormLayout: function() { return null; },
373  GetEditFormLayoutItemByColumn: function(column) { return null; },
374  GetEditFormLayoutItemOrGroup: function(name) { return null; }
375 });
376 BootstrapClientCardView.postponeInit = function(name, info) {
377  var grid = ASPx.GetControlCollection().Get(name);
378  if(grid) {
379   if(grid.batchEditClientState)
380    grid.batchEditClientState.extraCommandButtonsInfo = info.extraCommandButtonsInfo;
381   grid.errorItemHtml = info.errorItemHtml;
382   grid.EnsureRowKeys();
383   grid.UpdateItemsStyle();
384   if(grid.allowBatchEditing)
385    grid.prepareBatchEditors();
386  }
387 };
388 var BootstrapCardViewCallbackHelper = ASPx.CreateClass(ASPx.GridCallbackHelper, {
389  ValidateCommand: function(command) {
390   if(command === ASPxClientGridViewCallbackCommand.DeleteRow && !this.GetAllowDelete()) {
391    console.error("Deleting is forbidden");
392    return false;
393   }
394   if(command === ASPxClientGridViewCallbackCommand.StartEdit && !this.GetAllowEdit()) {
395    console.error("Editing is forbidden");
396    return false;
397   }
398   if(command === ASPxClientGridViewCallbackCommand.AddNewRow && !this.GetAllowInsert()) {
399    console.error("Inserting is forbidden");
400    return false;
401   }
402   return true;
403  },
404 });
405 var BootstrapCardViewStyleHelper = ASPx.CreateClass(ASPx.GridStyleHelper, {
406  GetStyleInfoCore: function(styleKey, keyPostFix) {
407   var cssClasses = this.grid.cssClasses;
408   switch(styleKey) {
409    case this.SelectedItemKey:
410     var selectedRowClassNames = [];
411     selectedRowClassNames.push(ASPx.BootstrapCore.IsBootstrap3 ? "well" : "bg-light");
412     if(cssClasses[CSS_CLASSES.SELECTED_CARD])
413      selectedRowClassNames.push(cssClasses[CSS_CLASSES.SELECTED_CARD]);
414     return { "className": selectedRowClassNames.join(" ").trim() };
415    case this.FocusedItemKey:
416     var defaultCss = ASPx.BootstrapCore.IsBootstrap3 ? "panel-primary" : "border-primary";
417     return { "className": cssClasses[CSS_CLASSES.FOCUSED_CARD] || defaultCss };
418    case this.BatchEditModifiedCellKey:
419     return { "className": "dxbs-batch-changed bg-success" };
420    case this.BatchEditDeletedItemKey:
421     return { "className": "dxbs-batch-changed deleted text-muted bg-warning" };
422   }
423  }
424 });
425 var FILTER_BUTTON_CLASS = "dxbs-header-button",
426  DATA_TOGGLES = {
427   ROW_RECOVER: "cardview-card-recover",
428   FILTER_POPUP: "cardview-column-filterpopup",
429   DATACELL_CHECK: "cardview-datacell-batchcheck"
430  },
431  SELECTORS = {
432   FILTER_OK: "[data-toggle='cardview-filter-ok']",
433   FILTER_CANCEL: "[data-toggle='cardview-filter-cancel']",
434   HEADER_FILTER: "[data-toggle='cardview-column-filterpopup']",
435   HEADER_SORT: "[data-toggle='cardview-column-sort']",
436   BATCHEDIT_SAVECHANGES: "[data-toggle='cardview-savechanges']",
437   BATCHEDIT_CANCELCHANGES: "[data-toggle='cardview-cancelchanges']",
438   BATCHEDIT_UPDATESUMMARIES: "[data-toggle='cardview-updatesummaries']",
439   ROW_SELECT_CHECKBOX: "[data-toggle='cardview-card-selecteditor']",
440   BATCHEDIT_DATACHECK: "[data-toggle='" + DATA_TOGGLES.DATACELL_CHECK + "'] input"
441  },
442  CARDVIEW_CLASS = "dxbs-cardview",
443  CARD_CLASS = "dxbs-card",
444  CSS_CLASSES = {
445   ICON_ERROR_ITEM: "iei",
446   SELECTED_CARD: "sc",
447   FOCUSED_CARD: "fc"
448  },
449  COMMANDS = {
450   "cardview-savechanges": { method: "UpdateEdit", postponed: false },
451   "cardview-cancelchanges": { method: "CancelEdit", postponed: false, hasIndex: true },
452   "cardview-updatesummaries": { method: "UpdateSummaries", postponed: false },
453   "cardview-newcard": { method: "AddNew", postponed: true },
454   "cardview-card-edit": { method: "StartEdit", postponed: true, hasIndex: true },
455   "cardview-card-delete": { method: "Delete", postponed: true, hasIndex: true },
456   "cardview-card-custom": { method: "CustomButton", postponed: true, hasIndex: true, hasArgs: true },
457   "cardview-card-recover": { method: "Recover", postponed: true, hasIndex: true },
458   "cardview-card-select": { method: "Select", postponed: true, hasIndex: true },
459   "cardview-card-selecteditor": {},
460   "cardview-search-apply": { method: "ApplySearchFilter", postponed: false },
461   "cardview-search-clear": { method: "ClearSearchFilter", postponed: false },
462   "cardview-showmorecards": { method: "EndlessShowMore", postponed: false },
463  },
464  INT32_MINVALUE = -2147483647;
465 dx.BootstrapClientCardView = BootstrapClientCardView;
466 dx.BootstrapClientCardView.CONSTANTS = {
467  CSS_CLASSES: CSS_CLASSES,
468  COMMANDS: COMMANDS,
469  CARDVIEW_CLASS: CARDVIEW_CLASS,
470  CARD_CLASS: CARD_CLASS,
471  DATA_TOGGLES: DATA_TOGGLES,
472  SELECTORS: SELECTORS
473 };
474})(dx || (dx = {}));
475
476},16);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.