PageSourceSearch

https://energoseti.ru/files/js/js_RAO0Atn-zZaBQzRnNCoMUsG5LNjYNkKw44-bFgYb_xM.js

js energoseti.ru collected 2026-10-02 19:39:12 UTC 64,493 bytes, 989 lines download raw bytes

1(function ($) {
2
3Drupal.behaviors.initModalFormsLogin = {
4  attach: function (context, settings) {
5    $("a[href*='/user/login'], a[href*='?q=user/login']", context).once('init-modal-forms-login', function () {
6      this.href = this.href.replace(/user\/login/,'modal_forms/nojs/login');
7    }).addClass('ctools-use-modal ctools-modal-modal-popup-small');
8  }
9};
10
11})(jQuery);
12;
13(function ($) {
14
15Drupal.behaviors.initModalFormsRegister = {
16  attach: function (context, settings) {
17    $("a[href*='/user/register'], a[href*='?q=user/register']", context).once('init-modal-forms-register', function () {
18      this.href = this.href.replace(/user\/register/,'modal_forms/nojs/register');
19    }).addClass('ctools-use-modal ctools-modal-modal-popup-medium');
20  }
21};
22
23})(jQuery);
24;
25(function ($) {
26
27Drupal.behaviors.initModalFormsPassword = {
28  attach: function (context, settings) {
29    $("a[href*='/user/password'], a[href*='?q=user/password']", context).once('init-modal-forms-password', function () {
30      this.href = this.href.replace(/user\/password/,'modal_forms/nojs/password');
31    }).addClass('ctools-use-modal ctools-modal-modal-popup-small');
32  }
33};
34
35})(jQuery);
36;
37Drupal.locale = { 'pluralFormula': function ($n) { return Number((((($n%10)==1)&&(($n%100)!=11))?(0):((((($n%10)>=2)&&(($n%10)<=4))&&((($n%100)<10)||(($n%100)>=20)))?(1):2))); }, 'strings': {"":{"An AJAX HTTP error occurred.":"\u0412\u043e\u0437\u043d\u0438\u043a\u043b\u0430 AJAX HTTP \u043e\u0448\u0438\u0431\u043a\u0430.","HTTP Result Code: !status":"\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 HTTP: !status","An AJAX HTTP request terminated abnormally.":"AJAX HTTP-\u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d.","Debugging information follows.":"\u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f.","Path: !uri":"\u041f\u0443\u0442\u044c: !uri","StatusText: !statusText":"\u0422\u0435\u043a\u0441\u0442 \u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f: !statusText","ResponseText: !responseText":"\u0422\u0435\u043a\u0441\u0442 \u041e\u0442\u0432\u0435\u0442\u0430: !responseText","ReadyState: !readyState":"ReadyState: !readyState","CustomMessage: !customMessage":"\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435: !customMessage","No results":"\u041d\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432","clear":"\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c","All":"\u0412\u0441\u0435","New":"\u041d\u043e\u0432\u043e\u0435","Modules installed within the last week.":"\u041c\u043e\u0434\u0443\u043b\u0438, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0437\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u043d\u0435\u0434\u0435\u043b\u044e.","No modules added within the last week.":"\u041d\u0435\u0442 \u043c\u043e\u0434\u0443\u043b\u0435\u0439, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0437\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u043d\u0435\u0434\u0435\u043b\u044e.","Recent":"\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439","Modules enabled\/disabled within the last week.":"\u041c\u043e\u0434\u0443\u043b\u0438, \u0432\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u044b\u0435\/\u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0435 \u0437\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u043d\u0435\u0434\u0435\u043b\u044e.","No modules were enabled or disabled within the last week.":"\u041d\u0435\u0442 \u043c\u043e\u0434\u0443\u043b\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u0438\u043b\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u043d\u0435\u0434\u0435\u043b\u0438.","@enabled of @total":"@enabled \u0438\u0437 @total","Hide":"\u0421\u043a\u0440\u044b\u0442\u044c","Show":"\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c","Search":"\u041f\u043e\u0438\u0441\u043a","Next":"\u
370412\u043f\u0435\u0440\u0451\u0434","Cancel":"\u041e\u0442\u043c\u0435\u043d\u0430","Disabled":"\u041e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043e","Enabled":"\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u043e","Edit":"\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c","Save":"\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c","Sunday":"\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435","Monday":"\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a","Tuesday":"\u0432\u0442\u043e\u0440\u043d\u0438\u043a","Wednesday":"\u0441\u0440\u0435\u0434\u0430","Thursday":"\u0447\u0435\u0442\u0432\u0435\u0440\u0433","Friday":"\u043f\u044f\u0442\u043d\u0438\u0446\u0430","Saturday":"\u0441\u0443\u0431\u0431\u043e\u0442\u0430","Add":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c","Upload":"\u0417\u0430\u043a\u0430\u0447\u0430\u0442\u044c","Done":"\u0413\u043e\u0442\u043e\u0432\u043e","This field is required.":"\u042d\u0442\u043e \u043f\u043e\u043b\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f.","Prev":"\u041d\u0430\u0437\u0430\u0434","Mon":"\u043f\u043d","Tue":"\u0432\u0442","Wed":"\u0441\u0440","Thu":"\u0447\u0442","Fri":"\u043f\u0442","Sat":"\u0441\u0431","Sun":"\u0432\u0441","January":"\u044f\u043d\u0432\u0430\u0440\u044f","February":"\u0444\u0435\u0432\u0440\u0430\u043b\u044f","March":"\u043c\u0430\u0440\u0442\u0430","April":"\u0430\u043f\u0440\u0435\u043b\u044f","May":"\u041c\u0430\u0439","June":"\u0438\u044e\u043d\u044f","July":"\u0438\u044e\u043b\u044f","August":"\u0430\u0432\u0433\u0443\u0441\u0442\u0430","September":"\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f","October":"\u043e\u043a\u0442\u044f\u0431\u0440\u044f","November":"\u043d\u043e\u044f\u0431\u0440\u044f","December":"\u0434\u0435\u043a\u0430\u0431\u0440\u044f","Select all rows in this table":"\u041e\u0442\u043c\u0435\u0442\u0438\u0442\u044c \u0432\u0441\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b","Deselect all rows in this table":"\u0421\u043d\u044f\u0442\u044c \u043e\u0442\u043c\u0435\u0442\u043a\u0443 \u0441\u043e \u0432\u0441\u0435\u0445 \u043a\u043e\u043b\u043e\u043d\u043e\u043a \u0442\u0430\u0431\u043b\u0438\u0446\u044b","Today":"\u0421\u0435\u0433\u043e\u0434\u043d\u044f","Jan":"\u044f\u043d\u0432","Mar":"\u043c\u0430\u0440","Apr":"\u0430\u043f\u0440","Jun":"\u0438\u044e\u043d","Jul":"\u0438\u044e\u043b","Aug":"\u0430\u0432\u0433","Sep":"\u0441\u0435\u043d","Oct":"\u043e\u043a\u0442","Nov":"\u043d\u043e\u044f","Dec":"\u0434\u0435\u043a","Su":"\u0432\u0441","Mo":"\u043f\u043d","Tu":"\u0432\u0442","We":"\u0441\u0440","Th":"\u0447\u0442","Fr":"\u043f\u0442","Sa":"\u0441\u0431","Not published":"\u041d\u0435 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043e","Please wait...":"\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u0434\u043e\u0436\u0434\u0438\u0442\u0435...","mm\/dd\/yy":"mm\/dd\/yy","Only files with the following extensions are allowed: %files-allowed.":"\u041f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u044f\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0444\u0430\u0439\u043b\u044b \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\u043c\u0438: %files-allowed.","By @name on @date":"@name, @date","By @name":"@name","Not in menu":"\u041d\u0435 \u0432 \u043c\u0435\u043d\u044e","Alias: @alias":"\u0421\u0438\u043d\u043e\u043d\u0438\u043c: @alias","No alias":"\u0421\u0438\u043d\u043e\u043d\u0438\u043c \u043d\u0435 \u0437\u0430\u0434\u0430\u043d","New revision":"\u041d\u043e\u0432\u0430\u044f \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u044f","Drag to re-order":"\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043c\u043e\u0436\u043d\u043e, \u043f\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0432 \u043f\u0443\u043d\u043a\u0442 \u043c\u044b\u0448\u043a\u043e\u0439.","Changes made in this table will not be saved until the form is submitted.":"\u0421\u0434\u0435\u043b\u0430\u043d\u043d\u044b\u0435 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043d\u0435 \u0432\u0441\u0442\u0443\u043f\u044f\u0442 \u0432 \u0441\u0438\u043b\u0443, \u043f\u043e\u043a\u0430 \u0432\u044b \u043d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u0435 \u0438\u0445.","The changes to these blocks will not be saved until the \u003Cem\u003ESave blocks\u003C\/em\u003E button is clicked.":"\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u0441\u0434\u0435\u043b\u0430\u043d\u043d\u044b\u0435 \u0432 \u0431\u043b\u043e\u043a\u0430\u0445 \u043d\u0435 \u0432\u0441\u0442\u0443\u043f\u044f\u0442 \u0432 \u0441\u0438\u043b\u0443 \u043f\u043e\u043a\u0430 \u0432\u044b \u043d\u0435 \u043d\u0430\u0436\u043c\u0435\u0442\u0435 \u043a\u043d\u043e\u043f\u043a\u0443 \u003Cem\u003E\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0431\u043b\u043e\u043a\u0438\u003C\/em\u003E.","This permission is inherited from the authenticated user role."
37:"\u042d\u0442\u043e \u043f\u0440\u0430\u0432\u043e \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u0442\u0441\u044f \u043e\u0442 \u0440\u043e\u043b\u0438 \u00ab\u0410\u0432\u0442\u043e\u0440\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u00bb.","No revision":"\u041d\u0435\u0442 \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438","@number comments per page":"@number \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443","Requires a title":"\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a","Not restricted":"\u0411\u0435\u0437 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439","(active tab)":"(\u0430\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u0432\u043a\u043b\u0430\u0434\u043a\u0430)","Not customizable":"\u041d\u0435 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u0439","Restricted to certain pages":"\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043e \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446","The block cannot be placed in this region.":"\u0411\u043b\u043e\u043a \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0449\u0451\u043d \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438.","Hide summary":"\u0421\u043a\u0440\u044b\u0442\u044c \u0430\u043d\u043e\u043d\u0441","Edit summary":"\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0430\u043d\u043e\u043d\u0441","Don\u0027t display post information":"\u041d\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438","The selected file %filename cannot be uploaded. Only files with the following extensions are allowed: %extensions.":"\u0412\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b %filename \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0444\u0430\u0439\u043b\u043e\u0432 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\u043c\u0438: %extensions.","Re-order rows by numerical weight instead of dragging.":"\u0423\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u043e \u0432\u0435\u0441\u0443 \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u043d\u0438\u044f.","Show row weights":"\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0435\u0441 \u0441\u0442\u0440\u043e\u043a","Hide row weights":"\u0421\u043a\u0440\u044b\u0442\u044c \u0432\u0435\u0441 \u0441\u0442\u0440\u043e\u043a","Autocomplete popup":"\u0412\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0435\u0435 \u0430\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435","Searching for matches...":"\u041f\u043e\u0438\u0441\u043a \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0439...","The response failed verification so will not be processed.":"\u041e\u0442\u0432\u0435\u0442 \u043d\u0435 \u043f\u0440\u043e\u0448\u0435\u043b \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u0431\u0443\u0434\u0435\u0442.","The callback URL is not local and not trusted: !url":"URL-\u0430\u0434\u0440\u0435\u0441 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u043c \u0438 \u0434\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u043c: !url","Other":"\u0414\u0440\u0443\u0433\u043e\u0435","Close":"\u0417\u0430\u043a\u0440\u044b\u0442\u044c","Log messages":"\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u0436\u0443\u0440\u043d\u0430\u043b","Please select a file.":"\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0444\u0430\u0439\u043b.","You are not allowed to operate on more than %num files.":"\u
370412\u0430\u043c \u043d\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u043c \u0441 %num \u0444\u0430\u0439\u043b\u0430\u043c\u0438.","Please specify dimensions within the allowed range that is from 1x1 to @dimensions.":"\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u0443\u043a\u0430\u0436\u0438\u0442\u0435 \u0440\u0430\u0437\u043c\u0435\u0440 \u0432\u043d\u0443\u0442\u0440\u0438 \u0440\u0430\u0437\u0440\u0435\u0448\u0451\u043d\u043d\u043e\u0433\u043e \u0434\u0438\u0430\u043f\u043e\u0437\u043e\u043d\u0430 \u043e\u0442 1x1 \u0434\u043e @dimensions.","%filename is not an image.":"\u0424\u0430\u0439\u043b %filename \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c.","Do you want to refresh the current directory?":"\u0412\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u043f\u0430\u043f\u043a\u0443?","Delete selected files?":"\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b?","Please select a thumbnail.":"\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043c\u0438\u043d\u0438\u0430\u0442\u044e\u0440\u0443.","You must select at least %num files.":"\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 %num \u0444\u0430\u0439\u043b\u043e\u0432.","You can not perform this operation.":"\u0412\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u044d\u0442\u0443 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e.","Insert file":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0444\u0430\u0439\u043b","Change view":"\u0421\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0438\u0434","Remove group":"\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0433\u0440\u0443\u043f\u043f\u0443","Apply (all displays)":"\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c (\u0432\u0441\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f)","Apply (this display)":"\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c (\u0434\u0430\u043d\u043d\u043e\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435)","Revert to default":"\u0412\u0435\u0440\u043d\u0443\u0442\u044c \u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e","@count year from now":"@count \u0433\u043e\u0434 \u043e\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430","@count years from now":"@count \u0433\u043e\u0434\u0430 \u043e\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430","Available tokens":"\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0442\u043e\u043a\u0435\u043d\u044b","Insert this token into your form":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0442\u043e\u043a\u0435\u043d \u0432 \u0432\u0430\u0448\u0443 \u0444\u043e\u0440\u043c\u0443","First click a text field to insert your tokens into.":"\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043a\u043b\u0438\u043a\u043d\u0438\u0442\u0435 \u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0435 \u043f\u043e\u043b\u0435, \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u043e\u043a\u0435\u043d\u044b.","Loading token browser...":"\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u0442\u043e\u043a\u0435\u043d\u043e\u0432...","Using defaults":"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e","Automatic alias":"\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u0438\u043d\u043e\u043d\u0438\u043c","Select all children":"\u0412\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0432\u0441\u0435\u0445 \u043f\u043e\u0442\u043e\u043c\u043a\u043e\u0432","Received an invali
vendor: 10,739 bytes, lines 37-43
37d response from the server.":"\u0421 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d \u043d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442.","List additional actions":"\u0421\u043f\u0438\u0441\u043e\u043a \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439","Inclusion: @value":"\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435: @value","Priority: @value":"\u041f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442: @value","Scheduled for publishing":"\u0417\u0430\u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u043d\u0430 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044e","Scheduled for unpublishing":"\u0417\u0430\u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u043d\u0430 \u0441\u043d\u044f\u0442\u0438\u0435 \u0441 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438","Not scheduled":"\u041d\u0435 \u0437\u0430\u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043e","Publishing enabled":"\u041f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430","Unpublishing enabled":"\u0421\u043d\u044f\u0442\u0438\u0435 \u0441 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043e"},"Geometry":{"Add point":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u043e\u0447\u043a\u0443","Add line":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043b\u0438\u043d\u0438\u044e","Add polygone":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u043b\u0438\u0433\u043e\u043d"}} };;
38/*!
39	Colorbox 1.6.4
40	license: MIT
41	http://www.jacklmoore.com/colorbox
42*/
43(function(t,e,i){function n(i,n,o){var r=e.createElement(i);return n&&(r.id=Z+n),o&&(r.style.cssText=o),t(r)}function o(){return i.innerHeight?i.innerHeight:t(i).height()}function r(e,i){i!==Object(i)&&(i={}),this.cache={},this.el=e,this.value=function(e){var n;return void 0===this.cache[e]&&(n=t(this.el).attr("data-cbox-"+e),void 0!==n?this.cache[e]=n:void 0!==i[e]?this.cache[e]=i[e]:void 0!==X[e]&&(this.cache[e]=X[e])),this.cache[e]},this.get=function(e){var i=this.value(e);return t.isFunction(i)?i.call(this.el,this):i}}function h(t){var e=W.length,i=(A+t)%e;return 0>i?e+i:i}function a(t,e){return Math.round((/%/.test(t)?("x"===e?E.width():o())/100:1)*parseInt(t,10))}function s(t,e){return t.get("photo")||t.get("photoRegex").test(e)}function l(t,e){return t.get("retinaUrl")&&i.devicePixelRatio>1?e.replace(t.get("photoRegex"),t.get("retinaSuffix")):e}function d(t){"contains"in x[0]&&!x[0].contains(t.target)&&t.target!==v[0]&&(t.stopPropagation(),x.focus())}function c(t){c.str!==t&&(x.add(v).removeClass(c.str).addClass(t),c.str=t)}function g(e){A=0,e&&e!==!1&&"nofollow"!==e?(W=t("."+te).filter(function(){var i=t.data(this,Y),n=new r(this,i);return n.get("rel")===e}),A=W.index(_.el),-1===A&&(W=W.add(_.el),A=W.length-1)):W=t(_.el)}function u(i){t(e).trigger(i),ae.triggerHandler(i)}function f(i){var o;if(!G){if(o=t(i).data(Y),_=new r(i,o),g(_.get("rel")),!U){U=$=!0,c(_.get("className")),x.css({visibility:"hidden",display:"block",opacity:""}),I=n(se,"LoadedContent","width:0; height:0; overflow:hidden; visibility:hidden"),b.css({width:"",height:""}).append(I),j=T.height()+k.height()+b.outerHeight(!0)-b.height(),D=C.width()+H.width()+b.outerWidth(!0)-b.width(),N=I.outerHeight(!0),z=I.outerWidth(!0);var h=a(_.get("initialWidth"),"x"),s=a(_.get("initialHeight"),"y"),l=_.get("maxWidth"),f=_.get("maxHeight");_.w=Math.max((l!==!1?Math.min(h,a(l,"x")):h)-z-D,0),_.h=Math.max((f!==!1?Math.min(s,a(f,"y")):s)-N-j,0),I.css({width:"",height:_.h}),J.position(),u(ee),_.get("onOpen"),O.add(F).hide(),x.focus(),_.get("trapFocus")&&e.addEventListener&&(e.addEventListener("focus",d,!0),ae.one(re,function(){e.removeEventListener("focus",d,!0)})),_.get("returnFocus")&&ae.one(re,function(){t(_.el).focus()})}var p=parseFloat(_.get("opacity"));v.css({opacity:p===p?p:"",cursor:_.get("overlayClose")?"pointer":"",visibility:"visible"}).show(),_.get("closeButton")?B.html(_.get("close")).appendTo(b):B.appendTo("<div/>"),w()}}function p(){x||(V=!1,E=t(i),x=n(se).attr({id:Y,"class":t.support.opacity===!1?Z+"IE":"",role:"dialog",tabindex:"-1"}).hide(),v=n(se,"Overlay").hide(),L=t([n(se,"LoadingOverlay")[0],n(se,"LoadingGraphic")[0]]),y=n(se,"Wrapper"),b=n(se,"Content").append(F=n(se,"Title"),R=n(se,"Current"),P=t('<button type="button"/>').attr({id:Z+"Previous"}),K=t('<button type="button"/>').attr({id:Z+"Next"}),S=t('<button type="button"/>').attr({id:Z+"Slideshow"}),L),B=t('<button type="button"/>').attr({id:Z+"Close"}),y.append(n(se).append(n(se,"TopLeft"),T=n(se,"TopCenter"),n(se,"TopRight")),n(se,!1,"clear:left").append(C=n(se,"MiddleLeft"),b,H=n(se,"MiddleRight")),n(se,!1,"clear:left").append(n(se,"BottomLeft"),k=n(se,"BottomCenter"),n(se,"BottomRight"))).find("div div").css({"float":"left"}),M=n(se,!1,"position:absolute; width:9999px; visibility:hidden; display:none; max-width:none;"),O=K.add(P).add(R).add(S)),e.body&&!x.parent().length&&t(e.body).append(v,x.append(y,M))}function m(){function i(t){t.which>1||t.shiftKey||t.altKey||t.metaKey||t.ctrlKey||(t.preventDefault(),f(this))}return x?(V||(V=!0,K.click(function(){J.next()}),P.click(function(){J.prev()}),B.click(function(){J.close()}),v.click(function(){_.get("overlayClose")&&J.close()}),t(e).bind("keydown."+Z,function(t){var e=t.keyCode;U&&_.get("escKey")&&27===e&&(t.preventDefault(),J.close()),U&&_.get("arrowKey")&&W[1]&&!t.altKey&&(37===e?(t.preventDefault(),P.click()):39===e&&(t.preventDefault(),K.click()))}),t.isFunction(t.fn.on)?t(e).on("click."+Z,"."+te,i):t("."+te).live("click."+Z,i)),!0):!1}function w(){var e,o,r,h=J.prep,d=++le;if($=!0,q=!1,u(he),u(ie),_.get("onLoad"),_.h=_.get("height")?a(_.get("height"),"y")-N-j:_.get("innerHeight")&&a(_.get("innerHeight"),"y"),_.w=_.get("width")?a(_.get("width"),"x")-z-D:_.get("innerWidth")&&a(_.get("innerWidth"),"x"),_.mw=_.w,_.mh=_.h,_.get("maxWidth")&&(_.mw=a(_.get("maxWidth"),"x")-z-D,_.mw=_.w&&_.w<_.mw?_.w:_.mw),_.get("maxHeight")&&(_.mh=a(_.get("maxHeight"),"y")-N-j,_.mh=_.h&&_.h<_.mh?_.h:_.mh),e=_.get("href"),Q=setTimeout(function(){L.show()},100),_.get("inline")){var c=t(e).eq(0);r=t("<div>").hide().insertBefore(c),ae.one(he,function(){r.replaceWith(c)}),h(c)}else _.get("iframe")?h(" "):_.get("html")?h(_.get("html")):s(_,e)?(e=l(_,e),q=_.get("createImg"),t(q).addClass(Z+"Photo").bind("error."+Z,function(){h(n(se,"Error").html(_.get("imgError")))}).one("load",function(){d===le&&setTimeout(function(){var e;_.get("retinaImage")&&i.devicePixelRatio>1&&(q.height=q.height/i.devicePixelRatio,q.width=q.width/i.devicePixelRatio),_.get("scalePhotos")&&(o=function(){q.height-=q.height*e,q.width-=q.width*e},_.mw&&q.width>_.mw&&(e=(q.width-_.mw)/q.width,o()),_.mh&&q.height>_.mh&&(e=(q.height-_.mh)/q.height,o())),_.h&&(q.style.marginTop=Math.max(_.mh-q.height,0)/2+"px"),W[1]&&(_.get("loop")||W[A+1])&&(q.style.cursor="pointer",t(q).bind("click."+Z,function(){J.next()})),q.style.width=q.width+"px",q.style.height=q.height+"px",h(q)},1)}),q.src=e):e&&M.load(e,_.get("data"),function(e,i){d===le&&h("error"===i?n(se,"Error").html(_.get("xhrError")):t(this).contents())})}var v,x,y,b,T,C,H,k,W,E,I,M,L,F,R,S,K,P,B,O,_,j,D,N,z,A,q,U,$,G,Q,J,V,X={html:!1,photo:!1,iframe:!1,inline:!1,transition:"elastic",speed:300,fadeOut:300,width:!1,initialWidth:"600",innerWidth:!1,maxWidth:!1,height:!1,initialHeight:"450",innerHeight:!1,maxHeight:!1,scalePhotos:!0,scrolling:!0,opacity:.9,preloading:!0,className:!1,overlayClose:!0,escKey:!0,arrowKey:!0,top:!1,bottom:!1,left:!1,right:!1,fixed:!1,data:void 0,closeButton:!0,fastIframe:!0,open:!1,reposition:!0,loop:!0,slideshow:!1,slideshowAuto:!0,slideshowSpeed:2500,slideshowStart:"start slideshow",slideshowStop:"stop slideshow",photoRegex:/\.(gif|png|jp(e|g|eg)|bmp|ico|webp|jxr|svg)((#|\?).*)?$/i,retinaImage:!1,retinaUrl:!1,retinaSuffix:"@2x.$1",current:"image {current} of {total}",previous:"previous",next:"next",close:"close",xhrError:"This content failed to load.",imgError:"This image failed to load.",returnFocus:!0,trapFocus:!0,onOpen:!1,onLoad:!1,onComplete:!1,onCleanup:!1,onClosed:!1,rel:function(){return this.rel},href:function(){return t(this).attr("href")},title:function(){return this.title},createImg:function(){var e=new Image,i=t(this).data("cbox-img-attrs");return"object"==typeof i&&t.each(i,function(t,i){e[t]=i}),e},createIframe:function(){var i=e.createElement("iframe"),n=t(this).data("cbox-iframe-attrs");return"object"==typeof n&&t.each(n,function(t,e){i[t]=e}),"frameBorder"in i&&(i.frameBorder=0),"allowTransparency"in i&&(i.allowTransparency="true"),i.name=(new Date).getTime(),i.allowFullscreen=!0,i}},Y="colorbox",Z="cbox",te=Z+"Element",ee=Z+"_open",ie=Z+"_load",ne=Z+"_complete",oe=Z+"_cleanup",re=Z+"_closed",he=Z+"_purge",ae=t("<a/>"),se="div",le=0,de={},ce=function(){function t(){clearTimeout(h)}function e(){(_.get("loop")||W[A+1])&&(t(),h=setTimeout(J.next,_.get("slideshowSpeed")))}function i(){S.html(_.get("slideshowStop")).unbind(s).one(s,n),ae.bind(ne,e).bind(ie,t),x.removeClass(a+"off").addClass(a+"on")}function n(){t(),ae.unbind(ne,e).unbind(ie,t),S.html(_.get("slideshowStart")).unbind(s).one(s,function(){J.next(),i()}),x.removeClass(a+"on").addClass(a+"off")}function o(){r=!1,S.hide(),t(),ae.unbind(ne,e).unbind(ie,t),x.removeClass(a+"off "+a+"on")}var r,h,a=Z+"Slideshow_",s="click."+Z;return function(){r?_.get("slideshow")||(ae.unbind(oe,o),o()):_.get("slideshow")&&W[1]&&(r=!0,ae.one(oe,o),_.get("slideshowAuto")?i():n(),S.show())}}();t[Y]||(t(p),J=t.fn[Y]=t[Y]=function(e,i){var n,o=this;return e=e||{},t.isFunction(o)&&(o=t("<a/>"),e.open=!0),o[0]?(p(),m()&&(i&&(e.onComplete=i),o.each(function(){var i=t.data(this,Y)||{};t.data(this,Y,t.extend(i,e))}).addClass(te),n=new r(o[0],e),n.get("open")&&f(o[0])),o):o},J.position=function(e,i){function n(){T[0].style.width=k[0].style.width=b[0].style.width=parseInt(x[0].style.width,10)-D+"px",b[0].style.height=C[0].style.height=H[0].style.height=parseInt(x[0].style.height,10)-j+"px"}var r,h,s,l=0,d=0,c=x.offset();if(E.unbind("resize."+Z),x.css({top:-9e4,left:-9e4}),h=E.scrollTop(),s=E.scrollLeft(),_.get("fixed")?(c.top-=h,c.left-=s,x.css({position:"fixed"})):(l=h,d=s,x.css({position:"absolute"})),d+=_.get("right")!==!1?Math.max(E.width()-_.w-z-D-a(_.get("right"),"x"),0):_.get("left")!==!1?a(_.get("left"),"x"):Math.round(Math.max(E.width()-_.w-z-D,0)/2),l+=_.get("bottom")!==!1?Math.max(o()-_.h-N-j-a(_.get("bottom"),"y"),0):_.get("top")!==!1?a(_.get("top"),"y"):Math.round(Math.max(o()-_.h-N-j,0)/2),x.css({top:c.top,left
43:c.left,visibility:"visible"}),y[0].style.width=y[0].style.height="9999px",r={width:_.w+z+D,height:_.h+N+j,top:l,left:d},e){var g=0;t.each(r,function(t){return r[t]!==de[t]?(g=e,void 0):void 0}),e=g}de=r,e||x.css(r),x.dequeue().animate(r,{duration:e||0,complete:function(){n(),$=!1,y[0].style.width=_.w+z+D+"px",y[0].style.height=_.h+N+j+"px",_.get("reposition")&&setTimeout(function(){E.bind("resize."+Z,J.position)},1),t.isFunction(i)&&i()},step:n})},J.resize=function(t){var e;U&&(t=t||{},t.width&&(_.w=a(t.width,"x")-z-D),t.innerWidth&&(_.w=a(t.innerWidth,"x")),I.css({width:_.w}),t.height&&(_.h=a(t.height,"y")-N-j),t.innerHeight&&(_.h=a(t.innerHeight,"y")),t.innerHeight||t.height||(e=I.scrollTop(),I.css({height:"auto"}),_.h=I.height()),I.css({height:_.h}),e&&I.scrollTop(e),J.position("none"===_.get("transition")?0:_.get("speed")))},J.prep=function(i){function o(){return _.w=_.w||I.width(),_.w=_.mw&&_.mw<_.w?_.mw:_.w,_.w}function a(){return _.h=_.h||I.height(),_.h=_.mh&&_.mh<_.h?_.mh:_.h,_.h}if(U){var d,g="none"===_.get("transition")?0:_.get("speed");I.remove(),I=n(se,"LoadedContent").append(i),I.hide().appendTo(M.show()).css({width:o(),overflow:_.get("scrolling")?"auto":"hidden"}).css({height:a()}).prependTo(b),M.hide(),t(q).css({"float":"none"}),c(_.get("className")),d=function(){function i(){t.support.opacity===!1&&x[0].style.removeAttribute("filter")}var n,o,a=W.length;U&&(o=function(){clearTimeout(Q),L.hide(),u(ne),_.get("onComplete")},F.html(_.get("title")).show(),I.show(),a>1?("string"==typeof _.get("current")&&R.html(_.get("current").replace("{current}",A+1).replace("{total}",a)).show(),K[_.get("loop")||a-1>A?"show":"hide"]().html(_.get("next")),P[_.get("loop")||A?"show":"hide"]().html(_.get("previous")),ce(),_.get("preloading")&&t.each([h(-1),h(1)],function(){var i,n=W[this],o=new r(n,t.data(n,Y)),h=o.get("href");h&&s(o,h)&&(h=l(o,h),i=e.createElement("img"),i.src=h)})):O.hide(),_.get("iframe")?(n=_.get("createIframe"),_.get("scrolling")||(n.scrolling="no"),t(n).attr({src:_.get("href"),"class":Z+"Iframe"}).one("load",o).appendTo(I),ae.one(he,function(){n.src="//about:blank"}),_.get("fastIframe")&&t(n).trigger("load")):o(),"fade"===_.get("transition")?x.fadeTo(g,1,i):i())},"fade"===_.get("transition")?x.fadeTo(g,0,function(){J.position(0,d)}):J.position(g,d)}},J.next=function(){!$&&W[1]&&(_.get("loop")||W[A+1])&&(A=h(1),f(W[A]))},J.prev=function(){!$&&W[1]&&(_.get("loop")||A)&&(A=h(-1),f(W[A]))},J.close=function(){U&&!G&&(G=!0,U=!1,u(oe),_.get("onCleanup"),E.unbind("."+Z),v.fadeTo(_.get("fadeOut")||0,0),x.stop().fadeTo(_.get("fadeOut")||0,0,function(){x.hide(),v.hide(),u(he),I.remove(),setTimeout(function(){G=!1,u(re),_.get("onClosed")},1)}))},J.remove=function(){x&&(x.stop(),t[Y].close(),x.stop(!1,!0).remove(),v.remove(),G=!1,x=null,t("."+te).removeData(Y).removeClass(te),t(e).unbind("click."+Z).unbind("keydown."+Z))},J.element=function(){return t(_.el)},J.settings=X)})(jQuery,document,window);;
44/**
45 * @file
46 * Colorbox module init js.
47 */
48
49(function ($) {
50
51Drupal.behaviors.initColorbox = {
52  attach: function (context, settings) {
53    if (!$.isFunction($('a, area, input', context).colorbox) || typeof settings.colorbox === 'undefined') {
54      return;
55    }
56
57    if (settings.colorbox.mobiledetect && window.matchMedia) {
58      // Disable Colorbox for small screens.
59      var mq = window.matchMedia("(max-device-width: " + settings.colorbox.mobiledevicewidth + ")");
60      if (mq.matches) {
61        return;
62      }
63    }
64
65    // Use "data-colorbox-gallery" if set otherwise use "rel".
66    settings.colorbox.rel = function () {
67      if ($(this).data('colorbox-gallery')) {
68        return $(this).data('colorbox-gallery');
69      }
70      else {
71        return $(this).attr('rel');
72      }
73    };
74
75    $('.colorbox', context)
76      .once('init-colorbox').each(function(){
77        // Only images are supported for the "colorbox" class.
78        // The "photo" setting forces the href attribute to be treated as an image.
79        var extendParams = {
80          photo: true
81        };
82        // If a title attribute is supplied, sanitize it.
83        var title = $(this).attr('title');
84        if (title) {
85          extendParams.title = Drupal.colorbox.sanitizeMarkup(title);
86        }
87        $(this).colorbox($.extend({}, settings.colorbox, extendParams));
88      });
89
90    $(context).bind('cbox_complete', function () {
91      Drupal.attachBehaviors($('#cboxLoadedContent'));
92    });
93  }
94};
95
96// Create colorbox namespace if it doesn't exist.
97if (!Drupal.hasOwnProperty('colorbox')) {
98  Drupal.colorbox = {};
99}
100
101/**
102 * Global function to allow sanitizing captions and control strings.
103 *
104 * @param markup
105 *   String containing potential markup.
106 * @return @string
107 *  Sanitized string with potentially dangerous markup removed.
108 */
109Drupal.colorbox.sanitizeMarkup = function(markup) {
110  // If DOMPurify installed, allow some HTML. Otherwise, treat as plain text.
111  if (typeof DOMPurify !== 'undefined') {
112    var purifyConfig = {
113      ALLOWED_TAGS: [
114        'a',
115        'b',
116        'strong',
117        'i',
118        'em',
119        'u',
120        'cite',
121        'code',
122        'br'
123      ],
124      ALLOWED_ATTR: [
125        'href',
126        'hreflang',
127        'title',
128        'target'
129      ]
130    }
131    if (Drupal.settings.hasOwnProperty('dompurify_custom_config')) {
132      purifyConfig = Drupal.settings.dompurify_custom_config;
133    }
134    return DOMPurify.sanitize(markup, purifyConfig);
135  }
136  else {
137    return Drupal.checkPlain(markup);
138  }
139}
140
141})(jQuery);
142;
143(function ($) {
144
145/**
146 * A progressbar object. Initialized with the given id. Must be inserted into
147 * the DOM afterwards through progressBar.element.
148 *
149 * method is the function which will perform the HTTP request to get the
150 * progress bar state. Either "GET" or "POST".
151 *
152 * e.g. pb = new progressBar('myProgressBar');
153 *      some_element.appendChild(pb.element);
154 */
155Drupal.progressBar = function (id, updateCallback, method, errorCallback) {
156  var pb = this;
157  this.id = id;
158  this.method = method || 'GET';
159  this.updateCallback = updateCallback;
160  this.errorCallback = errorCallback;
161
162  // The WAI-ARIA setting aria-live="polite" will announce changes after users
163  // have completed their current activity and not interrupt the screen reader.
164  this.element = $('<div class="progress" aria-live="polite"></div>').attr('id', id);
165  this.element.html('<div class="bar"><div class="filled"></div></div>' +
166                    '<div class="percentage"></div>' +
167                    '<div class="message">&nbsp;</div>');
168};
169
170/**
171 * Set the percentage and status message for the progressbar.
172 */
173Drupal.progressBar.prototype.setProgress = function (percentage, message) {
174  if (percentage >= 0 && percentage <= 100) {
175    $('div.filled', this.element).css('width', percentage + '%');
176    $('div.percentage', this.element).html(percentage + '%');
177  }
178  $('div.message', this.element).html(message);
179  if (this.updateCallback) {
180    this.updateCallback(percentage, message, this);
181  }
182};
183
184/**
185 * Start monitoring progress via Ajax.
186 */
187Drupal.progressBar.prototype.startMonitoring = function (uri, delay) {
188  this.delay = delay;
189  this.uri = uri;
190  this.sendPing();
191};
192
193/**
194 * Stop monitoring progress via Ajax.
195 */
196Drupal.progressBar.prototype.stopMonitoring = function () {
197  clearTimeout(this.timer);
198  // This allows monitoring to be stopped from within the callback.
199  this.uri = null;
200};
201
202/**
203 * Request progress data from server.
204 */
205Drupal.progressBar.prototype.sendPing = function () {
206  if (this.timer) {
207    clearTimeout(this.timer);
208  }
209  if (this.uri) {
210    var pb = this;
211    // When doing a post request, you need non-null data. Otherwise a
212    // HTTP 411 or HTTP 406 (with Apache mod_security) error may result.
213    $.ajax({
214      type: this.method,
215      url: this.uri,
216      data: '',
217      dataType: 'json',
218      success: function (progress) {
219        // Display errors.
220        if (progress.status == 0) {
221          pb.displayError(progress.data);
222          return;
223        }
224        // Update display.
225        pb.setProgress(progress.percentage, progress.message);
226        // Schedule next timer.
227        pb.timer = setTimeout(function () { pb.sendPing(); }, pb.delay);
228      },
229      error: function (xmlhttp) {
230        pb.displayError(Drupal.ajaxError(xmlhttp, pb.uri));
231      }
232    });
233  }
234};
235
236/**
237 * Display errors on the page.
238 */
239Drupal.progressBar.prototype.displayError = function (string) {
240  var error = $('<div class="messages error"></div>').html(string);
241  $(this.element).before(error).hide();
242
243  if (this.errorCallback) {
244    this.errorCallback(this);
245  }
246};
247
248})(jQuery);
249;
250/**
251 * @file
252 *
253 * Implement a modal form.
254 *
255 * @see modal.inc for documentation.
256 *
257 * This javascript relies on the CTools ajax responder.
258 */
259
260(function ($) {
261  // Make sure our objects are defined.
262  Drupal.CTools = Drupal.CTools || {};
263  Drupal.CTools.Modal = Drupal.CTools.Modal || {};
264
265  /**
266   * Display the modal
267   *
268   * @todo -- document the settings.
269   */
270  Drupal.CTools.Modal.show = function(choice) {
271    var opts = {};
272
273    if (choice && typeof choice == 'string' && Drupal.settings[choice]) {
274      // This notation guarantees we are actually copying it.
275      $.extend(true, opts, Drupal.settings[choice]);
276    }
277    else if (choice) {
278      $.extend(true, opts, choice);
279    }
280
281    var defaults = {
282      modalTheme: 'CToolsModalDialog',
283      throbberTheme: 'CToolsModalThrobber',
284      animation: 'show',
285      animationSpeed: 'fast',
286      modalSize: {
287        type: 'scale',
288        width: .8,
289        height: .8,
290        addWidth: 0,
291        addHeight: 0,
292        // How much to remove from the inner content to make space for the
293        // theming.
294        contentRight: 25,
295        contentBottom: 45
296      },
297      modalOptions: {
298        opacity: .55,
299        background: '#fff'
300      },
301      modalClass: 'default'
302    };
303
304    var settings = {};
305    $.extend(true, settings, defaults, Drupal.settings.CToolsModal, opts);
306
307    if (Drupal.CTools.Modal.currentSettings && Drupal.CTools.Modal.currentSettings != settings) {
308      Drupal.CTools.Modal.modal.remove();
309      Drupal.CTools.Modal.modal = null;
310    }
311
312    Drupal.CTools.Modal.currentSettings = settings;
313
314    var resize = function(e) {
315      // When creating the modal, it actually exists only in a theoretical
316      // place that is not in the DOM. But once the modal exists, it is in the
317      // DOM so the context must be set appropriately.
318      var context = e ? document : Drupal.CTools.Modal.modal;
319
320      if (Drupal.CTools.Modal.currentSettings.modalSize.type == 'scale') {
321        var width = $(window).width() * Drupal.CTools.Modal.currentSettings.modalSize.width;
322        var height = $(window).height() * Drupal.CTools.Modal.currentSettings.modalSize.height;
323      }
324      else {
325        var width = Drupal.CTools.Modal.currentSettings.modalSize.width;
326        var height = Drupal.CTools.Modal.currentSettings.modalSize.height;
327      }
328
329      // Use the additionol pixels for creating the width and height.
330      $('div.ctools-modal-content', context).css({
331        'width': width + Drupal.CTools.Modal.currentSettings.modalSize.addWidth + 'px',
332        'height': height + Drupal.CTools.Modal.currentSettings.modalSize.addHeight + 'px'
333      });
334      $('div.ctools-modal-content .modal-content', context).css({
335        'width': (width - Drupal.CTools.Modal.currentSettings.modalSize.contentRight) + 'px',
336        'height': (height - Drupal.CTools.Modal.currentSettings.modalSize.contentBottom) + 'px'
337      });
338    };
339
340    if (!Drupal.CTools.Modal.modal) {
341      Drupal.CTools.Modal.modal = $(Drupal.theme(settings.modalTheme));
342      if (settings.modalSize.type == 'scale') {
343        $(window).bind('resize', resize);
344      }
345    }
346
347    resize();
348
349    $('span.modal-title', Drupal.CTools.Modal.modal).html(Drupal.CTools.Modal.currentSettings.loadingText);
350    Drupal.CTools.Modal.modalContent(Drupal.CTools.Modal.modal, settings.modalOptions, settings.animation, settings.animationSpeed, settings.modalClass);
351    $('#modalContent .modal-content').html(Drupal.theme(settings.throbberTheme)).addClass('ctools-modal-loading');
352
353    // Position autocomplete results based on the scroll position of the modal.
354    $('#modalContent .modal-content').delegate('input.form-autocomplete', 'keyup', function() {
355      $('#autocomplete').css('top', $(this).position().top + $(this).outerHeight() + $(this).offsetParent().filter('#modal-content').scrollTop());
356    });
357  };
358
359  /**
360   * Hide the modal
361   */
362  Drupal.CTools.Modal.dismiss = function() {
363    if (Drupal.CTools.Modal.modal) {
364      Drupal.CTools.Modal.unmodalContent(Drupal.CTools.Modal.modal);
365    }
366  };
367
368  /**
369   * Provide the HTML to create the modal dialog.
370   */
371  Drupal.theme.prototype.CToolsModalDialog = function () {
372    var html = '';
373    html += '<div id="ctools-modal">';
374    html += '  <div class="ctools-modal-content">'; // panels-modal-content
375    html += '    <div class="modal-header">';
376    html += '      <a class="close" href="#">';
377    html +=          Drupal.CTools.Modal.currentSettings.closeText + Drupal.CTools.Modal.currentSettings.closeImage;
378    html += '      </a>';
379    html += '      <span id="modal-title" class="modal-title">&nbsp;</span>';
380    html += '    </div>';
381    html += '    <div id="modal-content" class="modal-content">';
382    html += '    </div>';
383    html += '  </div>';
384    html += '</div>';
385
386    return html;
387  };
388
389  /**
390   * Provide the HTML to create the throbber.
391   */
392  Drupal.theme.prototype.CToolsModalThrobber = function () {
393    var html = '';
394    html += '<div id="modal-throbber">';
395    html += '  <div class="modal-throbber-wrapper">';
396    html +=      Drupal.CTools.Modal.currentSettings.throbber;
397    html += '  </div>';
398    html += '</div>';
399
400    return html;
401  };
402
403  /**
404   * Figure out what settings string to use to display a modal.
405   */
406  Drupal.CTools.Modal.getSettings = function (object) {
407    var match = $(object).attr('class').match(/ctools-modal-(\S+)/);
408    if (match) {
409      return match[1];
410    }
411  };
412
413  /**
414   * Click function for modals that can be cached.
415   */
416  Drupal.CTools.Modal.clickAjaxCacheLink = function () {
417    Drupal.CTools.Modal.show(Drupal.CTools.Modal.getSettings(this));
418    return Drupal.CTools.AJAX.clickAJAXCacheLink.apply(this);
419  };
420
421  /**
422   * Handler to prepare the modal for the response
423   */
424  Drupal.CTools.Modal.clickAjaxLink = function () {
425    Drupal.CTools.Modal.show(Drupal.CTools.Modal.getSettings(this));
426    return false;
427  };
428
429  /**
430   * Submit responder to do an AJAX submit on all modal forms.
431   */
432  Drupal.CTools.Modal.submitAjaxForm = function(e) {
433    var $form = $(this);
434    var url = $form.attr('action');
435
436    setTimeout(function() { Drupal.CTools.AJAX.ajaxSubmit($form, url); }, 1);
437    return false;
438  };
439
440  /**
441   * Bind links that will open modals to the appropriate function.
442   */
443  Drupal.behaviors.ZZCToolsModal = {
444    attach: function(context) {
445      // Bind links
446      // Note that doing so in this order means that the two classes can be
447      // used together safely.
448      /*
449       * @todo remimplement the warm caching feature
450       $('a.ctools-use-modal-cache', context).once('ctools-use-modal', function() {
451         $(this).click(Drupal.CTools.Modal.clickAjaxCacheLink);
452         Drupal.CTools.AJAX.warmCache.apply(this);
453       });
454        */
455
456      $('area.ctools-use-modal, a.ctools-use-modal', context).once('ctools-use-modal', function() {
457        var $this = $(this);
458        $this.click(Drupal.CTools.Modal.clickAjaxLink);
459        // Create a drupal ajax object
460        var element_settings = {};
461        if ($this.attr('href')) {
462          element_settings.url = $this.attr('href');
463          element_settings.event = 'click';
464          element_settings.progress = { type: 'throbber' };
465        }
466        var base = $this.attr('href');
467        Drupal.ajax[base] = new Drupal.ajax(base, this, element_settings);
468      });
469
470      // Bind buttons
471      $('input.ctools-use-modal, button.ctools-use-modal', context).once('ctools-use-modal', function() {
472        var $this = $(this);
473        $this.click(Drupal.CTools.Modal.clickAjaxLink);
474        var button = this;
475        var element_settings = {};
476
477        // AJAX submits specified in this manner automatically submit to the
478        // normal form action.
479        element_settings.url = Drupal.CTools.Modal.findURL(this);
480        if (element_settings.url == '') {
481          element_settings.url = $(this).closest('form').attr('action');
482        }
483        element_settings.event = 'click';
484        element_settings.setClick = true;
485
486        var base = $this.attr('id');
487        Drupal.ajax[base] = new Drupal.ajax(base, this, element_settings);
488
489        // Make sure changes to settings are reflected in the URL.
490        $('.' + $(button).attr('id') + '-url').change(function() {
491          Drupal.ajax[base].options.url = Drupal.CTools.Modal.findURL(button);
492        });
493      });
494
495      // Bind our custom event to the form submit
496      $('#modal-content form', context).once('ctools-use-modal', function() {
497        var $this = $(this);
498        var element_settings = {};
499
500        element_settings.url = $this.attr('action');
501        element_settings.event = 'submit';
502        element_settings.progress = { 'type': 'throbber' };
503        var base = $this.attr('id');
504
505        Drupal.ajax[base] = new Drupal.ajax(base, this, element_settings);
506        Drupal.ajax[base].form = $this;
507
508        $('input[type=submit], button', this).click(function(event) {
509          Drupal.ajax[base].element = this;
510          this.form.clk = this;
511          // Stop autocomplete from submitting.
512          if (Drupal.autocompleteSubmit && !Drupal.autocompleteSubmit()) {
513            return false;
514          }
515          // An empty event means we were triggered via .click() and
516          // in jquery 1.4 this won't trigger a submit.
517          // We also have to check jQuery version to prevent
518          // IE8 + jQuery 1.4.4 to break on other events
519          // bound to the submit button.
520          if (jQuery.fn.jquery.substr(0, 3) === '1.4' && typeof event.bubbles === "undefined") {
521            $(this.form).trigger('submit');
522            return false;
523          }
524        });
525      });
526
527      // Bind a click handler to allow elements with the 'ctools-close-modal'
528      // class to close the modal.
529      $('.ctools-close-modal', context).once('ctools-close-modal')
530        .click(function() {
531          Drupal.CTools.Modal.dismiss();
532          return false;
533        });
534    }
535  };
536
537  // The following are implementations of AJAX responder commands.
538
539  /**
540   * AJAX responder command to place HTML within the modal.
541   */
542  Drupal.CTools.Modal.modal_display = function(ajax, response, status) {
543    var settings = response.settings || ajax.settings || Drupal.settings;
544    // If the modal does not exist yet, create it.
545    if ($('#modalContent').length == 0) {
546      Drupal.CTools.Modal.show(Drupal.CTools.Modal.getSettings(ajax.element));
547    }
548    // If the modal exists run detachBehaviors before removing existing content.
549    else {
550      Drupal.detachBehaviors($('#modalContent'), settings, 'unload');
551    }
552    $('#modal-title').html(response.title);
553    // Simulate an actual page load by scrolling to the top after adding the
554    // content. This is helpful for allowing users to see error messages at the
555    // top of a form, etc.
556    $('#modal-content').html(response.output).scrollTop(0);
557    $(document).trigger('CToolsAttachBehaviors', $('#modalContent'));
558
559    // Attach behaviors within a modal dialog.
560    Drupal.attachBehaviors($('#modalContent'), settings);
561
562    if ($('#modal-content').hasClass('ctools-modal-loading')) {
563      $('#modal-content').removeClass('ctools-modal-loading');
564    }
565    else {
566      // If the modal was already shown, and we are simply replacing its
567      // content, then focus on the first focusable element in the modal.
568      // (When first showing the modal, focus will be placed on the close
569      // button by the show() function called above.)
570      $('#modal-content :focusable:first').focus();
571    }
572  };
573
574  /**
575   * AJAX responder command to dismiss the modal.
576   */
577  Drupal.CTools.Modal.modal_dismiss = function(command) {
578    Drupal.CTools.Modal.dismiss();
579    $('link.ctools-temporary-css').remove();
580  };
581
582  /**
583   * Display loading
584   */
585  //Drupal.CTools.AJAX.commands.modal_loading = function(command) {
586  Drupal.CTools.Modal.modal_loading = function(command) {
587    Drupal.CTools.Modal.modal_display({
588      output: Drupal.theme(Drupal.CTools.Modal.currentSettings.throbberTheme),
589      title: Drupal.CTools.Modal.currentSettings.loadingText
590    });
591  };
592
593  /**
594   * Find a URL for an AJAX button.
595   *
596   * The URL for this gadget will be composed of the values of items by
597   * taking the ID of this item and adding -url and looking for that
598   * class. They need to be in the form in order since we will
599   * concat them all together using '/'.
600   */
601  Drupal.CTools.Modal.findURL = function(item) {
602    var url = '';
603    var url_class = '.' + $(item).attr('id') + '-url';
604    $(url_class).each(
605      function() {
606        var $this = $(this);
607        if (url && $this.val()) {
608          url += '/';
609        }
610        url += $this.val();
611      });
612    return url;
613  };
614
615
616  /**
617   * modalContent
618   * @param content string to display in the content box
619   * @param css obj of css attributes
620   * @param animation (fadeIn, slideDown, show)
621   * @param speed (valid animation speeds slow, medium, fast or # in ms)
622   * @param modalClass class added to div#modalContent
623   */
624  Drupal.CTools.Modal.modalContent = function(content, css, animation, speed, modalClass) {
625    // If our animation isn't set, make it just show/pop
626    if (!animation) {
627      animation = 'show';
628    }
629    else {
630      // If our animation isn't "fadeIn" or "slideDown" then it always is show
631      if (animation != 'fadeIn' && animation != 'slideDown') {
632        animation = 'show';
633      }
634    }
635
636    if (!speed && 0 !== speed) {
637      speed = 'fast';
638    }
639
640    // Build our base attributes and allow them to be overriden
641    css = jQuery.extend({
642      position: 'absolute',
643      left: '0px',
644      margin: '0px',
645      background: '#000',
646      opacity: '.55'
647    }, css);
648
649    // Add opacity handling for IE.
650    css.filter = 'alpha(opacity=' + (100 * css.opacity) + ')';
651    content.hide();
652
653    // If we already have modalContent, remove it.
654    if ($('#modalBackdrop').length) $('#modalBackdrop').remove();
655    if ($('#modalContent').length) $('#modalContent').remove();
656
657    // position code lifted from http://www.quirksmode.org/viewport/compatibility.html
658    if (self.pageYOffset) { // all except Explorer
659    var wt = self.pageYOffset;
660    } else if (document.documentElement && document.documentElement.scrollTop) { // Explorer 6 Strict
661      var wt = document.documentElement.scrollTop;
662    } else if (document.body) { // all other Explorers
663      var wt = document.body.scrollTop;
664    }
665
666    // Get our dimensions
667
668    // Get the docHeight and (ugly hack) add 50 pixels to make sure we dont have a *visible* border below our div
669    var docHeight = $(document).height() + 50;
670    var docWidth = $(document).width();
671    var winHeight = $(window).height();
672    var winWidth = $(window).width();
673    if( docHeight < winHeight ) docHeight = winHeight;
674
675    // Create our divs
676    $('body').append('<div id="modalBackdrop" class="backdrop-' + modalClass + '" style="z-index: 1000; display: none;"></div><div id="modalContent" class="modal-' + modalClass + '" style="z-index: 1001; position: absolute;">' + $(content).html() + '</div>');
677
678    // Get a list of the tabbable elements in the modal content.
679    var getTabbableElements = function () {
680      var tabbableElements = $('#modalContent :tabbable'),
681          radioButtons = tabbableElements.filter('input[type="radio"]');
682
683      // The list of tabbable elements from jQuery is *almost* right. The
684      // exception is with groups of radio buttons. The list from jQuery will
685      // include all radio buttons, when in fact, only the selected radio button
686      // is tabbable, and if no radio buttons in a group are selected, then only
687      // the first is tabbable.
688      if (radioButtons.length > 0) {
689        // First, build up an index of which groups have an item selected or not.
690        var anySelected = {};
691        radioButtons.each(function () {
692          var name = this.name;
693
694          if (typeof anySelected[name] === 'undefined') {
695            anySelected[name] = radioButtons.filter('input[name="' + name + '"]:checked').length !== 0;
696          }
697        });
698
699        // Next filter out the radio buttons that aren't really tabbable.
700        var found = {};
701        tabbableElements = tabbableElements.filter(function () {
702          var keep = true;
703
704          if (this.type == 'radio') {
705            if (anySelected[this.name]) {
706              // Only keep the selected one.
707              keep = this.checked;
708            }
709            else {
710              // Only keep the first one.
711              if (found[this.name]) {
712                keep = false;
713              }
714              found[this.name] = true;
715            }
716          }
717
718          return keep;
719        });
720      }
721
722      return tabbableElements.get();
723    };
724
725    // Keyboard and focus event handler ensures only modal elements gain focus.
726    modalEventHandler = function( event ) {
727      target = null;
728      if ( event ) { //Mozilla
729        target = event.target;
730      } else { //IE
731        event = window.event;
732        target = event.srcElement;
733      }
734
735      var parents = $(target).parents().get();
736      for (var i = 0; i < parents.length; ++i) {
737        var position = $(parents[i]).css('position');
738        if (position == 'absolute' || position == 'fixed') {
739          return true;
740        }
741      }
742
743      if ($(target).is('#modalContent, body') || $(target).filter('*:visible').parents('#modalContent').length) {
744        // Allow the event only if target is a visible child node
745        // of #modalContent.
746        return true;
747      }
748      else {
749        getTabbableElements()[0].focus();
750      }
751
752      event.preventDefault();
753    };
754    $('body').bind( 'focus', modalEventHandler );
755    $('body').bind( 'keypress', modalEventHandler );
756
757    // Keypress handler Ensures you can only TAB to elements within the modal.
758    // Based on the psuedo-code from WAI-ARIA 1.0 Authoring Practices section
759    // 3.3.1 "Trapping Focus".
760    modalTabTrapHandler = function (evt) {
761      // We only care about the TAB key.
762      if (evt.which != 9) {
763        return true;
764      }
765
766      var tabbableElements = getTabbableElements(),
767          firstTabbableElement = tabbableElements[0],
768          lastTabbableElement = tabbableElements[tabbableElements.length - 1],
769          singleTabbableElement = firstTabbableElement == lastTabbableElement,
770          node = evt.target;
771
772      // If this is the first element and the user wants to go backwards, then
773      // jump to the last element.
774      if (node == firstTabbableElement && evt.shiftKey) {
775        if (!singleTabbableElement) {
776          lastTabbableElement.focus();
777        }
778        return false;
779      }
780      // If this is the last element and the user wants to go forwards, then
781      // jump to the first element.
782      else if (node == lastTabbableElement && !evt.shiftKey) {
783        if (!singleTabbableElement) {
784          firstTabbableElement.focus();
785        }
786        return false;
787      }
788      // If this element isn't in the dialog at all, then jump to the first
789      // or last element to get the user into the game.
790      else if ($.inArray(node, tabbableElements) == -1) {
791        // Make sure the node isn't in another modal (ie. WYSIWYG modal).
792        var parents = $(node).parents().get();
793        for (var i = 0; i < parents.length; ++i) {
794          var position = $(parents[i]).css('position');
795          if (position == 'absolute' || position == 'fixed') {
796            return true;
797          }
798        }
799
800        if (evt.shiftKey) {
801          lastTabbableElement.focus();
802        }
803        else {
804          firstTabbableElement.focus();
805        }
806      }
807    };
808    $('body').bind('keydown', modalTabTrapHandler);
809
810    // Create our content div, get the dimensions, and hide it
811    var modalContent = $('#modalContent').css('top','-1000px');
812    var $modalHeader = modalContent.find('.modal-header');
813    var mdcTop = wt + Math.max((winHeight / 2) - (modalContent.outerHeight() / 2), 0);
814    var mdcLeft = ( winWidth / 2 ) - ( modalContent.outerWidth() / 2);
815    $('#modalBackdrop').css(css).css('top', 0).css('height', docHeight + 'px').css('width', docWidth + 'px').show();
816    modalContent.css({top: mdcTop + 'px', left: mdcLeft + 'px'}).hide()[animation](speed);
817
818    // Bind a click for closing the modalContent
819    modalContentClose = function(){close(); return false;};
820    $('.close', $modalHeader).bind('click', modalContentClose);
821
822    // Bind a keypress on escape for closing the modalContent
823    modalEventEscapeCloseHandler = function(event) {
824      if (event.keyCode == 27) {
825        close();
826        return false;
827      }
828    };
829
830    $(document).bind('keydown', modalEventEscapeCloseHandler);
831
832    // Per WAI-ARIA 1.0 Authoring Practices, initial focus should be on the
833    // close button, but we should save the original focus to restore it after
834    // the dialog is closed.
835    var oldFocus = document.activeElement;
836    $('.close', $modalHeader).focus();
837
838    // Close the open modal content and backdrop
839    function close() {
840      // Unbind the events
841      $(window).unbind('resize',  modalContentResize);
842      $('body').unbind( 'focus', modalEventHandler);
843      $('body').unbind( 'keypress', modalEventHandler );
844      $('body').unbind( 'keydown', modalTabTrapHandler );
845      $('.close', $modalHeader).unbind('click', modalContentClose);
846      $(document).unbind('keydown', modalEventEscapeCloseHandler);
847      $(document).trigger('CToolsCloseModalBehaviors', $('#modalContent'));
848      $(document).trigger('CToolsDetachBehaviors', $('#modalContent'));
849
850      // Closing animation.
851      switch (animation) {
852        case 'fadeIn':
853          modalContent.fadeOut(speed, modalContentRemove);
854          break;
855
856        case 'slideDown':
857          modalContent.slideUp(speed, modalContentRemove);
858          break;
859
860        case 'show':
861          modalContent.hide(speed, modalContentRemove);
862          break;
863      }
864    }
865
866    // Remove the content.
867    modalContentRemove = function () {
868      $('#modalContent').remove();
869      $('#modalBackdrop').remove();
870
871      // Restore focus to where it was before opening the dialog.
872      $(oldFocus).focus();
873    };
874
875    // Move and resize the modalBackdrop and modalContent on window resize.
876    modalContentResize = function () {
877      // Reset the backdrop height/width to get accurate document size.
878      $('#modalBackdrop').css('height', '').css('width', '');
879
880      // Position code lifted from:
881      // http://www.quirksmode.org/viewport/compatibility.html
882      if (self.pageYOffset) { // all except Explorer
883        var wt = self.pageYOffset;
884      } else if (document.documentElement && document.documentElement.scrollTop) { // Explorer 6 Strict
885        var wt = document.documentElement.scrollTop;
886      } else if (document.body) { // all other Explorers
887        var wt = document.body.scrollTop;
888      }
889
890      // Get our heights
891      var docHeight = $(document).height();
892      var docWidth = $(document).width();
893      var winHeight = $(window).height();
894      var winWidth = $(window).width();
895      if( docHeight < winHeight ) docHeight = winHeight;
896
897      // Get where we should move content to
898      var modalContent = $('#modalContent');
899      var mdcTop = wt + Math.max((winHeight / 2) - (modalContent.outerHeight() / 2), 0);
900      var mdcLeft = ( winWidth / 2 ) - ( modalContent.outerWidth() / 2);
901
902      // Apply the changes
903      $('#modalBackdrop').css('height', docHeight + 'px').css('width', docWidth + 'px').show();
904      modalContent.css('top', mdcTop + 'px').css('left', mdcLeft + 'px').show();
905    };
906    $(window).bind('resize', modalContentResize);
907  };
908
909  /**
910   * unmodalContent
911   * @param content (The jQuery object to remove)
912   * @param animation (fadeOut, slideUp, show)
913   * @param speed (valid animation speeds slow, medium, fast or # in ms)
914   */
915  Drupal.CTools.Modal.unmodalContent = function(content, animation, speed)
916  {
917    // If our animation isn't set, make it just show/pop
918    if (!animation) { var animation = 'show'; } else {
919      // If our animation isn't "fade" then it always is show
920      if (( animation != 'fadeOut' ) && ( animation != 'slideUp')) animation = 'show';
921    }
922    // Set a speed if we dont have one
923    if ( !speed ) var speed = 'fast';
924
925    // Unbind the events we bound
926    $(window).unbind('resize', modalContentResize);
927    $('body').unbind('focus', modalEventHandler);
928    $('body').unbind('keypress', modalEventHandler);
929    $('body').unbind( 'keydown', modalTabTrapHandler );
930    var $modalContent = $('#modalContent');
931    var $modalHeader = $modalContent.find('.modal-header');
932    $('.close', $modalHeader).unbind('click', modalContentClose);
933    $(document).unbind('keydown', modalEventEscapeCloseHandler);
934    $(document).trigger('CToolsDetachBehaviors', $modalContent);
935
936    // jQuery magic loop through the instances and run the animations or removal.
937    content.each(function(){
938      if ( animation == 'fade' ) {
939        $('#modalContent').fadeOut(speed, function() {
940          $('#modalBackdrop').fadeOut(speed, function() {
941            $(this).remove();
942          });
943          $(this).remove();
944        });
945      } else {
946        if ( animation == 'slide' ) {
947          $('#modalContent').slideUp(speed,function() {
948            $('#modalBackdrop').slideUp(speed, function() {
949              $(this).remove();
950            });
951            $(this).remove();
952          });
953        } else {
954          $('#modalContent').remove();
955          $('#modalBackdrop').remove();
956        }
957      }
958    });
959  };
960
961$(function() {
962  Drupal.ajax.prototype.commands.modal_display = Drupal.CTools.Modal.modal_display;
963  Drupal.ajax.prototype.commands.modal_dismiss = Drupal.CTools.Modal.modal_dismiss;
964});
965
966})(jQuery);
967;
968/**
969* Provide the HTML to create the modal dialog.
970*/
971Drupal.theme.prototype.ModalFormsPopup = function () {
972  var html = '';
973
974  html += '<div id="ctools-modal" class="popups-box">';
975  html += '  <div class="ctools-modal-content modal-forms-modal-content">';
976  html += '    <div class="popups-container">';
977  html += '      <div class="modal-header popups-title">';
978  html += '        <span id="modal-title" class="modal-title"></span>';
979  html += '        <span class="popups-close close">' + Drupal.CTools.Modal.currentSettings.closeText + '</span>';
980  html += '        <div class="clear-block"></div>';
981  html += '      </div>';
982  html += '      <div class="modal-scroll"><div id="modal-content" class="modal-content popups-body"></div></div>';
983  html += '    </div>';
984  html += '  </div>';
985  html += '</div>';
986
987  return html;
988}
989;

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.