PageSourceSearch

https://hasitleaked.com/wp-content/plugins/hil2-plugin/js/script.js?ver=1790072304

js hasitleaked.com collected 2026-09-24 09:37:57 UTC 11,506 bytes, 452 lines download raw bytes

1var HIL2 = HIL2 || {};
2
3(function ($, $$) {
4  'use strict';
5
6  var CurrentAlbumContainer = null;
7
8  /**
9   * The API to various page related decisions
10   */
11  var Page = (function () {
12    function isAlbumPage() {
13      return Boolean(CurrentAlbumContainer.length);
14    }
15
16    var API = {
17      isCreateAlbumPage: function () {
18        return !isAlbumPage() && $('div.wpcf7').length === 1;
19      },
20      isViewAlbumPage: function () {
21        return isAlbumPage() && CurrentAlbumContainer.hasClass('album');
22      },
23      init: function () {
24        CurrentAlbumContainer = $('article.hil2_albums');
25      }
26    };
27
28    return API;
29  }());
30
31  /**
32   * The API to the overlay modal window
33   */
34  var Overlay = (function () {
35    var defaults = {
36      transition: 'fade',
37      speed: 350,
38      fadeOut: 300,
39      closeButton: false
40    };
41
42    var API = {
43      close: function () {
44        $.colorbox.close();
45      },
46      resize: function () {
47        $.colorbox.resize();
48      },
49      showForHtml: function (html) {
50        $.colorbox($.extend({html: html}, defaults));
51      },
52      showLoadingBox: function (text) {
53        text = text || 'Loading, please wait...';
54        $('<h3>').addClass('text-center').html(text);
55
56        this.showForHtml(text);
57      }
58    };
59
60    return API;
61  }());
62
63  var Ajax = {
64    isValidResponse: function (data) {
65      if (data.success === false) {
66        window.alert(data.error);
67      }
68
69      return (data.success === true);
70    }
71  };
72
73  var User = {
74    isLoggedIn: function () {
75      return $$.album !== undefined;
76    }
77  };
78
79  var Section = {
80    handleResponse: function (data) {
81      if (!Ajax.isValidResponse(data)) {
82        Overlay.close();
83        return false;
84      }
85
86      Overlay.showForHtml(data.html);
87    },
88    handleClickRequest: function (event) {
89      event.preventDefault();
90
91      if (!User.isLoggedIn()) {
92        window.alert('Sorry! You need to be logged in to make those changes.');
93        return false;
94      }
95
96      var data = {
97        action: 'getSectionForAlbum',
98        what: $(this).data('section'),
99        album: $$.album.id
100      };
101
102      Overlay.showLoadingBox();
103      $.get($$.ajaxUrl, data, Section.handleResponse, 'json').fail(Overlay.close);
104    }
105  };
106
107  var UserAlbum = {
108    handleResponse: function (data) {
109      if (!Ajax.isValidResponse(data)) {
110        return false;
111      }
112
113      window.alert(data.message ? data.message : 'Done!');
114    },
115    handleClickRequest: function (event) {
116      event.preventDefault();
117
118      if (!User.isLoggedIn()) {
119        window.alert('Sorry! You need to be logged in to be able to do that.');
120        return false;
121      }
122
123      var what = $(this).data('action');
124      $$.album[what].action = 'linkUserToAlbum';
125
126      var url = [$$.ajaxUrl, $.param($$.album[what])];
127      $.post(url.join('?'), {album: $$.album.id}, UserAlbum.handleResponse, 'json');
128    }
129  };
130
131  /**
132   * The API to various album actions
133   */
134  var AlbumActions = (function () {
135    var modalWindow = null;
136    var replacementText = $('<h3>').addClass('text-center').html('Submitting, please wait...');
137
138    function neuterForm(form) {
139      $('button.done', form).remove();
140
141      var section = form.parent('section');
142      section.siblings('section, p').remove();
143      section.siblings('h2').replaceWith(replacementText);
144      section.hide(Overlay.resize);
145    }
146
147    function showRequestedForm() {
148      $('section', modalWindow).hide();
149
150      var section = $(this).val();
151      if (section !== '') {
152        $('section#' + section).show();
153      }
154
155      Overlay.resize();
156    }
157
158    function changeAlbumCover(form) {
159      var file = $('input#cover-image').get(0).files[0], formdata = false;
160
161      if (window.FormData) {
162        formdata = new FormData();
163      } else {
164        window.alert('Please update your browser, it does not support file upload via Ajax');
165        return false;
166      }
167
168      if (file.type.match(/image.*/) && formdata) {
169        formdata.append('image', file);
170      } else {
171        window.alert('This is not a valid image file. Please select a different file.');
172        return false;
173      }
174
175      var formValues = form.serializeArray();
176
177      for (var index in formValues) {
178        var value = formValues[index];
179        formdata.append(value.name, value.value);
180      }
181
182      return formdata;
183    }
184
185    function handleAjaxResponse(data) {
186      Overlay.close();
187
188      if (!Ajax.isValidResponse(data)) {
189        return false;
190      }
191
192      window.alert(data.message ? data.message : 'Done!');
193      window.location.reload();
194    }
195
196    function handleSubmission(event) {
197      var form = $(event.target);
198      event.preventDefault();
199      neuterForm(form);
200
201      var url = [$$.ajaxUrl, $.param({
202          album: $$.album.id,
203          action: form.data('action')
204        })].join('?');
205
206      switch (form.parent('section').attr('id')) {
207        case 'report-leak':
208          var location = $('#location', form);
209          var newLocation = $('#new-location', form);
210
211          if (location.val().trim() === '' && newLocation.val().trim() === '') {
212            window.alert('You need to specify a location');
213            return false;
214          }
215
216          break;
217
218        case 'change-cover':
219          var formdata = changeAlbumCover(form);
220
221          if (formdata !== false) {
222            $.ajax({
223              url: url,
224              type: 'POST',
225              data: formdata,
226              processData: false,
227              contentType: false,
228              dataType: 'json',
229              success: handleAjaxResponse
230            });
231          }
232
233          return false;
234      }
235
236      $.post(url, form.serialize(), handleAjaxResponse, 'json');
237    }
238
239    var API = {
240      registerPopupWindowAction: function (event) {
241        modalWindow = $(event.target);
242        modalWindow.on('submit', 'form', handleSubmission);
243        modalWindow.on('change', '#action', showRequestedForm);
244      }
245    };
246
247    return API;
248  }());
249
250  /**
251   * The API to the Newsfeed
252   */
253  var Newsfeed = (function () {
254
255    var NewsfeedContainer = $('div#newsfeed'), NewsList = null, LoadingMore = null;
256    var UpdateBox = $('#updates', NewsfeedContainer), UpdateMessage = $('#message', UpdateBox);
257    var Mutex = [], NewsfeedHashes = [], freshNewsCountListner = null;
258
259    function isNewsfeed() {
260      return Boolean(NewsfeedContainer.length);
261    }
262
263    function updateNewItemCount(data) {
264      var count = parseInt(data.count);
265
266      if (count === NaN) {
267        UpdateMessage.html('Error While Getting Updates');
268        return null;
269      }
270
271      if (count < 1) {
272        UpdateMessage.html('');
273        UpdateBox.hide();
274        return false;
275      }
276
277      var message = (count > 1) ? 'Updates' : 'Update';
278      UpdateMessage.html(count + ' New ' + message + ' Available');
279      UpdateBox.show();
280    }
281
282    function newsfeedTickrAjax(action, callback) {
283      if (NewsfeedHashes[action] === undefined) {
284        return null;
285      }
286
287      var data = NewsfeedHashes[action];
288
289      if (Mutex[data.timecode]) {
290        return null;
291      }
292
293      if (action !== 'count') {
294        Mutex[data.timecode] = true;
295      }
296
297      $.get($$.ajaxUrl, data, callback, 'json');
298    }
299
300    function checkIfMoreNewsItemsNeedToBeDisplayed() {
301      var LastNewsItem = $('div.news-item:last', NewsList);
302      var windowHeight = window.scrollY + $(window).height();
303
304      if (LastNewsItem.length && windowHeight < LastNewsItem.offset().top) {
305        LoadingMore.hide();
306        return null;
307      }
308
309      LoadingMore.show();
310      newsfeedTickrAjax('more', insertMoreNewsItemsToNewsfeed);
311    }
312
313    function insertNewsItemsToNewsfeed(data, append) {
314      $.extend(NewsfeedHashes, data.hashes);
315
316      if (append) {
317        NewsList.append(data.separator);
318        NewsList.append(data.items);
319      } else {
320        NewsList.prepend(data.items);
321        NewsList.prepend(data.separator);
322      }
323
324      checkIfMoreNewsItemsNeedToBeDisplayed();
325    }
326
327    function insertMoreNewsItemsToNewsfeed(data) {
328      insertNewsItemsToNewsfeed(data, true);
329    }
330
331    function insertFreshNewsItemsToNewsfeed(data) {
332      insertNewsItemsToNewsfeed(data, false);
333      updateNewItemCount({count: 0});
334    }
335
336    function getFreshNewsfeedItemCount() {
337      newsfeedTickrAjax('count', updateNewItemCount);
338    }
339
340    function getFreshNewsFeedItems() {
341      newsfeedTickrAjax('fresh', insertFreshNewsItemsToNewsfeed);
342    }
343
344    function setupInitalVariables() {
345      NewsList = $('#news', NewsfeedContainer);
346      LoadingMore = $('#loading', NewsfeedContainer);
347      NewsfeedHashes = $$.newsfeed.hashes;
348      freshNewsCountListner = window.setInterval(getFreshNewsfeedItemCount, 60 * 1000);
349      delete $$.newsfeed;
350    }
351
352    var API = {
353      initialize: function () {
354        if (!isNewsfeed()) {
355          return null;
356        }
357
358        setupInitalVariables();
359        newsfeedTickrAjax('init', insertMoreNewsItemsToNewsfeed);
360
361        $(window).on('scroll', checkIfMoreNewsItemsNeedToBeDisplayed);
362        NewsfeedContainer.on('click', '#refresh', getFreshNewsFeedItems);
363      }
364    };
365
366    return API;
367  }());
368
369  var Misc = (function () {
370    var genreField = null;
371    var dateField = null, datepickerOptions = {
372      dateFormat: 'yy-mm-dd',
373      changeMonth: true,
374      changeYear: true,
375      showAnim: 'slideDown'
376    };
377
378    function split(val) {
379      return val.split(/,\s*/);
380    }
381
382    function extractLast(term) {
383      return split(term).pop();
384    }
385
386    /**
387     * Code Borrowed from https://jqueryui.com/autocomplete/#multiple
388     */
389    function bindGenreAutoComplete(element, genres) {
390      element.bind("keydown", function (event) {
391        if (event.keyCode === $.ui.keyCode.TAB &&
392            $(this).autocomplete("instance").menu.active) {
393          event.preventDefault();
394        }
395      }).autocomplete({
396        minLength: 0,
397        source: function (request, response) {
398          response($.ui.autocomplete.filter(
399              genres, extractLast(request.term)));
400        },
401        focus: function () {
402          return false;
403        },
404        select: function (event, ui) {
405          var terms = split(this.value);
406          terms.pop();
407          terms.push(ui.item.value);
408          terms.push("");
409          this.value = terms.join(", ");
410          return false;
411        }
412      });
413    }
414
415    function showDatePickerOnField(element) {
416      if (element.prop('type') !== 'date') {
417        $(element).datepicker(datepickerOptions);
418      }
419    }
420
421    var API = {
422      initializeDatePickerForOldBrowsers: function (event) {
423        dateField = $(event.target);
424        showDatePickerOnField(dateField);
425      },
426      registerGenreAutoCompleteField: function (event, genres) {
427        genreField = $(event.target);
428        bindGenreAutoComplete(genreField, genres);
429      }
430    };
431
432    return API;
433  }());
434
435  function initialize() {
436    Newsfeed.initialize();
437    Page.init();
438
439    if (Page.isViewAlbumPage()) {
440      CurrentAlbumContainer
441          .on('click', '.ajax', UserAlbum.handleClickRequest)
442          .on('click', '.fetch', Section.handleClickRequest);
443
444      $(document.body).on('registerModalWindow', AlbumActions.registerPopupWindowAction);
445    }
446
447    $(document.body).on('registerGenreAutoComplete', Misc.registerGenreAutoCompleteField);
448    $(document.body).on('initializeDatePicker', Misc.initializeDatePickerForOldBrowsers);
449  }
450
451  $(initialize);
452}(jQuery.noConflict(), HIL2));

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.