PageSourceSearch

https://customer.nuneatonandbedworth.gov.uk/js/core/firmsteputil.js

js nuneatonandbedworth.gov.uk collected 2026-10-02 06:49:02 UTC 17,342 bytes, 517 lines download raw bytes

1if (!Array.isArray) {
2  Array.isArray = function (vArg) {
3  return Object.prototype.toString.call(vArg) === "[object Array]";
4  };
5}
6
7// http://stackoverflow.com/questions/7153470/why-wont-filter-work-in-interent-explorer-8
8if (!Array.prototype.filter)
9{
10  Array.prototype.filter = function(fun /*, thisp */)
11  {
12  "use strict";
13
14  if (this === void 0 || this === null)
15    throw new TypeError();
16
17  var t = Object(this);
18  var len = t.length >>> 0;
19  if (typeof fun !== "function")
20    throw new TypeError();
21
22  var res = [];
23  var thisp = arguments[1];
24  for (var i = 0; i < len; i++)
25  {
26    if (i in t)
27    {
28    var val = t[i]; // in case fun mutates this
29    if (fun.call(thisp, val, i, t))
30      res.push(val);
31    }
32  }
33
34  return res;
35  };
36}
37
38// https://gist.github.com/eliperelman/1035932#file-index-js
39Date.now||(Date.now=function(){return+new Date()});
40
41(function($, window) {
42  $.extend(window, {
43    setItem: function(key, value) {
44      value = JSON.stringify(value);
45      window.sessionStorage.setItem(key, value);
46    },
47
48    getItem: function (key) {
49      var value;
50      value = window.sessionStorage.getItem(key);
51      try {
52        return JSON.parse(value);
53      } catch(e) {
54        return value;
55      }
56    },
57
58    extendItem: function(key, value){
59      return setItem(key, $.extend(true, getItem(key), value));
60    },
61
62    removeItem: function(key) {
63      return window.sessionStorage.removeItem(key);
64    },
65
66    getParam: function(name, url) {
67      return decodeURI(
68        (RegExp(name + '=' + '(.+?)(&|$)').exec(url || location.search)||[,''])[1]
69      );
70    },
71
72    prettifyFS2Date: function(date, method, format){
73
74      var removeTZ = date.replace(/[TZ]/g, ' ');
75      var _has_meridian = removeTZ.match(/PM|AM|P.M.|A.M./g);
76      var  inputFormat = "DD/MM/YYYY HH:mm";
77      format = format || "DD-MM-YYYY";
78
79
80      if(method == "standardDate"){
81        return _has_meridian ? moment(removeTZ, inputFormat).format(format || "MMM Do YYYY (h:mm A) ") : moment(removeTZ, "YYYY-MM-DD HH:mm").format(format || "MMM Do YYYY (h:mm A) ");
82      } else {
83        return _has_meridian ? moment(removeTZ, inputFormat).format(format || "YYYY-MM-DD HH:mm") : moment(removeTZ, "YYYY-MM-DD HH:mm").format(format || "YYYY-MM-DD HH:mm");
84      }
85    },
86
87    getIDfromFormURI: function(uri){
88      var start = uri.search('//')+2;
89      var end = uri.search('/definition.json');
90      return uri.slice(start, end);
91    },
92
93    spinner: function(selector, override, options) {
94      var defaults = {
95        className: 'self-spinner', // The CSS class to assign to the spinner
96        inline: false
97      };
98      var opts = $.extend({}, defaults, options);
99      var tag = opts.inline ? 'span' : 'div';
100      var container = $('<' + tag + '/>', {'class': 'row ' + opts.className + '-outer'});
101      if(selector) {
102        var target = $(selector);
103        if(target.length) {
104          if(override) target.html(container);
105          else target.append(container);
106        }
107
108        // Asynchronously render the spinner into the container
109        FS.Template('spinner', opts).into(container).then(function(container){
110          var $spinner = container.find('.self-spinner');
111          function spinnerAnimation() {
112            $({deg: 0}).animate({ deg: 360 }, {
113              duration: 400,
114              easing: 'linear',
115              step: function(now) {
116                $spinner.css({ 'transform': 'rotate(' + now + 'deg)' });
117              },
118              complete: function() {
119                _.defer(spinnerAnimation);
120              }
121            });
122          };
123
124          if ($('html, body').hasClass('ie9-oldie')) {
125            spinnerAnimation();
126          }
127        });
128      }
129
130      return container;
131    },
132    smallspinner: function(selector, override, options) {
133      var defaults = {
134        className: 'small self-spinner',
135        inline: true
136      };
137      var smallOptions = $.extend({}, defaults, options);
138      return window.spinner(selector, override, smallOptions);
139    },
140    Alert:function(title, body, clss){
141      title = title || 'Alert';
142      clss = clss || '';
143      body = body || '';
144
145      $('.alert').remove();
146      return FS.Template('alert', {alertClass: clss, alertTitle:title, alertBody:body})
147        .then(
148          function(output) {
149            var alert = $(output);
150            $('body').prepend(alert);
151            setTimeout(function(){alert.remove();}, 5000);
152          },
153          function(error) {
154            console.warn('Unable to render alert window', settings, error);
155          }
156        );
157    },
158
159    iframeModalBackdrop: function(on) {
160        return $('<div />', { 'class': 'modal-backdrop fade in' }).appendTo('body');
161    },
162
163    modal: function(overrideSettings) {
164      var defaultSettings = {
165          noSave: false,
166          noClose: false,
167          forceRenderClose: false,
168          detach: true
169        },
170        settings = $.extend({}, defaultSettings, overrideSettings);
171
172      return FS.Template('modal', settings)
173        .then(
174          function(output) {
175            var modal = settings.appendToParentWindow ? top.$(output) : $(output),
176              modalSettings = (settings && settings.modalSettings) ? settings.modalSettings : settings;
177
178            if(settings.noClose) {
179              modalSettings.backdrop = 'static';
180              modalSettings.keyboard = false;
181            }
182
183            var m = modal
184              .modal(modalSettings)
185              .on("show.bs.modal", function () {
186                $('.renderForm').css('z-index', 1000);
187                $('.achieveforms-iframe').css('z-index', 1000);
188              })
189              .on("shown.bs.modal", function () {
190                $("body").addClass("modal-open");
191              })
192              .on("hide.bs.modal", function () {
193                $("body").removeClass("modal-open");
194              })
195              .on("hidden.bs.modal", function () {
196                if (settings.detach) {
197                  modal.detach();
198                }
199                $('.renderForm').css('z-index', 1050);
200                $('.achieveforms-iframe').css('z-index', 1050);
201              })
202              .modal('show')
203              .removeClass('hide');
204
205            if(modalSettings.spinner) {
206              spinner(modal.find('.modal-body'), true);
207            }
208            return m;
209          },
210          function(error) {
211            console.warn('Unable to render modal window', settings, error);
212          }
213        );
214    },
215
216    appModal: function(modalHTML, overrideSettings){
217      var $modal = $(modalHTML);
218      var defaultSettings = {
219            detach: true
220          };
221      var settings = $.extend({}, defaultSettings, overrideSettings);
222
223      $(document).find('body').append($modal);
224      $modal
225          .modal(settings)
226          .on("shown.bs.modal", function () {
227              $("body").addClass("modal-open");
228          })
229          .on("hide.bs.modal", function () {
230              $("body").removeClass("modal-open");
231          })
232          .on("hidden.bs.modal", function () {
233              if (settings.detach) {
234                  $modal.detach();
235              }
236          })
237          .modal('show')
238          .removeClass('hide');
239
240      var defer = $.Deferred();
241      defer.promise($modal);
242      defer.resolve($modal);
243
244      return $modal;
245    },
246
247    addReCaptchaToModal: function(recaptchaElement, siteKey, callback){
248      return grecaptcha.render(recaptchaElement, {
249        sitekey: siteKey,
250        callback: callback
251      });
252      
253    },
254
255    docAPITransform: function(input) {
256      var _this = this;
257      var output = [];
258      if(input && input.length) {
259        output = _.map(input, this.getDocApiTransformObject);
260      } else {
261        console.warn('Invalid input to docAPITransform', input);
262      }
263      return output;
264    },
265
266    getDocApiTransformObject: function(input){
267      var o = { name: input.Name || input.name };
268      _.each(input.Attribute, function(obj) {
269        var newName = obj.Name.replace(/-([a-z])/g, function(src, letter) {
270            return letter.toUpperCase();
271          });
272        o[newName] = obj.Value;
273      });
274
275      return o;
276    },
277
278    sortObjects: function(arrayOfObjects, sortBy, reverse) {
279      var sortingFunction = null;
280      var ordering = function (A, B) { return (A > B ? 1 : (A == B ? 0 : -1)); };
281      if(typeof sortBy === 'string') {
282        sortingFunction = function(a, b) {
283          var A = a[sortBy];
284          var B = b[sortBy];
285          return ordering(A, B);
286        };
287      } else if($.isFunction(sortBy)) {
288        sortingFunction = function(a, b) {
289          var A = sortBy.apply(a);
290          var B = sortBy.apply(b);
291          return ordering(A, B);
292        };
293      }
294      return arrayOfObjects.sort(function() {
295        return sortingFunction.apply(this, arguments) * (reverse ? -1 : 1);
296      });
297    },
298
299    getQueryString: function(specificKey, url) {
300      var output = specificKey ? null : {};
301      url = url || window.location.search || '';
302      $.each(url.split(/\?|&/g), function() { 
303        var bits = this.split('=');
304        if(bits.length == 2) {
305          if(specificKey && bits[0] == specificKey) {
306            output = decodeURIComponent(bits[1]);
307            return false;
308          } else if(!specificKey) {
309            output[bits[0]] = decodeURIComponent(bits[1]);
310          }
311        }
312      });
313      return output;
314    },
315
316    uuid: function() {
317      return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
318        var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
319        return v.toString(16);
320      });
321    },
322
323    printPreview: function(div){
324      var printContents = $(div).clone(),
325          myWindow = window.open("", "popup", "width=1000,height=600,scrollbars=yes,resizable=yes," +
326              "toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0"),
327          doc = myWindow.document;
328      doc.open();
329      $(printContents).find(".tCheckboxes").remove();
330      var button = "<input type='button' id='btnPrint' value='Print' style='float: left;' onclick='window.print();'/>";
331      button += "<link rel=\"stylesheet\" type=\"text/css\" href=\"../getStylesheet.php\" id=\"MasterStylesheet\"/><link rel=\"stylesheet\" type=\"text/css\" href=\"../assets/print.css\"/>";
332      $(printContents).append($(button));
333      doc.write($(printContents).html());
334      doc.close();
335      return false;
336    },
337    
338    notification: function(text, header, type, options){
339      var task;
340      var header = header || "";
341      var type = type || "success";
342      var options = options || {};
343      options = _.defaults(options, {
344          "closeButton": true,
345          "debug": false,
346          "positionClass": "toast-top-right",
347          "onclick": null,
348          "showDuration": "300",
349          "hideDuration": "1000",
350          "timeOut": "5000",
351          "extendedTimeOut": "1000",
352          "showEasing": "swing",
353          "hideEasing": "linear",
354          "showMethod": "fadeIn",
355          "hideMethod": "fadeOut"
356      });
357      if (!!options.promisifyOnHidden) {
358          task = Promise.defer();
359          options["onHidden"] = function() { task.resolve(); };
360      }
361      toastr.options = options;
362
363      var toastTypes = ['success', 'error', 'warning', 'info'];
364      if(type in toastTypes != -1 ) toastr[type](text, header);
365      if (!!options.promisifyOnHidden) {
366          return task.promise;
367      }
368    },
369
370    getDomainDetails: _.memoize(function() {
371        return FS.API.get("/domain/" + window.location.host)
372        .bind(this)
373        .then(function(data){
374          return data;
375        });
376    }),
377
378    getBrowserDetails: function() {
379      var nVer = navigator.appVersion;
380      var nAgt = navigator.userAgent;
381      var browserName  = navigator.appName;
382      var fullVersion  = ''+parseFloat(navigator.appVersion); 
383      var majorVersion = parseInt(navigator.appVersion,10);
384      var nameOffset,verOffset,ix;
385
386      // In Opera, the true version is after "Opera" or after "Version"
387      if ((verOffset=nAgt.indexOf("Opera"))!=-1) {
388         browserName = "Opera";
389         fullVersion = nAgt.substring(verOffset+6);
390         if ((verOffset=nAgt.indexOf("Version"))!=-1) 
391           fullVersion = nAgt.substring(verOffset+8);
392      }
393      // In MSIE, the true version is after "MSIE" in userAgent
394      else if ((verOffset=nAgt.indexOf("MSIE"))!=-1) {
395         browserName = "Microsoft Internet Explorer";
396         fullVersion = nAgt.substring(verOffset+5);
397      }
398      // In Chrome, the true version is after "Chrome" 
399      else if ((verOffset=nAgt.indexOf("Chrome"))!=-1) {
400         browserName = "Chrome";
401         fullVersion = nAgt.substring(verOffset+7);
402      }
403      // In Safari, the true version is after "Safari" or after "Version" 
404      else if ((verOffset=nAgt.indexOf("Safari"))!=-1) {
405         browserName = "Safari";
406         fullVersion = nAgt.substring(verOffset+7);
407         if ((verOffset=nAgt.indexOf("Version"))!=-1) 
408           fullVersion = nAgt.substring(verOffset+8);
409      }
410      // In Firefox, the true version is after "Firefox" 
411      else if ((verOffset=nAgt.indexOf("Firefox"))!=-1) {
412          browserName = "Firefox";
413          fullVersion = nAgt.substring(verOffset+8);
414      }
415      // In most other browsers, "name/version" is at the end of userAgent 
416      else if ( (nameOffset=nAgt.lastIndexOf(' ')+1) < (verOffset=nAgt.lastIndexOf('/')) ) {
417          browserName = nAgt.substring(nameOffset,verOffset);
418          fullVersion = nAgt.substring(verOffset+1);
419          if (browserName.toLowerCase()==browserName.toUpperCase()) {
420             browserName = navigator.appName;
421          }
422      }
423      // trim the fullVersion string at semicolon/space if present
424      if ((ix=fullVersion.indexOf(";"))!=-1)
425          fullVersion=fullVersion.substring(0,ix);
426      if ((ix=fullVersion.indexOf(" "))!=-1)
427          fullVersion=fullVersion.substring(0,ix);
428
429      majorVersion = parseInt(''+fullVersion,10);
430      if (isNaN(majorVersion)) {
431          fullVersion  = ''+parseFloat(navigator.appVersion); 
432          majorVersion = parseInt(navigator.appVersion,10);
433      }
434
435      return {
436        browser     : browserName,
437        fullVersion : fullVersion,
438        majorVersion: majorVersion,
439        userAgent   : nAgt
440      };
441    },
442    
443    getCurrentUrl: function() {
444      return top.window.location.protocol + '//' + top.window.location.host + top.window.location.pathname +  top.window.location.search + top.window.location.hash;
445    },
446
447    windowSearchToObject: function(params) {
448      params = params || {};
449      var queryString = (!!params.searchParent ? window.parent.location.search.slice(1) : window.location.search.slice(1));
450      var pairs = queryString.split("&"),
451        obj = {}, pair, i;
452      for (var i = 0; i < pairs.length; i++) {
453        if (pairs[i].trim() === "") continue;
454        pair = pairs[i].split("=");
455        obj[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);
456      }
457      return obj;
458    }
459  });
460
461  function dateFromISO(s) {
462    s = s.split(/\D/);
463    return new Date(Date.UTC(s[0], --s[1]||'', s[2]||'', s[3]||'', s[4]||'', s[5]||'', s[6]||''));
464  }
465
466  function pretty_date(date) {
467    if(!date || !typeof date == 'string') return '';
468    var time = dateFromISO(date);
469    var seconds = (new Date() - Date(time)) / 1000;
470    var token = 'ago',
471      list_choice = 1;
472    if (seconds < 0) {
473      seconds = Math.abs(seconds);
474      token = 'from now';
475      list_choice = 2;
476    }
477    var i = 0,
478      format;
479    while (format = time_formats[i++]) if (seconds < format[0]) {
480      if (typeof format[2] == 'string') return format[list_choice];
481      else return Math.floor(seconds / format[2]) + ' ' + format[1] + ' ' + token;
482    }
483    return time;
484  }
485  
486  var time_formats = [
487    [60, 'seconds', 1], // 60 
488    [120, '1 minute ago', '1 minute from now'], // 60*2
489    [3600, 'minutes', 60], // 60*60, 60
490    [7200, '1 hour ago', '1 hour from now'], // 60*60*2 
491    [86400, 'hours', 3600], // 60*60*24, 60*60 
492    [172800, 'yesterday', 'tomorrow'], // 60*60*24*2 
493    [604800, 'days', 86400], // 60*60*24*7, 60*60*24 
494    [1209600, 'last week', 'next week'], // 60*60*24*7*4*2 
495    [2419200, 'weeks', 604800], // 60*60*24*7*4, 60*60*24*7 
496    [4838400, 'last month', 'next month'], // 60*60*24*7*4*2 
497    [29030400, 'months', 2419200], // 60*60*24*7*4*12, 60*60*24*7*4 
498    [58060800, 'last year', 'next year'], // 60*60*24*7*4*12*2 
499    [2903040000, 'years', 29030400], // 60*60*24*7*4*12*100, 60*60*24*7*4*12 
500    [5806080000, 'last century', 'next century'], // 60*60*24*7*4*12*100*2 
501    [58060800000, 'centuries', 2903040000] // 60*60*24*7*4*12*100*20, 60*60*24*7*4*12*100
502  ];
503
504  if(dust && dust.filters) {
505    $.extend(dust.filters, {
506      dl: function(value) { return new Date(value).toLocaleString(); },
507      duk: function(value) {
508        var d = new Date(value);
509        if(d && !isNaN(d.getDate())) return d.getDate() + '/' + (d.getMonth() + 1) + '/' + (d.getFullYear() ? d.getFullYear() : 'YYYY');
510        else return '';
511      },
512      dp: pretty_date,
513      d: function(value) { return decodeURI(value); },
514      dc: function(value) { return decodeURIComponent(value); }
515    });
516  }
517})(jQuery, this);

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.