1 2/*! js-cookie v3.0.5 | MIT */ 3!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self,function(){var n=e.Cookies,o=e.Cookies=t();o.noConflict=function(){return e.Cookies=n,o}}())}(this,(function(){"use strict";function e(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)e[o]=n[o]}return e}var t=function t(n,o){function r(t,r,i){if("undefined"!=typeof document){"number"==typeof(i=e({},o,i)).expires&&(i.expires=new Date(Date.now()+864e5*i.expires)),i.expires&&(i.expires=i.expires.toUTCString()),t=encodeURIComponent(t).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape);var c="";for(var u in i)i[u]&&(c+="; "+u,!0!==i[u]&&(c+="="+i[u].split(";")[0]));return document.cookie=t+"="+n.write(r,t)+c}}return Object.create({set:r,get:function(e){if("undefined"!=typeof document&&(!arguments.length||e)){for(var t=document.cookie?document.cookie.split("; "):[],o={},r=0;r<t.length;r++){var i=t[r].split("="),c=i.slice(1).join("=");try{var u=decodeURIComponent(i[0]);if(o[u]=n.read(c,u),e===u)break}catch(e){}}return e?o[e]:o}},remove:function(t,n){r(t,"",e({},n,{expires:-1}))},withAttributes:function(n){return t(this.converter,e({},this.attributes,n))},withConverter:function(n){return t(e({},this.converter,n),this.attributes)}},{attributes:{value:Object.freeze(o)},converter:{value:Object.freeze(n)}})}({read:function(e){return'"'===e[0]&&(e=e.slice(1,-1)),e.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent)},write:function(e){return encodeURIComponent(e).replace(/%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,decodeURIComponent)}},{path:"/"});return t})); 4 5var cookieman=function(){"use strict";var e="CookieConsent",t=document.querySelector("[data-cookieman-form]"),o=document.querySelector("[data-cookieman-settings]"),n=o,r=JSON.parse(o.dataset.cookiemanSettings),i=t.querySelectorAll("[type=checkbox][name]"),c=document.querySelectorAll("[data-cookieman-save]"),a=document.querySelectorAll("[data-cookieman-accept-all]"),s=document.querySelectorAll("[data-cookieman-accept-none]"),d=[],u={};function l(){for(var t=[],o=r.cookie.cookieLifetimeDays||365,n={expires:parseInt(o,10),domain:r.cookie.domain||void 0,sameSite:r.cookie.sameSite||"lax"},c=0;c<i.length;c++)i[c].checked&&t.push(i[c].name);Cookies.set(e,t.join("|"),n)}function f(e,t){e.checked=t}function m(){for(var e=0;e<i.length;e++){var t=i[e];t.disabled||f(t,!1)}}function v(e){for(var t=h(),o=0;o<t.length;o++)if(t[o]===e)return!0;return!1}function k(){var t=Cookies.get(e);return t?t.split("|"):[]}function h(){return k().filter((function(e){var t=r.groups[e];return void 0!==t&&(!t.respectDnt||"1"!==window.navigator.doNotTrack)}))}function p(e){const t=e.target;t&&t.dataset.hasOwnProperty("cookiemanShow")&&cookieman.show()}function g(e){e.preventDefault(),l(),cookieman.hide(),function(){for(var e in r.groups)if(Object.prototype.hasOwnProperty.call(r.groups,e)&&!v(e))for(var t=r.groups[e],o=0;o<t.trackingObjects.length;o++){var n=t.trackingObjects[o];j(n,r.trackingObjects[n])}}(),w()}function O(e){e.preventDefault(),function(){for(var e=0;e<i.length;e++)f(i[e],!0)}()}function b(e){e.preventDefault(),m()}function y(e,t){if(void 0!==t){if(void 0!==t.inject){var o,r=document.createElement("div");r.innerHTML=t.inject;for(var i=0,c=0;c<r.children.length;c++){var a=r.children[c];if("SCRIPT"===a.tagName){(o=document.createElement("script")).textContent=a.textContent;for(var s=0;s<a.attributes.length;s++){var l=a.attributes[s];o.setAttribute(l.name,l.value)}o.addEventListener("load",function(e,t,o,r){return function(i){var c,a;void 0===u[o]&&(u[o]=[]),u[o].push(t),c="scriptLoaded",a={detail:{trackingObjectKey:o,trackingObjectSettings:r,scriptId:t,node:e}},n.dispatchEvent(new window.CustomEvent(c,a))}}(o,i++,e,t)),a=o}else c--;document.body.appendChild(a)}d.push(e)}}else console.error("Used trackingObject â¹"+e+"⺠is undefined.")}function j(e,t){if(void 0!==t)for(var o in t.show){if(Object.prototype.hasOwnProperty.call(t.show,o))C(o,t.show[o])}else console.error("Used trackingObject â¹"+e+"⺠is undefined.")}function C(e,t){if("cookie_http+html"===t.type){if(Object.prototype.hasOwnProperty.call(t,"htmlCookieRemovalPattern")&&""!==t.htmlCookieRemovalPattern){var o,n=Cookies.get();try{o=RegExp(t.htmlCookieRemovalPattern)}catch(t){return console.error('Malformed pattern for cookie deletion on trackingObjectItem "'+e+'": '+t.message),!1}for(var r in n)null!==r.match(o)&&S(r)}else S(e);return!0}return!1}function w(){for(var e=h(),t=0;t<e.length;t++)for(var o=r.groups[e[t]],n=0;n<o.trackingObjects.length;n++){var i=o.trackingObjects[n];-1===d.indexOf(i)&&y(i,r.trackingObjects[i])}}function S(e){var t=document.location.host,o=t.split(".").slice(-2).join(".");Cookies.remove(e),Cookies.remove(e,{path:"/"}),Cookies.remove(e,{path:"",domain:t}),Cookies.remove(e,{path:"/",domain:t}),Cookies.remove(e,{path:"",domain:"."+o}),Cookies.remove(e,{path:"/",domain:"."+o})}return function(){for(var o=0;o<a.length;o++)a[o].addEventListener("click",O);for(o=0;o<s.length;o++)s[o].addEventListener("click",b);for(o=0;o<c.length;o++)c[o].addEventListener("click",g);document.body.addEventListener("click",p),function(){if(void 0!==Cookies.get(e)){var o=k();m();for(var n=0;n<o.length;n++){var r=t.querySelector("[name="+o[n]+"]");r&&f(r,!0)}}}(),function(){if("1"===window.navigator.doNotTrack)for(var e=document.querySelectorAll("[data-cookieman-dnt]"),o=0;o<e.length;o++)e[o].innerHTML=t.dataset.cookiemanDntEnabled}(),w()}(),{show:function(){console.error("Your theme should implement function cookieman.show()")},hide:function(){console.error("Your theme should implement function cookieman.hide()")},showOnce:function(){void 0===Cookies.get(e)&&cookieman.show()},hasConsented:v,hasConsentedTrackingObject:function(e){var t=function(e){return Object.keys(r.groups).filter((function(t){return Object.prototype.hasOwnProperty.call(r.groups[t],"trackingObjects")&&r.groups[t].trackingObjects.indexOf(e)>-1}))}(e);return t.reduce((function(e,t){return e&&v(t)}),t.length>0)},consenteds:h,consent:function(e){f(t.querySelector('[type=checkbox][name="'+e+'"]'),!0),l(),w()},onScriptLoaded:function(e,t,o){void 0===u[e]&&(u[e]=[]),-1===u[e].indexOf(t)?n.addEventListener("scriptLoaded",(function(n){n.detail.trackingObjectKey===e&&n.detail.scriptId===t&&o(n.detail.trackingObjectKey,n.detail.scriptId)})):o(e,t)},eventsEl:n}}(); 6 7!function(){"use strict";var o=document.querySelector('[aria-controls="cookieman-settings"]'),e=null;o&&o.addEventListener("click",(function(o){var e=document.querySelector("[data-cookieman-save]:not([data-cookieman-accept-all]):not([data-cookieman-accept-none])");e&&(e.hidden=!1)})),cookieman.show=function(){(e=new bootstrap.Modal(document.getElementById("cookieman-modal"),{backdrop:true})).show()},cookieman.hide=function(){e&&e.hide()}}(); 8 9null!==document.querySelector('[data-cookieman-showonce="1"]')&&setTimeout(cookieman.showOnce,100); 10 11document.addEventListener('DOMContentLoaded', function () { 12 13 // --- 1. Toggle .news-list-label --- 14 document.querySelectorAll('.news-list-label').forEach(label => { 15 label.addEventListener('click', () => { 16 label.parentElement.classList.toggle('show-label'); 17 const icon = label.querySelector('i'); 18 if (icon) icon.classList.toggle('fa-rotate-180'); 19 }); 20 }); 21 22 // --- 2. Dropdown Hover --- 23 document.querySelectorAll('.dropdown').forEach(dropdown => { 24 dropdown.addEventListener('mouseenter', () => { 25 const menu = dropdown.querySelector('.dropdown-menu'); 26 if (menu) { 27 menu.classList.add('show'); 28 if (getComputedStyle(menu).display !== 'none') { 29 dropdown.classList.add('show'); 30 } 31 } 32 }); 33 dropdown.addEventListener('mouseleave', () => { 34 const menu = dropdown.querySelector('.dropdown-menu'); 35 if (menu) { 36 menu.classList.remove('show'); 37 dropdown.classList.remove('show'); 38 } 39 }); 40 }); 41
42 // --- 3. Modale mit localStorage --- 43 document.querySelectorAll('.mask-modal').forEach(modal => { 44 const id = modal.id; 45 if (localStorage.getItem('modal' + id)) { 46 bootstrap.Modal.getOrCreateInstance(modal).hide(); 47 } else { 48 localStorage.setItem('modal' + id, true); 49 bootstrap.Modal.getOrCreateInstance(modal).show(); 50 } 51 }); 52 53 document.querySelectorAll('.modal-show-always').forEach(el => { 54 const id = el.dataset.id; 55 localStorage.removeItem('modal' + id); 56 }); 57 58 // --- 4. Leaflet Map (wenn vorhanden) --- 59 if (document.getElementById('map')) { 60 showMap(); 61 } 62 63 function showMap() { 64 const config = document.getElementById('mapConfig'); 65 const lon = parseFloat(config.dataset.lon); 66 const lat = parseFloat(config.dataset.lat); 67 const popup = config.dataset.popup; 68 69 const map = L.map('map').setView([lat, lon], 16); 70 map.dragging.enable(); 71 map.scrollWheelZoom.disable(); 72 73 L.tileLayer('//{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { 74 attribution: 'Map data © OpenStreetMap contributors' 75 }).addTo(map); 76 77 L.marker([lat, lon]).addTo(map).bindPopup(popup).openPopup(); 78 } 79 80 // --- 5. Mailchimp-Formularprüfung --- 81 const mailchimpSubmit = document.getElementById('mailchimpSubmit'); 82 if (mailchimpSubmit) { 83 mailchimpSubmit.addEventListener('click', function () { 84 const form = document.getElementById('mailchimp-form'); 85 if (form.checkValidity()) { 86 bootstrap.Modal.getOrCreateInstance(document.getElementById('mailchimpResponse')).show(); 87 form.submit(); 88 } else { 89 const mail = document.getElementById('newsletter-email'); 90 const check = document.getElementById('newsletter-check'); 91 const errorList = []; 92 93 if (mail.validationMessage) { 94 errorList.push('<li>Bitte tragen Sie eine korrekte E-Mail-Adresse ein!</li>'); 95 } 96 if (check.validationMessage) { 97 errorList.push('<li>Bitte bestätigen Sie, dass Sie die Datenschutzbestimmungen akzeptieren!</li>'); 98 } 99 100 document.getElementById('mailchimp-ajax-response').innerHTML = 101 '<div class="alert alert-danger"><ul>' + errorList.join('') + '</ul></div>'; 102 103 bootstrap.Modal.getOrCreateInstance(document.getElementById('mailchimpResponse')).show(); 104 } 105 return false; 106 }); 107 } 108 109 const mailchimpResponse = document.getElementById('mailchimpResponse'); 110 if (mailchimpResponse) { 111 mailchimpResponse.addEventListener('hidden.bs.modal', function () { 112 document.getElementById('mailchimp-ajax-response').innerHTML = ''; 113 }); 114 } 115 116 // --- 6. Dropdown Link-Klickverhalten (nur wenn sichtbar) --- 117 document.querySelectorAll('.navbar ul.navbar-nav > .dropdown > a[href]').forEach(anchor => { 118 anchor.addEventListener('click', function (e) { 119 const dropdown = this.nextElementSibling; 120 if (!dropdown || getComputedStyle(dropdown).display !== 'none') { 121 if (this.href) { 122 location.href = this.href; 123 } 124 } 125 }); 126 }); 127 128 // --- 7. Scroll-Funktion für "200 Jahre"-Seite --- 129 window.addEventListener('scroll', scrollFunction); 130 function scrollFunction() { 131 const mean = document.querySelector('.meanmenu-reveal'); 132 const scroll = document.documentElement.scrollTop; 133 const header = document.querySelector('.header200Jahre'); 134 135 if (!header) return; 136 137 if (scroll <= 50) { 138 const offset = 50 - scroll; 139 const headerOffset = 'header200JahreTop-' + offset; 140 141 header.classList.remove('header200JahreTop0'); 142 if (mean) mean.classList.remove('meanmenu-200j-0'); 143 144 for (let i = 0; i <= 50; i++) { 145 header.classList.remove('header200JahreTop-' + i); 146 } 147 header.classList.add(headerOffset); 148 } else { 149 header.classList.add('header200JahreTop0'); 150 if (mean) mean.classList.add('meanmenu-200j-0'); 151 152 for (let i = 0; i <= 50; i++) { 153 header.classList.remove('header200JahreTop-' + i); 154 } 155 } 156 } 157 158 // --- 8. History-Back-Links mit Fallback --- 159 document.querySelectorAll('.js-history-back').forEach(link => { 160 link.addEventListener('click', event => { 161 if (window.history.length > 1) { 162 event.preventDefault(); 163 window.history.back(); 164 } 165 }); 166 }); 167 168 // --- 9. Optional: goBack() Funktion --- 169 window.goBack = function () { 170 window.history.back(); 171 }; 172 173 // --- 10. Nur ein nativer Audio-/Video-Player gleichzeitig --- 174 document.querySelectorAll('audio, video').forEach(function (mediaElement) { 175 mediaElement.addEventListener('play', function () { 176 document.querySelectorAll('audio, video').forEach(function (otherMediaElement) { 177 if (otherMediaElement !== mediaElement && !otherMediaElement.paused) { 178 otherMediaElement.pause(); 179 } 180 }); 181 }); 182 }); 183 184 const myModalEl = document.getElementById('KoeKaNav'); 185 if (myModalEl) { 186 const myModalInstance = bootstrap.Modal.getOrCreateInstance(myModalEl); 187 const updateJubiModalOffset = function () { 188 if (!myModalEl.classList.contains('jubi-modal')) { 189 return; 190 } 191 192 const header = document.querySelector('.header200Jahre'); 193 if (!header) { 194 myModalEl.style.setProperty('--jubi-modal-offset', '0px'); 195 return; 196 } 197 198 const offset = Math.max(0, Math.round(header.getBoundingClientRect().top)); 199 myModalEl.style.setProperty('--jubi-modal-offset', `${offset}px`); 200 }; 201 202 myModalEl.addEventListener('show.bs.modal', function () { 203 updateJubiModalOffset(); 204 document.querySelectorAll('.custom-nav-toggler').forEach(el => el.classList.add('menu-open')); 205 }); 206 myModalEl.addEventListener('hide.bs.modal', function () { 207 document.querySelectorAll('.custom-nav-toggler').forEach(el => el.classList.remove('menu-open')); 208 }); 209 210 if (myModalEl.classList.contains('jubi-modal-close-on-link')) { 211 myModalEl.querySelectorAll('.modal-body a[href]').forEach(link => { 212 link.addEventListener('click', function () { 213 myModalInstance.hide(); 214 }); 215 }); 216 } 217 218 window.addEventListener('resize', updateJubiModalOffset); 219 window.addEventListener('scroll', function () { 220 if (myModalEl.classList.contains('show')) { 221 updateJubiModalOffset(); 222 } 223 }, { passive: true }); 224 } 225 226 const list = document.querySelectorAll('.koeka-toggler'); 227 228 function accordion(e){ 229 e.stopPropagation(); 230 if(this.parentElement.parentElement.classList.contains('active')){ 231 this.parentElement.parentElement.classList.remove('active'); 232 } 233 else if(this.parentElement.parentElement.parentElement.parentElement.classList.contains('active')){ 234 this.parentElement.parentElement.classList.add('active'); 235 } 236 else{ 237 for(i=0; i < list.length; i++){ 238 list[i].parentElement.parentElement.classList.remove('active'); 239 } 240 this.parentElement.parentElement.classList.add('active'); 241 } 242 } 243 for(i = 0; i < list.length; i++ ){ 244 list[i].addEventListener('click', accordion); 245 } 246 247 248 /* SLIDER */ 249 // Prüft, ob das Element mit id="hero-slider" existiert 250 var heroSlider = document.getElementById('hero-slider'); 251 if (heroSlider) { 252 var listGroup = heroSlider.querySelector('.list-group'); 253 254 // Nur initialisieren, wenn auch die list-group vorhanden ist 255 if (listGroup) { 256 $(heroSlider).on('slide.bs.carousel', function(e) { 257 var nextIndex = $(e.relatedTarget).index(); 258 listGroup.querySelectorAll('li').forEach(function(li, idx) { 259 li.classList.toggle('active', idx === nextIndex); 260 }); 261 }); 262 263 listGroup.querySelectorAll('li').forEach(function(li, idx) { 264 li.addEventListener('click', function() { 265 $('#hero-slider').carousel(idx); 266 listGroup.querySelectorAll('li').forEach(function(el) { 267 el.classList.remove('active'); 268 }); 269 li.classList.add('active'); 270 }); 271 }); 272 } 273 } 274 275 276}); 277 278/*! jQuery UI - v1.12.1 - 2021-03-08 279* http://jqueryui.com 280* Includes: keycode.js, widgets/datepicker.js 281* Copyright jQuery Foundation and other contributors; Licensed MIT */ 282 283(function( factory ) { 284 if ( typeof define === "function" && define.amd ) { 285 286 // AMD. Register as an anonymous module. 287 define([ "jquery" ], factory ); 288 } else { 289 290 // Browser globals 291 factory( jQuery ); 292 } 293}(function( $ ) { 294 295 $.ui = $.ui || {}; 296 297 var version = $.ui.version = "1.12.1"; 298 299 300 /*!
vendor: 5,307 bytes, lines 301-426
301 * jQuery UI Keycode 1.12.1 302 * http://jqueryui.com 303 * 304 * Copyright jQuery Foundation and other contributors 305 * Released under the MIT license. 306 * http://jquery.org/license 307 */ 308 309//>>label: Keycode 310//>>group: Core 311//>>description: Provide keycodes as keynames 312//>>docs: http://api.jqueryui.com/jQuery.ui.keyCode/ 313 314 315 var keycode = $.ui.keyCode = { 316 BACKSPACE: 8, 317 COMMA: 188, 318 DELETE: 46, 319 DOWN: 40, 320 END: 35, 321 ENTER: 13, 322 ESCAPE: 27, 323 HOME: 36, 324 LEFT: 37, 325 PAGE_DOWN: 34, 326 PAGE_UP: 33, 327 PERIOD: 190, 328 RIGHT: 39, 329 SPACE: 32, 330 TAB: 9, 331 UP: 38 332 }; 333 334 335// jscs:disable maximumLineLength 336 /* jscs:disable requireCamelCaseOrUpperCaseIdentifiers */ 337 /*! 338 * jQuery UI Datepicker 1.12.1 339 * http://jqueryui.com 340 * 341 * Copyright jQuery Foundation and other contributors 342 * Released under the MIT license. 343 * http://jquery.org/license 344 */ 345 346//>>label: Datepicker 347//>>group: Widgets 348//>>description: Displays a calendar from an input or inline for selecting dates. 349//>>docs: http://api.jqueryui.com/datepicker/ 350//>>demos: http://jqueryui.com/datepicker/ 351//>>css.structure: ../../themes/base/core.css 352//>>css.structure: ../../themes/base/datepicker.css 353//>>css.theme: ../../themes/base/theme.css 354 355 356 357 $.extend( $.ui, { datepicker: { version: "1.12.1" } } ); 358 359 var datepicker_instActive; 360 361 function datepicker_getZindex( elem ) { 362 var position, value; 363 while ( elem.length && elem[ 0 ] !== document ) { 364 365 // Ignore z-index if position is set to a value where z-index is ignored by the browser 366 // This makes behavior of this function consistent across browsers 367 // WebKit always returns auto if the element is positioned 368 position = elem.css( "position" ); 369 if ( position === "absolute" || position === "relative" || position === "fixed" ) { 370 371 // IE returns 0 when zIndex is not specified 372 // other browsers return a string 373 // we ignore the case of nested elements with an explicit value of 0 374 // <div style="z-index: -10;"><div style="z-index: 0;"></div></div> 375 value = parseInt( elem.css( "zIndex" ), 10 ); 376 if ( !isNaN( value ) && value !== 0 ) { 377 return value; 378 } 379 } 380 elem = elem.parent(); 381 } 382 383 return 0; 384 } 385 /* Date picker manager. 386 Use the singleton instance of this class, $.datepicker, to interact with the date picker. 387 Settings for (groups of) date pickers are maintained in an instance object, 388 allowing multiple different settings on the same page. */ 389 390 function Datepicker() { 391 this._curInst = null; // The current instance in use 392 this._keyEvent = false; // If the last event was a key event 393 this._disabledInputs = []; // List of date picker inputs that have been disabled 394 this._datepickerShowing = false; // True if the popup picker is showing , false if not 395 this._inDialog = false; // True if showing within a "dialog", false if not 396 this._mainDivId = "ui-datepicker-div"; // The ID of the main datepicker division 397 this._inlineClass = "ui-datepicker-inline"; // The name of the inline marker class 398 this._appendClass = "ui-datepicker-append"; // The name of the append marker class 399 this._triggerClass = "ui-datepicker-trigger"; // The name of the trigger marker class 400 this._dialogClass = "ui-datepicker-dialog"; // The name of the dialog marker class 401 this._disableClass = "ui-datepicker-disabled"; // The name of the disabled covering marker class 402 this._unselectableClass = "ui-datepicker-unselectable"; // The name of the unselectable cell marker class 403 this._currentClass = "ui-datepicker-current-day"; // The name of the current day marker class 404 this._dayOverClass = "ui-datepicker-days-cell-over"; // The name of the day hover marker class 405 this.regional = []; // Available regional settings, indexed by language code 406 this.regional[ "" ] = { // Default regional settings 407 closeText: "Done", // Display text for close link 408 prevText: "Prev", // Display text for previous month link 409 nextText: "Next", // Display text for next month link 410 currentText: "Today", // Display text for current month link 411 monthNames: [ "January","February","March","April","May","June", 412 "July","August","September","October","November","December" ], // Names of months for drop-down and formatting 413 monthNamesShort: [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ], // For formatting 414 dayNames: [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ], // For formatting 415 dayNamesShort: [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ], // For formatting 416 dayNamesMin: [ "Su","Mo","Tu","We","Th","Fr","Sa" ], // Column headings for days starting at Sunday 417 weekHeader: "Wk", // Column header for week of the year 418 dateFormat: "mm/dd/yy", // See format options on parseDate 419 firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ... 420 isRTL: false, // True if right-to-left language, false if left-to-right 421 showMonthAfterYear: false, // True if the year select precedes month, false for month then year 422 yearSuffix: "" // Additional text to append to the year in the month headers 423 }; 424 this._defaults = { // Global defaults for all the date picker instances 425 showOn: "focus", // "focus" for popup on focus, 426 // "button" for trigger button, or "both" for either
vendor: 5,966 bytes, lines 427-535
427 showAnim: "fadeIn", // Name of jQuery animation for popup 428 showOptions: {}, // Options for enhanced animations 429 defaultDate: null, // Used when field is blank: actual date, 430 // +/-number for offset from today, null for today 431 appendText: "", // Display text following the input box, e.g. showing the format 432 buttonText: "...", // Text for trigger button 433 buttonImage: "", // URL for trigger button image 434 buttonImageOnly: false, // True if the image appears alone, false if it appears on a button 435 hideIfNoPrevNext: false, // True to hide next/previous month links 436 // if not applicable, false to just disable them 437 navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links 438 gotoCurrent: false, // True if today link goes back to current selection instead 439 changeMonth: false, // True if month can be selected directly, false if only prev/next 440 changeYear: false, // True if year can be selected directly, false if only prev/next 441 yearRange: "c-10:c+10", // Range of years to display in drop-down, 442 // either relative to today's year (-nn:+nn), relative to currently displayed year 443 // (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n) 444 showOtherMonths: false, // True to show dates in other months, false to leave blank 445 selectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable 446 showWeek: false, // True to show week of the year, false to not show it 447 calculateWeek: this.iso8601Week, // How to calculate the week of the year, 448 // takes a Date and returns the number of the week for it 449 shortYearCutoff: "+10", // Short year values < this are in the current century, 450 // > this are in the previous century, 451 // string value starting with "+" for current year + value 452 minDate: null, // The earliest selectable date, or null for no limit 453 maxDate: null, // The latest selectable date, or null for no limit 454 duration: "fast", // Duration of display/closure 455 beforeShowDay: null, // Function that takes a date and returns an array with 456 // [0] = true if selectable, false if not, [1] = custom CSS class name(s) or "", 457 // [2] = cell title (optional), e.g. $.datepicker.noWeekends 458 beforeShow: null, // Function that takes an input field and 459 // returns a set of custom settings for the date picker 460 onSelect: null, // Define a callback function when a date is selected 461 onChangeMonthYear: null, // Define a callback function when the month or year is changed 462 onClose: null, // Define a callback function when the datepicker is closed 463 numberOfMonths: 1, // Number of months to show at a time 464 showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0) 465 stepMonths: 1, // Number of months to step back/forward 466 stepBigMonths: 12, // Number of months to step back/forward for the big links 467 altField: "", // Selector for an alternate field to store selected dates into 468 altFormat: "", // The date format to use for the alternate field 469 constrainInput: true, // The input is constrained by the current date format 470 showButtonPanel: false, // True to show button panel, false to not show it 471 autoSize: false, // True to size the input for the date format, false to leave as is 472 disabled: false // The initial disabled state 473 }; 474 $.extend( this._defaults, this.regional[ "" ] ); 475 this.regional.en = $.extend( true, {}, this.regional[ "" ] ); 476 this.regional[ "en-US" ] = $.extend( true, {}, this.regional.en ); 477 this.dpDiv = datepicker_bindHover( $( "<div id='" + this._mainDivId + "' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>" ) ); 478 } 479 480 $.extend( Datepicker.prototype, { 481 /* Class name added to elements to indicate already configured with a date picker. */ 482 markerClassName: "hasDatepicker", 483 484 //Keep track of the maximum number of rows displayed (see #7043) 485 maxRows: 4, 486 487 // TODO rename to "widget" when switching to widget factory 488 _widgetDatepicker: function() { 489 return this.dpDiv; 490 }, 491 492 /* Override the default settings for all instances of the date picker. 493 * @param settings object - the new settings to use as defaults (anonymous object) 494 * @return the manager object 495 */ 496 setDefaults: function( settings ) { 497 datepicker_extendRemove( this._defaults, settings || {} ); 498 return this; 499 }, 500 501 /* Attach the date picker to a jQuery selection. 502 * @param target element - the target input field or division or span 503 * @param settings object - the new settings to use for this date picker instance (anonymous) 504 */ 505 _attachDatepicker: function( target, settings ) { 506 var nodeName, inline, inst; 507 nodeName = target.nodeName.toLowerCase(); 508 inline = ( nodeName === "div" || nodeName === "span" ); 509 if ( !target.id ) { 510 this.uuid += 1; 511 target.id = "dp" + this.uuid; 512 } 513 inst = this._newInst( $( target ), inline ); 514 inst.settings = $.extend( {}, settings || {} ); 515 if ( nodeName === "input" ) { 516 this._connectDatepicker( target, inst ); 517 } else if ( inline ) { 518 this._inlineDatepicker( target, inst ); 519 } 520 }, 521 522 /* Create a new instance object. */ 523 _newInst: function( target, inline ) { 524 var id = target[ 0 ].id.replace( /([^A-Za-z0-9_\-])/g, "\\\\$1" ); // escape jQuery meta chars 525 return { id: id, input: target, // associated target 526 selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection 527 drawMonth: 0, drawYear: 0, // month being drawn 528 inline: inline, // is datepicker inline or not 529 dpDiv: ( !inline ? this.dpDiv : // presentation div 530 datepicker_bindHover( $( "<div class='" + this._inlineClass + " ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>" ) ) ) }; 531 }, 532 533 /* Attach the date picker to an input field. */ 534 _connectDatepicker: function( target, inst ) { 535 var input = $( target );
vendor: 4,287 bytes, lines 536-652
536 inst.append = $( [] ); 537 inst.trigger = $( [] ); 538 if ( input.hasClass( this.markerClassName ) ) { 539 return; 540 } 541 this._attachments( input, inst ); 542 input.addClass( this.markerClassName ).on( "keydown", this._doKeyDown ). 543 on( "keypress", this._doKeyPress ).on( "keyup", this._doKeyUp ); 544 this._autoSize( inst ); 545 $.data( target, "datepicker", inst ); 546 547 //If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665) 548 if ( inst.settings.disabled ) { 549 this._disableDatepicker( target ); 550 } 551 }, 552 553 /* Make attachments based on settings. */ 554 _attachments: function( input, inst ) { 555 var showOn, buttonText, buttonImage, 556 appendText = this._get( inst, "appendText" ), 557 isRTL = this._get( inst, "isRTL" ); 558 559 if ( inst.append ) { 560 inst.append.remove(); 561 } 562 if ( appendText ) { 563 inst.append = $( "<span class='" + this._appendClass + "'>" + appendText + "</span>" ); 564 input[ isRTL ? "before" : "after" ]( inst.append ); 565 } 566 567 input.off( "focus", this._showDatepicker ); 568 569 if ( inst.trigger ) { 570 inst.trigger.remove(); 571 } 572 573 showOn = this._get( inst, "showOn" ); 574 if ( showOn === "focus" || showOn === "both" ) { // pop-up date picker when in the marked field 575 input.on( "focus", this._showDatepicker ); 576 } 577 if ( showOn === "button" || showOn === "both" ) { // pop-up date picker when button clicked 578 buttonText = this._get( inst, "buttonText" ); 579 buttonImage = this._get( inst, "buttonImage" ); 580 inst.trigger = $( this._get( inst, "buttonImageOnly" ) ? 581 $( "<img/>" ).addClass( this._triggerClass ). 582 attr( { src: buttonImage, alt: buttonText, title: buttonText } ) : 583 $( "<button type='button'></button>" ).addClass( this._triggerClass ). 584 html( !buttonImage ? buttonText : $( "<img/>" ).attr( 585 { src:buttonImage, alt:buttonText, title:buttonText } ) ) ); 586 input[ isRTL ? "before" : "after" ]( inst.trigger ); 587 inst.trigger.on( "click", function() { 588 if ( $.datepicker._datepickerShowing && $.datepicker._lastInput === input[ 0 ] ) { 589 $.datepicker._hideDatepicker(); 590 } else if ( $.datepicker._datepickerShowing && $.datepicker._lastInput !== input[ 0 ] ) { 591 $.datepicker._hideDatepicker(); 592 $.datepicker._showDatepicker( input[ 0 ] ); 593 } else { 594 $.datepicker._showDatepicker( input[ 0 ] ); 595 } 596 return false; 597 } ); 598 } 599 }, 600 601 /* Apply the maximum length for the date format. */ 602 _autoSize: function( inst ) { 603 if ( this._get( inst, "autoSize" ) && !inst.inline ) { 604 var findMax, max, maxI, i, 605 date = new Date( 2009, 12 - 1, 20 ), // Ensure double digits 606 dateFormat = this._get( inst, "dateFormat" ); 607 608 if ( dateFormat.match( /[DM]/ ) ) { 609 findMax = function( names ) { 610 max = 0; 611 maxI = 0; 612 for ( i = 0; i < names.length; i++ ) { 613 if ( names[ i ].length > max ) { 614 max = names[ i ].length; 615 maxI = i; 616 } 617 } 618 return maxI; 619 }; 620 date.setMonth( findMax( this._get( inst, ( dateFormat.match( /MM/ ) ? 621 "monthNames" : "monthNamesShort" ) ) ) ); 622 date.setDate( findMax( this._get( inst, ( dateFormat.match( /DD/ ) ? 623 "dayNames" : "dayNamesShort" ) ) ) + 20 - date.getDay() ); 624 } 625 inst.input.attr( "size", this._formatDate( inst, date ).length ); 626 } 627 }, 628 629 /* Attach an inline date picker to a div. */ 630 _inlineDatepicker: function( target, inst ) { 631 var divSpan = $( target ); 632 if ( divSpan.hasClass( this.markerClassName ) ) { 633 return; 634 } 635 divSpan.addClass( this.markerClassName ).append( inst.dpDiv ); 636 $.data( target, "datepicker", inst ); 637 this._setDate( inst, this._getDefaultDate( inst ), true ); 638 this._updateDatepicker( inst ); 639 this._updateAlternate( inst ); 640 641 //If disabled option is true, disable the datepicker before showing it (see ticket #5665) 642 if ( inst.settings.disabled ) { 643 this._disableDatepicker( target ); 644 } 645 646 // Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements 647 // http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height 648 inst.dpDiv.css( "display", "block" ); 649 }, 650 651 /* Pop-up the date picker in a "dialog" box. 652 * @param input element - ignored
653 * @param date string or Date - the initial date to display 654 * @param onSelect function - the function to call when a date is selected 655 * @param settings object - update the dialog date picker instance's settings (anonymous object) 656 * @param pos int[2] - coordinates for the dialog's position within the screen or 657 * event - with x/y coordinates or 658 * leave empty for default (screen centre) 659 * @return the manager object 660 */ 661 _dialogDatepicker: function( input, date, onSelect, settings, pos ) { 662 var id, browserWidth, browserHeight, scrollX, scrollY, 663 inst = this._dialogInst; // internal instance 664 665 if ( !inst ) { 666 this.uuid += 1; 667 id = "dp" + this.uuid; 668 this._dialogInput = $( "<input type='text' id='" + id + 669 "' style='position: absolute; top: -100px; width: 0px;'/>" ); 670 this._dialogInput.on( "keydown", this._doKeyDown ); 671 $( "body" ).append( this._dialogInput ); 672 inst = this._dialogInst = this._newInst( this._dialogInput, false ); 673 inst.settings = {}; 674 $.data( this._dialogInput[ 0 ], "datepicker", inst ); 675 } 676 datepicker_extendRemove( inst.settings, settings || {} ); 677 date = ( date && date.constructor === Date ? this._formatDate( inst, date ) : date ); 678 this._dialogInput.val( date ); 679 680 this._pos = ( pos ? ( pos.length ? pos : [ pos.pageX, pos.pageY ] ) : null ); 681 if ( !this._pos ) { 682 browserWidth = document.documentElement.clientWidth; 683 browserHeight = document.documentElement.clientHeight; 684 scrollX = document.documentElement.scrollLeft || document.body.scrollLeft; 685 scrollY = document.documentElement.scrollTop || document.body.scrollTop; 686 this._pos = // should use actual width/height below 687 [ ( browserWidth / 2 ) - 100 + scrollX, ( browserHeight / 2 ) - 150 + scrollY ]; 688 } 689 690 // Move input on screen for focus, but hidden behind dialog 691 this._dialogInput.css( "left", ( this._pos[ 0 ] + 20 ) + "px" ).css( "top", this._pos[ 1 ] + "px" ); 692 inst.settings.onSelect = onSelect; 693 this._inDialog = true; 694 this.dpDiv.addClass( this._dialogClass ); 695 this._showDatepicker( this._dialogInput[ 0 ] ); 696 if ( $.blockUI ) { 697 $.blockUI( this.dpDiv ); 698 } 699 $.data( this._dialogInput[ 0 ], "datepicker", inst ); 700 return this; 701 }, 702 703 /* Detach a datepicker from its control. 704 * @param target element - the target input field or division or span 705 */ 706 _destroyDatepicker: function( target ) { 707 var nodeName, 708 $target = $( target ), 709 inst = $.data( target, "datepicker" ); 710 711 if ( !$target.hasClass( this.markerClassName ) ) { 712 return; 713 } 714 715 nodeName = target.nodeName.toLowerCase(); 716 $.removeData( target, "datepicker" ); 717 if ( nodeName === "input" ) {
vendor: 7,485 bytes, lines 718-930
718 inst.append.remove(); 719 inst.trigger.remove(); 720 $target.removeClass( this.markerClassName ). 721 off( "focus", this._showDatepicker ). 722 off( "keydown", this._doKeyDown ). 723 off( "keypress", this._doKeyPress ). 724 off( "keyup", this._doKeyUp ); 725 } else if ( nodeName === "div" || nodeName === "span" ) { 726 $target.removeClass( this.markerClassName ).empty(); 727 } 728 729 if ( datepicker_instActive === inst ) { 730 datepicker_instActive = null; 731 } 732 }, 733 734 /* Enable the date picker to a jQuery selection. 735 * @param target element - the target input field or division or span 736 */ 737 _enableDatepicker: function( target ) { 738 var nodeName, inline, 739 $target = $( target ), 740 inst = $.data( target, "datepicker" ); 741 742 if ( !$target.hasClass( this.markerClassName ) ) { 743 return; 744 } 745 746 nodeName = target.nodeName.toLowerCase(); 747 if ( nodeName === "input" ) { 748 target.disabled = false; 749 inst.trigger.filter( "button" ). 750 each( function() { this.disabled = false; } ).end(). 751 filter( "img" ).css( { opacity: "1.0", cursor: "" } ); 752 } else if ( nodeName === "div" || nodeName === "span" ) { 753 inline = $target.children( "." + this._inlineClass ); 754 inline.children().removeClass( "ui-state-disabled" ); 755 inline.find( "select.ui-datepicker-month, select.ui-datepicker-year" ). 756 prop( "disabled", false ); 757 } 758 this._disabledInputs = $.map( this._disabledInputs, 759 function( value ) { return ( value === target ? null : value ); } ); // delete entry 760 }, 761 762 /* Disable the date picker to a jQuery selection. 763 * @param target element - the target input field or division or span 764 */ 765 _disableDatepicker: function( target ) { 766 var nodeName, inline, 767 $target = $( target ), 768 inst = $.data( target, "datepicker" ); 769 770 if ( !$target.hasClass( this.markerClassName ) ) { 771 return; 772 } 773 774 nodeName = target.nodeName.toLowerCase(); 775 if ( nodeName === "input" ) { 776 target.disabled = true; 777 inst.trigger.filter( "button" ). 778 each( function() { this.disabled = true; } ).end(). 779 filter( "img" ).css( { opacity: "0.5", cursor: "default" } ); 780 } else if ( nodeName === "div" || nodeName === "span" ) { 781 inline = $target.children( "." + this._inlineClass ); 782 inline.children().addClass( "ui-state-disabled" ); 783 inline.find( "select.ui-datepicker-month, select.ui-datepicker-year" ). 784 prop( "disabled", true ); 785 } 786 this._disabledInputs = $.map( this._disabledInputs, 787 function( value ) { return ( value === target ? null : value ); } ); // delete entry 788 this._disabledInputs[ this._disabledInputs.length ] = target; 789 }, 790 791 /* Is the first field in a jQuery collection disabled as a datepicker? 792 * @param target element - the target input field or division or span 793 * @return boolean - true if disabled, false if enabled 794 */ 795 _isDisabledDatepicker: function( target ) { 796 if ( !target ) { 797 return false; 798 } 799 for ( var i = 0; i < this._disabledInputs.length; i++ ) { 800 if ( this._disabledInputs[ i ] === target ) { 801 return true; 802 } 803 } 804 return false; 805 }, 806 807 /* Retrieve the instance data for the target control. 808 * @param target element - the target input field or division or span 809 * @return object - the associated instance data 810 * @throws error if a jQuery problem getting data 811 */ 812 _getInst: function( target ) { 813 try { 814 return $.data( target, "datepicker" ); 815 } 816 catch ( err ) { 817 throw "Missing instance data for this datepicker"; 818 } 819 }, 820 821 /* Update or retrieve the settings for a date picker attached to an input field or division. 822 * @param target element - the target input field or division or span 823 * @param name object - the new settings to update or 824 * string - the name of the setting to change or retrieve, 825 * when retrieving also "all" for all instance settings or 826 * "defaults" for all global defaults 827 * @param value any - the new value for the setting 828 * (omit if above is an object or to retrieve a value) 829 */ 830 _optionDatepicker: function( target, name, value ) { 831 var settings, date, minDate, maxDate, 832 inst = this._getInst( target ); 833 834 if ( arguments.length === 2 && typeof name === "string" ) { 835 return ( name === "defaults" ? $.extend( {}, $.datepicker._defaults ) : 836 ( inst ? ( name === "all" ? $.extend( {}, inst.settings ) : 837 this._get( inst, name ) ) : null ) ); 838 } 839 840 settings = name || {}; 841 if ( typeof name === "string" ) { 842 settings = {}; 843 settings[ name ] = value; 844 } 845 846 if ( inst ) { 847 if ( this._curInst === inst ) { 848 this._hideDatepicker(); 849 } 850 851 date = this._getDateDatepicker( target, true ); 852 minDate = this._getMinMaxDate( inst, "min" ); 853 maxDate = this._getMinMaxDate( inst, "max" ); 854 datepicker_extendRemove( inst.settings, settings ); 855 856 // reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided 857 if ( minDate !== null && settings.dateFormat !== undefined && settings.minDate === undefined ) { 858 inst.settings.minDate = this._formatDate( inst, minDate ); 859 } 860 if ( maxDate !== null && settings.dateFormat !== undefined && settings.maxDate === undefined ) { 861 inst.settings.maxDate = this._formatDate( inst, maxDate ); 862 } 863 if ( "disabled" in settings ) { 864 if ( settings.disabled ) { 865 this._disableDatepicker( target ); 866 } else { 867 this._enableDatepicker( target ); 868 } 869 } 870 this._attachments( $( target ), inst ); 871 this._autoSize( inst ); 872 this._setDate( inst, date ); 873 this._updateAlternate( inst ); 874 this._updateDatepicker( inst ); 875 } 876 }, 877 878 // Change method deprecated 879 _changeDatepicker: function( target, name, value ) { 880 this._optionDatepicker( target, name, value ); 881 }, 882 883 /* Redraw the date picker attached to an input field or division. 884 * @param target element - the target input field or division or span 885 */ 886 _refreshDatepicker: function( target ) { 887 var inst = this._getInst( target ); 888 if ( inst ) { 889 this._updateDatepicker( inst ); 890 } 891 }, 892 893 /* Set the dates for a jQuery selection. 894 * @param target element - the target input field or division or span 895 * @param date Date - the new date 896 */ 897 _setDateDatepicker: function( target, date ) { 898 var inst = this._getInst( target ); 899 if ( inst ) { 900 this._setDate( inst, date ); 901 this._updateDatepicker( inst ); 902 this._updateAlternate( inst ); 903 } 904 }, 905 906 /* Get the date(s) for the first entry in a jQuery selection. 907 * @param target element - the target input field or division or span 908 * @param noDefault boolean - true if no default date is to be used 909 * @return Date - the current date 910 */ 911 _getDateDatepicker: function( target, noDefault ) { 912 var inst = this._getInst( target ); 913 if ( inst && !inst.inline ) { 914 this._setDateFromField( inst, noDefault ); 915 } 916 return ( inst ? this._getDate( inst ) : null ); 917 }, 918 919 /* Handle keystrokes. */ 920 _doKeyDown: function( event ) { 921 var onSelect, dateStr, sel, 922 inst = $.datepicker._getInst( event.target ), 923 handled = true, 924 isRTL = inst.dpDiv.is( ".ui-datepicker-rtl" ); 925 926 inst._keyEvent = true; 927 if ( $.datepicker._datepickerShowing ) { 928 switch ( event.keyCode ) { 929 case 9: $.datepicker._hideDatepicker(); 930 handled = false;
vendor: 4,683 bytes, lines 931-1058
931 break; // hide on tab out 932 case 13: sel = $( "td." + $.datepicker._dayOverClass + ":not(." + 933 $.datepicker._currentClass + ")", inst.dpDiv ); 934 if ( sel[ 0 ] ) { 935 $.datepicker._selectDay( event.target, inst.selectedMonth, inst.selectedYear, sel[ 0 ] ); 936 } 937 938 onSelect = $.datepicker._get( inst, "onSelect" ); 939 if ( onSelect ) { 940 dateStr = $.datepicker._formatDate( inst ); 941 942 // Trigger custom callback 943 onSelect.apply( ( inst.input ? inst.input[ 0 ] : null ), [ dateStr, inst ] ); 944 } else { 945 $.datepicker._hideDatepicker(); 946 } 947 948 return false; // don't submit the form 949 case 27: $.datepicker._hideDatepicker(); 950 break; // hide on escape 951 case 33: $.datepicker._adjustDate( event.target, ( event.ctrlKey ? 952 -$.datepicker._get( inst, "stepBigMonths" ) : 953 -$.datepicker._get( inst, "stepMonths" ) ), "M" ); 954 break; // previous month/year on page up/+ ctrl 955 case 34: $.datepicker._adjustDate( event.target, ( event.ctrlKey ? 956 +$.datepicker._get( inst, "stepBigMonths" ) : 957 +$.datepicker._get( inst, "stepMonths" ) ), "M" ); 958 break; // next month/year on page down/+ ctrl 959 case 35: if ( event.ctrlKey || event.metaKey ) { 960 $.datepicker._clearDate( event.target ); 961 } 962 handled = event.ctrlKey || event.metaKey; 963 break; // clear on ctrl or command +end 964 case 36: if ( event.ctrlKey || event.metaKey ) { 965 $.datepicker._gotoToday( event.target ); 966 } 967 handled = event.ctrlKey || event.metaKey; 968 break; // current on ctrl or command +home 969 case 37: if ( event.ctrlKey || event.metaKey ) { 970 $.datepicker._adjustDate( event.target, ( isRTL ? +1 : -1 ), "D" ); 971 } 972 handled = event.ctrlKey || event.metaKey; 973 974 // -1 day on ctrl or command +left 975 if ( event.originalEvent.altKey ) { 976 $.datepicker._adjustDate( event.target, ( event.ctrlKey ? 977 -$.datepicker._get( inst, "stepBigMonths" ) : 978 -$.datepicker._get( inst, "stepMonths" ) ), "M" ); 979 } 980 981 // next month/year on alt +left on Mac 982 break; 983 case 38: if ( event.ctrlKey || event.metaKey ) { 984 $.datepicker._adjustDate( event.target, -7, "D" ); 985 } 986 handled = event.ctrlKey || event.metaKey; 987 break; // -1 week on ctrl or command +up 988 case 39: if ( event.ctrlKey || event.metaKey ) { 989 $.datepicker._adjustDate( event.target, ( isRTL ? -1 : +1 ), "D" ); 990 } 991 handled = event.ctrlKey || event.metaKey; 992 993 // +1 day on ctrl or command +right 994 if ( event.originalEvent.altKey ) { 995 $.datepicker._adjustDate( event.target, ( event.ctrlKey ? 996 +$.datepicker._get( inst, "stepBigMonths" ) : 997 +$.datepicker._get( inst, "stepMonths" ) ), "M" ); 998 } 999 1000 // next month/year on alt +right 1001 break; 1002 case 40: if ( event.ctrlKey || event.metaKey ) { 1003 $.datepicker._adjustDate( event.target, +7, "D" ); 1004 } 1005 handled = event.ctrlKey || event.metaKey; 1006 break; // +1 week on ctrl or command +down 1007 default: handled = false; 1008 } 1009 } else if ( event.keyCode === 36 && event.ctrlKey ) { // display the date picker on ctrl+home 1010 $.datepicker._showDatepicker( this ); 1011 } else { 1012 handled = false; 1013 } 1014 1015 if ( handled ) { 1016 event.preventDefault(); 1017 event.stopPropagation(); 1018 } 1019 }, 1020 1021 /* Filter entered characters - based on date format. */ 1022 _doKeyPress: function( event ) { 1023 var chars, chr, 1024 inst = $.datepicker._getInst( event.target ); 1025 1026 if ( $.datepicker._get( inst, "constrainInput" ) ) { 1027 chars = $.datepicker._possibleChars( $.datepicker._get( inst, "dateFormat" ) ); 1028 chr = String.fromCharCode( event.charCode == null ? event.keyCode : event.charCode ); 1029 return event.ctrlKey || event.metaKey || ( chr < " " || !chars || chars.indexOf( chr ) > -1 ); 1030 } 1031 }, 1032 1033 /* Synchronise manual entry and field/alternate field. */ 1034 _doKeyUp: function( event ) { 1035 var date, 1036 inst = $.datepicker._getInst( event.target ); 1037 1038 if ( inst.input.val() !== inst.lastVal ) { 1039 try { 1040 date = $.datepicker.parseDate( $.datepicker._get( inst, "dateFormat" ), 1041 ( inst.input ? inst.input.val() : null ), 1042 $.datepicker._getFormatConfig( inst ) ); 1043 1044 if ( date ) { // only if valid 1045 $.datepicker._setDateFromField( inst ); 1046 $.datepicker._updateAlternate( inst ); 1047 $.datepicker._updateDatepicker( inst ); 1048 } 1049 } 1050 catch ( err ) { 1051 } 1052 } 1053 return true; 1054 }, 1055 1056 /* Pop-up the date picker for a given input field. 1057 * If false returned from beforeShow event handler do not show. 1058 * @param input element - the input field attached to the date picker or
vendor: 4,370 bytes, lines 1059-1180
1059 * event - if triggered by focus 1060 */ 1061 _showDatepicker: function( input ) { 1062 input = input.target || input; 1063 if ( input.nodeName.toLowerCase() !== "input" ) { // find from button/image trigger 1064 input = $( "input", input.parentNode )[ 0 ]; 1065 } 1066 1067 if ( $.datepicker._isDisabledDatepicker( input ) || $.datepicker._lastInput === input ) { // already here 1068 return; 1069 } 1070 1071 var inst, beforeShow, beforeShowSettings, isFixed, 1072 offset, showAnim, duration; 1073 1074 inst = $.datepicker._getInst( input ); 1075 if ( $.datepicker._curInst && $.datepicker._curInst !== inst ) { 1076 $.datepicker._curInst.dpDiv.stop( true, true ); 1077 if ( inst && $.datepicker._datepickerShowing ) { 1078 $.datepicker._hideDatepicker( $.datepicker._curInst.input[ 0 ] ); 1079 } 1080 } 1081 1082 beforeShow = $.datepicker._get( inst, "beforeShow" ); 1083 beforeShowSettings = beforeShow ? beforeShow.apply( input, [ input, inst ] ) : {}; 1084 if ( beforeShowSettings === false ) { 1085 return; 1086 } 1087 datepicker_extendRemove( inst.settings, beforeShowSettings ); 1088 1089 inst.lastVal = null; 1090 $.datepicker._lastInput = input; 1091 $.datepicker._setDateFromField( inst ); 1092 1093 if ( $.datepicker._inDialog ) { // hide cursor 1094 input.value = ""; 1095 } 1096 if ( !$.datepicker._pos ) { // position below input 1097 $.datepicker._pos = $.datepicker._findPos( input ); 1098 $.datepicker._pos[ 1 ] += input.offsetHeight; // add the height 1099 } 1100 1101 isFixed = false; 1102 $( input ).parents().each( function() { 1103 isFixed |= $( this ).css( "position" ) === "fixed"; 1104 return !isFixed; 1105 } ); 1106 1107 offset = { left: $.datepicker._pos[ 0 ], top: $.datepicker._pos[ 1 ] }; 1108 $.datepicker._pos = null; 1109 1110 //to avoid flashes on Firefox 1111 inst.dpDiv.empty(); 1112 1113 // determine sizing offscreen 1114 inst.dpDiv.css( { position: "absolute", display: "block", top: "-1000px" } ); 1115 $.datepicker._updateDatepicker( inst ); 1116 1117 // fix width for dynamic number of date pickers 1118 // and adjust position before showing 1119 offset = $.datepicker._checkOffset( inst, offset, isFixed ); 1120 inst.dpDiv.css( { position: ( $.datepicker._inDialog && $.blockUI ? 1121 "static" : ( isFixed ? "fixed" : "absolute" ) ), display: "none", 1122 left: offset.left + "px", top: offset.top + "px" } ); 1123 1124 if ( !inst.inline ) { 1125 showAnim = $.datepicker._get( inst, "showAnim" ); 1126 duration = $.datepicker._get( inst, "duration" ); 1127 inst.dpDiv.css( "z-index", datepicker_getZindex( $( input ) ) + 1 ); 1128 $.datepicker._datepickerShowing = true; 1129 1130 if ( $.effects && $.effects.effect[ showAnim ] ) { 1131 inst.dpDiv.show( showAnim, $.datepicker._get( inst, "showOptions" ), duration ); 1132 } else { 1133 inst.dpDiv[ showAnim || "show" ]( showAnim ? duration : null ); 1134 } 1135 1136 if ( $.datepicker._shouldFocusInput( inst ) ) { 1137 inst.input.trigger( "focus" ); 1138 } 1139 1140 $.datepicker._curInst = inst; 1141 } 1142 }, 1143 1144 /* Generate the date picker content. */ 1145 _updateDatepicker: function( inst ) { 1146 this.maxRows = 4; //Reset the max number of rows being displayed (see #7043) 1147 datepicker_instActive = inst; // for delegate hover events 1148 inst.dpDiv.empty().append( this._generateHTML( inst ) ); 1149 this._attachHandlers( inst ); 1150 1151 var origyearshtml, 1152 numMonths = this._getNumberOfMonths( inst ), 1153 cols = numMonths[ 1 ], 1154 width = 17, 1155 activeCell = inst.dpDiv.find( "." + this._dayOverClass + " a" ); 1156 1157 if ( activeCell.length > 0 ) { 1158 datepicker_handleMouseover.apply( activeCell.get( 0 ) ); 1159 } 1160 1161 inst.dpDiv.removeClass( "ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4" ).width( "" ); 1162 if ( cols > 1 ) { 1163 inst.dpDiv.addClass( "ui-datepicker-multi-" + cols ).css( "width", ( width * cols ) + "em" ); 1164 } 1165 inst.dpDiv[ ( numMonths[ 0 ] !== 1 || numMonths[ 1 ] !== 1 ? "add" : "remove" ) + 1166 "Class" ]( "ui-datepicker-multi" ); 1167 inst.dpDiv[ ( this._get( inst, "isRTL" ) ? "add" : "remove" ) + 1168 "Class" ]( "ui-datepicker-rtl" ); 1169 1170 if ( inst === $.datepicker._curInst && $.datepicker._datepickerShowing && $.datepicker._shouldFocusInput( inst ) ) { 1171 inst.input.trigger( "focus" ); 1172 } 1173 1174 // Deffered render of the years select (to avoid flashes on Firefox) 1175 if ( inst.yearshtml ) { 1176 origyearshtml = inst.yearshtml; 1177 setTimeout( function() { 1178 1179 //assure that inst.yearshtml didn't change. 1180 if ( origyearshtml === inst.yearshtml && inst.yearshtml ) {
vendor: 4,574 bytes, lines 1181-1303
1181 inst.dpDiv.find( "select.ui-datepicker-year:first" ).replaceWith( inst.yearshtml ); 1182 } 1183 origyearshtml = inst.yearshtml = null; 1184 }, 0 ); 1185 } 1186 }, 1187 1188 // #6694 - don't focus the input if it's already focused 1189 // this breaks the change event in IE 1190 // Support: IE and jQuery <1.9 1191 _shouldFocusInput: function( inst ) { 1192 return inst.input && inst.input.is( ":visible" ) && !inst.input.is( ":disabled" ) && !inst.input.is( ":focus" ); 1193 }, 1194 1195 /* Check positioning to remain on screen. */ 1196 _checkOffset: function( inst, offset, isFixed ) { 1197 var dpWidth = inst.dpDiv.outerWidth(), 1198 dpHeight = inst.dpDiv.outerHeight(), 1199 inputWidth = inst.input ? inst.input.outerWidth() : 0, 1200 inputHeight = inst.input ? inst.input.outerHeight() : 0, 1201 viewWidth = document.documentElement.clientWidth + ( isFixed ? 0 : $( document ).scrollLeft() ), 1202 viewHeight = document.documentElement.clientHeight + ( isFixed ? 0 : $( document ).scrollTop() ); 1203 1204 offset.left -= ( this._get( inst, "isRTL" ) ? ( dpWidth - inputWidth ) : 0 ); 1205 offset.left -= ( isFixed && offset.left === inst.input.offset().left ) ? $( document ).scrollLeft() : 0; 1206 offset.top -= ( isFixed && offset.top === ( inst.input.offset().top + inputHeight ) ) ? $( document ).scrollTop() : 0; 1207 1208 // Now check if datepicker is showing outside window viewport - move to a better place if so. 1209 offset.left -= Math.min( offset.left, ( offset.left + dpWidth > viewWidth && viewWidth > dpWidth ) ? 1210 Math.abs( offset.left + dpWidth - viewWidth ) : 0 ); 1211 offset.top -= Math.min( offset.top, ( offset.top + dpHeight > viewHeight && viewHeight > dpHeight ) ? 1212 Math.abs( dpHeight + inputHeight ) : 0 ); 1213 1214 return offset; 1215 }, 1216 1217 /* Find an object's position on the screen. */ 1218 _findPos: function( obj ) { 1219 var position, 1220 inst = this._getInst( obj ), 1221 isRTL = this._get( inst, "isRTL" ); 1222 1223 while ( obj && ( obj.type === "hidden" || obj.nodeType !== 1 || $.expr.filters.hidden( obj ) ) ) { 1224 obj = obj[ isRTL ? "previousSibling" : "nextSibling" ]; 1225 } 1226 1227 position = $( obj ).offset(); 1228 return [ position.left, position.top ]; 1229 }, 1230 1231 /* Hide the date picker from view. 1232 * @param input element - the input field attached to the date picker 1233 */ 1234 _hideDatepicker: function( input ) { 1235 var showAnim, duration, postProcess, onClose, 1236 inst = this._curInst; 1237 1238 if ( !inst || ( input && inst !== $.data( input, "datepicker" ) ) ) { 1239 return; 1240 } 1241 1242 if ( this._datepickerShowing ) { 1243 showAnim = this._get( inst, "showAnim" ); 1244 duration = this._get( inst, "duration" ); 1245 postProcess = function() { 1246 $.datepicker._tidyDialog( inst ); 1247 }; 1248 1249 // DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed 1250 if ( $.effects && ( $.effects.effect[ showAnim ] || $.effects[ showAnim ] ) ) { 1251 inst.dpDiv.hide( showAnim, $.datepicker._get( inst, "showOptions" ), duration, postProcess ); 1252 } else { 1253 inst.dpDiv[ ( showAnim === "slideDown" ? "slideUp" : 1254 ( showAnim === "fadeIn" ? "fadeOut" : "hide" ) ) ]( ( showAnim ? duration : null ), postProcess ); 1255 } 1256 1257 if ( !showAnim ) { 1258 postProcess(); 1259 } 1260 this._datepickerShowing = false; 1261 1262 onClose = this._get( inst, "onClose" ); 1263 if ( onClose ) { 1264 onClose.apply( ( inst.input ? inst.input[ 0 ] : null ), [ ( inst.input ? inst.input.val() : "" ), inst ] ); 1265 } 1266 1267 this._lastInput = null; 1268 if ( this._inDialog ) { 1269 this._dialogInput.css( { position: "absolute", left: "0", top: "-100px" } ); 1270 if ( $.blockUI ) { 1271 $.unblockUI(); 1272 $( "body" ).append( this.dpDiv ); 1273 } 1274 } 1275 this._inDialog = false; 1276 } 1277 }, 1278 1279 /* Tidy up after a dialog display. */ 1280 _tidyDialog: function( inst ) { 1281 inst.dpDiv.removeClass( this._dialogClass ).off( ".ui-datepicker-calendar" ); 1282 }, 1283 1284 /* Close date picker if clicked elsewhere. */ 1285 _checkExternalClick: function( event ) { 1286 if ( !$.datepicker._curInst ) { 1287 return; 1288 } 1289 1290 var $target = $( event.target ), 1291 inst = $.datepicker._getInst( $target[ 0 ] ); 1292 1293 if ( ( ( $target[ 0 ].id !== $.datepicker._mainDivId && 1294 $target.parents( "#" + $.datepicker._mainDivId ).length === 0 && 1295 !$target.hasClass( $.datepicker.markerClassName ) && 1296 !$target.closest( "." + $.datepicker._triggerClass ).length && 1297 $.datepicker._datepickerShowing && !( $.datepicker._inDialog && $.blockUI ) ) ) || 1298 ( $target.hasClass( $.datepicker.markerClassName ) && $.datepicker._curInst !== inst ) ) { 1299 $.datepicker._hideDatepicker(); 1300 } 1301 }, 1302 1303 /* Adjust one of the date sub-fields. */
vendor: 4,647 bytes, lines 1304-1445
1304 _adjustDate: function( id, offset, period ) { 1305 var target = $( id ), 1306 inst = this._getInst( target[ 0 ] ); 1307 1308 if ( this._isDisabledDatepicker( target[ 0 ] ) ) { 1309 return; 1310 } 1311 this._adjustInstDate( inst, offset + 1312 ( period === "M" ? this._get( inst, "showCurrentAtPos" ) : 0 ), // undo positioning 1313 period ); 1314 this._updateDatepicker( inst ); 1315 }, 1316 1317 /* Action for current link. */ 1318 _gotoToday: function( id ) { 1319 var date, 1320 target = $( id ), 1321 inst = this._getInst( target[ 0 ] ); 1322 1323 if ( this._get( inst, "gotoCurrent" ) && inst.currentDay ) { 1324 inst.selectedDay = inst.currentDay; 1325 inst.drawMonth = inst.selectedMonth = inst.currentMonth; 1326 inst.drawYear = inst.selectedYear = inst.currentYear; 1327 } else { 1328 date = new Date(); 1329 inst.selectedDay = date.getDate(); 1330 inst.drawMonth = inst.selectedMonth = date.getMonth(); 1331 inst.drawYear = inst.selectedYear = date.getFullYear(); 1332 } 1333 this._notifyChange( inst ); 1334 this._adjustDate( target ); 1335 }, 1336 1337 /* Action for selecting a new month/year. */ 1338 _selectMonthYear: function( id, select, period ) { 1339 var target = $( id ), 1340 inst = this._getInst( target[ 0 ] ); 1341 1342 inst[ "selected" + ( period === "M" ? "Month" : "Year" ) ] = 1343 inst[ "draw" + ( period === "M" ? "Month" : "Year" ) ] = 1344 parseInt( select.options[ select.selectedIndex ].value, 10 ); 1345 1346 this._notifyChange( inst ); 1347 this._adjustDate( target ); 1348 }, 1349 1350 /* Action for selecting a day. */ 1351 _selectDay: function( id, month, year, td ) { 1352 var inst, 1353 target = $( id ); 1354 1355 if ( $( td ).hasClass( this._unselectableClass ) || this._isDisabledDatepicker( target[ 0 ] ) ) { 1356 return; 1357 } 1358 1359 inst = this._getInst( target[ 0 ] ); 1360 inst.selectedDay = inst.currentDay = $( "a", td ).html(); 1361 inst.selectedMonth = inst.currentMonth = month; 1362 inst.selectedYear = inst.currentYear = year; 1363 this._selectDate( id, this._formatDate( inst, 1364 inst.currentDay, inst.currentMonth, inst.currentYear ) ); 1365 }, 1366 1367 /* Erase the input field and hide the date picker. */ 1368 _clearDate: function( id ) { 1369 var target = $( id ); 1370 this._selectDate( target, "" ); 1371 }, 1372 1373 /* Update the input field with the selected date. */ 1374 _selectDate: function( id, dateStr ) { 1375 var onSelect, 1376 target = $( id ), 1377 inst = this._getInst( target[ 0 ] ); 1378 1379 dateStr = ( dateStr != null ? dateStr : this._formatDate( inst ) ); 1380 if ( inst.input ) { 1381 inst.input.val( dateStr ); 1382 } 1383 this._updateAlternate( inst ); 1384 1385 onSelect = this._get( inst, "onSelect" ); 1386 if ( onSelect ) { 1387 onSelect.apply( ( inst.input ? inst.input[ 0 ] : null ), [ dateStr, inst ] ); // trigger custom callback 1388 } else if ( inst.input ) { 1389 inst.input.trigger( "change" ); // fire the change event 1390 } 1391 1392 if ( inst.inline ) { 1393 this._updateDatepicker( inst ); 1394 } else { 1395 this._hideDatepicker(); 1396 this._lastInput = inst.input[ 0 ]; 1397 if ( typeof( inst.input[ 0 ] ) !== "object" ) { 1398 inst.input.trigger( "focus" ); // restore focus 1399 } 1400 this._lastInput = null; 1401 } 1402 }, 1403 1404 /* Update any alternate field to synchronise with the main field. */ 1405 _updateAlternate: function( inst ) { 1406 var altFormat, date, dateStr, 1407 altField = this._get( inst, "altField" ); 1408 1409 if ( altField ) { // update alternate field too 1410 altFormat = this._get( inst, "altFormat" ) || this._get( inst, "dateFormat" ); 1411 date = this._getDate( inst ); 1412 dateStr = this.formatDate( altFormat, date, this._getFormatConfig( inst ) ); 1413 $( altField ).val( dateStr ); 1414 } 1415 }, 1416 1417 /* Set as beforeShowDay function to prevent selection of weekends. 1418 * @param date Date - the date to customise 1419 * @return [boolean, string] - is this date selectable?, what is its CSS class? 1420 */ 1421 noWeekends: function( date ) { 1422 var day = date.getDay(); 1423 return [ ( day > 0 && day < 6 ), "" ]; 1424 }, 1425 1426 /* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition. 1427 * @param date Date - the date to get the week for 1428 * @return number - the number of the week within the year that contains this date 1429 */ 1430 iso8601Week: function( date ) { 1431 var time, 1432 checkDate = new Date( date.getTime() ); 1433 1434 // Find Thursday of this week starting on Monday 1435 checkDate.setDate( checkDate.getDate() + 4 - ( checkDate.getDay() || 7 ) ); 1436 1437 time = checkDate.getTime(); 1438 checkDate.setMonth( 0 ); // Compare with Jan 1 1439 checkDate.setDate( 1 ); 1440 return Math.floor( Math.round( ( time - checkDate ) / 86400000 ) / 7 ) + 1; 1441 }, 1442 1443 /* Parse a string value into a date object. 1444 * See formatDate below for the possible formats. 1445 *
vendor: 18,891 bytes, lines 1446-1999
1446 * @param format string - the expected format of the date 1447 * @param value string - the date in the above format 1448 * @param settings Object - attributes include: 1449 * shortYearCutoff number - the cutoff year for determining the century (optional) 1450 * dayNamesShort string[7] - abbreviated names of the days from Sunday (optional) 1451 * dayNames string[7] - names of the days from Sunday (optional) 1452 * monthNamesShort string[12] - abbreviated names of the months (optional) 1453 * monthNames string[12] - names of the months (optional) 1454 * @return Date - the extracted date value or null if value is blank 1455 */ 1456 parseDate: function( format, value, settings ) { 1457 if ( format == null || value == null ) { 1458 throw "Invalid arguments"; 1459 } 1460 1461 value = ( typeof value === "object" ? value.toString() : value + "" ); 1462 if ( value === "" ) { 1463 return null; 1464 } 1465 1466 var iFormat, dim, extra, 1467 iValue = 0, 1468 shortYearCutoffTemp = ( settings ? settings.shortYearCutoff : null ) || this._defaults.shortYearCutoff, 1469 shortYearCutoff = ( typeof shortYearCutoffTemp !== "string" ? shortYearCutoffTemp : 1470 new Date().getFullYear() % 100 + parseInt( shortYearCutoffTemp, 10 ) ), 1471 dayNamesShort = ( settings ? settings.dayNamesShort : null ) || this._defaults.dayNamesShort, 1472 dayNames = ( settings ? settings.dayNames : null ) || this._defaults.dayNames, 1473 monthNamesShort = ( settings ? settings.monthNamesShort : null ) || this._defaults.monthNamesShort, 1474 monthNames = ( settings ? settings.monthNames : null ) || this._defaults.monthNames, 1475 year = -1, 1476 month = -1, 1477 day = -1, 1478 doy = -1, 1479 literal = false, 1480 date, 1481 1482 // Check whether a format character is doubled 1483 lookAhead = function( match ) { 1484 var matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match ); 1485 if ( matches ) { 1486 iFormat++; 1487 } 1488 return matches; 1489 }, 1490 1491 // Extract a number from the string value 1492 getNumber = function( match ) { 1493 var isDoubled = lookAhead( match ), 1494 size = ( match === "@" ? 14 : ( match === "!" ? 20 : 1495 ( match === "y" && isDoubled ? 4 : ( match === "o" ? 3 : 2 ) ) ) ), 1496 minSize = ( match === "y" ? size : 1 ), 1497 digits = new RegExp( "^\\d{" + minSize + "," + size + "}" ), 1498 num = value.substring( iValue ).match( digits ); 1499 if ( !num ) { 1500 throw "Missing number at position " + iValue; 1501 } 1502 iValue += num[ 0 ].length; 1503 return parseInt( num[ 0 ], 10 ); 1504 }, 1505 1506 // Extract a name from the string value and convert to an index 1507 getName = function( match, shortNames, longNames ) { 1508 var index = -1, 1509 names = $.map( lookAhead( match ) ? longNames : shortNames, function( v, k ) { 1510 return [ [ k, v ] ]; 1511 } ).sort( function( a, b ) { 1512 return -( a[ 1 ].length - b[ 1 ].length ); 1513 } ); 1514 1515 $.each( names, function( i, pair ) { 1516 var name = pair[ 1 ]; 1517 if ( value.substr( iValue, name.length ).toLowerCase() === name.toLowerCase() ) { 1518 index = pair[ 0 ]; 1519 iValue += name.length; 1520 return false; 1521 } 1522 } ); 1523 if ( index !== -1 ) { 1524 return index + 1; 1525 } else { 1526 throw "Unknown name at position " + iValue; 1527 } 1528 }, 1529 1530 // Confirm that a literal character matches the string value 1531 checkLiteral = function() { 1532 if ( value.charAt( iValue ) !== format.charAt( iFormat ) ) { 1533 throw "Unexpected literal at position " + iValue; 1534 } 1535 iValue++; 1536 }; 1537 1538 for ( iFormat = 0; iFormat < format.length; iFormat++ ) { 1539 if ( literal ) { 1540 if ( format.charAt( iFormat ) === "'" && !lookAhead( "'" ) ) { 1541 literal = false; 1542 } else { 1543 checkLiteral(); 1544 } 1545 } else { 1546 switch ( format.charAt( iFormat ) ) { 1547 case "d": 1548 day = getNumber( "d" ); 1549 break; 1550 case "D": 1551 getName( "D", dayNamesShort, dayNames ); 1552 break; 1553 case "o": 1554 doy = getNumber( "o" ); 1555 break; 1556 case "m": 1557 month = getNumber( "m" ); 1558 break; 1559 case "M": 1560 month = getName( "M", monthNamesShort, monthNames ); 1561 break; 1562 case "y": 1563 year = getNumber( "y" ); 1564 break; 1565 case "@": 1566 date = new Date( getNumber( "@" ) ); 1567 year = date.getFullYear(); 1568 month = date.getMonth() + 1; 1569 day = date.getDate(); 1570 break; 1571 case "!": 1572 date = new Date( ( getNumber( "!" ) - this._ticksTo1970 ) / 10000 ); 1573 year = date.getFullYear(); 1574 month = date.getMonth() + 1; 1575 day = date.getDate(); 1576 break; 1577 case "'": 1578 if ( lookAhead( "'" ) ) { 1579 checkLiteral(); 1580 } else { 1581 literal = true; 1582 } 1583 break; 1584 default: 1585 checkLiteral(); 1586 } 1587 } 1588 } 1589 1590 if ( iValue < value.length ) { 1591 extra = value.substr( iValue ); 1592 if ( !/^\s+/.test( extra ) ) { 1593 throw "Extra/unparsed characters found in date: " + extra; 1594 } 1595 } 1596 1597 if ( year === -1 ) { 1598 year = new Date().getFullYear(); 1599 } else if ( year < 100 ) { 1600 year += new Date().getFullYear() - new Date().getFullYear() % 100 + 1601 ( year <= shortYearCutoff ? 0 : -100 ); 1602 } 1603 1604 if ( doy > -1 ) { 1605 month = 1; 1606 day = doy; 1607 do { 1608 dim = this._getDaysInMonth( year, month - 1 ); 1609 if ( day <= dim ) { 1610 break; 1611 } 1612 month++; 1613 day -= dim; 1614 } while ( true ); 1615 } 1616 1617 date = this._daylightSavingAdjust( new Date( year, month - 1, day ) ); 1618 if ( date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day ) { 1619 throw "Invalid date"; // E.g. 31/02/00 1620 } 1621 return date; 1622 }, 1623 1624 /* Standard date formats. */ 1625 ATOM: "yy-mm-dd", // RFC 3339 (ISO 8601) 1626 COOKIE: "D, dd M yy", 1627 ISO_8601: "yy-mm-dd", 1628 RFC_822: "D, d M y", 1629 RFC_850: "DD, dd-M-y", 1630 RFC_1036: "D, d M y", 1631 RFC_1123: "D, d M yy", 1632 RFC_2822: "D, d M yy", 1633 RSS: "D, d M y", // RFC 822 1634 TICKS: "!", 1635 TIMESTAMP: "@", 1636 W3C: "yy-mm-dd", // ISO 8601 1637 1638 _ticksTo1970: ( ( ( 1970 - 1 ) * 365 + Math.floor( 1970 / 4 ) - Math.floor( 1970 / 100 ) + 1639 Math.floor( 1970 / 400 ) ) * 24 * 60 * 60 * 10000000 ), 1640 1641 /* Format a date object into a string value. 1642 * The format can be combinations of the following: 1643 * d - day of month (no leading zero) 1644 * dd - day of month (two digit) 1645 * o - day of year (no leading zeros) 1646 * oo - day of year (three digit) 1647 * D - day name short 1648 * DD - day name long 1649 * m - month of year (no leading zero) 1650 * mm - month of year (two digit) 1651 * M - month name short 1652 * MM - month name long 1653 * y - year (two digit) 1654 * yy - year (four digit) 1655 * @ - Unix timestamp (ms since 01/01/1970) 1656 * ! - Windows ticks (100ns since 01/01/0001) 1657 * "..." - literal text 1658 * '' - single quote 1659 * 1660 * @param format string - the desired format of the date 1661 * @param date Date - the date value to format 1662 * @param settings Object - attributes include: 1663 * dayNamesShort string[7] - abbreviated names of the days from Sunday (optional) 1664 * dayNames string[7] - names of the days from Sunday (optional) 1665 * monthNamesShort string[12] - abbreviated names of the months (optional) 1666 * monthNames string[12] - names of the months (optional) 1667 * @return string - the date in the above format 1668 */ 1669 formatDate: function( format, date, settings ) { 1670 if ( !date ) { 1671 return ""; 1672 } 1673 1674 var iFormat, 1675 dayNamesShort = ( settings ? settings.dayNamesShort : null ) || this._defaults.dayNamesShort, 1676 dayNames = ( settings ? settings.dayNames : null ) || this._defaults.dayNames, 1677 monthNamesShort = ( settings ? settings.monthNamesShort : null ) || this._defaults.monthNamesShort, 1678 monthNames = ( settings ? settings.monthNames : null ) || this._defaults.monthNames, 1679 1680 // Check whether a format character is doubled 1681 lookAhead = function( match ) { 1682 var matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match ); 1683 if ( matches ) { 1684 iFormat++; 1685 } 1686 return matches; 1687 }, 1688 1689 // Format a number, with leading zero if necessary 1690 formatNumber = function( match, value, len ) { 1691 var num = "" + value; 1692 if ( lookAhead( match ) ) { 1693 while ( num.length < len ) { 1694 num = "0" + num; 1695 } 1696 } 1697 return num; 1698 }, 1699 1700 // Format a name, short or long as requested 1701 formatName = function( match, value, shortNames, longNames ) { 1702 return ( lookAhead( match ) ? longNames[ value ] : shortNames[ value ] ); 1703 }, 1704 output = "", 1705 literal = false; 1706 1707 if ( date ) { 1708 for ( iFormat = 0; iFormat < format.length; iFormat++ ) { 1709 if ( literal ) { 1710 if ( format.charAt( iFormat ) === "'" && !lookAhead( "'" ) ) { 1711 literal = false; 1712 } else { 1713 output += format.charAt( iFormat ); 1714 } 1715 } else { 1716 switch ( format.charAt( iFormat ) ) { 1717 case "d": 1718 output += formatNumber( "d", date.getDate(), 2 ); 1719 break; 1720 case "D": 1721 output += formatName( "D", date.getDay(), dayNamesShort, dayNames ); 1722 break; 1723 case "o": 1724 output += formatNumber( "o", 1725 Math.round( ( new Date( date.getFullYear(), date.getMonth(), date.getDate() ).getTime() - new Date( date.getFullYear(), 0, 0 ).getTime() ) / 86400000 ), 3 ); 1726 break; 1727 case "m": 1728 output += formatNumber( "m", date.getMonth() + 1, 2 ); 1729 break; 1730 case "M": 1731 output += formatName( "M", date.getMonth(), monthNamesShort, monthNames ); 1732 break; 1733 case "y": 1734 output += ( lookAhead( "y" ) ? date.getFullYear() : 1735 ( date.getFullYear() % 100 < 10 ? "0" : "" ) + date.getFullYear() % 100 ); 1736 break; 1737 case "@": 1738 output += date.getTime(); 1739 break; 1740 case "!": 1741 output += date.getTime() * 10000 + this._ticksTo1970; 1742 break; 1743 case "'": 1744 if ( lookAhead( "'" ) ) { 1745 output += "'"; 1746 } else { 1747 literal = true; 1748 } 1749 break; 1750 default: 1751 output += format.charAt( iFormat ); 1752 } 1753 } 1754 } 1755 } 1756 return output; 1757 }, 1758 1759 /* Extract all possible characters from the date format. */ 1760 _possibleChars: function( format ) { 1761 var iFormat, 1762 chars = "", 1763 literal = false, 1764 1765 // Check whether a format character is doubled 1766 lookAhead = function( match ) { 1767 var matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match ); 1768 if ( matches ) { 1769 iFormat++; 1770 } 1771 return matches; 1772 }; 1773 1774 for ( iFormat = 0; iFormat < format.length; iFormat++ ) { 1775 if ( literal ) { 1776 if ( format.charAt( iFormat ) === "'" && !lookAhead( "'" ) ) { 1777 literal = false; 1778 } else { 1779 chars += format.charAt( iFormat ); 1780 } 1781 } else { 1782 switch ( format.charAt( iFormat ) ) { 1783 case "d": case "m": case "y": case "@": 1784 chars += "0123456789"; 1785 break; 1786 case "D": case "M": 1787 return null; // Accept anything 1788 case "'": 1789 if ( lookAhead( "'" ) ) { 1790 chars += "'"; 1791 } else { 1792 literal = true; 1793 } 1794 break; 1795 default: 1796 chars += format.charAt( iFormat ); 1797 } 1798 } 1799 } 1800 return chars; 1801 }, 1802 1803 /* Get a setting value, defaulting if necessary. */ 1804 _get: function( inst, name ) { 1805 return inst.settings[ name ] !== undefined ? 1806 inst.settings[ name ] : this._defaults[ name ]; 1807 }, 1808 1809 /* Parse existing date and initialise date picker. */ 1810 _setDateFromField: function( inst, noDefault ) { 1811 if ( inst.input.val() === inst.lastVal ) { 1812 return; 1813 } 1814 1815 var dateFormat = this._get( inst, "dateFormat" ), 1816 dates = inst.lastVal = inst.input ? inst.input.val() : null, 1817 defaultDate = this._getDefaultDate( inst ), 1818 date = defaultDate, 1819 settings = this._getFormatConfig( inst ); 1820 1821 try { 1822 date = this.parseDate( dateFormat, dates, settings ) || defaultDate; 1823 } catch ( event ) { 1824 dates = ( noDefault ? "" : dates ); 1825 } 1826 inst.selectedDay = date.getDate(); 1827 inst.drawMonth = inst.selectedMonth = date.getMonth(); 1828 inst.drawYear = inst.selectedYear = date.getFullYear(); 1829 inst.currentDay = ( dates ? date.getDate() : 0 ); 1830 inst.currentMonth = ( dates ? date.getMonth() : 0 ); 1831 inst.currentYear = ( dates ? date.getFullYear() : 0 ); 1832 this._adjustInstDate( inst ); 1833 }, 1834 1835 /* Retrieve the default date shown on opening. */ 1836 _getDefaultDate: function( inst ) { 1837 return this._restrictMinMax( inst, 1838 this._determineDate( inst, this._get( inst, "defaultDate" ), new Date() ) ); 1839 }, 1840 1841 /* A date may be specified as an exact value or a relative one. */ 1842 _determineDate: function( inst, date, defaultDate ) { 1843 var offsetNumeric = function( offset ) { 1844 var date = new Date(); 1845 date.setDate( date.getDate() + offset ); 1846 return date; 1847 }, 1848 offsetString = function( offset ) { 1849 try { 1850 return $.datepicker.parseDate( $.datepicker._get( inst, "dateFormat" ), 1851 offset, $.datepicker._getFormatConfig( inst ) ); 1852 } 1853 catch ( e ) { 1854 1855 // Ignore 1856 } 1857 1858 var date = ( offset.toLowerCase().match( /^c/ ) ? 1859 $.datepicker._getDate( inst ) : null ) || new Date(), 1860 year = date.getFullYear(), 1861 month = date.getMonth(), 1862 day = date.getDate(), 1863 pattern = /([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g, 1864 matches = pattern.exec( offset ); 1865 1866 while ( matches ) { 1867 switch ( matches[ 2 ] || "d" ) { 1868 case "d" : case "D" : 1869 day += parseInt( matches[ 1 ], 10 ); break; 1870 case "w" : case "W" : 1871 day += parseInt( matches[ 1 ], 10 ) * 7; break; 1872 case "m" : case "M" : 1873 month += parseInt( matches[ 1 ], 10 ); 1874 day = Math.min( day, $.datepicker._getDaysInMonth( year, month ) ); 1875 break; 1876 case "y": case "Y" : 1877 year += parseInt( matches[ 1 ], 10 ); 1878 day = Math.min( day, $.datepicker._getDaysInMonth( year, month ) ); 1879 break; 1880 } 1881 matches = pattern.exec( offset ); 1882 } 1883 return new Date( year, month, day ); 1884 }, 1885 newDate = ( date == null || date === "" ? defaultDate : ( typeof date === "string" ? offsetString( date ) : 1886 ( typeof date === "number" ? ( isNaN( date ) ? defaultDate : offsetNumeric( date ) ) : new Date( date.getTime() ) ) ) ); 1887 1888 newDate = ( newDate && newDate.toString() === "Invalid Date" ? defaultDate : newDate ); 1889 if ( newDate ) { 1890 newDate.setHours( 0 ); 1891 newDate.setMinutes( 0 ); 1892 newDate.setSeconds( 0 ); 1893 newDate.setMilliseconds( 0 ); 1894 } 1895 return this._daylightSavingAdjust( newDate ); 1896 }, 1897 1898 /* Handle switch to/from daylight saving. 1899 * Hours may be non-zero on daylight saving cut-over: 1900 * > 12 when midnight changeover, but then cannot generate 1901 * midnight datetime, so jump to 1AM, otherwise reset. 1902 * @param date (Date) the date to check 1903 * @return (Date) the corrected date 1904 */ 1905 _daylightSavingAdjust: function( date ) { 1906 if ( !date ) { 1907 return null; 1908 } 1909 date.setHours( date.getHours() > 12 ? date.getHours() + 2 : 0 ); 1910 return date; 1911 }, 1912 1913 /* Set the date(s) directly. */ 1914 _setDate: function( inst, date, noChange ) { 1915 var clear = !date, 1916 origMonth = inst.selectedMonth, 1917 origYear = inst.selectedYear, 1918 newDate = this._restrictMinMax( inst, this._determineDate( inst, date, new Date() ) ); 1919 1920 inst.selectedDay = inst.currentDay = newDate.getDate(); 1921 inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth(); 1922 inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear(); 1923 if ( ( origMonth !== inst.selectedMonth || origYear !== inst.selectedYear ) && !noChange ) { 1924 this._notifyChange( inst ); 1925 } 1926 this._adjustInstDate( inst ); 1927 if ( inst.input ) { 1928 inst.input.val( clear ? "" : this._formatDate( inst ) ); 1929 } 1930 }, 1931 1932 /* Retrieve the date(s) directly. */ 1933 _getDate: function( inst ) { 1934 var startDate = ( !inst.currentYear || ( inst.input && inst.input.val() === "" ) ? null : 1935 this._daylightSavingAdjust( new Date( 1936 inst.currentYear, inst.currentMonth, inst.currentDay ) ) ); 1937 return startDate; 1938 }, 1939 1940 /* Attach the onxxx handlers. These are declared statically so 1941 * they work with static code transformers like Caja. 1942 */ 1943 _attachHandlers: function( inst ) { 1944 var stepMonths = this._get( inst, "stepMonths" ), 1945 id = "#" + inst.id.replace( /\\\\/g, "\\" ); 1946 inst.dpDiv.find( "[data-handler]" ).map( function() { 1947 var handler = { 1948 prev: function() { 1949 $.datepicker._adjustDate( id, -stepMonths, "M" ); 1950 }, 1951 next: function() { 1952 $.datepicker._adjustDate( id, +stepMonths, "M" ); 1953 }, 1954 hide: function() { 1955 $.datepicker._hideDatepicker(); 1956 }, 1957 today: function() { 1958 $.datepicker._gotoToday( id ); 1959 }, 1960 selectDay: function() { 1961 $.datepicker._selectDay( id, +this.getAttribute( "data-month" ), +this.getAttribute( "data-year" ), this ); 1962 return false; 1963 }, 1964 selectMonth: function() { 1965 $.datepicker._selectMonthYear( id, this, "M" ); 1966 return false; 1967 }, 1968 selectYear: function() { 1969 $.datepicker._selectMonthYear( id, this, "Y" ); 1970 return false; 1971 } 1972 }; 1973 $( this ).on( this.getAttribute( "data-event" ), handler[ this.getAttribute( "data-handler" ) ] ); 1974 } ); 1975 }, 1976 1977 /* Generate the HTML for the current state of the date picker. */ 1978 _generateHTML: function( inst ) { 1979 var maxDraw, prevText, prev, nextText, next, currentText, gotoDate, 1980 controls, buttonPanel, firstDay, showWeek, dayNames, dayNamesMin, 1981 monthNames, monthNamesShort, beforeShowDay, showOtherMonths, 1982 selectOtherMonths, defaultDate, html, dow, row, group, col, selectedDate, 1983 cornerClass, calender, thead, day, daysInMonth, leadDays, curRows, numRows, 1984 printDate, dRow, tbody, daySettings, otherMonth, unselectable, 1985 tempDate = new Date(), 1986 today = this._daylightSavingAdjust( 1987 new Date( tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate() ) ), // clear time 1988 isRTL = this._get( inst, "isRTL" ), 1989 showButtonPanel = this._get( inst, "showButtonPanel" ), 1990 hideIfNoPrevNext = this._get( inst, "hideIfNoPrevNext" ), 1991 navigationAsDateFormat = this._get( inst, "navigationAsDateFormat" ), 1992 numMonths = this._getNumberOfMonths( inst ), 1993 showCurrentAtPos = this._get( inst, "showCurrentAtPos" ), 1994 stepMonths = this._get( inst, "stepMonths" ), 1995 isMultiMonth = ( numMonths[ 0 ] !== 1 || numMonths[ 1 ] !== 1 ), 1996 currentDate = this._daylightSavingAdjust( ( !inst.currentDay ? new Date( 9999, 9, 9 ) : 1997 new Date( inst.currentYear, inst.currentMonth, inst.currentDay ) ) ), 1998 minDate = this._getMinMaxDate( inst, "min" ), 1999 maxDate = this._getMinMaxDate( inst, "max" ),
vendor: 4,228 bytes, lines 2000-2079
2000 drawMonth = inst.drawMonth - showCurrentAtPos, 2001 drawYear = inst.drawYear; 2002 2003 if ( drawMonth < 0 ) { 2004 drawMonth += 12; 2005 drawYear--; 2006 } 2007 if ( maxDate ) { 2008 maxDraw = this._daylightSavingAdjust( new Date( maxDate.getFullYear(), 2009 maxDate.getMonth() - ( numMonths[ 0 ] * numMonths[ 1 ] ) + 1, maxDate.getDate() ) ); 2010 maxDraw = ( minDate && maxDraw < minDate ? minDate : maxDraw ); 2011 while ( this._daylightSavingAdjust( new Date( drawYear, drawMonth, 1 ) ) > maxDraw ) { 2012 drawMonth--; 2013 if ( drawMonth < 0 ) { 2014 drawMonth = 11; 2015 drawYear--; 2016 } 2017 } 2018 } 2019 inst.drawMonth = drawMonth; 2020 inst.drawYear = drawYear; 2021 2022 prevText = this._get( inst, "prevText" ); 2023 prevText = ( !navigationAsDateFormat ? prevText : this.formatDate( prevText, 2024 this._daylightSavingAdjust( new Date( drawYear, drawMonth - stepMonths, 1 ) ), 2025 this._getFormatConfig( inst ) ) ); 2026 2027 prev = ( this._canAdjustMonth( inst, -1, drawYear, drawMonth ) ? 2028 "<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click'" + 2029 " title='" + prevText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w" ) + "'>" + prevText + "</span></a>" : 2030 ( hideIfNoPrevNext ? "" : "<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='" + prevText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w" ) + "'>" + prevText + "</span></a>" ) ); 2031 2032 nextText = this._get( inst, "nextText" ); 2033 nextText = ( !navigationAsDateFormat ? nextText : this.formatDate( nextText, 2034 this._daylightSavingAdjust( new Date( drawYear, drawMonth + stepMonths, 1 ) ), 2035 this._getFormatConfig( inst ) ) ); 2036 2037 next = ( this._canAdjustMonth( inst, +1, drawYear, drawMonth ) ? 2038 "<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click'" + 2039 " title='" + nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e" ) + "'>" + nextText + "</span></a>" : 2040 ( hideIfNoPrevNext ? "" : "<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='" + nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e" ) + "'>" + nextText + "</span></a>" ) ); 2041 2042 currentText = this._get( inst, "currentText" ); 2043 gotoDate = ( this._get( inst, "gotoCurrent" ) && inst.currentDay ? currentDate : today ); 2044 currentText = ( !navigationAsDateFormat ? currentText : 2045 this.formatDate( currentText, gotoDate, this._getFormatConfig( inst ) ) ); 2046 2047 controls = ( !inst.inline ? "<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>" + 2048 this._get( inst, "closeText" ) + "</button>" : "" ); 2049 2050 buttonPanel = ( showButtonPanel ) ? "<div class='ui-datepicker-buttonpane ui-widget-content'>" + ( isRTL ? controls : "" ) + 2051 ( this._isInRange( inst, gotoDate ) ? "<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'" + 2052 ">" + currentText + "</button>" : "" ) + ( isRTL ? "" : controls ) + "</div>" : ""; 2053 2054 firstDay = parseInt( this._get( inst, "firstDay" ), 10 ); 2055 firstDay = ( isNaN( firstDay ) ? 0 : firstDay ); 2056 2057 showWeek = this._get( inst, "showWeek" ); 2058 dayNames = this._get( inst, "dayNames" ); 2059 dayNamesMin = this._get( inst, "dayNamesMin" ); 2060 monthNames = this._get( inst, "monthNames" ); 2061 monthNamesShort = this._get( inst, "monthNamesShort" ); 2062 beforeShowDay = this._get( inst, "beforeShowDay" ); 2063 showOtherMonths = this._get( inst, "showOtherMonths" ); 2064 selectOtherMonths = this._get( inst, "selectOtherMonths" ); 2065 defaultDate = this._getDefaultDate( inst ); 2066 html = ""; 2067 2068 for ( row = 0; row < numMonths[ 0 ]; row++ ) { 2069 group = ""; 2070 this.maxRows = 4; 2071 for ( col = 0; col < numMonths[ 1 ]; col++ ) { 2072 selectedDate = this._daylightSavingAdjust( new Date( drawYear, drawMonth, inst.selectedDay ) ); 2073 cornerClass = " ui-corner-all"; 2074 calender = ""; 2075 if ( isMultiMonth ) { 2076 calender += "<div class='ui-datepicker-group"; 2077 if ( numMonths[ 1 ] > 1 ) { 2078 switch ( col ) { 2079 case 0: calender += " ui-datepicker-group-first";
vendor: 5,312 bytes, lines 2080-2158
2080 cornerClass = " ui-corner-" + ( isRTL ? "right" : "left" ); break; 2081 case numMonths[ 1 ] - 1: calender += " ui-datepicker-group-last"; 2082 cornerClass = " ui-corner-" + ( isRTL ? "left" : "right" ); break; 2083 default: calender += " ui-datepicker-group-middle"; cornerClass = ""; break; 2084 } 2085 } 2086 calender += "'>"; 2087 } 2088 calender += "<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix" + cornerClass + "'>" + 2089 ( /all|left/.test( cornerClass ) && row === 0 ? ( isRTL ? next : prev ) : "" ) + 2090 ( /all|right/.test( cornerClass ) && row === 0 ? ( isRTL ? prev : next ) : "" ) + 2091 this._generateMonthYearHeader( inst, drawMonth, drawYear, minDate, maxDate, 2092 row > 0 || col > 0, monthNames, monthNamesShort ) + // draw month headers 2093 "</div><table class='ui-datepicker-calendar'><thead>" + 2094 "<tr>"; 2095 thead = ( showWeek ? "<th class='ui-datepicker-week-col'>" + this._get( inst, "weekHeader" ) + "</th>" : "" ); 2096 for ( dow = 0; dow < 7; dow++ ) { // days of the week 2097 day = ( dow + firstDay ) % 7; 2098 thead += "<th scope='col'" + ( ( dow + firstDay + 6 ) % 7 >= 5 ? " class='ui-datepicker-week-end'" : "" ) + ">" + 2099 "<span title='" + dayNames[ day ] + "'>" + dayNamesMin[ day ] + "</span></th>"; 2100 } 2101 calender += thead + "</tr></thead><tbody>"; 2102 daysInMonth = this._getDaysInMonth( drawYear, drawMonth ); 2103 if ( drawYear === inst.selectedYear && drawMonth === inst.selectedMonth ) { 2104 inst.selectedDay = Math.min( inst.selectedDay, daysInMonth ); 2105 } 2106 leadDays = ( this._getFirstDayOfMonth( drawYear, drawMonth ) - firstDay + 7 ) % 7; 2107 curRows = Math.ceil( ( leadDays + daysInMonth ) / 7 ); // calculate the number of rows to generate 2108 numRows = ( isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows ); //If multiple months, use the higher number of rows (see #7043) 2109 this.maxRows = numRows; 2110 printDate = this._daylightSavingAdjust( new Date( drawYear, drawMonth, 1 - leadDays ) ); 2111 for ( dRow = 0; dRow < numRows; dRow++ ) { // create date picker rows 2112 calender += "<tr>"; 2113 tbody = ( !showWeek ? "" : "<td class='ui-datepicker-week-col'>" + 2114 this._get( inst, "calculateWeek" )( printDate ) + "</td>" ); 2115 for ( dow = 0; dow < 7; dow++ ) { // create date picker days 2116 daySettings = ( beforeShowDay ? 2117 beforeShowDay.apply( ( inst.input ? inst.input[ 0 ] : null ), [ printDate ] ) : [ true, "" ] ); 2118 otherMonth = ( printDate.getMonth() !== drawMonth ); 2119 unselectable = ( otherMonth && !selectOtherMonths ) || !daySettings[ 0 ] || 2120 ( minDate && printDate < minDate ) || ( maxDate && printDate > maxDate ); 2121 tbody += "<td class='" + 2122 ( ( dow + firstDay + 6 ) % 7 >= 5 ? " ui-datepicker-week-end" : "" ) + // highlight weekends 2123 ( otherMonth ? " ui-datepicker-other-month" : "" ) + // highlight days from other months 2124 ( ( printDate.getTime() === selectedDate.getTime() && drawMonth === inst.selectedMonth && inst._keyEvent ) || // user pressed key 2125 ( defaultDate.getTime() === printDate.getTime() && defaultDate.getTime() === selectedDate.getTime() ) ? 2126 2127 // or defaultDate is current printedDate and defaultDate is selectedDate 2128 " " + this._dayOverClass : "" ) + // highlight selected day 2129 ( unselectable ? " " + this._unselectableClass + " ui-state-disabled" : "" ) + // highlight unselectable days 2130 ( otherMonth && !showOtherMonths ? "" : " " + daySettings[ 1 ] + // highlight custom dates 2131 ( printDate.getTime() === currentDate.getTime() ? " " + this._currentClass : "" ) + // highlight selected day 2132 ( printDate.getTime() === today.getTime() ? " ui-datepicker-today" : "" ) ) + "'" + // highlight today (if different) 2133 ( ( !otherMonth || showOtherMonths ) && daySettings[ 2 ] ? " title='" + daySettings[ 2 ].replace( /'/g, "'" ) + "'" : "" ) + // cell title 2134 ( unselectable ? "" : " data-handler='selectDay' data-event='click' data-month='" + printDate.getMonth() + "' data-year='" + printDate.getFullYear() + "'" ) + ">" + // actions 2135 ( otherMonth && !showOtherMonths ? " " : // display for other months 2136 ( unselectable ? "<span class='ui-state-default'>" + printDate.getDate() + "</span>" : "<a class='ui-state-default" + 2137 ( printDate.getTime() === today.getTime() ? " ui-state-highlight" : "" ) + 2138 ( printDate.getTime() === currentDate.getTime() ? " ui-state-active" : "" ) + // highlight selected day 2139 ( otherMonth ? " ui-priority-secondary" : "" ) + // distinguish dates from other months 2140 "' href='#'>" + printDate.getDate() + "</a>" ) ) + "</td>"; // display selectable date 2141 printDate.setDate( printDate.getDate() + 1 ); 2142 printDate = this._daylightSavingAdjust( printDate ); 2143 } 2144 calender += tbody + "</tr>"; 2145 } 2146 drawMonth++; 2147 if ( drawMonth > 11 ) { 2148 drawMonth = 0; 2149 drawYear++; 2150 } 2151 calender += "</tbody></table>" + ( isMultiMonth ? "</div>" + 2152 ( ( numMonths[ 0 ] > 0 && col === numMonths[ 1 ] - 1 ) ? "<div class='ui-datepicker-row-break'></div>" : "" ) : "" ); 2153 group += calender; 2154 } 2155 html += group; 2156 } 2157 html += buttonPanel; 2158 inst._keyEvent = false;
vendor: 4,435 bytes, lines 2159-2269
2159 return html; 2160 }, 2161 2162 /* Generate the month and year header. */ 2163 _generateMonthYearHeader: function( inst, drawMonth, drawYear, minDate, maxDate, 2164 secondary, monthNames, monthNamesShort ) { 2165 2166 var inMinYear, inMaxYear, month, years, thisYear, determineYear, year, endYear, 2167 changeMonth = this._get( inst, "changeMonth" ), 2168 changeYear = this._get( inst, "changeYear" ), 2169 showMonthAfterYear = this._get( inst, "showMonthAfterYear" ), 2170 html = "<div class='ui-datepicker-title'>", 2171 monthHtml = ""; 2172 2173 // Month selection 2174 if ( secondary || !changeMonth ) { 2175 monthHtml += "<span class='ui-datepicker-month'>" + monthNames[ drawMonth ] + "</span>"; 2176 } else { 2177 inMinYear = ( minDate && minDate.getFullYear() === drawYear ); 2178 inMaxYear = ( maxDate && maxDate.getFullYear() === drawYear ); 2179 monthHtml += "<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>"; 2180 for ( month = 0; month < 12; month++ ) { 2181 if ( ( !inMinYear || month >= minDate.getMonth() ) && ( !inMaxYear || month <= maxDate.getMonth() ) ) { 2182 monthHtml += "<option value='" + month + "'" + 2183 ( month === drawMonth ? " selected='selected'" : "" ) + 2184 ">" + monthNamesShort[ month ] + "</option>"; 2185 } 2186 } 2187 monthHtml += "</select>"; 2188 } 2189 2190 if ( !showMonthAfterYear ) { 2191 html += monthHtml + ( secondary || !( changeMonth && changeYear ) ? " " : "" ); 2192 } 2193 2194 // Year selection 2195 if ( !inst.yearshtml ) { 2196 inst.yearshtml = ""; 2197 if ( secondary || !changeYear ) { 2198 html += "<span class='ui-datepicker-year'>" + drawYear + "</span>"; 2199 } else { 2200 2201 // determine range of years to display 2202 years = this._get( inst, "yearRange" ).split( ":" ); 2203 thisYear = new Date().getFullYear(); 2204 determineYear = function( value ) { 2205 var year = ( value.match( /c[+\-].*/ ) ? drawYear + parseInt( value.substring( 1 ), 10 ) : 2206 ( value.match( /[+\-].*/ ) ? thisYear + parseInt( value, 10 ) : 2207 parseInt( value, 10 ) ) ); 2208 return ( isNaN( year ) ? thisYear : year ); 2209 }; 2210 year = determineYear( years[ 0 ] ); 2211 endYear = Math.max( year, determineYear( years[ 1 ] || "" ) ); 2212 year = ( minDate ? Math.max( year, minDate.getFullYear() ) : year ); 2213 endYear = ( maxDate ? Math.min( endYear, maxDate.getFullYear() ) : endYear ); 2214 inst.yearshtml += "<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>"; 2215 for ( ; year <= endYear; year++ ) { 2216 inst.yearshtml += "<option value='" + year + "'" + 2217 ( year === drawYear ? " selected='selected'" : "" ) + 2218 ">" + year + "</option>"; 2219 } 2220 inst.yearshtml += "</select>"; 2221 2222 html += inst.yearshtml; 2223 inst.yearshtml = null; 2224 } 2225 } 2226 2227 html += this._get( inst, "yearSuffix" ); 2228 if ( showMonthAfterYear ) { 2229 html += ( secondary || !( changeMonth && changeYear ) ? " " : "" ) + monthHtml; 2230 } 2231 html += "</div>"; // Close datepicker_header 2232 return html; 2233 }, 2234 2235 /* Adjust one of the date sub-fields. */ 2236 _adjustInstDate: function( inst, offset, period ) { 2237 var year = inst.selectedYear + ( period === "Y" ? offset : 0 ), 2238 month = inst.selectedMonth + ( period === "M" ? offset : 0 ), 2239 day = Math.min( inst.selectedDay, this._getDaysInMonth( year, month ) ) + ( period === "D" ? offset : 0 ), 2240 date = this._restrictMinMax( inst, this._daylightSavingAdjust( new Date( year, month, day ) ) ); 2241 2242 inst.selectedDay = date.getDate(); 2243 inst.drawMonth = inst.selectedMonth = date.getMonth(); 2244 inst.drawYear = inst.selectedYear = date.getFullYear(); 2245 if ( period === "M" || period === "Y" ) { 2246 this._notifyChange( inst ); 2247 } 2248 }, 2249 2250 /* Ensure a date is within any min/max bounds. */ 2251 _restrictMinMax: function( inst, date ) { 2252 var minDate = this._getMinMaxDate( inst, "min" ), 2253 maxDate = this._getMinMaxDate( inst, "max" ), 2254 newDate = ( minDate && date < minDate ? minDate : date ); 2255 return ( maxDate && newDate > maxDate ? maxDate : newDate ); 2256 }, 2257 2258 /* Notify change of month/year. */ 2259 _notifyChange: function( inst ) { 2260 var onChange = this._get( inst, "onChangeMonthYear" ); 2261 if ( onChange ) { 2262 onChange.apply( ( inst.input ? inst.input[ 0 ] : null ), 2263 [ inst.selectedYear, inst.selectedMonth + 1, inst ] ); 2264 } 2265 }, 2266 2267 /* Determine the number of months to show. */ 2268 _getNumberOfMonths: function( inst ) { 2269 var numMonths = this._get( inst, "numberOfMonths" );
vendor: 6,518 bytes, lines 2270-2434
2270 return ( numMonths == null ? [ 1, 1 ] : ( typeof numMonths === "number" ? [ 1, numMonths ] : numMonths ) ); 2271 }, 2272 2273 /* Determine the current maximum date - ensure no time components are set. */ 2274 _getMinMaxDate: function( inst, minMax ) { 2275 return this._determineDate( inst, this._get( inst, minMax + "Date" ), null ); 2276 }, 2277 2278 /* Find the number of days in a given month. */ 2279 _getDaysInMonth: function( year, month ) { 2280 return 32 - this._daylightSavingAdjust( new Date( year, month, 32 ) ).getDate(); 2281 }, 2282 2283 /* Find the day of the week of the first of a month. */ 2284 _getFirstDayOfMonth: function( year, month ) { 2285 return new Date( year, month, 1 ).getDay(); 2286 }, 2287 2288 /* Determines if we should allow a "next/prev" month display change. */ 2289 _canAdjustMonth: function( inst, offset, curYear, curMonth ) { 2290 var numMonths = this._getNumberOfMonths( inst ), 2291 date = this._daylightSavingAdjust( new Date( curYear, 2292 curMonth + ( offset < 0 ? offset : numMonths[ 0 ] * numMonths[ 1 ] ), 1 ) ); 2293 2294 if ( offset < 0 ) { 2295 date.setDate( this._getDaysInMonth( date.getFullYear(), date.getMonth() ) ); 2296 } 2297 return this._isInRange( inst, date ); 2298 }, 2299 2300 /* Is the given date in the accepted range? */ 2301 _isInRange: function( inst, date ) { 2302 var yearSplit, currentYear, 2303 minDate = this._getMinMaxDate( inst, "min" ), 2304 maxDate = this._getMinMaxDate( inst, "max" ), 2305 minYear = null, 2306 maxYear = null, 2307 years = this._get( inst, "yearRange" ); 2308 if ( years ) { 2309 yearSplit = years.split( ":" ); 2310 currentYear = new Date().getFullYear(); 2311 minYear = parseInt( yearSplit[ 0 ], 10 ); 2312 maxYear = parseInt( yearSplit[ 1 ], 10 ); 2313 if ( yearSplit[ 0 ].match( /[+\-].*/ ) ) { 2314 minYear += currentYear; 2315 } 2316 if ( yearSplit[ 1 ].match( /[+\-].*/ ) ) { 2317 maxYear += currentYear; 2318 } 2319 } 2320 2321 return ( ( !minDate || date.getTime() >= minDate.getTime() ) && 2322 ( !maxDate || date.getTime() <= maxDate.getTime() ) && 2323 ( !minYear || date.getFullYear() >= minYear ) && 2324 ( !maxYear || date.getFullYear() <= maxYear ) ); 2325 }, 2326 2327 /* Provide the configuration settings for formatting/parsing. */ 2328 _getFormatConfig: function( inst ) { 2329 var shortYearCutoff = this._get( inst, "shortYearCutoff" ); 2330 shortYearCutoff = ( typeof shortYearCutoff !== "string" ? shortYearCutoff : 2331 new Date().getFullYear() % 100 + parseInt( shortYearCutoff, 10 ) ); 2332 return { shortYearCutoff: shortYearCutoff, 2333 dayNamesShort: this._get( inst, "dayNamesShort" ), dayNames: this._get( inst, "dayNames" ), 2334 monthNamesShort: this._get( inst, "monthNamesShort" ), monthNames: this._get( inst, "monthNames" ) }; 2335 }, 2336 2337 /* Format the given date for display. */ 2338 _formatDate: function( inst, day, month, year ) { 2339 if ( !day ) { 2340 inst.currentDay = inst.selectedDay; 2341 inst.currentMonth = inst.selectedMonth; 2342 inst.currentYear = inst.selectedYear; 2343 } 2344 var date = ( day ? ( typeof day === "object" ? day : 2345 this._daylightSavingAdjust( new Date( year, month, day ) ) ) : 2346 this._daylightSavingAdjust( new Date( inst.currentYear, inst.currentMonth, inst.currentDay ) ) ); 2347 return this.formatDate( this._get( inst, "dateFormat" ), date, this._getFormatConfig( inst ) ); 2348 } 2349 } ); 2350 2351 /* 2352 * Bind hover events for datepicker elements. 2353 * Done via delegate so the binding only occurs once in the lifetime of the parent div. 2354 * Global datepicker_instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker. 2355 */ 2356 function datepicker_bindHover( dpDiv ) { 2357 var selector = "button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a"; 2358 return dpDiv.on( "mouseout", selector, function() { 2359 $( this ).removeClass( "ui-state-hover" ); 2360 if ( this.className.indexOf( "ui-datepicker-prev" ) !== -1 ) { 2361 $( this ).removeClass( "ui-datepicker-prev-hover" ); 2362 } 2363 if ( this.className.indexOf( "ui-datepicker-next" ) !== -1 ) { 2364 $( this ).removeClass( "ui-datepicker-next-hover" ); 2365 } 2366 } ) 2367 .on( "mouseover", selector, datepicker_handleMouseover ); 2368 } 2369 2370 function datepicker_handleMouseover() { 2371 if ( !$.datepicker._isDisabledDatepicker( datepicker_instActive.inline ? datepicker_instActive.dpDiv.parent()[ 0 ] : datepicker_instActive.input[ 0 ] ) ) { 2372 $( this ).parents( ".ui-datepicker-calendar" ).find( "a" ).removeClass( "ui-state-hover" ); 2373 $( this ).addClass( "ui-state-hover" ); 2374 if ( this.className.indexOf( "ui-datepicker-prev" ) !== -1 ) { 2375 $( this ).addClass( "ui-datepicker-prev-hover" ); 2376 } 2377 if ( this.className.indexOf( "ui-datepicker-next" ) !== -1 ) { 2378 $( this ).addClass( "ui-datepicker-next-hover" ); 2379 } 2380 } 2381 } 2382 2383 /* jQuery extend now ignores nulls! */ 2384 function datepicker_extendRemove( target, props ) { 2385 $.extend( target, props ); 2386 for ( var name in props ) { 2387 if ( props[ name ] == null ) { 2388 target[ name ] = props[ name ]; 2389 } 2390 } 2391 return target; 2392 } 2393 2394 /* Invoke the datepicker functionality. 2395 @param options string - a command, optionally followed by additional parameters or 2396 Object - settings for attaching new datepicker functionality 2397 @return jQuery object */ 2398 $.fn.datepicker = function( options ) { 2399 2400 /* Verify an empty collection wasn't passed - Fixes #6976 */ 2401 if ( !this.length ) { 2402 return this; 2403 } 2404 2405 /* Initialise the date picker. */ 2406 if ( !$.datepicker.initialized ) { 2407 $( document ).on( "mousedown", $.datepicker._checkExternalClick ); 2408 $.datepicker.initialized = true; 2409 } 2410 2411 /* Append datepicker main container to body if not exist. */ 2412 if ( $( "#" + $.datepicker._mainDivId ).length === 0 ) { 2413 $( "body" ).append( $.datepicker.dpDiv ); 2414 } 2415 2416 var otherArgs = Array.prototype.slice.call( arguments, 1 ); 2417 if ( typeof options === "string" && ( options === "isDisabled" || options === "getDate" || options === "widget" ) ) { 2418 return $.datepicker[ "_" + options + "Datepicker" ]. 2419 apply( $.datepicker, [ this[ 0 ] ].concat( otherArgs ) ); 2420 } 2421 if ( options === "option" && arguments.length === 2 && typeof arguments[ 1 ] === "string" ) { 2422 return $.datepicker[ "_" + options + "Datepicker" ]. 2423 apply( $.datepicker, [ this[ 0 ] ].concat( otherArgs ) ); 2424 } 2425 return this.each( function() { 2426 typeof options === "string" ? 2427 $.datepicker[ "_" + options + "Datepicker" ]. 2428 apply( $.datepicker, [ this ].concat( otherArgs ) ) : 2429 $.datepicker._attachDatepicker( this, options ); 2430 } ); 2431 }; 2432 2433 $.datepicker = new Datepicker(); // singleton instance 2434 $.datepicker.initialized = false;
vendor: 10,790 bytes, lines 2435-2450
2435 $.datepicker.uuid = new Date().getTime(); 2436 $.datepicker.version = "1.12.1"; 2437 2438 var widgetsDatepicker = $.datepicker; 2439 2440 2441 2442 2443})); 2444/*! 2445 * shariff-plus - v2.3.2 - Fri, 18 Apr 2025 12:13:28 GMT 2446 * https://www.richard-fath.de/en/software/shariff-plus.html 2447 * Copyright (c) 2025 Richard Fath (shariff-plus), Ines Pauer (shariff), Philipp Busse (shariff), Sebastian Hilbig (shariff), Erich Kramer (shariff), Deniz Sesli (shariff) 2448 * Licensed under the MIT license 2449 */ 2450!function(e){function t(r){if(a[r])return a[r].exports;var i=a[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var a={};t.m=e,t.c=a,t.d=function(e,a,r){t.o(e,a)||Object.defineProperty(e,a,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var a=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(a,"a",a),a},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=2)}([function(e,t,a){"use strict";function r(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}function i(e,t,a){if(e&&p.isObject(e)&&e instanceof r)return e;var i=new r;return i.parse(e,t,a),i}function n(e){return p.isString(e)&&(e=i(e)),e instanceof r?e.format():r.prototype.format.call(e)}function o(e,t){return i(e,!1,!0).resolve(t)}function s(e,t){return e?i(e,!1,!0).resolveObject(t):t}var l=a(10),p=a(12);t.parse=i,t.resolve=o,t.resolveObject=s,t.format=n,t.Url=r;var u=/^([a-z0-9.+-]+:)/i,d=/:[0-9]*$/,h=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,c=["<",">",'"',"`"," ","\r","\n","\t"],f=["{","}","|","\\","^","`"].concat(c),m=["'"].concat(f),b=["%","/","?",";","#"].concat(m),g=["/","?","#"],k=/^[+a-z0-9A-Z_-]{0,63}$/,v=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,j={javascript:!0,"javascript:":!0},z={javascript:!0,"javascript:":!0},y={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},P=a(13);r.prototype.parse=function(e,t,a){if(!p.isString(e))throw new TypeError("Parameter 'url' must be a string, not "+typeof e);var r=e.indexOf("?"),i=-1!==r&&r<e.indexOf("#")?"?":"#",n=e.split(i),o=/\\/g;n[0]=n[0].replace(o,"/"),e=n.join(i);var s=e;if(s=s.trim(),!a&&1===e.split("#").length){var d=h.exec(s);if(d)return this.path=s,this.href=s,this.pathname=d[1],d[2]?(this.search=d[2],this.query=t?P.parse(this.search.substr(1)):this.search.substr(1)):t&&(this.search="",this.query={}),this}var c=u.exec(s);if(c){c=c[0];var f=c.toLowerCase();this.protocol=f,s=s.substr(c.length)}if(a||c||s.match(/^\/\/[^@\/]+@[^@\/]+/)){var w="//"===s.substr(0,2);!w||c&&z[c]||(s=s.substr(2),this.slashes=!0)}if(!z[c]&&(w||c&&!y[c])){for(var x=-1,C=0;C<g.length;C++){var U=s.indexOf(g[C]);-1!==U&&(-1===x||U<x)&&(x=U)}var T,S;S=-1===x?s.lastIndexOf("@"):s.lastIndexOf("@",x),-1!==S&&(T=s.slice(0,S),s=s.slice(S+1),this.auth=decodeURIComponent(T)),x=-1;for(var C=0;C<b.length;C++){var U=s.indexOf(b[C]);-1!==U&&(-1===x||U<x)&&(x=U)}-1===x&&(x=s.length),this.host=s.slice(0,x),s=s.slice(x),this.parseHost(),this.hostname=this.hostname||"";var I="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!I)for(var R=this.hostname.split(/\./),C=0,D=R.length;C<D;C++){var F=R[C];if(F&&!F.match(k)){for(var L="",N=0,O=F.length;N<O;N++)F.charCodeAt(N)>127?L+="x":L+=F[N];if(!L.match(k)){var X=R.slice(0,C),M=R.slice(C+1),q=F.match(v);q&&(X.push(q[1]),M.unshift(q[2])),M.length&&(s="/"+M.join(".")+s),this.hostname=X.join(".");break}}}this.hostname.length>255?this.hostname="":this.hostname=this.hostname.toLowerCase(),I||(this.hostname=l.toASCII(this.hostname));var J=this.port?":"+this.port:"",V=this.hostname||"";this.host=V+J,this.href+=this.host,I&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==s[0]&&(s="/"+s))}if(!j[f])for(var C=0,D=m.length;C<D;C++){var G=m[C];if(-1!==s.indexOf(G)){var W=encodeURIComponent(G);W===G&&(W=escape(G)),s=s.split(G).join(W)}}var B=s.indexOf("#");-1!==B&&(this.hash=s.substr(B),s=s.slice(0,B));var Z=s.indexOf("?");if(-1!==Z?(this.search=s.substr(Z),this.query=s.substr(Z+1),t&&(this.query=P.parse(this.query)),s=s.slice(0,Z)):t&&(this.search="",this.query={}),s&&(this.pathname=s),y[f]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){var J=this.pathname||"",A=this.search||"";this.path=J+A}return this.href=this.format(),this},r.prototype.format=function(){var e=this.auth||"";e&&(e=encodeURIComponent(e),e=e.replace(/%3A/i,":"),e+="@");var t=this.protocol||"",a=this.pathname||"",r=this.hash||"",i=!1,n="";this.host?i=e+this.host:this.hostname&&(i=e+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(i+=":"+this.port)),this.query&&p.isObject(this.query)&&Object.keys(this.query).length&&(n=P.stringify(this.query));var o=this.search||n&&"?"+n||"";return t&&":"!==t.substr(-1)&&(t+=":"),this.slashes||(!t||y[t])&&!1!==i?(i="//"+(i||""),a&&"/"!==a.charAt(0)&&(a="/"+a)):i||(i=""),r&&"#"!==r.charAt(0)&&(r="#"+r),o&&"?"!==o.charAt(0)&&(o="?"+o),a=a.replace(/[?#]/g,function(e){return encodeURIComponent(e)}),o=o.replace("#","%23"),t+i+a+o+r},r.prototype.resolve=function(e){return this.resolveObject(i(e,!1,!0)).format()},r.prototype.resolveObject=function(e){if(p.isString(e)){var t=new r;t.parse(e,!1,!0),e=t}for(var a=new r,i=Object.keys(this),n=0;n<i.length;n++){var o=i[n];a[o]=this[o]}if(a.hash=e.hash,""===e.href)return a.href=a.format(),a;if(e.slashes&&!e.protocol){for(var s=Object.keys(e),l=0;l<s.length;l++){var u=s[l];"protocol"!==u&&(a[u]=e[u])}return y[a.protocol]&&a.hostname&&!a.pathname&&(a.path=a.pathname="/"),a.href=a.format(),a}if(e.protocol&&e.protocol!==a.protocol){if(!y[e.protocol]){for(var d=Object.keys(e),h=0;h<d.length;h++){var c=d[h];a[c]=e[c]}return a.href=a.format(),a}if(a.protocol=e.protocol,e.host||z[e.protocol])a.pathname=e.pathname;else{for(var f=(e.pathname||"").split("/");f.length&&!(e.host=f.shift()););e.host||(e.host=""),e.hostname||(e.hostname=""),""!==f[0]&&f.unshift(""),f.length<2&&f.unshift(""),a.pathname=f.join("/")}if(a.search=e.search,a.query=e.query,a.host=e.host||"",a.auth=e.auth,a.hostname=e.hostname||e.host,a.port=e.port,a.pathname||a.search){var m=a.pathname||"",b=a.search||"";a.path=m+b}return a.slashes=a.slashes||e.slashes,a.href=a.format(),a}var g=a.pathname&&"/"===a.pathname.charAt(0),k=e.host||e.pathname&&"/"===e.pathname.charAt(0),v=k||g||a.host&&e.pathname,j=v,P=a.pathname&&a.pathname.split("/")||[],f=e.pathname&&e.pathname.split("/")||[],w=a.protocol&&!y[a.protocol];if(w&&(a.hostname="",a.port=null,a.host&&(""===P[0]?P[0]=a.host:P.unshift(a.host)),a.host="",e.protocol&&(e.hostname=null,e.port=null,e.host&&(""===f[0]?f[0]=e.host:f.unshift(e.host)),e.host=null),v=v&&(""===f[0]||""===P[0])),k)a.host=e.host||""===e.host?e.host:a.host,a.hostname=e.hostname||""===e.hostname?e.hostname:a.hostname,a.search=e.search,a.query=e.query,P=f;else if(f.length)P||(P=[]),P.pop(),P=P.concat(f),a.search=e.search,a.query=e.query;else if(!p.isNullOrUndefined(e.search)){if(w){a.hostname=a.host=P.shift();var x=!!(a.host&&a.host.indexOf("@")>0)&&a.host.split("@");x&&(a.auth=x.shift(),a.host=a.hostname=x.shift())}return a.search=e.search,a.query=e.query,p.isNull(a.pathname)&&p.isNull(a.search)||(a.path=(a.pathname?a.pathname:"")+(a.search?a.search:"")),a.href=a.format(),a}if(!P.length)return a.pathname=null,a.search?a.path="/"+a.search:a.path=null,a.href=a.format(),a;for(var C=P.slice(-1)[0],U=(a.host||e.host||P.length>1)&&("."===C||".."===C)||""===C,T=0,S=P.length;S>=0;S--)C=P[S],"."===C?P.splice(S,1):".."===C?(P.splice(S,1),T++):T&&(P.splice(S,1),T--);if(!v&&!j)for(;T--;T)P.unshift("..");!v||""===P[0]||P[0]&&"/"===P[0].charAt(0)||P.unshift(""),U&&"/"!==P.join("/").substr(-1)&&P.push("");var I=""===P[0]||P[0]&&"/"===P[0].charAt(0);if(w){a.hostname=a.host=I?"":P.length?P.shift():"";var x=!!(a.host&&a.host.indexOf("@")>0)&&a.host.split("@");x&&(a.auth=x.shift(),a.host=a.hostname=x.shift())}return v=v||a.host&&P.length,v&&!I&&P.unshift(""),P.length?a.pathname=P.join("/"):(a.pathname=null,a.path=null),p.isNull(a.pathname)&&p.isNull(a.search)||(a.path=(a.pathname?a.pathname:"")+(a.search?a.search:"")),a.auth=e.auth||a.auth,a.slashes=a.slashes||e.slashes,a.href=a.format(),a},r.prototype.parseHost=function(){var e=this.host,t=d.exec(e);t&&(t=t[0],":"!==t&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)}},function(e,t){var a;a=function(){return this}();try{a=a||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(a=window)}e.exports=a},function(e,t,a){"use strict";a(3),e.exports=a(4)},function(e,t){},function(e,t,a){"use strict";(function(t){function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n=function(){function e(e,t){for(var a=0;a<t.length;a++){var r=t[a];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,a,r){return a&&e(t.prototype,a),r&&e(t,r),t}}(),o=a(5),s=a(6),l=a(0),p=document.currentScript||document.querySelector('script[src$="shariff.js"]')||document.querySelector('script[src$="shariff.min.js"]'),u=p?p.src.split("/").slice(0,-1).join("/"):"",d={theme:"color",backendUrl:null,infoUrl:"https://www.richard-fath.de/de/software/shariff-plus.html",infoDisplay:"blank",lang:"de",langFallback:"en",mailUrl:function(){var e=l.parse(this.getURL(),!0);return e.query.view="mail",delete e.search,l.format(e)},mailBody:function(){return this.getURL()},mediaUrl:null,orientation:"horizontal",buttonStyle:"standard",referrerTrack:null,services:["twitter","facebooklike","facebook","info"],dialogsMediaUrl:u,facebookCountBtn:"like",facebooklikeCss:"facebooklike_dlg.css",facebooklikeOptions:{width:450,layout:"standard",action:"like",size:"large",show_faces:!0,share:!0,appId:null},title:t.document.title,twitterVia:null,url:function(){var e=t.document.location.href,a=o("link[rel=canonical]").attr("href")||this.getMeta("og:url")||"";return a.length>0&&(a.indexOf("http")<0&&(a=0!==a.indexOf("//")?t.document.location.protocol+"//"+t.document.location.host+a:t.document.location.protocol+a),e=a),e}},h=function(){function e(t,a){var i=this;r(this,e),this.element=t,o(t).empty(),this.options=o.extend({},d,a,o(t).data()),this.services=Object.keys(s).filter(function(e){return i.isEnabledService(e)}).sort(function(e,t){var a=i.options.services;return a.indexOf(e)-a.indexOf(t)}).map(function(e){return s[e](i)}),this._addButtonList(),null!==this.options.backendUrl&&"icon"!==this.options.buttonStyle&&this.get
2450Shares(this._updateCounts.bind(this))}return n(e,[{key:"isEnabledService",value:function(e){return this.options.services.indexOf(e)>-1}},{key:"$socialshareElement",value:function(){return o(this.element)}},{key:"getLocalized",value:function(e,t){return"object"===i(e[t])?void 0===e[t][this.options.lang]?e[t][this.options.langFallback]:e[t][this.options.lang]:"string"==typeof e[t]?e[t]:void 0}},{key:"getMeta",value:function(e){return o('meta[name="'+e+'"],[property="'+e+'"]').attr("content")||""}},{key:"getInfoUrl",value:function(){return this.options.infoUrl}},{key:"getInfoDisplayPopup",value:function(){return"popup"===this.options.infoDisplay}},{key:"getInfoDisplayBlank",value:function(){return"popup"!==this.options.infoDisplay&&"self"!==this.options.infoDisplay}},{key:"getURL",value:function(){return this.getOption("url")}},{key:"getOption",value:function(e){var t=this.options[e];return"function"==typeof t?t.call(this):t}},{key:"getTitle",value:function(){var e=this.getOption("title");if(o(this.element).data().title)return e;e=e||this.getMeta("DC.title");var t=this.getMeta("DC.creator");return e&&t?e+" - "+t:e}},{key:"getReferrerTrack",value:function(){return this.options.referrerTrack||""}},{key:"getShares",value:function(e){var t=l.parse(this.options.backendUrl,!0);return t.query.url=this.getURL(),delete t.search,o.getJSON(l.format(t),e)}},{key:"getDialogsMediaUrl",value:function(){return this.options.dialogsMediaUrl||""}},{key:"getFacebooklikeCss",value:function(){return this.options.facebooklikeCss}},{key:"getFacebooklikeOptions",value:function(){return this.options.facebooklikeOptions}},{key:"_updateCounts",value:function(e,t,a){var r=this;if(e){var i=null;o.each(e,function(e,t){t>=1e3&&(t=Math.round(t/1e3)+"k");var a=!0;"facebook"===e&&(i=t,"like"===r.options.facebookCountBtn&&(a=!1)),r.isEnabledService(e)&&a&&o(r.element).find("."+e+" a").append(o("<span/>").addClass("share_count").text(t))}),this.isEnabledService("facebooklike")&&null!==i&&"share"!==this.options.facebookCountBtn&&o(this.element).find(".facebooklike a").append(o("<span/>").addClass("share_count").text(i))}}},{key:"_addButtonList",value:function(){var e=this,a=o("<ul/>").addClass(["theme-"+this.options.theme,"orientation-"+this.options.orientation,"button-style-"+this.options.buttonStyle,"shariff-col-"+this.options.services.length].join(" ")),r=[];this.services.forEach(function(t){var i=o("<li/>").addClass("shariff-button "+t.name),n=o("<a/>").attr("href",t.shareUrl);if("standard"===e.options.buttonStyle){var s=o("<span/>").addClass("share_text").text(e.getLocalized(t,"shareText"));n.append(s)}void 0!==t.faPrefix&&void 0!==t.faName&&n.prepend(o("<span/>").addClass(t.faPrefix+" "+t.faName)),t.shareUrl.match(/javascript:/)&&void 0!==t.dialogHtml&&(n.attr("data-dlg-idx",r.length),r[r.length]=t),t.popup?(n.attr("data-rel","popup"),"info"!==t.name&&n.attr("rel","nofollow")):t.blank?(n.attr("target","_blank"),"info"===t.name?n.attr("rel","noopener noreferrer"):n.attr("rel","nofollow noopener noreferrer")):"info"!==t.name&&n.attr("rel","nofollow"),n.attr("title",e.getLocalized(t,"title")),n.attr("role","button"),n.attr("aria-label",e.getLocalized(t,"title")),i.append(n),i.on("click","li",function(e){i.trigger("shariff-share",t)}),a.append(i)}),a.on("click",'[data-rel="popup"]',function(e){e.preventDefault();var a=o(this).attr("href");if(a.match(/twitter\.com\/intent\/(\w+)/)){var i=t.window;if(i.__twttr&&i.__twttr.widgets&&i.__twttr.widgets.loaded)return}var n=o(this).attr("data-dlg-idx");if(n&&!isNaN(n)&&void 0!==r[n].dialogHtml){var s=o(this).attr("title"),l='<meta name="viewport" content="width=device-width, initial-scale=1.0"><title>'+s+"</title>";void 0!==r[n].dialogCssUrl&&r[n].dialogCssUrl&&(l+='<link rel="stylesheet" href="'+r[n].dialogCssUrl+'">');var p=t.window.open("","_blank","width=600,height=460");return p.document.head.innerHTML=l,void(p.document.body.innerHTML=r[n].dialogHtml)}t.window.open(a,"_blank","width=600,height=460")}),this.$socialshareElement().append(a)}}]),e}();e.exports=h,t.Shariff=h,o(function(){o(".shariff").each(function(){this.hasOwnProperty("shariff")||(this.shariff=new h(this))})})}).call(t,a(1))},function(e,t){e.exports=jQuery},function(e,t,a){"use strict";e.exports={buffer:a(7),clipboard:a(8),diaspora:a(9),facebook:a(16),facebooklike:a(17),fediverse:a(18),flipboard:a(19),info:a(20),linkedin:a(21),mail:a(22),pinterest:a(23),pocket:a(24),print:a(25),qzone:a(26),reddit:a(27),stumbleupon:a(28),telegram:a(29),tencent:a(30),threema:a(31),tumblr:a(32),twitter:a(33),vk:a(34),weibo:a(35),whatsapp:a(36),xing:a(37)}},function(e,t,a){"use strict";e.exports=function(e){var t=encodeURIComponent(e.getURL());return{popup:!0,shareText:{bg:"cподелÑне",cs:"sdÃlet",da:"del",de:"teilen",en:"share",es:"compartir",fi:"Jaa",fr:"partager",hr:"podijelite",hu:"megosztás",it:"condividi",ja:"å
±æ",ko:"ê³µì í기",nl:"delen",no:"del",pl:"udostÄpnij",pt:"compartilhar",ro:"partajeazÄ",ru:"поделиÑÑÑÑ",sk:"zdieľaÅ¥",sl:"deli",sr:"podeli",sv:"dela",tr:"paylaÅ",zh:"å享"},name:"buffer",faPrefix:"fab",faName:"fa-buffer",title:{bg:"Сподели в buffer",cs:"SdÃlet na buffer",da:"Del pÃ¥ buffer",de:"Bei buffer teilen",en:"Share on buffer",es:"Compartir en buffer",fi:"Jaa bufferissä",fr:"Partager sur buffer",hr:"Podijelite na buffer",hu:"Megosztás bufferen",it:"Condividi su buffer",ja:"bufferä¸ã§å
±æ",ko:"bufferìì ê³µì í기",nl:"Delen op buffer",no:"Del pÃ¥ buffer",pl:"UdostÄpnij przez buffer",pt:"Compartilhar no buffer",ro:"PartajeazÄ pe buffer",ru:"ÐоделиÑÑÑÑ Ð½Ð° buffer",sk:"ZdieľaÅ¥ na buffer",sl:"Deli na buffer",sr:"Podeli na buffer",sv:"Dela pÃ¥ buffer",tr:"buffer'ta payla
2450Å",zh:"å¨bufferä¸å享"},shareUrl:"https://buffer.com/add?text="+encodeURIComponent(e.getTitle())+"&url="+t+e.getReferrerTrack()}}},function(e,t,a){"use strict";e.exports=function(e){return{popup:!1,shareText:{bg:"",cs:"",da:"",de:"kopieren",en:"clipboard",es:"",fi:"",fr:"",hr:"",hu:"",it:"",ja:"",ko:"",nl:"",no:"",pl:"",pt:"",ro:"",ru:"",sk:"",sl:"",sr:"",sv:"",tr:"",zh:""},name:"clipboard",faPrefix:"far",faName:"fa-copy",title:{bg:"",cs:"",da:"",de:"In die Zwischenablage kopieren",en:"Copy to clipboard",es:"",fi:"",fr:"",hr:"",hu:"",it:"",ja:"",ko:"",nl:"",no:"",pl:"",pt:"",ro:"",ru:"",sk:"",sl:"",sr:"",sv:"",tr:"",zh:""},shareUrl:'javascript:var d = document.createElement("input");document.body.appendChild(d);d.value = "'+e.getURL()+'";d.select();d.setSelectionRange(0, 99999);document.execCommand("copy");document.body.removeChild(d);'}}},function(e,t,a){"use strict";var r=a(0);e.exports=function(e){var t=r.parse("https://share.diasporafoundation.org/",!0);return t.query.url=e.getURL(),t.query.title=e.getTitle(),t.protocol="https",delete t.search,{popup:!0,shareText:{bg:"cподелÑне",cs:"sdÃlet",da:"del",de:"teilen",en:"share",es:"compartir",fi:"Jaa",fr:"partager",hr:"podijelite",hu:"megosztás",it:"condividi",ja:"å
±æ",ko:"ê³µì í기",nl:"delen",no:"del",pl:"udostÄpnij",pt:"compartilhar",ro:"partajeazÄ",ru:"поделиÑÑÑÑ",sk:"zdieľaÅ¥",sl:"deli",sr:"podeli",sv:"dela",tr:"paylaÅ",zh:"å享"},name:"diaspora",faPrefix:"fas",faName:"fa-asterisk",title:{bg:"Сподели в diaspora*",cs:"SdÃlet na diaspora*",da:"Del pÃ¥ diaspora*",de:"Bei diaspora* teilen",en:"Share on diaspora*",es:"Compartir en diaspora*",fi:"Jaa Diasporaissä",fr:"Partager sur diaspora*",hr:"Podijelite na diaspora*",hu:"Megosztás diaspora*",it:"Condividi su diaspora*",ja:"diaspora*ä¸ã§å
±æ",ko:"diaspora*ìì ê³µì í기",nl:"Delen op diaspora*",no:"Del pÃ¥ diaspora*",pl:"UdostÄpnij przez diaspora*",pt:"Compartilhar no diaspora*",ro:"PartajeazÄ pe diaspora*",ru:"ÐоделиÑÑÑÑ Ð½Ð° diaspora*",sk:"ZdieľaÅ¥ na diaspora*",sl:"Deli na diaspora*",sr:"Podeli na diaspora*-u",sv:"Dela pÃ¥ diaspora*",tr:"diaspora*'ta paylaÅ",zh:"å享è³diaspora*"},shareUrl:r.format(t)+e.getReferrerTrack()}}},function(e,t,a){(function(e,r){var i;!function(r){function n(e){throw new RangeError(I[e])}function o(e,t){for(var a=e.length,r=[];a--;)r[a]=t(e[a]);return r}function s(e,t){var a=e.split("@"),r="";return a.length>1&&(r=a[0]+"@",e=a[1]),e=e.replace(S,"."),r+o(e.split("."),t).join(".")}function l(e){for(var t,a,r=[],i=0,n=e.length;i<n;)t=e.charCodeAt(i++),t>=55296&&t<=56319&&i<n?(a=e.charCodeAt(i++),56320==(64512&a)?r.push(((1023&t)<<10)+(1023&a)+65536):(r.push(t),i--)):r.push(t);return r}function p(e){return o(e,function(e){var t="";return e>65535&&(e-=65536,t+=F(e>>>10&1023|55296),e=56320|1023&e),t+=F(e)}).join("")}function u(e){return e-48<10?e-22:e-65<26?e-65:e-97<26?e-97:v}function d(e,t){return e+22+75*(e<26)-((0!=t)<<5)}function h(e,t,a){var r=0;for(e=a?D(e/P):e>>1,e+=D(e/t);e>R*z>>1;r+=v)e=D(e/R);return D(r+(R+1)*e/(e+y))}function c(e){var t,a,r,i,o,s,l,d,c,f,m=[],b=e.length,g=0,y=x,P=w;for(a=e.lastIndexOf(C),a<0&&(a=0),r=0;r<a;++r)e.charCodeAt(r)>=128&&n("not-basic"),m.push(e.charCodeAt(r));for(i=a>0?a+1:0;i<b;){for(o=g,s=1,l=v;i>=b&&n("invalid-input"),d=u(e.charCodeAt(i++)),(d>=v||d>D((k-g)/s))&&n("overflow"),g+=d*s,c=l<=P?j:l>=P+z?z:l-P,!(d<c);l+=v)f=v-c,s>D(k/f)&&n("overflow"),s*=f;t=m.length+1,P=h(g-o,t,0==o),D(g/t)>k-y&&n("overflow"),y+=D(g/t),g%=t,m.splice(g++,0,y)}return p(m)}function f(e){var t,a,r,i,o,s,p,u,c,f,m,b,g,y,P,U=[];for(e=l(e),b=e.length,t=x,a=0,o=w,s=0;s<b;++s)(m=e[s])<128&&U.push(F(m));for(r=i=U.length,i&&U.push(C);r<b;){for(p=k,s=0;s<b;++s)(m=e[s])>=t&&m<p&&(p=m);for(g=r+1,p-t>D((k-a)/g)&&n("overflow"),a+=(p-t)*g,t=p,s=0;s<b;++s)if(m=e[s],m<t&&++a>k&&n("overflow"),m==t){for(u=a,c=v;f=c<=o?j:c>=o+z?z:c-o,!(u<f);c+=v)P=u-f,y=v-f,U.push(F(d(f+P%y,0))),u=D(P/y);U.push(F(d(u,0))),o=h(a,g,r==i),a=0,++r}++a,++t}return U.join("")}function m(e){return s(e,function(e){return U.test(e)?c(e.slice(4).toLowerCase()):e})}function b(e){return s(e,function(e){return T.test(e)?"xn--"+f(e):e})}var g,k=("object"==typeof t&&t&&t.nodeType,"object"==typeof e&&e&&e.nodeType,2147483647),v=36,j=1,z=26,y=38,P=700,w=72,x=128,C="-",U=/^xn--/,T=/[^\x20-\x7E]/,S=/[\x2E\u3002\uFF0E\uFF61]/g,I={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >
2450= 0x80 (not a basic code point)","invalid-input":"Invalid input"},R=v-j,D=Math.floor,F=String.fromCharCode;g={version:"1.4.1",ucs2:{decode:l,encode:p},decode:c,encode:f,toASCII:b,toUnicode:m},void 0!==(i=function(){return g}.call(t,a,t,e))&&(e.exports=i)}()}).call(t,a(11)(e),a(1))},function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e,t,a){"use strict";e.exports={isString:function(e){return"string"==typeof e},isObject:function(e){return"object"==typeof e&&null!==e},isNull:function(e){return null===e},isNullOrUndefined:function(e){return null==e}}},function(e,t,a){"use strict";t.decode=t.parse=a(14),t.encode=t.stringify=a(15)},function(e,t,a){"use strict";function r(e,t){return Object.prototype.hasOwnProperty.call(e,t)}e.exports=function(e,t,a,n){t=t||"&",a=a||"=";var o={};if("string"!=typeof e||0===e.length)return o;var s=/\+/g;e=e.split(t);var l=1e3;n&&"number"==typeof n.maxKeys&&(l=n.maxKeys);var p=e.length;l>0&&p>l&&(p=l);for(var u=0;u<p;++u){var d,h,c,f,m=e[u].replace(s,"%20"),b=m.indexOf(a);b>=0?(d=m.substr(0,b),h=m.substr(b+1)):(d=m,h=""),c=decodeURIComponent(d),f=decodeURIComponent(h),r(o,c)?i(o[c])?o[c].push(f):o[c]=[o[c],f]:o[c]=f}return o};var i=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)}},function(e,t,a){"use strict";function r(e,t){if(e.map)return e.map(t);for(var a=[],r=0;r<e.length;r++)a.push(t(e[r],r));return a}var i=function(e){switch(typeof e){case"string":return e;case"boolean":return e?"true":"false";case"number":return isFinite(e)?e:"";default:return""}};e.exports=function(e,t,a,s){return t=t||"&",a=a||"=",null===e&&(e=void 0),"object"==typeof e?r(o(e),function(o){var s=encodeURIComponent(i(o))+a;return n(e[o])?r(e[o],function(e){return s+encodeURIComponent(i(e))}).join(t):s+encodeURIComponent(i(e[o]))}).join(t):s?encodeURIComponent(i(s))+a+encodeURIComponent(i(e)):""};var n=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)},o=Object.keys||function(e){var t=[];for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.push(a);return t}},function(e,t,a){"use strict";e.exports=function(e){return{popup:!0,shareText:{bg:"cподелÑне",cs:"sdÃlet",da:"del",de:"teilen",en:"share",es:"compartir",fi:"Jaa",fr:"partager",hr:"podijelite",hu:"megosztás",it:"condividi",ja:"å
±æ",ko:"ê³µì í기",nl:"delen",no:"del",pl:"udostÄpnij",pt:"compartilhar",ro:"partajeazÄ",ru:"поделиÑÑÑÑ",sk:"zdieľaÅ¥",sl:"deli",sr:"podeli",sv:"dela",tr:"paylaÅ",zh:"å享"},name:"facebook",faPrefix:"fab",faName:"fa-facebook-f",title:{bg:"Сподели вÑв Facebook",cs:"SdÃlet na Facebooku",da:"Del pÃ¥ Facebook",de:"Bei Facebook teilen",en:"Share on Facebook",es:"Compartir en Facebook",fi:"Jaa Facebookissa",fr:"Partager sur Facebook",hr:"Podijelite na Facebooku",hu:"Megosztás Facebookon",it:"Condividi su Facebook",ja:"ãã§ã¤ã¹ããã¯ä¸ã§å
±æ",ko:"íì´ì¤ë¶ìì ê³µì í기",nl:"Delen op Facebook",no:"Del pÃ¥ Facebook",pl:"UdostÄpnij na Facebooku",pt:"Compartilhar no Facebook",ro:"PartajeazÄ pe Facebook",ru:"ÐоделиÑÑÑÑ Ð½Ð° Facebook",sk:"ZdieľaÅ¥ na Facebooku",sl:"Deli na Facebooku",sr:"Podeli na Facebook-u",sv:"Dela pÃ¥ Facebook",tr:"Facebook'ta paylaÅ",zh:"å¨Facebookä¸å享"},shareUrl:"https://www.facebook.com/sharer/sharer.php?u="+encodeURIComponent(e.getURL())+e.getReferrerTrack()}}},function(e,t,a){"use strict";e.exports=function(e){var t=e.getURL(),a=e.getTitle(),r=e.getOption("lang"),i="Close",n="https://www.facebook.com/plugins/like.php?href="+encodeURIComponent(t)+e.getReferrerTrack(),o=65,s=47,l=103,p='<div><h1 class="dialogtitle">',u=e.getFacebooklikeOptions();switch(r){case"bg":i="Ðлизо";break;case"cs":i="ZavÅÃt";break;case"da":i="Luk";break;case"de":i="SchlieÃen";break;case"es":i="Cerrar";break;case"fi":i="Sulje";break;case"fr":i="Fermer";break;case"hr":i="Zatvoriti";break;case"hu":i="Bezár";break;case"it":i="Chiudi";break;case"ja":i="éãã";break;case"ko":i="ë«ê¸°";break;case"nl":i="Sluiten";break;case"no":i="Lukk";break;case"pl":i="Zamknij";break;case"pt":i="Fechar";break;case"ro":i="Ãnchide";break;case"ru":i="ÐакÑÑÑÑ";break;case"sk":i="ZatvoriÅ¥";break;case"sl":i="Zapri";break;case"sr":i="Zatvori";break;case"sv":i="Stäng";break;case"tr":i="Kapatın";break;case"zh":i="å
³é"}switch(u.layout){case"standard":o=u.show_faces?80:35,s=225,l=450;break;case"box_count":o=65,s=55,l=103;break;case"button_count":o=46,s=90,l=154}void 0===u.width||null===u.width?u.width=l:u.width<s&&(u.width=s),u.appId=u.appId||e.getMeta("fb:app_id")||null;for(var d in u)u.hasOwnProperty(d)&&void 0!==u[d]&&null!==u[d]&&(n+="&"+d+"="+u[d]);return n+="&height="+o,p+=a+'</h1><a class="dialoglink" href="'+t+'">'+t+'</a></div><div class="facebooklike"><iframe src="'+n+'" width="'+u.width+'" height="'+o+'" style="border:none;overflow:hidden" scrolling="no" frameborder="0" allowfullscreen="true" allow="autoplay; clipboard-write; encrypted-media; picture-in-picture; web-share"></iframe></div><div><button class="dialogbutton" onclick="self.close()">'+i+"</button></div>",{popup:!0,shareText:{bg:"Ñ
аÑеÑвам",cs:"to se mi lÃbÃ",da:"synes godt om",de:"gefällt mir",en:"like",es:"me gusta",fi:"tykkää",fr:"jâaime",hr:"sviÄa mi se",hu:"tetszik",it:"mi piace",ja:"ãããï¼",ko:"ì¢ìì",nl:"vind ik leuk",no:"liker",pl:"lubiÄ to!",pt:"gosto",ro:"îmi place",ru:"нÑавиÑÑÑ",sk:"páÄi sa mi to",sl:"vÅ¡eÄ mi je",sr:"ÑвиÑа ми Ñе",sv:"gilla",tr:"beÄen",zh:"èµ"},name:"facebooklike",faPrefix:"fas",faName:"fa-thumbs-up",title:{bg:"ХаÑеÑвам/ÐеÑе не Ñ
аÑеÑвам вÑв Facebook",cs:"To se mi lÃbÃ/už se mi to nelÃbà na Facebooku",da:"Synes godt om/Fjern Synes godt om pÃ¥ Facebook",de:"Gefällt mir/Gefällt mir nicht mehr bei Facebook",en:"Like/Unlike on Facebook",es:"Me gusta/Ya no me gusta en Facebook",fi:"Tykkää/En tykkääkään Facebookissa",fr:"Jâaime/Je nâaime plus sur Facebook",hr:"SviÄa mi se/Ne sviÄa mi se na Facebooku",hu:"Tetszik/Mégsem tetszik a Facebookon",it:"Mi piace/Non mi piace più su Facebook",ja:"ãã§ã¤ã¹ããã¯ä¸ ãããï¼/ããããï¼ããåãæ¶ã",ko:"íì´ì¤ë¶ìì ì¢ìì/ì«ì´í¨",nl:"Vind ik leuk/Vind ik niet meer leuk op Facebook",no:"Liker/Slutt Ã¥ like pÃ¥ Facebook",pl:"LubiÄ to!/Nie lubiÄ na Facebooku",pt:"Gosto/Não gosto no Facebook",ro:"Ãmi place/Nu-mi mai place pe Facebook",ru:"ÐÑавиÑÑÑ/Ðе нÑавиÑÑÑ Ð½Ð° Facebook",sk:"PáÄi sa mi to/ZruÅ¡iÅ¥ PáÄi sa mi to na Facebooku",sl:"VÅ¡eÄ mi je/Ni mi vÅ¡eÄ na Facebooku",sr:"СвиÑа ми Ñе/Ðе ÑвиÑа ми Ñе на ФаÑебоок
2450Ñ",sv:"Gilla/Sluta gilla pÃ¥ Facebook",tr:"Facebook'ta BeÄen/BeÄenmekten Vazgeç",zh:"Facebookä¸çèµ/åæ¶èµ"},shareUrl:"javascript:void(0);",dialogHtml:p,dialogCssUrl:e.getDialogsMediaUrl()+"/"+e.getFacebooklikeCss()}}},function(e,t,a){"use strict";e.exports=function(e){return{popup:!1,shareText:{bg:"cподелÑне",cs:"sdÃlet",da:"del",de:"teilen",en:"share",es:"compartir",fi:"Jaa",fr:"partager",hr:"podijelite",hu:"megosztás",it:"condividi",ja:"å
±æ",ko:"ê³µì í기",nl:"delen",no:"del",pl:"udostÄpnij",pt:"compartilhar",ro:"partajeazÄ",ru:"поделиÑÑÑÑ",sk:"zdieľaÅ¥",sl:"deli",sr:"podeli",sv:"dela",tr:"paylaÅ",zh:"å享"},name:"fediverse",faPrefix:"fab",faName:"fa-mastodon",title:{bg:"Сподели в Fediverse",cs:"SdÃlet na Fediverse",da:"Del pÃ¥ Fediverse",de:"Im Fediverse teilen",en:"Share in Fediverse",es:"Compartir en Fediverse",fi:"Jaa Fediverseissä",fr:"Partager sur Fediverse",hr:"Podijelite na Fediverse",hu:"Megosztás Fediverseen",it:"Condividi su Fediverse",ja:"Fediverseä¸ã§å
±æ",ko:"Fediverseìì ê³µì í기",nl:"Delen op Fediverse",no:"Del pÃ¥ Fediverse",pl:"UdostÄpnij przez Fediverse",pt:"Compartilhar no Fediverse",ro:"PartajeazÄ pe Fediverse",ru:"ÐоделиÑÑÑÑ Ð½Ð° Fediverse",sk:"ZdieľaÅ¥ na Fediverse",sl:"Deli na Fediverse",sr:"Podeli na Fediverse-u",sv:"Dela pÃ¥ Fediverse",tr:"Fediverse'ta payla
2450Å",zh:"å¨Fediverseä¸å享"},shareUrl:"web+mastodon://share?text="+encodeURIComponent(e.getURL())+e.getReferrerTrack()}}},function(e,t,a){"use strict";e.exports=function(e){var t=encodeURIComponent(e.getURL());return{popup:!0,shareText:"flip it",name:"flipboard",faPrefix:"fab",faName:"fa-flipboard",title:{bg:"Сподели в Flipboard",cs:"SdÃlet na Flipboardu",da:"Del pÃ¥ Flipboard",de:"Bei Flipboard teilen",en:"Share on Flipboard",es:"Compartir en Flipboard",fi:"Jaa Flipboardissä",fr:"Partager sur Flipboard",hr:"Podijelite na Flipboardu",hu:"Megosztás Flipboardon",it:"Condividi su Flipboard",ja:"Flipboardä¸ã§å
±æ",ko:"Flipboardìì ê³µì í기",nl:"Delen op Flipboard",no:"Del pÃ¥ Flipboard",pl:"UdostÄpnij na Flipboardu",pt:"Compartilhar no Flipboard",ro:"PartajeazÄ pe Flipboard",ru:"ÐоделиÑÑÑÑ Ð½Ð° Flipboard",sk:"ZdieľaÅ¥ na Flipboardu",sl:"Deli na Flipboardu",sr:"Podeli na Flipboard-u",sv:"Dela pÃ¥ Flipboard",tr:"Flipboard'ta paylaÅ",zh:"å¨Flipboardä¸å享"},shareUrl:"https://share.flipboard.com/bookmarklet/popout?v=2&title="+encodeURIComponent(e.getTitle())+"&url="+t+e.getReferrerTrack()}}},function(e,t,a){"use strict";e.exports=function(e){return{blank:e.getInfoDisplayBlank(),popup:e.getInfoDisplayPopup(),shareText:"Info",name:"info",faPrefix:"fas",faName:"fa-info",title:{bg:"ÐовеÑе инÑоÑмаÑиÑ",cs:"VÃce informacÃ",da:"Flere oplysninger",de:"Weitere Informationen",en:"More information",es:"Más informaciones",fi:"Lisätietoja",fr:"Plus d'informations",hr:"ViÅ¡e informacija",hu:"Több információ",it:"Maggiori informazioni",ja:"詳ããæ
å ±",ko:"ì¶ê° ì ë³´",nl:"Verdere informatie",no:"Mer informasjon",pl:"WiÄcej informacji",pt:"Mais informações",ro:"Mai multe informatii",ru:"ÐолÑÑе инÑоÑмаÑии",sk:"Viac informáciÃ",sl:"VeÄ informacij",sr:"ViÅ¡e informacija",sv:"Mer information",tr:"Daha fazla bilgi",zh:"æ´å¤ä¿¡æ¯"},shareUrl:e.getInfoUrl()}}},function(e,t,a){"use strict";e.exports=function(e){return{popup:!0,shareText:{bg:"cподелÑне",cs:"sdÃlet",da:"del",de:"mitteilen",en:"share",es:"compartir",fi:"Jaa",fr:"partager",hr:"podijelite",hu:"megosztás",it:"condividi",ja:"ã·ã§ã¢",ko:"ê³µì í기",nl:"delen",no:"del",pl:"udostÄpnij",pt:"compartilhar",ro:"distribuiÈi",ru:"поделиÑÑÑÑ",sk:"zdieľaÅ¥",sl:"deli",sr:"podeli",sv:"dela",tr:"paylaÅ",zh:"å享"},name:"linkedin",faPrefix:"fab",faName:"fa-linkedin-in",title:{bg:"Сподели в LinkedIn",cs:"SdÃlet na LinkedIn",da:"Del pÃ¥ LinkedIn",de:"Bei LinkedIn teilen",en:"Share on LinkedIn",es:"Compartir en LinkedIn",fi:"Jaa LinkedInissä",fr:"Partager sur LinkedIn",hr:"Podijelite na LinkedIn",hu:"Megosztás LinkedInen",it:"Condividi su LinkedIn",ja:"LinkedInä¸ã§å
±æ",ko:"LinkedInìì ê³µì í기",nl:"Delen op LinkedIn",no:"Del pÃ¥ LinkedIn",pl:"UdostÄpnij przez LinkedIn",pt:"Compartilhar no LinkedIn",ro:"PartajeazÄ pe LinkedIn",ru:"ÐоделиÑÑÑÑ Ð½Ð° LinkedIn",sk:"ZdieľaÅ¥ na LinkedIn",sl:"Deli na LinkedIn",sr:"Podeli na LinkedIn-u",sv:"Dela pÃ¥ LinkedIn",tr:"LinkedIn'ta paylaÅ",zh:"å¨LinkedInä¸å享"},shareUrl:"https://www.linkedin.com/sharing/share-offsite/?url="+encodeURIComponent(e.getURL())}}},function(e,t,a){"use strict";e.exports=function(e){var t=e.getOption("mailUrl");return 0===t.indexOf("mailto:")&&(t+="?subject="+encodeURIComponent(e.getOption("mailSubject")||e.getTitle()),t+="&body="+encodeURIComponent(e.getOption("mailBody").replace(/\{url\}/i,e.getURL()))),{blank:0===t.indexOf("http"),popup:!1,shareText:{en:"mail",zh:"å享"},name:"mail",faPrefix:"fas",faName:"fa-envelope",title:{bg:"ÐзпÑаÑи по имейл",cs:"Poslat mailem",da:"Sende via e-mail",de:"Per E-Mail versenden",en:"Send by email",es:"Enviar por email",fi:"Lähetä sähköpostitse",fr:"Envoyer par courriel",hr:"PoÅ¡aljite emailom",hu:"Elküldés e-mailben",it:"Inviare via email",ja:"é»åã¡ã¼ã«ã§éä¿¡",ko:"ì´ë©ì¼ë¡ ë³´ë´ê¸°",nl:"Sturen via e-mail",no:"Send via epost",pl:"WyÅlij e-mailem",pt:"Enviar por e-mail",ro:"Trimite prin e-mail",ru:"ÐÑпÑавиÑÑ Ð¿Ð¾ Ñл. поÑÑе",sk:"PoslaÅ¥ e-mailom",sl:"PoÅ¡lji po elektronski poÅ¡ti",sr:"PoÅ¡alji putem email-a",sv:"Skicka via e-post",tr:"E-posta ile gönder",zh:"éè¿çµåé®ä»¶ä¼ é"},shareUrl:t}}},function(e,t,a){"use strict";var r=a(0);e.exports=function(e){var t=e.getTitle(),a=e.getMeta("DC.creator");a.length>0&&(t+=" - "+a);var i=e.getOption("mediaUrl");(!i||i.length<=0)&&(i=e.getMeta("og:image"));var n=r.parse("https://www.pinterest.com/pin/create/link/",!0);return n.query.url=e.getURL(),n.query.media=i,n.query.description=t,delete n.search,{popup:!0,shareText:"pin it",name:"pinterest",faPrefix:"fab",faName:"fa-pinterest-p",title:{bg:"Сподели в Pinterest",cs:"PÅidat na Pinterest",da:"Del pÃ¥ Pinterest",de:"Bei Pinterest pinnen",en:"Pin it on Pinterest",es:"Compartir en Pinterest",fi:"Jaa Pinterestissä",fr:"Partager sur Pinterest",hr:"Podijelite na Pinterest",hu:"Megosztás Pinteresten",it:"Condividi su Pinterest",ja:"Pinterestä¸ã§å
±æ",ko:"Pinterestìì ê³µì í기",nl:"Delen op Pinterest",no:"Del pÃ¥ Pinterest",pl:"UdostÄpnij przez Pinterest",pt:"Compartilhar no Pinterest",ro:"PartajeazÄ pe Pinterest",ru:"ÐоделиÑÑÑÑ Ð½Ð° Pinterest",sk:"ZdieľaÅ¥ na Pinterest",sl:"Deli na Pinterest",sr:"Podeli na Pinterest-u",sv:"Dela pÃ¥ Pinterest",tr:"Pinterest'ta payla
2450Å",zh:"å享è³Pinterest"},shareUrl:r.format(n)+e.getReferrerTrack()}}},function(e,t,a){"use strict";e.exports=function(e){var t=encodeURIComponent(e.getURL());return{popup:!0,shareText:"Pocket",name:"pocket",faPrefix:"fab",faName:"fa-get-pocket",title:{bg:"Ðапазване в Pocket",cs:"Uložit do Pocket",da:"Gem i Pocket",de:"In Pocket speichern",en:"Save to Pocket",es:"Guardar en Pocket",fi:"Tallenna kohtaan Pocket",fr:"Enregistrer dans Pocket",hr:"Spremi u Pocket",hu:'Mentés "Pocket"-be',it:"Salva in Pocket",ja:"ããã±ãããã«ä¿å",ko:"Pocketì ì ì¥",nl:"Opslaan in Pocket",no:"Lagre i Pocket",pl:"Zapisz w Pocket",pt:"Salvar em Pocket",ro:"SalvaÈi în Pocket",ru:"СоÑ
ÑаниÑÑ Ð² Pocket",sk:"UložiÅ¥ do prieÄinka Pocket",sl:"Shrani v Pocket",sr:"SaÄuvaj u Pocket",sv:"Spara till Pocket",tr:"Pocket e kaydet",zh:"ä¿åå°Pocket"},shareUrl:"https://getpocket.com/save?title="+encodeURIComponent(e.getTitle())+"&url="+t+e.getReferrerTrack()}}},function(e,t,a){"use strict";e.exports=function(e){return{name:"print",faPrefix:"fas",faName:"fa-print",popup:!1,shareText:{bg:"",cs:"tlaÄit",da:"",de:"drucken",en:"print",es:"impresión",fi:"",fr:"imprimer",hr:"",hu:"",it:"stampa",ja:"",ko:"",nl:"afdrukken",no:"",pl:"drukuj",pt:"",ro:"",ru:"РаÑпеÑаÑаÑÑ",sk:"",sl:"",sr:"",sv:"",tr:"",zh:""},title:{bg:"",cs:"tlaÄit",da:"",de:"drucken",en:"print",es:"impresión",fi:"",fr:"imprimer",hr:"",hu:"",it:"stampa",ja:"",ko:"",nl:"afdrukken",no:"",pl:"drukuj",pt:"",ro:"",ru:"РаÑпеÑаÑаÑÑ",sk:"",sl:"",sr:"",sv:"",tr:"",zh:""},shareUrl:"javascript:window.print();"}}},function(e,t,a){"use strict";e.exports=function(e){return{popup:!0,shareText:{bg:"cподелÑне",cs:"sdÃlet",da:"del",de:"teilen",en:"share",es:"compartir",fi:"Jaa",fr:"partager",hr:"podijelite",hu:"megosztás",it:"condividi",ja:"å
±æ",ko:"ê³µì í기",nl:"delen",no:"del",pl:"udostÄpnij",pt:"compartilhar",ro:"partajeazÄ",ru:"поделиÑÑÑÑ",sk:"zdieľaÅ¥",sl:"deli",sr:"podeli",sv:"dela",tr:"paylaÅ",zh:"å享"},name:"qzone",faPrefix:"fab",faName:"fa-qq",title:{bg:"Сподели в Qzone",cs:"SdÃlet na Qzone",da:"Del pÃ¥ Qzone",de:"Bei Qzone teilen",en:"Share on Qzone",es:"Compartir en Qzone",fi:"Jaa Qzoneissä",fr:"Partager sur Qzone",hr:"Podijelite na Qzone",hu:"Megosztás Qzone",it:"Condividi su Qzone",ja:"Qzoneä¸ã§å
±æ",ko:"Qzoneìì ê³µì í기",nl:"Delen op Qzone",no:"Del pÃ¥ Qzone",pl:"UdostÄpnij przez Qzone",pt:"Compartilhar no Qzone",ro:"PartajeazÄ pe Qzone",ru:"ÐоделиÑÑÑÑ Ð½Ð° Qzone",sk:"ZdieľaÅ¥ na Qzone",sl:"Deli na Qzone",sr:"Podeli na Qzone-u",sv:"Dela pÃ¥ Qzone",tr:"Qzone'ta paylaÅ",zh:"å享è³QQ空é´"},shareUrl:"https://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url="+encodeURIComponent(e.getURL())+"&title="+e.getTitle()+e.getReferrerTrack()}}},function(e,t,a){"use strict";e.exports=function(e){var t=encodeURIComponent(e.getURL()),a=encodeURIComponent(e.getTitle());return""!==a&&(a="&title="+a),{popup:!0,shareText:{bg:"cподелÑне",cs:"sdÃlet",da:"del",de:"teilen",en:"share",es:"compartir",fi:"Jaa",fr:"partager",hr:"podijelite",hu:"megosztás",it:"condividi",ja:"å
±æ",ko:"ê³µì í기",nl:"delen",no:"del",pl:"udostÄpnij",pt:"compartilhar",ro:"partajeazÄ",ru:"поделиÑÑÑÑ",sk:"zdieľaÅ¥",sl:"deli",sr:"podeli",sv:"dela",tr:"paylaÅ",zh:"å享"},name:"reddit",faPrefix:"fab",faName:"fa-reddit-alien",title:{bg:"Сподели в Reddit",cs:"SdÃlet na Redditu",da:"Del pÃ¥ Reddit",de:"Bei Reddit teilen",en:"Share on Reddit",es:"Compartir en Reddit",fi:"Jaa Redditissä",fr:"Partager sur Reddit",hr:"Podijelite na Reddit",hu:"Megosztás Redditen",it:"Condividi su Reddit",ja:"Redditä¸ã§å
±æ",ko:"Redditìì ê³µì í기",nl:"Delen op Reddit",no:"Del pÃ¥ Reddit",pl:"UdostÄpnij przez Reddit",pt:"Compartilhar no Reddit",ro:"PartajeazÄ pe Reddit",ru:"ÐоделиÑÑÑÑ Ð½Ð° Reddit",sk:"ZdieľaÅ¥ na Reddit",sl:"Deli na Reddit",sr:"Podeli na Reddit-u",sv:"Dela pÃ¥ Reddit",tr:"Reddit'ta paylaÅ",zh:"å享è³Reddit"},shareUrl:"https://reddit.com/submit?url="+t+a+e.getReferrerTrack()}}},function(e,t,a){"use strict";e.exports=function(e){var t=encodeURIComponent(e.getURL()),a=encodeURIComponent(e.getTitle());return""!==a&&(a="&title="+a),{popup:!0,shareText:{bg:"cподелÑне",cs:"sdÃlet",da:"del",de:"teilen",en:"share",es:"compartir",fi:"Jaa",fr:"partager",hr:"podijelite",hu:"megosztás",it:"condividi",ja:"å
±æ",ko:"ê³µì í기",nl:"delen",no:"del",pl:"udostÄpnij",pt:"compartilhar",ro:"partajeazÄ",ru:"поделиÑÑÑÑ",sk:"zdieľaÅ¥",sl:"deli",sr:"podeli",sv:"dela",tr:"paylaÅ",zh:"å享"},name:"stumbleupon",faPrefix:"fab",faName:"fa-stumbleupon",title:{bg:"Сподели в Stumbleupon",cs:"SdÃlet na Stumbleuponu",da:"Del pÃ¥ Stumbleupon",de
2450:"Bei Stumbleupon teilen",en:"Share on Stumbleupon",es:"Compartir en Stumbleupon",fi:"Jaa Stumbleuponissä",fr:"Partager sur Stumbleupon",hr:"Podijelite na Stumbleupon",hu:"Megosztás Stumbleupon",it:"Condividi su Stumbleupon",ja:"Stumbleuponä¸ã§å
±æ",ko:"Stumbleuponìì ê³µì í기",nl:"Delen op Stumbleupon",no:"Del pÃ¥ Stumbleupon",pl:"UdostÄpnij przez Stumbleupon",pt:"Compartilhar no Stumbleupon",ro:"PartajeazÄ pe Stumbleupon",ru:"ÐоделиÑÑÑÑ Ð½Ð° Stumbleupon",sk:"ZdieľaÅ¥ na Stumbleupon",sl:"Deli na Stumbleupon",sr:"Podeli na Stumbleupon-u",sv:"Dela pÃ¥ Stumbleupon",tr:"Stumbleupon'ta paylaÅ",zh:"å享è³Stumbleupon"},shareUrl:"https://www.stumbleupon.com/submit?url="+t+a+e.getReferrerTrack()}}},function(e,t,a){"use strict";e.exports=function(e){return{popup:!0,shareText:{bg:"cподелÑне",cs:"sdÃlet",da:"del",de:"teilen",en:"share",es:"compartir",fi:"Jaa",fr:"partager",hr:"podijelite",hu:"megosztás",it:"condividi",ja:"å
±æ",ko:"ê³µì í기",nl:"delen",no:"del",pl:"udostÄpnij",pt:"compartilhar",ro:"partajeazÄ",ru:"поделиÑÑÑÑ",sk:"zdieľaÅ¥",sl:"deli",sr:"podeli",sv:"dela",tr:"paylaÅ",zh:"å享"},name:"telegram",faPrefix:"fab",faName:"fa-telegram",title:{bg:"Сподели в Telegram",cs:"SdÃlet na Telegramu",da:"Del pÃ¥ Telegram",de:"Bei Telegram teilen",en:"Share on Telegram",es:"Compartir en Telegram",fi:"Jaa Telegramissä",fr:"Partager sur Telegram",hr:"Podijelite na Telegram",hu:"Megosztás Telegramen",it:"Condividi su Telegram",ja:"Telegramä¸ã§å
±æ",ko:"Telegramìì ê³µì í기",nl:"Delen op Telegram",no:"Del pÃ¥ Telegram",pl:"UdostÄpnij przez Telegram",pt:"Compartilhar no Telegram",ro:"PartajeazÄ pe Telegram",ru:"ÐоделиÑÑÑÑ Ð½Ð° Telegram",sk:"ZdieľaÅ¥ na Telegram",sl:"Deli na Telegram",sr:"Podeli na Telegram-u",sv:"Dela pÃ¥ Telegram",tr:"Telegram'ta paylaÅ",zh:"å¨Telegramä¸å享"},shareUrl:"https://t.me/share/url?url="+encodeURIComponent(e.getURL())+e.getReferrerTrack()}}},function(e,t,a){"use strict";e.exports=function(e){return{popup:!0,shareText:{bg:"cподелÑне",cs:"sdÃlet",da:"del",de:"teilen",en:"share",es:"compartir",fi:"Jaa",fr:"partager",hr:"podijelite",hu:"megosztás",it:"condividi",ja:"å
±æ",ko:"ê³µì í기",nl:"delen",no:"del",pl:"udostÄpnij",pt:"compartilhar",ro:"partajeazÄ",ru:"поделиÑÑÑÑ",sk:"zdieľaÅ¥",sl:"deli",sr:"podeli",sv:"dela",tr:"paylaÅ",zh:"å享"},name:"tencent-weibo",faPrefix:"fab",faName:"fa-tencent-weibo",title:{bg:"Сподели в tencent weibo",cs:"SdÃlet na tencent weibo",da:"Del pÃ¥ tencent weibo",de:"Bei tencent weibo teilen",en:"Share on tencent weibo",es:"Compartir en tencent weibo",fi:"Jaa tencent weiboissä",fr:"Partager sur tencent weibo",hr:"Podijelite na tencent weibo",hu:"Megosztás tencent weiboen",it:"Condividi su tencent weibo",ja:"Tencent weiboä¸ã§å
±æ",ko:"Tencent weiboìì ê³µì í기",nl:"Delen op tencent weibo",no:"Del pÃ¥ tencent weibo",pl:"UdostÄpnij przez tencent weibo",pt:"Compartilhar no tencent weibo",ro:"PartajeazÄ pe tencent weibo",ru:"ÐоделиÑÑÑÑ Ð½Ð° tencent weibo",sk:"ZdieľaÅ¥ na tencent weibo",sl:"Deli na tencent weibo",sr:"Podeli na tencent weibo-u",sv:"Dela pÃ¥ tencent weibo",tr:"Tencent weibo'ta paylaÅ",zh:"å享è³è
¾è®¯å¾®å"},shareUrl:"https://v.t.qq.com/share/share.php?url="+encodeURIComponent(e.getURL())+"&title="+e.getTitle()+e.getReferrerTrack()}}},function(e,t,a){"use strict";e.exports=function(e){var t=encodeURIComponent(e.getURL()),a=e.getTitle();return{popup:!1,shareText:{bg:"cподелÑне",cs:"sdÃlet",da:"del",de:"teilen",en:"share",es:"compartir",fi:"Jaa",fr:"partager",hr:"podijelite",hu:"megosztás",it:"condividi",ja:"å
±æ",ko:"ê³µì í기",nl:"delen",no:"del",pl:"udostÄpnij",pt:"compartilhar",ro:"partajeazÄ",ru:"поделиÑÑÑÑ",sk:"zdieľaÅ¥",sl:"deli",sr:"podeli",sv:"dela",tr:"paylaÅ",zh:"å享"},name:"threema",faPrefix:"fas",faName:"fa-lock",title:{bg:"Сподели в Threema",cs:"SdÃlet na Threema",da:"Del pÃ¥ Threema",de:"Bei Threema teilen",en:"Share on Threema",es:"Compartir en Threema",fi:"Jaa Threemaissä",fr:"Partager sur Threema",hr:"Podijelite na Threema",hu:"Megosztás Threemaen",it:"Condividi su Threema",ja:"Threemaä¸ã§å
±æ",ko:"Threemaìì ê³µì í기",nl:"Delen op Threema",no:"Del pÃ¥ Threema",pl:"UdostÄpnij przez Threema",pt:"Compartilhar no Threema",ro:"PartajeazÄ pe Threema",ru:"ÐоделиÑÑÑÑ Ð½Ð° Threema",sk:"ZdieľaÅ¥ na Threema",sl:"Deli na Threema",sr:"Podeli na Threema-u",sv:"Dela pÃ¥ Threema",tr:"Threema'ta payla
2450Å",zh:"å¨Threemaä¸å享"},shareUrl:"threema://compose?text="+encodeURIComponent(a)+"%20"+t+e.getReferrerTrack()}}},function(e,t,a){"use strict";e.exports=function(e){return{popup:!0,shareText:{bg:"cподелÑне",cs:"sdÃlet",da:"del",de:"teilen",en:"share",es:"compartir",fi:"Jaa",fr:"partager",hr:"podijelite",hu:"megosztás",it:"condividi",ja:"å
±æ",ko:"ê³µì í기",nl:"delen",no:"del",pl:"udostÄpnij",pt:"compartilhar",ro:"partajeazÄ",ru:"поделиÑÑÑÑ",sk:"zdieľaÅ¥",sl:"deli",sr:"podeli",sv:"dela",tr:"paylaÅ",zh:"å享"},name:"tumblr",faPrefix:"fab",faName:"fa-tumblr",title:{bg:"Сподели в tumblr",cs:"SdÃlet na tumblru",da:"Del pÃ¥ tumblr",de:"Bei tumblr teilen",en:"Share on tumblr",es:"Compartir en tumblr",fi:"Jaa tumblrissä",fr:"Partager sur tumblr",hr:"Podijelite na tumblr",hu:"Megosztás tumblren",it:"Condividi su tumblr",ja:"tumblrä¸ã§å
±æ",ko:"tumblrìì ê³µì í기",nl:"Delen op tumblr",no:"Del pÃ¥ tumblr",pl:"UdostÄpnij przez tumblr",pt:"Compartilhar no tumblr",ro:"PartajeazÄ pe tumblr",ru:"ÐоделиÑÑÑÑ Ð½Ð° tumblr",sk:"ZdieľaÅ¥ na tumblr",sl:"Deli na tumblr",sr:"Podeli na tumblr-u",sv:"Dela pÃ¥ tumblr",tr:"tumblr'ta paylaÅ",zh:"å¨tumblrä¸å享"},shareUrl:"https://tumblr.com/widgets/share/tool?canonicalUrl="+encodeURIComponent(e.getURL())+e.getReferrerTrack()}}},function(e,t,a){"use strict";var r=a(0),i=function(e,t){var a=document.createElement("div"),r=document.createTextNode(e);a.appendChild(r);var i=a.textContent;if(i.length<=t)return e;var n=i.substring(0,t-1).lastIndexOf(" ");return i=i.substring(0,n)+"â¦"};e.exports=function(e){var t=r.parse("https://twitter.com/intent/tweet",!0),a=e.getTitle();t.query.url=e.getURL(),null!==e.options.twitterVia&&(t.query.via=e.options.twitterVia);var n=280-(t.query.via||"").length-(t.query.url||"").length;return t.query.text=i(a,n),delete t.search,{popup:!0,shareText:{de:"posten",en:"post",ja:"æç¨¿",ko:"ê²ì물",ru:"ÐоÑÑÑ",sr:"poÅ¡ta",zh:"èä½"},name:"twitter",faPrefix:"fab fa-brands",faName:"fa-x-twitter",title:{bg:"Сподели в X",cs:"SdÃlet na X",da:"Del pÃ¥ X",de:"Bei X teilen",en:"Share on X",es:"Compartir en X",fi:"Jaa X",fr:"Partager sur X",hr:"Podijelite na X",hu:"Megosztás X",it:"Condividi su X",ja:"Xã§å
±æãã",ko:"Xìì ê³µì ",nl:"Delen op X",no:"Del pÃ¥ X",pl:"UdostÄpnij na X",pt:"Compartilhar no X",ro:"PartajeazÄ pe X",ru:"ÐоделиÑÑÑÑ Ð½Ð° X",sk:"ZdieľaÅ¥ na X",sl:"Deli na X",sr:"Podeli na X-u",sv:"Dela pÃ¥ X",tr:"X'da paylaÅ",zh:"å¨Xä¸å享"},shareUrl:r.format(t)+e.getReferrerTrack()}}},function(e,t,a){"use strict";e.exports=function(e){return{popup:!0,shareText:{bg:"cподелÑне",cs:"sdÃlet",da:"del",de:"teilen",en:"share",es:"compartir",fi:"Jaa",fr:"partager",hr:"podijelite",hu:"megosztás",it:"condividi",ja:"å
±æ",ko:"ê³µì í기",nl:"delen",no:"del",pl:"udostÄpnij",pt:"compartilhar",ro:"partajeazÄ",ru:"поделиÑÑÑÑ",sk:"zdieľaÅ¥",sl:"deli",sr:"podeli",sv:"dela",tr:"paylaÅ",zh:"å享"},name:"vk",faPrefix:"fab",faName:"fa-vk",title:{bg:"Сподели вÑв VK",cs:"SdÃlet na VKu",da:"Del pÃ¥ VK",de
2450:"Bei VK teilen",en:"Share on VK",es:"Compartir en VK",fi:"Jaa VKissa",fr:"Partager sur VK",hr:"Podijelite na VKu",hu:"Megosztás VKon",it:"Condividi su VK",ja:"ãã§ã¤ã¹ããã¯ä¸ã§å
±æ",ko:"íì´ì¤ë¶ìì ê³µì í기",nl:"Delen op VK",no:"Del pÃ¥ VK",pl:"UdostÄpnij na VKu",pt:"Compartilhar no VK",ro:"PartajeazÄ pe VK",ru:"ÐоделиÑÑÑÑ Ð½Ð° ÐÐонÑакÑе",sk:"ZdieľaÅ¥ na VKu",sl:"Deli na VKu",sr:"Podeli na VK-u",sv:"Dela pÃ¥ VK",tr:"VK'ta paylaÅ",zh:"å¨VKä¸å享"},shareUrl:"https://vk.com/share.php?url="+encodeURIComponent(e.getURL())+e.getReferrerTrack()}}},function(e,t,a){"use strict";e.exports=function(e){return{popup:!0,shareText:{bg:"cподелÑне",cs:"sdÃlet",da:"del",de:"teilen",en:"share",es:"compartir",fi:"Jaa",fr:"partager",hr:"podijelite",hu:"megosztás",it:"condividi",ja:"å
±æ",ko:"ê³µì í기",nl:"delen",no:"del",pl:"udostÄpnij",pt:"compartilhar",ro:"partajeazÄ",ru:"поделиÑÑÑÑ",sk:"zdieľaÅ¥",sl:"deli",sr:"podeli",sv:"dela",tr:"paylaÅ",zh:"å享"},name:"weibo",faPrefix:"fab",faName:"fa-weibo",title:{bg:"Сподели в weibo",cs:"SdÃlet na weibo",da:"Del pÃ¥ weibo",de:"Bei weibo teilen",en:"Share on weibo",es:"Compartir en weibo",fi:"Jaa weiboissä",fr:"Partager sur weibo",hr:"Podijelite na weibo",hu:"Megosztás weiboen",it:"Condividi su weibo",ja:"Weiboä¸ã§å
±æ",ko:"Weiboìì ê³µì í기",nl:"Delen op weibo",no:"Del pÃ¥ weibo",pl:"UdostÄpnij przez weibo",pt:"Compartilhar no weibo",ro:"PartajeazÄ pe weibo",ru:"ÐоделиÑÑÑÑ Ð½Ð° weibo",sk:"ZdieľaÅ¥ na weibo",sl:"Deli na weibo",sr:"Podeli na weibo-u",sv:"Dela pÃ¥ weibo",tr:"Weibo'ta paylaÅ",zh:"åäº«è³æ°æµªå¾®å"},shareUrl:"https://service.weibo.com/share/share.php?url="+encodeURIComponent(e.getURL())+"&title="+e.getTitle()+e.getReferrerTrack()}}},function(e,t,a){"use strict";e.exports=function(e){var t=encodeURIComponent(e.getURL()),a=e.getTitle();return{popup:!0,shareText:{bg:"cподелÑне",cs:"sdÃlet",da:"del",de:"teilen",en:"share",es:"compartir",fi:"Jaa",fr:"partager",hr:"podijelite",hu:"megosztás",it:"condividi",ja:"å
±æ",ko:"ê³µì í기",nl:"delen",no:"del",pl:"udostÄpnij",pt:"compartilhar",ro:"partajeazÄ",ru:"поделиÑÑÑÑ",sk:"zdieľaÅ¥",sl:"deli",sr:"podeli",sv:"dela",tr:"paylaÅ",zh:"å享"},name:"whatsapp",faPrefix:"fab",faName:"fa-whatsapp",title:{bg:"Сподели в Whatsapp",cs:"SdÃlet na Whatsappu",da:"Del pÃ¥ Whatsapp",de:"Bei Whatsapp teilen",en:"Share on Whatsapp",es:"Compartir en Whatsapp",fi:"Jaa WhatsAppissä",fr:"Partager sur Whatsapp",hr:"Podijelite na Whatsapp",hu:"Megosztás WhatsAppen",it:"Condividi su Whatsapp",ja:"Whatsappä¸ã§å
±æ",ko:"Whatsappìì ê³µì í기",nl:"Delen op Whatsapp",no:"Del pÃ¥ Whatsapp",pl:"UdostÄpnij przez WhatsApp",pt:"Compartilhar no Whatsapp",ro:"PartajeazÄ pe Whatsapp",ru:"ÐоделиÑÑÑÑ Ð½Ð° Whatsapp",sk:"ZdieľaÅ¥ na Whatsapp",sl:"Deli na Whatsapp",sr:"Podeli na WhatsApp-u",sv:"Dela pÃ¥ Whatsapp",tr:"Whatsapp'ta paylaÅ",zh:"å¨Whatsappä¸å享"},shareUrl:"https://api.whatsapp.com/send?text="+encodeURIComponent(a)+"%20"+t+e.getReferrerTrack()}}},function(e,t,a){"use strict";e.exports=function(e){return{popup:!0,shareText:{bg:"cподелÑне",cs:"sdÃlet",da:"del",de:"teilen",en:"share",es:"compartir",fi:"Jaa",fr:"partager",hr:"podijelite",hu:"megosztás",it:"condividi",ja:"å
±æ",ko:"ê³µì í기",nl:"delen",no:"del",pl:"udostÄpnij",pt:"compartilhar",ro:"partajeazÄ",ru:"поделиÑÑÑÑ",sk:"zdieľaÅ¥",sl:"deli",sr:"podeli",sv:"dela",tr:"paylaÅ",zh:"å享"},name:"xing",faPrefix:"fab",faName:"fa-xing",title:{bg:"Сподели в XING",cs:"SdÃlet na XINGu",da:"Del pÃ¥ XING",de:"Bei XING teilen",en:"Share on XING",es:"Compartir en XING",fi:"Jaa XINGissä",fr:"Partager sur XING",hr:"Podijelite na XING",hu:"Megosztás XINGen",it:"Condividi su XING",ja:"XINGä¸ã§å
±æ",ko:"XINGìì ê³µì í기",nl:"Delen op XING",no:"Del pÃ¥ XING",pl:"UdostÄpnij przez XING",pt:"Compartilhar no XING",ro:"PartajeazÄ pe XING",ru:"ÐоделиÑÑÑÑ Ð½Ð° XING",sk:"ZdieľaÅ¥ na XING",sl:"Deli na XING",sr:"Podeli na XING-u",sv:"Dela pÃ¥ XING",tr:"XING'ta payla
2450Å",zh:"å享è³XING"},shareUrl:"https://www.xing.com/spi/shares/new?url="+encodeURIComponent(e.getURL())+e.getReferrerTrack()}}}]);
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.