PageSourceSearch

https://collectie.hetnoordbrabantsmuseum.nl/Scripts/Base/Helpers.js

js hetnoordbrabantsmuseum.nl collected 2026-10-02 04:27:19 UTC 19,217 bytes, 559 lines download raw bytes

1/// <reference path="~/Scripts/External/jquery.ui.autocomplete.js" />
2/// <reference path="~/Scripts/External/jquery-ui.min.js" />
3
4"use strict";
5if (typeof (AIS) !== "object") { var AIS = new Object(); }
6
7AIS.Mobile = function () {
8  var openMenu = false;
9  function toggleMenu() {
10    document.body.classList.toggle('noscroll');
11    if (!openMenu) {
12      stopBodyScrolling(true, true);
13      $("#mobile-inner-menu").slideDown(300);
14    } else {
15      stopBodyScrolling(false, true);
16      $("#mobile-inner-menu").slideUp(300);
17    }
18    openMenu = !openMenu;
19  }
20  var languageSelectionOpen = false;
21  function toggleLanguageSelection() {
22    document.body.classList.toggle('noscroll');
23    if (!languageSelectionOpen) {
24      stopBodyScrolling(true, false);
25      $("#mobile-language-chooser").fadeIn(300);
26    } else {
27      stopBodyScrolling(false, false);
28      $("#mobile-language-chooser").fadeOut(300);
29    }
30    languageSelectionOpen = !languageSelectionOpen;
31  }
32  function stopBodyScrolling(bool, completely) {
33    var element = document.getElementById("ais-master");
34    var body = document.body;
35    if (bool) {
36      element.addEventListener("touchmove", freezeBody);
37      if (completely) {
38        body.addEventListener("touchmove", freezeBody, true);
39      }
40
41    } else {
42      element.removeEventListener("touchmove", freezeBody);
43      if (completely) {
44        body.removeEventListener("touchmove", freezeBody, true);
45      }
46    }
47  }
48  function freezeBody(e) {
49    e.preventDefault();
50  }
51  function init() {
52    document.getElementById("ais-master").addEventListener("touchmove", onMove, false);
53  }
54  function onMove(e) {
55
56    var element = document.body;
57    if (element.offsetHeight > element.scrollHeight) {
58      e.preventDefault();
59    }
60  }
61  init();
62  return {
63    ToggleMenu: toggleMenu,
64    ToggleLanguageSelection: toggleLanguageSelection
65  }
66}();
67
68AIS.Tooltip = function () {
69
70  var _tooltip = null;
71  var _element = null;
72
73  var show = function (element) {
74    _element = element;
75    var data = element.getAttribute("data-tooltip");
76    _tooltip = document.createElement("div");
77    _tooltip.setAttribute("class", "tooltip");
78    _tooltip.innerHTML = data;
79    element.appendChild(_tooltip);
80  }
81
82  var hide = function () {
83    _element.removeChild(_tooltip);
84  }
85
86  return {
87    Show: show,
88    Hide: hide
89  }
90}();
91AIS.Storage = function () {
92  var memoryStorage = {};
93
94  function get(key) {
95    if (typeof localStorage !== 'undefined') {
96      return JSON.parse(localStorage.getItem(key));
97    } else {
98      return memoryStorage[key];
99    }
100  };
101
102  function set(key, value) {
103    if (typeof localStorage !== 'undefined') {
104      localStorage.setItem(key, JSON.stringify(value));
105    } else {
106      memoryStorage[key] = value;
107    }
108  };
109
110  function remove(key) {
111    if (typeof localStorage !== 'undefined') {
112      localStorage.removeItem(key);
113    } else {
114      delete memoryStorage[key];
115    }
116  }
117
118  return {
119    Get: get,
120    Set: set,
121    Remove: remove
122  }
123}();
124
125AIS.Helpers = function () {
126
127  return {
128    Show: function (element) {
129      var parent = $(element).parentsUntil("toggle-group.container");
130      parent.children(".toggle-group.show-label").hide();
131      parent.children(".toggle-group.hide-label").show().css({ 'display': 'inline-block', 'margin-right': '2px' });
132      parent.children(".toggle-group.children").slideToggle("fast");
133    },
134
135    Hide: function (element) {
136      var parent = $(element).parentsUntil("toggle-group.container");
137      parent.children(".toggle-group.show-label").show();
138      parent.children(".toggle-group.hide-label").hide();
139      parent.children(".toggle-group.children").slideToggle("fast");
140    },
141    ResolveUrl: function (relativePath) {
142      var baseUrl = $("#ais-base-url").val();
143      return AIS.Helpers.Rtrim(baseUrl, "/") + "/" + AIS.Helpers.Ltrim(relativePath, "/");
144    },
145
146    Rtrim: function (str, chars) {
147      chars = chars || "\\s";
148      return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
149    },
150
151    Ltrim: function (str, chars) {
152      chars = chars || "\\s";
153      return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
154    },
155
156    Trim: function (str, chars) {
157      return AIS.Helpers.Rtrim(AIS.Helpers.Ltrim(str, chars));
158    },
159
160    EscapeSelectorExpression: function (expression) {
161      // Special characters defined here: http://api.jquery.com/category/selectors/
162      // Must be escaped with two backslashes, i.e. '\\'
163      if (expression) {
164        return expression.replace(/([ #;&,.+*~\':"!^$[\]()=>|\/@])/g, '\\$1');
165      }
166      return expression;
167    },
168
169    //generic AddUserMessage function
170    AddUserMessage: function (message, type, temporary, translate) {
171
172      $.ajax({
173        type: "get",
174        url: AIS.Helpers.ResolveUrl("helper/getusermessage"),
175        dataType: "html",
176        data: {
177          message: message,
178          type: type,
179          translate: translate,
180          temporary: temporary
181        },
182        success: function (data) {
183          //add the markup to the user message div
184          AIS.Helpers.RemoveUserMessage();
185
186          var currHtml = $(".ais-user-message-element").html();
187          $(".ais-user-message-element").html(currHtml + data);
188        }
189      });
190    },
191
192    //Information message
193    AddInformationUserMessage: function (message, translate) {
194      AIS.Helpers.AddUserMessage(message, "Information", translate);
195    },
196    AddTempInformationUserMessage: function (message, translate) {
197      AIS.Helpers.AddUserMessage(message, "Information", true, translate);
198    },
199
200    //Success message
201    AddSuccessUserMessage: function (message, translate, temporary) {
202      AIS.Helpers.AddUserMessage(message, "Success", translate);
203    },
204    AddTempSuccessUserMessage: function (message, translate) {
205      AIS.Helpers.AddUserMessage(message, "Success", true, translate);
206    },
207
208    //Warning message
209    AddWarningUserMessage: function (message, translate) {
210      AIS.Helpers.AddUserMessage(message, "Warning", translate);
211    },
212    AddTempWarningUserMessage: function (message, translate) {
213      AIS.Helpers.AddUserMessage(message, "Warning", true, translate);
214    },
215
216    //Error message
217    AddErrorUserMessage: function (message, translate) {
218      AIS.Helpers.AddUserMessage(message, "Error", translate);
219    },
220    AddTempErrorUserMessage: function (message, translate) {
221      AIS.Helpers.AddUserMessage(message, "Error", true, translate);
222    },
223
224    //Remove user message
225    RemoveUserMessage: function () {
226      $(".ais-user-message-element").html('');
227    },
228
229    //Toggle menu items
230    EnableMenuItem: function (itemId) {
231      $("#" + itemId).attr("href", $("#" + itemId).parent().children("input.ais-hidden-href-value").val());
232      $("#" + itemId).parent().removeClass("disabled");
233    },
234
235    DisableMenuItem: function (itemId) {
236      $("#" + itemId).removeAttr("href");
237      $("#" + itemId).parent().removeClass("active");
238      $("#" + itemId).parent().addClass("disabled");
239    },
240
241    //Request datepicker
242    RequestDatePicker: function () {
243      jQuery('input.requestdatepicker').datepicker("destroy");
244      var currentYear = (new Date).getFullYear();
245      var currentIsoDate = (new Date).toISOString();
246      $('select#destination').val("READING_ROOM");
247      $('input#requested-for-date').val(currentIsoDate.substring(0, currentIsoDate.indexOf("T")));
248      $('input#expected-return-date').val(currentIsoDate.substring(0, currentIsoDate.indexOf("T")));
249      $('input.requestdatepicker').datepicker({
250        minDate: 0,
251        changeYear: true,
252        yearRange: (currentYear) + ":" + (currentYear + 1),
253        dateFormat: "yy-mm-dd",
254        showOn: 'button',
255        autoclose: true,
256        buttonText: ""
257        //buttonImage: AIS.Helpers.ResolveUrl("Content/Images/ais-calendar.png"),
258        //buttonImageOnly: true
259      }).next('button').attr("title", "Choose date").append('<i class="far fa-calendar-alt" aria-label="Choose date"></i>');
260    },
261
262    //Date picker
263    AttachDatePicker: function () {
264      jQuery('input.datepicker').datepicker("destroy");
265      var currentUICultureField = $(".ais-current-ui-culture-value");
266      var currentUICulture = "";
267
268      if (currentUICultureField !== null && currentUICultureField !== undefined) {
269        currentUICulture = currentUICultureField.val();
270      }
271
272      $.datepicker.setDefaults($.datepicker.regional[currentUICulture]);
273      var currentYear = (new Date).getFullYear();
274      $('input.datepicker').datepicker({
275        changeYear: true,
276        yearRange: "1900:" + (currentYear),
277        dateFormat: "yy-mm-dd",
278        showOn: 'button',
279        buttonText: ""
280        //buttonImage: AIS.Helpers.ResolveUrl("Content/Images/ais-calendar.png"),
281        //buttonImageOnly: true
282      }).next('button').attr("title", "Choose date").append('<i class="far fa-calendar-alt" aria-label="Choose date"></i>');
283    },
284
285    //Time picker
286    AttachTimePicker: function () {
287
288      $('input.timepicker').timePicker({
289        show24Hours: true, // TODO: Use localization
290        separator: ':',
291        step: 15
292      });
293
294    },
295
296    //Set Focus
297    SetFocusFirstInput: function (container) {
298
299      //TODO: Review. It's not working in IE for some cases...
300      $(container).find("input[type='text']:visible:enabled:first").focus();
301    },
302
303    ScrollToTop: function () {
304      $('html, body').animate({ scrollTop: '0' }, 50);
305    },
306
307    RaiseRequestCheckMaxIssues: function (sender, destination, rfd) {
308      $(".dialog-yes").prop("disabled", false).removeClass("ui-state-disabled");
309      // check max items for this user for this date
310      // case USER: count requests with status ISSUED // on destination change
311      // case RR: count all requests for requested date which are NOT cancelled  // on load // on date/destination change
312      var userId = $(".ais-raise-request-script").attr("userid");
313      var maxdailyrequests = $(".ais-raise-request-script").attr("max_daily_requests");
314      var searchStatement = "requester.user_reference=" + userId + " and requested_for_date='" + rfd + "' and not c1='*'";
315      if (destination == 'USER') {
316        searchStatement = "requester.user_reference=" + userId + " and request_status='ISSUED'";
317      }
318
319      $.ajax({
320        url: AIS.Helpers.ResolveUrl("helper/GetSearchResult"),
321        dataType: "json",
322        data: {
323          Database: "itemrequests",
324          SearchStatement: searchStatement,
325          Limit: 0,
326          Fields: "priref,request_status"
327        },
328        success: function (data) {
329          if (data.Hits >= maxdailyrequests) {
330            $(".dialog-yes").prop("disabled", true).addClass("ui-state-disabled");
331            $("#request-raise-msg").show();
332            var maxMessage = AIS.Helpers.Translate("Max_Daily_Request");
333            $("#request-raise-msg").html("<i style='color:red' class='fas fa-exclamation-circle'></i> " + maxMessage);
334          }
335        }
336      });
337    },
338
339    RaiseRequestPrompt: function (sender) {
340      AIS.Helpers.RequestDatePicker();
341      var destination = sender.attr("destination");
342      $('input#expected-return-date').datepicker("disable");
343      if (destination == 'USER') {
344        //$('input#expected-return-date').datepicker("enable");
345        $("#raise-request-dialog #destination").prop("disabled", false);
346      }
347      var currentIsoDate = (new Date).toISOString();
348      var rfd = currentIsoDate.substring(0, currentIsoDate.indexOf("T"));
349
350      AIS.Helpers.RaiseRequestCheckMaxIssues(sender,"READING_ROOM",rfd);
351
352      $("#raise-request-dialog").dialog({
353        resizable: true,
354        width: "450px",
355        buttons: [
356          {
357            text: "OK",
358            class: "dialog-yes",
359            click: function () {
360              AIS.Helpers.RaiseRquest(sender);
361              $(this).dialog("close");
362            }
363          },
364          {
365            text: "Cancel",
366            click: function () {
367              $(this).dialog().resetForm();
368              $(this).dialog("close");
369            }
370          }
371        ]
372      });
373    },
374
375    RaiseRequestDates: function (sender) {
376      var dest = $("#destination").val();
377      $("#request-raise-msg").hide().html("");
378      var maxissuedays = $(".ais-raise-request-script").attr("max_issue_days");
379      // check destination and expected-return-date
380      // if destination is rr > update expected-return-date to rfd
381      if (dest == "READING_ROOM") {
382        $('input#expected-return-date').val($('input#requested-for-date').val());
383      } else {
384        // erd < tfd  then erd = rfd
385        if ($('input#expected-return-date').val() < $('input#requested-for-date').val()) {
386          $('input#expected-return-date').val($('input#requested-for-date').val());
387        }
388        var rfd = new Date($('input#requested-for-date').val());
389        var rfd2 = new Date($('input#requested-for-date').val());
390        var erd = new Date($('input#expected-return-date').val());
391        var erdmax = new Date(rfd2.setDate(rfd2.getDate() + parseInt(maxissuedays)));
392        //alert(rfd +"*"+erd+"*"+erdmax);
393        if (erd > erdmax) {
394          //if ($('input#expected-return-date').val() > $('input#requested-for-date').val() + maxissuedays) {
395          $("#request-raise-msg").show();
396          var returnMessage = AIS.Helpers.Translate("Request_Return_Date");
397          $("#request-raise-msg").html("<i style='color:red' class='fas fa-exclamation-circle'></i> " +returnMessage + " " + $.datepicker.formatDate('yy-mm-dd', erdmax))
398          $('input#expected-return-date').val($.datepicker.formatDate('yy-mm-dd', erdmax));
399        }
400      }
401    },
402
403    RaiseRquest: function (sender) {
404      var itemId = $(sender).attr("itemid");
405      var rd = $("#raise-request-dialog #requested-for-date").val();
406      var database = $(".ais-request-database-name").val();
407      $(sender).append('&nbsp;<i class="fas fa-spinner fa-spin"></i>');
408
409      $.ajax({
410        url: AIS.Helpers.ResolveUrl("reservations/raiserequest"),
411        data: {
412          database: database,
413          itemId: itemId,
414          requestedDate: rd,
415          expectedReturnDate: $("#raise-request-dialog #expected-return-date").val(),
416          destination: $("#raise-request-dialog #destination").val()
417        },
418        success: function (data) {
419
420          if (data.type === "Error") { //error
421            $(sender).html(AIS.Helpers.Translate("raise_item_error"));
422          }
423          else if (data.type === "Success") { //success
424            $(sender).html(AIS.Helpers.Translate("raise_item_success")); 
425          }
426
427          if (data.message) {
428            //AIS.Helpers.AddUserMessage(data.message, data.type, true, false);
429            //$(sender).children("span").html(message);
430
431            $(sender).children('i').remove();
432            $(sender).removeClass("ais-raise-request-script");
433            $(sender).addClass("disabled");
434          }
435        },
436        error: function (data) {
437          $(sender).children("span").html(AIS.Helpers.Translate("raise_item_error"));
438
439          if (data.message) {
440            AIS.Helpers.AddUserOrderMessage("Error: " + data.message, data.type, true, false, priref);
441          }
442          sender.find('i').remove();
443          $(sender).removeClass("ais-raise-request-script ");
444          $(sender).addClass("disabled");
445        }
446      });
447    },
448
449    CreateOrder: function (sender) {
450      $("#order-confirm-dialog").dialog({
451        buttons: [
452          {
453            text: "Yes",
454            class: "dialog-yes",
455            click: function () {
456              var userId = $("#ais-borrower-number").val();
457              var userInput = $("#order-request-input").val();
458              AIS.Helpers.CreateOrderPrompt(sender);
459              $(this).dialog("close");
460            }
461          },
462          {
463            text: "No",
464            click: function () {
465              $(this).dialog("close");
466            }
467          }
468        ]
469      });
470    },
471    CreateOrderPrompt: function (sender) {
472      var itemId = $(sender).siblings(".ais-item-number-value").val();
473      var userId = $(sender).siblings(".ais-user-id-value").val();
474      var resource = $(sender).siblings(".ais-resource-value").val();
475      var priref = $(sender).parent().children(".record-selector").attr("data-priref");
476
477      sender.append("&nbsp;<i class='fa fa-spinner fa-spin'></i>");
478
479      $.ajax({
480        url: AIS.Helpers.ResolveUrl("ordering/createorder"),
481        data: {
482          itemId: itemId,
483          userId: userId,
484          resource: resource
485        },
486        success: function (data) {
487          if (data.type === 4) { //error
488            $(sender).children("span").html("Item not ordered");
489          }
490          else if (data.type === 2) { //success
491            $(sender).children("span").html("Item ordered");
492          }
493
494          if (data.message) {
495            AIS.Helpers.AddUserOrderMessage(data.message, data.type, true, false, priref);
496          }
497          sender.find('i').remove();
498          $(sender).removeClass("ais-create-order-script");
499          $(sender).addClass("disabled");
500        },
501        error: function (data) {
502          $(sender).children("span").html("Error ordering the item");
503
504          if (data.message) {
505            AIS.Helpers.AddUserOrderMessage("Error: " + data.message, data.type, true, false, priref);
506          }
507          sender.find('i').remove();
508          $(sender).removeClass("ais-create-order-script");
509          $(sender).addClass("disabled");
510        }
511      });
512    },
513
514    AddUserOrderMessage: function (message, type, temporary, translate, priref) {
515
516      $.ajax({
517        type: "get",
518        url: AIS.Helpers.ResolveUrl("helper/getusermessage"),
519        dataType: "html",
520        data: {
521          message: message,
522          type: type,
523          translate: translate,
524          temporary: temporary
525        },
526        success: function (data) {
527          //add the markup to the user message div
528          AIS.Helpers.RemoveUserMessage();
529
530          var currHtml = $(".ais-user-message-element").html();
531          $(".ais-user-message-order-element-" + priref).html(currHtml + data);
532          $(".ais-user-message-order-element-" + priref + ">div").addClass("type" + type);
533        }
534      });
535    },
536
537    Translate: function (key) {
538
539      var translation;
540
541      $.ajax({
542        type: "get",
543        url: AIS.Helpers.ResolveUrl("/helper/translate"),
544        async: false,
545        data: {
546          Key: key
547        },
548        dataType: "text",
549        success: function (data) {
550          translation = data;
551        }
552      });
553
554      return translation;
555
556    }
557  }
558
559}();

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.