{"version":3,"sources":["webpack:///blog.min.js","webpack:///../../node_modules/good-listener/src/is.js","webpack:///external \"jQuery\"","webpack:///./modules/blog/list/contest/index.js","webpack:///./core/widgets/notifier.js","webpack:///./core/utils/logger.js","webpack:///external \"ko\"","webpack:///../../node_modules/delegate/src/closest.js","webpack:///./lib/adaptivefontsize/index.js","webpack:///./modules/blog/page/article.js","webpack:///./core/utils/url.js","webpack:///../../node_modules/@fancyapps/fancybox/dist/jquery.fancybox.js","webpack:///../vendor/soon-countdown/soon.1.9.0.min.js?undefined","webpack:///./modules/blog/sidebar/index.js","webpack:///./modules/blog/page/sale.js","webpack:///../../node_modules/select/src/select.js","webpack:///./modules/blog/pagecomments/index.js","webpack:///./modules/blog/pagecomments/pagecomments.js","webpack:///../../node_modules/good-listener/src/listen.js","webpack:///./modules/blog/pagecomments/newcomment.js","webpack:///../vendor/cookie/jquery.cookie.js?undefined","webpack:///./core/utils/globals.js","webpack:///./modules/blog/list/sale/index.js","webpack:///external \"_\"","webpack:///./core/utils/location.js","webpack:///./modules/blog/list/article/index.js","webpack:///./core/utils/utils.js","webpack:///./modules/blog/common/model/salemodel.js","webpack:///./core/widgets/popup.js","webpack:///./core/utils/var.js","webpack:///../vendor/urlconverter/jquery.urlconverter.js?undefined","webpack:///../../node_modules/tiny-emitter/index.js","webpack:///./core/widgets/dialog.js","webpack:///../vendor/cookie/jquery.cookie.js","webpack:///../vendor/urlconverter/jquery.urlconverter.js","webpack:///./core/widgets/loading.js","webpack:///./modules/blog/common/adminpanel.js","webpack:///./modules/blocks/last_comments/lastcomments.js","webpack:///./modules/blog/page/contest.js","webpack:///../../node_modules/script-loader/addScript.js","webpack:///external \"toastr\"","webpack:///../../node_modules/clipboard/lib/clipboard.js","webpack:///../vendor/soon-countdown/soon.1.9.0.min.js","webpack:///../../node_modules/clipboard/lib/clipboard-action.js","webpack:///./lib/fancybox/index.js","webpack:///./lib/zinfinitescroll/index.js","webpack:///../../node_modules/delegate/src/delegate.js"],"names":["zde","webpackJsonpzde_modules__name_","/Q8n","module","exports","node","value","undefined","HTMLElement","nodeType","nodeList","type","Object","prototype","toString","call","length","string","String","fn","0iPh","jQuery","16","__webpack_require__","243j","__webpack_exports__","init","$list","$","__WEBPACK_IMPORTED_MODULE_0__sidebar_index__","heightTarget","zInfiniteScroll","selector","loading","maxAutoloadPages","totalCount","data","fetch","page","callback","category","get","done","response","$blocks","filter","defineProperty","2uje","_classCallCheck","instance","Constructor","TypeError","d","Notifier","__WEBPACK_IMPORTED_MODULE_0_lib_toastr__","__WEBPACK_IMPORTED_MODULE_0_lib_toastr___default","n","__WEBPACK_IMPORTED_MODULE_1__utils_utils__","__WEBPACK_IMPORTED_MODULE_2__utils_var__","_extends","assign","target","i","arguments","source","key","hasOwnProperty","_createClass","defineProperties","props","descriptor","enumerable","configurable","writable","protoProps","staticProps","t","window","top","toastr","a","this","message","title","options","timeOut","error","jqXHR","textStatus","errorThrown","info","success","warning","5wqq","newLogger","name","MyLogger","defaultLevel","_slicedToArray","sliceIterator","arr","_arr","_n","_d","_e","_s","_i","Symbol","iterator","next","push","err","Array","isArray","LEVELS","IS_PRODUCTION","level","_name","_level","_dummy","setLevel","_this","Number","isInteger","indexOf","bind","condition","methodName","console","bindSimple","forEach","method","lvl","args","label","callable","time","result","timeEnd","profile","profileEnd","6mWo","7fPx","ko","8ZSj","closest","element","DOCUMENT_NODE_TYPE","matches","parentNode","Element","proto","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","9Aqb","addDelta","delta","min","max","newValue","calculateFontSize","$block","maxWidth","maxHeight","fontSize","minFontSize","maxFontSize","isPercent","newFontSize","setFontSize","width","height","css","isWindowLoaded","one","log","adaptiveFontSize","o","direction","parentSelector","setIfLoaded","fixOnResize","fixOnLoad","each","eventHandler","process","getParent","parents","first","parent","contains","document","off","$parent","parseFloat","Math","floor","initial","isFunction","on","F0bM","__WEBPACK_IMPORTED_MODULE_0__sale__","__WEBPACK_IMPORTED_MODULE_1__contest__","__WEBPACK_IMPORTED_MODULE_2__article__","FE6W","comments","logger","__WEBPACK_IMPORTED_MODULE_3__pagecomments__","setTimeout","__WEBPACK_IMPORTED_MODULE_4__sidebar__","__WEBPACK_IMPORTED_MODULE_1__sale__","openTablePopup","click","src","attr","fancybox","open","baseClass","thumbs","hideOnClose","touch","vertical","buttons","animationEffect","transitionEffect","clickContent","clickOutside","__WEBPACK_IMPORTED_MODULE_0__core_utils_logger__","FYi7","siteUrl","url","_len","more","_key","isAbsoluteUrlRegex","test","joinPath","apply","concat","BASE_URL","_len2","values","_key2","query","queryString","fragment","components","processValue","v","__WEBPACK_IMPORTED_MODULE_0_lib_underscore___default","isObject","__WEBPACK_IMPORTED_MODULE_2__var__","trim","substr","replace","join","isEmpty","q","buildQuery","isAbsolute","queryData","__WEBPACK_IMPORTED_MODULE_1__location__","highlightUrls","text","maxlength","s","st","slice","prefix","val","startsWith","postfix","endsWith","UrlParser","UrlBuilder","__WEBPACK_IMPORTED_MODULE_0_lib_underscore__","_typeof","obj","constructor","base_url","_a","createElement","href","origin","protocol","host","hostname","port","pathname","search","hash","path","_protocol","_host","_port","_path","_query","_hash","set","GfF8","_run","e","$target","currentTarget","opts","index","items","isDefaultPrevented","preventDefault","defaults","loop","margin","gutter","keyboard","arrows","infobar","toolbar","idleTime","smallBtn","protect","modal","image","preload","ajax","settings","iframe","tpl","scrolling","defaultType","animationDuration","zoomOpacity","transitionDuration","slideClass","baseTpl","spinnerTpl","errorTpl","btnTpl","download","zoom","close","arrowLeft","arrowRight","parentEl","autoFocus","backFocus","trapFocus","fullScreen","autoStart","momentum","media","slideShow","speed","axis","wheel","onInit","noop","beforeLoad","afterLoad","beforeShow","afterShow","beforeClose","afterClose","onActivate","onDeactivate","current","event","clickSlide","dblclickContent","dblclickSlide","dblclickOutside","mobile","lang","i18n","en","CLOSE","NEXT","PREV","ERROR","PLAY_START","PLAY_STOP","FULL_SCREEN","THUMBS","DOWNLOAD","SHARE","ZOOM","de","$W","$D","called","isQuery","requestAFrame","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","transitionEnd","el","transitions","transition","OTransition","MozTransition","WebkitTransition","style","forceRedraw","$el","offsetHeight","FancyBox","content","self","extend","isMobile","id","group","currIndex","parseInt","prevIndex","prevPos","currPos","firstRun","createGroup","$lastFocus","activeElement","blur","slides","$scrollDiv","$container","buttonStr","firstItem","firstItemOpts","scrollbarWidth","scrollTop","scrollLeft","getInstance","addClass","navigator","userAgent","MSStream","body","scrollHeight","innerHeight","appendTo","offsetWidth","clientWidth","remove","append","translate","$refs","container","item","find","trigger","activate","jumpTo","str","match","makeArray","$item","found","srcParts","isPlainObject","$orig","videoFormat","charAt","$thumb","caption","split","shift","inArray","addEvents","removeEvents","stopPropagation","previous","isScaledDown","originalEvent","update","stage","hide","show","isClosing","hasClass","is","has","focus","keycode","keyCode","which","idleSecondsCounter","isIdle","showControls","idleInterval","setInterval","isDragging","hideControls","clearInterval","duration","pos","slide","canvasWidth","currentPos","transitionProps","groupLen","isAnimating","createSlide","updateControls","getTranslate","$slide","isMoved","left","forcedDuration","isNumeric","removeClass","loadSlide","stop","round","animate","removeAttr","complete","children","isLoaded","revealContent","isComplete","updateSlide","scaleToActual","x","y","imgPos","posX","posY","scaleX","scaleY","$what","$content","canvasHeight","newImgWidth","newImgHeight","hasError","updateCursor","SlideShow","isActive","scaleToFit","end","getFitPos","minRatio","imgWidth","imgHeight","setTranslate","centerSlide","opacity","nextWidth","nextHeight","isZoomable","fitPos","rez","canPan","abs","ajaxLoad","isLoading","setImage","setIframe","setContent","setError","showLoading","abort","temp","pxRatio","windowWidth","srcset","devicePixelRatio","innerWidth","map","ret","substring","sort","b","j","thumb","$ghost","setBigImage","$img","$image","clearTimeout","timouts","naturalWidth","naturalHeight","hideLoading","readyState","$iframe","Date","getTime","isReady","scrollWidth","$contents","$body","$wrap","frameWidth","frameHeight","contents","ignore","contentWindow","documentElement","ceil","outerWidth","outerHeight","prepend","empty","$placeholder","insertAfter","html","after","$smallBtn","$spinner","button","effect","effectClassName","start","getThumbPos","slidePos","thumbPos","offset","ownerDocument","elementRect","getBoundingClientRect","parentRects","parentElement","every","parentRect","visiblePixelX","right","visiblePixelY","bottom","siblings","prev","isVisible","cleanUp","unshift","force","$caption","isHiddenControls","prop","toggleClass","toggleControls","version","command","all","destroy","createTouch","use3d","div","getComputedStyle","getPropertyValue","documentMode","matrix","eq","transRegex","transRez","exec","position","transform","to","leaveAnimationName","propertyName","format","params","param","youtube","matcher","autoplay","autohide","fs","rel","hd","wmode","enablejsapi","html5","paramPlace","vimeo","show_title","show_byline","show_portrait","fullscreen","api","metacafe","dailymotion","additionalInfos","vine","instagram","gmap_place","gmap_search","urlParams","paramObj","providerName","providerOpts","m","p","decodeURIComponent","contentProvider","provider","cancelAFrame","cancelAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","oCancelAnimationFrame","pointers","touches","changedTouches","pageX","pageY","clientX","clientY","distance","point2","point1","what","sqrt","pow","isClickable","onclick","atts","attributes","nodeName","hasScrollbars","overflowY","overflowX","clientHeight","horizontal","isScrollable","Guestures","$bg","bg","$stage","proxy","ontouchstart","isTouchDevice","realPoints","startPoints","startEvent","canTap","isPanning","isSwiping","isZooming","isScrolling","sliderStartPos","sliderLastPos","contentStartPos","contentLastPos","startTime","distanceX","distanceY","addEventListener","onscroll","centerPointStartX","centerPointStartY","percentageOfImageAtPinchPointX","percentageOfImageAtPinchPointY","startDistanceBetweenFingers","ontouchmove","newPoints","onSwipe","onPan","onZoom","angle","swiping","requestId","atan2","PI","inTransition","limitMovement","minTranslateX","minTranslateY","maxTranslateX","maxTranslateY","newOffsetX","newOffsetY","currentOffsetX","currentOffsetY","currentWidth","currentHeight","limitPosition","newWidth","newHeight","endDistanceBetweenFingers","pinchRatio","translateFromZoomingX","translateFromZoomingY","centerPointEndX","centerPointEndY","translateFromTranslatingX","translateFromTranslatingY","newPos","ontouchend","dMs","panning","zooming","endPoints","removeEventListener","onTap","velocityX","velocityY","speedX","endPanning","endZooming","endSwiping","len","reset","where","tapX","tapY","action","addBack","tapped","timer","$button","toggle","clear","onInit.fb","beforeShow.fb","afterShow.fb","afterKeydown.fb","keypress","beforeClose.fb onDeactivate.fb","hidden","fnMap","FullScreen","request","elem","requestFullscreen","ALLOW_KEYBOARD_INPUT","exit","exitFullscreen","isFullscreen","Boolean","fullscreenElement","enabled","fullscreenEnabled","beforeClose.fb","fullscreenchange","FancyThumbs","$grid","Thumbs","second","create","list","widthRatio","heightRatio","thumbWidth","thumbHeight","margin-top","margin-left","escapeHtml","entityMap","&","<",">","\"","'","/","`","=","share","f","location","encodeURIComponent","parseUrl","pop","gallery","triggerFromUrl","escapeSelector","shouldCreateHistory","getGalleryID","sel","ch","asCodePoint","charCodeAt","currentHash","timerID","origHash","history","replaceState","prevTime","currTime","deltaY","deltaX","wheelDelta","detail","HH+/","J9kM","__WEBPACK_IMPORTED_MODULE_1__blocks_last_comments_lastcomments__","commentsType","toggleFilterClear","__WEBPACK_IMPORTED_MODULE_0_jquery___default","change","cookie","expires","$this","$checkBox","checked","__WEBPACK_IMPORTED_MODULE_2__core_utils_globals__","categories","arrIndex","splice","blogUrl","removeCookie","__WEBPACK_IMPORTED_MODULE_0_jquery__","Jkdx","_possibleConstructorReturn","ReferenceError","_inherits","subClass","superClass","setPrototypeOf","__proto__","initPage","__WEBPACK_IMPORTED_MODULE_1__pagecomments__","__WEBPACK_IMPORTED_MODULE_0__sidebar__","categoriesCrop","initFontScale","__WEBPACK_IMPORTED_MODULE_3__common_adminpanel__","model","SalePage","applyBindings","last","__WEBPACK_IMPORTED_MODULE_2__common_model_salemodel__","__WEBPACK_IMPORTED_MODULE_4_lib_adaptivefontsize__","__WEBPACK_IMPORTED_MODULE_5__core_utils_logger__","_SaleModel","getPrototypeOf","NKwv","select","selectedText","isReadOnly","hasAttribute","setAttribute","setSelectionRange","removeAttribute","selection","getSelection","range","createRange","selectNodeContents","removeAllRanges","addRange","NdAU","commentsModel","__WEBPACK_IMPORTED_MODULE_0__newcomment__","Oqlb","PageCommentsViewModel","postInit","_$wrapper","_scroll","observableArray","checkViewport","blog_page_id","raw","elements","urlconverter","PtfZ","listen","Error","listenNode","listenNodeList","listenSelector","delegate","Q4Fy","QWJR","newComment","page_id","__WEBPACK_IMPORTED_MODULE_1_lib_knockout___default","__WEBPACK_IMPORTED_MODULE_1_lib_knockout__","pageId","observable","progress","valid","computed","_this2","userId","USER_ID","comments_page_id","comments_content","after_date","comments_date","post","site_url","notifier","showLogin","save","TQCA","__WEBPACK_IMPORTED_MODULE_0__vendor_cookie_jquery_cookie__","TvIv","TxBK","globals","defaultValue","g","_globals","__WEBPACK_IMPORTED_MODULE_0__var__","phrases","_phrases","WO3R","pages","initCustomSelect","initList","__WEBPACK_IMPORTED_MODULE_2__common_adminpanel__","chosen","ListViewModel","__WEBPACK_IMPORTED_MODULE_1__common_model_salemodel__","__WEBPACK_IMPORTED_MODULE_3_lib_adaptivefontsize__","itemsLoadedCallback","_itemsLoadedCallback","afterRender","seenArray","readSeenArray","valueStored","localStorage","getItem","JSON","parse","writeSeenArray","setItem","stringify","SaleItem","getCurrentCount","countPerPage","blog_sort_by","blog_shop_filter","blog_date_filter","archiveCount","removeAll","finished","reload","multicolumn","details_type","seen","discount_code","isPureImageBanner","isImageBanner","details_content_columns","X0GP","_","XRua","buildUrl","numeric_prefix","tmp","isNaN","http_build_query_helper","urlencode","addQuery","appendQuery","processQuery","hashQuery","decodeQueryString","isObj","k","newData","glue1","glue2","array","array2","chr","bracket","keys","evalStr","fixStr","eval","arg_separator","sk","num","part","XXni","YWK7","itemSizeSpot","resize","$items","YnTO","checkIsIframe","_isMobile","isTouchScreen","_isTouchScreen","isWebpFeatureSupported","feature","Promise","resolve","reject","WEBP_FEATURES","includes","kTestImages","lossy","lossless","alpha","animation","img","Image","onload","onerror","msMaxTouchPoints","LOSSY","LOSSLESS","ALPHA","ANIMATION","ZLxd","SaleModel","property","active","status","totalLikes","likes_initial","likes","isTextBanner","banner_type","my_like","saveLike","ZuML","openPopup","__WEBPACK_IMPORTED_MODULE_1__dialog__","__WEBPACK_IMPORTED_MODULE_0__popup_less__","dTkA","isset","isUndefined","isNull","object","elementOrDefault","elementOrDash","orDefault","asNumber","asBoolean","isBoolean","asString","asArray","delimiter","dydC","e2Zi","E","ctx","once","listener","emit","evtArr","evts","liveEvents","ejlv","__WEBPACK_IMPORTED_MODULE_0__vendor_urlconverter_jquery_urlconverter__","fokk","createIframeDialog","newDialog","__width","createHtmlDialog","showCloseButton","openHtmlDialog","autoOpen","createWindowDialog","getScrollBarWidth","$outer","visibility","overflow","widthWithScroll","hasScrollBar","dialogManager","__WEBPACK_IMPORTED_MODULE_0__dialog_less__","__WEBPACK_IMPORTED_MODULE_1_lib_underscore__","__WEBPACK_IMPORTED_MODULE_1_lib_underscore___default","__WEBPACK_IMPORTED_MODULE_2_lib_knockout__","__WEBPACK_IMPORTED_MODULE_2_lib_knockout___default","__WEBPACK_IMPORTED_MODULE_3__utils_logger__","__WEBPACK_IMPORTED_MODULE_4__utils_utils__","__WEBPACK_IMPORTED_MODULE_5__utils_var__","zdialog","isInDom","detach","dialog","onBeforeClose","onClose","zdialogInstance","ZDialog","_width","_height","_isModal","_isCloseBtnVisible","_isLoading","_isOpened","_isClosed","_isHidden","_contentHeight","_iframeHeight","_opened","_onOpen","Callbacks","_onClose","_onBeforeClose","_result","_o","onOpen","add","isOpened","_wnd","_handleWindowReady","onbeforeunload","isClosed","isRegistered","isFullScreen","isAutoHeight","fireWith","register","_heightWatcher","unregister","iframeHeight","_this3","HeightWatcher","contentHeight","dialogInstance","isModal","_this4","isTopmost","minWidth","custom","cssClass","DialogManager","_this5","_counter","_dialogs","_isClosing","_initialized","_wrapper","WindowWrapper","_$html","_$body","pureComputed","any","dialogs","_visibleDialogs","isHidden","_checkMarkupAfterOpen","_checkMarkupAfterClose","_timeout","visibleDialogs","_$el","_this6","cleanNode","getTopmostDialog","_this7","_currHeight","_event","_ibody","updateHeight","_interval","getHeight","fire","iHeight","_$wnd","_$head","_scrollTop","_scrollLeft","_$scrollBarStyle","_$positionStyle","_useFixedLayout","_applyPositionStyle","_applyScrollbarStyle","_hasScrollBar","scrollBarWidth","template","i4G7","i8fT","iOFR","kvOq","__WEBPACK_IMPORTED_MODULE_1__article__","__WEBPACK_IMPORTED_MODULE_2__contest__","l4Yc","__WEBPACK_IMPORTED_MODULE_0__loading_less__","counter","iframeOverride","$element","lNzi","initSaleAdminPanelForList","$listWrapper","onClickChangeStatus","initSaleAdminPanel","initSaleTemplatesCopy","$status","__WEBPACK_IMPORTED_MODULE_2__core_widgets_loading__","__WEBPACK_IMPORTED_MODULE_4__core_utils_url__","always","fail","__WEBPACK_IMPORTED_MODULE_3__core_widgets_notifier__","errorXHR","newStatus","updateResponse","__WEBPACK_IMPORTED_MODULE_6__core_utils_globals__","$select","clipboard","__WEBPACK_IMPORTED_MODULE_0_clipboard___default","$buttons","$buttonsTg","zresponse","template_id","selected","escape","__WEBPACK_IMPORTED_MODULE_5__core_widgets_dialog__","chat_id","parse_mode","__WEBPACK_IMPORTED_MODULE_0_clipboard__","mvuq","reviewType","LastCommentsViewModel","needsLoading","allVisible","_prepareCommentBlocks","fit","count","comments_type","review_type","new_layout","$comments","contentBottom","commentsBottom","commentsHeight","mzgk","__WEBPACK_IMPORTED_MODULE_2__sidebar__","oN+n","execScript","attachEvent","og09","oqjq","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","global","factory","_clipboardAction","_tinyEmitter","_goodListener","_interopRequireDefault","__esModule","default","getAttributeValue","suffix","attribute","getAttribute","_clipboardAction2","_tinyEmitter2","_goodListener2","Clipboard","_Emitter","resolveOptions","listenClick","defaultAction","defaultTarget","defaultText","onClick","delegateTarget","clipboardAction","emitter","querySelector","actions","support","queryCommandSupported","q/mW","qqFi","_select","_select2","ClipboardAction","initSelection","selectFake","selectTarget","isRTL","removeFake","fakeHandlerCallback","fakeHandler","fakeElem","border","padding","yPosition","pageYOffset","appendChild","copyText","removeChild","succeeded","execCommand","handleResult","clearSelection","_action","_target","r1M9","tM7p","__WEBPACK_IMPORTED_MODULE_3__list__","__WEBPACK_IMPORTED_MODULE_4__page__","vBks","w2CW","__WEBPACK_IMPORTED_MODULE_0__fancyapps_fancybox__","__WEBPACK_IMPORTED_MODULE_1__fancyapps_fancybox_dist_jquery_fancybox_css__","ru","LANG","wC9f","unwrap","InfiniteScroll","_clNeedMore","_$window","onNeedMore","_eventHandler","blockEnd","windowHeight","windowScrollTop","isNearBottom","_needMore","_loadedMoreCallback","$window","onScroll","inProgress","ready","$wrapper","isInViewport","loadRoutine","loadMore","currentPage","$btnShowMore","$loading","isReloading","MAX_VALUE","btnShowMore","Throttler","hasMore","period","wYtf","_delegate","useCapture","listenerFn","querySelectorAll","webD","__WEBPACK_IMPORTED_MODULE_0__vendor_soon_countdown_soon_1_9_0_min_js__","__WEBPACK_IMPORTED_MODULE_1__vendor_soon_countdown_soon_1_9_0_min_css__"],"mappings":"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","file":"blog.min.js","sourcesContent":["var zde = zde || {}; zde[\"modules\"] = zde[\"modules\"] || {}; zde[\"modules\"][\"blog\"] =\nwebpackJsonpzde_modules__name_([7],{\n\n/***/ \"/Q8n\":\n/***/ (function(module, exports) {\n\n/**\n * Check if argument is a HTML element.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.node = function(value) {\n return value !== undefined\n && value instanceof HTMLElement\n && value.nodeType === 1;\n};\n\n/**\n * Check if argument is a list of HTML elements.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.nodeList = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return value !== undefined\n && (type === '[object NodeList]' || type === '[object HTMLCollection]')\n && ('length' in value)\n && (value.length === 0 || exports.node(value[0]));\n};\n\n/**\n * Check if argument is a string.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.string = function(value) {\n return typeof value === 'string'\n || value instanceof String;\n};\n\n/**\n * Check if argument is a function.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.fn = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return type === '[object Function]';\n};\n\n\n/***/ }),\n\n/***/ \"0iPh\":\n/***/ (function(module, exports) {\n\nmodule.exports = jQuery;\n\n/***/ }),\n\n/***/ 16:\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(\"r1M9\");\nmodule.exports = __webpack_require__(\"tM7p\");\n\n\n/***/ }),\n\n/***/ \"243j\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony export (immutable) */ __webpack_exports__[\"init\"] = init;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__sidebar_index__ = __webpack_require__(\"J9kM\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_lib_soon_countdown__ = __webpack_require__(\"webD\");\n\n\n\nfunction init() {\n\tvar $list = $('#contestsList');\n\n\t__WEBPACK_IMPORTED_MODULE_0__sidebar_index__[\"a\" /* init */]({\n\t\theightTarget: $list\n\t});\n\n\t$list.zInfiniteScroll({\n\t\tselector: '[rel=page]',\n\t\tloading: '#pagesScrollLoader',\n\t\tmaxAutoloadPages: 200,\n\t\ttotalCount: $list.data('totalCount'),\n\t\tfetch: function fetch(page, callback) {\n\t\t\tvar data = {\n\t\t\t\tpage: page,\n\t\t\t\ttype: $list.data('blogType'),\n\t\t\t\tcategory: $list.data('blogCategory')\n\t\t\t};\n\t\t\t$.get($list.data('loadUrl'), data, null, 'json').done(function (response) {\n\t\t\t\tvar $blocks = $(response['html']).filter('[rel=page]');\n\t\t\t\tcallback($blocks);\n\t\t\t});\n\t\t}\n\t});\n}\n\n/***/ }),\n\n/***/ \"2uje\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return Notifier; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lib_toastr__ = __webpack_require__(\"og09\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lib_toastr___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lib_toastr__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils_utils__ = __webpack_require__(\"YnTO\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__utils_var__ = __webpack_require__(\"dTkA\");\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\n\nvar t = Object(__WEBPACK_IMPORTED_MODULE_1__utils_utils__[\"b\" /* checkIsIframe */])() ? window.top.toastr : __WEBPACK_IMPORTED_MODULE_0_lib_toastr___default.a;\n\nvar MSG_ERROR = 'Ошибка';\nvar MSG_ERROR_XHR = 'Не удалось выполнить запрос';\n\nvar Notifier = function () {\n\tfunction Notifier() {\n\t\t_classCallCheck(this, Notifier);\n\t}\n\n\t_createClass(Notifier, null, [{\n\t\tkey: \"error\",\n\t\tvalue: function error() {\n\t\t\tvar message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\t\t\tvar title = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\t\t\tvar options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n\t\t\t// Extend timeout for errors to 10 seconds by default\n\t\t\tvar timeOut = options ? Object(__WEBPACK_IMPORTED_MODULE_2__utils_var__[\"g\" /* orDefault */])(options.timeOut, 10000) : 10000;\n\t\t\tt.error(Object(__WEBPACK_IMPORTED_MODULE_2__utils_var__[\"g\" /* orDefault */])(message, MSG_ERROR), title, _extends({ timeOut: timeOut }, options));\n\t\t}\n\t}, {\n\t\tkey: \"errorXHR\",\n\t\tvalue: function errorXHR(jqXHR, textStatus, errorThrown) {\n\t\t\tif (textStatus != 'abort') {\n\t\t\t\tNotifier.error(MSG_ERROR_XHR);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: \"info\",\n\t\tvalue: function info(message) {\n\t\t\tvar title = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\t\t\tvar options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n\t\t\tt.info(message, title, _extends({}, options));\n\t\t}\n\t}, {\n\t\tkey: \"success\",\n\t\tvalue: function success(message) {\n\t\t\tvar title = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\t\t\tvar options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n\t\t\tt.success(message, title, _extends({}, options));\n\t\t}\n\t}, {\n\t\tkey: \"warning\",\n\t\tvalue: function warning(message) {\n\t\t\tvar title = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\t\t\tvar options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n\t\t\tt.warning(message, title, _extends({}, options));\n\t\t}\n\t}]);\n\n\treturn Notifier;\n}();\n\n/***/ }),\n\n/***/ \"5wqq\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = newLogger;\n/* unused harmony export setDefaultLevel */\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar LEVEL_DEBUG = 0;\nvar LEVEL_INFO = 1;\nvar LEVEL_WARN = 2;\nvar LEVEL_ERROR = 3;\n\nvar LEVELS = ['debug', 'info', 'warn', 'error'];\n\nvar defaultLevel = window.IS_PRODUCTION ? LEVEL_WARN : LEVEL_DEBUG;\n\n/**\n * Creates new logger instance with default level.\n * @param {string|null} name\n * @return {MyLogger}\n */\nfunction newLogger() {\n\tvar name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n\treturn new MyLogger(name, defaultLevel);\n}\n\n/**\n * Sets level for new loggers.\n * @param {number} level\n */\nfunction setDefaultLevel(level) {\n\tdefaultLevel = level;\n}\n\nvar MyLogger = function () {\n\tfunction MyLogger(name, level) {\n\t\t_classCallCheck(this, MyLogger);\n\n\t\tthis._name = '';\n\t\tthis._level = -1;\n\n\t\tthis._dummy = function () {};\n\n\t\tthis._name = name;\n\t\tthis.setLevel(level);\n\t}\n\n\t_createClass(MyLogger, [{\n\t\tkey: 'setLevel',\n\t\tvalue: function setLevel(level) {\n\t\t\tvar _this = this;\n\n\t\t\tlevel = Number.isInteger(level) ? level : LEVELS.indexOf(level);\n\t\t\tthis._level = level;\n\n\t\t\tvar name = this._name ? '[' + this._name + ']' : null;\n\t\t\tvar bind = function bind(condition, methodName) {\n\t\t\t\tif (!condition || !console[methodName]) return _this._dummy;\n\t\t\t\treturn name ? console[methodName].bind(console, name) : console[methodName].bind(console);\n\t\t\t};\n\t\t\tvar bindSimple = function bindSimple(condition, methodName) {\n\t\t\t\treturn condition && console[methodName] ? console[methodName].bind(console) : _this._dummy;\n\t\t\t};\n\n\t\t\t[['log', LEVEL_DEBUG], ['info', LEVEL_INFO], ['warn', LEVEL_WARN], ['error', LEVEL_ERROR]].forEach(function (i) {\n\t\t\t\tvar _i = _slicedToArray(i, 2),\n\t\t\t\t method = _i[0],\n\t\t\t\t lvl = _i[1];\n\n\t\t\t\t_this[method] = bind(level <= lvl, method);\n\t\t\t});\n\n\t\t\t['time', 'timeEnd', 'profile', 'profileEnd'].forEach(function (method) {\n\t\t\t\t_this[method] = bindSimple(level <= LEVEL_DEBUG, method);\n\t\t\t});\n\t\t}\n\n\t\t/** The same as {@link Console.log} */\n\n\t}, {\n\t\tkey: 'log',\n\t\tvalue: function log(args) {}\n\n\t\t/** The same as {@link Console.info} */\n\n\t}, {\n\t\tkey: 'info',\n\t\tvalue: function info(args) {}\n\n\t\t/** The same as {@link Console.warn} */\n\n\t}, {\n\t\tkey: 'warn',\n\t\tvalue: function warn(args) {}\n\n\t\t/** The same as {@link Console.error} */\n\n\t}, {\n\t\tkey: 'error',\n\t\tvalue: function error(args) {}\n\n\t\t/** The same as {@link Console.time} */\n\n\t}, {\n\t\tkey: 'time',\n\t\tvalue: function time(label) {}\n\n\t\t/** The same as {@link Console.timeEnd} */\n\n\t}, {\n\t\tkey: 'timeEnd',\n\t\tvalue: function timeEnd(label) {}\n\n\t\t/** The same as {@link Console.profile} */\n\n\t}, {\n\t\tkey: 'profile',\n\t\tvalue: function profile(label) {}\n\n\t\t/** The same as {@link Console.profileEnd} */\n\n\t}, {\n\t\tkey: 'profileEnd',\n\t\tvalue: function profileEnd(label) {}\n\t}, {\n\t\tkey: 'measureTime',\n\t\tvalue: function measureTime(label, callable) {\n\t\t\tthis.time(label);\n\t\t\tvar result = callable();\n\t\t\tthis.timeEnd(label);\n\t\t\treturn result;\n\t\t}\n\t}, {\n\t\tkey: 'doProfile',\n\t\tvalue: function doProfile(label, callable) {\n\t\t\tthis.profile(label);\n\t\t\tvar result = callable();\n\t\t\tthis.profileEnd(label);\n\t\t\treturn result;\n\t\t}\n\t}, {\n\t\tkey: 'setLevelDebug',\n\t\tvalue: function setLevelDebug() {\n\t\t\tthis.setLevel(LEVEL_DEBUG);\n\t\t}\n\t}, {\n\t\tkey: 'setLevelInfo',\n\t\tvalue: function setLevelInfo() {\n\t\t\tthis.setLevel(LEVEL_INFO);\n\t\t}\n\t}, {\n\t\tkey: 'setLevelWarn',\n\t\tvalue: function setLevelWarn() {\n\t\t\tthis.setLevel(LEVEL_WARN);\n\t\t}\n\t}, {\n\t\tkey: 'setLevelError',\n\t\tvalue: function setLevelError() {\n\t\t\tthis.setLevel(LEVEL_ERROR);\n\t\t}\n\t}]);\n\n\treturn MyLogger;\n}();\n\n/* unused harmony default export */ var _unused_webpack_default_export = (newLogger());\n\n/***/ }),\n\n/***/ \"6mWo\":\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ \"7fPx\":\n/***/ (function(module, exports) {\n\nmodule.exports = ko;\n\n/***/ }),\n\n/***/ \"8ZSj\":\n/***/ (function(module, exports) {\n\nvar DOCUMENT_NODE_TYPE = 9;\n\n/**\n * A polyfill for Element.matches()\n */\nif (typeof Element !== 'undefined' && !Element.prototype.matches) {\n var proto = Element.prototype;\n\n proto.matches = proto.matchesSelector ||\n proto.mozMatchesSelector ||\n proto.msMatchesSelector ||\n proto.oMatchesSelector ||\n proto.webkitMatchesSelector;\n}\n\n/**\n * Finds the closest parent that matches a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @return {Function}\n */\nfunction closest (element, selector) {\n while (element && element.nodeType !== DOCUMENT_NODE_TYPE) {\n if (typeof element.matches === 'function' &&\n element.matches(selector)) {\n return element;\n }\n element = element.parentNode;\n }\n}\n\nmodule.exports = closest;\n\n\n/***/ }),\n\n/***/ \"9Aqb\":\n/***/ (function(module, exports) {\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar isWindowLoaded = false;\n$(window).one('load', function () {\n\tisWindowLoaded = true;\n});\n\nvar log = function log() {};\n\n// uncomment to enable logging\n// log = console.log;\n\n/**\n * This plugin calculates font size for element to fit parent.\n * It incrementally changes font size until element's dimensions are most close to parent's.\n * To manually fix font size trigger 'refresh-font-size' event\n * @param options\n * @return {JQuery}\n */\n$.fn.adaptiveFontSize = function () {\n\tvar options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n\tvar o = _extends({\n\t\tminFontSize: '30%',\n\t\tmaxFontSize: '100%',\n\t\t// 'up' or 'down'. Either increase font size starting from min, or decrease starting from max\n\t\tdirection: 'down',\n\t\t// If null - immediate parent will be used, otherwise: $(element).parents(o.parentSelector)\n\t\tparentSelector: null,\n\t\t// Set font size only if window is already loaded.\n\t\t// Don't forget to enable fixOnLoad option\n\t\tsetIfLoaded: true,\n\t\t// Fix font size on window resize event\n\t\tfixOnResize: true,\n\t\t// Fix font size on window load event\n\t\tfixOnLoad: true,\n\n\t\t// Done callback. Called when font size is finally set. Accepts two parameters - DOM Element and font size\n\t\tdone: null\n\n\t}, options);\n\treturn this.each(function () {\n\t\tvar $block = $(this);\n\t\tinit();\n\n\t\tfunction init() {\n\t\t\tif (!o.setIfLoaded || isWindowLoaded) {\n\t\t\t\tprocess();\n\t\t\t} else {\n\t\t\t\tlog('postpone set');\n\t\t\t}\n\t\t\tif (o.fixOnResize) {\n\t\t\t\t$(window).on('resize', eventHandler);\n\t\t\t}\n\t\t\tif (o.fixOnLoad) {\n\t\t\t\t$(window).on('load', eventHandler);\n\t\t\t}\n\t\t\t$block.on('refresh-font-size', eventHandler);\n\t\t}\n\n\t\tfunction eventHandler() {\n\t\t\tlog('fix on event');\n\t\t\tprocess();\n\t\t}\n\n\t\tfunction getParent() {\n\t\t\treturn o.parentSelector ? $block.parents(o.parentSelector).first() : $block.parent();\n\t\t}\n\n\t\tfunction process() {\n\t\t\tif (!$.contains(document, $block[0])) {\n\t\t\t\t// element has been detached, stop processing\n\t\t\t\tlog('stop processing');\n\t\t\t\t$(window).off('resize', eventHandler);\n\t\t\t\t$(window).off('load', eventHandler);\n\t\t\t\t$block.off('refresh-font-size', eventHandler);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar $parent = getParent();\n\t\t\tvar isPercent = ('' + o.minFontSize).indexOf('%') >= 0;\n\t\t\tvar minFontSize = parseFloat(o.minFontSize);\n\t\t\tvar maxFontSize = parseFloat(o.maxFontSize);\n\t\t\tvar delta = Math.floor((maxFontSize - minFontSize) / 10);\n\t\t\tvar initial = minFontSize;\n\t\t\tif (o.direction == 'down') {\n\t\t\t\tdelta *= -1;\n\t\t\t\tinitial = maxFontSize;\n\t\t\t}\n\t\t\tvar fontSize = calculateFontSize($block, $parent.width(), $parent.height(), initial, minFontSize, maxFontSize, delta, isPercent);\n\t\t\tif ($.isFunction(o.done)) {\n\t\t\t\tlog('done', fontSize);\n\t\t\t\to.done($block[0], fontSize);\n\t\t\t}\n\t\t}\n\t});\n};\n\nfunction addDelta(value, delta, min, max) {\n\tvar newValue = value + delta;\n\tif (newValue > max) newValue = max;\n\tif (newValue < min) newValue = min;\n\treturn newValue;\n}\n\nfunction calculateFontSize($block, maxWidth, maxHeight, fontSize, minFontSize, maxFontSize, delta, isPercent) {\n\tvar newFontSize = addDelta(fontSize, delta, minFontSize, maxFontSize);\n\tif (newFontSize == fontSize) {\n\t\treturn fontSize;\n\t}\n\tsetFontSize($block, newFontSize, isPercent);\n\tif (delta > 0) {\n\t\tif ($block.width() < maxWidth && $block.height() < maxHeight) {\n\t\t\treturn calculateFontSize($block, maxWidth, maxHeight, newFontSize, minFontSize, maxFontSize, delta, isPercent);\n\t\t} else {\n\t\t\t// rollback\n\t\t\tsetFontSize($block, fontSize, isPercent);\n\t\t\treturn fontSize;\n\t\t}\n\t} else {\n\t\tif ($block.width() > maxWidth || $block.height() > maxHeight) {\n\t\t\treturn calculateFontSize($block, maxWidth, maxHeight, newFontSize, minFontSize, maxFontSize, delta, isPercent);\n\t\t}\n\t}\n\treturn newFontSize;\n}\n\nfunction setFontSize($block, fontSize, isPercent) {\n\tif (isPercent) {\n\t\tfontSize += '%';\n\t}\n\t$block.css('font-size', fontSize);\n}\n\n/***/ }),\n\n/***/ \"F0bM\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__sale__ = __webpack_require__(\"WO3R\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__contest__ = __webpack_require__(\"243j\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__article__ = __webpack_require__(\"YWK7\");\n/* harmony reexport (module object) */ __webpack_require__.d(__webpack_exports__, \"sale\", function() { return __WEBPACK_IMPORTED_MODULE_0__sale__; });\n/* harmony reexport (module object) */ __webpack_require__.d(__webpack_exports__, \"contest\", function() { return __WEBPACK_IMPORTED_MODULE_1__contest__; });\n/* harmony reexport (module object) */ __webpack_require__.d(__webpack_exports__, \"article\", function() { return __WEBPACK_IMPORTED_MODULE_2__article__; });\n\n\n\n\n\n\n/***/ }),\n\n/***/ \"FE6W\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony export (immutable) */ __webpack_exports__[\"init\"] = init;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__core_utils_logger__ = __webpack_require__(\"5wqq\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__sale__ = __webpack_require__(\"Jkdx\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__core_widgets_popup__ = __webpack_require__(\"ZuML\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__pagecomments__ = __webpack_require__(\"NdAU\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__sidebar__ = __webpack_require__(\"J9kM\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_lib_fancybox__ = __webpack_require__(\"w2CW\");\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n\n\n\n\n\n\n\nvar logger = Object(__WEBPACK_IMPORTED_MODULE_0__core_utils_logger__[\"a\" /* newLogger */])('Article page');\n\nfunction init(options) {\n var o = _extends({\n page: {},\n comments: []\n }, options);\n\n logger.log('init', o);\n\n __WEBPACK_IMPORTED_MODULE_3__pagecomments__[\"a\" /* init */]({ page: o.page, comments: o.comments });\n setTimeout(__WEBPACK_IMPORTED_MODULE_4__sidebar__[\"a\" /* init */]);\n\n Object(__WEBPACK_IMPORTED_MODULE_1__sale__[\"categoriesCrop\"])($('#page_content .sale-cats'));\n\n openTablePopup();\n}\n\nfunction openTablePopup() {\n /*$('[rel=\"compare-table\"]').click(function(){\n const template = require('./templates/compare-table.html');\n const src = $(this).attr('src');\n const content = $.tmpl(template, {src: src});\n openPopup(content, {\n cssClass: 'compare-table-popup'\n });\n })*/\n $('[rel=\"compare-table\"]').click(function () {\n var src = $(this).attr('src');\n $.fancybox.open({\n src: src,\n baseClass: 'fancybox-custom-layout',\n thumbs: {\n hideOnClose: false\n },\n touch: {\n vertical: false\n },\n buttons: ['close'],\n animationEffect: \"fade\",\n transitionEffect: false,\n clickContent: \"zoom\",\n clickOutside: \"close\"\n });\n });\n}\n\n/***/ }),\n\n/***/ \"FYi7\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return BASE_URL; });\n/* harmony export (immutable) */ __webpack_exports__[\"g\"] = siteUrl;\n/* harmony export (immutable) */ __webpack_exports__[\"f\"] = joinPath;\n/* harmony export (immutable) */ __webpack_exports__[\"e\"] = isAbsolute;\n/* unused harmony export buildQuery */\n/* harmony export (immutable) */ __webpack_exports__[\"d\"] = highlightUrls;\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"c\", function() { return UrlParser; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return UrlBuilder; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lib_underscore__ = __webpack_require__(\"X0GP\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lib_underscore___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lib_underscore__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__location__ = __webpack_require__(\"XRua\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__var__ = __webpack_require__(\"dTkA\");\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\n\nvar BASE_URL = (window.base_url || '/').replace(/(.*)\\/\\/$|([^/])$/, '$1/');\n\nvar isAbsoluteUrlRegex = /^https?:\\/\\//i;\n\n/**\n * @param {string|object} url Url path\n * @param {string|object} more Additional parts\n * @return {string}\n */\nfunction siteUrl(url) {\n\tfor (var _len = arguments.length, more = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n\t\tmore[_key - 1] = arguments[_key];\n\t}\n\n\tif (isAbsoluteUrlRegex.test(url)) {\n\t\tif (more.length === 0) {\n\t\t\treturn url;\n\t\t} else {\n\t\t\treturn joinPath.apply(null, [url].concat(more));\n\t\t}\n\t} else {\n\t\treturn joinPath.apply(null, [BASE_URL, url].concat(more));\n\t}\n}\n\n/**\n * Joins given values with slash.\n * If last value is an object - it will be formatted as query data.\n * @param {string|object} values\n * @return {string}\n */\nfunction joinPath() {\n\tfor (var _len2 = arguments.length, values = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n\t\tvalues[_key2] = arguments[_key2];\n\t}\n\n\tif (values.length == 0) return '';\n\tvar query = {};\n\tvar queryString = '';\n\tvar fragment = '';\n\tvar components = [];\n\tvar processValue = function processValue(v) {\n\t\tif (__WEBPACK_IMPORTED_MODULE_0_lib_underscore___default.a.isObject(v)) {\n\t\t\tquery = _extends({}, query, v);\n\t\t} else {\n\t\t\tv = Object(__WEBPACK_IMPORTED_MODULE_2__var__[\"d\" /* asString */])(v).trim();\n\t\t\tvar i = void 0;\n\t\t\tif ((i = v.indexOf('#')) >= 0) {\n\t\t\t\tfragment = v.substr(i + 1);\n\t\t\t\tv = v.substr(0, i);\n\t\t\t} else if ((i = v.indexOf('?')) >= 0) {\n\t\t\t\tqueryString = v.substr(i + 1);\n\t\t\t\tv = v.substr(0, i);\n\t\t\t}\n\t\t\tif (v) {\n\t\t\t\tif (components.length == 0) {\n\t\t\t\t\tv = v.replace(/\\/$/g, '');\n\t\t\t\t} else {\n\t\t\t\t\tv = v.replace(/^\\/|\\/$/g, '');\n\t\t\t\t}\n\t\t\t\tcomponents.push(v);\n\t\t\t}\n\t\t}\n\t};\n\tvalues.forEach(function (v) {\n\t\tif (__WEBPACK_IMPORTED_MODULE_0_lib_underscore___default.a.isArray(v)) {\n\t\t\tv.forEach(processValue);\n\t\t} else {\n\t\t\tprocessValue(v);\n\t\t}\n\t});\n\tvar url = components.join('/');\n\tif (!__WEBPACK_IMPORTED_MODULE_0_lib_underscore___default.a.isEmpty(query)) {\n\t\tvar q = buildQuery(query);\n\t\tif (queryString) {\n\t\t\tqueryString += '&';\n\t\t}\n\t\tqueryString += q;\n\t}\n\tif (queryString) {\n\t\turl += '?' + queryString;\n\t}\n\tif (fragment) {\n\t\turl += '#' + fragment;\n\t}\n\treturn url;\n}\n\n/**\n *\n * @param {string} url\n * @return {boolean}\n */\nfunction isAbsolute(url) {\n\treturn isAbsoluteUrlRegex.test(url);\n}\n\n/**\n * Builds query string from given object\n * @param {object} queryData\n * @return {string}\n */\nfunction buildQuery(queryData) {\n\treturn __WEBPACK_IMPORTED_MODULE_1__location__[\"c\" /* buildQuery */](queryData);\n}\n\nfunction highlightUrls(text) {\n\tvar maxlength = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 30;\n\n\treturn text.replace(/(https?:\\/\\/)?([\\da-z\\.-]+)\\.([a-z\\.]{2,6})([\\?+=&%#\\/\\wА-Яа-яёЁ\\.;-]*)*\\/?/g, function (s) {\n\t\tvar st = s;\n\n\t\tif (s.length > maxlength) {\n\t\t\tst = s.slice(0, maxlength) + \"...\";\n\t\t}\n\n\t\tif (!/^(https?:\\/\\/)/.test(s)) {\n\t\t\ts = \"http://\" + s;\n\t\t}\n\n\t\treturn \"\" + st + \"\";\n\t});\n}\n\nvar UrlParser = function () {\n\t/**\n * @param {string} url\n */\n\tfunction UrlParser(url) {\n\t\t_classCallCheck(this, UrlParser);\n\n\t\tthis._a = document.createElement('a');\n\t\tthis._a.href = url;\n\t}\n\n\t/** @return {string} */\n\n\n\t_createClass(UrlParser, [{\n\t\tkey: 'origin',\n\t\tget: function get() {\n\t\t\treturn this._a.origin;\n\t\t}\n\n\t\t/** @return {string} */\n\n\t}, {\n\t\tkey: 'protocol',\n\t\tget: function get() {\n\t\t\treturn this._a.protocol;\n\t\t}\n\n\t\t/** @return {string} */\n\n\t}, {\n\t\tkey: 'host',\n\t\tget: function get() {\n\t\t\treturn this._a.host;\n\t\t}\n\n\t\t/** @return {string} */\n\n\t}, {\n\t\tkey: 'hostname',\n\t\tget: function get() {\n\t\t\treturn this._a.hostname;\n\t\t}\n\n\t\t/** @return {string} */\n\n\t}, {\n\t\tkey: 'port',\n\t\tget: function get() {\n\t\t\treturn this._a.port;\n\t\t}\n\n\t\t/** @return {string} */\n\n\t}, {\n\t\tkey: 'pathname',\n\t\tget: function get() {\n\t\t\treturn this._a.pathname;\n\t\t}\n\n\t\t/** @return {string} */\n\n\t}, {\n\t\tkey: 'search',\n\t\tget: function get() {\n\t\t\treturn this._a.search;\n\t\t}\n\n\t\t/** @return {string} */\n\n\t}, {\n\t\tkey: 'hash',\n\t\tget: function get() {\n\t\t\treturn this._a.hash;\n\t\t}\n\t}]);\n\n\treturn UrlParser;\n}();\n\nvar UrlBuilder = function () {\n\tfunction UrlBuilder() {\n\t\tvar protocol = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\t\tvar host = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\t\tvar port = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\t\tvar path = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\t\tvar query = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null;\n\t\tvar hash = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : null;\n\n\t\t_classCallCheck(this, UrlBuilder);\n\n\t\tthis._protocol = protocol;\n\t\tthis._host = host;\n\t\tthis._port = port;\n\t\tthis._path = path;\n\t\tthis._query = query;\n\t\tthis._hash = hash;\n\t}\n\n\t/**\n * @param {string|null} value\n */\n\n\n\t_createClass(UrlBuilder, [{\n\t\tkey: 'build',\n\n\n\t\t/**\n * @return {string}\n */\n\t\tvalue: function build() {\n\t\t\tvar origin = (this._protocol ? this._protocol + '//' : '') + (this._host ? this._host + (this._port ? ':' + this._port : '') : '');\n\t\t\tvar query = _typeof(this._query) === 'object' ? prefix(buildQuery(this._query), '?') : this._query;\n\t\t\treturn joinPath(origin, this._path, query, this._hash);\n\t\t}\n\t}, {\n\t\tkey: 'protocol',\n\t\tset: function set(value) {\n\t\t\tthis._protocol = postfix(value, ':');\n\t\t}\n\n\t\t/** @return {string|null} */\n\t\t,\n\t\tget: function get() {\n\t\t\treturn this._protocol;\n\t\t}\n\n\t\t/**\n * @param {string|null} value\n */\n\n\t}, {\n\t\tkey: 'host',\n\t\tset: function set(value) {\n\t\t\tthis._host = value;\n\t\t}\n\n\t\t/** @return {string|null} */\n\t\t,\n\t\tget: function get() {\n\t\t\treturn this._host;\n\t\t}\n\n\t\t/**\n * @param {string|number|null} value\n */\n\n\t}, {\n\t\tkey: 'port',\n\t\tset: function set(value) {\n\t\t\tthis._port = value;\n\t\t}\n\n\t\t/** @return {string|number|null} */\n\t\t,\n\t\tget: function get() {\n\t\t\treturn this._port;\n\t\t}\n\n\t\t/**\n * @param {string|null} value\n */\n\n\t}, {\n\t\tkey: 'path',\n\t\tset: function set(value) {\n\t\t\tthis._path = value;\n\t\t}\n\n\t\t/** @return {string|null} */\n\t\t,\n\t\tget: function get() {\n\t\t\treturn this._path;\n\t\t}\n\n\t\t/**\n * @param {string|object|null} value\n */\n\n\t}, {\n\t\tkey: 'query',\n\t\tset: function set(value) {\n\t\t\tthis._query = prefix(value, '?');\n\t\t}\n\n\t\t/** @return {string|object|null} */\n\t\t,\n\t\tget: function get() {\n\t\t\treturn this._query;\n\t\t}\n\n\t\t/**\n * @param {string|null} value\n */\n\n\t}, {\n\t\tkey: 'hash',\n\t\tset: function set(value) {\n\t\t\tthis._hash = prefix(value, '#');\n\t\t}\n\n\t\t/** @return {string|null} */\n\t\t,\n\t\tget: function get() {\n\t\t\treturn this._hash;\n\t\t}\n\t}]);\n\n\treturn UrlBuilder;\n}();\n\nfunction prefix(val, prefix) {\n\tif (val && typeof val === 'string' && !val.startsWith(prefix)) {\n\t\treturn prefix + val;\n\t}\n\treturn val;\n}\n\nfunction postfix(val, postfix) {\n\tif (val && typeof val === 'string' && !val.endsWith(postfix)) {\n\t\treturn val + postfix;\n\t}\n\treturn val;\n}\n\n/***/ }),\n\n/***/ \"GfF8\":\n/***/ (function(module, exports) {\n\n// ==================================================\r\n// fancyBox v3.2.10\r\n//\r\n// Licensed GPLv3 for open source use\r\n// or fancyBox Commercial License for commercial use\r\n//\r\n// http://fancyapps.com/fancybox/\r\n// Copyright 2017 fancyApps\r\n//\r\n// ==================================================\r\n;(function (window, document, $, undefined) {\r\n 'use strict';\r\n\r\n // If there's no jQuery, fancyBox can't work\r\n // =========================================\r\n\r\n if ( !$ ) {\r\n return;\r\n }\r\n\r\n // Check if fancyBox is already initialized\r\n // ========================================\r\n\r\n if ( $.fn.fancybox ) {\r\n\r\n if ( 'console' in window ) {\r\n console.log( 'fancyBox already initialized' );\r\n }\r\n\r\n return;\r\n }\r\n\r\n // Private default settings\r\n // ========================\r\n\r\n var defaults = {\r\n\r\n // Enable infinite gallery navigation\r\n loop : false,\r\n\r\n // Space around image, ignored if zoomed-in or viewport width is smaller than 800px\r\n margin : [44, 0],\r\n\r\n // Horizontal space between slides\r\n gutter : 50,\r\n\r\n // Enable keyboard navigation\r\n keyboard : true,\r\n\r\n // Should display navigation arrows at the screen edges\r\n arrows : true,\r\n\r\n // Should display infobar (counter and arrows at the top)\r\n infobar : true,\r\n\r\n // Should display toolbar (buttons at the top)\r\n toolbar : true,\r\n\r\n // What buttons should appear in the top right corner.\r\n // Buttons will be created using templates from `btnTpl` option\r\n // and they will be placed into toolbar (class=\"fancybox-toolbar\"` element)\r\n buttons : [\r\n 'slideShow',\r\n 'fullScreen',\r\n 'thumbs',\r\n 'share',\r\n //'download',\r\n //'zoom',\r\n 'close'\r\n ],\r\n\r\n // Detect \"idle\" time in seconds\r\n idleTime : 3,\r\n\r\n // Should display buttons at top right corner of the content\r\n // If 'auto' - they will be created for content having type 'html', 'inline' or 'ajax'\r\n // Use template from `btnTpl.smallBtn` for customization\r\n smallBtn : 'auto',\r\n\r\n // Disable right-click and use simple image protection for images\r\n protect : false,\r\n\r\n // Shortcut to make content \"modal\" - disable keyboard navigtion, hide buttons, etc\r\n modal : false,\r\n\r\n image : {\r\n\r\n // Wait for images to load before displaying\r\n // Requires predefined image dimensions\r\n // If 'auto' - will zoom in thumbnail if 'width' and 'height' attributes are found\r\n preload : \"auto\"\r\n\r\n },\r\n\r\n ajax : {\r\n\r\n // Object containing settings for ajax request\r\n settings : {\r\n\r\n // This helps to indicate that request comes from the modal\r\n // Feel free to change naming\r\n data : {\r\n fancybox : true\r\n }\r\n }\r\n\r\n },\r\n\r\n iframe : {\r\n\r\n // Iframe template\r\n tpl : '',\r\n\r\n // Preload iframe before displaying it\r\n // This allows to calculate iframe content width and height\r\n // (note: Due to \"Same Origin Policy\", you can't get cross domain data).\r\n preload : true,\r\n\r\n // Custom CSS styling for iframe wrapping element\r\n // You can use this to set custom iframe dimensions\r\n css : {},\r\n\r\n // Iframe tag attributes\r\n attr : {\r\n scrolling : 'auto'\r\n }\r\n\r\n },\r\n\r\n // Default content type if cannot be detected automatically\r\n defaultType : 'image',\r\n\r\n // Open/close animation type\r\n // Possible values:\r\n // false - disable\r\n // \"zoom\" - zoom images from/to thumbnail\r\n // \"fade\"\r\n // \"zoom-in-out\"\r\n //\r\n animationEffect : \"zoom\",\r\n\r\n // Duration in ms for open/close animation\r\n animationDuration : 500,\r\n\r\n // Should image change opacity while zooming\r\n // If opacity is \"auto\", then opacity will be changed if image and thumbnail have different aspect ratios\r\n zoomOpacity : \"auto\",\r\n\r\n // Transition effect between slides\r\n //\r\n // Possible values:\r\n // false - disable\r\n // \"fade'\r\n // \"slide'\r\n // \"circular'\r\n // \"tube'\r\n // \"zoom-in-out'\r\n // \"rotate'\r\n //\r\n transitionEffect : \"fade\",\r\n\r\n // Duration in ms for transition animation\r\n transitionDuration : 366,\r\n\r\n // Custom CSS class for slide element\r\n slideClass : '',\r\n\r\n // Custom CSS class for layout\r\n baseClass : '',\r\n\r\n // Base template for layout\r\n baseTpl\t:\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n ' / ' +\r\n '
' +\r\n '
{{buttons}}
' +\r\n '
{{arrows}}
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
',\r\n\r\n // Loading indicator template\r\n spinnerTpl : '
',\r\n\r\n // Error message template\r\n errorTpl : '

{{ERROR}}

',\r\n\r\n btnTpl : {\r\n\r\n download : '' +\r\n '' +\r\n '' +\r\n '' +\r\n '',\r\n\r\n zoom : '',\r\n\r\n close : '',\r\n\r\n // This small close button will be appended to your html/inline/ajax content by default,\r\n // if \"smallBtn\" option is not set to false\r\n smallBtn : '',\r\n\r\n // Arrows\r\n arrowLeft : '',\r\n\r\n arrowRight : ''\r\n },\r\n\r\n // Container is injected into this element\r\n parentEl : 'body',\r\n\r\n\r\n // Focus handling\r\n // ==============\r\n\r\n // Try to focus on the first focusable element after opening\r\n autoFocus : false,\r\n\r\n // Put focus back to active element after closing\r\n backFocus : true,\r\n\r\n // Do not let user to focus on element outside modal content\r\n trapFocus : true,\r\n\r\n\r\n // Module specific options\r\n // =======================\r\n\r\n fullScreen : {\r\n autoStart : false,\r\n },\r\n\r\n // Set `touch: false` to disable dragging/swiping\r\n touch : {\r\n vertical : true, // Allow to drag content vertically\r\n momentum : true // Continue movement after releasing mouse/touch when panning\r\n },\r\n\r\n // Hash value when initializing manually,\r\n // set `false` to disable hash change\r\n hash : null,\r\n\r\n // Customize or add new media types\r\n // Example:\r\n /*\r\n media : {\r\n youtube : {\r\n params : {\r\n autoplay : 0\r\n }\r\n }\r\n }\r\n */\r\n media : {},\r\n\r\n slideShow : {\r\n autoStart : false,\r\n speed : 4000\r\n },\r\n\r\n thumbs : {\r\n\t\t\tautoStart : false, // Display thumbnails on opening\r\n\t\t\thideOnClose : true, // Hide thumbnail grid when closing animation starts\r\n\t\t\tparentEl : '.fancybox-container', // Container is injected into this element\r\n\t\t\taxis : 'y' // Vertical (y) or horizontal (x) scrolling\r\n\t\t},\r\n\r\n // Use mousewheel to navigate gallery\r\n // If 'auto' - enabled for images only\r\n wheel : 'auto',\r\n\r\n // Callbacks\r\n //==========\r\n\r\n // See Documentation/API/Events for more information\r\n // Example:\r\n /*\r\n afterShow: function( instance, current ) {\r\n console.info( 'Clicked element:' );\r\n console.info( current.opts.$orig );\r\n }\r\n */\r\n\r\n onInit : $.noop, // When instance has been initialized\r\n\r\n beforeLoad : $.noop, // Before the content of a slide is being loaded\r\n afterLoad : $.noop, // When the content of a slide is done loading\r\n\r\n beforeShow : $.noop, // Before open animation starts\r\n afterShow : $.noop, // When content is done loading and animating\r\n\r\n beforeClose : $.noop, // Before the instance attempts to close. Return false to cancel the close.\r\n afterClose : $.noop, // After instance has been closed\r\n\r\n onActivate : $.noop, // When instance is brought to front\r\n onDeactivate : $.noop, // When other instance has been activated\r\n\r\n\r\n // Interaction\r\n // ===========\r\n\r\n // Use options below to customize taken action when user clicks or double clicks on the fancyBox area,\r\n // each option can be string or method that returns value.\r\n //\r\n // Possible values:\r\n // \"close\" - close instance\r\n // \"next\" - move to next gallery item\r\n // \"nextOrClose\" - move to next gallery item or close if gallery has only one item\r\n // \"toggleControls\" - show/hide controls\r\n // \"zoom\" - zoom image (if loaded)\r\n // false - do nothing\r\n\r\n // Clicked on the content\r\n clickContent : function( current, event ) {\r\n return current.type === 'image' ? 'zoom' : false;\r\n },\r\n\r\n // Clicked on the slide\r\n clickSlide : 'close',\r\n\r\n // Clicked on the background (backdrop) element\r\n clickOutside : 'close',\r\n\r\n // Same as previous two, but for double click\r\n dblclickContent : false,\r\n dblclickSlide : false,\r\n dblclickOutside : false,\r\n\r\n\r\n // Custom options when mobile device is detected\r\n // =============================================\r\n\r\n mobile : {\r\n idleTime : false,\r\n margin : 0,\r\n\r\n clickContent : function( current, event ) {\r\n return current.type === 'image' ? 'toggleControls' : false;\r\n },\r\n clickSlide : function( current, event ) {\r\n return current.type === 'image' ? 'toggleControls' : 'close';\r\n },\r\n dblclickContent : function( current, event ) {\r\n return current.type === 'image' ? 'zoom' : false;\r\n },\r\n dblclickSlide : function( current, event ) {\r\n return current.type === 'image' ? 'zoom' : false;\r\n }\r\n },\r\n\r\n\r\n // Internationalization\r\n // ============\r\n\r\n lang : 'en',\r\n i18n : {\r\n 'en' : {\r\n CLOSE : 'Close',\r\n NEXT : 'Next',\r\n PREV : 'Previous',\r\n ERROR : 'The requested content cannot be loaded.
Please try again later.',\r\n PLAY_START : 'Start slideshow',\r\n PLAY_STOP : 'Pause slideshow',\r\n FULL_SCREEN : 'Full screen',\r\n THUMBS : 'Thumbnails',\r\n DOWNLOAD : 'Download',\r\n SHARE : 'Share',\r\n ZOOM : 'Zoom'\r\n },\r\n 'de' : {\r\n CLOSE : 'Schliessen',\r\n NEXT : 'Weiter',\r\n PREV : 'Zurück',\r\n ERROR : 'Die angeforderten Daten konnten nicht geladen werden.
Bitte versuchen Sie es später nochmal.',\r\n PLAY_START : 'Diaschau starten',\r\n PLAY_STOP : 'Diaschau beenden',\r\n FULL_SCREEN : 'Vollbild',\r\n THUMBS : 'Vorschaubilder',\r\n DOWNLOAD : 'Herunterladen',\r\n SHARE : 'Teilen',\r\n ZOOM : 'Maßstab'\r\n }\r\n }\r\n\r\n };\r\n\r\n // Few useful variables and methods\r\n // ================================\r\n\r\n var $W = $(window);\r\n var $D = $(document);\r\n\r\n var called = 0;\r\n\r\n\r\n // Check if an object is a jQuery object and not a native JavaScript object\r\n // ========================================================================\r\n\r\n var isQuery = function ( obj ) {\r\n return obj && obj.hasOwnProperty && obj instanceof $;\r\n };\r\n\r\n\r\n // Handle multiple browsers for \"requestAnimationFrame\" and \"cancelAnimationFrame\"\r\n // ===============================================================================\r\n\r\n var requestAFrame = (function () {\r\n return window.requestAnimationFrame ||\r\n window.webkitRequestAnimationFrame ||\r\n window.mozRequestAnimationFrame ||\r\n window.oRequestAnimationFrame ||\r\n // if all else fails, use setTimeout\r\n function (callback) {\r\n return window.setTimeout(callback, 1000 / 60);\r\n };\r\n })();\r\n\r\n\r\n // Detect the supported transition-end event property name\r\n // =======================================================\r\n\r\n var transitionEnd = (function () {\r\n var t, el = document.createElement(\"fakeelement\");\r\n\r\n var transitions = {\r\n \"transition\" : \"transitionend\",\r\n \"OTransition\" : \"oTransitionEnd\",\r\n \"MozTransition\" : \"transitionend\",\r\n \"WebkitTransition\": \"webkitTransitionEnd\"\r\n };\r\n\r\n for (t in transitions) {\r\n if (el.style[t] !== undefined){\r\n return transitions[t];\r\n }\r\n }\r\n\r\n return 'transitionend';\r\n })();\r\n\r\n\r\n // Force redraw on an element.\r\n // This helps in cases where the browser doesn't redraw an updated element properly.\r\n // =================================================================================\r\n\r\n var forceRedraw = function( $el ) {\r\n return ( $el && $el.length && $el[0].offsetHeight );\r\n };\r\n\r\n\r\n // Class definition\r\n // ================\r\n\r\n var FancyBox = function( content, opts, index ) {\r\n var self = this;\r\n\r\n self.opts = $.extend( true, { index : index }, $.fancybox.defaults, opts || {} );\r\n\r\n if ( $.fancybox.isMobile ) {\r\n self.opts = $.extend( true, {}, self.opts, self.opts.mobile );\r\n }\r\n\r\n // Exclude buttons option from deep merging\r\n if ( opts && $.isArray( opts.buttons ) ) {\r\n self.opts.buttons = opts.buttons;\r\n }\r\n\r\n self.id = self.opts.id || ++called;\r\n self.group = [];\r\n\r\n self.currIndex = parseInt( self.opts.index, 10 ) || 0;\r\n self.prevIndex = null;\r\n\r\n self.prevPos = null;\r\n self.currPos = 0;\r\n\r\n self.firstRun = null;\r\n\r\n // Create group elements from original item collection\r\n self.createGroup( content );\r\n\r\n if ( !self.group.length ) {\r\n return;\r\n }\r\n\r\n // Save last active element and current scroll position\r\n self.$lastFocus = $(document.activeElement).blur();\r\n\r\n // Collection of gallery objects\r\n self.slides = {};\r\n\r\n self.init();\r\n };\r\n\r\n $.extend(FancyBox.prototype, {\r\n\r\n // Create DOM structure\r\n // ====================\r\n\r\n init : function() {\r\n var self = this,\r\n firstItem = self.group[ self.currIndex ],\r\n firstItemOpts = firstItem.opts,\r\n scrollbarWidth = $.fancybox.scrollbarWidth,\r\n $scrollDiv,\r\n $container,\r\n buttonStr;\r\n\r\n self.scrollTop = $D.scrollTop();\r\n self.scrollLeft = $D.scrollLeft();\r\n\r\n\r\n // Hide scrollbars\r\n // ===============\r\n\r\n if ( !$.fancybox.getInstance() ) {\r\n\r\n $( 'body' ).addClass( 'fancybox-active' );\r\n\r\n // iOS hack\r\n if ( /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream ) {\r\n\r\n // iOS has problems for input elements inside fixed containers,\r\n // the workaround is to apply `position: fixed` to `` element,\r\n // unfortunately, this makes it lose the scrollbars and forces address bar to appear.\r\n\r\n if ( firstItem.type !== 'image' ) {\r\n $( 'body' ).css( 'top', $( 'body' ).scrollTop() * -1 ).addClass( 'fancybox-iosfix' );\r\n }\r\n\r\n } else if ( !$.fancybox.isMobile && document.body.scrollHeight > window.innerHeight ) {\r\n\r\n if ( scrollbarWidth === undefined ) {\r\n $scrollDiv = $('
').appendTo( 'body' );\r\n\r\n scrollbarWidth = $.fancybox.scrollbarWidth = $scrollDiv[0].offsetWidth - $scrollDiv[0].clientWidth;\r\n\r\n $scrollDiv.remove();\r\n }\r\n\r\n $( 'head' ).append( '' );\r\n $( 'body' ).addClass( 'compensate-for-scrollbar' );\r\n }\r\n }\r\n\r\n\r\n // Build html markup and set references\r\n // ====================================\r\n\r\n // Build html code for buttons and insert into main template\r\n buttonStr = '';\r\n\r\n $.each( firstItemOpts.buttons, function( index, value ) {\r\n buttonStr += ( firstItemOpts.btnTpl[ value ] || '' );\r\n });\r\n\r\n // Create markup from base template, it will be initially hidden to\r\n // avoid unnecessary work like painting while initializing is not complete\r\n $container = $(\r\n self.translate( self,\r\n firstItemOpts.baseTpl\r\n .replace( '\\{\\{buttons\\}\\}', buttonStr )\r\n .replace( '\\{\\{arrows\\}\\}', firstItemOpts.btnTpl.arrowLeft + firstItemOpts.btnTpl.arrowRight )\r\n )\r\n )\r\n .attr( 'id', 'fancybox-container-' + self.id )\r\n .addClass( 'fancybox-is-hidden' )\r\n .addClass( firstItemOpts.baseClass )\r\n .data( 'FancyBox', self )\r\n .appendTo( firstItemOpts.parentEl );\r\n\r\n // Create object holding references to jQuery wrapped nodes\r\n self.$refs = {\r\n container : $container\r\n };\r\n\r\n [ 'bg', 'inner', 'infobar', 'toolbar', 'stage', 'caption', 'navigation' ].forEach(function(item) {\r\n self.$refs[ item ] = $container.find( '.fancybox-' + item );\r\n });\r\n\r\n self.trigger( 'onInit' );\r\n\r\n // Enable events, deactive previous instances\r\n self.activate();\r\n\r\n // Build slides, load and reveal content\r\n self.jumpTo( self.currIndex );\r\n },\r\n\r\n\r\n // Simple i18n support - replaces object keys found in template\r\n // with corresponding values\r\n // ============================================================\r\n\r\n translate : function( obj, str ) {\r\n var arr = obj.opts.i18n[ obj.opts.lang ];\r\n\r\n return str.replace(/\\{\\{(\\w+)\\}\\}/g, function(match, n) {\r\n var value = arr[n];\r\n\r\n if ( value === undefined ) {\r\n return match;\r\n }\r\n\r\n return value;\r\n });\r\n },\r\n\r\n // Create array of gally item objects\r\n // Check if each object has valid type and content\r\n // ===============================================\r\n\r\n createGroup : function ( content ) {\r\n var self = this;\r\n var items = $.makeArray( content );\r\n\r\n $.each(items, function( i, item ) {\r\n var obj = {},\r\n opts = {},\r\n $item,\r\n type,\r\n found,\r\n src,\r\n srcParts;\r\n\r\n // Step 1 - Make sure we have an object\r\n // ====================================\r\n\r\n if ( $.isPlainObject( item ) ) {\r\n\r\n // We probably have manual usage here, something like\r\n // $.fancybox.open( [ { src : \"image.jpg\", type : \"image\" } ] )\r\n\r\n obj = item;\r\n opts = item.opts || item;\r\n\r\n } else if ( $.type( item ) === 'object' && $( item ).length ) {\r\n\r\n // Here we probably have jQuery collection returned by some selector\r\n $item = $( item );\r\n\r\n opts = $item.data();\r\n opts = $.extend( {}, opts, opts.options || {} );\r\n\r\n // Here we store clicked element\r\n opts.$orig = $item;\r\n\r\n obj.src = opts.src || $item.attr( 'href' );\r\n\r\n // Assume that simple syntax is used, for example:\r\n // `$.fancybox.open( $(\"#test\"), {} );`\r\n if ( !obj.type && !obj.src ) {\r\n obj.type = 'inline';\r\n obj.src = item;\r\n }\r\n\r\n } else {\r\n\r\n // Assume we have a simple html code, for example:\r\n // $.fancybox.open( '

Hi!

' );\r\n\r\n obj = {\r\n type : 'html',\r\n src : item + ''\r\n };\r\n\r\n }\r\n\r\n // Each gallery object has full collection of options\r\n obj.opts = $.extend( true, {}, self.opts, opts );\r\n\r\n // Do not merge buttons array\r\n if ( $.isArray( opts.buttons ) ) {\r\n obj.opts.buttons = opts.buttons;\r\n }\r\n\r\n\r\n // Step 2 - Make sure we have content type, if not - try to guess\r\n // ==============================================================\r\n\r\n type = obj.type || obj.opts.type;\r\n src = obj.src || '';\r\n\r\n if ( !type && src ) {\r\n if ( src.match(/(^data:image\\/[a-z0-9+\\/=]*,)|(\\.(jp(e|g|eg)|gif|png|bmp|webp|svg|ico)((\\?|#).*)?$)/i) ) {\r\n type = 'image';\r\n\r\n } else if ( src.match(/\\.(pdf)((\\?|#).*)?$/i) ) {\r\n type = 'pdf';\r\n\r\n } else if ( found = src.match(/\\.(mp4|mov|ogv)((\\?|#).*)?$/i) ) {\r\n type = 'video';\r\n\r\n if ( !obj.opts.videoFormat ) {\r\n obj.opts.videoFormat = 'video/' + ( found[1] === 'ogv' ? 'ogg' : found[1] );\r\n }\r\n\r\n } else if ( src.charAt(0) === '#' ) {\r\n type = 'inline';\r\n }\r\n }\r\n\r\n if ( type ) {\r\n obj.type = type;\r\n\r\n } else {\r\n self.trigger( 'objectNeedsType', obj );\r\n }\r\n\r\n\r\n // Step 3 - Some adjustments\r\n // =========================\r\n\r\n obj.index = self.group.length;\r\n\r\n // Check if $orig and $thumb objects exist\r\n if ( obj.opts.$orig && !obj.opts.$orig.length ) {\r\n delete obj.opts.$orig;\r\n }\r\n\r\n if ( !obj.opts.$thumb && obj.opts.$orig ) {\r\n obj.opts.$thumb = obj.opts.$orig.find( 'img:first' );\r\n }\r\n\r\n if ( obj.opts.$thumb && !obj.opts.$thumb.length ) {\r\n delete obj.opts.$thumb;\r\n }\r\n\r\n // \"caption\" is a \"special\" option, it can be used to customize caption per gallery item ..\r\n if ( $.type( obj.opts.caption ) === 'function' ) {\r\n obj.opts.caption = obj.opts.caption.apply( item, [ self, obj ] );\r\n }\r\n\r\n if ( $.type( self.opts.caption ) === 'function' ) {\r\n obj.opts.caption = self.opts.caption.apply( item, [ self, obj ] );\r\n }\r\n\r\n // Make sure we have caption as a string or jQuery object\r\n if ( !( obj.opts.caption instanceof $ ) ) {\r\n obj.opts.caption = obj.opts.caption === undefined ? '' : obj.opts.caption + '';\r\n }\r\n\r\n // Check if url contains \"filter\" used to filter the content\r\n // Example: \"ajax.html #something\"\r\n if ( type === 'ajax' ) {\r\n srcParts = src.split(/\\s+/, 2);\r\n\r\n if ( srcParts.length > 1 ) {\r\n obj.src = srcParts.shift();\r\n\r\n obj.opts.filter = srcParts.shift();\r\n }\r\n }\r\n\r\n if ( obj.opts.smallBtn == 'auto' ) {\r\n\r\n if ( $.inArray( type, ['html', 'inline', 'ajax'] ) > -1 ) {\r\n obj.opts.toolbar = false;\r\n obj.opts.smallBtn = true;\r\n\r\n } else {\r\n obj.opts.smallBtn = false;\r\n }\r\n\r\n }\r\n\r\n // If the type is \"pdf\", then simply load file into iframe\r\n if ( type === 'pdf' ) {\r\n obj.type = 'iframe';\r\n\r\n obj.opts.iframe.preload = false;\r\n }\r\n\r\n // Hide all buttons and disable interactivity for modal items\r\n if ( obj.opts.modal ) {\r\n\r\n obj.opts = $.extend(true, obj.opts, {\r\n // Remove buttons\r\n infobar : 0,\r\n toolbar : 0,\r\n\r\n smallBtn : 0,\r\n\r\n // Disable keyboard navigation\r\n keyboard : 0,\r\n\r\n // Disable some modules\r\n slideShow : 0,\r\n fullScreen : 0,\r\n thumbs : 0,\r\n touch : 0,\r\n\r\n // Disable click event handlers\r\n clickContent : false,\r\n clickSlide : false,\r\n clickOutside : false,\r\n dblclickContent : false,\r\n dblclickSlide : false,\r\n dblclickOutside : false\r\n });\r\n\r\n }\r\n\r\n // Step 4 - Add processed object to group\r\n // ======================================\r\n\r\n self.group.push( obj );\r\n\r\n });\r\n\r\n },\r\n\r\n\r\n // Attach an event handler functions for:\r\n // - navigation buttons\r\n // - browser scrolling, resizing;\r\n // - focusing\r\n // - keyboard\r\n // - detect idle\r\n // ======================================\r\n\r\n addEvents : function() {\r\n var self = this;\r\n\r\n self.removeEvents();\r\n\r\n // Make navigation elements clickable\r\n self.$refs.container.on('click.fb-close', '[data-fancybox-close]', function(e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n self.close( e );\r\n\r\n }).on( 'click.fb-prev touchend.fb-prev', '[data-fancybox-prev]', function(e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n self.previous();\r\n\r\n }).on( 'click.fb-next touchend.fb-next', '[data-fancybox-next]', function(e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n self.next();\r\n\r\n }).on( 'click.fb', '[data-fancybox-zoom]', function(e) {\r\n // Click handler for zoom button\r\n self[ self.isScaledDown() ? 'scaleToActual' : 'scaleToFit' ]();\r\n });\r\n\r\n\r\n // Handle page scrolling and browser resizing\r\n $W.on('orientationchange.fb resize.fb', function(e) {\r\n\r\n if ( e && e.originalEvent && e.originalEvent.type === \"resize\" ) {\r\n\r\n requestAFrame(function() {\r\n self.update();\r\n });\r\n\r\n } else {\r\n\r\n self.$refs.stage.hide();\r\n\r\n setTimeout(function() {\r\n self.$refs.stage.show();\r\n\r\n self.update();\r\n }, 600);\r\n\r\n }\r\n\r\n });\r\n\r\n // Trap keyboard focus inside of the modal, so the user does not accidentally tab outside of the modal\r\n // (a.k.a. \"escaping the modal\")\r\n $D.on('focusin.fb', function(e) {\r\n var instance = $.fancybox ? $.fancybox.getInstance() : null;\r\n\r\n if ( instance.isClosing || !instance.current || !instance.current.opts.trapFocus || $( e.target ).hasClass( 'fancybox-container' ) || $( e.target ).is( document ) ) {\r\n return;\r\n }\r\n\r\n if ( instance && $( e.target ).css( 'position' ) !== 'fixed' && !instance.$refs.container.has( e.target ).length ) {\r\n e.stopPropagation();\r\n\r\n instance.focus();\r\n\r\n // Sometimes page gets scrolled, set it back\r\n $W.scrollTop( self.scrollTop ).scrollLeft( self.scrollLeft );\r\n }\r\n });\r\n\r\n\r\n // Enable keyboard navigation\r\n $D.on('keydown.fb', function (e) {\r\n var current = self.current,\r\n keycode = e.keyCode || e.which;\r\n\r\n if ( !current || !current.opts.keyboard ) {\r\n return;\r\n }\r\n\r\n if ( $(e.target).is('input') || $(e.target).is('textarea') ) {\r\n return;\r\n }\r\n\r\n // Backspace and Esc keys\r\n if ( keycode === 8 || keycode === 27 ) {\r\n e.preventDefault();\r\n\r\n self.close( e );\r\n\r\n return;\r\n }\r\n\r\n // Left arrow and Up arrow\r\n if ( keycode === 37 || keycode === 38 ) {\r\n e.preventDefault();\r\n\r\n self.previous();\r\n\r\n return;\r\n }\r\n\r\n // Righ arrow and Down arrow\r\n if ( keycode === 39 || keycode === 40 ) {\r\n e.preventDefault();\r\n\r\n self.next();\r\n\r\n return;\r\n }\r\n\r\n self.trigger('afterKeydown', e, keycode);\r\n });\r\n\r\n\r\n // Hide controls after some inactivity period\r\n if ( self.group[ self.currIndex ].opts.idleTime ) {\r\n self.idleSecondsCounter = 0;\r\n\r\n $D.on('mousemove.fb-idle mouseleave.fb-idle mousedown.fb-idle touchstart.fb-idle touchmove.fb-idle scroll.fb-idle keydown.fb-idle', function(e) {\r\n self.idleSecondsCounter = 0;\r\n\r\n if ( self.isIdle ) {\r\n self.showControls();\r\n }\r\n\r\n self.isIdle = false;\r\n });\r\n\r\n self.idleInterval = window.setInterval(function() {\r\n self.idleSecondsCounter++;\r\n\r\n if ( self.idleSecondsCounter >= self.group[ self.currIndex ].opts.idleTime && !self.isDragging ) {\r\n self.isIdle = true;\r\n self.idleSecondsCounter = 0;\r\n\r\n self.hideControls();\r\n }\r\n\r\n }, 1000);\r\n }\r\n\r\n },\r\n\r\n\r\n // Remove events added by the core\r\n // ===============================\r\n\r\n removeEvents : function() {\r\n var self = this;\r\n\r\n $W.off( 'orientationchange.fb resize.fb' );\r\n $D.off( 'focusin.fb keydown.fb .fb-idle' );\r\n\r\n this.$refs.container.off( '.fb-close .fb-prev .fb-next' );\r\n\r\n if ( self.idleInterval ) {\r\n window.clearInterval( self.idleInterval );\r\n\r\n self.idleInterval = null;\r\n }\r\n },\r\n\r\n\r\n // Change to previous gallery item\r\n // ===============================\r\n\r\n previous : function( duration ) {\r\n return this.jumpTo( this.currPos - 1, duration );\r\n },\r\n\r\n\r\n // Change to next gallery item\r\n // ===========================\r\n\r\n next : function( duration ) {\r\n return this.jumpTo( this.currPos + 1, duration );\r\n },\r\n\r\n\r\n // Switch to selected gallery item\r\n // ===============================\r\n\r\n jumpTo : function ( pos, duration, slide ) {\r\n var self = this,\r\n firstRun,\r\n loop,\r\n current,\r\n previous,\r\n canvasWidth,\r\n currentPos,\r\n transitionProps;\r\n\r\n var groupLen = self.group.length;\r\n\r\n if ( self.isDragging || self.isClosing || ( self.isAnimating && self.firstRun ) ) {\r\n return;\r\n }\r\n\r\n pos = parseInt( pos, 10 );\r\n loop = self.current ? self.current.opts.loop : self.opts.loop;\r\n\r\n if ( !loop && ( pos < 0 || pos >= groupLen ) ) {\r\n return false;\r\n }\r\n\r\n firstRun = self.firstRun = ( self.firstRun === null );\r\n\r\n if ( groupLen < 2 && !firstRun && !!self.isDragging ) {\r\n return;\r\n }\r\n\r\n previous = self.current;\r\n\r\n self.prevIndex = self.currIndex;\r\n self.prevPos = self.currPos;\r\n\r\n // Create slides\r\n current = self.createSlide( pos );\r\n\r\n if ( groupLen > 1 ) {\r\n if ( loop || current.index > 0 ) {\r\n self.createSlide( pos - 1 );\r\n }\r\n\r\n if ( loop || current.index < groupLen - 1 ) {\r\n self.createSlide( pos + 1 );\r\n }\r\n }\r\n\r\n self.current = current;\r\n self.currIndex = current.index;\r\n self.currPos = current.pos;\r\n\r\n self.trigger( 'beforeShow', firstRun );\r\n\r\n self.updateControls();\r\n\r\n currentPos = $.fancybox.getTranslate( current.$slide );\r\n\r\n current.isMoved = ( currentPos.left !== 0 || currentPos.top !== 0 ) && !current.$slide.hasClass( 'fancybox-animated' );\r\n current.forcedDuration = undefined;\r\n\r\n if ( $.isNumeric( duration ) ) {\r\n current.forcedDuration = duration;\r\n } else {\r\n duration = current.opts[ firstRun ? 'animationDuration' : 'transitionDuration' ];\r\n }\r\n\r\n duration = parseInt( duration, 10 );\r\n\r\n // Fresh start - reveal container, current slide and start loading content\r\n if ( firstRun ) {\r\n\r\n if ( current.opts.animationEffect && duration ) {\r\n self.$refs.container.css( 'transition-duration', duration + 'ms' );\r\n }\r\n\r\n self.$refs.container.removeClass( 'fancybox-is-hidden' );\r\n\r\n forceRedraw( self.$refs.container );\r\n\r\n self.$refs.container.addClass( 'fancybox-is-open' );\r\n\r\n // Make first slide visible (to display loading icon, if needed)\r\n current.$slide.addClass( 'fancybox-slide--current' );\r\n\r\n self.loadSlide( current );\r\n\r\n self.preload( 'image' );\r\n\r\n return;\r\n }\r\n\r\n // Clean up\r\n $.each(self.slides, function( index, slide ) {\r\n $.fancybox.stop( slide.$slide );\r\n });\r\n\r\n // Make current that slide is visible even if content is still loading\r\n current.$slide.removeClass( 'fancybox-slide--next fancybox-slide--previous' ).addClass( 'fancybox-slide--current' );\r\n\r\n // If slides have been dragged, animate them to correct position\r\n if ( current.isMoved ) {\r\n canvasWidth = Math.round( current.$slide.width() );\r\n\r\n $.each(self.slides, function( index, slide ) {\r\n var pos = slide.pos - current.pos;\r\n\r\n $.fancybox.animate( slide.$slide, {\r\n top : 0,\r\n left : ( pos * canvasWidth ) + ( pos * slide.opts.gutter )\r\n }, duration, function() {\r\n\r\n slide.$slide.removeAttr('style').removeClass( 'fancybox-slide--next fancybox-slide--previous' );\r\n\r\n if ( slide.pos === self.currPos ) {\r\n current.isMoved = false;\r\n\r\n self.complete();\r\n }\r\n });\r\n });\r\n\r\n } else {\r\n self.$refs.stage.children().removeAttr( 'style' );\r\n }\r\n\r\n // Start transition that reveals current content\r\n // or wait when it will be loaded\r\n\r\n if ( current.isLoaded ) {\r\n self.revealContent( current );\r\n\r\n } else {\r\n self.loadSlide( current );\r\n }\r\n\r\n self.preload( 'image' );\r\n\r\n if ( previous.pos === current.pos ) {\r\n return;\r\n }\r\n\r\n // Handle previous slide\r\n // =====================\r\n\r\n transitionProps = 'fancybox-slide--' + ( previous.pos > current.pos ? 'next' : 'previous' );\r\n\r\n previous.$slide.removeClass( 'fancybox-slide--complete fancybox-slide--current fancybox-slide--next fancybox-slide--previous' );\r\n\r\n previous.isComplete = false;\r\n\r\n if ( !duration || ( !current.isMoved && !current.opts.transitionEffect ) ) {\r\n return;\r\n }\r\n\r\n if ( current.isMoved ) {\r\n previous.$slide.addClass( transitionProps );\r\n\r\n } else {\r\n\r\n transitionProps = 'fancybox-animated ' + transitionProps + ' fancybox-fx-' + current.opts.transitionEffect;\r\n\r\n $.fancybox.animate( previous.$slide, transitionProps, duration, function() {\r\n previous.$slide.removeClass( transitionProps ).removeAttr( 'style' );\r\n });\r\n\r\n }\r\n\r\n },\r\n\r\n\r\n // Create new \"slide\" element\r\n // These are gallery items that are actually added to DOM\r\n // =======================================================\r\n\r\n createSlide : function( pos ) {\r\n\r\n var self = this;\r\n var $slide;\r\n var index;\r\n\r\n index = pos % self.group.length;\r\n index = index < 0 ? self.group.length + index : index;\r\n\r\n if ( !self.slides[ pos ] && self.group[ index ] ) {\r\n $slide = $('
').appendTo( self.$refs.stage );\r\n\r\n self.slides[ pos ] = $.extend( true, {}, self.group[ index ], {\r\n pos : pos,\r\n $slide : $slide,\r\n isLoaded : false,\r\n });\r\n\r\n self.updateSlide( self.slides[ pos ] );\r\n }\r\n\r\n return self.slides[ pos ];\r\n },\r\n\r\n\r\n // Scale image to the actual size of the image\r\n // ===========================================\r\n\r\n scaleToActual : function( x, y, duration ) {\r\n\r\n var self = this;\r\n\r\n var current = self.current;\r\n var $what = current.$content;\r\n\r\n var imgPos, posX, posY, scaleX, scaleY;\r\n\r\n var canvasWidth = parseInt( current.$slide.width(), 10 );\r\n var canvasHeight = parseInt( current.$slide.height(), 10 );\r\n\r\n var newImgWidth = current.width;\r\n var newImgHeight = current.height;\r\n\r\n if ( !( current.type == 'image' && !current.hasError) || !$what || self.isAnimating ) {\r\n return;\r\n }\r\n\r\n $.fancybox.stop( $what );\r\n\r\n self.isAnimating = true;\r\n\r\n x = x === undefined ? canvasWidth * 0.5 : x;\r\n y = y === undefined ? canvasHeight * 0.5 : y;\r\n\r\n imgPos = $.fancybox.getTranslate( $what );\r\n\r\n scaleX = newImgWidth / imgPos.width;\r\n scaleY = newImgHeight / imgPos.height;\r\n\r\n // Get center position for original image\r\n posX = ( canvasWidth * 0.5 - newImgWidth * 0.5 );\r\n posY = ( canvasHeight * 0.5 - newImgHeight * 0.5 );\r\n\r\n // Make sure image does not move away from edges\r\n if ( newImgWidth > canvasWidth ) {\r\n posX = imgPos.left * scaleX - ( ( x * scaleX ) - x );\r\n\r\n if ( posX > 0 ) {\r\n posX = 0;\r\n }\r\n\r\n if ( posX < canvasWidth - newImgWidth ) {\r\n posX = canvasWidth - newImgWidth;\r\n }\r\n }\r\n\r\n if ( newImgHeight > canvasHeight) {\r\n posY = imgPos.top * scaleY - ( ( y * scaleY ) - y );\r\n\r\n if ( posY > 0 ) {\r\n posY = 0;\r\n }\r\n\r\n if ( posY < canvasHeight - newImgHeight ) {\r\n posY = canvasHeight - newImgHeight;\r\n }\r\n }\r\n\r\n self.updateCursor( newImgWidth, newImgHeight );\r\n\r\n $.fancybox.animate( $what, {\r\n top : posY,\r\n left : posX,\r\n scaleX : scaleX,\r\n scaleY : scaleY\r\n }, duration || 330, function() {\r\n self.isAnimating = false;\r\n });\r\n\r\n // Stop slideshow\r\n if ( self.SlideShow && self.SlideShow.isActive ) {\r\n self.SlideShow.stop();\r\n }\r\n },\r\n\r\n\r\n // Scale image to fit inside parent element\r\n // ========================================\r\n\r\n scaleToFit : function( duration ) {\r\n\r\n var self = this;\r\n\r\n var current = self.current;\r\n var $what = current.$content;\r\n var end;\r\n\r\n if ( !( current.type == 'image' && !current.hasError) || !$what || self.isAnimating ) {\r\n return;\r\n }\r\n\r\n $.fancybox.stop( $what );\r\n\r\n self.isAnimating = true;\r\n\r\n end = self.getFitPos( current );\r\n\r\n self.updateCursor( end.width, end.height );\r\n\r\n $.fancybox.animate( $what, {\r\n top : end.top,\r\n left : end.left,\r\n scaleX : end.width / $what.width(),\r\n scaleY : end.height / $what.height()\r\n }, duration || 330, function() {\r\n self.isAnimating = false;\r\n });\r\n\r\n },\r\n\r\n // Calculate image size to fit inside viewport\r\n // ===========================================\r\n\r\n getFitPos : function( slide ) {\r\n var self = this;\r\n var $what = slide.$content;\r\n\r\n var imgWidth = slide.width;\r\n var imgHeight = slide.height;\r\n\r\n var margin = slide.opts.margin;\r\n\r\n var canvasWidth, canvasHeight, minRatio, width, height;\r\n\r\n if ( !$what || !$what.length || ( !imgWidth && !imgHeight) ) {\r\n return false;\r\n }\r\n\r\n // Convert \"margin to CSS style: [ top, right, bottom, left ]\r\n if ( $.type( margin ) === \"number\" ) {\r\n margin = [ margin, margin ];\r\n }\r\n\r\n if ( margin.length == 2 ) {\r\n margin = [ margin[0], margin[1], margin[0], margin[1] ];\r\n }\r\n\r\n // We can not use $slide width here, because it can have different diemensions while in transiton\r\n canvasWidth = parseInt( self.$refs.stage.width(), 10 ) - ( margin[ 1 ] + margin[ 3 ] );\r\n canvasHeight = parseInt( self.$refs.stage.height(), 10 ) - ( margin[ 0 ] + margin[ 2 ] );\r\n\r\n minRatio = Math.min(1, canvasWidth / imgWidth, canvasHeight / imgHeight );\r\n\r\n width = Math.floor( minRatio * imgWidth );\r\n height = Math.floor( minRatio * imgHeight );\r\n\r\n // Use floor rounding to make sure it really fits\r\n return {\r\n top : Math.floor( ( canvasHeight - height ) * 0.5 ) + margin[ 0 ],\r\n left : Math.floor( ( canvasWidth - width ) * 0.5 ) + margin[ 3 ],\r\n width : width,\r\n height : height\r\n };\r\n\r\n },\r\n\r\n\r\n // Update content size and position for all slides\r\n // ==============================================\r\n\r\n update : function() {\r\n var self = this;\r\n\r\n $.each( self.slides, function( key, slide ) {\r\n self.updateSlide( slide );\r\n });\r\n },\r\n\r\n\r\n // Update slide content position and size\r\n // ======================================\r\n\r\n updateSlide : function( slide, duration ) {\r\n var self = this,\r\n $what = slide && slide.$content;\r\n\r\n if ( $what && ( slide.width || slide.height ) ) {\r\n self.isAnimating = false;\r\n\r\n $.fancybox.stop( $what );\r\n\r\n $.fancybox.setTranslate( $what, self.getFitPos( slide ) );\r\n\r\n if ( slide.pos === self.currPos ) {\r\n self.updateCursor();\r\n }\r\n }\r\n\r\n slide.$slide.trigger( 'refresh' );\r\n\r\n self.trigger( 'onUpdate', slide );\r\n\r\n },\r\n\r\n\r\n // Horizontally center slide\r\n // =========================\r\n\r\n centerSlide : function( slide, duration ) {\r\n var self = this, canvasWidth, pos;\r\n\r\n if ( self.current ) {\r\n canvasWidth = Math.round( slide.$slide.width() );\r\n pos = slide.pos - self.current.pos;\r\n\r\n $.fancybox.animate( slide.$slide, {\r\n top : 0,\r\n left : ( pos * canvasWidth ) + ( pos * slide.opts.gutter ),\r\n opacity : 1\r\n }, duration === undefined ? 0 : duration, null, false);\r\n }\r\n },\r\n\r\n\r\n // Update cursor style depending if content can be zoomed\r\n // ======================================================\r\n\r\n updateCursor : function( nextWidth, nextHeight ) {\r\n\r\n var self = this;\r\n var isScaledDown;\r\n\r\n var $container = self.$refs.container.removeClass( 'fancybox-is-zoomable fancybox-can-zoomIn fancybox-can-drag fancybox-can-zoomOut' );\r\n\r\n if ( !self.current || self.isClosing ) {\r\n return;\r\n }\r\n\r\n if ( self.isZoomable() ) {\r\n\r\n $container.addClass( 'fancybox-is-zoomable' );\r\n\r\n if ( nextWidth !== undefined && nextHeight !== undefined ) {\r\n isScaledDown = nextWidth < self.current.width && nextHeight < self.current.height;\r\n\r\n } else {\r\n isScaledDown = self.isScaledDown();\r\n }\r\n\r\n if ( isScaledDown ) {\r\n\r\n // If image is scaled down, then, obviously, it can be zoomed to full size\r\n $container.addClass( 'fancybox-can-zoomIn' );\r\n\r\n } else {\r\n\r\n if ( self.current.opts.touch ) {\r\n\r\n // If image size ir largen than available available and touch module is not disable,\r\n // then user can do panning\r\n $container.addClass( 'fancybox-can-drag' );\r\n\r\n } else {\r\n $container.addClass( 'fancybox-can-zoomOut' );\r\n }\r\n\r\n }\r\n\r\n } else if ( self.current.opts.touch ) {\r\n $container.addClass( 'fancybox-can-drag' );\r\n }\r\n\r\n },\r\n\r\n\r\n // Check if current slide is zoomable\r\n // ==================================\r\n\r\n isZoomable : function() {\r\n\r\n var self = this;\r\n\r\n var current = self.current;\r\n var fitPos;\r\n\r\n if ( !current || self.isClosing ) {\r\n return;\r\n }\r\n\r\n // Assume that slide is zoomable if\r\n // - image is loaded successfuly\r\n // - click action is \"zoom\"\r\n // - actual size of the image is smaller than available area\r\n if ( current.type === 'image' && current.isLoaded && !current.hasError &&\r\n ( current.opts.clickContent === 'zoom' || ( $.isFunction( current.opts.clickContent ) && current.opts.clickContent( current ) === \"zoom\" ) )\r\n ) {\r\n\r\n fitPos = self.getFitPos( current );\r\n\r\n if ( current.width > fitPos.width || current.height > fitPos.height ) {\r\n return true;\r\n }\r\n\r\n }\r\n\r\n return false;\r\n\r\n },\r\n\r\n\r\n // Check if current image dimensions are smaller than actual\r\n // =========================================================\r\n\r\n isScaledDown : function() {\r\n\r\n var self = this;\r\n\r\n var current = self.current;\r\n var $what = current.$content;\r\n\r\n var rez = false;\r\n\r\n if ( $what ) {\r\n rez = $.fancybox.getTranslate( $what );\r\n rez = rez.width < current.width || rez.height < current.height;\r\n }\r\n\r\n return rez;\r\n\r\n },\r\n\r\n\r\n // Check if image dimensions exceed parent element\r\n // ===============================================\r\n\r\n canPan : function() {\r\n\r\n var self = this;\r\n\r\n var current = self.current;\r\n var $what = current.$content;\r\n\r\n var rez = false;\r\n\r\n if ( $what ) {\r\n rez = self.getFitPos( current );\r\n rez = Math.abs( $what.width() - rez.width ) > 1 || Math.abs( $what.height() - rez.height ) > 1;\r\n }\r\n\r\n return rez;\r\n\r\n },\r\n\r\n\r\n // Load content into the slide\r\n // ===========================\r\n\r\n loadSlide : function( slide ) {\r\n\r\n var self = this, type, $slide;\r\n var ajaxLoad;\r\n\r\n if ( slide.isLoading ) {\r\n return;\r\n }\r\n\r\n if ( slide.isLoaded ) {\r\n return;\r\n }\r\n\r\n slide.isLoading = true;\r\n\r\n self.trigger( 'beforeLoad', slide );\r\n\r\n type = slide.type;\r\n $slide = slide.$slide;\r\n\r\n $slide\r\n .off( 'refresh' )\r\n .trigger( 'onReset' )\r\n .addClass( 'fancybox-slide--' + ( type || 'unknown' ) )\r\n .addClass( slide.opts.slideClass );\r\n\r\n // Create content depending on the type\r\n\r\n switch ( type ) {\r\n\r\n case 'image':\r\n\r\n self.setImage( slide );\r\n\r\n break;\r\n\r\n case 'iframe':\r\n\r\n self.setIframe( slide );\r\n\r\n break;\r\n\r\n case 'html':\r\n\r\n self.setContent( slide, slide.src || slide.content );\r\n\r\n break;\r\n\r\n case 'inline':\r\n\r\n if ( $( slide.src ).length ) {\r\n self.setContent( slide, $( slide.src ) );\r\n\r\n } else {\r\n self.setError( slide );\r\n }\r\n\r\n break;\r\n\r\n case 'ajax':\r\n\r\n self.showLoading( slide );\r\n\r\n ajaxLoad = $.ajax( $.extend( {}, slide.opts.ajax.settings, {\r\n url : slide.src,\r\n success : function ( data, textStatus ) {\r\n\r\n if ( textStatus === 'success' ) {\r\n self.setContent( slide, data );\r\n }\r\n\r\n },\r\n error : function ( jqXHR, textStatus ) {\r\n\r\n if ( jqXHR && textStatus !== 'abort' ) {\r\n self.setError( slide );\r\n }\r\n\r\n }\r\n }));\r\n\r\n $slide.one( 'onReset', function () {\r\n ajaxLoad.abort();\r\n });\r\n\r\n break;\r\n\r\n case 'video' :\r\n\r\n self.setContent( slide,\r\n ''\r\n );\r\n\r\n break;\r\n\r\n default:\r\n\r\n self.setError( slide );\r\n\r\n break;\r\n\r\n }\r\n\r\n return true;\r\n\r\n },\r\n\r\n\r\n // Use thumbnail image, if possible\r\n // ================================\r\n\r\n setImage : function( slide ) {\r\n\r\n var self = this;\r\n var srcset = slide.opts.srcset || slide.opts.image.srcset;\r\n\r\n var found, temp, pxRatio, windowWidth;\r\n\r\n // If we have \"srcset\", then we need to find matching \"src\" value.\r\n // This is necessary, because when you set an src attribute, the browser will preload the image\r\n // before any javascript or even CSS is applied.\r\n if ( srcset ) {\r\n pxRatio = window.devicePixelRatio || 1;\r\n windowWidth = window.innerWidth * pxRatio;\r\n\r\n temp = srcset.split(',').map(function ( el ) {\r\n \t\tvar ret = {};\r\n\r\n \t\tel.trim().split(/\\s+/).forEach(function ( el, i ) {\r\n var value = parseInt( el.substring(0, el.length - 1), 10 );\r\n\r\n \t\t\tif ( i === 0 ) {\r\n \t\t\t\treturn ( ret.url = el );\r\n \t\t\t}\r\n\r\n if ( value ) {\r\n ret.value = value;\r\n ret.postfix = el[ el.length - 1 ];\r\n }\r\n\r\n \t\t});\r\n\r\n \t\treturn ret;\r\n \t});\r\n\r\n // Sort by value\r\n temp.sort(function (a, b) {\r\n return a.value - b.value;\r\n });\r\n\r\n // Ok, now we have an array of all srcset values\r\n for ( var j = 0; j < temp.length; j++ ) {\r\n var el = temp[ j ];\r\n\r\n if ( ( el.postfix === 'w' && el.value >= windowWidth ) || ( el.postfix === 'x' && el.value >= pxRatio ) ) {\r\n found = el;\r\n break;\r\n }\r\n }\r\n\r\n // If not found, take the last one\r\n if ( !found && temp.length ) {\r\n found = temp[ temp.length - 1 ];\r\n }\r\n\r\n if ( found ) {\r\n slide.src = found.url;\r\n\r\n // If we have default width/height values, we can calculate height for matching source\r\n if ( slide.width && slide.height && found.postfix == 'w' ) {\r\n slide.height = ( slide.width / slide.height ) * found.value;\r\n slide.width = found.value;\r\n }\r\n }\r\n }\r\n\r\n // This will be wrapper containing both ghost and actual image\r\n slide.$content = $('
')\r\n .addClass( 'fancybox-is-hidden' )\r\n .appendTo( slide.$slide );\r\n\r\n\r\n // If we have a thumbnail, we can display it while actual image is loading\r\n // Users will not stare at black screen and actual image will appear gradually\r\n if ( slide.opts.preload !== false && slide.opts.width && slide.opts.height && ( slide.opts.thumb || slide.opts.$thumb ) ) {\r\n\r\n slide.width = slide.opts.width;\r\n slide.height = slide.opts.height;\r\n\r\n slide.$ghost = $('')\r\n .one('error', function() {\r\n\r\n $(this).remove();\r\n\r\n slide.$ghost = null;\r\n\r\n self.setBigImage( slide );\r\n\r\n })\r\n .one('load', function() {\r\n\r\n self.afterLoad( slide );\r\n\r\n self.setBigImage( slide );\r\n\r\n })\r\n .addClass( 'fancybox-image' )\r\n .appendTo( slide.$content )\r\n .attr( 'src', slide.opts.thumb || slide.opts.$thumb.attr( 'src' ) );\r\n\r\n } else {\r\n\r\n self.setBigImage( slide );\r\n\r\n }\r\n\r\n },\r\n\r\n\r\n // Create full-size image\r\n // ======================\r\n\r\n setBigImage : function ( slide ) {\r\n var self = this;\r\n var $img = $('');\r\n\r\n slide.$image = $img\r\n .one('error', function() {\r\n\r\n self.setError( slide );\r\n\r\n })\r\n .one('load', function() {\r\n\r\n // Clear timeout that checks if loading icon needs to be displayed\r\n clearTimeout( slide.timouts );\r\n\r\n slide.timouts = null;\r\n\r\n if ( self.isClosing ) {\r\n return;\r\n }\r\n\r\n slide.width = slide.opts.width || this.naturalWidth;\r\n slide.height = slide.opts.height || this.naturalHeight;\r\n\r\n if ( slide.opts.image.srcset ) {\r\n $img.attr( 'sizes', '100vw' ).attr( 'srcset', slide.opts.image.srcset );\r\n }\r\n\r\n self.hideLoading( slide );\r\n\r\n if ( slide.$ghost ) {\r\n\r\n slide.timouts = setTimeout(function() {\r\n slide.timouts = null;\r\n\r\n slide.$ghost.hide();\r\n\r\n }, Math.min( 300, Math.max( 1000, slide.height / 1600 ) ) );\r\n\r\n } else {\r\n self.afterLoad( slide );\r\n }\r\n\r\n })\r\n .addClass( 'fancybox-image' )\r\n .attr('src', slide.src)\r\n .appendTo( slide.$content );\r\n\r\n if ( ( $img[0].complete || $img[0].readyState == \"complete\" ) && $img[0].naturalWidth && $img[0].naturalHeight ) {\r\n $img.trigger( 'load' );\r\n\r\n } else if( $img[0].error ) {\r\n $img.trigger( 'error' );\r\n\r\n } else {\r\n\r\n slide.timouts = setTimeout(function() {\r\n if ( !$img[0].complete && !slide.hasError ) {\r\n self.showLoading( slide );\r\n }\r\n\r\n }, 100);\r\n\r\n }\r\n\r\n },\r\n\r\n\r\n // Create iframe wrapper, iframe and bindings\r\n // ==========================================\r\n\r\n setIframe : function( slide ) {\r\n var self\t= this,\r\n opts = slide.opts.iframe,\r\n $slide\t= slide.$slide,\r\n $iframe;\r\n\r\n slide.$content = $('
')\r\n .css( opts.css )\r\n .appendTo( $slide );\r\n\r\n $iframe = $( opts.tpl.replace(/\\{rnd\\}/g, new Date().getTime()) )\r\n .attr( opts.attr )\r\n .appendTo( slide.$content );\r\n\r\n if ( opts.preload ) {\r\n\r\n self.showLoading( slide );\r\n\r\n // Unfortunately, it is not always possible to determine if iframe is successfully loaded\r\n // (due to browser security policy)\r\n\r\n $iframe.on('load.fb error.fb', function(e) {\r\n this.isReady = 1;\r\n\r\n slide.$slide.trigger( 'refresh' );\r\n\r\n self.afterLoad( slide );\r\n });\r\n\r\n // Recalculate iframe content size\r\n // ===============================\r\n\r\n $slide.on('refresh.fb', function() {\r\n var $wrap = slide.$content,\r\n frameWidth = opts.css.width,\r\n frameHeight = opts.css.height,\r\n scrollWidth,\r\n $contents,\r\n $body;\r\n\r\n if ( $iframe[0].isReady !== 1 ) {\r\n return;\r\n }\r\n\r\n // Check if content is accessible,\r\n // it will fail if frame is not with the same origin\r\n\r\n try {\r\n $contents = $iframe.contents();\r\n $body = $contents.find('body');\r\n\r\n } catch (ignore) {}\r\n\r\n // Calculate dimensions for the wrapper\r\n if ( $body && $body.length ) {\r\n\r\n if ( frameWidth === undefined ) {\r\n scrollWidth = $iframe[0].contentWindow.document.documentElement.scrollWidth;\r\n\r\n frameWidth = Math.ceil( $body.outerWidth(true) + ( $wrap.width() - scrollWidth ) );\r\n frameWidth += $wrap.outerWidth() - $wrap.innerWidth();\r\n }\r\n\r\n if ( frameHeight === undefined ) {\r\n frameHeight = Math.ceil( $body.outerHeight(true) );\r\n frameHeight += $wrap.outerHeight() - $wrap.innerHeight();\r\n }\r\n\r\n // Resize wrapper to fit iframe content\r\n if ( frameWidth ) {\r\n $wrap.width( frameWidth );\r\n }\r\n\r\n if ( frameHeight ) {\r\n $wrap.height( frameHeight );\r\n }\r\n }\r\n\r\n $wrap.removeClass( 'fancybox-is-hidden' );\r\n\r\n });\r\n\r\n } else {\r\n\r\n this.afterLoad( slide );\r\n\r\n }\r\n\r\n $iframe.attr( 'src', slide.src );\r\n\r\n if ( slide.opts.smallBtn === true ) {\r\n slide.$content.prepend( self.translate( slide, slide.opts.btnTpl.smallBtn ) );\r\n }\r\n\r\n // Remove iframe if closing or changing gallery item\r\n $slide.one( 'onReset', function () {\r\n\r\n // This helps IE not to throw errors when closing\r\n try {\r\n\r\n $( this ).find( 'iframe' ).hide().attr( 'src', '//about:blank' );\r\n\r\n } catch ( ignore ) {}\r\n\r\n $( this ).empty();\r\n\r\n slide.isLoaded = false;\r\n\r\n });\r\n\r\n },\r\n\r\n\r\n // Wrap and append content to the slide\r\n // ======================================\r\n\r\n setContent : function ( slide, content ) {\r\n\r\n var self = this;\r\n\r\n if ( self.isClosing ) {\r\n return;\r\n }\r\n\r\n self.hideLoading( slide );\r\n\r\n slide.$slide.empty();\r\n\r\n if ( isQuery( content ) && content.parent().length ) {\r\n\r\n // If content is a jQuery object, then it will be moved to the slide.\r\n // The placeholder is created so we will know where to put it back.\r\n // If user is navigating gallery fast, then the content might be already inside fancyBox\r\n // =====================================================================================\r\n\r\n // Make sure content is not already moved to fancyBox\r\n content.parent( '.fancybox-slide--inline' ).trigger( 'onReset' );\r\n\r\n // Create temporary element marking original place of the content\r\n slide.$placeholder = $( '
' ).hide().insertAfter( content );\r\n\r\n // Make sure content is visible\r\n content.css('display', 'inline-block');\r\n\r\n } else if ( !slide.hasError ) {\r\n\r\n // If content is just a plain text, try to convert it to html\r\n if ( $.type( content ) === 'string' ) {\r\n content = $('
').append( $.trim( content ) ).contents();\r\n\r\n // If we have text node, then add wrapping element to make vertical alignment work\r\n if ( content[0].nodeType === 3 ) {\r\n content = $('
').html( content );\r\n }\r\n }\r\n\r\n // If \"filter\" option is provided, then filter content\r\n if ( slide.opts.filter ) {\r\n content = $('
').html( content ).find( slide.opts.filter );\r\n }\r\n\r\n }\r\n\r\n slide.$slide.one('onReset', function () {\r\n\r\n // Pause all html5 video/audio\r\n $( this ).find( 'video,audio' ).trigger( 'pause' );\r\n\r\n // Put content back\r\n if ( slide.$placeholder ) {\r\n slide.$placeholder.after( content.hide() ).remove();\r\n\r\n slide.$placeholder = null;\r\n }\r\n\r\n // Remove custom close button\r\n if ( slide.$smallBtn ) {\r\n slide.$smallBtn.remove();\r\n\r\n slide.$smallBtn = null;\r\n }\r\n\r\n // Remove content and mark slide as not loaded\r\n if ( !slide.hasError ) {\r\n $(this).empty();\r\n\r\n slide.isLoaded = false;\r\n }\r\n\r\n });\r\n\r\n slide.$content = $( content ).appendTo( slide.$slide );\r\n\r\n this.afterLoad( slide );\r\n },\r\n\r\n // Display error message\r\n // =====================\r\n\r\n setError : function ( slide ) {\r\n\r\n slide.hasError = true;\r\n\r\n slide.$slide.removeClass( 'fancybox-slide--' + slide.type );\r\n\r\n this.setContent( slide, this.translate( slide, slide.opts.errorTpl ) );\r\n\r\n },\r\n\r\n\r\n // Show loading icon inside the slide\r\n // ==================================\r\n\r\n showLoading : function( slide ) {\r\n\r\n var self = this;\r\n\r\n slide = slide || self.current;\r\n\r\n if ( slide && !slide.$spinner ) {\r\n slide.$spinner = $( self.opts.spinnerTpl ).appendTo( slide.$slide );\r\n }\r\n\r\n },\r\n\r\n // Remove loading icon from the slide\r\n // ==================================\r\n\r\n hideLoading : function( slide ) {\r\n\r\n var self = this;\r\n\r\n slide = slide || self.current;\r\n\r\n if ( slide && slide.$spinner ) {\r\n slide.$spinner.remove();\r\n\r\n delete slide.$spinner;\r\n }\r\n\r\n },\r\n\r\n\r\n // Adjustments after slide content has been loaded\r\n // ===============================================\r\n\r\n afterLoad : function( slide ) {\r\n\r\n var self = this;\r\n\r\n if ( self.isClosing ) {\r\n return;\r\n }\r\n\r\n slide.isLoading = false;\r\n slide.isLoaded = true;\r\n\r\n self.trigger( 'afterLoad', slide );\r\n\r\n self.hideLoading( slide );\r\n\r\n if ( slide.opts.smallBtn && !slide.$smallBtn ) {\r\n slide.$smallBtn = $( self.translate( slide, slide.opts.btnTpl.smallBtn ) ).appendTo( slide.$content.filter('div,form').first() );\r\n }\r\n\r\n if ( slide.opts.protect && slide.$content && !slide.hasError ) {\r\n\r\n // Disable right click\r\n slide.$content.on( 'contextmenu.fb', function( e ) {\r\n if ( e.button == 2 ) {\r\n e.preventDefault();\r\n }\r\n\r\n return true;\r\n });\r\n\r\n // Add fake element on top of the image\r\n // This makes a bit harder for user to select image\r\n if ( slide.type === 'image' ) {\r\n $( '
' ).appendTo( slide.$content );\r\n }\r\n\r\n }\r\n\r\n self.revealContent( slide );\r\n\r\n },\r\n\r\n\r\n // Make content visible\r\n // This method is called right after content has been loaded or\r\n // user navigates gallery and transition should start\r\n // ============================================================\r\n\r\n revealContent : function( slide ) {\r\n\r\n var self = this;\r\n var $slide = slide.$slide;\r\n\r\n var effect, effectClassName, duration, opacity, end, start = false;\r\n\r\n effect = slide.opts[ self.firstRun ? 'animationEffect' : 'transitionEffect' ];\r\n duration = slide.opts[ self.firstRun ? 'animationDuration' : 'transitionDuration' ];\r\n\r\n duration = parseInt( slide.forcedDuration === undefined ? duration : slide.forcedDuration, 10 );\r\n\r\n if ( slide.isMoved || slide.pos !== self.currPos || !duration ) {\r\n effect = false;\r\n }\r\n\r\n // Check if can zoom\r\n if ( effect === 'zoom' && !( slide.pos === self.currPos && duration && slide.type === 'image' && !slide.hasError && ( start = self.getThumbPos( slide ) ) ) ) {\r\n effect = 'fade';\r\n }\r\n\r\n // Zoom animation\r\n // ==============\r\n\r\n if ( effect === 'zoom' ) {\r\n end = self.getFitPos( slide );\r\n\r\n end.scaleX = end.width / start.width;\r\n end.scaleY = end.height / start.height;\r\n\r\n delete end.width;\r\n delete end.height;\r\n\r\n // Check if we need to animate opacity\r\n opacity = slide.opts.zoomOpacity;\r\n\r\n if ( opacity == 'auto' ) {\r\n opacity = Math.abs( slide.width / slide.height - start.width / start.height ) > 0.1;\r\n }\r\n\r\n if ( opacity ) {\r\n start.opacity = 0.1;\r\n end.opacity = 1;\r\n }\r\n\r\n // Draw image at start position\r\n $.fancybox.setTranslate( slide.$content.removeClass( 'fancybox-is-hidden' ), start );\r\n\r\n forceRedraw( slide.$content );\r\n\r\n // Start animation\r\n $.fancybox.animate( slide.$content, end, duration, function() {\r\n self.complete();\r\n });\r\n\r\n return;\r\n }\r\n\r\n self.updateSlide( slide );\r\n\r\n\r\n // Simply show content\r\n // ===================\r\n\r\n if ( !effect ) {\r\n forceRedraw( $slide );\r\n\r\n slide.$content.removeClass( 'fancybox-is-hidden' );\r\n\r\n if ( slide.pos === self.currPos ) {\r\n self.complete();\r\n }\r\n\r\n return;\r\n }\r\n\r\n $.fancybox.stop( $slide );\r\n\r\n effectClassName = 'fancybox-animated fancybox-slide--' + ( slide.pos >= self.prevPos ? 'next' : 'previous' ) + ' fancybox-fx-' + effect;\r\n\r\n $slide.removeAttr( 'style' ).removeClass( 'fancybox-slide--current fancybox-slide--next fancybox-slide--previous' ).addClass( effectClassName );\r\n\r\n slide.$content.removeClass( 'fancybox-is-hidden' );\r\n\r\n //Force reflow for CSS3 transitions\r\n forceRedraw( $slide );\r\n\r\n $.fancybox.animate( $slide, 'fancybox-slide--current', duration, function(e) {\r\n $slide.removeClass( effectClassName ).removeAttr( 'style' );\r\n\r\n if ( slide.pos === self.currPos ) {\r\n self.complete();\r\n }\r\n\r\n }, true);\r\n\r\n },\r\n\r\n\r\n // Check if we can and have to zoom from thumbnail\r\n //================================================\r\n\r\n getThumbPos : function( slide ) {\r\n\r\n var self = this;\r\n var rez = false;\r\n\r\n // Check if element is inside the viewport by at least 1 pixel\r\n var isElementVisible = function( $el ) {\r\n var element = $el[0];\r\n\r\n var elementRect = element.getBoundingClientRect();\r\n var parentRects = [];\r\n\r\n var visibleInAllParents;\r\n\r\n while ( element.parentElement !== null ) {\r\n if ( $(element.parentElement).css('overflow') === 'hidden' || $(element.parentElement).css('overflow') === 'auto' ) {\r\n parentRects.push(element.parentElement.getBoundingClientRect());\r\n }\r\n\r\n element = element.parentElement;\r\n }\r\n\r\n visibleInAllParents = parentRects.every(function(parentRect){\r\n var visiblePixelX = Math.min(elementRect.right, parentRect.right) - Math.max(elementRect.left, parentRect.left);\r\n var visiblePixelY = Math.min(elementRect.bottom, parentRect.bottom) - Math.max(elementRect.top, parentRect.top);\r\n\r\n return visiblePixelX > 0 && visiblePixelY > 0;\r\n });\r\n\r\n return visibleInAllParents &&\r\n elementRect.bottom > 0 && elementRect.right > 0 &&\r\n elementRect.left < $(window).width() && elementRect.top < $(window).height();\r\n };\r\n\r\n var $thumb = slide.opts.$thumb;\r\n var thumbPos = $thumb ? $thumb.offset() : 0;\r\n var slidePos;\r\n\r\n if ( thumbPos && $thumb[0].ownerDocument === document && isElementVisible( $thumb ) ) {\r\n slidePos = self.$refs.stage.offset();\r\n\r\n rez = {\r\n top : thumbPos.top - slidePos.top + parseFloat( $thumb.css( \"border-top-width\" ) || 0 ),\r\n left : thumbPos.left - slidePos.left + parseFloat( $thumb.css( \"border-left-width\" ) || 0 ),\r\n width : $thumb.width(),\r\n height : $thumb.height(),\r\n scaleX : 1,\r\n scaleY : 1\r\n };\r\n }\r\n\r\n return rez;\r\n },\r\n\r\n\r\n // Final adjustments after current gallery item is moved to position\r\n // and it`s content is loaded\r\n // ==================================================================\r\n\r\n complete : function() {\r\n var self = this,\r\n current = self.current,\r\n slides = {},\r\n promise;\r\n\r\n if ( current.isMoved || !current.isLoaded || current.isComplete ) {\r\n return;\r\n }\r\n\r\n current.isComplete = true;\r\n\r\n current.$slide.siblings().trigger( 'onReset' );\r\n\r\n self.preload( 'inline' );\r\n\r\n // Trigger any CSS3 transiton inside the slide\r\n forceRedraw( current.$slide );\r\n\r\n current.$slide.addClass( 'fancybox-slide--complete' );\r\n\r\n // Remove unnecessary slides\r\n $.each( self.slides, function( key, slide ) {\r\n if ( slide.pos >= self.currPos - 1 && slide.pos <= self.currPos + 1 ) {\r\n slides[ slide.pos ] = slide;\r\n\r\n } else if ( slide ) {\r\n $.fancybox.stop( slide.$slide );\r\n\r\n slide.$slide.off().remove();\r\n }\r\n });\r\n\r\n self.slides = slides;\r\n\r\n self.updateCursor();\r\n\r\n self.trigger( 'afterShow' );\r\n\r\n // Play first html5 video/audio\r\n current.$slide.find( 'video,audio' ).first().trigger( 'play' );\r\n\r\n // Try to focus on the first focusable element\r\n if ( $( document.activeElement ).is( '[disabled]' ) || ( current.opts.autoFocus && !( current.type == 'image' || current.type === 'iframe' ) ) ) {\r\n self.focus();\r\n }\r\n\r\n },\r\n\r\n\r\n // Preload next and previous slides\r\n // ================================\r\n\r\n preload : function( type ) {\r\n var self = this,\r\n next = self.slides[ self.currPos + 1 ],\r\n prev = self.slides[ self.currPos - 1 ];\r\n\r\n if ( next && next.type === type ) {\r\n self.loadSlide( next );\r\n }\r\n\r\n if ( prev && prev.type === type ) {\r\n self.loadSlide( prev );\r\n }\r\n },\r\n\r\n\r\n // Try to find and focus on the first focusable element\r\n // ====================================================\r\n\r\n focus : function() {\r\n var current = this.current;\r\n var $el;\r\n\r\n if ( this.isClosing ) {\r\n return;\r\n }\r\n\r\n if ( current && current.isComplete ) {\r\n\r\n // Look for first input with autofocus attribute\r\n $el = current.$slide.find('input[autofocus]:enabled:visible:first');\r\n\r\n if ( !$el.length ) {\r\n $el = current.$slide.find('button,:input,[tabindex],a').filter(':enabled:visible:first');\r\n }\r\n }\r\n\r\n $el = $el && $el.length ? $el : this.$refs.container;\r\n\r\n $el.focus();\r\n },\r\n\r\n\r\n // Activates current instance - brings container to the front and enables keyboard,\r\n // notifies other instances about deactivating\r\n // =================================================================================\r\n\r\n activate : function () {\r\n var self = this;\r\n\r\n // Deactivate all instances\r\n $( '.fancybox-container' ).each(function () {\r\n var instance = $(this).data( 'FancyBox' );\r\n\r\n // Skip self and closing instances\r\n if (instance && instance.id !== self.id && !instance.isClosing) {\r\n instance.trigger( 'onDeactivate' );\r\n\r\n instance.removeEvents();\r\n\r\n instance.isVisible = false;\r\n }\r\n\r\n });\r\n\r\n self.isVisible = true;\r\n\r\n if ( self.current || self.isIdle ) {\r\n self.update();\r\n\r\n self.updateControls();\r\n }\r\n\r\n self.trigger( 'onActivate' );\r\n\r\n self.addEvents();\r\n },\r\n\r\n\r\n // Start closing procedure\r\n // This will start \"zoom-out\" animation if needed and clean everything up afterwards\r\n // =================================================================================\r\n\r\n close : function( e, d ) {\r\n\r\n var self = this;\r\n var current = self.current;\r\n\r\n var effect, duration;\r\n var $what, opacity, start, end;\r\n\r\n var done = function() {\r\n self.cleanUp( e );\r\n };\r\n\r\n if ( self.isClosing ) {\r\n return false;\r\n }\r\n\r\n self.isClosing = true;\r\n\r\n // If beforeClose callback prevents closing, make sure content is centered\r\n if ( self.trigger( 'beforeClose', e ) === false ) {\r\n self.isClosing = false;\r\n\r\n requestAFrame(function() {\r\n self.update();\r\n });\r\n\r\n return false;\r\n }\r\n\r\n // Remove all events\r\n // If there are multiple instances, they will be set again by \"activate\" method\r\n self.removeEvents();\r\n\r\n if ( current.timouts ) {\r\n clearTimeout( current.timouts );\r\n }\r\n\r\n $what = current.$content;\r\n effect = current.opts.animationEffect;\r\n duration = $.isNumeric( d ) ? d : ( effect ? current.opts.animationDuration : 0 );\r\n\r\n // Remove other slides\r\n current.$slide.off( transitionEnd ).removeClass( 'fancybox-slide--complete fancybox-slide--next fancybox-slide--previous fancybox-animated' );\r\n\r\n current.$slide.siblings().trigger( 'onReset' ).remove();\r\n\r\n // Trigger animations\r\n if ( duration ) {\r\n self.$refs.container.removeClass( 'fancybox-is-open' ).addClass( 'fancybox-is-closing' );\r\n }\r\n\r\n // Clean up\r\n self.hideLoading( current );\r\n\r\n self.hideControls();\r\n\r\n self.updateCursor();\r\n\r\n // Check if possible to zoom-out\r\n if ( effect === 'zoom' && !( e !== true && $what && duration && current.type === 'image' && !current.hasError && ( end = self.getThumbPos( current ) ) ) ) {\r\n effect = 'fade';\r\n }\r\n\r\n if ( effect === 'zoom' ) {\r\n $.fancybox.stop( $what );\r\n\r\n start = $.fancybox.getTranslate( $what );\r\n\r\n start.width = start.width * start.scaleX;\r\n start.height = start.height * start.scaleY;\r\n\r\n // Check if we need to animate opacity\r\n opacity = current.opts.zoomOpacity;\r\n\r\n if ( opacity == 'auto' ) {\r\n opacity = Math.abs( current.width / current.height - end.width / end.height ) > 0.1;\r\n }\r\n\r\n if ( opacity ) {\r\n end.opacity = 0;\r\n }\r\n\r\n start.scaleX = start.width / end.width;\r\n start.scaleY = start.height / end.height;\r\n\r\n start.width = end.width;\r\n start.height = end.height;\r\n\r\n $.fancybox.setTranslate( current.$content, start );\r\n\r\n forceRedraw( current.$content );\r\n\r\n $.fancybox.animate( current.$content, end, duration, done );\r\n\r\n return true;\r\n }\r\n\r\n if ( effect && duration ) {\r\n\r\n // If skip animation\r\n if ( e === true ) {\r\n setTimeout( done, duration );\r\n\r\n } else {\r\n $.fancybox.animate( current.$slide.removeClass( 'fancybox-slide--current' ), 'fancybox-animated fancybox-slide--previous fancybox-fx-' + effect, duration, done );\r\n }\r\n\r\n } else {\r\n done();\r\n }\r\n\r\n return true;\r\n },\r\n\r\n\r\n // Final adjustments after removing the instance\r\n // =============================================\r\n\r\n cleanUp : function( e ) {\r\n var self = this,\r\n $body = $( 'body' ),\r\n instance,\r\n offset;\r\n\r\n self.current.$slide.trigger( 'onReset' );\r\n\r\n self.$refs.container.empty().remove();\r\n\r\n self.trigger( 'afterClose', e );\r\n\r\n // Place back focus\r\n if ( self.$lastFocus && !!self.current.opts.backFocus ) {\r\n self.$lastFocus.focus();\r\n }\r\n\r\n self.current = null;\r\n\r\n // Check if there are other instances\r\n instance = $.fancybox.getInstance();\r\n\r\n if ( instance ) {\r\n instance.activate();\r\n\r\n } else {\r\n\r\n $W.scrollTop( self.scrollTop ).scrollLeft( self.scrollLeft );\r\n\r\n $body.removeClass( 'fancybox-active compensate-for-scrollbar' );\r\n\r\n if ( $body.hasClass( 'fancybox-iosfix' ) ) {\r\n offset = parseInt(document.body.style.top, 10);\r\n\r\n $body.removeClass( 'fancybox-iosfix' ).css( 'top', '' ).scrollTop( offset * -1 );\r\n }\r\n\r\n $( '#fancybox-style-noscroll' ).remove();\r\n\r\n }\r\n\r\n },\r\n\r\n\r\n // Call callback and trigger an event\r\n // ==================================\r\n\r\n trigger : function( name, slide ) {\r\n var args = Array.prototype.slice.call(arguments, 1),\r\n self = this,\r\n obj = slide && slide.opts ? slide : self.current,\r\n rez;\r\n\r\n if ( obj ) {\r\n args.unshift( obj );\r\n\r\n } else {\r\n obj = self;\r\n }\r\n\r\n args.unshift( self );\r\n\r\n if ( $.isFunction( obj.opts[ name ] ) ) {\r\n rez = obj.opts[ name ].apply( obj, args );\r\n }\r\n\r\n if ( rez === false ) {\r\n return rez;\r\n }\r\n\r\n if ( name === 'afterClose' || !self.$refs ) {\r\n $D.trigger( name + '.fb', args );\r\n\r\n } else {\r\n self.$refs.container.trigger( name + '.fb', args );\r\n }\r\n\r\n },\r\n\r\n\r\n // Update infobar values, navigation button states and reveal caption\r\n // ==================================================================\r\n\r\n updateControls : function ( force ) {\r\n\r\n var self = this;\r\n\r\n var current = self.current,\r\n index = current.index,\r\n caption = current.opts.caption,\r\n $container = self.$refs.container,\r\n $caption = self.$refs.caption;\r\n\r\n // Recalculate content dimensions\r\n current.$slide.trigger( 'refresh' );\r\n\r\n self.$caption = caption && caption.length ? $caption.html( caption ) : null;\r\n\r\n if ( !self.isHiddenControls && !self.isIdle ) {\r\n self.showControls();\r\n }\r\n\r\n // Update info and navigation elements\r\n $container.find('[data-fancybox-count]').html( self.group.length );\r\n $container.find('[data-fancybox-index]').html( index + 1 );\r\n\r\n $container.find('[data-fancybox-prev]').prop( 'disabled', ( !current.opts.loop && index <= 0 ) );\r\n $container.find('[data-fancybox-next]').prop( 'disabled', ( !current.opts.loop && index >= self.group.length - 1 ) );\r\n\r\n if ( current.type === 'image' ) {\r\n\r\n // Update download button source\r\n $container.find('[data-fancybox-download]').attr( 'href', current.opts.image.src || current.src ).show();\r\n\r\n } else {\r\n $container.find('[data-fancybox-download],[data-fancybox-zoom]').hide();\r\n }\r\n },\r\n\r\n // Hide toolbar and caption\r\n // ========================\r\n\r\n hideControls : function () {\r\n\r\n this.isHiddenControls = true;\r\n\r\n this.$refs.container.removeClass( 'fancybox-show-infobar fancybox-show-toolbar fancybox-show-caption fancybox-show-nav' );\r\n\r\n },\r\n\r\n showControls : function() {\r\n var self = this;\r\n var opts = self.current ? self.current.opts : self.opts;\r\n var $container = self.$refs.container;\r\n\r\n self.isHiddenControls = false;\r\n self.idleSecondsCounter = 0;\r\n\r\n $container\r\n .toggleClass( 'fancybox-show-toolbar', !!( opts.toolbar && opts.buttons ) )\r\n .toggleClass( 'fancybox-show-infobar', !!( opts.infobar && self.group.length > 1 ) )\r\n .toggleClass( 'fancybox-show-nav', !!( opts.arrows && self.group.length > 1 ) )\r\n .toggleClass( 'fancybox-is-modal', !!opts.modal );\r\n\r\n if ( self.$caption ) {\r\n $container.addClass( 'fancybox-show-caption ');\r\n\r\n } else {\r\n $container.removeClass( 'fancybox-show-caption' );\r\n }\r\n\r\n },\r\n\r\n\r\n // Toggle toolbar and caption\r\n // ==========================\r\n\r\n toggleControls : function() {\r\n if ( this.isHiddenControls ) {\r\n this.showControls();\r\n\r\n } else {\r\n this.hideControls();\r\n }\r\n\r\n },\r\n\r\n\r\n });\r\n\r\n\r\n $.fancybox = {\r\n\r\n version : \"3.2.10\",\r\n defaults : defaults,\r\n\r\n\r\n // Get current instance and execute a command.\r\n //\r\n // Examples of usage:\r\n //\r\n // $instance = $.fancybox.getInstance();\r\n // $.fancybox.getInstance().jumpTo( 1 );\r\n // $.fancybox.getInstance( 'jumpTo', 1 );\r\n // $.fancybox.getInstance( function() {\r\n // console.info( this.currIndex );\r\n // });\r\n // ======================================================\r\n\r\n getInstance : function ( command ) {\r\n var instance = $('.fancybox-container:not(\".fancybox-is-closing\"):last').data( 'FancyBox' );\r\n var args = Array.prototype.slice.call(arguments, 1);\r\n\r\n if ( instance instanceof FancyBox ) {\r\n\r\n if ( $.type( command ) === 'string' ) {\r\n instance[ command ].apply( instance, args );\r\n\r\n } else if ( $.type( command ) === 'function' ) {\r\n command.apply( instance, args );\r\n }\r\n\r\n return instance;\r\n }\r\n\r\n return false;\r\n\r\n },\r\n\r\n\r\n // Create new instance\r\n // ===================\r\n\r\n open : function ( items, opts, index ) {\r\n return new FancyBox( items, opts, index );\r\n },\r\n\r\n\r\n // Close current or all instances\r\n // ==============================\r\n\r\n close : function ( all ) {\r\n var instance = this.getInstance();\r\n\r\n if ( instance ) {\r\n instance.close();\r\n\r\n // Try to find and close next instance\r\n\r\n if ( all === true ) {\r\n this.close();\r\n }\r\n }\r\n\r\n },\r\n\r\n // Close instances and unbind all events\r\n // ==============================\r\n\r\n destroy : function() {\r\n\r\n this.close( true );\r\n\r\n $D.off( 'click.fb-start' );\r\n\r\n },\r\n\r\n\r\n // Try to detect mobile devices\r\n // ============================\r\n\r\n isMobile : document.createTouch !== undefined && /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),\r\n\r\n\r\n // Detect if 'translate3d' support is available\r\n // ============================================\r\n\r\n use3d : (function() {\r\n var div = document.createElement('div');\r\n\r\n return window.getComputedStyle && window.getComputedStyle( div ).getPropertyValue('transform') && !(document.documentMode && document.documentMode < 11);\r\n }()),\r\n\r\n // Helper function to get current visual state of an element\r\n // returns array[ top, left, horizontal-scale, vertical-scale, opacity ]\r\n // =====================================================================\r\n\r\n getTranslate : function( $el ) {\r\n var matrix;\r\n\r\n if ( !$el || !$el.length ) {\r\n return false;\r\n }\r\n\r\n matrix = $el.eq( 0 ).css('transform');\r\n\r\n if ( matrix && matrix.indexOf( 'matrix' ) !== -1 ) {\r\n matrix = matrix.split('(')[1];\r\n matrix = matrix.split(')')[0];\r\n matrix = matrix.split(',');\r\n } else {\r\n matrix = [];\r\n }\r\n\r\n if ( matrix.length ) {\r\n\r\n // If IE\r\n if ( matrix.length > 10 ) {\r\n matrix = [ matrix[13], matrix[12], matrix[0], matrix[5] ];\r\n\r\n } else {\r\n matrix = [ matrix[5], matrix[4], matrix[0], matrix[3]];\r\n }\r\n\r\n matrix = matrix.map(parseFloat);\r\n\r\n } else {\r\n matrix = [ 0, 0, 1, 1 ];\r\n\r\n var transRegex = /\\.*translate\\((.*)px,(.*)px\\)/i;\r\n var transRez = transRegex.exec( $el.eq( 0 ).attr('style') );\r\n\r\n if ( transRez ) {\r\n matrix[ 0 ] = parseFloat( transRez[2] );\r\n matrix[ 1 ] = parseFloat( transRez[1] );\r\n }\r\n }\r\n\r\n return {\r\n top : matrix[ 0 ],\r\n left : matrix[ 1 ],\r\n scaleX : matrix[ 2 ],\r\n scaleY : matrix[ 3 ],\r\n opacity : parseFloat( $el.css('opacity') ),\r\n width : $el.width(),\r\n height : $el.height()\r\n };\r\n\r\n },\r\n\r\n\r\n // Shortcut for setting \"translate3d\" properties for element\r\n // Can set be used to set opacity, too\r\n // ========================================================\r\n\r\n setTranslate : function( $el, props ) {\r\n var str = '';\r\n var css = {};\r\n\r\n if ( !$el || !props ) {\r\n return;\r\n }\r\n\r\n if ( props.left !== undefined || props.top !== undefined ) {\r\n str = ( props.left === undefined ? $el.position().left : props.left ) + 'px, ' + ( props.top === undefined ? $el.position().top : props.top ) + 'px';\r\n\r\n if ( this.use3d ) {\r\n str = 'translate3d(' + str + ', 0px)';\r\n\r\n } else {\r\n str = 'translate(' + str + ')';\r\n }\r\n }\r\n\r\n if ( props.scaleX !== undefined && props.scaleY !== undefined ) {\r\n str = (str.length ? str + ' ' : '') + 'scale(' + props.scaleX + ', ' + props.scaleY + ')';\r\n }\r\n\r\n if ( str.length ) {\r\n css.transform = str;\r\n }\r\n\r\n if ( props.opacity !== undefined ) {\r\n css.opacity = props.opacity;\r\n }\r\n\r\n if ( props.width !== undefined ) {\r\n css.width = props.width;\r\n }\r\n\r\n if ( props.height !== undefined ) {\r\n css.height = props.height;\r\n }\r\n\r\n return $el.css( css );\r\n },\r\n\r\n\r\n // Simple CSS transition handler\r\n // =============================\r\n\r\n animate : function ( $el, to, duration, callback, leaveAnimationName ) {\r\n if ( $.isFunction( duration ) ) {\r\n callback = duration;\r\n duration = null;\r\n }\r\n\r\n if ( !$.isPlainObject( to ) ) {\r\n $el.removeAttr( 'style' );\r\n }\r\n\r\n $el.on( transitionEnd, function(e) {\r\n\r\n // Skip events from child elements and z-index change\r\n if ( e && e.originalEvent && ( !$el.is( e.originalEvent.target ) || e.originalEvent.propertyName == 'z-index' ) ) {\r\n return;\r\n }\r\n\r\n $.fancybox.stop( $el );\r\n\r\n if ( $.isPlainObject( to ) ) {\r\n\r\n if ( to.scaleX !== undefined && to.scaleY !== undefined ) {\r\n $el.css( 'transition-duration', '' );\r\n\r\n to.width = Math.round( $el.width() * to.scaleX );\r\n to.height = Math.round( $el.height() * to.scaleY );\r\n\r\n to.scaleX = 1;\r\n to.scaleY = 1;\r\n\r\n $.fancybox.setTranslate( $el, to );\r\n }\r\n\r\n if ( leaveAnimationName === false ) {\r\n $el.removeAttr( 'style' );\r\n }\r\n\r\n } else if ( leaveAnimationName !== true ) {\r\n $el.removeClass( to );\r\n }\r\n\r\n if ( $.isFunction( callback ) ) {\r\n callback( e );\r\n }\r\n\r\n });\r\n\r\n if ( $.isNumeric( duration ) ) {\r\n $el.css( 'transition-duration', duration + 'ms' );\r\n }\r\n\r\n if ( $.isPlainObject( to ) ) {\r\n $.fancybox.setTranslate( $el, to );\r\n\r\n } else {\r\n $el.addClass( to );\r\n }\r\n\r\n if ( to.scaleX && $el.hasClass( 'fancybox-image-wrap' ) ) {\r\n $el.parent().addClass( 'fancybox-is-scaling' );\r\n }\r\n\r\n // Make sure that `transitionend` callback gets fired\r\n $el.data(\"timer\", setTimeout(function() {\r\n $el.trigger( 'transitionend' );\r\n }, duration + 16));\r\n\r\n },\r\n\r\n stop : function( $el ) {\r\n clearTimeout( $el.data(\"timer\") );\r\n\r\n $el.off( 'transitionend' ).css( 'transition-duration', '' );\r\n\r\n if ( $el.hasClass( 'fancybox-image-wrap' ) ) {\r\n $el.parent().removeClass( 'fancybox-is-scaling' );\r\n }\r\n }\r\n\r\n };\r\n\r\n\r\n // Default click handler for \"fancyboxed\" links\r\n // ============================================\r\n\r\n function _run( e ) {\r\n var $target\t= $( e.currentTarget ),\r\n opts\t= e.data ? e.data.options : {},\r\n value\t= $target.attr( 'data-fancybox' ) || '',\r\n index\t= 0,\r\n items = [];\r\n\r\n // Avoid opening multiple times\r\n if ( e.isDefaultPrevented() ) {\r\n return;\r\n }\r\n\r\n e.preventDefault();\r\n\r\n // Get all related items and find index for clicked one\r\n if ( value ) {\r\n items = opts.selector ? $( opts.selector ) : ( e.data ? e.data.items : [] );\r\n items = items.length ? items.filter( '[data-fancybox=\"' + value + '\"]' ) : $( '[data-fancybox=\"' + value + '\"]' );\r\n\r\n index = items.index( $target );\r\n\r\n // Sometimes current item can not be found\r\n // (for example, when slider clones items)\r\n if ( index < 0 ) {\r\n index = 0;\r\n }\r\n\r\n } else {\r\n items = [ $target ];\r\n }\r\n\r\n $.fancybox.open( items, opts, index );\r\n }\r\n\r\n\r\n // Create a jQuery plugin\r\n // ======================\r\n\r\n $.fn.fancybox = function (options) {\r\n var selector;\r\n\r\n options = options || {};\r\n selector = options.selector || false;\r\n\r\n if ( selector ) {\r\n\r\n $( 'body' ).off( 'click.fb-start', selector ).on( 'click.fb-start', selector, {\r\n options : options\r\n }, _run );\r\n\r\n } else {\r\n\r\n this.off( 'click.fb-start' ).on( 'click.fb-start', {\r\n items : this,\r\n options : options\r\n }, _run);\r\n\r\n }\r\n\r\n return this;\r\n };\r\n\r\n\r\n // Self initializing plugin\r\n // ========================\r\n\r\n $D.on( 'click.fb-start', '[data-fancybox]', _run );\r\n\r\n}( window, document, window.jQuery || jQuery ));\r\n\r\n// ==========================================================================\r\n//\r\n// Media\r\n// Adds additional media type support\r\n//\r\n// ==========================================================================\r\n;(function ($) {\r\n\r\n\t'use strict';\r\n\r\n\t// Formats matching url to final form\r\n\r\n\tvar format = function (url, rez, params) {\r\n\t\tif ( !url ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tparams = params || '';\r\n\r\n\t\tif ( $.type(params) === \"object\" ) {\r\n\t\t\tparams = $.param(params, true);\r\n\t\t}\r\n\r\n\t\t$.each(rez, function (key, value) {\r\n\t\t\turl = url.replace('$' + key, value || '');\r\n\t\t});\r\n\r\n\t\tif (params.length) {\r\n\t\t\turl += (url.indexOf('?') > 0 ? '&' : '?') + params;\r\n\t\t}\r\n\r\n\t\treturn url;\r\n\t};\r\n\r\n\t// Object containing properties for each media type\r\n\r\n\tvar defaults = {\r\n\t\tyoutube : {\r\n\t\t\tmatcher : /(youtube\\.com|youtu\\.be|youtube\\-nocookie\\.com)\\/(watch\\?(.*&)?v=|v\\/|u\\/|embed\\/?)?(videoseries\\?list=(.*)|[\\w-]{11}|\\?listType=(.*)&list=(.*))(.*)/i,\r\n\t\t\tparams : {\r\n\t\t\t\tautoplay : 1,\r\n\t\t\t\tautohide : 1,\r\n\t\t\t\tfs : 1,\r\n\t\t\t\trel : 0,\r\n\t\t\t\thd : 1,\r\n\t\t\t\twmode : 'transparent',\r\n\t\t\t\tenablejsapi : 1,\r\n\t\t\t\thtml5 : 1\r\n\t\t\t},\r\n\t\t\tparamPlace : 8,\r\n\t\t\ttype : 'iframe',\r\n\t\t\turl : '//www.youtube.com/embed/$4',\r\n\t\t\tthumb : '//img.youtube.com/vi/$4/hqdefault.jpg'\r\n\t\t},\r\n\r\n\t\tvimeo : {\r\n\t\t\tmatcher : /^.+vimeo.com\\/(.*\\/)?([\\d]+)(.*)?/,\r\n\t\t\tparams : {\r\n\t\t\t\tautoplay : 1,\r\n\t\t\t\thd : 1,\r\n\t\t\t\tshow_title : 1,\r\n\t\t\t\tshow_byline : 1,\r\n\t\t\t\tshow_portrait : 0,\r\n\t\t\t\tfullscreen : 1,\r\n\t\t\t\tapi : 1\r\n\t\t\t},\r\n\t\t\tparamPlace : 3,\r\n\t\t\ttype : 'iframe',\r\n\t\t\turl : '//player.vimeo.com/video/$2'\r\n\t\t},\r\n\r\n\t\tmetacafe : {\r\n\t\t\tmatcher : /metacafe.com\\/watch\\/(\\d+)\\/(.*)?/,\r\n\t\t\ttype : 'iframe',\r\n\t\t\turl : '//www.metacafe.com/embed/$1/?ap=1'\r\n\t\t},\r\n\r\n\t\tdailymotion : {\r\n\t\t\tmatcher : /dailymotion.com\\/video\\/(.*)\\/?(.*)/,\r\n\t\t\tparams : {\r\n\t\t\t\tadditionalInfos : 0,\r\n\t\t\t\tautoStart : 1\r\n\t\t\t},\r\n\t\t\ttype : 'iframe',\r\n\t\t\turl : '//www.dailymotion.com/embed/video/$1'\r\n\t\t},\r\n\r\n\t\tvine : {\r\n\t\t\tmatcher : /vine.co\\/v\\/([a-zA-Z0-9\\?\\=\\-]+)/,\r\n\t\t\ttype : 'iframe',\r\n\t\t\turl : '//vine.co/v/$1/embed/simple'\r\n\t\t},\r\n\r\n\t\tinstagram : {\r\n\t\t\tmatcher : /(instagr\\.am|instagram\\.com)\\/p\\/([a-zA-Z0-9_\\-]+)\\/?/i,\r\n\t\t\ttype : 'image',\r\n\t\t\turl : '//$1/p/$2/media/?size=l'\r\n\t\t},\r\n\r\n\t\t// Examples:\r\n\t\t// http://maps.google.com/?ll=48.857995,2.294297&spn=0.007666,0.021136&t=m&z=16\r\n\t\t// https://www.google.com/maps/@37.7852006,-122.4146355,14.65z\r\n\t\t// https://www.google.com/maps/place/Googleplex/@37.4220041,-122.0833494,17z/data=!4m5!3m4!1s0x0:0x6c296c66619367e0!8m2!3d37.4219998!4d-122.0840572\r\n\t\tgmap_place : {\r\n\t\t\tmatcher : /(maps\\.)?google\\.([a-z]{2,3}(\\.[a-z]{2})?)\\/(((maps\\/(place\\/(.*)\\/)?\\@(.*),(\\d+.?\\d+?)z))|(\\?ll=))(.*)?/i,\r\n\t\t\ttype : 'iframe',\r\n\t\t\turl : function (rez) {\r\n\t\t\t\treturn '//maps.google.' + rez[2] + '/?ll=' + ( rez[9] ? rez[9] + '&z=' + Math.floor( rez[10] ) + ( rez[12] ? rez[12].replace(/^\\//, \"&\") : '' ) : rez[12] ) + '&output=' + ( rez[12] && rez[12].indexOf('layer=c') > 0 ? 'svembed' : 'embed' );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// Examples:\r\n\t\t// https://www.google.com/maps/search/Empire+State+Building/\r\n\t\t// https://www.google.com/maps/search/?api=1&query=centurylink+field\r\n\t\t// https://www.google.com/maps/search/?api=1&query=47.5951518,-122.3316393\r\n\t\tgmap_search : {\r\n\t\t\tmatcher : /(maps\\.)?google\\.([a-z]{2,3}(\\.[a-z]{2})?)\\/(maps\\/search\\/)(.*)/i,\r\n\t\t\ttype : 'iframe',\r\n\t\t\turl : function (rez) {\r\n\t\t\t\treturn '//maps.google.' + rez[2] + '/maps?q=' + rez[5].replace('query=', 'q=').replace('api=1', '') + '&output=embed';\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$(document).on('objectNeedsType.fb', function (e, instance, item) {\r\n\r\n\t\tvar url\t = item.src || '',\r\n\t\t\ttype = false,\r\n\t\t\tmedia,\r\n\t\t\tthumb,\r\n\t\t\trez,\r\n\t\t\tparams,\r\n\t\t\turlParams,\r\n\t\t\tparamObj,\r\n\t\t\tprovider;\r\n\r\n\t\tmedia = $.extend( true, {}, defaults, item.opts.media );\r\n\r\n\t\t// Look for any matching media type\r\n\t\t$.each(media, function ( providerName, providerOpts ) {\r\n\t\t\trez = url.match( providerOpts.matcher );\r\n\r\n\t\t\tif ( !rez ) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\ttype = providerOpts.type;\r\n\t\t\tparamObj = {};\r\n\r\n\t\t\tif ( providerOpts.paramPlace && rez[ providerOpts.paramPlace ] ) {\r\n\t\t\t\turlParams = rez[ providerOpts.paramPlace ];\r\n\r\n\t\t\t\tif ( urlParams[ 0 ] == '?' ) {\r\n\t\t\t\t\turlParams = urlParams.substring(1);\r\n\t\t\t\t}\r\n\r\n\t\t\t\turlParams = urlParams.split('&');\r\n\r\n\t\t\t\tfor ( var m = 0; m < urlParams.length; ++m ) {\r\n\t\t\t\t\tvar p = urlParams[ m ].split('=', 2);\r\n\r\n\t\t\t\t\tif ( p.length == 2 ) {\r\n\t\t\t\t\t\tparamObj[ p[0] ] = decodeURIComponent( p[1].replace(/\\+/g, \" \") );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tparams = $.extend( true, {}, providerOpts.params, item.opts[ providerName ], paramObj );\r\n\r\n\t\t\turl = $.type( providerOpts.url ) === \"function\" ? providerOpts.url.call( this, rez, params, item ) : format( providerOpts.url, rez, params );\r\n\t\t\tthumb = $.type( providerOpts.thumb ) === \"function\" ? providerOpts.thumb.call( this, rez, params, item ) : format( providerOpts.thumb, rez );\r\n\r\n\t\t\tif ( providerName === 'vimeo' ) {\r\n\t\t\t\turl = url.replace('&%23', '#');\r\n\t\t\t}\r\n\r\n\t\t\treturn false;\r\n\t\t});\r\n\r\n\t\t// If it is found, then change content type and update the url\r\n\r\n\t\tif ( type ) {\r\n\t\t\titem.src = url;\r\n\t\t\titem.type = type;\r\n\r\n\t\t\tif ( !item.opts.thumb && !( item.opts.$thumb && item.opts.$thumb.length ) ) {\r\n\t\t\t\titem.opts.thumb = thumb;\r\n\t\t\t}\r\n\r\n\t\t\tif ( type === 'iframe' ) {\r\n\t\t\t\t$.extend(true, item.opts, {\r\n\t\t\t\t\tiframe : {\r\n\t\t\t\t\t\tpreload : false,\r\n\t\t\t\t\t\tattr : {\r\n\t\t\t\t\t\t\tscrolling : \"no\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\titem.contentProvider = provider;\r\n\r\n\t\t\t\titem.opts.slideClass += ' fancybox-slide--' + ( provider == 'gmap_place' || provider == 'gmap_search' ? 'map' : 'video' );\r\n\t\t\t}\r\n\r\n\t\t} else if ( url ) {\r\n\t\t\titem.type = item.opts.defaultType;\r\n\t\t}\r\n\r\n\t});\r\n\r\n}( window.jQuery || jQuery ));\r\n\r\n// ==========================================================================\r\n//\r\n// Guestures\r\n// Adds touch guestures, handles click and tap events\r\n//\r\n// ==========================================================================\r\n;(function (window, document, $) {\r\n\t'use strict';\r\n\r\n\tvar requestAFrame = (function () {\r\n\t\treturn window.requestAnimationFrame ||\r\n\t\t\twindow.webkitRequestAnimationFrame ||\r\n\t\t\twindow.mozRequestAnimationFrame ||\r\n\t\t\twindow.oRequestAnimationFrame ||\r\n\t\t\t// if all else fails, use setTimeout\r\n\t\t\tfunction (callback) {\r\n\t\t\t\treturn window.setTimeout(callback, 1000 / 60);\r\n\t\t\t};\r\n\t})();\r\n\r\n\tvar cancelAFrame = (function () {\r\n\t\treturn window.cancelAnimationFrame ||\r\n\t\t\twindow.webkitCancelAnimationFrame ||\r\n\t\t\twindow.mozCancelAnimationFrame ||\r\n\t\t\twindow.oCancelAnimationFrame ||\r\n\t\t\tfunction (id) {\r\n\t\t\t\twindow.clearTimeout(id);\r\n\t\t\t};\r\n\t})();\r\n\r\n\tvar pointers = function( e ) {\r\n\t\tvar result = [];\r\n\r\n\t\te = e.originalEvent || e || window.e;\r\n\t\te = e.touches && e.touches.length ? e.touches : ( e.changedTouches && e.changedTouches.length ? e.changedTouches : [ e ] );\r\n\r\n\t\tfor ( var key in e ) {\r\n\r\n\t\t\tif ( e[ key ].pageX ) {\r\n\t\t\t\tresult.push( { x : e[ key ].pageX, y : e[ key ].pageY } );\r\n\r\n\t\t\t} else if ( e[ key ].clientX ) {\r\n\t\t\t\tresult.push( { x : e[ key ].clientX, y : e[ key ].clientY } );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t};\r\n\r\n\tvar distance = function( point2, point1, what ) {\r\n\t\tif ( !point1 || !point2 ) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tif ( what === 'x' ) {\r\n\t\t\treturn point2.x - point1.x;\r\n\r\n\t\t} else if ( what === 'y' ) {\r\n\t\t\treturn point2.y - point1.y;\r\n\t\t}\r\n\r\n\t\treturn Math.sqrt( Math.pow( point2.x - point1.x, 2 ) + Math.pow( point2.y - point1.y, 2 ) );\r\n\t};\r\n\r\n\tvar isClickable = function( $el ) {\r\n\t\tif ( $el.is('a,area,button,[role=\"button\"],input,label,select,summary,textarea') || $.isFunction( $el.get(0).onclick ) || $el.data('selectable') ) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t// Check for attributes like data-fancybox-next or data-fancybox-close\r\n\t\tfor ( var i = 0, atts = $el[0].attributes, n = atts.length; i < n; i++ ) {\r\n\t\t\tif ( atts[i].nodeName.substr(0, 14) === 'data-fancybox-' ) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t \treturn false;\r\n\t};\r\n\r\n\tvar hasScrollbars = function( el ) {\r\n\t\tvar overflowY = window.getComputedStyle( el )['overflow-y'];\r\n\t\tvar overflowX = window.getComputedStyle( el )['overflow-x'];\r\n\r\n\t\tvar vertical = (overflowY === 'scroll' || overflowY === 'auto') && el.scrollHeight > el.clientHeight;\r\n\t\tvar horizontal = (overflowX === 'scroll' || overflowX === 'auto') && el.scrollWidth > el.clientWidth;\r\n\r\n\t\treturn vertical || horizontal;\r\n\t};\r\n\r\n\tvar isScrollable = function ( $el ) {\r\n\t\tvar rez = false;\r\n\r\n\t\twhile ( true ) {\r\n\t\t\trez\t= hasScrollbars( $el.get(0) );\r\n\r\n\t\t\tif ( rez ) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\t$el = $el.parent();\r\n\r\n\t\t\tif ( !$el.length || $el.hasClass( 'fancybox-stage' ) || $el.is( 'body' ) ) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn rez;\r\n\t};\r\n\r\n\r\n\tvar Guestures = function ( instance ) {\r\n\t\tvar self = this;\r\n\r\n\t\tself.instance = instance;\r\n\r\n\t\tself.$bg = instance.$refs.bg;\r\n\t\tself.$stage = instance.$refs.stage;\r\n\t\tself.$container = instance.$refs.container;\r\n\r\n\t\tself.destroy();\r\n\r\n\t\tself.$container.on( 'touchstart.fb.touch mousedown.fb.touch', $.proxy(self, 'ontouchstart') );\r\n\t};\r\n\r\n\tGuestures.prototype.destroy = function() {\r\n\t\tthis.$container.off( '.fb.touch' );\r\n\t};\r\n\r\n\tGuestures.prototype.ontouchstart = function( e ) {\r\n\t\tvar self = this;\r\n\r\n\t\tvar $target = $( e.target );\r\n\t\tvar instance = self.instance;\r\n\t\tvar current = instance.current;\r\n\t\tvar $content = current.$content;\r\n\r\n\t\tvar isTouchDevice = ( e.type == 'touchstart' );\r\n\r\n\t\t// Do not respond to both (touch and mouse) events\r\n\t\tif ( isTouchDevice ) {\r\n\t\t\tself.$container.off( 'mousedown.fb.touch' );\r\n\t\t}\r\n\r\n\t\t// Ignore right click\r\n\t\tif ( e.originalEvent && e.originalEvent.button == 2 ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Ignore taping on links, buttons, input elements\r\n\t\tif ( !$target.length || isClickable( $target ) || isClickable( $target.parent() ) ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Ignore clicks on the scrollbar\r\n\t\tif ( !$target.is('img') && e.originalEvent.clientX > $target[0].clientWidth + $target.offset().left ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Ignore clicks while zooming or closing\r\n\t\tif ( !current || self.instance.isAnimating || self.instance.isClosing ) {\r\n\t\t\te.stopPropagation();\r\n\t\t\te.preventDefault();\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tself.realPoints = self.startPoints = pointers( e );\r\n\r\n\t\tif ( !self.startPoints ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\te.stopPropagation();\r\n\r\n\t\tself.startEvent = e;\r\n\r\n\t\tself.canTap = true;\r\n\t\tself.$target = $target;\r\n\t\tself.$content = $content;\r\n\t\tself.opts = current.opts.touch;\r\n\r\n\t\tself.isPanning = false;\r\n\t\tself.isSwiping = false;\r\n\t\tself.isZooming = false;\r\n\t\tself.isScrolling = false;\r\n\r\n\t\tself.sliderStartPos = self.sliderLastPos || { top: 0, left: 0 };\r\n\t\tself.contentStartPos = $.fancybox.getTranslate( self.$content );\r\n\t\tself.contentLastPos = null;\r\n\r\n\t\tself.startTime = new Date().getTime();\r\n\t\tself.distanceX = self.distanceY = self.distance = 0;\r\n\r\n\t\tself.canvasWidth = Math.round( current.$slide[0].clientWidth );\r\n\t\tself.canvasHeight = Math.round( current.$slide[0].clientHeight );\r\n\r\n\t\t$(document)\r\n\t\t\t.off( '.fb.touch' )\r\n\t\t\t.on( isTouchDevice ? 'touchend.fb.touch touchcancel.fb.touch' : 'mouseup.fb.touch mouseleave.fb.touch', $.proxy(self, \"ontouchend\"))\r\n\t\t\t.on( isTouchDevice ? 'touchmove.fb.touch' : 'mousemove.fb.touch', $.proxy(self, \"ontouchmove\"));\r\n\r\n\t\tif ( $.fancybox.isMobile ) {\r\n\t\t\tdocument.addEventListener('scroll', self.onscroll, true);\r\n\t\t}\r\n\r\n\t\tif ( !(self.opts || instance.canPan() ) || !( $target.is( self.$stage ) || self.$stage.find( $target ).length ) ) {\r\n\r\n\t\t\t// Prevent image ghosting while dragging\r\n\t\t\tif ( $target.is('img') ) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif ( !( $.fancybox.isMobile && ( isScrollable( $target ) || isScrollable( $target.parent() ) ) ) ) {\r\n\t\t\te.preventDefault();\r\n\t\t}\r\n\r\n\t\tif ( self.startPoints.length === 1 ) {\r\n\t\t\tif ( current.type === 'image' && ( self.contentStartPos.width > self.canvasWidth + 1 || self.contentStartPos.height > self.canvasHeight + 1 ) ) {\r\n\t\t\t\t$.fancybox.stop( self.$content );\r\n\r\n\t\t\t\tself.$content.css( 'transition-duration', '' );\r\n\r\n\t\t\t\tself.isPanning = true;\r\n\r\n\t\t\t} else {\r\n\t\t\t\tself.isSwiping = true;\r\n\t\t\t}\r\n\r\n\t\t\tself.$container.addClass( 'fancybox-controls--isGrabbing' );\r\n\t\t}\r\n\r\n\t\tif ( self.startPoints.length === 2 && !instance.isAnimating && !current.hasError && current.type === 'image' && ( current.isLoaded || current.$ghost ) ) {\r\n\t\t\tself.canTap = false;\r\n\t\t\tself.isSwiping = false;\r\n\t\t\tself.isPanning = false;\r\n\r\n\t\t\tself.isZooming = true;\r\n\r\n\t\t\t$.fancybox.stop( self.$content );\r\n\r\n\t\t\tself.$content.css( 'transition-duration', '' );\r\n\r\n\t\t\tself.centerPointStartX = ( ( self.startPoints[0].x + self.startPoints[1].x ) * 0.5 ) - $(window).scrollLeft();\r\n\t\t\tself.centerPointStartY = ( ( self.startPoints[0].y + self.startPoints[1].y ) * 0.5 ) - $(window).scrollTop();\r\n\r\n\t\t\tself.percentageOfImageAtPinchPointX = ( self.centerPointStartX - self.contentStartPos.left ) / self.contentStartPos.width;\r\n\t\t\tself.percentageOfImageAtPinchPointY = ( self.centerPointStartY - self.contentStartPos.top ) / self.contentStartPos.height;\r\n\r\n\t\t\tself.startDistanceBetweenFingers = distance( self.startPoints[0], self.startPoints[1] );\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tGuestures.prototype.onscroll = function(e) {\r\n\t\tself.isScrolling = true;\r\n\t};\r\n\r\n\tGuestures.prototype.ontouchmove = function( e ) {\r\n\t\tvar self = this,\r\n\t\t\t$target = $(e.target);\r\n\r\n\t\tif ( self.isScrolling || !( $target.is( self.$stage ) || self.$stage.find( $target ).length ) ) {\r\n\t\t\tself.canTap = false;\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tself.newPoints = pointers( e );\r\n\r\n\t\tif ( !( self.opts || self.instance.canPan() ) || !self.newPoints || !self.newPoints.length ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif ( !(self.isSwiping && self.isSwiping === true) ) {\r\n\t\t\te.preventDefault();\r\n\t\t}\r\n\r\n\t\tself.distanceX = distance( self.newPoints[0], self.startPoints[0], 'x' );\r\n\t\tself.distanceY = distance( self.newPoints[0], self.startPoints[0], 'y' );\r\n\r\n\t\tself.distance = distance( self.newPoints[0], self.startPoints[0] )\r\n\r\n\t\t// Skip false ontouchmove events (Chrome)\r\n\t\tif ( self.distance > 0 ) {\r\n\t\t\tif ( self.isSwiping ) {\r\n\t\t\t\tself.onSwipe(e);\r\n\r\n\t\t\t} else if ( self.isPanning ) {\r\n\t\t\t\tself.onPan();\r\n\r\n\t\t\t} else if ( self.isZooming ) {\r\n\t\t\t\tself.onZoom();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tGuestures.prototype.onSwipe = function(e) {\r\n\t\tvar self = this,\r\n\t\t\tswiping = self.isSwiping,\r\n\t\t\tleft = self.sliderStartPos.left || 0,\r\n\t\t\tangle;\r\n\r\n\t\t// If direction is not yet determined\r\n\t\tif ( swiping === true ) {\r\n\r\n\t\t\t// We need at least 10px distance to correctly calculate an angle\r\n\t\t\tif ( Math.abs( self.distance ) > 10 ) {\r\n\t\t\t\tself.canTap = false;\r\n\r\n\t\t\t\tif ( self.instance.group.length < 2 && self.opts.vertical ) {\r\n\t\t\t\t\tself.isSwiping = 'y';\r\n\r\n\t\t\t\t} else if ( self.instance.isDragging || self.opts.vertical === false || ( self.opts.vertical === 'auto' && $( window ).width() > 800 ) ) {\r\n\t\t\t\t\tself.isSwiping = 'x';\r\n\r\n\t\t\t\t} else {\r\n\t\t\t\t\tangle = Math.abs( Math.atan2( self.distanceY, self.distanceX ) * 180 / Math.PI );\r\n\r\n\t\t\t\t\tself.isSwiping = ( angle > 45 && angle < 135 ) ? 'y' : 'x';\r\n\t\t\t\t}\r\n\r\n\t\t\t\tself.canTap = false;\r\n\r\n\t\t\t\t if ( self.isSwiping === 'y' && $.fancybox.isMobile && ( isScrollable( self.$target ) || isScrollable( self.$target.parent() ) ) ) {\r\n\t\t\t\t\t self.isScrolling = true;\r\n\r\n\t\t\t\t\t return;\r\n\t\t\t\t }\r\n\r\n\t\t\t\tself.instance.isDragging = self.isSwiping;\r\n\r\n\t\t\t\t// Reset points to avoid jumping, because we dropped first swipes to calculate the angle\r\n\t\t\t\tself.startPoints = self.newPoints;\r\n\r\n\t\t\t\t$.each(self.instance.slides, function( index, slide ) {\r\n\t\t\t\t\t$.fancybox.stop( slide.$slide );\r\n\r\n\t\t\t\t\tslide.$slide.css( 'transition-duration', '' );\r\n\r\n\t\t\t\t\tslide.inTransition = false;\r\n\r\n\t\t\t\t\tif ( slide.pos === self.instance.current.pos ) {\r\n\t\t\t\t\t\tself.sliderStartPos.left = $.fancybox.getTranslate( slide.$slide ).left;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// Stop slideshow\r\n\t\t\t\tif ( self.instance.SlideShow && self.instance.SlideShow.isActive ) {\r\n\t\t\t\t\tself.instance.SlideShow.stop();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Sticky edges\r\n\t\tif ( swiping == 'x' ) {\r\n\t\t\tif ( self.distanceX > 0 && ( self.instance.group.length < 2 || ( self.instance.current.index === 0 && !self.instance.current.opts.loop ) ) ) {\r\n\t\t\t\tleft = left + Math.pow( self.distanceX, 0.8 );\r\n\r\n\t\t\t} else if ( self.distanceX < 0 && ( self.instance.group.length < 2 || ( self.instance.current.index === self.instance.group.length - 1 && !self.instance.current.opts.loop ) ) ) {\r\n\t\t\t\tleft = left - Math.pow( -self.distanceX, 0.8 );\r\n\r\n\t\t\t} else {\r\n\t\t\t\tleft = left + self.distanceX;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tself.sliderLastPos = {\r\n\t\t\ttop : swiping == 'x' ? 0 : self.sliderStartPos.top + self.distanceY,\r\n\t\t\tleft : left\r\n\t\t};\r\n\r\n\t\tif ( self.requestId ) {\r\n\t\t\tcancelAFrame( self.requestId );\r\n\r\n\t\t\tself.requestId = null;\r\n\t\t}\r\n\r\n\t\tself.requestId = requestAFrame(function() {\r\n\r\n\t\t\tif ( self.sliderLastPos ) {\r\n\t\t\t\t$.each(self.instance.slides, function( index, slide ) {\r\n\t\t\t\t\tvar pos = slide.pos - self.instance.currPos;\r\n\r\n\t\t\t\t\t$.fancybox.setTranslate( slide.$slide, {\r\n\t\t\t\t\t\ttop : self.sliderLastPos.top,\r\n\t\t\t\t\t\tleft : self.sliderLastPos.left + ( pos * self.canvasWidth ) + ( pos * slide.opts.gutter )\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\r\n\t\t\t\tself.$container.addClass( 'fancybox-is-sliding' );\r\n\t\t\t}\r\n\r\n\t\t});\r\n\r\n\t};\r\n\r\n\tGuestures.prototype.onPan = function() {\r\n\t\tvar self = this;\r\n\r\n\t\t// Sometimes, when tapping causally, image can move a bit and that breaks double tapping\r\n\t\tif ( distance( self.newPoints[0], self.realPoints[0] ) < ($.fancybox.isMobile ? 10 : 5) ) {\r\n\t\t\tself.startPoints = self.newPoints;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tself.canTap = false;\r\n\r\n\t\tself.contentLastPos = self.limitMovement();\r\n\r\n\t\tif ( self.requestId ) {\r\n\t\t\tcancelAFrame( self.requestId );\r\n\r\n\t\t\tself.requestId = null;\r\n\t\t}\r\n\r\n\t\tself.requestId = requestAFrame(function() {\r\n\t\t\t$.fancybox.setTranslate( self.$content, self.contentLastPos );\r\n\t\t});\r\n\t};\r\n\r\n\t// Make panning sticky to the edges\r\n\tGuestures.prototype.limitMovement = function() {\r\n\t\tvar self = this;\r\n\r\n\t\tvar canvasWidth = self.canvasWidth;\r\n\t\tvar canvasHeight = self.canvasHeight;\r\n\r\n\t\tvar distanceX = self.distanceX;\r\n\t\tvar distanceY = self.distanceY;\r\n\r\n\t\tvar contentStartPos = self.contentStartPos;\r\n\r\n\t\tvar currentOffsetX = contentStartPos.left;\r\n\t\tvar currentOffsetY = contentStartPos.top;\r\n\r\n\t\tvar currentWidth = contentStartPos.width;\r\n\t\tvar currentHeight = contentStartPos.height;\r\n\r\n\t\tvar minTranslateX, minTranslateY,\r\n\t\t\tmaxTranslateX, maxTranslateY,\r\n\t\t\tnewOffsetX, newOffsetY;\r\n\r\n\t\tif ( currentWidth > canvasWidth ) {\r\n\t\t\tnewOffsetX = currentOffsetX + distanceX;\r\n\r\n\t\t} else {\r\n\t\t\tnewOffsetX = currentOffsetX;\r\n\t\t}\r\n\r\n\t\tnewOffsetY = currentOffsetY + distanceY;\r\n\r\n\t\t// Slow down proportionally to traveled distance\r\n\t\tminTranslateX = Math.max( 0, canvasWidth * 0.5 - currentWidth * 0.5 );\r\n\t\tminTranslateY = Math.max( 0, canvasHeight * 0.5 - currentHeight * 0.5 );\r\n\r\n\t\tmaxTranslateX = Math.min( canvasWidth - currentWidth, canvasWidth * 0.5 - currentWidth * 0.5 );\r\n\t\tmaxTranslateY = Math.min( canvasHeight - currentHeight, canvasHeight * 0.5 - currentHeight * 0.5 );\r\n\r\n\t\tif ( currentWidth > canvasWidth ) {\r\n\r\n\t\t\t// ->\r\n\t\t\tif ( distanceX > 0 && newOffsetX > minTranslateX ) {\r\n\t\t\t\tnewOffsetX = minTranslateX - 1 + Math.pow( -minTranslateX + currentOffsetX + distanceX, 0.8 ) || 0;\r\n\t\t\t}\r\n\r\n\t\t\t// <-\r\n\t\t\tif ( distanceX < 0 && newOffsetX < maxTranslateX ) {\r\n\t\t\t\tnewOffsetX = maxTranslateX + 1 - Math.pow( maxTranslateX - currentOffsetX - distanceX, 0.8 ) || 0;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( currentHeight > canvasHeight ) {\r\n\r\n\t\t\t// \\/\r\n\t\t\tif ( distanceY > 0 && newOffsetY > minTranslateY ) {\r\n\t\t\t\tnewOffsetY = minTranslateY - 1 + Math.pow(-minTranslateY + currentOffsetY + distanceY, 0.8 ) || 0;\r\n\t\t\t}\r\n\r\n\t\t\t// /\\\r\n\t\t\tif ( distanceY < 0 && newOffsetY < maxTranslateY ) {\r\n\t\t\t\tnewOffsetY = maxTranslateY + 1 - Math.pow ( maxTranslateY - currentOffsetY - distanceY, 0.8 ) || 0;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\ttop : newOffsetY,\r\n\t\t\tleft : newOffsetX,\r\n\t\t\tscaleX : contentStartPos.scaleX,\r\n\t\t\tscaleY : contentStartPos.scaleY\r\n\t\t};\r\n\r\n\t};\r\n\r\n\tGuestures.prototype.limitPosition = function( newOffsetX, newOffsetY, newWidth, newHeight ) {\r\n\t\tvar self = this;\r\n\r\n\t\tvar canvasWidth = self.canvasWidth;\r\n\t\tvar canvasHeight = self.canvasHeight;\r\n\r\n\t\tif ( newWidth > canvasWidth ) {\r\n\t\t\tnewOffsetX = newOffsetX > 0 ? 0 : newOffsetX;\r\n\t\t\tnewOffsetX = newOffsetX < canvasWidth - newWidth ? canvasWidth - newWidth : newOffsetX;\r\n\r\n\t\t} else {\r\n\r\n\t\t\t// Center horizontally\r\n\t\t\tnewOffsetX = Math.max( 0, canvasWidth / 2 - newWidth / 2 );\r\n\r\n\t\t}\r\n\r\n\t\tif ( newHeight > canvasHeight ) {\r\n\t\t\tnewOffsetY = newOffsetY > 0 ? 0 : newOffsetY;\r\n\t\t\tnewOffsetY = newOffsetY < canvasHeight - newHeight ? canvasHeight - newHeight : newOffsetY;\r\n\r\n\t\t} else {\r\n\r\n\t\t\t// Center vertically\r\n\t\t\tnewOffsetY = Math.max( 0, canvasHeight / 2 - newHeight / 2 );\r\n\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\ttop : newOffsetY,\r\n\t\t\tleft : newOffsetX\r\n\t\t};\r\n\r\n\t};\r\n\r\n\tGuestures.prototype.onZoom = function() {\r\n\t\tvar self = this;\r\n\r\n\t\t// Calculate current distance between points to get pinch ratio and new width and height\r\n\r\n\t\tvar currentWidth = self.contentStartPos.width;\r\n\t\tvar currentHeight = self.contentStartPos.height;\r\n\r\n\t\tvar currentOffsetX = self.contentStartPos.left;\r\n\t\tvar currentOffsetY = self.contentStartPos.top;\r\n\r\n\t\tvar endDistanceBetweenFingers = distance( self.newPoints[0], self.newPoints[1] );\r\n\r\n\t\tvar pinchRatio = endDistanceBetweenFingers / self.startDistanceBetweenFingers;\r\n\r\n\t\tvar newWidth = Math.floor( currentWidth * pinchRatio );\r\n\t\tvar newHeight = Math.floor( currentHeight * pinchRatio );\r\n\r\n\t\t// This is the translation due to pinch-zooming\r\n\t\tvar translateFromZoomingX = (currentWidth - newWidth) * self.percentageOfImageAtPinchPointX;\r\n\t\tvar translateFromZoomingY = (currentHeight - newHeight) * self.percentageOfImageAtPinchPointY;\r\n\r\n\t\t//Point between the two touches\r\n\r\n\t\tvar centerPointEndX = ((self.newPoints[0].x + self.newPoints[1].x) / 2) - $(window).scrollLeft();\r\n\t\tvar centerPointEndY = ((self.newPoints[0].y + self.newPoints[1].y) / 2) - $(window).scrollTop();\r\n\r\n\t\t// And this is the translation due to translation of the centerpoint\r\n\t\t// between the two fingers\r\n\r\n\t\tvar translateFromTranslatingX = centerPointEndX - self.centerPointStartX;\r\n\t\tvar translateFromTranslatingY = centerPointEndY - self.centerPointStartY;\r\n\r\n\t\t// The new offset is the old/current one plus the total translation\r\n\r\n\t\tvar newOffsetX = currentOffsetX + ( translateFromZoomingX + translateFromTranslatingX );\r\n\t\tvar newOffsetY = currentOffsetY + ( translateFromZoomingY + translateFromTranslatingY );\r\n\r\n\t\tvar newPos = {\r\n\t\t\ttop : newOffsetY,\r\n\t\t\tleft : newOffsetX,\r\n\t\t\tscaleX : self.contentStartPos.scaleX * pinchRatio,\r\n\t\t\tscaleY : self.contentStartPos.scaleY * pinchRatio\r\n\t\t};\r\n\r\n\t\tself.canTap = false;\r\n\r\n\t\tself.newWidth = newWidth;\r\n\t\tself.newHeight = newHeight;\r\n\r\n\t\tself.contentLastPos = newPos;\r\n\r\n\t\tif ( self.requestId ) {\r\n\t\t\tcancelAFrame( self.requestId );\r\n\r\n\t\t\tself.requestId = null;\r\n\t\t}\r\n\r\n\t\tself.requestId = requestAFrame(function() {\r\n\t\t\t$.fancybox.setTranslate( self.$content, self.contentLastPos );\r\n\t\t});\r\n\r\n\t};\r\n\r\n\tGuestures.prototype.ontouchend = function( e ) {\r\n\t\tvar self = this;\r\n\t\tvar dMs = Math.max( (new Date().getTime() ) - self.startTime, 1);\r\n\r\n\t\tvar swiping = self.isSwiping;\r\n\t\tvar panning = self.isPanning;\r\n\t\tvar zooming = self.isZooming;\r\n\t\tvar scrolling = self.isScrolling;\r\n\r\n\t\tself.endPoints = pointers( e );\r\n\r\n\t\tself.$container.removeClass( 'fancybox-controls--isGrabbing' );\r\n\r\n\t\t$(document).off( '.fb.touch' );\r\n\r\n\t\tdocument.removeEventListener('scroll', self.onscroll, true);\r\n\r\n\t\tif ( self.requestId ) {\r\n\t\t\tcancelAFrame( self.requestId );\r\n\r\n\t\t\tself.requestId = null;\r\n\t\t}\r\n\r\n\t\tself.isSwiping = false;\r\n\t\tself.isPanning = false;\r\n\t\tself.isZooming = false;\r\n\t\tself.isScrolling = false;\r\n\r\n\t\tself.instance.isDragging = false;\r\n\r\n\t\tif ( self.canTap ) {\r\n\t\t\treturn self.onTap( e );\r\n\t\t}\r\n\r\n\t\tself.speed = 366;\r\n\r\n\t\t// Speed in px/ms\r\n\t\tself.velocityX = self.distanceX / dMs * 0.5;\r\n\t\tself.velocityY = self.distanceY / dMs * 0.5;\r\n\r\n\t\tself.speedX = Math.max( self.speed * 0.5, Math.min( self.speed * 1.5, ( 1 / Math.abs( self.velocityX ) ) * self.speed ) );\r\n\r\n\t\tif ( panning ) {\r\n\t\t\tself.endPanning();\r\n\r\n\t\t} else if ( zooming ) {\r\n\t\t\tself.endZooming();\r\n\r\n\t\t} else {\r\n\t\t\tself.endSwiping( swiping, scrolling );\r\n\t\t}\r\n\r\n\t\treturn;\r\n\t};\r\n\r\n\tGuestures.prototype.endSwiping = function( swiping, scrolling ) {\r\n\t\tvar self = this,\r\n\t\t\tret = false,\r\n\t\t\tlen = self.instance.group.length;\r\n\r\n\t\tself.sliderLastPos = null;\r\n\r\n\t\t// Close if swiped vertically / navigate if horizontally\r\n\t\tif ( swiping == 'y' && !scrolling && Math.abs( self.distanceY ) > 50 ) {\r\n\r\n\t\t\t// Continue vertical movement\r\n\t\t\t$.fancybox.animate( self.instance.current.$slide, {\r\n\t\t\t\ttop : self.sliderStartPos.top + self.distanceY + ( self.velocityY * 150 ),\r\n\t\t\t\topacity : 0\r\n\t\t\t}, 150 );\r\n\r\n\t\t\tret = self.instance.close( true, 300 );\r\n\r\n\t\t} else if ( swiping == 'x' && self.distanceX > 50 && len > 1 ) {\r\n\t\t\tret = self.instance.previous( self.speedX );\r\n\r\n\t\t} else if ( swiping == 'x' && self.distanceX < -50 && len > 1 ) {\r\n\t\t\tret = self.instance.next( self.speedX );\r\n\t\t}\r\n\r\n\t\tif ( ret === false && ( swiping == 'x' || swiping == 'y' ) ) {\r\n\t\t\tif ( scrolling || len < 2 ) {\r\n\t\t\t\tself.instance.centerSlide( self.instance.current, 150 );\r\n\t\t\t} else {\r\n\t\t\t\tself.instance.jumpTo( self.instance.current.index );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tself.$container.removeClass( 'fancybox-is-sliding' );\r\n\r\n\t};\r\n\r\n\t// Limit panning from edges\r\n\t// ========================\r\n\r\n\tGuestures.prototype.endPanning = function() {\r\n\r\n\t\tvar self = this;\r\n\t\tvar newOffsetX, newOffsetY, newPos;\r\n\r\n\t\tif ( !self.contentLastPos ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif ( self.opts.momentum === false ) {\r\n\t\t\tnewOffsetX = self.contentLastPos.left;\r\n\t\t\tnewOffsetY = self.contentLastPos.top;\r\n\r\n\t\t} else {\r\n\r\n\t\t\t// Continue movement\r\n\t\t\tnewOffsetX = self.contentLastPos.left + ( self.velocityX * self.speed );\r\n\t\t\tnewOffsetY = self.contentLastPos.top + ( self.velocityY * self.speed );\r\n\t\t}\r\n\r\n\t\tnewPos = self.limitPosition( newOffsetX, newOffsetY, self.contentStartPos.width, self.contentStartPos.height );\r\n\r\n\t\t newPos.width = self.contentStartPos.width;\r\n\t\t newPos.height = self.contentStartPos.height;\r\n\r\n\t\t$.fancybox.animate( self.$content, newPos, 330 );\r\n\t};\r\n\r\n\r\n\tGuestures.prototype.endZooming = function() {\r\n\t\tvar self = this;\r\n\r\n\t\tvar current = self.instance.current;\r\n\r\n\t\tvar newOffsetX, newOffsetY, newPos, reset;\r\n\r\n\t\tvar newWidth = self.newWidth;\r\n\t\tvar newHeight = self.newHeight;\r\n\r\n\t\tif ( !self.contentLastPos ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tnewOffsetX = self.contentLastPos.left;\r\n\t\tnewOffsetY = self.contentLastPos.top;\r\n\r\n\t\treset = {\r\n\t\t\ttop : newOffsetY,\r\n\t\t\tleft : newOffsetX,\r\n\t\t\twidth : newWidth,\r\n\t\t\theight : newHeight,\r\n\t\t\tscaleX : 1,\r\n\t\t\tscaleY : 1\r\n\t\t};\r\n\r\n\t\t// Reset scalex/scaleY values; this helps for perfomance and does not break animation\r\n\t\t$.fancybox.setTranslate( self.$content, reset );\r\n\r\n\t\tif ( newWidth < self.canvasWidth && newHeight < self.canvasHeight ) {\r\n\t\t\tself.instance.scaleToFit( 150 );\r\n\r\n\t\t} else if ( newWidth > current.width || newHeight > current.height ) {\r\n\t\t\tself.instance.scaleToActual( self.centerPointStartX, self.centerPointStartY, 150 );\r\n\r\n\t\t} else {\r\n\r\n\t\t\tnewPos = self.limitPosition( newOffsetX, newOffsetY, newWidth, newHeight );\r\n\r\n\t\t\t// Switch from scale() to width/height or animation will not work correctly\r\n\t\t\t$.fancybox.setTranslate( self.content, $.fancybox.getTranslate( self.$content ) );\r\n\r\n\t\t\t$.fancybox.animate( self.$content, newPos, 150 );\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tGuestures.prototype.onTap = function(e) {\r\n\t\tvar self = this;\r\n\t\tvar $target = $( e.target );\r\n\r\n\t\tvar instance = self.instance;\r\n\t\tvar current = instance.current;\r\n\r\n\t\tvar endPoints = ( e && pointers( e ) ) || self.startPoints;\r\n\r\n\t\tvar tapX = endPoints[0] ? endPoints[0].x - self.$stage.offset().left : 0;\r\n\t\tvar tapY = endPoints[0] ? endPoints[0].y - self.$stage.offset().top : 0;\r\n\r\n\t\tvar where;\r\n\r\n\t\tvar process = function ( prefix ) {\r\n\r\n\t\t\tvar action = current.opts[ prefix ];\r\n\r\n\t\t\tif ( $.isFunction( action ) ) {\r\n\t\t\t\taction = action.apply( instance, [ current, e ] );\r\n\t\t\t}\r\n\r\n\t\t\tif ( !action) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tswitch ( action ) {\r\n\r\n\t\t\t\tcase \"close\" :\r\n\r\n\t\t\t\t\tinstance.close( self.startEvent );\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"toggleControls\" :\r\n\r\n\t\t\t\t\tinstance.toggleControls( true );\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"next\" :\r\n\r\n\t\t\t\t\tinstance.next();\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"nextOrClose\" :\r\n\r\n\t\t\t\t\tif ( instance.group.length > 1 ) {\r\n\t\t\t\t\t\tinstance.next();\r\n\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tinstance.close( self.startEvent );\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"zoom\" :\r\n\r\n\t\t\t\t\tif ( current.type == 'image' && ( current.isLoaded || current.$ghost ) ) {\r\n\r\n\t\t\t\t\t\tif ( instance.canPan() ) {\r\n\t\t\t\t\t\t\tinstance.scaleToFit();\r\n\r\n\t\t\t\t\t\t} else if ( instance.isScaledDown() ) {\r\n\t\t\t\t\t\t\tinstance.scaleToActual( tapX, tapY );\r\n\r\n\t\t\t\t\t\t} else if ( instance.group.length < 2 ) {\r\n\t\t\t\t\t\t\tinstance.close( self.startEvent );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t};\r\n\r\n\t\t// Ignore right click\r\n\t\tif ( e.originalEvent && e.originalEvent.button == 2 ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Skip if clicked on the scrollbar\r\n\t\tif ( !$target.is('img') && tapX > $target[0].clientWidth + $target.offset().left ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Check where is clicked\r\n\t\tif ( $target.is( '.fancybox-bg,.fancybox-inner,.fancybox-outer,.fancybox-container' ) ) {\r\n\t\t\twhere = 'Outside';\r\n\r\n\t\t} else if ( $target.is( '.fancybox-slide' ) ) {\r\n\t\t\twhere = 'Slide';\r\n\r\n\t\t} else if ( instance.current.$content && instance.current.$content.find( $target ).addBack().filter( $target ).length ) {\r\n\t\t \twhere = 'Content';\r\n\r\n\t\t} else {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Check if this is a double tap\r\n\t\tif ( self.tapped ) {\r\n\r\n\t\t\t// Stop previously created single tap\r\n\t\t\tclearTimeout( self.tapped );\r\n\t\t\tself.tapped = null;\r\n\r\n\t\t\t// Skip if distance between taps is too big\r\n\t\t\tif ( Math.abs( tapX - self.tapX ) > 50 || Math.abs( tapY - self.tapY ) > 50 ) {\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\t// OK, now we assume that this is a double-tap\r\n\t\t\tprocess( 'dblclick' + where );\r\n\r\n\t\t} else {\r\n\r\n\t\t\t// Single tap will be processed if user has not clicked second time within 300ms\r\n\t\t\t// or there is no need to wait for double-tap\r\n\t\t\tself.tapX = tapX;\r\n\t\t\tself.tapY = tapY;\r\n\r\n\t\t\tif ( current.opts[ 'dblclick' + where ] && current.opts[ 'dblclick' + where ] !== current.opts[ 'click' + where ] ) {\r\n\r\n\t\t\t\tself.tapped = setTimeout(function() {\r\n\t\t\t\t\tself.tapped = null;\r\n\r\n\t\t\t\t\tprocess( 'click' + where );\r\n\r\n\t\t\t\t}, 500);\r\n\r\n\t\t\t} else {\r\n\t\t\t\tprocess( 'click' + where );\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\t$(document).on('onActivate.fb', function (e, instance) {\r\n\t\tif ( instance && !instance.Guestures ) {\r\n\t\t\tinstance.Guestures = new Guestures( instance );\r\n\t\t}\r\n\t});\r\n\r\n}( window, document, window.jQuery || jQuery ));\r\n\r\n// ==========================================================================\r\n//\r\n// SlideShow\r\n// Enables slideshow functionality\r\n//\r\n// Example of usage:\r\n// $.fancybox.getInstance().SlideShow.start()\r\n//\r\n// ==========================================================================\r\n;(function (document, $) {\r\n\t'use strict';\r\n\r\n\t$.extend(true, $.fancybox.defaults, {\r\n\t\tbtnTpl : {\r\n\t\t\tslideShow :\r\n\t\t\t\t''\r\n\t\t},\r\n\t\tslideShow : {\r\n\t\t\tautoStart : false,\r\n speed : 3000\r\n\t\t}\r\n\t});\r\n\r\n\tvar SlideShow = function( instance ) {\r\n\t\tthis.instance = instance;\r\n\t\tthis.init();\r\n\t};\r\n\r\n\t$.extend( SlideShow.prototype, {\r\n\t\ttimer : null,\r\n\t\tisActive : false,\r\n\t\t$button : null,\r\n\r\n\t\tinit : function() {\r\n\t\t\tvar self = this;\r\n\r\n\t\t\tself.$button = self.instance.$refs.toolbar.find('[data-fancybox-play]').on('click', function() {\r\n\t\t\t\tself.toggle();\r\n\t\t\t});\r\n\r\n\t\t\tif ( self.instance.group.length < 2 || !self.instance.group[ self.instance.currIndex ].opts.slideShow ) {\r\n\t\t\t\tself.$button.hide();\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tset : function( force ) {\r\n\t\t\tvar self = this;\r\n\r\n\t\t\t// Check if reached last element\r\n\t\t\tif ( self.instance && self.instance.current && (force === true || self.instance.current.opts.loop || self.instance.currIndex < self.instance.group.length - 1 )) {\r\n\t\t\t\tself.timer = setTimeout(function() {\r\n\t\t\t\t\tif ( self.isActive ) {\r\n\t\t\t\t\t\tself.instance.jumpTo( (self.instance.currIndex + 1) % self.instance.group.length );\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}, self.instance.current.opts.slideShow.speed);\r\n\r\n\t\t\t} else {\r\n\t\t\t\tself.stop();\r\n\t\t\t\tself.instance.idleSecondsCounter = 0;\r\n\t\t\t\tself.instance.showControls();\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tclear : function() {\r\n\t\t\tvar self = this;\r\n\r\n\t\t\tclearTimeout( self.timer );\r\n\r\n\t\t\tself.timer = null;\r\n\t\t},\r\n\r\n\t\tstart : function() {\r\n\t\t\tvar self = this;\r\n\t\t\tvar current = self.instance.current;\r\n\r\n\t\t\tif ( current ) {\r\n\t\t\t\tself.isActive = true;\r\n\r\n\t\t\t\tself.$button\r\n\t\t\t\t\t.attr( 'title', current.opts.i18n[ current.opts.lang ].PLAY_STOP )\r\n\t\t\t\t\t.removeClass( 'fancybox-button--play' )\r\n\t\t\t\t\t.addClass( 'fancybox-button--pause' );\r\n\r\n\t\t\t\t\tself.set( true );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tstop : function() {\r\n\t\t\tvar self = this;\r\n\t\t\tvar current = self.instance.current;\r\n\r\n\t\t\tself.clear();\r\n\r\n\t\t\tself.$button\r\n\t\t\t\t.attr( 'title', current.opts.i18n[ current.opts.lang ].PLAY_START )\r\n\t\t\t\t.removeClass( 'fancybox-button--pause' )\r\n\t\t\t\t.addClass( 'fancybox-button--play' );\r\n\r\n\t\t\tself.isActive = false;\r\n\t\t},\r\n\r\n\t\ttoggle : function() {\r\n\t\t\tvar self = this;\r\n\r\n\t\t\tif ( self.isActive ) {\r\n\t\t\t\tself.stop();\r\n\r\n\t\t\t} else {\r\n\t\t\t\tself.start();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t});\r\n\r\n\t$(document).on({\r\n\t\t'onInit.fb' : function(e, instance) {\r\n\t\t\tif ( instance && !instance.SlideShow ) {\r\n\t\t\t\tinstance.SlideShow = new SlideShow( instance );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t'beforeShow.fb' : function(e, instance, current, firstRun) {\r\n\t\t\tvar SlideShow = instance && instance.SlideShow;\r\n\r\n\t\t\tif ( firstRun ) {\r\n\r\n\t\t\t\tif ( SlideShow && current.opts.slideShow.autoStart ) {\r\n\t\t\t\t\tSlideShow.start();\r\n\t\t\t\t}\r\n\r\n\t\t\t} else if ( SlideShow && SlideShow.isActive ) {\r\n\t\t\t\tSlideShow.clear();\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t'afterShow.fb' : function(e, instance, current) {\r\n\t\t\tvar SlideShow = instance && instance.SlideShow;\r\n\r\n\t\t\tif ( SlideShow && SlideShow.isActive ) {\r\n\t\t\t\tSlideShow.set();\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t'afterKeydown.fb' : function(e, instance, current, keypress, keycode) {\r\n\t\t\tvar SlideShow = instance && instance.SlideShow;\r\n\r\n\t\t\t// \"P\" or Spacebar\r\n\t\t\tif ( SlideShow && current.opts.slideShow && ( keycode === 80 || keycode === 32 ) && !$(document.activeElement).is( 'button,a,input' ) ) {\r\n\t\t\t\tkeypress.preventDefault();\r\n\r\n\t\t\t\tSlideShow.toggle();\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t'beforeClose.fb onDeactivate.fb' : function(e, instance) {\r\n\t\t\tvar SlideShow = instance && instance.SlideShow;\r\n\r\n\t\t\tif ( SlideShow ) {\r\n\t\t\t\tSlideShow.stop();\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\t// Page Visibility API to pause slideshow when window is not active\r\n\t$(document).on(\"visibilitychange\", function() {\r\n\t\tvar instance = $.fancybox.getInstance();\r\n\t\tvar SlideShow = instance && instance.SlideShow;\r\n\r\n\t\tif ( SlideShow && SlideShow.isActive ) {\r\n\t\t\tif ( document.hidden ) {\r\n\t\t\t\tSlideShow.clear();\r\n\r\n\t\t\t} else {\r\n\t\t\t\tSlideShow.set();\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n}( document, window.jQuery || jQuery ));\r\n\r\n// ==========================================================================\r\n//\r\n// FullScreen\r\n// Adds fullscreen functionality\r\n//\r\n// ==========================================================================\r\n;(function (document, $) {\r\n\t'use strict';\r\n\r\n\t// Collection of methods supported by user browser\r\n\tvar fn = (function () {\r\n\r\n\t\tvar fnMap = [\r\n\t\t\t[\r\n\t\t\t\t'requestFullscreen',\r\n\t\t\t\t'exitFullscreen',\r\n\t\t\t\t'fullscreenElement',\r\n\t\t\t\t'fullscreenEnabled',\r\n\t\t\t\t'fullscreenchange',\r\n\t\t\t\t'fullscreenerror'\r\n\t\t\t],\r\n\t\t\t// new WebKit\r\n\t\t\t[\r\n\t\t\t\t'webkitRequestFullscreen',\r\n\t\t\t\t'webkitExitFullscreen',\r\n\t\t\t\t'webkitFullscreenElement',\r\n\t\t\t\t'webkitFullscreenEnabled',\r\n\t\t\t\t'webkitfullscreenchange',\r\n\t\t\t\t'webkitfullscreenerror'\r\n\r\n\t\t\t],\r\n\t\t\t// old WebKit (Safari 5.1)\r\n\t\t\t[\r\n\t\t\t\t'webkitRequestFullScreen',\r\n\t\t\t\t'webkitCancelFullScreen',\r\n\t\t\t\t'webkitCurrentFullScreenElement',\r\n\t\t\t\t'webkitCancelFullScreen',\r\n\t\t\t\t'webkitfullscreenchange',\r\n\t\t\t\t'webkitfullscreenerror'\r\n\r\n\t\t\t],\r\n\t\t\t[\r\n\t\t\t\t'mozRequestFullScreen',\r\n\t\t\t\t'mozCancelFullScreen',\r\n\t\t\t\t'mozFullScreenElement',\r\n\t\t\t\t'mozFullScreenEnabled',\r\n\t\t\t\t'mozfullscreenchange',\r\n\t\t\t\t'mozfullscreenerror'\r\n\t\t\t],\r\n\t\t\t[\r\n\t\t\t\t'msRequestFullscreen',\r\n\t\t\t\t'msExitFullscreen',\r\n\t\t\t\t'msFullscreenElement',\r\n\t\t\t\t'msFullscreenEnabled',\r\n\t\t\t\t'MSFullscreenChange',\r\n\t\t\t\t'MSFullscreenError'\r\n\t\t\t]\r\n\t\t];\r\n\r\n\t\tvar val;\r\n\t\tvar ret = {};\r\n\t\tvar i, j;\r\n\r\n\t\tfor ( i = 0; i < fnMap.length; i++ ) {\r\n\t\t\tval = fnMap[ i ];\r\n\r\n\t\t\tif ( val && val[ 1 ] in document ) {\r\n\t\t\t\tfor ( j = 0; j < val.length; j++ ) {\r\n\t\t\t\t\tret[ fnMap[ 0 ][ j ] ] = val[ j ];\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn ret;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t})();\r\n\r\n\t// If browser does not have Full Screen API, then simply unset default button template and stop\r\n\tif ( !fn ) {\r\n\r\n\t\tif ( $ && $.fancybox ) {\r\n\t\t\t$.fancybox.defaults.btnTpl.fullScreen = false;\r\n\t\t}\r\n\r\n\t\treturn;\r\n\t}\r\n\r\n\tvar FullScreen = {\r\n\r\n\t\trequest : function ( elem ) {\r\n\r\n\t\t\telem = elem || document.documentElement;\r\n\r\n\t\t\telem[ fn.requestFullscreen ]( elem.ALLOW_KEYBOARD_INPUT );\r\n\r\n\t\t},\r\n\t\texit : function () {\r\n\r\n\t\t\tdocument[ fn.exitFullscreen ]();\r\n\r\n\t\t},\r\n\t\ttoggle : function ( elem ) {\r\n\r\n\t\t\telem = elem || document.documentElement;\r\n\r\n\t\t\tif ( this.isFullscreen() ) {\r\n\t\t\t\tthis.exit();\r\n\r\n\t\t\t} else {\r\n\t\t\t\tthis.request( elem );\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\tisFullscreen : function() {\r\n\r\n\t\t\treturn Boolean( document[ fn.fullscreenElement ] );\r\n\r\n\t\t},\r\n\t\tenabled : function() {\r\n\r\n\t\t\treturn Boolean( document[ fn.fullscreenEnabled ] );\r\n\r\n\t\t}\r\n\t};\r\n\r\n\t$.extend(true, $.fancybox.defaults, {\r\n\t\tbtnTpl : {\r\n\t\t\tfullScreen :\r\n\t\t\t\t''\r\n\t\t},\r\n\t\tfullScreen : {\r\n\t\t\tautoStart : false\r\n\t\t}\r\n\t});\r\n\r\n\t$(document).on({\r\n\t\t'onInit.fb' : function(e, instance) {\r\n\t\t\tvar $container;\r\n\r\n\t\t\tif ( instance && instance.group[ instance.currIndex ].opts.fullScreen ) {\r\n\t\t\t\t$container = instance.$refs.container;\r\n\r\n\t\t\t\t$container.on('click.fb-fullscreen', '[data-fancybox-fullscreen]', function(e) {\r\n\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\t\tFullScreen.toggle( $container[ 0 ] );\r\n\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif ( instance.opts.fullScreen && instance.opts.fullScreen.autoStart === true ) {\r\n\t\t\t\t\tFullScreen.request( $container[ 0 ] );\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Expose API\r\n\t\t\t\tinstance.FullScreen = FullScreen;\r\n\r\n\t\t\t} else if ( instance ) {\r\n\t\t\t\tinstance.$refs.toolbar.find('[data-fancybox-fullscreen]').hide();\r\n\t\t\t}\r\n\r\n\t\t},\r\n\r\n\t\t'afterKeydown.fb' : function(e, instance, current, keypress, keycode) {\r\n\r\n\t\t\t// \"P\" or Spacebar\r\n\t\t\tif ( instance && instance.FullScreen && keycode === 70 ) {\r\n\t\t\t\tkeypress.preventDefault();\r\n\r\n\t\t\t\tinstance.FullScreen.toggle( instance.$refs.container[ 0 ] );\r\n\t\t\t}\r\n\r\n\t\t},\r\n\r\n\t\t'beforeClose.fb' : function( instance ) {\r\n\t\t\tif ( instance && instance.FullScreen ) {\r\n\t\t\t\tFullScreen.exit();\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\t$(document).on(fn.fullscreenchange, function() {\r\n\t\tvar isFullscreen = FullScreen.isFullscreen(),\r\n\t\t\tinstance = $.fancybox.getInstance();\r\n\r\n\t\tif ( instance ) {\r\n\r\n\t\t\t// If image is zooming, then force to stop and reposition properly\r\n\t\t\tif ( instance.current && instance.current.type === 'image' && instance.isAnimating ) {\r\n\t\t\t\tinstance.current.$content.css( 'transition', 'none' );\r\n\r\n\t\t\t\tinstance.isAnimating = false;\r\n\r\n\t\t\t\tinstance.update( true, true, 0 );\r\n\t\t\t}\r\n\r\n\t\t\tinstance.trigger( 'onFullscreenChange', isFullscreen );\r\n\r\n\t\t\tinstance.$refs.container.toggleClass( 'fancybox-is-fullscreen', isFullscreen );\r\n\t\t}\r\n\r\n\t});\r\n\r\n}( document, window.jQuery || jQuery ));\r\n\r\n// ==========================================================================\r\n//\r\n// Thumbs\r\n// Displays thumbnails in a grid\r\n//\r\n// ==========================================================================\r\n;(function (document, $) {\r\n\t'use strict';\r\n\r\n\t// Make sure there are default values\r\n\t$.fancybox.defaults = $.extend(true, {\r\n\t\tbtnTpl : {\r\n\t\t\tthumbs :\r\n\t\t\t''\r\n\t\t},\r\n\t\tthumbs : {\r\n\t\t\tautoStart : false, // Display thumbnails on opening\r\n\t\t\thideOnClose : true, // Hide thumbnail grid when closing animation starts\r\n\t\t\tparentEl : '.fancybox-container', // Container is injected into this element\r\n\t\t\taxis : 'y' // Vertical (y) or horizontal (x) scrolling\r\n\t\t}\r\n\t}, $.fancybox.defaults);\r\n\r\n\tvar FancyThumbs = function( instance ) {\r\n\t\tthis.init( instance );\r\n\t};\r\n\r\n\t$.extend( FancyThumbs.prototype, {\r\n\r\n\t\t$button\t\t: null,\r\n\t\t$grid\t\t: null,\r\n\t\t$list\t\t: null,\r\n\t\tisVisible\t: false,\r\n\t\tisActive\t: false,\r\n\r\n\t\tinit : function( instance ) {\r\n\t\t\tvar self = this;\r\n\r\n\t\t\tself.instance = instance;\r\n\r\n\t\t\tinstance.Thumbs = self;\r\n\r\n\t\t\t// Enable thumbs if at least two group items have thumbnails\r\n\t\t\tvar first = instance.group[0],\r\n\t\t\t\tsecond = instance.group[1];\r\n\r\n\t\t\tself.opts = instance.group[ instance.currIndex ].opts.thumbs;\r\n\r\n\t\t\tself.$button = instance.$refs.toolbar.find( '[data-fancybox-thumbs]' );\r\n\r\n\t\t\tif ( self.opts && first && second && (\r\n\t\t \t\t( first.type == 'image' || first.opts.thumb || first.opts.$thumb ) &&\r\n\t\t \t\t( second.type == 'image' || second.opts.thumb || second.opts.$thumb )\r\n\t\t\t)) {\r\n\r\n\t\t\t\tself.$button.show().on('click', function() {\r\n\t\t\t\t\tself.toggle();\r\n\t\t\t\t});\r\n\r\n\t\t\t\tself.isActive = true;\r\n\r\n\t\t\t} else {\r\n\t\t\t\tself.$button.hide();\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tcreate : function() {\r\n\t\t\tvar self = this,\r\n\t\t\t\tinstance = self.instance,\r\n\t\t\t\tparentEl = self.opts.parentEl,\r\n\t\t\t\tlist,\r\n\t\t\t\tsrc;\r\n\r\n\t\t\tself.$grid = $('
').appendTo( instance.$refs.container.find( parentEl ).addBack().filter( parentEl ) );\r\n\r\n\t\t\t// Build list HTML\r\n\t\t\tlist = '
    ';\r\n\r\n\t\t\t$.each(instance.group, function( i, item ) {\r\n\t\t\t\tsrc = item.opts.thumb || ( item.opts.$thumb ? item.opts.$thumb.attr( 'src' ) : null );\r\n\r\n\t\t\t\tif ( !src && item.type === 'image' ) {\r\n\t\t\t\t\tsrc = item.src;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( src && src.length ) {\r\n\t\t\t\t\tlist += '
  • ';\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tlist += '
';\r\n\r\n\t\t\tself.$list = $( list ).appendTo( self.$grid ).on('click', 'li', function() {\r\n\t\t\t\tinstance.jumpTo( $(this).data('index') );\r\n\t\t\t});\r\n\r\n\t\t\tself.$list.find( 'img' ).hide().one('load', function() {\r\n\t\t\t\tvar $parent\t\t= $(this).parent().removeClass( 'fancybox-thumbs-loading' ),\r\n\t\t\t\t\tthumbWidth\t= $parent.outerWidth(),\r\n\t\t\t\t\tthumbHeight\t= $parent.outerHeight(),\r\n\t\t\t\t\twidth,\r\n\t\t\t\t\theight,\r\n\t\t\t\t\twidthRatio,\r\n\t\t\t\t\theightRatio;\r\n\r\n\t\t\t\twidth = this.naturalWidth\t|| this.width;\r\n\t\t\t\theight = this.naturalHeight\t|| this.height;\r\n\r\n\t\t\t\t// Calculate thumbnail dimensions; center vertically and horizontally\r\n\t\t\t\twidthRatio = width / thumbWidth;\r\n\t\t\t\theightRatio = height / thumbHeight;\r\n\r\n\t\t\t\tif (widthRatio >= 1 && heightRatio >= 1) {\r\n\t\t\t\t\tif (widthRatio > heightRatio) {\r\n\t\t\t\t\t\twidth = width / heightRatio;\r\n\t\t\t\t\t\theight = thumbHeight;\r\n\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\twidth = thumbWidth;\r\n\t\t\t\t\t\theight = height / widthRatio;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$(this).css({\r\n\t\t\t\t\twidth : Math.floor(width),\r\n\t\t\t\t\theight : Math.floor(height),\r\n\t\t\t\t\t'margin-top' : height > thumbHeight ? ( Math.floor(thumbHeight * 0.3 - height * 0.3 ) ) : Math.floor(thumbHeight * 0.5 - height * 0.5 ),\r\n\t\t\t\t\t'margin-left' : Math.floor(thumbWidth * 0.5 - width * 0.5 )\r\n\t\t\t\t}).show();\r\n\r\n\t\t\t})\r\n\t\t\t.each(function() {\r\n\t\t\t\tthis.src = $( this ).data( 'src' );\r\n\t\t\t});\r\n\r\n\t\t\tif ( self.opts.axis === 'x' ) {\r\n\t\t\t\tself.$list.width( parseInt( self.$grid.css(\"padding-right\") ) + ( instance.group.length * self.$list.children().eq(0).outerWidth(true) ) + 'px' );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tfocus : function( duration ) {\r\n\t\t\tvar self = this,\r\n\t\t\t\t$list = self.$list,\r\n\t\t\t\tthumb,\r\n\t\t\t\tthumbPos;\r\n\r\n\t\t\tif ( self.instance.current ) {\r\n\t\t\t\tthumb = $list.children()\r\n\t\t\t\t\t.removeClass( 'fancybox-thumbs-active' )\r\n\t\t\t\t\t.filter('[data-index=\"' + self.instance.current.index + '\"]')\r\n\t\t\t\t\t.addClass('fancybox-thumbs-active');\r\n\r\n\t\t\t\tthumbPos = thumb.position();\r\n\r\n\t\t\t\t// Check if need to scroll to make current thumb visible\r\n\t\t\t\tif ( self.opts.axis === 'y' && ( thumbPos.top < 0 || thumbPos.top > ( $list.height() - thumb.outerHeight() ) ) ) {\r\n\t\t\t\t\t$list.stop().animate({ 'scrollTop' : $list.scrollTop() + thumbPos.top }, duration);\r\n\r\n\t\t\t\t} else if ( self.opts.axis === 'x' && (\r\n\t\t\t\t\t\tthumbPos.left < $list.parent().scrollLeft() ||\r\n\t\t\t\t\t\tthumbPos.left > ( $list.parent().scrollLeft() + ( $list.parent().width() - thumb.outerWidth() ) )\r\n\t\t\t\t\t)\r\n\t\t\t\t) {\r\n\t\t\t\t\t$list.parent().stop().animate({ 'scrollLeft' : thumbPos.left }, duration);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tupdate : function() {\r\n\t\t\tthis.instance.$refs.container.toggleClass( 'fancybox-show-thumbs', this.isVisible );\r\n\r\n\t\t\tif ( this.isVisible ) {\r\n\t\t\t\tif ( !this.$grid ) {\r\n\t\t\t\t\tthis.create();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.instance.trigger( 'onThumbsShow' );\r\n\r\n\t\t\t\tthis.focus( 0 );\r\n\r\n\t\t\t} else if ( this.$grid ) {\r\n\t\t\t\tthis.instance.trigger( 'onThumbsHide' );\r\n\t\t\t}\r\n\r\n\t\t\t// Update content position\r\n\t\t\tthis.instance.update();\r\n\t\t},\r\n\r\n\t\thide : function() {\r\n\t\t\tthis.isVisible = false;\r\n\t\t\tthis.update();\r\n\t\t},\r\n\r\n\t\tshow : function() {\r\n\t\t\tthis.isVisible = true;\r\n\t\t\tthis.update();\r\n\t\t},\r\n\r\n\t\ttoggle : function() {\r\n\t\t\tthis.isVisible = !this.isVisible;\r\n\t\t\tthis.update();\r\n\t\t}\r\n\t});\r\n\r\n\t$(document).on({\r\n\r\n\t\t'onInit.fb' : function(e, instance) {\r\n\t\t\tvar Thumbs;\r\n\r\n\t\t\tif ( instance && !instance.Thumbs ) {\r\n\t\t\t\tThumbs = new FancyThumbs( instance );\r\n\r\n\t\t\t\tif ( Thumbs.isActive && Thumbs.opts.autoStart === true ) {\r\n\t\t\t\t\tThumbs.show();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t'beforeShow.fb' : function(e, instance, item, firstRun) {\r\n\t\t\tvar Thumbs = instance && instance.Thumbs;\r\n\r\n\t\t\tif ( Thumbs && Thumbs.isVisible ) {\r\n\t\t\t\tThumbs.focus( firstRun ? 0 : 250 );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t'afterKeydown.fb' : function(e, instance, current, keypress, keycode) {\r\n\t\t\tvar Thumbs = instance && instance.Thumbs;\r\n\r\n\t\t\t// \"G\"\r\n\t\t\tif ( Thumbs && Thumbs.isActive && keycode === 71 ) {\r\n\t\t\t\tkeypress.preventDefault();\r\n\r\n\t\t\t\tThumbs.toggle();\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t'beforeClose.fb' : function( e, instance ) {\r\n\t\t\tvar Thumbs = instance && instance.Thumbs;\r\n\r\n\t\t\tif ( Thumbs && Thumbs.isVisible && Thumbs.opts.hideOnClose !== false ) {\r\n\t\t\t\tThumbs.$grid.hide();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t});\r\n\r\n}(document, window.jQuery));\r\n\r\n//// ==========================================================================\r\n//\r\n// Share\r\n// Displays simple form for sharing current url\r\n//\r\n// ==========================================================================\r\n;(function (document, $) {\r\n\t'use strict';\r\n\r\n\t$.extend(true, $.fancybox.defaults, {\r\n\t\tbtnTpl : {\r\n\t\t\tshare :\r\n\t\t\t\t''\r\n\t\t},\r\n\t\tshare : {\r\n\t\t\ttpl :\r\n\t\t\t\t'
' +\r\n\t\t\t\t\t'

{{SHARE}}

' +\r\n\t\t\t\t\t'

' +\r\n\t\t\t\t\t\t'' +\r\n\t\t\t\t\t\t\t'' +\r\n\t\t\t\t\t\t\t'Facebook' +\r\n\t\t\t\t\t\t'' +\r\n\t\t\t\t\t\t'' +\r\n\t\t\t\t\t\t\t'' +\r\n\t\t\t\t\t\t\t'Pinterest' +\r\n\t\t\t\t\t\t'' +\r\n\t\t\t\t\t\t'' +\r\n\t\t\t\t\t\t\t'' +\r\n\t\t\t\t\t\t\t'Twitter' +\r\n\t\t\t\t\t\t'' +\r\n\t\t\t\t\t'

' +\r\n\t\t\t\t\t'

' +\r\n\t\t\t\t'
'\r\n\t\t}\r\n\t});\r\n\r\n\tfunction escapeHtml(string) {\r\n\t\tvar entityMap = {\r\n\t\t '&': '&',\r\n\t\t '<': '<',\r\n\t\t '>': '>',\r\n\t\t '\"': '"',\r\n\t\t \"'\": ''',\r\n\t\t '/': '/',\r\n\t\t '`': '`',\r\n\t\t '=': '='\r\n\t\t};\r\n\r\n\t\treturn String(string).replace(/[&<>\"'`=\\/]/g, function (s) {\r\n\t\t\treturn entityMap[s];\r\n\t\t});\r\n\t}\r\n\r\n\t$(document).on('click', '[data-fancybox-share]', function() {\r\n\t\tvar f = $.fancybox.getInstance(),\r\n\t\t\turl,\r\n\t\t\ttpl;\r\n\r\n\t\tif ( f ) {\r\n\t\t\turl = f.current.opts.hash === false ? f.current.src : window.location;\r\n\t\t\ttpl = f.current.opts.share.tpl\r\n\t\t\t\t\t.replace( /\\{\\{media\\}\\}/g, f.current.type === 'image' ? encodeURIComponent( f.current.src ) : '' )\r\n\t\t\t\t\t.replace( /\\{\\{url\\}\\}/g, encodeURIComponent( url ) )\r\n\t\t\t\t\t.replace( /\\{\\{url_raw\\}\\}/g, escapeHtml( url ) )\r\n\t\t\t\t\t.replace( /\\{\\{descr\\}\\}/g, f.$caption ? encodeURIComponent( f.$caption.text() ) : '' );\r\n\r\n\t\t\t$.fancybox.open({\r\n\t\t\t\tsrc : f.translate( f, tpl ),\r\n\t\t\t\ttype : 'html',\r\n\t\t\t\topts : {\r\n\t\t\t\t\tanimationEffect : \"fade\",\r\n\t\t\t\t\tanimationDuration : 250,\r\n\t\t\t\t\tafterLoad : function(instance, current) {\r\n\t\t\t\t\t\t// Opening links in a popup window\r\n\t\t\t\t\t\tcurrent.$content.find('.fancybox-share__links a').click(function() {\r\n\t\t\t\t\t window.open(this.href, \"Share\", \"width=550, height=450\");\r\n\t\t\t\t\t return false;\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t});\r\n\r\n}( document, window.jQuery || jQuery ));\r\n\r\n// ==========================================================================\r\n//\r\n// Hash\r\n// Enables linking to each modal\r\n//\r\n// ==========================================================================\r\n;(function (document, window, $) {\r\n\t'use strict';\r\n\r\n\t// Simple $.escapeSelector polyfill (for jQuery prior v3)\r\n\tif ( !$.escapeSelector ) {\r\n\t\t$.escapeSelector = function( sel ) {\r\n\t\t\tvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\r\n\t\t\tvar fcssescape = function( ch, asCodePoint ) {\r\n\t\t\t\tif ( asCodePoint ) {\r\n\t\t\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\r\n\t\t\t\t\tif ( ch === \"\\0\" ) {\r\n\t\t\t\t\t\treturn \"\\uFFFD\";\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\r\n\t\t\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Other potentially-special ASCII characters get backslash-escaped\r\n\t\t\t\treturn \"\\\\\" + ch;\r\n\t\t\t};\r\n\r\n\t\t\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\r\n\t\t};\r\n\t}\r\n\r\n\t// Create new history entry only once\r\n\tvar shouldCreateHistory = true;\r\n\r\n\t// Variable containing last hash value set by fancyBox\r\n\t// It will be used to determine if fancyBox needs to close after hash change is detected\r\n var currentHash = null;\r\n\r\n\t// Throttling the history change\r\n\tvar timerID = null;\r\n\r\n\t// Get info about gallery name and current index from url\r\n function parseUrl() {\r\n var hash = window.location.hash.substr( 1 );\r\n var rez = hash.split( '-' );\r\n var index = rez.length > 1 && /^\\+?\\d+$/.test( rez[ rez.length - 1 ] ) ? parseInt( rez.pop( -1 ), 10 ) || 1 : 1;\r\n var gallery = rez.join( '-' );\r\n\r\n\t\t// Index is starting from 1\r\n\t\tif ( index < 1 ) {\r\n\t\t\tindex = 1;\r\n\t\t}\r\n\r\n return {\r\n hash : hash,\r\n index : index,\r\n gallery : gallery\r\n };\r\n }\r\n\r\n\t// Trigger click evnt on links to open new fancyBox instance\r\n\tfunction triggerFromUrl( url ) {\r\n\t\tvar $el;\r\n\r\n if ( url.gallery !== '' ) {\r\n\r\n\t\t\t// If we can find element matching 'data-fancybox' atribute, then trigger click event for that ..\r\n\t\t\t$el = $( \"[data-fancybox='\" + $.escapeSelector( url.gallery ) + \"']\" ).eq( url.index - 1 );\r\n\r\n if ( !$el.length ) {\r\n\t\t\t\t// .. if not, try finding element by ID\r\n\t\t\t\t$el = $( \"#\" + $.escapeSelector( url.gallery ) + \"\" );\r\n\t\t\t}\r\n\r\n\t\t\tif ( $el.length ) {\r\n\t\t\t\tshouldCreateHistory = false;\r\n\r\n\t\t\t\t$el.trigger( 'click' );\r\n\t\t\t}\r\n\r\n }\r\n\t}\r\n\r\n\t// Get gallery name from current instance\r\n\tfunction getGalleryID( instance ) {\r\n\t\tvar opts;\r\n\r\n\t\tif ( !instance ) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\topts = instance.current ? instance.current.opts : instance.opts;\r\n\r\n\t\treturn opts.hash || ( opts.$orig ? opts.$orig.data( 'fancybox' ) : '' );\r\n\t}\r\n\r\n\t// Start when DOM becomes ready\r\n $(function() {\r\n\r\n\t\t// Check if user has disabled this module\r\n\t\tif ( $.fancybox.defaults.hash === false ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Update hash when opening/closing fancyBox\r\n\t $(document).on({\r\n\t\t\t'onInit.fb' : function( e, instance ) {\r\n\t\t\t\tvar url, gallery;\r\n\r\n\t\t\t\tif ( instance.group[ instance.currIndex ].opts.hash === false ) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\turl = parseUrl();\r\n\t\t\t\tgallery = getGalleryID( instance );\r\n\r\n\t\t\t\t// Make sure gallery start index matches index from hash\r\n\t\t\t\tif ( gallery && url.gallery && gallery == url.gallery ) {\r\n\t\t\t\t\tinstance.currIndex = url.index - 1;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t'beforeShow.fb' : function( e, instance, current ) {\r\n\t\t\t\tvar gallery;\r\n\r\n\t\t\t\tif ( !current || current.opts.hash === false ) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t gallery = getGalleryID( instance );\r\n\r\n\t // Update window hash\r\n\t if ( gallery && gallery !== '' ) {\r\n\r\n\t\t\t\t\tif ( window.location.hash.indexOf( gallery ) < 0 ) {\r\n\t\t instance.opts.origHash = window.location.hash;\r\n\t\t }\r\n\r\n\t\t\t\t\tcurrentHash = gallery + ( instance.group.length > 1 ? '-' + ( current.index + 1 ) : '' );\r\n\r\n\t\t\t\t\tif ( 'replaceState' in window.history ) {\r\n\t\t\t\t\t\tif ( timerID ) {\r\n\t\t\t\t\t\t\tclearTimeout( timerID );\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\ttimerID = setTimeout(function() {\r\n\t\t\t\t\t\t\twindow.history[ shouldCreateHistory ? 'pushState' : 'replaceState' ]( {} , document.title, window.location.pathname + window.location.search + '#' + currentHash );\r\n\r\n\t\t\t\t\t\t\ttimerID = null;\r\n\r\n\t\t\t\t\t\t\tshouldCreateHistory = false;\r\n\r\n\t\t\t\t\t\t}, 300);\r\n\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\twindow.location.hash = currentHash;\r\n\t\t\t\t\t}\r\n\r\n\t }\r\n\r\n\t },\r\n\r\n\t\t\t'beforeClose.fb' : function( e, instance, current ) {\r\n\t\t\t\tvar gallery, origHash;\r\n\r\n\t\t\t\tif ( timerID ) {\r\n\t\t\t\t\tclearTimeout( timerID );\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( current.opts.hash === false ) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tgallery = getGalleryID( instance );\r\n\t\t\t\torigHash = instance && instance.opts.origHash ? instance.opts.origHash : '';\r\n\r\n\t // Remove hash from location bar\r\n\t if ( gallery && gallery !== '' ) {\r\n\r\n\t if ( 'replaceState' in history ) {\r\n\t\t\t\t\t\twindow.history.replaceState( {} , document.title, window.location.pathname + window.location.search + origHash );\r\n\r\n\t } else {\r\n\t\t\t\t\t\twindow.location.hash = origHash;\r\n\r\n\t\t\t\t\t\t// Keep original scroll position\r\n\t\t\t\t\t\t$( window ).scrollTop( instance.scrollTop ).scrollLeft( instance.scrollLeft );\r\n\t }\r\n\t }\r\n\r\n\t\t\t\tcurrentHash = null;\r\n\t }\r\n\t });\r\n\r\n\t\t// Check if need to close after url has changed\r\n\t\t$(window).on('hashchange.fb', function() {\r\n\t\t\tvar url = parseUrl();\r\n\r\n\t\t\tif ( $.fancybox.getInstance() ) {\r\n\t\t\t\tif ( currentHash && currentHash !== url.gallery + '-' + url.index && !( url.index === 1 && currentHash == url.gallery ) ) {\r\n\t\t\t\t\tcurrentHash = null;\r\n\r\n\t\t\t\t\t$.fancybox.close();\r\n\t\t\t\t}\r\n\r\n\t\t\t} else if ( url.gallery !== '' ) {\r\n\t\t\t\ttriggerFromUrl( url );\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// Check current hash and trigger click event on matching element to start fancyBox, if needed\r\n\t\tsetTimeout(function() {\r\n\t\t\ttriggerFromUrl( parseUrl() );\r\n\t\t}, 50);\r\n });\r\n\r\n}( document, window, window.jQuery || jQuery ));\r\n\r\n;(function (document, $) {\r\n\t'use strict';\r\n\r\n\tvar prevTime = new Date().getTime();\r\n\r\n $(document).on({\r\n 'onInit.fb' : function( e, instance, current ) {\r\n\t\t\tinstance.$refs.stage.on('mousewheel DOMMouseScroll wheel MozMousePixelScroll', function(e) {\r\n\t\t\t\tvar current = instance.current,\r\n\t\t\t\t\tcurrTime = new Date().getTime();\r\n\r\n\t\t\t\tif ( instance.group.length < 1 || current.opts.wheel === false || ( current.opts.wheel === 'auto' && current.type !== 'image' ) ) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\te.stopPropagation();\r\n\r\n\t\t\t\tif ( current.$slide.hasClass( 'fancybox-animated' ) ) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\te = e.originalEvent || e;\r\n\r\n\t\t\t\tif ( currTime - prevTime < 250 ) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tprevTime = currTime;\r\n\r\n\t\t\t\tinstance[ ( -e.deltaY || -e.deltaX || e.wheelDelta || -e.detail ) < 0 ? 'next' : 'previous' ]();\r\n\r\n\t\t\t});\r\n\t\t}\r\n });\r\n\r\n}( document, window.jQuery || jQuery ));\r\n\n\n/***/ }),\n\n/***/ \"HH+/\":\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(\"oN+n\")(__webpack_require__(\"q/mW\"))\n\n/***/ }),\n\n/***/ \"J9kM\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = init;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery__ = __webpack_require__(\"0iPh\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_jquery__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__blocks_last_comments_lastcomments__ = __webpack_require__(\"mvuq\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__core_utils_globals__ = __webpack_require__(\"TxBK\");\n\n\n\n\nfunction init() {\n __WEBPACK_IMPORTED_MODULE_1__blocks_last_comments_lastcomments__[\"a\" /* init */]({\n heightTarget: '#blogContent',\n commentsType: 'blog'\n });\n\n var toggleFilterClear = function toggleFilterClear() {\n var filtered = __WEBPACK_IMPORTED_MODULE_0_jquery___default()('#sortSelect').val() !== 'add_date' || __WEBPACK_IMPORTED_MODULE_0_jquery___default()('#shopSearch').val() || __WEBPACK_IMPORTED_MODULE_0_jquery___default()('.category-filter-item:checked').length > 0;\n\n if (filtered) {\n __WEBPACK_IMPORTED_MODULE_0_jquery___default()('.filter-clear-wrapper').show();\n } else {\n __WEBPACK_IMPORTED_MODULE_0_jquery___default()('.filter-clear-wrapper').hide();\n }\n };\n\n __WEBPACK_IMPORTED_MODULE_0_jquery___default()('#sortSelect').change(function (e) {\n __WEBPACK_IMPORTED_MODULE_0_jquery___default.a.cookie('blog_sort_by', __WEBPACK_IMPORTED_MODULE_0_jquery___default()(this).val(), { expires: 365, path: '/' });\n\n toggleFilterClear();\n __WEBPACK_IMPORTED_MODULE_0_jquery___default()(document).trigger('reloadSales');\n });\n __WEBPACK_IMPORTED_MODULE_0_jquery___default()('#filterSelect').change(function (e) {\n __WEBPACK_IMPORTED_MODULE_0_jquery___default.a.cookie('blog_date_filter', __WEBPACK_IMPORTED_MODULE_0_jquery___default()(this).val(), { expires: 365, path: '/' });\n\n toggleFilterClear();\n __WEBPACK_IMPORTED_MODULE_0_jquery___default()(document).trigger('reloadSales');\n });\n\n __WEBPACK_IMPORTED_MODULE_0_jquery___default()('#shopSearch').on('keyup paste', function (e) {\n toggleFilterClear();\n __WEBPACK_IMPORTED_MODULE_0_jquery___default()(document).trigger('reloadSales');\n });\n\n __WEBPACK_IMPORTED_MODULE_0_jquery___default()('.category-filter-item-wrapper').click(function (e) {\n e.preventDefault();\n var $this = __WEBPACK_IMPORTED_MODULE_0_jquery___default()(this);\n var $checkBox = $this.find('.category-filter-item');\n\n var category = $checkBox.data('slug');\n var checked = !$this.hasClass('current-cat');\n\n var blogType = Object(__WEBPACK_IMPORTED_MODULE_2__core_utils_globals__[\"a\" /* globals */])('blogType');\n if (blogType != 'sale_new') {\n // just go to new location\n if (checked) {\n var blogUrl = Object(__WEBPACK_IMPORTED_MODULE_2__core_utils_globals__[\"a\" /* globals */])('blogUrl');\n location.href = blogUrl + '/category/' + category;\n }\n return;\n }\n\n var categories = __WEBPACK_IMPORTED_MODULE_0_jquery___default.a.cookie('blog_categories_filter');\n\n $checkBox.prop('checked', checked);\n $this.toggleClass('current-cat', checked);\n\n if (categories === undefined) {\n categories = [];\n } else {\n categories = categories.split(',');\n }\n\n var arrIndex = categories.indexOf(category);\n if (checked && arrIndex === -1) {\n categories.push(category);\n } else if (!checked && arrIndex !== -1) {\n categories.splice(arrIndex, 1);\n }\n\n __WEBPACK_IMPORTED_MODULE_0_jquery___default.a.cookie('blog_categories_filter', categories.join(','), { path: '/' });\n\n toggleFilterClear();\n __WEBPACK_IMPORTED_MODULE_0_jquery___default()(document).trigger('reloadSales');\n });\n\n __WEBPACK_IMPORTED_MODULE_0_jquery___default()('.filter-clear').click(function (e) {\n e.preventDefault();\n\n //Clear cookies\n __WEBPACK_IMPORTED_MODULE_0_jquery___default.a.removeCookie('blog_sort_by', { path: '/' });\n __WEBPACK_IMPORTED_MODULE_0_jquery___default.a.removeCookie('blog_categories_filter', { path: '/' });\n\n var blogType = Object(__WEBPACK_IMPORTED_MODULE_2__core_utils_globals__[\"a\" /* globals */])('blogType');\n if (blogType === 'sale_new') {\n //Clear elements\n __WEBPACK_IMPORTED_MODULE_0_jquery___default()('#sortSelect').val('add_date').trigger('chosen:updated');\n __WEBPACK_IMPORTED_MODULE_0_jquery___default()('#shopSearch').val('');\n __WEBPACK_IMPORTED_MODULE_0_jquery___default()('.category-filter-item').prop('checked', false);\n __WEBPACK_IMPORTED_MODULE_0_jquery___default()('.category-filter-item-wrapper').toggleClass('current-cat', false);\n\n __WEBPACK_IMPORTED_MODULE_0_jquery___default()('.filter-clear-wrapper').hide();\n __WEBPACK_IMPORTED_MODULE_0_jquery___default()(document).trigger('reloadSales');\n } else {\n window.location = '/articles';\n }\n });\n}\n\n/***/ }),\n\n/***/ \"Jkdx\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony export (immutable) */ __webpack_exports__[\"init\"] = init;\n/* harmony export (immutable) */ __webpack_exports__[\"categoriesCrop\"] = categoriesCrop;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__sidebar__ = __webpack_require__(\"J9kM\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__pagecomments__ = __webpack_require__(\"NdAU\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__common_model_salemodel__ = __webpack_require__(\"ZLxd\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__common_adminpanel__ = __webpack_require__(\"lNzi\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_lib_adaptivefontsize__ = __webpack_require__(\"9Aqb\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_lib_adaptivefontsize___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_lib_adaptivefontsize__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__core_utils_logger__ = __webpack_require__(\"5wqq\");\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\n\n\n\n\n\n\nvar logger = Object(__WEBPACK_IMPORTED_MODULE_5__core_utils_logger__[\"a\" /* newLogger */])('Sale page');\n\nfunction init(options) {\n\tvar o = _extends({\n\t\tpage: {},\n\t\tcomments: []\n\t}, options);\n\n\tlogger.log('init', o);\n\n\tinitPage(o.page);\n\t__WEBPACK_IMPORTED_MODULE_1__pagecomments__[\"a\" /* init */]({ page: o.page, comments: o.comments });\n\tsetTimeout(__WEBPACK_IMPORTED_MODULE_0__sidebar__[\"a\" /* init */]);\n\tcategoriesCrop($('#saleWrapper .sale-cats'));\n\tsetTimeout(initFontScale);\n\n\tObject(__WEBPACK_IMPORTED_MODULE_3__common_adminpanel__[\"a\" /* initSaleAdminPanel */])('#wrapAdminPanel');\n}\n\nfunction initPage(page) {\n\tvar model = new SalePage(page);\n\tko.applyBindings(model, $(\"#page_content\")[0]);\n}\n\nfunction initFontScale() {\n\t$('#saleWrapper').find('.sale-name-inner').adaptiveFontSize({\n\t\tdone: function done(el) {\n\t\t\t$(el).parent().css('opacity', 1);\n\t\t}\n\t});\n}\n\nvar SalePage = function (_SaleModel) {\n\t_inherits(SalePage, _SaleModel);\n\n\tfunction SalePage(item) {\n\t\t_classCallCheck(this, SalePage);\n\n\t\tvar _this = _possibleConstructorReturn(this, (SalePage.__proto__ || Object.getPrototypeOf(SalePage)).call(this, item));\n\n\t\t$(document).on('reloadSales', function () {\n\t\t\tlocation.href = '/sale';\n\t\t});\n\t\treturn _this;\n\t}\n\n\treturn SalePage;\n}(__WEBPACK_IMPORTED_MODULE_2__common_model_salemodel__[\"a\" /* SaleModel */]);\n\nfunction categoriesCrop($container) {\n\tvar $list = $container.find('.cats-list');\n\twhile ($container.innerWidth() < $list.innerWidth()) {\n\t\t$list.find('li').last().remove();\n\t}\n\t$container.css('opacity', '1');\n}\n\n/***/ }),\n\n/***/ \"NKwv\":\n/***/ (function(module, exports) {\n\nfunction select(element) {\n var selectedText;\n\n if (element.nodeName === 'SELECT') {\n element.focus();\n\n selectedText = element.value;\n }\n else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\n var isReadOnly = element.hasAttribute('readonly');\n\n if (!isReadOnly) {\n element.setAttribute('readonly', '');\n }\n\n element.select();\n element.setSelectionRange(0, element.value.length);\n\n if (!isReadOnly) {\n element.removeAttribute('readonly');\n }\n\n selectedText = element.value;\n }\n else {\n if (element.hasAttribute('contenteditable')) {\n element.focus();\n }\n\n var selection = window.getSelection();\n var range = document.createRange();\n\n range.selectNodeContents(element);\n selection.removeAllRanges();\n selection.addRange(range);\n\n selectedText = selection.toString();\n }\n\n return selectedText;\n}\n\nmodule.exports = select;\n\n\n/***/ }),\n\n/***/ \"NdAU\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = init;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__newcomment__ = __webpack_require__(\"QWJR\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__pagecomments__ = __webpack_require__(\"Oqlb\");\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n\n\n\nfunction init(options) {\n var o = _extends({\n page: {},\n comments: []\n }, options);\n\n var commentsModel = __WEBPACK_IMPORTED_MODULE_1__pagecomments__[\"a\" /* init */](o.comments);\n __WEBPACK_IMPORTED_MODULE_0__newcomment__[\"a\" /* init */](o.page, commentsModel);\n}\n\n/***/ }),\n\n/***/ \"Oqlb\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = init;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery__ = __webpack_require__(\"0iPh\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_jquery__);\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n/**\n *\n * @param {Array} comments\n * @return {PageCommentsViewModel}\n */\nfunction init(comments) {\n var model = new PageCommentsViewModel(comments);\n\n ko.applyBindings(model, __WEBPACK_IMPORTED_MODULE_0_jquery___default()('#page_comments_wrapper')[0]);\n model.postInit();\n\n return model;\n}\n\nvar PageCommentsViewModel = function () {\n function PageCommentsViewModel(comments) {\n var _this = this;\n\n _classCallCheck(this, PageCommentsViewModel);\n\n this._$wrapper = __WEBPACK_IMPORTED_MODULE_0_jquery___default()('#page_comments_wrapper');\n this._scroll = null;\n this.comments = null;\n\n this.comments = new ko.observableArray(comments);\n this._scroll = this._$wrapper.zInfiniteScroll({\n selector: '.comment',\n checkViewport: false,\n enabled: true,\n autoStart: false,\n maxAutoloadPages: 100,\n loading: '#page_comments_scroll_loader',\n fetch: function fetch(page, callback) {\n __WEBPACK_IMPORTED_MODULE_0_jquery___default.a.get(_this._$wrapper.data('load-url'), {\n page: page,\n blog_page_id: _this._$wrapper.data('page-id'),\n raw: 1\n }, function (response) {\n callback(response.comments);\n }, 'json');\n },\n show: function show(items) {\n for (var i = 0; i < items.length; i++) {\n _this.comments.push(items[i]);\n }\n\n return items.length;\n }\n });\n }\n\n _createClass(PageCommentsViewModel, [{\n key: 'afterRender',\n value: function afterRender(elements, data) {\n __WEBPACK_IMPORTED_MODULE_0_jquery___default()(elements).find('.comment-text-container').urlconverter(30);\n __WEBPACK_IMPORTED_MODULE_0_jquery___default()(document).trigger('heightTargetUpdated');\n }\n }, {\n key: 'postInit',\n value: function postInit() {\n this._scroll.on();\n }\n }]);\n\n return PageCommentsViewModel;\n}();\n\n/***/ }),\n\n/***/ \"PtfZ\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar is = __webpack_require__(\"/Q8n\");\nvar delegate = __webpack_require__(\"wYtf\");\n\n/**\n * Validates all params and calls the right\n * listener function based on its target type.\n *\n * @param {String|HTMLElement|HTMLCollection|NodeList} target\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listen(target, type, callback) {\n if (!target && !type && !callback) {\n throw new Error('Missing required arguments');\n }\n\n if (!is.string(type)) {\n throw new TypeError('Second argument must be a String');\n }\n\n if (!is.fn(callback)) {\n throw new TypeError('Third argument must be a Function');\n }\n\n if (is.node(target)) {\n return listenNode(target, type, callback);\n }\n else if (is.nodeList(target)) {\n return listenNodeList(target, type, callback);\n }\n else if (is.string(target)) {\n return listenSelector(target, type, callback);\n }\n else {\n throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');\n }\n}\n\n/**\n * Adds an event listener to a HTML element\n * and returns a remove listener function.\n *\n * @param {HTMLElement} node\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNode(node, type, callback) {\n node.addEventListener(type, callback);\n\n return {\n destroy: function() {\n node.removeEventListener(type, callback);\n }\n }\n}\n\n/**\n * Add an event listener to a list of HTML elements\n * and returns a remove listener function.\n *\n * @param {NodeList|HTMLCollection} nodeList\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNodeList(nodeList, type, callback) {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.addEventListener(type, callback);\n });\n\n return {\n destroy: function() {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.removeEventListener(type, callback);\n });\n }\n }\n}\n\n/**\n * Add an event listener to a selector\n * and returns a remove listener function.\n *\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenSelector(selector, type, callback) {\n return delegate(document.body, selector, type, callback);\n}\n\nmodule.exports = listen;\n\n\n/***/ }),\n\n/***/ \"Q4Fy\":\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ \"QWJR\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = init;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery__ = __webpack_require__(\"0iPh\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_jquery__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_lib_knockout__ = __webpack_require__(\"7fPx\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_lib_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_lib_knockout__);\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\n/**\n *\n * @param {object} page\n * @param {PageCommentsViewModel} commentsModel\n * @return {newComment}\n */\nfunction init(page, commentsModel) {\n var model = new newComment(page.page_id, commentsModel);\n __WEBPACK_IMPORTED_MODULE_1_lib_knockout___default.a.applyBindings(model, __WEBPACK_IMPORTED_MODULE_0_jquery___default()('#comment_add_wrap')[0]);\n return model;\n}\n\nvar newComment = function () {\n function newComment(pageId, commentsModel) {\n var _this = this;\n\n _classCallCheck(this, newComment);\n\n this.pageId = null;\n this.commentsModel = null;\n this.text = __WEBPACK_IMPORTED_MODULE_1_lib_knockout___default.a.observable('');\n this.progress = __WEBPACK_IMPORTED_MODULE_1_lib_knockout___default.a.observable(false);\n this.valid = __WEBPACK_IMPORTED_MODULE_1_lib_knockout___default.a.computed(function () {\n return _this.text().replace(' ', '').length > 0 && !_this.progress();\n });\n\n this.pageId = pageId;\n this.commentsModel = commentsModel;\n }\n\n _createClass(newComment, [{\n key: 'save',\n value: function save(model, event) {\n var _this2 = this;\n\n var userId = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n if (USER_ID || userId) {\n this.progress(true);\n\n var data = {\n comments_page_id: this.pageId,\n comments_content: this.text()\n };\n if (this.commentsModel.comments().length > 0) {\n data.after_date = this.commentsModel.comments()[0].comments_date;\n }\n __WEBPACK_IMPORTED_MODULE_0_jquery___default.a.post(site_url('blog/comments_save'), data, function (response) {\n if (response.success) {\n _this2.text('');\n for (var i = response.comments.length - 1; i >= 0; i--) {\n _this2.commentsModel.comments.unshift(response.comments[i]);\n }\n } else if (response.message !== undefined) {\n zde.notifier.error(response.message);\n }\n _this2.progress(false);\n }, 'json');\n } else {\n zde.showLogin(function (data) {\n if (data) {\n _this2.save(model, event, data.id);\n return;\n }\n });\n }\n }\n }]);\n\n return newComment;\n}();\n\n/***/ }),\n\n/***/ \"TQCA\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__vendor_cookie_jquery_cookie__ = __webpack_require__(\"TvIv\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__vendor_cookie_jquery_cookie___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__vendor_cookie_jquery_cookie__);\n\n\n/***/ }),\n\n/***/ \"TvIv\":\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(\"oN+n\")(__webpack_require__(\"i4G7\"))\n\n/***/ }),\n\n/***/ \"TxBK\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = globals;\n/* harmony export (immutable) */ __webpack_exports__[\"b\"] = phrases;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__var__ = __webpack_require__(\"dTkA\");\n\n\nvar _globals = {};\nvar _phrases = {};\n\n/**\n * Returns Globals object\n * @param {string|null} key Optional key to return\n * @param {*} defaultValue Default value for key\n * @return {object|*} Globals object if no key is provided, otherwise associated value\n */\nfunction globals() {\n var key = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n var g = window.globals || _globals;\n return key !== null ? Object(__WEBPACK_IMPORTED_MODULE_0__var__[\"e\" /* element */])(g, key, defaultValue) : g;\n}\n\n/**\n * Returns global Phrases object\n * @param {string|null} key Optional key to return\n * @param {*} defaultValue Default value for key\n * @return {object} Phrases object if no key is provided, otherwise associated value\n */\nfunction phrases() {\n var key = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n var g = globals('phrases') || _phrases;\n return key !== null ? Object(__WEBPACK_IMPORTED_MODULE_0__var__[\"e\" /* element */])(g, key, defaultValue) : g;\n}\n\n/***/ }),\n\n/***/ \"WO3R\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony export (immutable) */ __webpack_exports__[\"init\"] = init;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__sidebar_index__ = __webpack_require__(\"J9kM\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__common_model_salemodel__ = __webpack_require__(\"ZLxd\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__common_adminpanel__ = __webpack_require__(\"lNzi\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_lib_adaptivefontsize__ = __webpack_require__(\"9Aqb\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_lib_adaptivefontsize___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_lib_adaptivefontsize__);\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\n\n\n/**\r\n *\r\n * @param {object} options\r\n */\nfunction init(options) {\n var o = _extends({\n pages: []\n }, options);\n\n __WEBPACK_IMPORTED_MODULE_0__sidebar_index__[\"a\" /* init */]({\n heightTarget: '#salesWrapper'\n });\n\n initCustomSelect();\n initList(o.pages);\n Object(__WEBPACK_IMPORTED_MODULE_2__common_adminpanel__[\"b\" /* initSaleAdminPanelForList */])('#salesWrapper', '.admin-area');\n}\n\nfunction initCustomSelect() {\n $('.sort-wrapper').find('select[rel=chosen]').chosen();\n}\n\nfunction initList(pages) {\n var model = new ListViewModel(pages, function (element) {\n $(element).find('.sale-name-inner').adaptiveFontSize({\n done: function done(el) {\n $(el).parent().css('opacity', 1);\n }\n });\n setTimeout(function () {\n // update last comments in sidebar\n $(document).trigger('heightTargetUpdated');\n });\n });\n\n ko.applyBindings(model, $('#salesWrapper')[0]);\n model.postInit();\n\n return model;\n}\n\nvar ListViewModel = function () {\n\n /**\r\n *\r\n * @param {object[]} pages\r\n * @param {function} itemsLoadedCallback Called for each rendered item, accepts DOM Element as parameter\r\n */\n function ListViewModel(pages) {\n var _this = this;\n\n var itemsLoadedCallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n _classCallCheck(this, ListViewModel);\n\n this._$wrapper = $('.sales-wrapper');\n this._itemsLoadedCallback = null;\n this._scroll = null;\n this.pages = new ko.observableArray();\n\n this.afterRender = function (element, data) {\n if ($.isFunction(_this._itemsLoadedCallback)) {\n var $item = $(element).filter('.sale-item');\n setTimeout(function () {\n _this._itemsLoadedCallback($item[0]);\n });\n }\n };\n\n var SEEN_ARRAY_KEY = 'blog_sale_seen';\n var SEEN_ARRAY_MAX_LENGTH = 200;\n\n var seenArray = null;\n\n var readSeenArray = function readSeenArray() {\n var valueStored = localStorage.getItem(SEEN_ARRAY_KEY);\n try {\n seenArray = valueStored !== null ? JSON.parse(valueStored) : [];\n } catch (e) {\n seenArray = [];\n }\n };\n\n var writeSeenArray = function writeSeenArray() {\n if (seenArray.length > SEEN_ARRAY_MAX_LENGTH) {\n seenArray = seenArray.slice(0, SEEN_ARRAY_MAX_LENGTH);\n }\n localStorage.setItem(SEEN_ARRAY_KEY, JSON.stringify(seenArray));\n };\n\n this._itemsLoadedCallback = itemsLoadedCallback;\n\n readSeenArray();\n pages.forEach(function (item) {\n _this.pages.push(new SaleItem(item, seenArray));\n });\n writeSeenArray();\n\n this._scroll = this._$wrapper.zInfiniteScroll({\n selector: '.sale-item',\n checkViewport: false,\n enabled: true,\n autoStart: false,\n maxAutoloadPages: 100,\n getCurrentCount: function getCurrentCount() {\n return _this.pages().length;\n },\n totalCount: this._$wrapper.data('count'),\n countPerPage: this._$wrapper.data('count-per-page'),\n loading: '#pagesScrollLoader',\n fetch: function fetch(page, callback) {\n $.get(_this._$wrapper.data('load-url'), {\n page: page,\n type: _this._$wrapper.data('blog-type'),\n category: $('.category-filter-item:checked').map(function () {\n return $(this).data('slug');\n }).get().join(','),\n blog_sort_by: $('#sortSelect').val(),\n blog_shop_filter: $('#shopSearch').val(),\n blog_date_filter: $('#filterSelect').val()\n }, function (response) {\n if (response.archiveCount !== undefined) {\n $('#archiveButtonCounter').text(response.archiveCount);\n }\n callback(response.pages);\n }, 'json');\n },\n clear: function clear() {\n _this.pages.removeAll();\n },\n show: function show(items) {\n readSeenArray();\n items.forEach(function (item) {\n _this.pages.push(new SaleItem(item, seenArray));\n });\n writeSeenArray();\n return items.length;\n },\n finished: function finished() {\n $('#archiveButton').css('display', 'inline-block');\n }\n });\n\n $(document).on('reloadSales', function () {\n $('#archiveButton').hide();\n _this._scroll.reload();\n });\n }\n\n /**\r\n *\r\n * @param {Element} element\r\n * @param {SaleItem} data\r\n */\n\n\n _createClass(ListViewModel, [{\n key: \"postInit\",\n value: function postInit() {\n this._scroll.on();\n }\n }]);\n\n return ListViewModel;\n}();\n\nvar SaleItem = function (_SaleModel) {\n _inherits(SaleItem, _SaleModel);\n\n function SaleItem(item, seenArray) {\n _classCallCheck(this, SaleItem);\n\n var _this2 = _possibleConstructorReturn(this, (SaleItem.__proto__ || Object.getPrototypeOf(SaleItem)).call(this, item));\n\n _this2.multicolumn = _this2.details_type == 'multicolumn';\n _this2.seen = seenArray.indexOf(_this2.page_id) != -1;\n\n if (!_this2.seen) {\n seenArray.unshift(_this2.page_id);\n }\n\n if (_this2.discount_code) {\n _this2.discount_code = \"\\u0421\\u043A\\u0438\\u0434\\u043E\\u0447\\u043D\\u044B\\u0439 \\u043A\\u043E\\u0434: \" + _this2.discount_code;\n }\n\n _this2.isPureImageBanner = _this2.isImageBanner && !_this2.details_content_columns.length;\n return _this2;\n }\n\n return SaleItem;\n}(__WEBPACK_IMPORTED_MODULE_1__common_model_salemodel__[\"a\" /* SaleModel */]);\n\n/***/ }),\n\n/***/ \"X0GP\":\n/***/ (function(module, exports) {\n\nmodule.exports = _;\n\n/***/ }),\n\n/***/ \"XRua\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* unused harmony export buildUrl */\n/* harmony export (immutable) */ __webpack_exports__[\"c\"] = buildQuery;\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = addQuery;\n/* harmony export (immutable) */ __webpack_exports__[\"b\"] = appendQuery;\n/* unused harmony export query */\n/* unused harmony export hashQuery */\n/* harmony export (immutable) */ __webpack_exports__[\"d\"] = decodeQueryString;\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/**\r\n * This script adds some additional methods to window.location\r\n * buildQuery Helper method for constricting query strings\r\n * query location.query manipulator\r\n * hashQuery location.hash manipulator\r\n */\n\nvar location = window.location;\n\nfunction buildUrl(pathname, queryString) {\n\tif (!queryString) {\n\t\treturn pathname;\n\t}\n\tqueryString = '' + queryString;\n\tif (!queryString.startsWith('?')) {\n\t\tqueryString = '?' + queryString;\n\t}\n\treturn pathname + queryString;\n}\n\n/**\r\n * Builds query string from given object\r\n * @param {object} queryData\r\n * @param {boolean} [numeric_prefix]\r\n * @return {string}\r\n */\nfunction buildQuery(queryData, numeric_prefix) {\n\tvar value = void 0,\n\t key = void 0,\n\t tmp = [];\n\tvar arg_separator = \"&\";\n\n\tfor (key in queryData) {\n\t\tif (!queryData.hasOwnProperty(key)) {\n\t\t\tcontinue;\n\t\t}\n\t\tvalue = queryData[key];\n\t\tif (numeric_prefix && !isNaN(key)) {\n\t\t\tkey = String(numeric_prefix) + key;\n\t\t}\n\t\tvar _query = http_build_query_helper(urlencode(key), value, arg_separator);\n\t\tif (_query !== '') {\n\t\t\ttmp.push(_query);\n\t\t}\n\t}\n\n\treturn tmp.join(arg_separator);\n}\n\n/**\r\n * Appends given query data to given URL\r\n * @param {string} url\r\n * @param {object} queryData\r\n * @return {string} New url\r\n */\nfunction addQuery(url, queryData) {\n\tvar q = buildQuery(queryData);\n\turl = '' + url;\n\tvar m = /^([^?#]*)(\\?[^#]+)?(#.+)?$/.exec(url);\n\tif (!m) {\n\t\treturn url + '?' + q;\n\t}\n\treturn (m[1] || '') + (m[2] ? m[2] + '&' + q : '?' + q) + (m[3] || '');\n}\n\n/**\r\n * Appends given query data to given query string\r\n * @param {string} queryString\r\n * @param {object} queryData\r\n * @return {string} New query string\r\n */\nfunction appendQuery(queryString, queryData) {\n\tvar q = buildQuery(queryData);\n\tif (!q) {\n\t\treturn queryString;\n\t}\n\tvar str = '' + queryString;\n\treturn str.length > 0 ? str + '&' + q : q;\n}\n\n/**\r\n * Manipulates location.search as an object.
\r\n * With no arguments - returns the whole location.search object.
\r\n * With only key argument - returns value for this key.
\r\n * With key and value arguments (or only key as object) - updates location.search with new value\r\n * @param [key] The key to set. Can be an object, so the value is not needed\r\n * @param [value] The value to set\r\n * @param [extend] TRUE to extend current location.search object, or FALSE to replace it. Default is TRUE\r\n * @returns {Object|String}\r\n */\nfunction query(key, value, extend) {\n\treturn processQuery('search', key, value, extend);\n}\n\n/**\r\n * Manipulates location.hash as an object.
\r\n * With no arguments - returns the whole location.hash object.
\r\n * With only key argument - returns value for this key.
\r\n * With key and value arguments (or only key as object) - updates location.hash with new value\r\n * @param [key] The key to set. Can be an object, so the value is not needed\r\n * @param [value] The value to set\r\n * @param [extend] TRUE to extend current location.hash object, or FALSE to replace it. Default is TRUE\r\n * @returns {Object|String}\r\n */\nfunction hashQuery(key, value, extend) {\n\treturn processQuery('hash', key, value, extend);\n}\n\nfunction processQuery(type, key, value, extend) {\n\tvar queryData = decodeQueryString(location[type].substring(1));\n\tif (key !== undefined) {\n\t\tvar isObj = (typeof key === 'undefined' ? 'undefined' : _typeof(key)) === 'object';\n\n\t\tif (value === undefined && !isObj) {\n\t\t\t// return value\n\t\t\treturn queryData[key] === undefined ? null : queryData[key];\n\t\t} else if (!isObj) {\n\t\t\tif (extend === undefined) extend = true;\n\n\t\t\t// set value to key\n\t\t\tvar k = key.toString();\n\t\t\tkey = {};\n\t\t\tkey[k] = value;\n\t\t}\n\n\t\tif (extend) {\n\t\t\t$.extend(queryData, key);\n\t\t} else {\n\t\t\tqueryData = key;\n\t\t}\n\n\t\t// clear data\n\t\tvar newData = {};\n\t\t$.each(queryData, function (key, value) {\n\t\t\tif (value) newData[key] = value;\n\t\t});\n\t\tqueryData = newData;\n\n\t\tlocation[type] = buildQuery(queryData);\n\t}\n\treturn queryData;\n}\n\n/**\r\n * Decodes query string like 'a=one&b=two&c[]=three' and returns an object\r\n * @param string\r\n * @return {Object}\r\n */\nfunction decodeQueryString(string) {\n\tvar glue1 = '=',\n\t glue2 = '&',\n\t array = {},\n\t // holds result\n\tarray2 = String(string).replace(/^&?([\\s\\S]*?)&?$/, '$1').split(glue2),\n\t i = void 0,\n\t j = void 0,\n\t chr = void 0,\n\t tmp = void 0,\n\t key = void 0,\n\t value = void 0,\n\t bracket = void 0,\n\t keys = void 0,\n\t evalStr = void 0,\n\t fixStr = function fixStr(str) {\n\t\treturn decodeURIComponent(str).replace(/([\\\\\"'])/g, '\\\\$1').replace(/\\n/g, '\\\\n').replace(/\\r/g, '\\\\r').replace(/\\+/g, ' ');\n\t};\n\n\tfor (i = 0; i < array2.length; i++) {\n\t\ttmp = array2[i].split(glue1);\n\t\tif (tmp.length < 2) {\n\t\t\ttmp = [tmp, ''];\n\t\t}\n\t\tkey = fixStr(tmp[0]);\n\t\tvalue = fixStr(tmp[1]);\n\t\twhile (key.charAt(0) === ' ') {\n\t\t\tkey = key.substr(1);\n\t\t}\n\t\tif (key.indexOf('\\0') !== -1) {\n\t\t\tkey = key.substr(0, key.indexOf('\\0'));\n\t\t}\n\t\tif (key && key.charAt(0) !== '[') {\n\t\t\tkeys = [];\n\t\t\tbracket = 0;\n\t\t\tfor (j = 0; j < key.length; j++) {\n\t\t\t\tif (key.charAt(j) === '[' && !bracket) {\n\t\t\t\t\tbracket = j + 1;\n\t\t\t\t} else if (key.charAt(j) === ']') {\n\t\t\t\t\tif (bracket) {\n\t\t\t\t\t\tif (!keys.length) {\n\t\t\t\t\t\t\tkeys.push(key.substr(0, bracket - 1));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tkeys.push(key.substr(bracket, j - bracket));\n\t\t\t\t\t\tbracket = 0;\n\t\t\t\t\t\tif (key.charAt(j + 1) !== '[') {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!keys.length) {\n\t\t\t\tkeys = [key];\n\t\t\t}\n\t\t\tfor (j = 0; j < keys[0].length; j++) {\n\t\t\t\tchr = keys[0].charAt(j);\n\t\t\t\tif (chr === ' ' || chr === '.' || chr === '[') {\n\t\t\t\t\tkeys[0] = keys[0].substr(0, j) + '_' + keys[0].substr(j + 1);\n\t\t\t\t}\n\t\t\t\tif (chr === '[') {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tevalStr = 'array';\n\t\t\tfor (j = 0; j < keys.length; j++) {\n\t\t\t\tkey = keys[j];\n\t\t\t\tif (key !== '' && key !== ' ' || j === 0) {\n\t\t\t\t\tkey = \"'\" + key + \"'\";\n\t\t\t\t} else {\n\t\t\t\t\tkey = eval(evalStr + '.push([]);') - 1;\n\t\t\t\t}\n\t\t\t\tevalStr += '[' + key + ']';\n\t\t\t\tif (j !== keys.length - 1 && eval('typeof ' + evalStr) === 'undefined') {\n\t\t\t\t\teval(evalStr + ' = [];');\n\t\t\t\t}\n\t\t\t}\n\t\t\tevalStr += \" = '\" + value + \"';\\n\";\n\t\t\teval(evalStr);\n\t\t}\n\t}\n\n\treturn array;\n}\n\nfunction urlencode(str) {\n\tstr = (str + '').toString();\n\treturn encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\\(/g, '%28').replace(/\\)/g, '%29').replace(/\\*/g, '%2A').replace(/%20/g, '+');\n}\n\nfunction http_build_query_helper(key, val, arg_separator) {\n\tvar k = void 0,\n\t tmp = [];\n\tif (val === true) {\n\t\tval = \"1\";\n\t} else if (val === false) {\n\t\tval = \"0\";\n\t}\n\tif (val !== null && val !== undefined && val !== '') {\n\t\tif ((typeof val === 'undefined' ? 'undefined' : _typeof(val)) === \"object\") {\n\t\t\tvar start = 0;\n\t\t\tfor (k in val) {\n\t\t\t\tif (!val.hasOwnProperty(k)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (val[k] !== null) {\n\t\t\t\t\tvar sk = void 0,\n\t\t\t\t\t num = Number(k);\n\t\t\t\t\tif (!isNaN(num) && num - start === 0) {\n\t\t\t\t\t\tif (_typeof(val[k]) === \"object\") {\n\t\t\t\t\t\t\tsk = num;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsk = '';\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstart++;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsk = urlencode(k);\n\t\t\t\t\t}\n\t\t\t\t\tvar part = http_build_query_helper(key + \"[\" + sk + \"]\", val[k], arg_separator);\n\t\t\t\t\tif (part) {\n\t\t\t\t\t\ttmp.push(part);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn tmp.join(arg_separator);\n\t\t} else if (typeof val !== \"function\") {\n\t\t\treturn key + \"=\" + urlencode(val);\n\t\t} else {\n\t\t\tthrow new Error('There was an error processing for http_build_query().');\n\t\t}\n\t} else {\n\t\treturn '';\n\t}\n}\n\n/***/ }),\n\n/***/ \"XXni\":\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ \"YWK7\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony export (immutable) */ __webpack_exports__[\"init\"] = init;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__sidebar_index__ = __webpack_require__(\"J9kM\");\n\n\nfunction init() {\n\tvar $list = $('#articlesList');\n\titemSizeSpot();\n\t__WEBPACK_IMPORTED_MODULE_0__sidebar_index__[\"a\" /* init */]({\n\t\theightTarget: $list\n\t});\n\n\t$list.zInfiniteScroll({\n\t\tselector: '[rel=page]',\n\t\tloading: '#pagesScrollLoader',\n\t\tmaxAutoloadPages: 200,\n\t\ttotalCount: $list.data('totalCount'),\n\t\tfetch: function fetch(page, callback) {\n\t\t\tvar data = {\n\t\t\t\tpage: page,\n\t\t\t\ttype: $list.data('blogType'),\n\t\t\t\tcategory: $list.data('blogCategory')\n\t\t\t};\n\t\t\t$.get($list.data('loadUrl'), data, null, 'json').done(function (response) {\n\t\t\t\tvar $blocks = $(response['html']).filter('[rel=page]');\n\t\t\t\tcallback($blocks);\n\t\t\t});\n\t\t}\n\t});\n\n\t$(window).resize(function () {\n\t\titemSizeSpot();\n\t});\n}\n\nfunction itemSizeSpot() {\n\tvar $items = $('.articles-list').find('.post');\n\tvar width = $items.find('.content').innerWidth();\n\n\tif (width > 254) {\n\t\t$items.attr('size', 'large');\n\t}\n\n\tif (width <= 254 && width >= 240) {\n\t\t$items.attr('size', 'medium');\n\t}\n\n\tif (width >= 208 && width < 240) {\n\t\t$items.attr('size', 'small');\n\t}\n\tif (width < 208) {\n\t\t$items.attr('size', 'extra-small');\n\t}\n}\n\n/***/ }),\n\n/***/ \"YnTO\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"b\"] = checkIsIframe;\n/* harmony export (immutable) */ __webpack_exports__[\"c\"] = isMobile;\n/* harmony export (immutable) */ __webpack_exports__[\"d\"] = isTouchScreen;\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return WEBP_FEATURES; });\n/* harmony export (immutable) */ __webpack_exports__[\"e\"] = isWebpFeatureSupported;\n/**\n * @return {boolean} TRUE if current window is an iframe window\n */\nfunction checkIsIframe() {\n\treturn window !== window.top;\n}\n\nvar _isMobile = 'orientation' in window || navigator.userAgent.indexOf('IEMobile') !== -1;\nvar _isTouchScreen = 'ontouchstart' in window || navigator.msMaxTouchPoints;\n\nfunction isMobile() {\n\treturn _isMobile;\n}\n\nfunction isTouchScreen() {\n\treturn _isTouchScreen;\n}\n\nvar WEBP_FEATURES = {\n\tLOSSY: 'lossy',\n\tLOSSLESS: 'lossless',\n\tALPHA: 'alpha',\n\tANIMATION: 'animation'\n};\n\nfunction isWebpFeatureSupported(feature) {\n\treturn new Promise(function (resolve, reject) {\n\t\tif (!Object.values(WEBP_FEATURES).includes(feature)) {\n\t\t\treject('Invalid feature name');\n\t\t\treturn;\n\t\t}\n\n\t\tvar kTestImages = {\n\t\t\tlossy: \"UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA\",\n\t\t\tlossless: \"UklGRhoAAABXRUJQVlA4TA0AAAAvAAAAEAcQERGIiP4HAA==\",\n\t\t\talpha: \"UklGRkoAAABXRUJQVlA4WAoAAAAQAAAAAAAAAAAAQUxQSAwAAAARBxAR/Q9ERP8DAABWUDggGAAAABQBAJ0BKgEAAQAAAP4AAA3AAP7mtQAAAA==\",\n\t\t\tanimation: \"UklGRlIAAABXRUJQVlA4WAoAAAASAAAAAAAAAAAAQU5JTQYAAAD/////AABBTk1GJgAAAAAAAAAAAAAAAAAAAGQAAABWUDhMDQAAAC8AAAAQBxAREYiI/gcA\"\n\t\t};\n\t\tvar img = new Image();\n\t\timg.onload = function () {\n\t\t\tvar result = img.width > 0 && img.height > 0;\n\t\t\tresolve(result);\n\t\t};\n\t\timg.onerror = function () {\n\t\t\tresolve(false);\n\t\t};\n\t\timg.src = \"data:image/webp;base64,\" + kTestImages[feature];\n\t});\n}\n\n/*export class MobileDetect {\n\tstatic Android = navigator.userAgent.match(/Android/i);\n\tstatic BlackBerry = navigator.userAgent.match(/BlackBerry/i);\n\tstatic iOS = navigator.userAgent.match(/iPhone|iPad|iPod/i);\n\tstatic Opera = navigator.userAgent.match(/Opera Mini/i);\n\tstatic Windows = navigator.userAgent.match(/IEMobile/i);\n\tstatic Any = MobileDetect.Android || MobileDetect.BlackBerry || MobileDetect.iOS || MobileDetect.Opera || MobileDetect.Windows;\n}*/\n\n/***/ }),\n\n/***/ \"ZLxd\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return SaleModel; });\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar SaleModel = function () {\n function SaleModel(item) {\n _classCallCheck(this, SaleModel);\n\n for (var property in item) {\n if (property == 'my_like') {\n this[property] = ko.observable(item[property]);\n } else {\n this[property] = item[property];\n }\n }\n\n this.active = this.status == 'Активна';\n this.totalLikes = ko.observable(parseInt(this.likes_initial) + parseInt(this.likes));\n this.isTextBanner = this.banner_type == 'text';\n this.isImageBanner = this.banner_type == 'image';\n }\n\n _createClass(SaleModel, [{\n key: 'saveLike',\n value: function saveLike(model, event) {\n var _this = this;\n\n var userId = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n if (USER_ID || userId) {\n $.post(base_url + 'blog/likes_save', { id: this.page_id }, function (response) {\n if (response.success) {\n if (response.action == 'up') {\n _this.my_like(true);\n } else {\n _this.my_like(false);\n }\n\n _this.totalLikes(response.likes);\n }\n }, 'json');\n } else {\n zde.showLogin(function (data) {\n if (data) {\n _this.saveLike(model, event, data.id);\n return;\n }\n });\n }\n }\n }]);\n\n return SaleModel;\n}();\n\n/***/ }),\n\n/***/ \"ZuML\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = openPopup;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__popup_less__ = __webpack_require__(\"Q4Fy\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__popup_less___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__popup_less__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__dialog__ = __webpack_require__(\"fokk\");\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n\n\n\n/**\n * The same as {@link openHtmlDialog()} but with name='popup' enabled\n * @param {*} content HTML content\n * @param {object} options ZDialog options\n * @return {ZDialog} Dialog instance\n */\nfunction openPopup(content) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n return Object(__WEBPACK_IMPORTED_MODULE_1__dialog__[\"openHtmlDialog\"])(content, _extends({ name: 'popup' }, options));\n}\n\n/***/ }),\n\n/***/ \"dTkA\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* unused harmony export isset */\n/* harmony export (immutable) */ __webpack_exports__[\"e\"] = element;\n/* unused harmony export elementOrDefault */\n/* harmony export (immutable) */ __webpack_exports__[\"f\"] = elementOrDash;\n/* harmony export (immutable) */ __webpack_exports__[\"g\"] = orDefault;\n/* harmony export (immutable) */ __webpack_exports__[\"c\"] = asNumber;\n/* harmony export (immutable) */ __webpack_exports__[\"b\"] = asBoolean;\n/* harmony export (immutable) */ __webpack_exports__[\"d\"] = asString;\n/* harmony export (immutable) */ __webpack_exports__[\"h\"] = trim;\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = asArray;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lib_underscore__ = __webpack_require__(\"X0GP\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lib_underscore___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lib_underscore__);\n\n\n/**\n * Is a given variable defined and has value?\n * @param {*} val\n * @return {boolean} false if given value is undefined or null, otherwise true\n */\nfunction isset(val) {\n return !__WEBPACK_IMPORTED_MODULE_0_lib_underscore___default.a.isUndefined(val) && !__WEBPACK_IMPORTED_MODULE_0_lib_underscore___default.a.isNull(val);\n}\n\n/**\n * Returns object's property or array's index if exists and default value otherwise\n * @param {object|array} object Inspected object or array\n * @param {string|number} key Property name for objects, numeric index for arrays\n * @param {*} defaultValue\n * @return {*}\n */\nfunction element(object, key) {\n var defaultValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n return __WEBPACK_IMPORTED_MODULE_0_lib_underscore___default.a.has(object, key) ? object[key] : defaultValue;\n}\n\n/**\n * Returns object's property or array's index if exists and is not null or default value otherwise\n * @param {object|array} object Inspected object or array\n * @param {string|number} key Property name for objects, numeric index for arrays\n * @param {*} defaultValue\n * @return {*}\n */\nfunction elementOrDefault(object, key) {\n var defaultValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n return __WEBPACK_IMPORTED_MODULE_0_lib_underscore___default.a.has(object, key) && object[key] !== null ? object[key] : defaultValue;\n}\n\n/**\n * Returns object's property or array's index if exists and is not null or \"—\" value otherwise\n * @param {object|array} object Inspected object or array\n * @param {string|number} key Property name for objects, numeric index for arrays\n * @param {*} defaultValue\n * @return {*}\n */\nfunction elementOrDash(object, key) {\n return elementOrDefault(object, key, '—');\n}\n\n/**\n * Returns value if it's not undefined or null, otherwise defaultValue\n * @param {*} value\n * @param {*} defaultValue\n * @return {*}\n */\nfunction orDefault(value) {\n var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n return isset(value) ? value : defaultValue;\n}\n\n/**\n * Converts given value to number using standard javascript converter: +value\n * @param {*} value Input value\n * @param {number} defaultValue\n * @return {number} Either converted value if it's not NaN and default value otherwise\n */\nfunction asNumber(value) {\n var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n value = +value;\n return !isNaN(value) ? value : 0;\n}\n\n/**\n * Converts given value to boolean using such algo:\n * - string \"0\" results in false;\n * - string \"false\" results in false;\n * - string \"null\" results in false;\n * - empty object results in false;\n * - empty array results in false;\n * - other values go through standard javascript converter: !!value\n * @param {*} value Input value\n * @return {boolean} Converted value\n */\nfunction asBoolean(value) {\n if (__WEBPACK_IMPORTED_MODULE_0_lib_underscore___default.a.isBoolean(value)) return value;\n if (value === '0') return false;\n if (value === 'false') return false;\n if (value === 'null') return false;\n if (__WEBPACK_IMPORTED_MODULE_0_lib_underscore___default.a.isObject(value) && __WEBPACK_IMPORTED_MODULE_0_lib_underscore___default.a.isEmpty(value)) return false;\n if (__WEBPACK_IMPORTED_MODULE_0_lib_underscore___default.a.isArray(value) && __WEBPACK_IMPORTED_MODULE_0_lib_underscore___default.a.isEmpty(value)) return false;\n return !!value;\n}\n\n/**\n * Converts given value to string using standard javascript converter: ''+value\n * except that null and undefined values will be converted to empty string.\n * @param {*} value Input value\n * @return {string} Converted value\n */\nfunction asString(value) {\n if (value === null || __WEBPACK_IMPORTED_MODULE_0_lib_underscore___default.a.isUndefined(value)) return '';\n return '' + value;\n}\n\n/**\n * Converts given value to string using {@link asString()} and trims whitespace characters.\n * @param {string|*} value\n * @return {string} Converted and trimmed value\n */\nfunction trim(value) {\n return asString(value).trim();\n}\n\n/**\n * If input value is an array - it will be returned as is.\n * In other cases input value will be converted to string and either split with given delimiter\n * or just returned as a single array element.\n * @param {array|string} value\n * @param {string} delimiter\n * @return {array}\n */\nfunction asArray(value) {\n var delimiter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n\n if (!value) return [];\n if (__WEBPACK_IMPORTED_MODULE_0_lib_underscore___default.a.isArray(value)) return value;\n value = asString(value);\n return delimiter ? value.split(delimiter) : [value];\n}\n\n/***/ }),\n\n/***/ \"dydC\":\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(\"oN+n\")(__webpack_require__(\"i8fT\"))\n\n/***/ }),\n\n/***/ \"e2Zi\":\n/***/ (function(module, exports) {\n\nfunction E () {\n // Keep this empty so it's easier to inherit from\n // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n on: function (name, callback, ctx) {\n var e = this.e || (this.e = {});\n\n (e[name] || (e[name] = [])).push({\n fn: callback,\n ctx: ctx\n });\n\n return this;\n },\n\n once: function (name, callback, ctx) {\n var self = this;\n function listener () {\n self.off(name, listener);\n callback.apply(ctx, arguments);\n };\n\n listener._ = callback\n return this.on(name, listener, ctx);\n },\n\n emit: function (name) {\n var data = [].slice.call(arguments, 1);\n var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n var i = 0;\n var len = evtArr.length;\n\n for (i; i < len; i++) {\n evtArr[i].fn.apply(evtArr[i].ctx, data);\n }\n\n return this;\n },\n\n off: function (name, callback) {\n var e = this.e || (this.e = {});\n var evts = e[name];\n var liveEvents = [];\n\n if (evts && callback) {\n for (var i = 0, len = evts.length; i < len; i++) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n liveEvents.push(evts[i]);\n }\n }\n\n // Remove event from queue to prevent memory leak\n // Suggested by https://github.com/lazd\n // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n (liveEvents.length)\n ? e[name] = liveEvents\n : delete e[name];\n\n return this;\n }\n};\n\nmodule.exports = E;\n\n\n/***/ }),\n\n/***/ \"ejlv\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__vendor_urlconverter_jquery_urlconverter__ = __webpack_require__(\"dydC\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__vendor_urlconverter_jquery_urlconverter___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__vendor_urlconverter_jquery_urlconverter__);\n\n\n/***/ }),\n\n/***/ \"fokk\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony export (immutable) */ __webpack_exports__[\"createIframeDialog\"] = createIframeDialog;\n/* harmony export (immutable) */ __webpack_exports__[\"createHtmlDialog\"] = createHtmlDialog;\n/* harmony export (immutable) */ __webpack_exports__[\"openHtmlDialog\"] = openHtmlDialog;\n/* harmony export (immutable) */ __webpack_exports__[\"createWindowDialog\"] = createWindowDialog;\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"dialogManager\", function() { return dialogManager; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dialog_less__ = __webpack_require__(\"vBks\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dialog_less___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__dialog_less__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_lib_underscore__ = __webpack_require__(\"X0GP\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_lib_underscore___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_lib_underscore__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_lib_knockout__ = __webpack_require__(\"7fPx\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_lib_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_lib_knockout__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__utils_logger__ = __webpack_require__(\"5wqq\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__utils_utils__ = __webpack_require__(\"YnTO\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__utils_var__ = __webpack_require__(\"dTkA\");\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\n\n\n\n\nvar logger = Object(__WEBPACK_IMPORTED_MODULE_3__utils_logger__[\"a\" /* newLogger */])('ZDialog');\n\n/**\n * Creates new dialog with IFrame with given url\n * @param {string} url IFrame url\n * @param {object} options ZDialog Options. See {@link ZDialog.defaults}\n * @return {ZDialog}\n */\nfunction createIframeDialog(url) {\n\tvar options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n\treturn newDialog(_extends({ content: url, type: 'iframe', __width: 800 }, options));\n}\n\n/**\n * Creates new dialog instance.\n * autoOpen option is false by default, so you should either call open() method\n * or override autoOpen option\n * @param {*} content HTML content. Can be either valid HTML string, or DOM node, or jQuery object\n * @param {object} options ZDialog Options. See {@link ZDialog.defaults}\n * @return {ZDialog} Dialog instance\n */\nfunction createHtmlDialog(content) {\n\tvar options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n\treturn newDialog(_extends({ content: content, type: 'html', showCloseButton: true }, options));\n}\n\n/**\n * The same as {@link createHtmlDialog()} but with autoOpen enabled\n * @param {*} content HTML content\n * @param {object} options ZDialog options\n * @return {ZDialog} Dialog instance\n */\nfunction openHtmlDialog(content) {\n\tvar options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n\treturn createHtmlDialog(content, _extends({ autoOpen: true }, options));\n}\n\n/**\n * Creates new dialog as new window with given url\n * @param {string} url IFrame url\n * @param {object} options ZDialog Options. See {@link ZDialog.defaults}\n * @return {ZDialog}\n */\nfunction createWindowDialog(url) {\n\tvar options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n\treturn newDialog(_extends({ content: url, type: 'window' }, options));\n}\n\n// add some helper functions to jQuery\n$.extend($.fn, {\n\t/**\n * Calls {@link openHtmlDialog()} with source element as content\n * @param {object} options ZDialog Options. See {@link ZDialog.defaults}\n */\n\tzdialog: function zdialog() {\n\t\tvar options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n\t\tvar $el = $(this);\n\t\tvar $placeholder = $('
').insertAfter($el);\n\t\tvar isInDom = $el.closest(document.documentElement);\n\t\tvar isVisible = $el.css('display') != 'none';\n\t\tif (isInDom) {\n\t\t\t$el.detach();\n\t\t}\n\t\tif (!isVisible) {\n\t\t\t$el.show();\n\t\t}\n\t\tvar dialog = createHtmlDialog($el, options);\n\t\tdialog.onBeforeClose(function () {\n\t\t\t$el.detach();\n\t\t});\n\t\tdialog.onClose(function () {\n\t\t\tif (isInDom) {\n\t\t\t\t$el.insertAfter($placeholder);\n\t\t\t}\n\t\t\tif (!isVisible) {\n\t\t\t\t$el.hide();\n\t\t\t}\n\t\t\t$placeholder.remove();\n\t\t});\n\t\tdialog.open();\n\t\t$el.data('zdialogInstance', dialog);\n\t\treturn this;\n\t},\n\n\t/**\n * Returns ZDialog instance for given element (if the dialog was created with {@link jQuery.fn.zdialog} function)\n * @return {ZDialog}\n */\n\tzdialogInstance: function zdialogInstance() {\n\t\treturn this.data('zdialogInstance');\n\t}\n});\n\n// FOR TESTING\n/*import {MODAL_ASK_REDIRECT, MODAL_CRITICAL_NEWS, MODAL_LOGIN, MODAL_PACKAGE_INFO, MODAL_REVIEW} from \"../modals\";\n$('.logo').click(function(e) {\n\te.preventDefault();\n\tconst queue = [];\n\tconst showNext = () => {\n\t\tif (queue.length > 0) {\n\t\t\tqueue.shift()();\n\t\t}\n\t};\n\tconst onOpen = () => {};\n\t// queue.push(() => MODAL_REVIEW.show(104625).onOpen(showNext));\n\t// queue.push(() => MODAL_LOGIN.show().onOpen(showNext));\n\t// queue.push(() => MODAL_PACKAGE_INFO.show(1803110691).onOpen(showNext));\n\t// queue.push(() => MODAL_ASK_REDIRECT.show().onOpen(showNext));\n\t// queue.push(() => MODAL_CRITICAL_NEWS.show(312).onOpen(showNext));\n\tqueue.push(() => openHtmlDialog('
').onOpen(onOpen));\n\tqueue.push(() => openHtmlDialog('
').onOpen(onOpen));\n\tqueue.push(() => openHtmlDialog('
').onOpen(onOpen));\n\tqueue.push(() => openHtmlDialog('
', {fullscreen: true}).onOpen(onOpen));\n\tqueue.push(() => openHtmlDialog('
', {fullscreen: true}).onOpen(onOpen));\n\tshowNext();\n\n\t$(document).on('click', '.zdialog-html > div', showNext);\n});*/\n\n/**\n * @param {object} options\n * @return {ZDialog}\n */\nvar newDialog = function newDialog(options) {\n\treturn new ZDialog(options);\n};\n\n// force use newDialog function from top window\nvar key = '__zdialog_newDialog';\nif (Object(__WEBPACK_IMPORTED_MODULE_4__utils_utils__[\"b\" /* checkIsIframe */])()) {\n\tnewDialog = window.top[key];\n} else {\n\twindow.top[key] = newDialog;\n}\n\n/**\n * Dialog class\n */\n\nvar ZDialog = function () {\n\t/** @type {JQuery.Callbacks} */\n\n\t/** @type {JQuery.Callbacks} */\n\n\t/** @type {HeightWatcher} */\n\tfunction ZDialog(options) {\n\t\t_classCallCheck(this, ZDialog);\n\n\t\tthis._width = __WEBPACK_IMPORTED_MODULE_2_lib_knockout___default.a.observable();\n\t\tthis._height = __WEBPACK_IMPORTED_MODULE_2_lib_knockout___default.a.observable();\n\t\tthis._isModal = __WEBPACK_IMPORTED_MODULE_2_lib_knockout___default.a.observable(false);\n\t\tthis._isCloseBtnVisible = __WEBPACK_IMPORTED_MODULE_2_lib_knockout___default.a.observable(false);\n\t\tthis._isLoading = __WEBPACK_IMPORTED_MODULE_2_lib_knockout___default.a.observable(false);\n\t\tthis._isOpened = __WEBPACK_IMPORTED_MODULE_2_lib_knockout___default.a.observable(false);\n\t\tthis._isClosed = __WEBPACK_IMPORTED_MODULE_2_lib_knockout___default.a.observable(false);\n\t\tthis._isHidden = __WEBPACK_IMPORTED_MODULE_2_lib_knockout___default.a.observable(false);\n\t\tthis._contentHeight = __WEBPACK_IMPORTED_MODULE_2_lib_knockout___default.a.observable(0);\n\t\tthis._iframeHeight = __WEBPACK_IMPORTED_MODULE_2_lib_knockout___default.a.observable(0);\n\t\tthis._opened = false;\n\t\tthis._onOpen = $.Callbacks();\n\t\tthis._onClose = $.Callbacks();\n\t\tthis._onBeforeClose = $.Callbacks();\n\t\tthis._result = null;\n\n\t\tvar o = _extends({}, ZDialog.defaults, options);\n\n\t\tthis._name = o.name;\n\t\tthis._o = o;\n\t\tthis._isModal(!!o.modal);\n\t\tthis._isCloseBtnVisible(!!o.showCloseButton);\n\t\tthis._width(o.width);\n\t\tthis._height(o.height);\n\n\t\tif (o.onOpen) {\n\t\t\tthis._onOpen.add(o.onOpen);\n\t\t}\n\t\tif (o.onClose) {\n\t\t\tthis._onClose.add(o.onClose);\n\t\t}\n\n\t\tif (o.autoOpen) {\n\t\t\tthis.open();\n\t\t}\n\t}\n\t/** @type {JQuery.Callbacks} */\n\n\n\t// options\n\n\n\t_createClass(ZDialog, [{\n\t\tkey: \"open\",\n\t\tvalue: function open() {\n\t\t\tvar _this = this;\n\n\t\t\tif (this.isOpened) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._isClosed(false);\n\t\t\tthis._isHidden(false);\n\t\t\tthis._result = null;\n\t\t\tif (this.type === 'window') {\n\t\t\t\tthis._wnd = window.open(this.content);\n\t\t\t\tthis._wnd.addEventListener('DOMContentLoaded', function () {\n\t\t\t\t\treturn _this._handleWindowReady();\n\t\t\t\t});\n\t\t\t\tthis._wnd.onbeforeunload = function () {\n\t\t\t\t\tif (!_this.isClosed) {\n\t\t\t\t\t\t_this.close();\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tthis._isLoading(true);\n\t\t\t} else if (!dialogManager.isRegistered(this)) {\n\t\t\t\tif (this.isFullScreen) {\n\t\t\t\t\tthis._width('');\n\t\t\t\t\tthis._height('');\n\t\t\t\t\tthis._contentHeight('');\n\t\t\t\t\tthis._iframeHeight('');\n\t\t\t\t}\n\t\t\t\tif (this.type === 'iframe') {\n\t\t\t\t\tthis._isLoading(true);\n\t\t\t\t\tif (!this.isAutoHeight) {\n\t\t\t\t\t\tthis._contentHeight(this.height);\n\t\t\t\t\t\tthis._iframeHeight(this.height);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._contentHeight('');\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis._contentHeight(this.height);\n\t\t\t\t\tthis._isOpened(true);\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\treturn _this._onOpen.fireWith(_this);\n\t\t\t\t\t}, 0);\n\t\t\t\t}\n\t\t\t\tdialogManager.register(this);\n\t\t\t} else if (this._isHidden()) {\n\t\t\t\tdialogManager.show(this);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: \"close\",\n\t\tvalue: function close() {\n\t\t\tvar _this2 = this;\n\n\t\t\tif (this.isClosed) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._onBeforeClose.fireWith(this, [this._result]);\n\t\t\tthis._isOpened(false);\n\t\t\tthis._isHidden(false);\n\t\t\tthis._isClosed(true);\n\t\t\tif (this.type === 'window') {\n\t\t\t\tif (this._wnd) {\n\t\t\t\t\tthis._wnd.close();\n\t\t\t\t\twindow.top.focus();\n\t\t\t\t\tthis._wnd = null;\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\treturn _this2._onClose.fireWith(_this2, [_this2._result]);\n\t\t\t\t\t}, 0);\n\t\t\t\t}\n\t\t\t} else if (dialogManager.isRegistered(this)) {\n\t\t\t\tif (this._heightWatcher) {\n\t\t\t\t\tthis._heightWatcher.off();\n\t\t\t\t}\n\t\t\t\tdialogManager.unregister(this);\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\treturn _this2._onClose.fireWith(_this2, [_this2._result]);\n\t\t\t\t}, 0);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: \"hide\",\n\t\tvalue: function hide() {\n\t\t\tif (this.type === 'window') {\n\t\t\t\tlogger.error('Method is not supported for current dialog type');\n\t\t\t} else if (dialogManager.isRegistered(this)) {\n\t\t\t\tthis._isOpened(false);\n\t\t\t\tthis._isHidden(true);\n\t\t\t\tdialogManager.hide(this);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: \"closeWithResult\",\n\t\tvalue: function closeWithResult(result) {\n\t\t\tthis.result = result;\n\t\t\tthis.close();\n\t\t}\n\t}, {\n\t\tkey: \"updatePosition\",\n\t\tvalue: function updatePosition() {\n\t\t\tif (this.type === 'iframe') {\n\t\t\t\tthis._contentHeight(this.iframeHeight);\n\t\t\t}\n\t\t}\n\n\t\t/** @return {string} */\n\n\t}, {\n\t\tkey: \"handleIframeLoad\",\n\t\tvalue: function handleIframeLoad(item, e) {\n\t\t\tvar _this3 = this;\n\n\t\t\tlogger.log('loaded', e);\n\t\t\tthis._isLoading(false);\n\n\t\t\tif (!this.isFullScreen && this.isAutoHeight) {\n\t\t\t\tthis._heightWatcher = new HeightWatcher(e.target, function (newHeight) {\n\t\t\t\t\tlogger.log(\"new height = \" + newHeight);\n\t\t\t\t\t_this3._iframeHeight(newHeight);\n\t\t\t\t\tif (!_this3.contentHeight) {\n\t\t\t\t\t\t_this3._contentHeight(newHeight);\n\t\t\t\t\t}\n\t\t\t\t\t_this3._isOpened(true);\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\treturn _this3._onOpen.fireWith(_this3);\n\t\t\t\t\t}, 0);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis._isOpened(true);\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\treturn _this3._onOpen.fireWith(_this3);\n\t\t\t\t}, 0);\n\t\t\t}\n\n\t\t\t// inject this instance to iframe\n\t\t\te.target.contentWindow.dialogInstance = this;\n\n\t\t\t// apply special classes\n\t\t\t$(e.target.contentWindow.document.body).toggleClass('zdialog-layout-modal', this.isModal).toggleClass('zdialog-layout-autoheight', this.isAutoHeight).toggleClass('zdialog-layout-fullscreen', this.isFullScreen);\n\n\t\t\t// triger event inside iframe\n\t\t\te.target.contentWindow.$(e.target.contentWindow.document).trigger('zdialog-shown');\n\t\t}\n\t}, {\n\t\tkey: \"_handleWindowReady\",\n\t\tvalue: function _handleWindowReady(e) {\n\t\t\tvar _this4 = this;\n\n\t\t\tlogger.log('loaded', e);\n\t\t\tthis._isLoading(false);\n\t\t\tthis._isOpened(true);\n\n\t\t\t// inject this instance to iframe\n\t\t\tthis._wnd.dialogInstance = this;\n\t\t\t$(this._wnd.document.body).addClass('zdialog-layout-window');\n\n\t\t\tsetTimeout(function () {\n\t\t\t\treturn _this4._onOpen.fireWith(_this4);\n\t\t\t}, 0);\n\t\t}\n\t}, {\n\t\tkey: \"handleCloseClick\",\n\t\tvalue: function handleCloseClick(item, e) {\n\t\t\tvar $target = $(e.target);\n\t\t\tif ($target.is('[data-dialog-result]')) {\n\t\t\t\tthis.result = $target.data('dialogResult');\n\t\t\t}\n\t\t\tthis.close();\n\t\t}\n\t}, {\n\t\tkey: \"handleBackdropClick\",\n\t\tvalue: function handleBackdropClick() {\n\t\t\tif (dialogManager.isTopmost(this) && !this.isModal) {\n\t\t\t\tthis.close();\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: \"onOpen\",\n\t\tvalue: function onOpen(callback) {\n\t\t\tthis._onOpen.add(callback);\n\t\t}\n\t}, {\n\t\tkey: \"offOpen\",\n\t\tvalue: function offOpen(callback) {\n\t\t\tthis._onOpen.remove(callback);\n\t\t}\n\t}, {\n\t\tkey: \"onClose\",\n\t\tvalue: function onClose(callback) {\n\t\t\tthis._onClose.add(callback);\n\t\t}\n\t}, {\n\t\tkey: \"offClose\",\n\t\tvalue: function offClose(callback) {\n\t\t\tthis._onClose.remove(callback);\n\t\t}\n\t}, {\n\t\tkey: \"onBeforeClose\",\n\t\tvalue: function onBeforeClose(callback) {\n\t\t\tthis._onBeforeClose.add(callback);\n\t\t}\n\t}, {\n\t\tkey: \"offBeforeClose\",\n\t\tvalue: function offBeforeClose(callback) {\n\t\t\tthis._onBeforeClose.remove(callback);\n\t\t}\n\t}, {\n\t\tkey: \"name\",\n\t\tget: function get() {\n\t\t\treturn this._name;\n\t\t}\n\n\t\t/** @return {string} */\n\n\t}, {\n\t\tkey: \"type\",\n\t\tget: function get() {\n\t\t\treturn this._o.type;\n\t\t}\n\n\t\t/** @return {string} */\n\n\t}, {\n\t\tkey: \"content\",\n\t\tget: function get() {\n\t\t\treturn this._o.content;\n\t\t}\n\n\t\t/** @return {string} */\n\n\t}, {\n\t\tkey: \"title\",\n\t\tget: function get() {\n\t\t\treturn this._o.title;\n\t\t}\n\n\t\t/** @return {number} */\n\n\t}, {\n\t\tkey: \"width\",\n\t\tget: function get() {\n\t\t\treturn this._width();\n\t\t}\n\n\t\t/** @return {number|string} */\n\n\t}, {\n\t\tkey: \"height\",\n\t\tget: function get() {\n\t\t\treturn this._height();\n\t\t}\n\n\t\t/** @return {number|string} */\n\n\t}, {\n\t\tkey: \"minWidth\",\n\t\tget: function get() {\n\t\t\treturn this._o.minWidth;\n\t\t}\n\n\t\t/** @return {number|string} */\n\n\t}, {\n\t\tkey: \"maxWidth\",\n\t\tget: function get() {\n\t\t\treturn this._o.maxWidth;\n\t\t}\n\n\t\t/** @return {number|string} */\n\n\t}, {\n\t\tkey: \"contentWidth\",\n\t\tget: function get() {\n\t\t\treturn this._width();\n\t\t}\n\n\t\t/** @return {number|string} */\n\n\t}, {\n\t\tkey: \"contentHeight\",\n\t\tget: function get() {\n\t\t\treturn this._contentHeight();\n\t\t}\n\n\t\t/** @return {number} */\n\n\t}, {\n\t\tkey: \"iframeHeight\",\n\t\tget: function get() {\n\t\t\treturn this._iframeHeight();\n\t\t}\n\n\t\t/** @return {boolean} */\n\n\t}, {\n\t\tkey: \"isLoading\",\n\t\tget: function get() {\n\t\t\treturn this._isLoading();\n\t\t}\n\n\t\t/** @return {boolean} */\n\n\t}, {\n\t\tkey: \"isOpened\",\n\t\tget: function get() {\n\t\t\treturn this._isOpened();\n\t\t}\n\n\t\t/** @return {boolean} */\n\n\t}, {\n\t\tkey: \"isClosed\",\n\t\tget: function get() {\n\t\t\treturn this._isClosed();\n\t\t}\n\n\t\t/** @return {boolean} */\n\n\t}, {\n\t\tkey: \"isHidden\",\n\t\tget: function get() {\n\t\t\treturn this._isHidden();\n\t\t}\n\n\t\t/** @return {boolean} */\n\n\t}, {\n\t\tkey: \"isModal\",\n\t\tget: function get() {\n\t\t\treturn this._isModal();\n\t\t}\n\n\t\t/** @return {boolean} */\n\n\t}, {\n\t\tkey: \"isCloseBtnVisible\",\n\t\tget: function get() {\n\t\t\treturn this._isCloseBtnVisible();\n\t\t}\n\n\t\t/** @type {boolean} */\n\n\t}, {\n\t\tkey: \"isFullScreen\",\n\t\tget: function get() {\n\t\t\treturn this._o.fullscreen;\n\t\t}\n\n\t\t/** @type {boolean} */\n\n\t}, {\n\t\tkey: \"isAutoHeight\",\n\t\tget: function get() {\n\t\t\treturn Object(__WEBPACK_IMPORTED_MODULE_5__utils_var__[\"d\" /* asString */])(this.height) === '' || this.height === 'auto';\n\t\t}\n\n\t\t/** @return {*} */\n\n\t}, {\n\t\tkey: \"result\",\n\t\tget: function get() {\n\t\t\treturn this._result;\n\t\t}\n\n\t\t/**\n * @param {*} value\n */\n\t\t,\n\t\tset: function set(value) {\n\t\t\tthis._result = value;\n\t\t}\n\n\t\t/**\n * @return {*}\n */\n\n\t}, {\n\t\tkey: \"customData\",\n\t\tget: function get() {\n\t\t\treturn this._o.custom;\n\t\t}\n\n\t\t/**\n * @return {string}\n */\n\n\t}, {\n\t\tkey: \"cssClass\",\n\t\tget: function get() {\n\t\t\treturn Object(__WEBPACK_IMPORTED_MODULE_5__utils_var__[\"d\" /* asString */])(this._o.cssClass);\n\t\t}\n\t}]);\n\n\treturn ZDialog;\n}();\n\nZDialog.defaults = {\n\tname: '',\n\ttype: 'iframe', // iframe, html\n\tcontent: '',\n\ttitle: '',\n\tbuttons: [],\n\tmodal: false,\n\tautoOpen: false,\n\tshowCloseButton: false,\n\n\twidth: '',\n\theight: '',\n\tfullscreen: false,\n\tcssClass: '',\n\n\tcustom: null,\n\n\t//events\n\tonOpen: null,\n\tonClose: null\n};\n\nvar DialogManager = function () {\n\t/** @type {KnockoutObservableArray} */\n\tfunction DialogManager() {\n\t\tvar _this5 = this;\n\n\t\t_classCallCheck(this, DialogManager);\n\n\t\tthis._counter = 0;\n\t\tthis._dialogs = __WEBPACK_IMPORTED_MODULE_2_lib_knockout___default.a.observableArray([]);\n\t\tthis._isClosing = __WEBPACK_IMPORTED_MODULE_2_lib_knockout___default.a.observable(false);\n\t\tthis._initialized = false;\n\t\tthis._wrapper = new WindowWrapper();\n\n\t\tthis._$html = $('html');\n\t\tthis._$body = $('body');\n\n\t\tthis._isLoading = __WEBPACK_IMPORTED_MODULE_2_lib_knockout___default.a.pureComputed(function () {\n\t\t\treturn __WEBPACK_IMPORTED_MODULE_1_lib_underscore___default.a.any(_this5.dialogs, function (d) {\n\t\t\t\treturn d.isLoading;\n\t\t\t});\n\t\t});\n\n\t\tthis._visibleDialogs = __WEBPACK_IMPORTED_MODULE_2_lib_knockout___default.a.pureComputed(function () {\n\t\t\treturn _this5.dialogs.filter(function (d) {\n\t\t\t\treturn !d.isHidden;\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n * @param {ZDialog} dialog\n */\n\n\n\t_createClass(DialogManager, [{\n\t\tkey: \"register\",\n\t\tvalue: function register(dialog) {\n\t\t\tif (this.isRegistered(dialog)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._dialogs.push(dialog);\n\t\t\tthis._checkMarkupAfterOpen();\n\t\t}\n\n\t\t/**\n * @param {ZDialog} dialog\n */\n\n\t}, {\n\t\tkey: \"unregister\",\n\t\tvalue: function unregister(dialog) {\n\t\t\tif (this._dialogs.remove(dialog).length === 0) {\n\t\t\t\t// nothing has been removed\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._checkMarkupAfterClose();\n\t\t}\n\n\t\t/**\n * @param {ZDialog} dialog\n */\n\n\t}, {\n\t\tkey: \"hide\",\n\t\tvalue: function hide(dialog) {\n\t\t\tif (this.isRegistered(dialog)) {\n\t\t\t\tthis._checkMarkupAfterClose();\n\t\t\t}\n\t\t}\n\n\t\t/**\n * @param {ZDialog} dialog\n */\n\n\t}, {\n\t\tkey: \"show\",\n\t\tvalue: function show(dialog) {\n\t\t\tif (this.isRegistered(dialog)) {\n\t\t\t\tthis._checkMarkupAfterOpen();\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: \"_checkMarkupAfterOpen\",\n\t\tvalue: function _checkMarkupAfterOpen() {\n\t\t\tif (this._isClosing()) {\n\t\t\t\tclearTimeout(this._timeout);\n\t\t\t\tthis._timeout = null;\n\t\t\t\tthis._isClosing(false);\n\t\t\t} else if (this.visibleDialogs.length === 1 && !this._initialized) {\n\t\t\t\tthis._wrapper.on();\n\n\t\t\t\tif (!this._$el) {\n\t\t\t\t\tthis._$el = $(\"
\");\n\t\t\t\t\t__WEBPACK_IMPORTED_MODULE_2_lib_knockout___default.a.applyBindings(this, this._$el[0]);\n\t\t\t\t\tthis._$el.appendTo('body');\n\t\t\t\t} else {\n\t\t\t\t\tthis._$el.show();\n\t\t\t\t}\n\t\t\t\tthis._initialized = true;\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: \"_checkMarkupAfterClose\",\n\t\tvalue: function _checkMarkupAfterClose() {\n\t\t\tvar _this6 = this;\n\n\t\t\tif (!this._isClosing() && this.visibleDialogs.length === 0 && this._initialized) {\n\t\t\t\t// no dialogs left\n\t\t\t\tthis._isClosing(true);\n\t\t\t\tthis._timeout = setTimeout(function () {\n\t\t\t\t\t_this6._wrapper.off();\n\t\t\t\t\t// logger.log('remove container');\n\t\t\t\t\t_this6._$el.remove();\n\t\t\t\t\t__WEBPACK_IMPORTED_MODULE_2_lib_knockout___default.a.cleanNode(_this6._$el[0]);\n\t\t\t\t\t_this6._$el = null;\n\t\t\t\t\t_this6._initialized = false;\n\t\t\t\t\t_this6._isClosing(false);\n\t\t\t\t}, 300);\n\t\t\t}\n\t\t}\n\n\t\t/**\n * @param {ZDialog} dialog\n * @return {boolean}\n */\n\n\t}, {\n\t\tkey: \"isRegistered\",\n\t\tvalue: function isRegistered(dialog) {\n\t\t\treturn __WEBPACK_IMPORTED_MODULE_1_lib_underscore___default.a.contains(this.dialogs, dialog);\n\t\t}\n\t}, {\n\t\tkey: \"handleBeforeRemove\",\n\t\tvalue: function handleBeforeRemove(node) {\n\t\t\tvar $node = $(node);\n\t\t\t$node.remove();\n\t\t\t/*if (node.nodeType === 3) {\n \t$node.remove();\n \treturn;\n }\n $node.addClass('zdialog-closing');\n setTimeout(() => $node.remove(), 300);*/\n\t\t}\n\n\t\t/** @return {ZDialog[]} */\n\n\t}, {\n\t\tkey: \"getTopmostDialog\",\n\t\tvalue: function getTopmostDialog() {\n\t\t\treturn __WEBPACK_IMPORTED_MODULE_1_lib_underscore___default.a.last(this.visibleDialogs.filter(function (d) {\n\t\t\t\treturn !d.isLoading;\n\t\t\t}));\n\t\t}\n\t}, {\n\t\tkey: \"isTopmost\",\n\t\tvalue: function isTopmost(dialog) {\n\t\t\treturn dialog === this.getTopmostDialog();\n\t\t}\n\n\t\t/**\n * @param {ZDialog} dialog\n */\n\n\t}, {\n\t\tkey: \"getDialogClass\",\n\t\tvalue: function getDialogClass(dialog) {\n\t\t\tvar css = [];\n\t\t\tif (dialog.isModal) {\n\t\t\t\tcss.push('zdialog-modal');\n\t\t\t}\n\t\t\tif (dialog.isFullScreen) {\n\t\t\t\tcss.push('zdialog-fullscreen');\n\t\t\t}\n\t\t\tif (this.isTopmost(dialog)) {\n\t\t\t\tcss.push('zdialog-topmost');\n\t\t\t} else if (this.visibleDialogs.length > 1) {\n\t\t\t\tcss.push('zdialog-overlapped');\n\t\t\t}\n\t\t\tif (dialog.isLoading) {\n\t\t\t\tcss.push('zdialog-loading');\n\t\t\t}\n\t\t\tif (dialog.isOpened) {\n\t\t\t\tcss.push('zdialog-opened');\n\t\t\t}\n\t\t\tif (dialog.isHidden) {\n\t\t\t\tcss.push('zdialog-hidden');\n\t\t\t}\n\t\t\tif (dialog.name) {\n\t\t\t\tcss.push('zdialog-instance-' + dialog.name);\n\t\t\t}\n\t\t\tif (dialog.cssClass) {\n\t\t\t\tcss.push(dialog.cssClass);\n\t\t\t}\n\t\t\treturn css.join(' ');\n\t\t}\n\t}, {\n\t\tkey: \"dialogs\",\n\t\tget: function get() {\n\t\t\treturn this._dialogs();\n\t\t}\n\n\t\t/** @return {ZDialog[]} */\n\n\t}, {\n\t\tkey: \"visibleDialogs\",\n\t\tget: function get() {\n\t\t\treturn this._visibleDialogs();\n\t\t}\n\n\t\t/** @return {boolean} */\n\n\t}, {\n\t\tkey: \"isLoading\",\n\t\tget: function get() {\n\t\t\treturn this._isLoading();\n\t\t}\n\n\t\t/** @return {boolean} */\n\n\t}, {\n\t\tkey: \"isClosing\",\n\t\tget: function get() {\n\t\t\treturn this._isClosing();\n\t\t}\n\t}]);\n\n\treturn DialogManager;\n}();\n\nvar HeightWatcher = function () {\n\tfunction HeightWatcher($iframe, callback) {\n\t\tvar _this7 = this;\n\n\t\t_classCallCheck(this, HeightWatcher);\n\n\t\tthis._currHeight = 0;\n\t\tthis._event = $.Callbacks();\n\n\t\tthis._event.add(callback);\n\t\tthis._ibody = $($iframe)[0].contentWindow.document.body;\n\t\t// this.updateHeight();\n\t\tsetTimeout(function () {\n\t\t\t_this7.updateHeight();\n\t\t\t_this7._interval = setInterval(function () {\n\t\t\t\treturn _this7.updateHeight();\n\t\t\t}, 50);\n\t\t}, 0);\n\t}\n\n\t_createClass(HeightWatcher, [{\n\t\tkey: \"updateHeight\",\n\t\tvalue: function updateHeight() {\n\t\t\t// const newHeight = this._ibody.offsetHeight;\n\t\t\tvar newHeight = this.getHeight();\n\t\t\tif (newHeight !== this._currHeight) {\n\t\t\t\tthis._currHeight = newHeight;\n\t\t\t\tthis._event.fire(newHeight);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: \"getHeight\",\n\t\tvalue: function getHeight() {\n\t\t\tvar height = this._ibody.scrollHeight;\n\t\t\t$(this._ibody).find('iframe:visible').filter(function () {\n\t\t\t\treturn $(this).css('visibility') !== 'hidden';\n\t\t\t}).each(function () {\n\t\t\t\tvar iHeight = $(this).height();\n\t\t\t\tif (iHeight > height) {\n\t\t\t\t\theight = iHeight;\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn height;\n\t\t}\n\t}, {\n\t\tkey: \"off\",\n\t\tvalue: function off() {\n\t\t\tclearInterval(this._interval);\n\t\t\tthis._event.empty();\n\t\t}\n\t}]);\n\n\treturn HeightWatcher;\n}();\n\nvar WindowWrapper = function () {\n\tfunction WindowWrapper() {\n\t\t_classCallCheck(this, WindowWrapper);\n\n\t\tthis._$wnd = $(window);\n\t\tthis._$html = $('html');\n\t\tthis._$head = $('head');\n\t\tthis._scrollTop = 0;\n\t\tthis._scrollLeft = 0;\n\n\t\tthis._$scrollBarStyle = $(\"\").appendTo(this._$head);\n\t\tthis._$positionStyle = $(\"\").appendTo(this._$head);\n\t\t// this._useFixedLayout = /(iPod|iPhone|iPad)/.test(navigator.userAgent);\n\t\tthis._useFixedLayout = Object(__WEBPACK_IMPORTED_MODULE_4__utils_utils__[\"c\" /* isMobile */])(); ///(iPod|iPhone|iPad)/.test(navigator.userAgent);\n\t}\n\n\t_createClass(WindowWrapper, [{\n\t\tkey: \"on\",\n\t\tvalue: function on() {\n\t\t\tif (this._useFixedLayout) {\n\t\t\t\tthis._scrollTop = this._$wnd.scrollTop();\n\t\t\t\tthis._scrollLeft = this._$wnd.scrollLeft();\n\t\t\t\tthis._applyPositionStyle();\n\t\t\t\tthis._$wnd.scrollTop(0).scrollLeft(0);\n\t\t\t}\n\t\t\tthis._applyScrollbarStyle();\n\n\t\t\tthis._$html.toggleClass('zdialog-scrollbar-fix', this._hasScrollBar()).toggleClass('zdialog-position-fix', this._useFixedLayout).addClass('zdialog-open');\n\t\t}\n\t}, {\n\t\tkey: \"off\",\n\t\tvalue: function off() {\n\t\t\tthis._$html.removeClass('zdialog-scrollbar-fix').removeClass('zdialog-position-fix').removeClass('zdialog-open');\n\t\t\tif (this._useFixedLayout) {\n\t\t\t\tthis._$wnd.scrollTop(this._scrollTop).scrollLeft(this._scrollLeft);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: \"_applyScrollbarStyle\",\n\t\tvalue: function _applyScrollbarStyle() {\n\t\t\tvar scrollBarWidth = getScrollBarWidth();\n\t\t\t// language=CSS\n\t\t\tthis._$scrollBarStyle.html(\"\\n.zdialog-scrollbar-fix {\\n\\tpadding-right: \" + scrollBarWidth + \"px;\\n}\\n\");\n\t\t}\n\t}, {\n\t\tkey: \"_applyPositionStyle\",\n\t\tvalue: function _applyPositionStyle() {\n\t\t\t// language=CSS\n\t\t\tthis._$positionStyle.html(\"\\n.zdialog-position-fix {\\n\\tposition: fixed;\\n\\twidth: 100%;\\n\\theight: 100%;\\n\\ttop: -\" + this._scrollTop + \"px;\\n\\tleft: -\" + this._scrollLeft + \"px;\\n}\\n\");\n\t\t}\n\t}, {\n\t\tkey: \"_hasScrollBar\",\n\t\tvalue: function _hasScrollBar() {\n\t\t\treturn hasScrollBar(this._$html);\n\t\t}\n\t}]);\n\n\treturn WindowWrapper;\n}();\n\nfunction getScrollBarWidth() {\n\tvar $outer = $('
').css({ visibility: 'hidden', width: 100, overflow: 'scroll' }).appendTo('body'),\n\t widthWithScroll = $('
').css({ width: '100%' }).appendTo($outer).outerWidth();\n\t$outer.remove();\n\treturn 100 - widthWithScroll;\n}\n\nfunction hasScrollBar(el) {\n\tvar $el = $(el);\n\treturn $el.length > 0 ? $el[0].scrollHeight > $(window).height() : false;\n}\n\nvar dialogManager = new DialogManager();\n\n__WEBPACK_IMPORTED_MODULE_2_lib_knockout___default.a.components.register('zdialog-wrapper', {\n\ttemplate: \"\\n
\\n
\\n
\\n\\t
\\n\\t\\t
\\n\\t
\\n
\\n\".trim()\n});\n__WEBPACK_IMPORTED_MODULE_2_lib_knockout___default.a.components.register('zdialog', {\n\ttemplate: \"\\n
\\n
\\n\".trim()\n});\n__WEBPACK_IMPORTED_MODULE_2_lib_knockout___default.a.components.register('zdialog-content-iframe', {\n\ttemplate: \"\\n
\\n\\n\".trim()\n});\n__WEBPACK_IMPORTED_MODULE_2_lib_knockout___default.a.components.register('zdialog-content-html', {\n\ttemplate: \"\\n\\n

\\n\\t\\n\\t
\\n

\\n\\n\\n
\\n\\n
\\n\".trim()\n});\n\n/***/ }),\n\n/***/ \"i4G7\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"/*!\\n * jQuery Cookie Plugin v1.4.1\\n * https://github.com/carhartl/jquery-cookie\\n *\\n * Copyright 2013 Klaus Hartl\\n * Released under the MIT license\\n */\\n(function (factory) {\\n\\tif (typeof define === 'function' && define.amd) {\\n\\t\\t// AMD\\n\\t\\tdefine(['jquery'], factory);\\n\\t} else if (typeof exports === 'object') {\\n\\t\\t// CommonJS\\n\\t\\tfactory(require('jquery'));\\n\\t} else {\\n\\t\\t// Browser globals\\n\\t\\tfactory(jQuery);\\n\\t}\\n}(function ($) {\\n\\n\\tvar pluses = /\\\\+/g;\\n\\n\\tfunction encode(s) {\\n\\t\\treturn config.raw ? s : encodeURIComponent(s);\\n\\t}\\n\\n\\tfunction decode(s) {\\n\\t\\treturn config.raw ? s : decodeURIComponent(s);\\n\\t}\\n\\n\\tfunction stringifyCookieValue(value) {\\n\\t\\treturn encode(config.json ? JSON.stringify(value) : String(value));\\n\\t}\\n\\n\\tfunction parseCookieValue(s) {\\n\\t\\tif (s.indexOf('\\\"') === 0) {\\n\\t\\t\\t// This is a quoted cookie as according to RFC2068, unescape...\\n\\t\\t\\ts = s.slice(1, -1).replace(/\\\\\\\\\\\"/g, '\\\"').replace(/\\\\\\\\\\\\\\\\/g, '\\\\\\\\');\\n\\t\\t}\\n\\n\\t\\ttry {\\n\\t\\t\\t// Replace server-side written pluses with spaces.\\n\\t\\t\\t// If we can't decode the cookie, ignore it, it's unusable.\\n\\t\\t\\t// If we can't parse the cookie, ignore it, it's unusable.\\n\\t\\t\\ts = decodeURIComponent(s.replace(pluses, ' '));\\n\\t\\t\\treturn config.json ? JSON.parse(s) : s;\\n\\t\\t} catch(e) {}\\n\\t}\\n\\n\\tfunction read(s, converter) {\\n\\t\\tvar value = config.raw ? s : parseCookieValue(s);\\n\\t\\treturn $.isFunction(converter) ? converter(value) : value;\\n\\t}\\n\\n\\tvar config = $.cookie = function (key, value, options) {\\n\\n\\t\\t// Write\\n\\n\\t\\tif (value !== undefined && !$.isFunction(value)) {\\n\\t\\t\\toptions = $.extend({}, config.defaults, options);\\n\\n\\t\\t\\tif (typeof options.expires === 'number') {\\n\\t\\t\\t\\tvar days = options.expires, t = options.expires = new Date();\\n\\t\\t\\t\\tt.setTime(+t + days * 864e+5);\\n\\t\\t\\t}\\n\\n\\t\\t\\treturn (document.cookie = [\\n\\t\\t\\t\\tencode(key), '=', stringifyCookieValue(value),\\n\\t\\t\\t\\toptions.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE\\n\\t\\t\\t\\toptions.path ? '; path=' + options.path : '',\\n\\t\\t\\t\\toptions.domain ? '; domain=' + options.domain : '',\\n\\t\\t\\t\\toptions.secure ? '; secure' : ''\\n\\t\\t\\t].join(''));\\n\\t\\t}\\n\\n\\t\\t// Read\\n\\n\\t\\tvar result = key ? undefined : {};\\n\\n\\t\\t// To prevent the for loop in the first place assign an empty array\\n\\t\\t// in case there are no cookies at all. Also prevents odd result when\\n\\t\\t// calling $.cookie().\\n\\t\\tvar cookies = document.cookie ? document.cookie.split('; ') : [];\\n\\n\\t\\tfor (var i = 0, l = cookies.length; i < l; i++) {\\n\\t\\t\\tvar parts = cookies[i].split('=');\\n\\t\\t\\tvar name = decode(parts.shift());\\n\\t\\t\\tvar cookie = parts.join('=');\\n\\n\\t\\t\\tif (key && key === name) {\\n\\t\\t\\t\\t// If second argument (value) is a function it's a converter...\\n\\t\\t\\t\\tresult = read(cookie, value);\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Prevent storing a cookie that we couldn't decode.\\n\\t\\t\\tif (!key && (cookie = read(cookie)) !== undefined) {\\n\\t\\t\\t\\tresult[name] = cookie;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\treturn result;\\n\\t};\\n\\n\\tconfig.defaults = {};\\n\\n\\t$.removeCookie = function (key, options) {\\n\\t\\tif ($.cookie(key) === undefined) {\\n\\t\\t\\treturn false;\\n\\t\\t}\\n\\n\\t\\t// Must not alter options, thus extending a fresh object...\\n\\t\\t$.cookie(key, '', $.extend({}, options, { expires: -1 }));\\n\\t\\treturn !$.cookie(key);\\n\\t};\\n\\n}));\\n\"\n\n/***/ }),\n\n/***/ \"i8fT\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"(function($) {\\r\\n $.fn.urlconverter = function(maxlength) {\\r\\n return this.each(function() {\\r\\n let text = $(this).html();\\r\\n if(text) {\\r\\n text = text.replace(\\\"&\\\", \\\"&\\\");\\r\\n $(this).html(text.replace(/(https?:\\\\/\\\\/)?([\\\\da-z\\\\.\\\\-@]+)\\\\.([a-z\\\\.]{2,6})([\\\\?+=&%#\\\\/\\\\wА-Яа-яёЁ\\\\.;\\\\-]*)*\\\\/?/g, function (s) {\\r\\n let st = s;\\r\\n\\r\\n if (s.length > maxlength) {\\r\\n st = s.slice(0, maxlength) + \\\"...\\\";\\r\\n }\\r\\n\\r\\n if (!/^(https?:\\\\/\\\\/)/.test(s)) {\\r\\n if(s.indexOf('@') !== -1) {\\r\\n s = \\\"mailto:\\\" + s;\\r\\n } else {\\r\\n s = \\\"http://\\\" + s;\\r\\n }\\r\\n }\\r\\n\\r\\n return \\\"\\\" + st + \\\"\\\";\\r\\n }));\\r\\n }\\r\\n });\\r\\n };\\r\\n}(jQuery));\\r\\n\"\n\n/***/ }),\n\n/***/ \"iOFR\":\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ \"kvOq\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__sale__ = __webpack_require__(\"Jkdx\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__article__ = __webpack_require__(\"FE6W\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__contest__ = __webpack_require__(\"mzgk\");\n/* harmony reexport (module object) */ __webpack_require__.d(__webpack_exports__, \"sale\", function() { return __WEBPACK_IMPORTED_MODULE_0__sale__; });\n/* harmony reexport (module object) */ __webpack_require__.d(__webpack_exports__, \"article\", function() { return __WEBPACK_IMPORTED_MODULE_1__article__; });\n/* harmony reexport (module object) */ __webpack_require__.d(__webpack_exports__, \"contest\", function() { return __WEBPACK_IMPORTED_MODULE_2__contest__; });\n\n\n\n\n\n\n/***/ }),\n\n/***/ \"l4Yc\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__loading_less__ = __webpack_require__(\"iOFR\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__loading_less___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__loading_less__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils_utils__ = __webpack_require__(\"YnTO\");\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n\n\n\nvar $el = void 0;\nvar counter = 0;\nvar iframeOverride = Object(__WEBPACK_IMPORTED_MODULE_1__utils_utils__[\"b\" /* checkIsIframe */])() ? window.top.zde.loading : {};\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (_extends({\n\t/**\n * Shows loading spinner\n */\n\tshow: function show() {\n\t\tif (!$el) {\n\t\t\t$el = $('
').appendTo('body');\n\t\t\t/*$el = $(`
\n
\n
\n
\n
`).appendTo('body');*/\n\t\t}\n\t\tcounter++;\n\t},\n\n\t/**\n * Shows loading spinner\n */\n\thide: function hide() {\n\t\tif ($el && --counter <= 0) {\n\t\t\t$el.addClass('zloader-closing');\n\t\t\t// let animation finish and remove the element\n\t\t\tvar $element = $el;\n\t\t\tsetTimeout(function () {\n\t\t\t\t$element.remove();\n\t\t\t}, 1000);\n\t\t\t$el = null;\n\t\t\tcounter = 0;\n\t\t}\n\t}\n\n}, iframeOverride));\n\n/***/ }),\n\n/***/ \"lNzi\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"b\"] = initSaleAdminPanelForList;\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = initSaleAdminPanel;\n/* unused harmony export initSaleTemplatesCopy */\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_clipboard__ = __webpack_require__(\"oqjq\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_clipboard___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_clipboard__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_lib_underscore__ = __webpack_require__(\"X0GP\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_lib_underscore___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_lib_underscore__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__core_widgets_loading__ = __webpack_require__(\"l4Yc\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__core_widgets_notifier__ = __webpack_require__(\"2uje\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__core_utils_url__ = __webpack_require__(\"FYi7\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__core_widgets_dialog__ = __webpack_require__(\"fokk\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__core_utils_globals__ = __webpack_require__(\"TxBK\");\n\n\n\n\n\n\n\n\nfunction initSaleAdminPanelForList($listWrapper, selector) {\n\t$listWrapper = $($listWrapper);\n\t$listWrapper.on('click', selector + ' [rel=change-status]', function () {\n\t\tonClickChangeStatus($(this));\n\t});\n}\n\nfunction initSaleAdminPanel(selector) {\n\tvar $wrap = $(selector);\n\tif (!$wrap || !$wrap.length) {\n\t\treturn;\n\t}\n\n\t$wrap.find('[rel=change-status]').on('click', function () {\n\t\tonClickChangeStatus($(this));\n\t});\n\n\tinitSaleTemplatesCopy($wrap.find('[rel=copy-template]'));\n}\n\nfunction onClickChangeStatus($wrap) {\n\tif (!$wrap || !$wrap.length || $wrap.data('isWorking')) {\n\t\treturn;\n\t}\n\tvar id = $wrap.data('pageId');\n\tvar $status = $wrap.find('[rel=page-status]');\n\tvar status = $status.text();\n\t$wrap.data('isWorking', true);\n\t__WEBPACK_IMPORTED_MODULE_2__core_widgets_loading__[\"a\" /* default */].show();\n\t$.post(Object(__WEBPACK_IMPORTED_MODULE_4__core_utils_url__[\"g\" /* siteUrl */])('blog/changePageStatus'), { id: id, status: status }, null, 'json').always(__WEBPACK_IMPORTED_MODULE_2__core_widgets_loading__[\"a\" /* default */].hide).fail(__WEBPACK_IMPORTED_MODULE_3__core_widgets_notifier__[\"a\" /* Notifier */].errorXHR).done(function (response) {\n\t\tif (!response || !response.success) {\n\t\t\t__WEBPACK_IMPORTED_MODULE_3__core_widgets_notifier__[\"a\" /* Notifier */].error();\n\t\t} else {\n\t\t\tvar newStatus = response.status;\n\t\t\t$status.text(newStatus);\n\t\t\t__WEBPACK_IMPORTED_MODULE_3__core_widgets_notifier__[\"a\" /* Notifier */].success('Статус изменен на ' + newStatus);\n\t\t\t$wrap.data('isWorking', false);\n\t\t}\n\t});\n}\n\n/**\n * Initialize copy-template admin block\n * @param {JQuery} $wrap\n */\nfunction initSaleTemplatesCopy($wrap) {\n\tif (!$wrap || !$wrap.length) {\n\t\treturn;\n\t}\n\tvar items = Object(__WEBPACK_IMPORTED_MODULE_6__core_utils_globals__[\"a\" /* globals */])('saleTemplateItems');\n\tif (!items) {\n\t\treturn;\n\t}\n\tvar $select = $wrap.find('select[rel=template-items]');\n\t$.each(items, function (id, name) {\n\t\t$select.append($('').attr('value', id).text(name));\n\t});\n\n\tvar clipboard = new __WEBPACK_IMPORTED_MODULE_0_clipboard___default.a('#btnCopySaleTemplate', {\n\t\ttext: function text() {\n\t\t\treturn $wrap.data('content');\n\t\t}\n\t});\n\tvar page_id = $wrap.data('pageId');\n\tvar $buttons = $wrap.find('button.main');\n\tvar $buttonsTg = $wrap.find('button.tg');\n\tvar zresponse = '';\n\t$select.on('change', function () {\n\t\t$buttons.prop('disabled', true);\n\t\t$buttonsTg.prop('disabled', true);\n\t\tvar template_id = $(this).val();\n\t\tif (!template_id) {\n\t\t\treturn;\n\t\t}\n\t\t__WEBPACK_IMPORTED_MODULE_2__core_widgets_loading__[\"a\" /* default */].show();\n\t\tvar selected = $(this).val();\n\t\tvar text = $(this).find('option[value=\"' + selected + '\"]').text();\n\t\t$.get(Object(__WEBPACK_IMPORTED_MODULE_4__core_utils_url__[\"g\" /* siteUrl */])('sale/ajax_get_template'), { page_id: page_id, template_id: template_id }, null, 'json').always(__WEBPACK_IMPORTED_MODULE_2__core_widgets_loading__[\"a\" /* default */].hide).fail(__WEBPACK_IMPORTED_MODULE_3__core_widgets_notifier__[\"a\" /* Notifier */].errorXHR).done(function (response) {\n\t\t\t$wrap.data('content', response['content']);\n\t\t\t$buttons.prop('disabled', false);\n\t\t\tzresponse = response.content;\n\t\t\tif (text.indexOf('TG') + 1) {\n\t\t\t\t$buttonsTg.prop('disabled', false);\n\t\t\t}\n\t\t});\n\t});\n\tclipboard.on('success', function (e) {\n\t\t__WEBPACK_IMPORTED_MODULE_3__core_widgets_notifier__[\"a\" /* Notifier */].success('Шаблон скопирован в буффер обмена');\n\t});\n\t$wrap.find('[rel=btn-view-template]').on('click', function () {\n\t\tvar content = __WEBPACK_IMPORTED_MODULE_1_lib_underscore___default.a.escape($wrap.data('content'));\n\t\tObject(__WEBPACK_IMPORTED_MODULE_5__core_widgets_dialog__[\"openHtmlDialog\"])(\"
\" + content + \"
\");\n\t});\n\t$('#btn-tg-test').click(function () {\n\t\tvar request = {\n\t\t\ttext: zresponse,\n\t\t\tchat_id: '-1001283636934',\n\t\t\tparse_mode: 'Markdown'\n\t\t};\n\n\t\t$.post(Object(__WEBPACK_IMPORTED_MODULE_4__core_utils_url__[\"g\" /* siteUrl */])('blog/telegramPost'), request, function (response) {\n\t\t\tupdateResponse(response);\n\t\t}, 'json');\n\t});\n\t$('#btn-tg-prod').click(function () {\n\t\tvar request = {\n\t\t\ttext: zresponse,\n\t\t\tchat_id: '-1001220675019',\n\t\t\tparse_mode: 'Markdown'\n\t\t};\n\n\t\t$.post(Object(__WEBPACK_IMPORTED_MODULE_4__core_utils_url__[\"g\" /* siteUrl */])('blog/telegramPost'), request, function (response) {\n\t\t\tupdateResponse(response);\n\t\t}, 'json');\n\t});\n\n\tfunction updateResponse(response) {\n\t\tif (response.success) {\n\t\t\tzde.notifier.success('Сообщение отправлено');\n\t\t} else {\n\t\t\tzde.notifier.error('Произошла ошибка');\n\t\t}\n\t}\n}\n\n/***/ }),\n\n/***/ \"mvuq\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = init;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery__ = __webpack_require__(\"0iPh\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_jquery__);\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n/**\n *\n * @param {object} options\n * @return {LastCommentsViewModel}\n */\nfunction init(options) {\n var o = _extends({\n heightTarget: '.layout-content',\n commentsType: 'all',\n reviewType: null\n }, options);\n\n return new LastCommentsViewModel(o.heightTarget, o.commentsType, o.reviewType);\n}\n\nvar LastCommentsViewModel = function () {\n function LastCommentsViewModel(heightTarget, commentsType, reviewType) {\n var _this = this;\n\n _classCallCheck(this, LastCommentsViewModel);\n\n this._$wrapper = __WEBPACK_IMPORTED_MODULE_0_jquery___default()('#commentsWrapper');\n this.needsLoading = true;\n this.allVisible = true;\n this.heightTarget = null;\n\n var commentsPerPage = 50;\n\n this.heightTarget = __WEBPACK_IMPORTED_MODULE_0_jquery___default()(heightTarget);\n\n this._prepareCommentBlocks(this._$wrapper.children('.comment-item'));\n this.fit();\n\n this._$wrapper.zInfiniteScroll({\n selector: '.comment-item',\n checkViewport: false,\n enabled: function enabled() {\n if (!_this.allVisible) {\n _this.fit();\n }\n return _this.needsLoading && _this.allVisible;\n },\n maxAutoloadPages: 100,\n loading: '#lastCommentsScrollLoader',\n fetch: function fetch(page, callback) {\n __WEBPACK_IMPORTED_MODULE_0_jquery___default.a.get(_this._$wrapper.data('load-url'), {\n offset: (page - 1) * commentsPerPage,\n count: commentsPerPage,\n comments_type: commentsType,\n review_type: reviewType,\n new_layout: 1\n }, function (response) {\n var $blocks = __WEBPACK_IMPORTED_MODULE_0_jquery___default()(response['html']);\n callback($blocks);\n }, 'json');\n },\n show: function show($blocks) {\n $blocks = $blocks.filter('.comment-item');\n _this.fit();\n _this._$wrapper.append($blocks);\n _this._prepareCommentBlocks($blocks);\n _this.fit();\n return $blocks.length;\n }\n });\n\n __WEBPACK_IMPORTED_MODULE_0_jquery___default()(document).on('heightTargetUpdated', function () {\n _this.fit();\n });\n }\n\n _createClass(LastCommentsViewModel, [{\n key: '_prepareCommentBlocks',\n value: function _prepareCommentBlocks($blocks) {\n $blocks.each(function () {\n var $this = __WEBPACK_IMPORTED_MODULE_0_jquery___default()(this);\n $this.data('height', $this.outerHeight(true));\n });\n }\n }, {\n key: 'fit',\n value: function fit() {\n var $content = this.heightTarget;\n var $comments = this._$wrapper.children('.comment-item');\n\n var contentBottom = $content.offset().top + $content.outerHeight();\n var top = this._$wrapper.offset().top;\n var commentsBottom = top + this._$wrapper.outerHeight();\n var $item = void 0;\n var result = 0;\n\n var commentsHeight = this._$wrapper.outerHeight();\n\n if (commentsBottom > contentBottom) {\n // hide elements one by one while comments column is longer\n do {\n $item = $comments.filter(':visible').last();\n if ($item.length === 0) {\n break;\n }\n if (top + commentsHeight > contentBottom) {\n commentsHeight -= $item.data('height');\n $item.hide();\n result--;\n } else {\n break;\n }\n } while (true);\n } else if (commentsBottom < contentBottom) {\n // show elements one by one while comments column is shorter\n do {\n $item = $comments.filter(':hidden').first();\n if ($item.length === 0) {\n break;\n }\n commentsHeight += $item.data('height');\n if (top + commentsHeight <= contentBottom) {\n $item.show();\n result++;\n } else {\n break;\n }\n } while (true);\n }\n\n this.needsLoading = result >= 0;\n this.allVisible = $comments.filter(':hidden').length === 0;\n return result;\n }\n }]);\n\n return LastCommentsViewModel;\n}();\n\n/***/ }),\n\n/***/ \"mzgk\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony export (immutable) */ __webpack_exports__[\"init\"] = init;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__core_utils_logger__ = __webpack_require__(\"5wqq\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__pagecomments__ = __webpack_require__(\"NdAU\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__sidebar__ = __webpack_require__(\"J9kM\");\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n\n\n\n\nvar logger = Object(__WEBPACK_IMPORTED_MODULE_0__core_utils_logger__[\"a\" /* newLogger */])('Contest page');\n\nfunction init(options) {\n\tvar o = _extends({\n\t\tpage: {},\n\t\tcomments: []\n\t}, options);\n\n\tlogger.log('init', o);\n\n\t__WEBPACK_IMPORTED_MODULE_1__pagecomments__[\"a\" /* init */]({ page: o.page, comments: o.comments });\n\tsetTimeout(__WEBPACK_IMPORTED_MODULE_2__sidebar__[\"a\" /* init */]);\n}\n\n/***/ }),\n\n/***/ \"oN+n\":\n/***/ (function(module, exports) {\n\n/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\nmodule.exports = function(src) {\n\tfunction log(error) {\n\t\t(typeof console !== \"undefined\")\n\t\t&& (console.error || console.log)(\"[Script Loader]\", error);\n\t}\n\n\t// Check for IE =< 8\n\tfunction isIE() {\n\t\treturn typeof attachEvent !== \"undefined\" && typeof addEventListener === \"undefined\";\n\t}\n\n\ttry {\n\t\tif (typeof execScript !== \"undefined\" && isIE()) {\n\t\t\texecScript(src);\n\t\t} else if (typeof eval !== \"undefined\") {\n\t\t\teval.call(null, src);\n\t\t} else {\n\t\t\tlog(\"EvalError: No eval function available\");\n\t\t}\n\t} catch (error) {\n\t\tlog(error);\n\t}\n}\n\n\n/***/ }),\n\n/***/ \"og09\":\n/***/ (function(module, exports) {\n\nmodule.exports = toastr;\n\n/***/ }),\n\n/***/ \"oqjq\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {\n if (true) {\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [module, __webpack_require__(\"qqFi\"), __webpack_require__(\"e2Zi\"), __webpack_require__(\"PtfZ\")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if (typeof exports !== \"undefined\") {\n factory(module, require('./clipboard-action'), require('tiny-emitter'), require('good-listener'));\n } else {\n var mod = {\n exports: {}\n };\n factory(mod, global.clipboardAction, global.tinyEmitter, global.goodListener);\n global.clipboard = mod.exports;\n }\n})(this, function (module, _clipboardAction, _tinyEmitter, _goodListener) {\n 'use strict';\n\n var _clipboardAction2 = _interopRequireDefault(_clipboardAction);\n\n var _tinyEmitter2 = _interopRequireDefault(_tinyEmitter);\n\n var _goodListener2 = _interopRequireDefault(_goodListener);\n\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n }\n\n var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n var _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n\n function _possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n }\n\n function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n }\n\n var Clipboard = function (_Emitter) {\n _inherits(Clipboard, _Emitter);\n\n /**\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n * @param {Object} options\n */\n function Clipboard(trigger, options) {\n _classCallCheck(this, Clipboard);\n\n var _this = _possibleConstructorReturn(this, (Clipboard.__proto__ || Object.getPrototypeOf(Clipboard)).call(this));\n\n _this.resolveOptions(options);\n _this.listenClick(trigger);\n return _this;\n }\n\n /**\n * Defines if attributes would be resolved using internal setter functions\n * or custom functions that were passed in the constructor.\n * @param {Object} options\n */\n\n\n _createClass(Clipboard, [{\n key: 'resolveOptions',\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this.action = typeof options.action === 'function' ? options.action : this.defaultAction;\n this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;\n this.text = typeof options.text === 'function' ? options.text : this.defaultText;\n this.container = _typeof(options.container) === 'object' ? options.container : document.body;\n }\n }, {\n key: 'listenClick',\n value: function listenClick(trigger) {\n var _this2 = this;\n\n this.listener = (0, _goodListener2.default)(trigger, 'click', function (e) {\n return _this2.onClick(e);\n });\n }\n }, {\n key: 'onClick',\n value: function onClick(e) {\n var trigger = e.delegateTarget || e.currentTarget;\n\n if (this.clipboardAction) {\n this.clipboardAction = null;\n }\n\n this.clipboardAction = new _clipboardAction2.default({\n action: this.action(trigger),\n target: this.target(trigger),\n text: this.text(trigger),\n container: this.container,\n trigger: trigger,\n emitter: this\n });\n }\n }, {\n key: 'defaultAction',\n value: function defaultAction(trigger) {\n return getAttributeValue('action', trigger);\n }\n }, {\n key: 'defaultTarget',\n value: function defaultTarget(trigger) {\n var selector = getAttributeValue('target', trigger);\n\n if (selector) {\n return document.querySelector(selector);\n }\n }\n }, {\n key: 'defaultText',\n value: function defaultText(trigger) {\n return getAttributeValue('text', trigger);\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.listener.destroy();\n\n if (this.clipboardAction) {\n this.clipboardAction.destroy();\n this.clipboardAction = null;\n }\n }\n }], [{\n key: 'isSupported',\n value: function isSupported() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];\n\n var actions = typeof action === 'string' ? [action] : action;\n var support = !!document.queryCommandSupported;\n\n actions.forEach(function (action) {\n support = support && !!document.queryCommandSupported(action);\n });\n\n return support;\n }\n }]);\n\n return Clipboard;\n }(_tinyEmitter2.default);\n\n /**\n * Helper function to retrieve attribute value.\n * @param {String} suffix\n * @param {Element} element\n */\n function getAttributeValue(suffix, element) {\n var attribute = 'data-clipboard-' + suffix;\n\n if (!element.hasAttribute(attribute)) {\n return;\n }\n\n return element.getAttribute(attribute);\n }\n\n module.exports = Clipboard;\n});\n\n/***/ }),\n\n/***/ \"q/mW\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"/* Soon v1.9.0 - Soon, Animated Responsive Countdowns, jQuery\\n * Copyright (c) 2016 Rik Schennink - http://rikschennink.nl/products/soon\\n */\\n!function(a,b,c){function d(){H!==window.innerWidth&&(H=window.innerWidth,g())}function e(a,b,c,d){var e=parseInt(getComputedStyle(document.documentElement).fontSize,10)/16,f=parseInt(getComputedStyle(b).fontSize,10)/16/e,g=d/b.scrollWidth,h=g*f;return 4>h?(a.style.fontSize=\\\"\\\",c.redraw(),!1):(a.style.fontSize=h+\\\"rem\\\",a.setAttribute(\\\"data-scale-rounded\\\",Math.round(h).toString()),c.redraw(),!0)}function f(a,b){if(!B.isSlow()){for(var c,d,f=window.getComputedStyle(a.parentNode),g=parseInt(f.getPropertyValue(\\\"padding-left\\\"),10),h=parseInt(f.getPropertyValue(\\\"padding-right\\\"),10),i=a.parentNode.clientWidth-g-h,j=a.getAttribute(\\\"data-scale-max\\\"),k=a.getAttribute(\\\"data-scale-hide\\\"),l=j?I.indexOf(j):J,m=a.querySelectorAll(\\\".soon-group-sub\\\"),n=0,o=m.length,p=a.querySelector(\\\".soon-group\\\");o>n;n++)m[n].style.display=\\\"\\\";if(\\\"fit\\\"===j||\\\"fill\\\"===j){if(e(a,p,b,i))return;l=0}c=l;do a.setAttribute(\\\"data-scale\\\",I[c]),c++;while(p.scrollWidth>i&&I[c]);if(c!==l&&b.redraw(),!(p.scrollWidth<=i||\\\"none\\\"===k)){n=0,d=!1;do{if(\\\"0\\\"!==m[n].getAttribute(\\\"data-value\\\"))break;m[n].style.display=\\\"none\\\",d=!0,n++}while(p.scrollWidth>i&&o>n);if(d&&b.redraw(),\\\"empty\\\"!==k){n=o-1,d=!1;do m[n].style.display=\\\"none\\\",d=!0,n--;while(p.scrollWidth>i&&n>0);d&&b.redraw()}}}}function g(){for(var a=K.length-1;a>=0;a--)f(K[a].node,K[a].presenter)}function h(a){for(var b=0,c=K.length;c>b;b++)if(K[b].node===a)return b;return null}function i(a){for(var b=0,c=L.length;c>b;b++)if(L[b].node===a)return b;return null}function j(a){var b=h(a);return null===b?null:K[b]}function k(a){-1===a.className.indexOf(\\\"soon\\\")&&(a.className+=\\\" soon\\\"),B.supportsAnimation()||(a.className+=\\\" soon-no-animation\\\");var b=a.getAttribute(\\\"data-layout\\\");(!b||-1===b.indexOf(\\\"group\\\")&&-1===b.indexOf(\\\"line\\\"))&&(b||(b=\\\"\\\"),a.setAttribute(\\\"data-layout\\\",b+\\\" group\\\")),B.isSlow()&&(a.removeAttribute(\\\"data-visual\\\"),a.setAttribute(\\\"data-view\\\",\\\"text\\\"),a.className+=\\\" soon-slow-browser\\\")}function l(a,b,c){b[c]&&!a.getAttribute(\\\"data-\\\"+c)&&a.setAttribute(\\\"data-\\\"+c,b[c])}function m(a,b){return a.getAttribute(\\\"data-\\\"+b)}function n(a,b){var c=null!==a.due||null!==a.since,d=null;if(c)if(a.since){var e=a.now?a.now.valueOf():(new Date).valueOf();d=D.chain(function(b){return a.now?-b:b},D.offset(e),D.diff(a.since.valueOf()),function(a){return Math.abs(a)},function(a){return Math.max(0,a)},function(b){return a.callback.onTick(b,a.since),b},D.event(function(a){return 0===a},b),D.duration(new Date(e),a.since,a.format,a.cascade))}else d=D.chain(D.offset(a.now.valueOf()),D.diff(a.due.valueOf()),function(a){return Math.max(0,a)},function(b){return a.callback.onTick(b,a.due),b},D.event(function(a){return 0>=a},b),D.duration(a.now,a.due,a.format,a.cascade));else d=function(){var a=new Date;return[a.getHours(),a.getMinutes(),a.getSeconds()]},a.format=[\\\"h\\\",\\\"m\\\",\\\"s\\\"],a.separator=\\\":\\\";return d}function o(a,b){for(var c,d,e,f,g,h,i,j=null!==a.due||null!==a.since,k=n(a,b),l={type:\\\"group\\\",options:{transform:k,presenters:[]}},m=[],o=a.format.length,r=0;o>r;r++)h=a.format[r],i=r,c={type:\\\"group\\\",options:{className:\\\"soon-group-sub\\\",presenters:[]}},a.visual&&(c.options.presenters.push(p(a,h)),a.reflect&&c.options.presenters.push(p(a,h,\\\"soon-reflection\\\"))),d={type:\\\"text\\\",options:{className:\\\"soon-label\\\"}},d.options.transform=a.singular?D.plural(a.label[h],a.label[h+\\\"_s\\\"]):function(b){return function(){return a.label[b+\\\"_s\\\"]}}(h),e=q(a,h),f=null,a.reflect&&!a.visual&&(f=q(a,h,\\\"soon-reflection\\\")),c.options.presenters.push(e),f&&c.options.presenters.push(f),j&&c.options.presenters.push(d),a.separator&&(g={type:\\\"group\\\",options:{className:\\\"soon-group-separator\\\",presenters:[c]}},0!==i&&(a.reflect&&g.options.presenters.unshift({type:\\\"text\\\",options:{className:\\\"soon-separator soon-reflection\\\",transform:function(){return a.separator}}}),g.options.presenters.unshift({type:\\\"text\\\",options:{className:\\\"soon-separator\\\",transform:function(){return a.separator}}})),c=g),m.push(c);return l.options.presenters=m,l}function p(a,b,c){var d=a.visual.split(\\\" \\\"),e=d[0];return d.shift(),{type:e,options:{className:\\\"soon-visual \\\"+(c||\\\"\\\"),transform:D.chain(D.progress(B.MAX[b]),D.cap()),modifiers:d,animate:\\\"ms\\\"!==b}}}function q(a,b,c){var d=[];return a.face&&(d=a.face.split(\\\" \\\"),d.shift()),a.chars?{type:\\\"repeater\\\",options:{delay:\\\"text\\\"===a.view?0:50,className:\\\"soon-value \\\"+(c||\\\"\\\"),transform:D.chain(D.pad(a.padding[b]),D.chars()),presenter:{type:a.view,options:{modifiers:d}}}}:{type:\\\"group\\\",options:{className:\\\"soon-group-sub-sub soon-value \\\"+(c||\\\"\\\"),transform:D.pad(a.padding[b]),presenters:[{type:a.view,options:{modifiers:d}}]}}}function r(a,b,c,d){K.push({node:a,ticker:b,presenter:c,options:d})}function s(a){return new(t(a.type))(a.options||{})}function t(a){return C[a.charAt(0).toUpperCase()+a.slice(1)]}function u(a,b){var c=a.getElementsByClassName?a.getElementsByClassName(\\\"soon-placeholder\\\"):a.querySelectorAll(\\\"soon-placeholder\\\");c.length&&(c[0].innerHTML=\\\"\\\",a=c[0]);var d=s(b);return a.appendChild(d.getElement()),d}function v(a,b,c,d){var e=new F(function(a){b.setValue(a)},{rate:c});return r(a,e,b,d),e.start(),f(a,b),e}function w(a){var b,c,d=[\\\"labels\\\",\\\"padding\\\"],e=2,f={since:m(a,\\\"since\\\"),due:m(a,\\\"due\\\"),now:m(a,\\\"now\\\"),face:m(a,\\\"face\\\"),visual:m(a,\\\"visual\\\"),format:m(a,\\\"format\\\"),singular:\\\"true\\\"===m(a,\\\"singular\\\"),reflect:\\\"true\\\"===m(a,\\\"reflect\\\"),scaleMax:m(a,\\\"scale-max\\\"),scaleHide:m(a,\\\"scale-hide\\\"),separateChars:!(\\\"false\\\"===m(a,\\\"separate-chars\\\")),cascade:!(\\\"false\\\"===m(a,\\\"cascade\\\")),separator:m(a,\\\"separator\\\"),padding:!(\\\"false\\\"===m(a,\\\"padding\\\")),eventComplete:m(a,\\\"event-complete\\\"),eventTick:m(a,\\\"event-tick\\\")};for(var g in M)if(M.hasOwnProperty(g))for(b=M[g],c=0;e>c;c++)f[d[c]+b.option]=m(a,d[c]+\\\"-\\\"+b.option.toLowerCase());return A.create(a,f)}function x(a){var b;if(0===a.indexOf(\\\"in \\\")){var c=a.match(N),d=parseInt(c[1],10),e=c[2];return b=new Date,-1!==e.indexOf(\\\"hour\\\")?b.setHours(b.getHours()+d):-1!==e.indexOf(\\\"minute\\\")?b.setMinutes(b.getMinutes()+d):-1!==e.indexOf(\\\"second\\\")&&b.setSeconds(b.getSeconds()+d),b}if(-1!==a.indexOf(\\\"at \\\")){b=new Date;var f=b.getTime(),g=-1!==a.indexOf(\\\"reset\\\");a=a.replace(\\\"reset \\\",\\\"\\\");var h=a.split(\\\"at \\\"),i=h[1].match(O),j=parseInt(i[1],10),k=i[2]?parseInt(i[2],10):0,l=i[3]?parseInt(i[3],10):0,m=h[1].split(\\\" zone \\\");if(m&&(m=m[1]),h[0].length){var n=B.getDayIndex(h[0]),o=(n+7-b.getDay())%7;b.setDate(b.getDate()+o)}b.setHours(j),b.setMinutes(k),b.setSeconds(l),b.setMilliseconds(0),g&&f>=b.getTime()&&b.setHours(j+(h[0].length?168:24));var p=B.pad,q=b.getFullYear()+\\\"-\\\"+p(b.getMonth()+1)+\\\"-\\\"+p(b.getDate()),r=p(b.getHours())+\\\":\\\"+p(b.getMinutes())+\\\":\\\"+p(b.getSeconds());a=q+\\\"T\\\"+r+(m||\\\"\\\")}return B.isoToDate(a)}function y(a,b){if(0===b.indexOf(a))return\\\"\\\";if(\\\"w\\\"===a&&-1!==b.indexOf(\\\"M\\\"))return\\\"\\\";if(\\\"d\\\"===a){if(-1!==b.indexOf(\\\"w\\\"))return\\\"\\\";if(-1!==b.indexOf(\\\"M\\\"))return\\\"00\\\"}return null}function z(a,b,c){if(c&&-1!==G.indexOf(a))return c;var d=function(c){return function(){c(),A.destroy(a),A.create(a,b)}}(c);return G.push(a),d}if(document.querySelectorAll&&!a.Soon){var A={},B={},C={},D={},E={timer:0,cbs:[],register:function(a){E.cbs.push(a)},deregister:function(a){for(var b=E.cbs.length-1;b>=0;b--)E.cbs[b]===a&&E.cbs.splice(b,1)},onresize:function(){clearTimeout(E.timer),E.timer=setTimeout(function(){E.resize()},100)},resize:function(){for(var a=0,b=E.cbs.length;b>a;a++)E.cbs[a]()},init:function(){a.addEventListener&&a.addEventListener(\\\"resize\\\",E.onresize,!1)}};E.init(),Function.prototype.bind||(Function.prototype.bind=function(a){if(\\\"function\\\"!=typeof this)throw new TypeError(\\\"Function.prototype.bind - what is trying to be bound is not callable\\\");var b=Array.prototype.slice.call(arguments,1),c=this,d=function(){},e=function(){return c.apply(this instanceof d&&a?this:a,b.concat(Array.prototype.slice.call(arguments)))};return d.prototype=this.prototype,e.prototype=new d,e}),Array.prototype.indexOf||(Array.prototype.indexOf=function(a,b){var c;if(null==this)throw new TypeError('\\\"this\\\" is null or not defined');var d=Object(this),e=d.length>>>0;if(0===e)return-1;var f=+b||0;if(1/0===Math.abs(f)&&(f=0),f>=e)return-1;for(c=Math.max(f>=0?f:e-Math.abs(f),0);e>c;){if(c in d&&d[c]===a)return c;c++}return-1}),function(){function a(a){this.el=a;for(var b=a.className.replace(/^\\\\s+|\\\\s+$/g,\\\"\\\").split(/\\\\s+/),c=0;c0&&\\\"none\\\"!==a}function b(){var a=!1,b=\\\"animation\\\",d=\\\"\\\",e=\\\"Webkit Moz O ms Khtml\\\".split(\\\" \\\"),f=\\\"\\\",g=0,h=document.body,i=e.length;if(h.style.animationName!==c&&(a=!0),a===!1)for(;i>g;g++)if(h.style[e[g]+\\\"AnimationName\\\"]!==c){f=e[g],b=f+\\\"Animation\\\",d=\\\"-\\\"+f.toLowerCase()+\\\"-\\\",a=!0;break}return a}var d,e,f=\\\"textContent\\\"in document.documentElement,g=function(a){var b,c,d=/^(\\\\d{4}\\\\-\\\\d\\\\d\\\\-\\\\d\\\\d([tT ][\\\\d:\\\\.]*)?)([zZ]|([+\\\\-])(\\\\d\\\\d):(\\\\d\\\\d))?$/,e=d.exec(a)||[];if(e[1]){b=e[1].split(/\\\\D/);for(var f=0,g=b.length;g>f;f++)b[f]=parseInt(b[f],10)||0;return b[1]-=1,b=new Date(Date.UTC.apply(Date,b)),b.getDate()?(e[5]&&(c=60*parseInt(e[5],10),e[6]&&(c+=parseInt(e[6],10)),\\\"+\\\"==e[4]&&(c*=-1),c&&b.setUTCMinutes(b.getUTCMinutes()+c)),b):Number.NaN}return Number.NaN},h=new Date(\\\"2015-01-01T12:00:00.123+01:00\\\"),i=isNaN(h)?function(a){return g(a)}:function(a){return new Date(a)};\\\"undefined\\\"!=typeof document.hidden?(e=\\\"hidden\\\",d=\\\"visibilitychange\\\"):\\\"undefined\\\"!=typeof document.mozHidden?(e=\\\"mozHidden\\\",d=\\\"mozvisibilitychange\\\"):\\\"undefined\\\"!=typeof document.msHidden?(e=\\\"msHidden\\\",d=\\\"msvisibilitychange\\\"):\\\"undefined\\\"!=typeof document.webkitHidden&&(e=\\\"webkitHidden\\\",d=\\\"webkitvisibilitychange\\\");var j=!1,k=1,l=1e3*k,m=60*l,n=60*m,o=24*n,p=7*o,q={MAX:{y:100,M:12,w:52,d:365,h:24,m:60,s:60,ms:1e3},AMOUNT:{w:p,d:o,h:n,m:m,s:l,ms:k},NAMES:{y:\\\"years\\\",M:\\\"months\\\",w:\\\"weeks\\\",d:\\\"days\\\",h:\\\"hours\\\",m:\\\"minutes\\\",s:\\\"seconds\\\",ms:\\\"milliseconds\\\"},FORMATS:[\\\"y\\\",\\\"M\\\",\\\"w\\\",\\\"d\\\",\\\"h\\\",\\\"m\\\",\\\"s\\\",\\\"ms\\\"],CIRC:2*Math.PI,QUART:.5*Math.PI,DAYS:[\\\"su\\\",\\\"mo\\\",\\\"tu\\\",\\\"we\\\",\\\"th\\\",\\\"fr\\\",\\\"sa\\\"],setText:null,documentVisibilityEvent:d,pad:function(a){return(\\\"00\\\"+a).slice(-2)},getDayIndex:function(a){return this.DAYS.indexOf(a.substr(0,2))},isSlow:function(){return!f},supportsAnimation:function(){return j=b()&&a(),q.supportsAnimation=function(){return j},j},toArray:function(a){return Array.prototype.slice.call(a)},toBoolean:function(a){return\\\"string\\\"==typeof a?\\\"true\\\"===a:a},isoToDate:function(a){if(a.match(/(Z)|([+\\\\-][0-9]{2}:?[0-9]*$)/g))return i(a);a+=-1!==a.indexOf(\\\"T\\\")?\\\"Z\\\":\\\"\\\";var b=i(a);return this.dateToLocal(b)},dateToLocal:function(a){return new Date(a.getTime()+6e4*a.getTimezoneOffset())},prefix:function(){for(var a,b=[\\\"webkit\\\",\\\"Moz\\\",\\\"ms\\\",\\\"O\\\"],c=0,d=b.length,e=document.createElement(\\\"div\\\").style;d>c;c++)if(a=b[c]+\\\"Transform\\\",a in e)return b[c];return null}(),setTransform:function(a,b){a.style[this.prefix+\\\"Transform\\\"]=b,a.style.transform=b},setTransitionDelay:function(a,b){a.style[this.prefix+\\\"TransitionDelay\\\"]=b+\\\",\\\"+b+\\\",\\\"+b,a.style.TransitionDelay=b+\\\",\\\"+b+\\\",\\\"+b},getShadowProperties:function(a){if(a=a?a.match(/(-?\\\\d+px)|(rgba\\\\(.+\\\\))|(rgb\\\\(.+\\\\))|(#[abcdef\\\\d]+)/g):null,!a)return null;for(var b,c=0,d=a.length,e=[];d>c;c++)-1!==a[c].indexOf(\\\"px\\\")?e.push(parseInt(a[c],10)):b=a[c];return e.push(b),5===e.length&&e.splice(3,1),e},getDevicePixelRatio:function(){return window.devicePixelRatio||1},isDocumentHidden:function(){return e?document[e]:!1},triggerAnimation:function(a,b){a.classList.remove(b),window.requestAnimationFrame(function(){a.offsetLeft,a.classList.add(b)})},getBackingStoreRatio:function(a){return a.webkitBackingStorePixelRatio||a.mozBackingStorePixelRatio||a.msBackingStorePixelRatio||a.oBackingStorePixelRatio||a.backingStorePixelRatio||1},setShadow:function(a,b,c,d,e){a.shadowOffsetX=b,a.shadowOffsetY=c,a.shadowBlur=d,a.shadowColor=e},getColorBetween:function(a,b,c){function d(a,b){return a+Math.round((b-a)*c)}function e(a){a=Math.min(a,255),a=Math.max(a,0);var b=a.toString(16);return b.length<2&&(b=\\\"0\\\"+b),b}return\\\"#\\\"+e(d(a.r,b.r))+e(d(a.g,b.g))+e(d(a.b,b.b))},getGradientColors:function(a,b,c){for(var d=[],e=0,f=c,g=1/(f-1),h=0;f>e;e++)d[e]=this.getColorBetween(a,b,h),h+=g;return d},hexToRgb:function(a){var b=/^#?([a-f\\\\d]{2})([a-f\\\\d]{2})([a-f\\\\d]{2})$/i.exec(a);return b?{r:parseInt(b[1],16),g:parseInt(b[2],16),b:parseInt(b[3],16)}:null},drawGradientArc:function(a,b,c,d,e,f,g,h,i,j,k,l,m){if(!(g>h)){l&&this.drawArc(a,b,c,d,e,f,g,h,i,\\\"transparent\\\",l,m);for(var n,o,p,q,r,s,t,u=this.hexToRgb(j),v=this.hexToRgb(k),w=this.hexToRgb(this.getColorBetween(u,v,(g-e)/f)),x=this.hexToRgb(this.getColorBetween(u,v,(h-e)/f)),y=h-g,z=Math.ceil(30*y),A=this.getGradientColors(w,x,z),B=-this.QUART+this.CIRC*g,C=A.length,D=0,E=this.CIRC*y/C;C>D;D++)o=A[D],p=A[D+1]||o,q=b+Math.cos(B)*d,s=b+Math.cos(B+E)*d,r=c+Math.sin(B)*d,t=c+Math.sin(B+E)*d,a.beginPath(),n=a.createLinearGradient(q,r,s,t),n.addColorStop(0,o),n.addColorStop(1,p),a.lineCap=m,a.strokeStyle=n,a.arc(b,c,d,B-.005,B+E+.005),a.lineWidth=i,a.stroke(),a.closePath(),B+=E}},drawArc:function(a,b,c,d,e,f,g,h,i,j,k,l){if(!(g>h)){if(null!==j.gradient.colors&&\\\"follow\\\"===j.gradient.type)return void this.drawGradientArc(a,b,c,d,e,f,g,h,i,j.gradient.colors[0],j.gradient.colors[1],k,l);if(k){var m=\\\"transparent\\\"===j.fill?9999:0;a.save(),a.translate(m,0),this.setShadow(a,k[0]-m,k[1],k[2],k[3])}if(a.beginPath(),a.lineWidth=i,a.arc(b,c,d,-this.QUART+this.CIRC*g,-this.QUART+this.CIRC*h,!1),j.gradient.colors){var n=\\\"horizontal\\\"===j.gradient.type?a.createLinearGradient(0,d,2*d,d):a.createLinearGradient(d,0,d,2*d);n.addColorStop(0,j.gradient.colors[0]),n.addColorStop(1,j.gradient.colors[1]),a.strokeStyle=n}else a.strokeStyle=\\\"transparent\\\"===j.fill?\\\"#000\\\":j.fill;a.lineCap=l,a.stroke(),k&&a.restore()}},drawRing:function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){d+e>1&&(d-=-1+d+e,c+=.5*e);var q=c,r=c+d,s=b*d,t=.5-Math.abs(-.5+b),u=c+(s-t*e),v=c+(s+(1-t)*e);(g||k)&&(p?(this.drawArc(a,f,f,g,c,d,v,r,h,i,j,o),this.drawArc(a,f,f,k,c,d,q,u,l,m,n,o)):(this.drawArc(a,f,f,g,c,d,q,u,h,i,j,o),this.drawArc(a,f,f,k,c,d,v,r,l,m,n,o)))},setTextContent:function(){return f?function(a,b){a.textContent=b}:function(a,b){a.innerText=b}}()};return q}(),D.cap=function(a,b){return a=a||0,b=b||1,function(c){return Math.min(Math.max(c,a),b)}},D.chain=function(a){return function(){var b,c=a.toArray(arguments),d=c.length;return function(a){for(b=0;d>b;b++)a=c[b](a);return a}}}(B),D.chars=function(){return function(a){return(a+\\\"\\\").split(\\\"\\\")}},D.diff=function(a){return function(b){return a-b}},D.duplicate=function(a){var b,c=new Array(a);return function(d){for(b=a;b--;)c[b]=d;return c}},D.duration=function(a){function b(a,b){return a.setMonth(a.getMonth()+b),a}function c(a){return new Date(a.valueOf())}function d(a,b){return-1!==b.indexOf(a)}function e(a,d){var e,f,g=12*(d.getFullYear()-a.getFullYear())+(d.getMonth()-a.getMonth()),h=b(c(a),g);return 0>d-h?(e=b(c(a),g-1),f=(d-h)/(h-e)):(e=b(c(a),g+1),f=(d-h)/(e-h)),-(g+f)}var f=a.FORMATS,g=f.length,h={M:1,y:12};return function(i,j,k,l){var m=d(\\\"M\\\",k),n=d(\\\"y\\\",k);return function(j){var o,p,q,r,s,t,u=0,v=[];for((m||n||!l)&&(o=new Date(i.valueOf()+j),p=e(o,i),t=m?Math.floor(p):12*Math.floor(p/12),j=o.valueOf()-b(c(i),t).valueOf());g>u;u++)r=f[u],2>u?(q=Math.floor(p/h[r]),d(r,k)?(p-=q*h[r],v.push(Math.max(0,q))):l||(p-=q*h[r])):(s=a.AMOUNT[r],q=Math.floor(j/s),d(r,k)?(j%=s,v.push(Math.max(0,q))):l||(j%=s));return v}}}(B),D.event=function(a,b){return function(c){return a(c)&&b(),c}},D.modulate=function(a){return function(b){return parseInt(b,10)%2===0?a:\\\"\\\"}},D.now=function(){return function(){return(new Date).getTime()}},D.offset=function(a){return function(b){return a+b}},D.pad=function(a){return a=a||\\\"\\\",function(b){return(a+b).slice(-a.length)}},D.plural=function(a,b){return function(c){return 1===parseInt(c,10)?a:b}},D.progress=function(a,b){return function(c){return c=parseInt(c,10),b>a?c/b:(a-c)/a}},C.Console=function(){var a=function(a){this._transform=a.transform||function(a){return a}};return a.prototype={redraw:function(){},destroy:function(){return null},getElement:function(){return null},setValue:function(a){console.log(this._transform(a))}},a}(),C.Fill=function(a){var b=function(a){this._wrapper=document.createElement(\\\"span\\\"),this._wrapper.className=\\\"soon-fill \\\"+(a.className||\\\"\\\"),this._transform=a.transform||function(a){return a},this._direction=\\\"to-top\\\";for(var b=0,c=a.modifiers.length;c>b;b++)if(0===a.modifiers[b].indexOf(\\\"to-\\\")){this._direction=a.modifiers[b];break}this._fill=document.createElement(\\\"span\\\"),this._fill.className=\\\"soon-fill-inner\\\",this._progress=document.createElement(\\\"span\\\"),this._progress.className=\\\"soon-fill-progress\\\",this._fill.appendChild(this._progress),this._wrapper.appendChild(this._fill)};return b.prototype={redraw:function(){},destroy:function(){return this._wrapper},getElement:function(){return this._wrapper},setValue:function(b){var c,d=this._transform(b);switch(this._direction){case\\\"to-top\\\":c=\\\"translateY(\\\"+(100-100*d)+\\\"%)\\\";break;case\\\"to-top-right\\\":c=\\\"scale(1.45) rotateZ(-45deg) translateX(\\\"+(-100+100*d)+\\\"%)\\\";break;case\\\"to-top-left\\\":c=\\\"scale(1.45) rotateZ(45deg) translateX(\\\"+(100-100*d)+\\\"%)\\\";break;case\\\"to-left\\\":c=\\\"translateX(\\\"+(100-100*d)+\\\"%)\\\";break;case\\\"to-right\\\":c=\\\"translateX(\\\"+(-100+100*d)+\\\"%)\\\";break;case\\\"to-bottom-right\\\":c=\\\"scale(1.45) rotateZ(45deg) translateX(\\\"+(-100+100*d)+\\\"%)\\\";break;case\\\"to-bottom-left\\\":c=\\\"scale(1.45) rotateZ(-45deg) translateX(\\\"+(100-100*d)+\\\"%)\\\";break;case\\\"to-bottom\\\":c=\\\"translateY(\\\"+(-100+100*d)+\\\"%)\\\"}a.setTransform(this._progress,c)}},b}(B),C.Flip=function(a){var b=function(b){this._wrapper=document.createElement(\\\"span\\\"),this._wrapper.className=\\\"soon-flip \\\"+(b.className||\\\"\\\"),this._transform=b.transform||function(a){return a},this._inner=document.createElement(\\\"span\\\"),this._inner.className=\\\"soon-flip-inner\\\",this._card=document.createElement(\\\"span\\\"),this._card.className=\\\"soon-flip-card\\\",a.supportsAnimation()?(this._front=document.createElement(\\\"span\\\"),this._front.className=\\\"soon-flip-front soon-flip-face\\\",this._back=document.createElement(\\\"span\\\"),this._back.className=\\\"soon-flip-back soon-flip-face\\\",this._card.appendChild(this._front),this._card.appendChild(this._back),this._top=document.createElement(\\\"span\\\"),this._top.className=\\\"soon-flip-top soon-flip-face\\\",this._card.appendChild(this._top),this._bottom=document.createElement(\\\"span\\\"),this._bottom.className=\\\"soon-flip-bottom soon-flip-face\\\",this._card.appendChild(this._bottom)):(this._fallback=document.createElement(\\\"span\\\"),this._fallback.className=\\\"soon-flip-fallback\\\",this._card.appendChild(this._fallback)),this._bounding=document.createElement(\\\"span\\\"),this._bounding.className=\\\"soon-flip-bounding\\\",this._card.appendChild(this._bounding),this._inner.appendChild(this._card),this._wrapper.appendChild(this._inner),this._frontValue=null,this._backValue=null,this._boundingLength=0};return b.prototype={redraw:function(){},_setBoundingForValue:function(a){var b=(a+\\\"\\\").length;if(b!==this._boundingLength){this._boundingLength=b;for(var c=\\\"\\\",d=0;b>d;d++)c+=\\\"8\\\";this._bounding.textContent=c;var e=parseInt(getComputedStyle(this._card).fontSize,10),f=this._bounding.offsetWidth/e;this._inner.style.width=f+.1*(b-1)+\\\"em\\\"}},destroy:function(){return this._wrapper},getElement:function(){return this._wrapper},setValue:function(b){return b=this._transform(b),a.supportsAnimation()?this._frontValue?void(this._backValue&&this._backValue===b||this._frontValue===b||(this._backValue&&(this._bottom.textContent=this._backValue,this._front.textContent=this._backValue,this._frontValue=this._backValue),this._setBoundingForValue(b),this._top.textContent=b,this._back.textContent=b,this._backValue=b,a.triggerAnimation(this._inner,\\\"soon-flip-animate\\\"))):(this._bottom.textContent=b,this._front.textContent=b,this._frontValue=b,void this._setBoundingForValue(b)):(this._fallback.textContent=b,void this._setBoundingForValue(b))}},b}(B),C.Group=function(a){var b=function(a){this._wrapper=document.createElement(\\\"span\\\"),this._wrapper.className=\\\"soon-group \\\"+(a.className||\\\"\\\"),this._inner=document.createElement(\\\"span\\\"),this._inner.className=\\\"soon-group-inner\\\",this._wrapper.appendChild(this._inner),this._transform=a.transform||function(a){return a},this._presenters=a.presenters,this._presenterStorage=[]};return b.prototype={redraw:function(){for(var a=this._presenterStorage.length-1;a>=0;a--)this._presenterStorage[a].redraw()},destroy:function(){for(var a=this._presenterStorage.length-1;a>=0;a--)this._presenterStorage[a].destroy();return this._wrapper},getElement:function(){return this._wrapper},setValue:function(b){this._wrapper.setAttribute(\\\"data-value\\\",b),b=this._transform(b);for(var c,d=0,e=b instanceof Array,f=e?b.length:this._presenters.length;f>d;d++)c=this._presenterStorage[d],c||(c=a(this._presenters[d]),this._inner.appendChild(c.getElement()),this._presenterStorage[d]=c),c.setValue(e?b[d]:b)}},b}(s),C.Matrix=function(){var a={\\\"3x5\\\":{\\\" \\\":[[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],0:[[1,1,1],[1,0,1],[1,0,1],[1,0,1],[1,1,1]],1:[[1,1,0],[0,1,0],[0,1,0],[0,1,0],[0,1,0]],2:[[1,1,1],[0,0,1],[1,1,1],[1,0,0],[1,1,1]],3:[[1,1,1],[0,0,1],[1,1,1],[0,0,1],[1,1,1]],4:[[1,0,1],[1,0,1],[1,1,1],[0,0,1],[0,0,1]],5:[[1,1,1],[1,0,0],[1,1,1],[0,0,1],[1,1,1]],6:[[1,1,1],[1,0,0],[1,1,1],[1,0,1],[1,1,1]],7:[[1,1,1],[0,0,1],[0,0,1],[0,0,1],[0,0,1]],8:[[1,1,1],[1,0,1],[1,1,1],[1,0,1],[1,1,1]],9:[[1,1,1],[1,0,1],[1,1,1],[0,0,1],[1,1,1]]},\\\"5x7\\\":{\\\" \\\":[[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],0:[[0,1,1,1,0],[1,1,0,1,1],[1,1,0,1,1],[1,1,0,1,1],[1,1,0,1,1],[1,1,0,1,1],[0,1,1,1,0]],1:[[0,0,1,1,0],[0,1,1,1,0],[0,0,1,1,0],[0,0,1,1,0],[0,0,1,1,0],[0,0,1,1,0],[0,1,1,1,1]],2:[[0,1,1,1,0],[1,1,0,1,1],[0,0,0,1,1],[0,0,1,1,0],[0,1,1,0,0],[1,1,0,0,0],[1,1,1,1,1]],3:[[0,1,1,1,0],[1,1,0,1,1],[0,0,0,1,1],[0,0,1,1,0],[0,0,0,1,1],[1,1,0,1,1],[0,1,1,1,0]],4:[[0,0,1,1,1],[0,1,0,1,1],[1,1,0,1,1],[1,1,1,1,1],[0,0,0,1,1],[0,0,0,1,1],[0,0,0,1,1]],5:[[1,1,1,1,1],[1,1,0,0,0],[1,1,0,0,0],[1,1,1,1,0],[0,0,0,1,1],[1,1,0,1,1],[0,1,1,1,0]],6:[[0,1,1,1,0],[1,1,0,0,0],[1,1,1,1,0],[1,1,0,1,1],[1,1,0,1,1],[1,1,0,1,1],[0,1,1,1,0]],7:[[1,1,1,1,1],[0,0,0,1,1],[0,0,0,1,1],[0,0,1,1,0],[0,1,1,0,0],[1,1,0,0,0],[1,1,0,0,0]],8:[[0,1,1,1,0],[1,1,0,1,1],[1,1,0,1,1],[0,1,1,1,0],[1,1,0,1,1],[1,1,0,1,1],[0,1,1,1,0]],9:[[0,1,1,1,0],[1,1,0,1,1],[1,1,0,1,1],[1,1,0,1,1],[0,1,1,1,1],[0,0,0,1,1],[0,1,1,1,0]]}},b=function(){var b,c,d,e,f,g,h=[];for(d in a)if(a.hasOwnProperty(d)){for(b=a[d][0].length,c=a[d][0][0].length,g=\\\"\\\",e=0;b>e;e++){for(g+='',f=0;c>f;f++)g+='';g+=\\\"\\\"}h[d]=g}return h}(),c=function(a){this._wrapper=document.createElement(\\\"span\\\"),this._wrapper.className=\\\"soon-matrix \\\"+(a.className||\\\"\\\"),this._inner=document.createElement(\\\"span\\\"),this._inner.className=\\\"soon-matrix-inner\\\",this._wrapper.appendChild(this._inner),this._transform=a.transform||function(a){return a},this._value=[],this._type=-1!==a.modifiers.indexOf(\\\"3x5\\\")?\\\"3x5\\\":\\\"5x7\\\"};return c.prototype={redraw:function(){},destroy:function(){return this._wrapper},getElement:function(){return this._wrapper},_addChar:function(){var a=document.createElement(\\\"span\\\");return a.className=\\\"soon-matrix-char\\\",a.innerHTML=b[this._type],{node:a,ref:[]}},_updateChar:function(b,c){var d,e=a[this._type][c],f=e.length,g=e[0].length,h=0,i=b.ref;if(!i.length)for(var j=b.node.getElementsByClassName(\\\"soon-matrix-dot\\\");f>h;h++)for(i[h]=[],d=0;g>d;d++)i[h][d]=j[h*g+d];for(;f>h;h++)for(d=0;g>d;d++)i[h][d].setAttribute(\\\"data-state\\\",1===e[h][d]?\\\"1\\\":\\\"0\\\")},setValue:function(a){a=this._transform(a),a+=\\\"\\\",a=a.split(\\\"\\\");for(var b=0,c=a.length;c>b;b++){var d=this._value[b];d||(d=this._addChar(),this._inner.appendChild(d.node),this._value[b]=d),this._updateChar(d,a[b])}}},c}(),C.Repeater=function(a){var b=function(b){this._wrapper=document.createElement(\\\"span\\\"),this._wrapper.className=\\\"soon-repeater \\\"+(b.className||\\\"\\\"),this._delay=b.delay||0,this._transform=b.transform||function(a){return a},this._destroyed=!1,this._presenter=b.presenter,this._Presenter=a(this._presenter.type),this._prepend=\\\"undefined\\\"==typeof b.prepend?!0:b.prepend,this._presenterStorage=[]};return b.prototype={redraw:function(){for(var a=this._presenterStorage.length-1;a>=0;a--)this._presenterStorage[a].redraw()},destroy:function(){this._destroyed=!0;for(var a=this._presenterStorage.length-1;a>=0;a--)this._presenterStorage[a].destroy();return this._wrapper},getElement:function(){return this._wrapper},setValue:function(a){a=this._transform(a),a=a instanceof Array?a:[a],this._prepend&&a.reverse();for(var b,c,d,e=0,f=a.length,g=0,h=a.length!==this._wrapper.children.length;f>e;e++)b=this._presenterStorage[e],b||(b=new this._Presenter(this._presenter.options||{}),0!==this._wrapper.children.length&&this._prepend?this._wrapper.insertBefore(b.getElement(),this._wrapper.firstChild):this._wrapper.appendChild(b.getElement()),this._presenterStorage[e]=b,this._delay&&(g-=this._delay)),this._delay&&!h?(this._setValueDelayed(b,a[e],g),g+=this._delay):this._setValue(b,a[e],h);for(f=this._wrapper.children.length,d=e;f>e;e++)b=this._presenterStorage[e],c=b.destroy(),c.parentNode.removeChild(c),this._presenterStorage[e]=null;this._presenterStorage.length=d},_setValueDelayed:function(a,b,c,d){var e=this;setTimeout(function(){e._setValue(a,b,d)},c)},_setValue:function(a,b,c){c&&a.setValue(\\\" \\\"),a.setValue(b)}},b}(t),C.Ring=function(a,b){var c=function(b){this._wrapper=document.createElement(\\\"span\\\"),this._wrapper.className=\\\"soon-ring \\\"+(b.className||\\\"\\\"),this._transform=b.transform||function(a){return a},this._modifiers=b.modifiers,this._animate=b.animate,this._drawn=!1,this._canvas=document.createElement(\\\"canvas\\\"),this._wrapper.appendChild(this._canvas),this._style=document.createElement(\\\"span\\\"),this._style.className=\\\"soon-ring-progress\\\",this._style.style.visibility=\\\"hidden\\\",this._style.style.position=\\\"absolute\\\",this._wrapper.appendChild(this._style),this._current=0,this._target=null,this._destroyed=!1,this._lastTick=0,this._styles=null;var c=this;a.supportsAnimation()?window.requestAnimationFrame(function(a){c._tick(a)}):this._animate=!1};return c.prototype={destroy:function(){return this._destroyed=!0,b.deregister(this._resizeBind),this._wrapper},getElement:function(){return this._wrapper},_getModifier:function(a){for(var b=0,c=this._modifiers.length,d=null;c>b;b++)if(-1!==this._modifiers[b].indexOf(a)){d=this._modifiers[b];break}if(!d)return null;if(-1===d.indexOf(\\\"-\\\"))return!0;var e=d.split(\\\"-\\\");if(-1!==e[1].indexOf(\\\"_\\\")){var f=e[1].split(\\\"_\\\");return f[0]=\\\"#\\\"+f[0],f[1]=\\\"#\\\"+f[1],f}var g=parseFloat(e[1]);return isNaN(g)?e[1]:g/100},redraw:function(){var b=window.getComputedStyle(this._style);this._styles={offset:this._getModifier(\\\"offset\\\")||0,gap:this._getModifier(\\\"gap\\\")||0,length:this._getModifier(\\\"length\\\")||1,flip:this._getModifier(\\\"flip\\\")||!1,invert:this._getModifier(\\\"invert\\\")||null,align:\\\"center\\\",size:0,radius:0,padding:parseInt(b.getPropertyValue(\\\"padding-bottom\\\"),10)||0,cap:0===parseInt(b.getPropertyValue(\\\"border-top-right-radius\\\"),10)?\\\"butt\\\":\\\"round\\\",progressColor:{fill:b.getPropertyValue(\\\"color\\\")||\\\"#000\\\",gradient:{colors:this._getModifier(\\\"progressgradient\\\")||null,type:this._getModifier(\\\"progressgradienttype\\\")||\\\"follow\\\"}},progressWidth:parseInt(b.getPropertyValue(\\\"border-top-width\\\"),10)||2,progressShadow:a.getShadowProperties(b.getPropertyValue(\\\"text-shadow\\\")),ringColor:{fill:b.getPropertyValue(\\\"background-color\\\")||\\\"#fff\\\",gradient:{colors:this._getModifier(\\\"ringgradient\\\")||null,type:this._getModifier(\\\"ringgradienttype\\\")||\\\"follow\\\"}},ringWidth:parseInt(b.getPropertyValue(\\\"border-bottom-width\\\"),10)||2,ringShadow:a.getShadowProperties(b.getPropertyValue(\\\"box-shadow\\\"))};var c=this._canvas.getContext(\\\"2d\\\"),d=this._canvas.parentNode.clientWidth,e=a.getDevicePixelRatio(),f=a.getBackingStoreRatio(c),g=e/f,h=125>d?Math.min(1,.005*d):1;if(this._styles.ringWidth=Math.ceil(this._styles.ringWidth*h),this._styles.progressWidth=Math.ceil(this._styles.progressWidth*h),\\\"transparent\\\"===this._styles.ringColor.fill&&(this._styles.ringColor.fill=\\\"rgba(0,0,0,0)\\\"),\\\"transparent\\\"===this._styles.progressColor.fill&&(this._styles.progressColor.fill=\\\"rgba(0,0,0,0)\\\"),\\\"round\\\"===this._styles.cap&&-1===this._modifiers.join(\\\"\\\").indexOf(\\\"gap-\\\")&&(this._styles.gap=.5*(this._styles.ringWidth+this._styles.progressWidth)*.005),d){e!==f?(this._canvas.width=d*g,this._canvas.height=d*g,this._canvas.style.width=d+\\\"px\\\",this._canvas.style.height=d+\\\"px\\\",c.scale(g,g)):(this._canvas.width=d,this._canvas.height=d),this._styles.size=.5*d;var i=this._styles.size-this._styles.padding;this._styles.ringRadius=i-.5*this._styles.ringWidth,this._styles.progressRadius=i-.5*this._styles.progressWidth,this._styles.progressWidth===this._styles.ringWidth?this._styles.progressRadius=this._styles.ringRadius:this._styles.progressWidthc?1e3/c:30;if(this._lastTick=b,this._current===this._target&&this._drawn)return;this._current+=(this._target-this._current)/(d/3),Math.abs(this._current-this._target)<=.001&&(this._current=this._target)}else this._current=this._target;\\n var e=this._canvas.getContext(\\\"2d\\\");e.clearRect(0,0,this._canvas.width,this._canvas.height);var f=this._styles.flip?1-this._current:this._current;a.drawRing(e,f,this._styles.offset,this._styles.length,this._styles.gap,this._styles.size,this._styles.ringRadius,this._styles.ringWidth,this._styles.ringColor,this._styles.ringShadow,this._styles.progressRadius,this._styles.progressWidth,this._styles.progressColor,this._styles.progressShadow,this._styles.cap,this._styles.invert),this._drawn=!0},setValue:function(b){this._styles||this.redraw(),b=this._transform(b),this._target!==b&&(null==this._target&&(this._current=b),this._target=b),a.supportsAnimation()||(this._current=this._target,this._draw())}},c}(B,E),C.Slot=function(a){var b=function(a){this._forceReplace=\\\"undefined\\\"==typeof a.forceReplace?!1:a.forceReplace,this._wrapper=document.createElement(\\\"span\\\"),this._wrapper.className=\\\"soon-slot \\\"+(a.className||\\\"\\\"),this._transform=a.transform||function(a){return a},this._new=document.createElement(\\\"span\\\"),this._new.className=\\\"soon-slot-new\\\",this._old=document.createElement(\\\"span\\\"),this._old.className=\\\"soon-slot-old\\\",this._bounding=document.createElement(\\\"span\\\"),this._bounding.className=\\\"soon-slot-bounding\\\",this._inner=document.createElement(\\\"span\\\"),this._inner.className=\\\"soon-slot-inner soon-slot-animate\\\",this._inner.appendChild(this._old),this._inner.appendChild(this._new),this._inner.appendChild(this._bounding),this._wrapper.appendChild(this._inner),this._newValue=\\\"\\\",this._oldValue=\\\"\\\",this._boundingLength=0};return b.prototype={redraw:function(){},destroy:function(){return this._wrapper},getElement:function(){return this._wrapper},_isEmpty:function(){return!this._newValue},_isSame:function(a){return this._newValue===a},_setBoundingForValue:function(a){var b=(a+\\\"\\\").length;if(b!==this._boundingLength){this._boundingLength=b;for(var c=\\\"\\\",d=0;b>d;d++)c+=\\\"8\\\";this._bounding.textContent=c;var e=parseInt(getComputedStyle(this._wrapper).fontSize,10),f=this._bounding.offsetWidth/e;this._inner.style.width=f+.1*(b-1)+\\\"em\\\"}},_setNewValue:function(a){this._newValue=a,\\\" \\\"!==a&&(this._new.textContent=a)},_setOldValue:function(a){this._oldValue=a,this._old.textContent=a},setValue:function(b){b=this._transform(b),this._isEmpty()?(this._setNewValue(b),this._setBoundingForValue(b),a.triggerAnimation(this._inner,\\\"soon-slot-animate\\\")):this._isSame(b)&&!this._forceReplace||(this._newValue.length&&this._setOldValue(this._newValue),this._setNewValue(b),this._setBoundingForValue(b),a.triggerAnimation(this._inner,\\\"soon-slot-animate\\\"))}},b}(B),C.Text=function(a){var b=function(a){this._wrapper=document.createElement(\\\"span\\\"),this._wrapper.className=\\\"soon-text \\\"+(a.className||\\\"\\\"),this._transform=a.transform||function(a){return a}};return b.prototype={redraw:function(){},destroy:function(){return this._wrapper},getElement:function(){return this._wrapper},setValue:function(b){a.setTextContent(this._wrapper,this._transform(b))}},b}(B);var F=function(a,b){var c=function(a,c){c=c||{},this._rate=c.rate||1e3,this._offset=null,this._time=0,this._paused=!1,this._nextTickReference=null,this._tickBind=this._tick.bind(this),this._onTick=a||function(){},\\\"addEventListener\\\"in document&&document.addEventListener(b.documentVisibilityEvent,this)};return c.prototype={handleEvent:function(){b.isDocumentHidden()?this._lock():this._unlock()},isRunning:function(){return null!==this._offset},isPaused:function(){return this.isRunning()&&this._paused},start:function(){this.isRunning()||this.reset()},getTime:function(){return this._time},reset:function(){this.pause(),this._offset=(new Date).getTime(),this._time=0,this.resume()},stop:function(){var a=this;setTimeout(function(){a._clearTimer(),a._offset=null},0)},pause:function(){this._paused=!0,this._clearTimer()},resume:function(){if(this.isPaused()){this._paused=!1;var a=(new Date).getTime();this._time+=a-this._offset,this._offset=a,this._tick()}},_clearTimer:function(){clearTimeout(this._nextTickReference),this._nextTickReference=null},_lock:function(){this._clearTimer()},_unlock:function(){this.isPaused()||(this.pause(),this.resume())},_tick:function(){this._onTick(this._time),this._offset+=this._rate,this._time+=this._rate,this._nextTickReference=setTimeout(this._tickBind,this._offset-(new Date).getTime())}},c}(this,B),G=[],H=0,I=[\\\"xxl\\\",\\\"xl\\\",\\\"l\\\",\\\"m\\\",\\\"s\\\",\\\"xs\\\",\\\"xxs\\\"],J=3,K=(I.length,[]),L=[],M={y:{labels:\\\"Year,Years\\\",option:\\\"Years\\\",padding:\\\"\\\"},M:{labels:\\\"Month,Months\\\",option:\\\"Months\\\",padding:\\\"00\\\"},w:{labels:\\\"Week,Weeks\\\",option:\\\"Weeks\\\",padding:\\\"00\\\"},d:{labels:\\\"Day,Days\\\",option:\\\"Days\\\",padding:\\\"000\\\"},h:{labels:\\\"Hour,Hours\\\",option:\\\"Hours\\\",padding:\\\"00\\\"},m:{labels:\\\"Minute,Minutes\\\",option:\\\"Minutes\\\",padding:\\\"00\\\"},s:{labels:\\\"Second,Seconds\\\",option:\\\"Seconds\\\",padding:\\\"00\\\"},ms:{labels:\\\"Millisecond,Milliseconds\\\",option:\\\"Milliseconds\\\",padding:\\\"000\\\"}};E.register(d);var N=/([\\\\d]+)[\\\\s]+([a-z]+)/i,O=/([\\\\d]+)[:]*([\\\\d]{2})*[:]*([\\\\d]{2})*/;A.parse=function(a){w(a)},A.redraw=function(a){if(a){var b=j(a);f(b.node,b.presenter)}else g()},A.reset=function(a){var b=j(a);b&&b.ticker.reset()},A.freeze=function(a){var b=j(a);b&&b.ticker.pause()},A.unfreeze=function(a){var b=j(a);b&&b.ticker.resume()},A.setOption=function(a,b,c){var d=j(a);if(d){var e=d.options;e[b]=c,this.destroy(a),this.create(a,e)}},A.setOptions=function(a,b){var c=j(a);if(c){var d,e=c.options;for(d in b)b.hasOwnProperty(d)&&(e[d]=b[d]);this.destroy(a),this.create(a,b)}},A.destroy=function(a){var b=h(a);if(null!==b){var c=i(a);null!==c&&L.splice(c,1);var d=K[b];d.ticker&&d.ticker.stop(),d.presenter.destroy();var e=d.node.querySelector(\\\".soon-placeholder\\\");d.node.removeChild(e?e:d.node.querySelector(\\\".soon-group\\\")),a.removeAttribute(\\\"data-initialized\\\"),K.splice(b,1)}},A.create=function(a,b){if(!b)return w(a);if(\\\"true\\\"===a.getAttribute(\\\"data-initialized\\\"))return null;a.setAttribute(\\\"data-initialized\\\",\\\"true\\\");var c=null,d=null;b.eventComplete&&(c=\\\"string\\\"==typeof b.eventComplete?window[b.eventComplete]:b.eventComplete),b.eventTick&&(d=\\\"string\\\"==typeof b.eventTick?window[b.eventTick]:b.eventTick),b.due&&-1!==b.due.indexOf(\\\"reset\\\")&&(c=z(a,b,c),b.eventComplete=c),l(a,b,\\\"layout\\\"),l(a,b,\\\"face\\\"),l(a,b,\\\"visual\\\"),l(a,b,\\\"format\\\"),b.scaleMax&&a.setAttribute(\\\"data-scale-max\\\",b.scaleMax),b.scaleHide&&a.setAttribute(\\\"data-scale-hide\\\",b.scaleHide);var e,f,g,h=(b.format||\\\"d,h,m,s\\\").split(\\\",\\\"),i=-1===h.indexOf(\\\"ms\\\")?1e3:24,j={};for(e in M)M.hasOwnProperty(e)&&(f=M[e],g=(b[\\\"labels\\\"+f.option]||f.labels).split(\\\",\\\"),j[e]=g[0],j[e+\\\"_s\\\"]=g[1]||g[0]);var m=\\\"undefined\\\"==typeof b.padding?!0:b.padding,n={};for(e in M)M.hasOwnProperty(e)&&(f=M[e],m?(n[e]=y(e,h),null===n[e]&&(n[e]=f.padding),b[\\\"padding\\\"+f.option]&&(n[e]=b[\\\"padding\\\"+f.option])):n[e]=\\\"\\\");var p=(b.face||\\\"text \\\").split(\\\" \\\")[0],q=b.due?x(b.due):null,r=b.since?B.isoToDate(b.since):null,s=b.now?B.isoToDate(b.now):r?null:new Date,t={due:q,since:r,now:s,view:p,face:b.face,visual:b.visual||null,format:h,separator:b.separator||null,cascade:\\\"undefined\\\"==typeof b.cascade?!0:B.toBoolean(b.cascade),singular:b.singular,reflect:b.reflect||!1,chars:\\\"undefined\\\"==typeof b.separateChars?!0:B.toBoolean(b.separateChars),label:j,padding:n,callback:{onComplete:c||function(){},onTick:d||function(){}}};B.isSlow()&&(t.view=\\\"text\\\",t.reflect=!1,t.visual=null);var A=null,C=o(t,function(){A&&A.stop(),t.callback.onComplete()});k(a);var D=u(a,C);return A=v(a,D,i,b)};var P;!function(a){P=a()}(function(a){function b(a){for(n=1;a=d.shift();)a()}var c,d=[],e=!1,f=document,g=f.documentElement,h=g.doScroll,i=\\\"DOMContentLoaded\\\",j=\\\"addEventListener\\\",k=\\\"onreadystatechange\\\",l=\\\"readyState\\\",m=h?/^loaded|^c/:/^loaded|c/,n=m.test(f[l]);return f[j]&&f[j](i,c=function(){f.removeEventListener(i,c,e),b()},e),h&&f.attachEvent(k,c=function(){/^c/.test(f[l])&&(f.detachEvent(k,c),b())}),a=h?function(b){self!=top?n?b():d.push(b):function(){try{g.doScroll(\\\"left\\\")}catch(c){return setTimeout(function(){a(b)},50)}b()}()}:function(a){n?a():d.push(a)}}),P(function(){var a=document.querySelector(\\\"script[src*=soon]\\\");if(!a||\\\"false\\\"!==a.getAttribute(\\\"data-auto\\\"))for(var b=document.getElementsByClassName?document.getElementsByClassName(\\\"soon\\\"):document.querySelectorAll(\\\".soon\\\"),c=0,d=b.length;d>c;c++)w(b[c])}),function(a,b){\\\"use strict\\\";if(b){var c=[\\\"destroy\\\",\\\"reset\\\",\\\"resize\\\",\\\"freeze\\\",\\\"unfreeze\\\",\\\"redraw\\\"],d=c.length;b.fn.soon=function(){var b=this;b.create=function(b){return this.each(function(){a.create(this,b)})},b.setOption=function(b,c){return this.each(function(){a.setOption(this,b,c)})},b.setOptions=function(b){return this.each(function(){a.setOptions(this,b)})};for(var e=0;d>e;e++)!function(c){b[c]=function(){return this.each(function(){a[c](this)})}}(c[e]);return this}}}(A,b),\\\"undefined\\\"!=typeof module&&module.exports?module.exports=A:\\\"function\\\"==typeof define&&define.amd?define(function(){return A}):a.Soon=A}}(window,window.jQuery);\"\n\n/***/ }),\n\n/***/ \"qqFi\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {\n if (true) {\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [module, __webpack_require__(\"NKwv\")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if (typeof exports !== \"undefined\") {\n factory(module, require('select'));\n } else {\n var mod = {\n exports: {}\n };\n factory(mod, global.select);\n global.clipboardAction = mod.exports;\n }\n})(this, function (module, _select) {\n 'use strict';\n\n var _select2 = _interopRequireDefault(_select);\n\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n }\n\n var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n var _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n\n var ClipboardAction = function () {\n /**\n * @param {Object} options\n */\n function ClipboardAction(options) {\n _classCallCheck(this, ClipboardAction);\n\n this.resolveOptions(options);\n this.initSelection();\n }\n\n /**\n * Defines base properties passed from constructor.\n * @param {Object} options\n */\n\n\n _createClass(ClipboardAction, [{\n key: 'resolveOptions',\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this.action = options.action;\n this.container = options.container;\n this.emitter = options.emitter;\n this.target = options.target;\n this.text = options.text;\n this.trigger = options.trigger;\n\n this.selectedText = '';\n }\n }, {\n key: 'initSelection',\n value: function initSelection() {\n if (this.text) {\n this.selectFake();\n } else if (this.target) {\n this.selectTarget();\n }\n }\n }, {\n key: 'selectFake',\n value: function selectFake() {\n var _this = this;\n\n var isRTL = document.documentElement.getAttribute('dir') == 'rtl';\n\n this.removeFake();\n\n this.fakeHandlerCallback = function () {\n return _this.removeFake();\n };\n this.fakeHandler = this.container.addEventListener('click', this.fakeHandlerCallback) || true;\n\n this.fakeElem = document.createElement('textarea');\n // Prevent zooming on iOS\n this.fakeElem.style.fontSize = '12pt';\n // Reset box model\n this.fakeElem.style.border = '0';\n this.fakeElem.style.padding = '0';\n this.fakeElem.style.margin = '0';\n // Move element out of screen horizontally\n this.fakeElem.style.position = 'absolute';\n this.fakeElem.style[isRTL ? 'right' : 'left'] = '-9999px';\n // Move element to the same position vertically\n var yPosition = window.pageYOffset || document.documentElement.scrollTop;\n this.fakeElem.style.top = yPosition + 'px';\n\n this.fakeElem.setAttribute('readonly', '');\n this.fakeElem.value = this.text;\n\n this.container.appendChild(this.fakeElem);\n\n this.selectedText = (0, _select2.default)(this.fakeElem);\n this.copyText();\n }\n }, {\n key: 'removeFake',\n value: function removeFake() {\n if (this.fakeHandler) {\n this.container.removeEventListener('click', this.fakeHandlerCallback);\n this.fakeHandler = null;\n this.fakeHandlerCallback = null;\n }\n\n if (this.fakeElem) {\n this.container.removeChild(this.fakeElem);\n this.fakeElem = null;\n }\n }\n }, {\n key: 'selectTarget',\n value: function selectTarget() {\n this.selectedText = (0, _select2.default)(this.target);\n this.copyText();\n }\n }, {\n key: 'copyText',\n value: function copyText() {\n var succeeded = void 0;\n\n try {\n succeeded = document.execCommand(this.action);\n } catch (err) {\n succeeded = false;\n }\n\n this.handleResult(succeeded);\n }\n }, {\n key: 'handleResult',\n value: function handleResult(succeeded) {\n this.emitter.emit(succeeded ? 'success' : 'error', {\n action: this.action,\n text: this.selectedText,\n trigger: this.trigger,\n clearSelection: this.clearSelection.bind(this)\n });\n }\n }, {\n key: 'clearSelection',\n value: function clearSelection() {\n if (this.trigger) {\n this.trigger.focus();\n }\n\n window.getSelection().removeAllRanges();\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.removeFake();\n }\n }, {\n key: 'action',\n set: function set() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'copy';\n\n this._action = action;\n\n if (this._action !== 'copy' && this._action !== 'cut') {\n throw new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"');\n }\n },\n get: function get() {\n return this._action;\n }\n }, {\n key: 'target',\n set: function set(target) {\n if (target !== undefined) {\n if (target && (typeof target === 'undefined' ? 'undefined' : _typeof(target)) === 'object' && target.nodeType === 1) {\n if (this.action === 'copy' && target.hasAttribute('disabled')) {\n throw new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\n }\n\n if (this.action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {\n throw new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');\n }\n\n this._target = target;\n } else {\n throw new Error('Invalid \"target\" value, use a valid Element');\n }\n }\n },\n get: function get() {\n return this._target;\n }\n }]);\n\n return ClipboardAction;\n }();\n\n module.exports = ClipboardAction;\n});\n\n/***/ }),\n\n/***/ \"r1M9\":\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ \"tM7p\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lib_cookie__ = __webpack_require__(\"TQCA\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_lib_urlconverter__ = __webpack_require__(\"ejlv\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_lib_zinfinitescroll__ = __webpack_require__(\"wC9f\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__list__ = __webpack_require__(\"F0bM\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__page__ = __webpack_require__(\"kvOq\");\n/* harmony reexport (module object) */ __webpack_require__.d(__webpack_exports__, \"list\", function() { return __WEBPACK_IMPORTED_MODULE_3__list__; });\n/* harmony reexport (module object) */ __webpack_require__.d(__webpack_exports__, \"page\", function() { return __WEBPACK_IMPORTED_MODULE_4__page__; });\n\n\n\n\n\n\n\n\n/***/ }),\n\n/***/ \"vBks\":\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ \"w2CW\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__fancyapps_fancybox__ = __webpack_require__(\"GfF8\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__fancyapps_fancybox___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__fancyapps_fancybox__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__fancyapps_fancybox_dist_jquery_fancybox_css__ = __webpack_require__(\"XXni\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__fancyapps_fancybox_dist_jquery_fancybox_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1__fancyapps_fancybox_dist_jquery_fancybox_css__);\n\n\n\n$.fancybox.defaults.i18n.ru = {\n\tCLOSE: 'Закрыть',\n\tNEXT: 'Следующий',\n\tPREV: 'Предыдущий',\n\tERROR: 'Не удалось загрузить содержимое
Пожалуйста, попробуйте позже.',\n\tPLAY_START: 'Начать слайдшоу',\n\tPLAY_STOP: 'Остановить слайдшоу',\n\tFULL_SCREEN: 'На весь экран',\n\tTHUMBS: 'Предпросмотр'\n};\n\n$.fancybox.defaults.lang = LANG;\n\n/***/ }),\n\n/***/ \"wC9f\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return InfiniteScroll; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery__ = __webpack_require__(\"0iPh\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_jquery__);\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/* Copy-paste of Vadim's extension*/\n\n\n\n/**\n * This is simple plugin that checks when window is scrolled\n * to the bottom of the element and fires event in this case\n */\nvar InfiniteScroll = function () {\n\tfunction InfiniteScroll(element, options) {\n\t\t_classCallCheck(this, InfiniteScroll);\n\n\t\tthis._clNeedMore = __WEBPACK_IMPORTED_MODULE_0_jquery___default.a.Callbacks();\n\n\t\tthis._$el = __WEBPACK_IMPORTED_MODULE_0_jquery___default()(element);\n\t\tthis._$window = __WEBPACK_IMPORTED_MODULE_0_jquery___default()(window);\n\t\tthis._o = _extends({\n\t\t\t/**\n * If distance in pixels between bottom of the window and bottom of the element\n * becomes less than this value - event is fired\n */\n\t\t\tdistance: 500,\n\t\t\t/**\n * Event handler\n */\n\t\t\tonNeedMore: null\n\n\t\t}, options);\n\t\tif (this._o.onNeedMore) {\n\t\t\tthis._clNeedMore.add(this._o.onNeedMore);\n\t\t}\n\t}\n\n\t/**\n * Subscribe to needed events and start monitoring\n */\n\n\n\t_createClass(InfiniteScroll, [{\n\t\tkey: 'on',\n\t\tvalue: function on() {\n\t\t\tif (this._eventHandler) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._eventHandler = this.update.bind(this);\n\t\t\tthis._$window.on('scroll resize', this._eventHandler);\n\t\t\tthis.update();\n\t\t}\n\n\t\t/**\n * Unsubscribe from all events and stop monitoring\n */\n\n\t}, {\n\t\tkey: 'off',\n\t\tvalue: function off() {\n\t\t\tif (!this._eventHandler) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._$window.off('scroll resize', this._eventHandler);\n\t\t\tthis._eventHandler = null;\n\t\t}\n\n\t\t/**\n * Manual update. Event will be fired immediately if needed.\n */\n\n\t}, {\n\t\tkey: 'update',\n\t\tvalue: function update() {\n\t\t\tvar checkVisible = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n\t\t\tif (checkVisible && !this._$el.is(':visible')) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar blockEnd = this._$el.offset().top + this._$el.outerHeight();\n\t\t\tvar windowHeight = this._$window.height();\n\t\t\tvar windowScrollTop = this._$window.scrollTop();\n\t\t\tvar isNearBottom = blockEnd < windowScrollTop + windowHeight + this._o.distance;\n\n\t\t\tif (isNearBottom != this._needMore) {\n\t\t\t\tthis._needMore = isNearBottom;\n\n\t\t\t\tif (isNearBottom) {\n\t\t\t\t\tthis._clNeedMore.fireWith(this._$el[0], [this._loadedMoreCallback.bind(this)]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/**\n * Change internal state in response to loaded more event\n */\n\n\t}, {\n\t\tkey: '_loadedMoreCallback',\n\t\tvalue: function _loadedMoreCallback() {\n\t\t\tthis._needMore = false;\n\t\t}\n\n\t\t/**\n * Add event handler\n * @param callback\n */\n\n\t}, {\n\t\tkey: 'onNeedMore',\n\t\tvalue: function onNeedMore(callback) {\n\t\t\tthis._clNeedMore.add(callback);\n\t\t}\n\n\t\t/**\n * Remove event handler\n * @param callback\n */\n\n\t}, {\n\t\tkey: 'offNeedMore',\n\t\tvalue: function offNeedMore(callback) {\n\t\t\tthis._clNeedMore.remove(callback);\n\t\t}\n\t}]);\n\n\treturn InfiniteScroll;\n}();\n\n__WEBPACK_IMPORTED_MODULE_0_jquery___default.a.fn.zInfiniteScroll = function (options) {\n\tvar o = __WEBPACK_IMPORTED_MODULE_0_jquery___default.a.extend({\n\t\tfetch: null,\n\t\tclear: null,\n\t\tshow: null,\n\t\tenabled: null,\n\t\tfinished: null,\n\t\tgetCurrentCount: null,\n\t\tcountPerPage: null,\n\t\ttotalCount: Number.MAX_VALUE,\n\t\tselector: '*',\n\t\tbtnShowMore: null,\n\t\tloading: null,\n\t\tmaxAutoloadPages: null,\n\t\tcheckViewport: true,\n\t\tautoStart: true\n\t}, options);\n\n\tvar $wrapper = __WEBPACK_IMPORTED_MODULE_0_jquery___default()(this);\n\tvar $window = __WEBPACK_IMPORTED_MODULE_0_jquery___default()(window);\n\tvar $btnShowMore = __WEBPACK_IMPORTED_MODULE_0_jquery___default()(o.btnShowMore);\n\tvar $loading = __WEBPACK_IMPORTED_MODULE_0_jquery___default()(o.loading);\n\tvar getCurrentCount = __WEBPACK_IMPORTED_MODULE_0_jquery___default.a.isFunction(o.getCurrentCount) ? o.getCurrentCount : function () {\n\t\treturn $wrapper.children(o.selector).length;\n\t};\n\tvar currentPage = o.countPerPage === null ? 1 : function () {\n\t\treturn getCurrentCount() / o.countPerPage;\n\t};\n\tvar inProgress = false;\n\tvar isReloading = false;\n\tvar finished = false;\n\tvar t = new Throttler(50);\n\n\t$btnShowMore.click(function () {\n\t\t$btnShowMore.hide();\n\t\tloadMore(function (hasMore) {\n\t\t\tif (hasMore) {\n\t\t\t\t$btnShowMore.show();\n\t\t\t}\n\t\t});\n\t});\n\n\to.totalCount = +o.totalCount;\n\to.maxAutoloadPages = +o.maxAutoloadPages;\n\n\tif (o.autoStart) {\n\t\tif (getCurrentCount() < o.totalCount) {\n\t\t\tstart();\n\t\t} else {\n\t\t\tfinished = true;\n\t\t\tif (__WEBPACK_IMPORTED_MODULE_0_jquery___default.a.isFunction(o.finished)) {\n\t\t\t\to.finished();\n\t\t\t}\n\t\t}\n\t}\n\n\treturn {\n\t\ton: function on() {\n\t\t\tfinished = false;\n\t\t\tif (getCurrentCount() < o.totalCount) {\n\t\t\t\tstart();\n\t\t\t} else {\n\t\t\t\tfinished = true;\n\t\t\t\tif (__WEBPACK_IMPORTED_MODULE_0_jquery___default.a.isFunction(o.finished)) {\n\t\t\t\t\to.finished();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\toff: function off() {\n\t\t\tstop();\n\t\t\tfinished = true;\n\t\t},\n\t\treload: function reload() {\n\t\t\tfinished = false;\n\t\t\tif (!__WEBPACK_IMPORTED_MODULE_0_jquery___default.a.isFunction(currentPage)) {\n\t\t\t\tcurrentPage = 0;\n\t\t\t}\n\t\t\to.totalCount = Number.MAX_VALUE;\n\n\t\t\tif (__WEBPACK_IMPORTED_MODULE_0_jquery___default.a.isFunction(o.clear)) {\n\t\t\t\to.clear();\n\t\t\t} else {\n\t\t\t\t$wrapper.children(o.selector).remove();\n\t\t\t}\n\n\t\t\tif (inProgress) {\n\t\t\t\tisReloading = true;\n\t\t\t} else {\n\t\t\t\tloadRoutine();\n\t\t\t}\n\t\t}\n\t};\n\n\tfunction start() {\n\t\tif (!finished) {\n\t\t\t$window.on('scroll', onScroll);\n\t\t}\n\t}\n\n\tfunction stop() {\n\t\t$window.off('scroll', onScroll);\n\t}\n\n\tfunction onScroll() {\n\t\tif (unwrap(o.enabled) === false || inProgress || !t.ready() || !$wrapper.is(':visible')) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar blockEnd = $wrapper.offset().top + $wrapper.height();\n\t\tvar windowHeight = $window.height();\n\t\tvar windowScrollTop = $window.scrollTop();\n\t\tvar isNearBottom = blockEnd < windowScrollTop + windowHeight + 500;\n\t\tvar isInViewport = !o.checkViewport || blockEnd > windowScrollTop + 50;\n\t\tvar ready = isNearBottom && isInViewport;\n\n\t\tif (ready) {\n\t\t\tloadRoutine();\n\t\t}\n\t}\n\n\tfunction loadRoutine() {\n\t\tstop();\n\t\tloadMore(function () {\n\t\t\tvar needMore = getCurrentCount() < o.totalCount;\n\t\t\tif (needMore) {\n\t\t\t\tif (!o.maxAutoloadPages || unwrap(currentPage) < o.maxAutoloadPages) {\n\t\t\t\t\tt.reset();\n\t\t\t\t\tstart();\n\t\t\t\t} else {\n\t\t\t\t\t$btnShowMore.show();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfinished = true;\n\t\t\t\tif (__WEBPACK_IMPORTED_MODULE_0_jquery___default.a.isFunction(o.finished)) {\n\t\t\t\t\to.finished();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tfunction loadMore(callback) {\n\t\tif (inProgress) {\n\t\t\treturn;\n\t\t}\n\t\tinProgress = true;\n\t\t$loading.show();\n\n\t\to.fetch(unwrap(currentPage) + 1, function ($blocks) {\n\t\t\tif (isReloading) {\n\t\t\t\tisReloading = false;\n\t\t\t\tinProgress = false;\n\n\t\t\t\tloadRoutine();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar count = 0;\n\t\t\tif (__WEBPACK_IMPORTED_MODULE_0_jquery___default.a.isFunction(o.show)) {\n\t\t\t\tcount = o.show($blocks);\n\t\t\t} else {\n\t\t\t\t$blocks.addClass('fadein');\n\t\t\t\t$wrapper.append($blocks);\n\t\t\t\tcount = $blocks.length;\n\t\t\t}\n\n\t\t\tif (!__WEBPACK_IMPORTED_MODULE_0_jquery___default.a.isFunction(currentPage)) {\n\t\t\t\tcurrentPage++;\n\t\t\t}\n\t\t\tinProgress = false;\n\t\t\t$loading.hide();\n\n\t\t\tif (count === 0 || o.countPerPage !== null && count < o.countPerPage) {\n\t\t\t\t// force stop because no more data on server\n\t\t\t\to.totalCount = getCurrentCount();\n\t\t\t}\n\n\t\t\tcallback();\n\t\t});\n\t}\n};\n\nfunction unwrap(value) {\n\treturn __WEBPACK_IMPORTED_MODULE_0_jquery___default.a.isFunction(value) ? value() : value;\n}\n\nvar Throttler = function () {\n\tfunction Throttler(period) {\n\t\t_classCallCheck(this, Throttler);\n\n\t\tthis.period = +period;\n\t\tthis.start = +new Date();\n\t}\n\n\t_createClass(Throttler, [{\n\t\tkey: 'ready',\n\t\tvalue: function ready() {\n\t\t\tvar ready = +new Date() - this.start >= this.period;\n\t\t\tif (ready) {\n\t\t\t\tthis.reset();\n\t\t\t}\n\t\t\treturn ready;\n\t\t}\n\t}, {\n\t\tkey: 'reset',\n\t\tvalue: function reset() {\n\t\t\tthis.start = +new Date();\n\t\t}\n\t}]);\n\n\treturn Throttler;\n}();\n\n/***/ }),\n\n/***/ \"wYtf\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar closest = __webpack_require__(\"8ZSj\");\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction _delegate(element, selector, type, callback, useCapture) {\n var listenerFn = listener.apply(this, arguments);\n\n element.addEventListener(type, listenerFn, useCapture);\n\n return {\n destroy: function() {\n element.removeEventListener(type, listenerFn, useCapture);\n }\n }\n}\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element|String|Array} [elements]\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction delegate(elements, selector, type, callback, useCapture) {\n // Handle the regular Element usage\n if (typeof elements.addEventListener === 'function') {\n return _delegate.apply(null, arguments);\n }\n\n // Handle Element-less usage, it defaults to global delegation\n if (typeof type === 'function') {\n // Use `document` as the first parameter, then apply arguments\n // This is a short way to .unshift `arguments` without running into deoptimizations\n return _delegate.bind(null, document).apply(null, arguments);\n }\n\n // Handle Selector-based usage\n if (typeof elements === 'string') {\n elements = document.querySelectorAll(elements);\n }\n\n // Handle Array-like based usage\n return Array.prototype.map.call(elements, function (element) {\n return _delegate(element, selector, type, callback, useCapture);\n });\n}\n\n/**\n * Finds closest match and invokes callback.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Function}\n */\nfunction listener(element, selector, type, callback) {\n return function(e) {\n e.delegateTarget = closest(e.target, selector);\n\n if (e.delegateTarget) {\n callback.call(element, e);\n }\n }\n}\n\nmodule.exports = delegate;\n\n\n/***/ }),\n\n/***/ \"webD\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__vendor_soon_countdown_soon_1_9_0_min_js__ = __webpack_require__(\"HH+/\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__vendor_soon_countdown_soon_1_9_0_min_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__vendor_soon_countdown_soon_1_9_0_min_js__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__vendor_soon_countdown_soon_1_9_0_min_css__ = __webpack_require__(\"6mWo\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__vendor_soon_countdown_soon_1_9_0_min_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1__vendor_soon_countdown_soon_1_9_0_min_css__);\n\n\n\n/***/ })\n\n},[16]);\n\n\n// WEBPACK FOOTER //\n// blog.min.js","/**\n * Check if argument is a HTML element.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.node = function(value) {\n return value !== undefined\n && value instanceof HTMLElement\n && value.nodeType === 1;\n};\n\n/**\n * Check if argument is a list of HTML elements.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.nodeList = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return value !== undefined\n && (type === '[object NodeList]' || type === '[object HTMLCollection]')\n && ('length' in value)\n && (value.length === 0 || exports.node(value[0]));\n};\n\n/**\n * Check if argument is a string.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.string = function(value) {\n return typeof value === 'string'\n || value instanceof String;\n};\n\n/**\n * Check if argument is a function.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.fn = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return type === '[object Function]';\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/Vadim/Projects/Php/zakupki/node_modules/good-listener/src/is.js\n// module id = /Q8n\n// module chunks = 7","module.exports = jQuery;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"jQuery\"\n// module id = 0iPh\n// module chunks = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 21 24 25 26 30 31","import * as sidebar from \"../../sidebar/index\";\nimport 'lib/soon-countdown';\n\nexport function init() {\n\tconst $list = $('#contestsList');\n\n\tsidebar.init({\n\t\theightTarget: $list\n\t});\n\n\t$list.zInfiniteScroll({\n\t\tselector: '[rel=page]',\n\t\tloading: '#pagesScrollLoader',\n\t\tmaxAutoloadPages: 200,\n\t\ttotalCount: $list.data('totalCount'),\n\t\tfetch: (page, callback) => {\n\t\t\tconst data = {\n\t\t\t\tpage: page,\n\t\t\t\ttype: $list.data('blogType'),\n\t\t\t\tcategory: $list.data('blogCategory'),\n\t\t\t};\n\t\t\t$.get($list.data('loadUrl'), data, null, 'json')\n\t\t\t\t.done(response => {\n\t\t\t\t\tconst $blocks = $(response['html']).filter('[rel=page]');\n\t\t\t\t\tcallback($blocks);\n\t\t\t\t});\n\t\t}\n\t});\n}\n\n\n\n// WEBPACK FOOTER //\n// ./modules/blog/list/contest/index.js","import toastr from 'lib/toastr';\nimport {checkIsIframe} from \"../utils/utils\";\nimport {orDefault} from \"../utils/var\";\n\nconst t = checkIsIframe() ? window.top.toastr : toastr;\n\nconst MSG_ERROR = 'Ошибка';\nconst MSG_ERROR_XHR = 'Не удалось выполнить запрос';\n\nexport class Notifier {\n\tstatic error(message = null, title = null, options = null) {\n\t\t// Extend timeout for errors to 10 seconds by default\n\t\tconst timeOut = options ? orDefault(options.timeOut, 10000) : 10000;\n\t\tt.error(orDefault(message, MSG_ERROR), title, { timeOut, ...options });\n\t}\n\n\tstatic errorXHR(jqXHR, textStatus, errorThrown) {\n\t\tif(textStatus != 'abort') {\n\t\t\tNotifier.error(MSG_ERROR_XHR);\n\t\t}\n\t}\n\n\tstatic info(message, title = null, options = null) {\n\t\tt.info(message, title, {...options});\n\t}\n\n\tstatic success(message, title = null, options = null) {\n\t\tt.success(message, title, {...options});\n\t}\n\n\tstatic warning(message, title = null, options = null) {\n\t\tt.warning(message, title, {...options});\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./core/widgets/notifier.js","const LEVEL_DEBUG = 0;\nconst LEVEL_INFO = 1;\nconst LEVEL_WARN = 2;\nconst LEVEL_ERROR = 3;\n\nconst LEVELS = ['debug', 'info', 'warn', 'error'];\n\nlet defaultLevel = window.IS_PRODUCTION ? LEVEL_WARN : LEVEL_DEBUG;\n\n/**\n * Creates new logger instance with default level.\n * @param {string|null} name\n * @return {MyLogger}\n */\nexport function newLogger(name = null) {\n\treturn new MyLogger(name, defaultLevel);\n}\n\n/**\n * Sets level for new loggers.\n * @param {number} level\n */\nexport function setDefaultLevel(level) {\n\tdefaultLevel = level;\n}\n\nclass MyLogger {\n\t_name = '';\n\t_level = -1;\n\t_dummy = () => {\n\t};\n\n\tconstructor(name, level) {\n\t\tthis._name = name;\n\t\tthis.setLevel(level);\n\t}\n\n\tsetLevel(level) {\n\t\tlevel = Number.isInteger(level) ? level : LEVELS.indexOf(level);\n\t\tthis._level = level;\n\n\t\tconst name = this._name ? '[' + this._name + ']' : null;\n\t\tconst bind = (condition, methodName) => {\n\t\t\tif (!condition || !console[methodName]) return this._dummy;\n\t\t\treturn name ? console[methodName].bind(console, name) : console[methodName].bind(console);\n\t\t};\n\t\tconst bindSimple = (condition, methodName) => {\n\t\t\treturn condition && console[methodName] ? console[methodName].bind(console) : this._dummy;\n\t\t};\n\n\t\t[\n\t\t\t['log', LEVEL_DEBUG],\n\t\t\t['info', LEVEL_INFO],\n\t\t\t['warn', LEVEL_WARN],\n\t\t\t['error', LEVEL_ERROR],\n\t\t].forEach(i => {\n\t\t\tconst [method, lvl] = i;\n\t\t\tthis[method] = bind(level <= lvl, method);\n\t\t});\n\n\t\t[\n\t\t\t'time',\n\t\t\t'timeEnd',\n\t\t\t'profile',\n\t\t\t'profileEnd',\n\t\t].forEach(method => {\n\t\t\tthis[method] = bindSimple(level <= LEVEL_DEBUG, method);\n\t\t});\n\t}\n\n\t/** The same as {@link Console.log} */\n\tlog(args) {\n\t}\n\n\t/** The same as {@link Console.info} */\n\tinfo(args) {\n\t}\n\n\t/** The same as {@link Console.warn} */\n\twarn(args) {\n\t}\n\n\t/** The same as {@link Console.error} */\n\terror(args) {\n\t}\n\n\t/** The same as {@link Console.time} */\n\ttime(label) {\n\t}\n\n\t/** The same as {@link Console.timeEnd} */\n\ttimeEnd(label) {\n\t}\n\n\t/** The same as {@link Console.profile} */\n\tprofile(label) {\n\t}\n\n\t/** The same as {@link Console.profileEnd} */\n\tprofileEnd(label) {\n\t}\n\n\tmeasureTime(label, callable) {\n\t\tthis.time(label);\n\t\tconst result = callable();\n\t\tthis.timeEnd(label);\n\t\treturn result;\n\t}\n\n\tdoProfile(label, callable) {\n\t\tthis.profile(label);\n\t\tconst result = callable();\n\t\tthis.profileEnd(label);\n\t\treturn result;\n\t}\n\n\tsetLevelDebug() {\n\t\tthis.setLevel(LEVEL_DEBUG);\n\t}\n\n\tsetLevelInfo() {\n\t\tthis.setLevel(LEVEL_INFO);\n\t}\n\n\tsetLevelWarn() {\n\t\tthis.setLevel(LEVEL_WARN);\n\t}\n\n\tsetLevelError() {\n\t\tthis.setLevel(LEVEL_ERROR);\n\t}\n}\n\nexport default newLogger();\n\n\n\n// WEBPACK FOOTER //\n// ./core/utils/logger.js","module.exports = ko;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"ko\"\n// module id = 7fPx\n// module chunks = 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 25 26","var DOCUMENT_NODE_TYPE = 9;\n\n/**\n * A polyfill for Element.matches()\n */\nif (typeof Element !== 'undefined' && !Element.prototype.matches) {\n var proto = Element.prototype;\n\n proto.matches = proto.matchesSelector ||\n proto.mozMatchesSelector ||\n proto.msMatchesSelector ||\n proto.oMatchesSelector ||\n proto.webkitMatchesSelector;\n}\n\n/**\n * Finds the closest parent that matches a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @return {Function}\n */\nfunction closest (element, selector) {\n while (element && element.nodeType !== DOCUMENT_NODE_TYPE) {\n if (typeof element.matches === 'function' &&\n element.matches(selector)) {\n return element;\n }\n element = element.parentNode;\n }\n}\n\nmodule.exports = closest;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/Vadim/Projects/Php/zakupki/node_modules/delegate/src/closest.js\n// module id = 8ZSj\n// module chunks = 7","let isWindowLoaded = false;\n$(window).one('load', () => {\n\tisWindowLoaded = true;\n});\n\nlet log = () => {};\n\n// uncomment to enable logging\n// log = console.log;\n\n/**\n * This plugin calculates font size for element to fit parent.\n * It incrementally changes font size until element's dimensions are most close to parent's.\n * To manually fix font size trigger 'refresh-font-size' event\n * @param options\n * @return {JQuery}\n */\n$.fn.adaptiveFontSize = function (options = null) {\n\tconst o = {\n\t\tminFontSize: '30%',\n\t\tmaxFontSize: '100%',\n\t\t// 'up' or 'down'. Either increase font size starting from min, or decrease starting from max\n\t\tdirection: 'down',\n\t\t// If null - immediate parent will be used, otherwise: $(element).parents(o.parentSelector)\n\t\tparentSelector: null,\n\t\t// Set font size only if window is already loaded.\n\t\t// Don't forget to enable fixOnLoad option\n\t\tsetIfLoaded: true,\n\t\t// Fix font size on window resize event\n\t\tfixOnResize: true,\n\t\t// Fix font size on window load event\n\t\tfixOnLoad: true,\n\n\t\t// Done callback. Called when font size is finally set. Accepts two parameters - DOM Element and font size\n\t\tdone: null,\n\n\t\t...options\n\t};\n\treturn this.each(function () {\n\t\tconst $block = $(this);\n\t\tinit();\n\n\t\tfunction init() {\n\t\t\tif (!o.setIfLoaded || isWindowLoaded) {\n\t\t\t\tprocess();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlog('postpone set');\n\t\t\t}\n\t\t\tif (o.fixOnResize) {\n\t\t\t\t$(window).on('resize', eventHandler);\n\t\t\t}\n\t\t\tif (o.fixOnLoad) {\n\t\t\t\t$(window).on('load', eventHandler);\n\t\t\t}\n\t\t\t$block.on('refresh-font-size', eventHandler);\n\t\t}\n\n\t\tfunction eventHandler() {\n\t\t\tlog('fix on event');\n\t\t\tprocess();\n\t\t}\n\n\t\tfunction getParent() {\n\t\t\treturn o.parentSelector ? $block.parents(o.parentSelector).first() : $block.parent();\n\t\t}\n\n\t\tfunction process() {\n\t\t\tif (!$.contains(document, $block[0])) {\n\t\t\t\t// element has been detached, stop processing\n\t\t\t\tlog('stop processing');\n\t\t\t\t$(window).off('resize', eventHandler);\n\t\t\t\t$(window).off('load', eventHandler);\n\t\t\t\t$block.off('refresh-font-size', eventHandler);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst $parent = getParent();\n\t\t\tconst isPercent = ('' + o.minFontSize).indexOf('%') >= 0;\n const minFontSize = parseFloat(o.minFontSize);\n const maxFontSize = parseFloat(o.maxFontSize);\n let delta = Math.floor((maxFontSize - minFontSize) / 10);\n\t\t\tlet initial = minFontSize;\n\t\t\tif (o.direction == 'down') {\n\t\t\t\tdelta *= -1;\n\t\t\t\tinitial = maxFontSize;\n\t\t\t}\n\t\t\tconst fontSize = calculateFontSize($block, $parent.width(), $parent.height(), initial, minFontSize, maxFontSize, delta, isPercent);\n\t\t\tif ($.isFunction(o.done)) {\n\t\t\t\tlog('done', fontSize);\n\t\t\t\to.done($block[0], fontSize);\n\t\t\t}\n\t\t}\n\t});\n};\n\nfunction addDelta(value, delta, min, max) {\n\tlet newValue = value + delta;\n\tif (newValue > max) newValue = max;\n\tif (newValue < min) newValue = min;\n\treturn newValue;\n}\n\nfunction calculateFontSize($block, maxWidth, maxHeight, fontSize, minFontSize, maxFontSize, delta, isPercent) {\n\tlet newFontSize = addDelta(fontSize, delta, minFontSize, maxFontSize);\n\tif (newFontSize == fontSize) {\n\t\treturn fontSize;\n\t}\n\tsetFontSize($block, newFontSize, isPercent);\n\tif (delta > 0) {\n\t\tif ($block.width() < maxWidth && $block.height() < maxHeight) {\n\t\t\treturn calculateFontSize($block, maxWidth, maxHeight, newFontSize, minFontSize, maxFontSize, delta, isPercent);\n\t\t}\n\t\telse {\n\t\t\t// rollback\n setFontSize($block, fontSize, isPercent);\n\t\t\treturn fontSize;\n\t\t}\n\t}\n\telse {\n\t\tif ($block.width() > maxWidth || $block.height() > maxHeight) {\n\t\t\treturn calculateFontSize($block, maxWidth, maxHeight, newFontSize, minFontSize, maxFontSize, delta, isPercent);\n\t\t}\n\t}\n\treturn newFontSize;\n}\n\nfunction setFontSize($block, fontSize, isPercent) {\n\tif (isPercent) {\n\t\tfontSize += '%';\n\t}\n $block.css('font-size', fontSize);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./lib/adaptivefontsize/index.js","import {newLogger} from \"../../../core/utils/logger\";\nimport {categoriesCrop} from \"./sale\";\nimport {openPopup} from \"../../../core/widgets/popup\";\nimport * as pageComments from \"../pagecomments\";\nimport * as sidebar from \"../sidebar\";\nimport \"lib/fancybox\";\n\nconst logger = newLogger('Article page');\n\nexport function init(options) {\n\tconst o = {\n\t\tpage: {},\n\t\tcomments: [],\n\t\t...options\n\t};\n\n\tlogger.log('init', o);\n\n\tpageComments.init({page: o.page, comments: o.comments});\n\tsetTimeout(sidebar.init);\n\n\tcategoriesCrop($('#page_content .sale-cats'));\n\n\topenTablePopup();\n}\n\nfunction openTablePopup(){\n\t/*$('[rel=\"compare-table\"]').click(function(){\n const template = require('./templates/compare-table.html');\n const src = $(this).attr('src');\n const content = $.tmpl(template, {src: src});\n openPopup(content, {\n cssClass: 'compare-table-popup'\n });\n\t})*/\n $('[rel=\"compare-table\"]').click(function(){\n var src = $(this).attr('src');\n $.fancybox.open({\n src: src,\n baseClass: 'fancybox-custom-layout',\n thumbs: {\n hideOnClose: false\n },\n touch: {\n vertical: false\n },\n buttons: [\n 'close'\n ],\n animationEffect: \"fade\",\n transitionEffect: false,\n clickContent: \"zoom\",\n clickOutside: \"close\"\n });\n })\n}\n\n\n// WEBPACK FOOTER //\n// ./modules/blog/page/article.js","import _ from 'lib/underscore';\nimport * as location from './location';\nimport {asString} from \"./var\";\n\nexport const BASE_URL = (window.base_url || '/').replace(/(.*)\\/\\/$|([^/])$/, '$1/');\n\nconst isAbsoluteUrlRegex = /^https?:\\/\\//i;\n\n/**\n * @param {string|object} url Url path\n * @param {string|object} more Additional parts\n * @return {string}\n */\nexport function siteUrl(url, ...more) {\n\tif (isAbsoluteUrlRegex.test(url)) {\n\t\tif (more.length === 0) {\n\t\t\treturn url;\n\t\t} else {\n\t\t\treturn joinPath.apply(null, [url, ...more]);\n\t\t}\n\t} else {\n\t\treturn joinPath.apply(null, [BASE_URL, url, ...more]);\n\t}\n}\n\n/**\n * Joins given values with slash.\n * If last value is an object - it will be formatted as query data.\n * @param {string|object} values\n * @return {string}\n */\nexport function joinPath(...values) {\n\tif (values.length == 0) return '';\n\tlet query = {};\n\tlet queryString = '';\n\tlet fragment = '';\n\tlet components = [];\n\tconst processValue = (v) => {\n\t\tif (_.isObject(v)) {\n\t\t\tquery = {...query, ...v};\n\t\t} else {\n\t\t\tv = asString(v).trim();\n\t\t\tlet i;\n\t\t\tif ((i = v.indexOf('#')) >= 0) {\n\t\t\t\tfragment = v.substr(i + 1);\n\t\t\t\tv = v.substr(0, i);\n\t\t\t} else if ((i = v.indexOf('?')) >= 0) {\n\t\t\t\tqueryString = v.substr(i + 1);\n\t\t\t\tv = v.substr(0, i);\n\t\t\t}\n\t\t\tif (v) {\n\t\t\t\tif (components.length == 0) {\n\t\t\t\t\tv = v.replace(/\\/$/g, '');\n\t\t\t\t} else {\n\t\t\t\t\tv = v.replace(/^\\/|\\/$/g, '');\n\t\t\t\t}\n\t\t\t\tcomponents.push(v);\n\t\t\t}\n\t\t}\n\t};\n\tvalues.forEach(v => {\n\t\tif (_.isArray(v)) {\n\t\t\tv.forEach(processValue);\n\t\t} else {\n\t\t\tprocessValue(v);\n\t\t}\n\t});\n\tlet url = components.join('/');\n\tif (!_.isEmpty(query)) {\n\t\tconst q = buildQuery(query);\n\t\tif (queryString) {\n\t\t\tqueryString += '&';\n\t\t}\n\t\tqueryString += q;\n\t}\n\tif (queryString) {\n\t\turl += '?' + queryString;\n\t}\n\tif (fragment) {\n\t\turl += '#' + fragment;\n\t}\n\treturn url;\n}\n\n/**\n *\n * @param {string} url\n * @return {boolean}\n */\nexport function isAbsolute(url) {\n\treturn isAbsoluteUrlRegex.test(url);\n}\n\n/**\n * Builds query string from given object\n * @param {object} queryData\n * @return {string}\n */\nexport function buildQuery(queryData) {\n\treturn location.buildQuery(queryData);\n}\n\nexport function highlightUrls(text, maxlength = 30) {\n\treturn text.replace(/(https?:\\/\\/)?([\\da-z\\.-]+)\\.([a-z\\.]{2,6})([\\?+=&%#\\/\\wА-Яа-яёЁ\\.;-]*)*\\/?/g, function (s) {\n var st = s;\n\n if (s.length > maxlength) {\n st = s.slice(0, maxlength) + \"...\";\n }\n\n if (!/^(https?:\\/\\/)/.test(s)) {\n s = \"http://\" + s;\n }\n\n return \"\" + st + \"\";\n })\n}\n\nexport class UrlParser {\n\t/**\n\t * @param {string} url\n\t */\n\tconstructor(url) {\n\t\tthis._a = document.createElement('a');\n\t\tthis._a.href = url;\n\t}\n\n\t/** @return {string} */\n\tget origin() {\n\t\treturn this._a.origin;\n\t}\n\n\t/** @return {string} */\n\tget protocol() {\n\t\treturn this._a.protocol;\n\t}\n\n\t/** @return {string} */\n\tget host() {\n\t\treturn this._a.host;\n\t}\n\n\t/** @return {string} */\n\tget hostname() {\n\t\treturn this._a.hostname;\n\t}\n\n\t/** @return {string} */\n\tget port() {\n\t\treturn this._a.port;\n\t}\n\n\t/** @return {string} */\n\tget pathname() {\n\t\treturn this._a.pathname;\n\t}\n\n\t/** @return {string} */\n\tget search() {\n\t\treturn this._a.search;\n\t}\n\n\t/** @return {string} */\n\tget hash() {\n\t\treturn this._a.hash;\n\t}\n}\n\nexport class UrlBuilder {\n\tconstructor(protocol = null, host = null, port = null, path = null, query = null, hash = null) {\n\t\tthis._protocol = protocol;\n\t\tthis._host = host;\n\t\tthis._port = port;\n\t\tthis._path = path;\n\t\tthis._query = query;\n\t\tthis._hash = hash;\n\t}\n\n\t/**\n\t * @param {string|null} value\n\t */\n\tset protocol(value) {\n\t\tthis._protocol = postfix(value, ':');\n\t}\n\n\t/** @return {string|null} */\n\tget protocol() {\n\t\treturn this._protocol;\n\t}\n\n\t/**\n\t * @param {string|null} value\n\t */\n\tset host(value) {\n\t\tthis._host = value;\n\t}\n\n\t/** @return {string|null} */\n\tget host() {\n\t\treturn this._host;\n\t}\n\n\t/**\n\t * @param {string|number|null} value\n\t */\n\tset port(value) {\n\t\tthis._port = value;\n\t}\n\n\t/** @return {string|number|null} */\n\tget port() {\n\t\treturn this._port;\n\t}\n\n\t/**\n\t * @param {string|null} value\n\t */\n\tset path(value) {\n\t\tthis._path = value;\n\t}\n\n\t/** @return {string|null} */\n\tget path() {\n\t\treturn this._path;\n\t}\n\n\t/**\n\t * @param {string|object|null} value\n\t */\n\tset query(value) {\n\t\tthis._query = prefix(value, '?');\n\t}\n\n\t/** @return {string|object|null} */\n\tget query() {\n\t\treturn this._query;\n\t}\n\n\t/**\n\t * @param {string|null} value\n\t */\n\tset hash(value) {\n\t\tthis._hash = prefix(value, '#');\n\t}\n\n\t/** @return {string|null} */\n\tget hash() {\n\t\treturn this._hash;\n\t}\n\n\t/**\n\t * @return {string}\n\t */\n\tbuild() {\n\t\tconst origin = (this._protocol ? this._protocol + '//' : '') +\n\t\t\t(this._host ? this._host + (this._port ? ':' + this._port : '') : '');\n\t\tconst query = typeof(this._query) === 'object' ? prefix(buildQuery(this._query), '?') : this._query;\n\t\treturn joinPath(origin, this._path, query, this._hash);\n\t}\n}\n\nfunction prefix(val, prefix) {\n\tif (val && typeof(val) === 'string' && !val.startsWith(prefix)) {\n\t\treturn prefix + val;\n\t}\n\treturn val;\n}\n\nfunction postfix(val, postfix) {\n\tif (val && typeof(val) === 'string' && !val.endsWith(postfix)) {\n\t\treturn val + postfix;\n\t}\n\treturn val;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./core/utils/url.js","// ==================================================\r\n// fancyBox v3.2.10\r\n//\r\n// Licensed GPLv3 for open source use\r\n// or fancyBox Commercial License for commercial use\r\n//\r\n// http://fancyapps.com/fancybox/\r\n// Copyright 2017 fancyApps\r\n//\r\n// ==================================================\r\n;(function (window, document, $, undefined) {\r\n 'use strict';\r\n\r\n // If there's no jQuery, fancyBox can't work\r\n // =========================================\r\n\r\n if ( !$ ) {\r\n return;\r\n }\r\n\r\n // Check if fancyBox is already initialized\r\n // ========================================\r\n\r\n if ( $.fn.fancybox ) {\r\n\r\n if ( 'console' in window ) {\r\n console.log( 'fancyBox already initialized' );\r\n }\r\n\r\n return;\r\n }\r\n\r\n // Private default settings\r\n // ========================\r\n\r\n var defaults = {\r\n\r\n // Enable infinite gallery navigation\r\n loop : false,\r\n\r\n // Space around image, ignored if zoomed-in or viewport width is smaller than 800px\r\n margin : [44, 0],\r\n\r\n // Horizontal space between slides\r\n gutter : 50,\r\n\r\n // Enable keyboard navigation\r\n keyboard : true,\r\n\r\n // Should display navigation arrows at the screen edges\r\n arrows : true,\r\n\r\n // Should display infobar (counter and arrows at the top)\r\n infobar : true,\r\n\r\n // Should display toolbar (buttons at the top)\r\n toolbar : true,\r\n\r\n // What buttons should appear in the top right corner.\r\n // Buttons will be created using templates from `btnTpl` option\r\n // and they will be placed into toolbar (class=\"fancybox-toolbar\"` element)\r\n buttons : [\r\n 'slideShow',\r\n 'fullScreen',\r\n 'thumbs',\r\n 'share',\r\n //'download',\r\n //'zoom',\r\n 'close'\r\n ],\r\n\r\n // Detect \"idle\" time in seconds\r\n idleTime : 3,\r\n\r\n // Should display buttons at top right corner of the content\r\n // If 'auto' - they will be created for content having type 'html', 'inline' or 'ajax'\r\n // Use template from `btnTpl.smallBtn` for customization\r\n smallBtn : 'auto',\r\n\r\n // Disable right-click and use simple image protection for images\r\n protect : false,\r\n\r\n // Shortcut to make content \"modal\" - disable keyboard navigtion, hide buttons, etc\r\n modal : false,\r\n\r\n image : {\r\n\r\n // Wait for images to load before displaying\r\n // Requires predefined image dimensions\r\n // If 'auto' - will zoom in thumbnail if 'width' and 'height' attributes are found\r\n preload : \"auto\"\r\n\r\n },\r\n\r\n ajax : {\r\n\r\n // Object containing settings for ajax request\r\n settings : {\r\n\r\n // This helps to indicate that request comes from the modal\r\n // Feel free to change naming\r\n data : {\r\n fancybox : true\r\n }\r\n }\r\n\r\n },\r\n\r\n iframe : {\r\n\r\n // Iframe template\r\n tpl : '',\r\n\r\n // Preload iframe before displaying it\r\n // This allows to calculate iframe content width and height\r\n // (note: Due to \"Same Origin Policy\", you can't get cross domain data).\r\n preload : true,\r\n\r\n // Custom CSS styling for iframe wrapping element\r\n // You can use this to set custom iframe dimensions\r\n css : {},\r\n\r\n // Iframe tag attributes\r\n attr : {\r\n scrolling : 'auto'\r\n }\r\n\r\n },\r\n\r\n // Default content type if cannot be detected automatically\r\n defaultType : 'image',\r\n\r\n // Open/close animation type\r\n // Possible values:\r\n // false - disable\r\n // \"zoom\" - zoom images from/to thumbnail\r\n // \"fade\"\r\n // \"zoom-in-out\"\r\n //\r\n animationEffect : \"zoom\",\r\n\r\n // Duration in ms for open/close animation\r\n animationDuration : 500,\r\n\r\n // Should image change opacity while zooming\r\n // If opacity is \"auto\", then opacity will be changed if image and thumbnail have different aspect ratios\r\n zoomOpacity : \"auto\",\r\n\r\n // Transition effect between slides\r\n //\r\n // Possible values:\r\n // false - disable\r\n // \"fade'\r\n // \"slide'\r\n // \"circular'\r\n // \"tube'\r\n // \"zoom-in-out'\r\n // \"rotate'\r\n //\r\n transitionEffect : \"fade\",\r\n\r\n // Duration in ms for transition animation\r\n transitionDuration : 366,\r\n\r\n // Custom CSS class for slide element\r\n slideClass : '',\r\n\r\n // Custom CSS class for layout\r\n baseClass : '',\r\n\r\n // Base template for layout\r\n baseTpl\t:\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n ' / ' +\r\n '
' +\r\n '
{{buttons}}
' +\r\n '
{{arrows}}
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
',\r\n\r\n // Loading indicator template\r\n spinnerTpl : '
',\r\n\r\n // Error message template\r\n errorTpl : '

{{ERROR}}

',\r\n\r\n btnTpl : {\r\n\r\n download : '' +\r\n '' +\r\n '' +\r\n '' +\r\n '',\r\n\r\n zoom : '',\r\n\r\n close : '',\r\n\r\n // This small close button will be appended to your html/inline/ajax content by default,\r\n // if \"smallBtn\" option is not set to false\r\n smallBtn : '',\r\n\r\n // Arrows\r\n arrowLeft : '',\r\n\r\n arrowRight : ''\r\n },\r\n\r\n // Container is injected into this element\r\n parentEl : 'body',\r\n\r\n\r\n // Focus handling\r\n // ==============\r\n\r\n // Try to focus on the first focusable element after opening\r\n autoFocus : false,\r\n\r\n // Put focus back to active element after closing\r\n backFocus : true,\r\n\r\n // Do not let user to focus on element outside modal content\r\n trapFocus : true,\r\n\r\n\r\n // Module specific options\r\n // =======================\r\n\r\n fullScreen : {\r\n autoStart : false,\r\n },\r\n\r\n // Set `touch: false` to disable dragging/swiping\r\n touch : {\r\n vertical : true, // Allow to drag content vertically\r\n momentum : true // Continue movement after releasing mouse/touch when panning\r\n },\r\n\r\n // Hash value when initializing manually,\r\n // set `false` to disable hash change\r\n hash : null,\r\n\r\n // Customize or add new media types\r\n // Example:\r\n /*\r\n media : {\r\n youtube : {\r\n params : {\r\n autoplay : 0\r\n }\r\n }\r\n }\r\n */\r\n media : {},\r\n\r\n slideShow : {\r\n autoStart : false,\r\n speed : 4000\r\n },\r\n\r\n thumbs : {\r\n\t\t\tautoStart : false, // Display thumbnails on opening\r\n\t\t\thideOnClose : true, // Hide thumbnail grid when closing animation starts\r\n\t\t\tparentEl : '.fancybox-container', // Container is injected into this element\r\n\t\t\taxis : 'y' // Vertical (y) or horizontal (x) scrolling\r\n\t\t},\r\n\r\n // Use mousewheel to navigate gallery\r\n // If 'auto' - enabled for images only\r\n wheel : 'auto',\r\n\r\n // Callbacks\r\n //==========\r\n\r\n // See Documentation/API/Events for more information\r\n // Example:\r\n /*\r\n afterShow: function( instance, current ) {\r\n console.info( 'Clicked element:' );\r\n console.info( current.opts.$orig );\r\n }\r\n */\r\n\r\n onInit : $.noop, // When instance has been initialized\r\n\r\n beforeLoad : $.noop, // Before the content of a slide is being loaded\r\n afterLoad : $.noop, // When the content of a slide is done loading\r\n\r\n beforeShow : $.noop, // Before open animation starts\r\n afterShow : $.noop, // When content is done loading and animating\r\n\r\n beforeClose : $.noop, // Before the instance attempts to close. Return false to cancel the close.\r\n afterClose : $.noop, // After instance has been closed\r\n\r\n onActivate : $.noop, // When instance is brought to front\r\n onDeactivate : $.noop, // When other instance has been activated\r\n\r\n\r\n // Interaction\r\n // ===========\r\n\r\n // Use options below to customize taken action when user clicks or double clicks on the fancyBox area,\r\n // each option can be string or method that returns value.\r\n //\r\n // Possible values:\r\n // \"close\" - close instance\r\n // \"next\" - move to next gallery item\r\n // \"nextOrClose\" - move to next gallery item or close if gallery has only one item\r\n // \"toggleControls\" - show/hide controls\r\n // \"zoom\" - zoom image (if loaded)\r\n // false - do nothing\r\n\r\n // Clicked on the content\r\n clickContent : function( current, event ) {\r\n return current.type === 'image' ? 'zoom' : false;\r\n },\r\n\r\n // Clicked on the slide\r\n clickSlide : 'close',\r\n\r\n // Clicked on the background (backdrop) element\r\n clickOutside : 'close',\r\n\r\n // Same as previous two, but for double click\r\n dblclickContent : false,\r\n dblclickSlide : false,\r\n dblclickOutside : false,\r\n\r\n\r\n // Custom options when mobile device is detected\r\n // =============================================\r\n\r\n mobile : {\r\n idleTime : false,\r\n margin : 0,\r\n\r\n clickContent : function( current, event ) {\r\n return current.type === 'image' ? 'toggleControls' : false;\r\n },\r\n clickSlide : function( current, event ) {\r\n return current.type === 'image' ? 'toggleControls' : 'close';\r\n },\r\n dblclickContent : function( current, event ) {\r\n return current.type === 'image' ? 'zoom' : false;\r\n },\r\n dblclickSlide : function( current, event ) {\r\n return current.type === 'image' ? 'zoom' : false;\r\n }\r\n },\r\n\r\n\r\n // Internationalization\r\n // ============\r\n\r\n lang : 'en',\r\n i18n : {\r\n 'en' : {\r\n CLOSE : 'Close',\r\n NEXT : 'Next',\r\n PREV : 'Previous',\r\n ERROR : 'The requested content cannot be loaded.
Please try again later.',\r\n PLAY_START : 'Start slideshow',\r\n PLAY_STOP : 'Pause slideshow',\r\n FULL_SCREEN : 'Full screen',\r\n THUMBS : 'Thumbnails',\r\n DOWNLOAD : 'Download',\r\n SHARE : 'Share',\r\n ZOOM : 'Zoom'\r\n },\r\n 'de' : {\r\n CLOSE : 'Schliessen',\r\n NEXT : 'Weiter',\r\n PREV : 'Zurück',\r\n ERROR : 'Die angeforderten Daten konnten nicht geladen werden.
Bitte versuchen Sie es später nochmal.',\r\n PLAY_START : 'Diaschau starten',\r\n PLAY_STOP : 'Diaschau beenden',\r\n FULL_SCREEN : 'Vollbild',\r\n THUMBS : 'Vorschaubilder',\r\n DOWNLOAD : 'Herunterladen',\r\n SHARE : 'Teilen',\r\n ZOOM : 'Maßstab'\r\n }\r\n }\r\n\r\n };\r\n\r\n // Few useful variables and methods\r\n // ================================\r\n\r\n var $W = $(window);\r\n var $D = $(document);\r\n\r\n var called = 0;\r\n\r\n\r\n // Check if an object is a jQuery object and not a native JavaScript object\r\n // ========================================================================\r\n\r\n var isQuery = function ( obj ) {\r\n return obj && obj.hasOwnProperty && obj instanceof $;\r\n };\r\n\r\n\r\n // Handle multiple browsers for \"requestAnimationFrame\" and \"cancelAnimationFrame\"\r\n // ===============================================================================\r\n\r\n var requestAFrame = (function () {\r\n return window.requestAnimationFrame ||\r\n window.webkitRequestAnimationFrame ||\r\n window.mozRequestAnimationFrame ||\r\n window.oRequestAnimationFrame ||\r\n // if all else fails, use setTimeout\r\n function (callback) {\r\n return window.setTimeout(callback, 1000 / 60);\r\n };\r\n })();\r\n\r\n\r\n // Detect the supported transition-end event property name\r\n // =======================================================\r\n\r\n var transitionEnd = (function () {\r\n var t, el = document.createElement(\"fakeelement\");\r\n\r\n var transitions = {\r\n \"transition\" : \"transitionend\",\r\n \"OTransition\" : \"oTransitionEnd\",\r\n \"MozTransition\" : \"transitionend\",\r\n \"WebkitTransition\": \"webkitTransitionEnd\"\r\n };\r\n\r\n for (t in transitions) {\r\n if (el.style[t] !== undefined){\r\n return transitions[t];\r\n }\r\n }\r\n\r\n return 'transitionend';\r\n })();\r\n\r\n\r\n // Force redraw on an element.\r\n // This helps in cases where the browser doesn't redraw an updated element properly.\r\n // =================================================================================\r\n\r\n var forceRedraw = function( $el ) {\r\n return ( $el && $el.length && $el[0].offsetHeight );\r\n };\r\n\r\n\r\n // Class definition\r\n // ================\r\n\r\n var FancyBox = function( content, opts, index ) {\r\n var self = this;\r\n\r\n self.opts = $.extend( true, { index : index }, $.fancybox.defaults, opts || {} );\r\n\r\n if ( $.fancybox.isMobile ) {\r\n self.opts = $.extend( true, {}, self.opts, self.opts.mobile );\r\n }\r\n\r\n // Exclude buttons option from deep merging\r\n if ( opts && $.isArray( opts.buttons ) ) {\r\n self.opts.buttons = opts.buttons;\r\n }\r\n\r\n self.id = self.opts.id || ++called;\r\n self.group = [];\r\n\r\n self.currIndex = parseInt( self.opts.index, 10 ) || 0;\r\n self.prevIndex = null;\r\n\r\n self.prevPos = null;\r\n self.currPos = 0;\r\n\r\n self.firstRun = null;\r\n\r\n // Create group elements from original item collection\r\n self.createGroup( content );\r\n\r\n if ( !self.group.length ) {\r\n return;\r\n }\r\n\r\n // Save last active element and current scroll position\r\n self.$lastFocus = $(document.activeElement).blur();\r\n\r\n // Collection of gallery objects\r\n self.slides = {};\r\n\r\n self.init();\r\n };\r\n\r\n $.extend(FancyBox.prototype, {\r\n\r\n // Create DOM structure\r\n // ====================\r\n\r\n init : function() {\r\n var self = this,\r\n firstItem = self.group[ self.currIndex ],\r\n firstItemOpts = firstItem.opts,\r\n scrollbarWidth = $.fancybox.scrollbarWidth,\r\n $scrollDiv,\r\n $container,\r\n buttonStr;\r\n\r\n self.scrollTop = $D.scrollTop();\r\n self.scrollLeft = $D.scrollLeft();\r\n\r\n\r\n // Hide scrollbars\r\n // ===============\r\n\r\n if ( !$.fancybox.getInstance() ) {\r\n\r\n $( 'body' ).addClass( 'fancybox-active' );\r\n\r\n // iOS hack\r\n if ( /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream ) {\r\n\r\n // iOS has problems for input elements inside fixed containers,\r\n // the workaround is to apply `position: fixed` to `` element,\r\n // unfortunately, this makes it lose the scrollbars and forces address bar to appear.\r\n\r\n if ( firstItem.type !== 'image' ) {\r\n $( 'body' ).css( 'top', $( 'body' ).scrollTop() * -1 ).addClass( 'fancybox-iosfix' );\r\n }\r\n\r\n } else if ( !$.fancybox.isMobile && document.body.scrollHeight > window.innerHeight ) {\r\n\r\n if ( scrollbarWidth === undefined ) {\r\n $scrollDiv = $('
').appendTo( 'body' );\r\n\r\n scrollbarWidth = $.fancybox.scrollbarWidth = $scrollDiv[0].offsetWidth - $scrollDiv[0].clientWidth;\r\n\r\n $scrollDiv.remove();\r\n }\r\n\r\n $( 'head' ).append( '' );\r\n $( 'body' ).addClass( 'compensate-for-scrollbar' );\r\n }\r\n }\r\n\r\n\r\n // Build html markup and set references\r\n // ====================================\r\n\r\n // Build html code for buttons and insert into main template\r\n buttonStr = '';\r\n\r\n $.each( firstItemOpts.buttons, function( index, value ) {\r\n buttonStr += ( firstItemOpts.btnTpl[ value ] || '' );\r\n });\r\n\r\n // Create markup from base template, it will be initially hidden to\r\n // avoid unnecessary work like painting while initializing is not complete\r\n $container = $(\r\n self.translate( self,\r\n firstItemOpts.baseTpl\r\n .replace( '\\{\\{buttons\\}\\}', buttonStr )\r\n .replace( '\\{\\{arrows\\}\\}', firstItemOpts.btnTpl.arrowLeft + firstItemOpts.btnTpl.arrowRight )\r\n )\r\n )\r\n .attr( 'id', 'fancybox-container-' + self.id )\r\n .addClass( 'fancybox-is-hidden' )\r\n .addClass( firstItemOpts.baseClass )\r\n .data( 'FancyBox', self )\r\n .appendTo( firstItemOpts.parentEl );\r\n\r\n // Create object holding references to jQuery wrapped nodes\r\n self.$refs = {\r\n container : $container\r\n };\r\n\r\n [ 'bg', 'inner', 'infobar', 'toolbar', 'stage', 'caption', 'navigation' ].forEach(function(item) {\r\n self.$refs[ item ] = $container.find( '.fancybox-' + item );\r\n });\r\n\r\n self.trigger( 'onInit' );\r\n\r\n // Enable events, deactive previous instances\r\n self.activate();\r\n\r\n // Build slides, load and reveal content\r\n self.jumpTo( self.currIndex );\r\n },\r\n\r\n\r\n // Simple i18n support - replaces object keys found in template\r\n // with corresponding values\r\n // ============================================================\r\n\r\n translate : function( obj, str ) {\r\n var arr = obj.opts.i18n[ obj.opts.lang ];\r\n\r\n return str.replace(/\\{\\{(\\w+)\\}\\}/g, function(match, n) {\r\n var value = arr[n];\r\n\r\n if ( value === undefined ) {\r\n return match;\r\n }\r\n\r\n return value;\r\n });\r\n },\r\n\r\n // Create array of gally item objects\r\n // Check if each object has valid type and content\r\n // ===============================================\r\n\r\n createGroup : function ( content ) {\r\n var self = this;\r\n var items = $.makeArray( content );\r\n\r\n $.each(items, function( i, item ) {\r\n var obj = {},\r\n opts = {},\r\n $item,\r\n type,\r\n found,\r\n src,\r\n srcParts;\r\n\r\n // Step 1 - Make sure we have an object\r\n // ====================================\r\n\r\n if ( $.isPlainObject( item ) ) {\r\n\r\n // We probably have manual usage here, something like\r\n // $.fancybox.open( [ { src : \"image.jpg\", type : \"image\" } ] )\r\n\r\n obj = item;\r\n opts = item.opts || item;\r\n\r\n } else if ( $.type( item ) === 'object' && $( item ).length ) {\r\n\r\n // Here we probably have jQuery collection returned by some selector\r\n $item = $( item );\r\n\r\n opts = $item.data();\r\n opts = $.extend( {}, opts, opts.options || {} );\r\n\r\n // Here we store clicked element\r\n opts.$orig = $item;\r\n\r\n obj.src = opts.src || $item.attr( 'href' );\r\n\r\n // Assume that simple syntax is used, for example:\r\n // `$.fancybox.open( $(\"#test\"), {} );`\r\n if ( !obj.type && !obj.src ) {\r\n obj.type = 'inline';\r\n obj.src = item;\r\n }\r\n\r\n } else {\r\n\r\n // Assume we have a simple html code, for example:\r\n // $.fancybox.open( '

Hi!

' );\r\n\r\n obj = {\r\n type : 'html',\r\n src : item + ''\r\n };\r\n\r\n }\r\n\r\n // Each gallery object has full collection of options\r\n obj.opts = $.extend( true, {}, self.opts, opts );\r\n\r\n // Do not merge buttons array\r\n if ( $.isArray( opts.buttons ) ) {\r\n obj.opts.buttons = opts.buttons;\r\n }\r\n\r\n\r\n // Step 2 - Make sure we have content type, if not - try to guess\r\n // ==============================================================\r\n\r\n type = obj.type || obj.opts.type;\r\n src = obj.src || '';\r\n\r\n if ( !type && src ) {\r\n if ( src.match(/(^data:image\\/[a-z0-9+\\/=]*,)|(\\.(jp(e|g|eg)|gif|png|bmp|webp|svg|ico)((\\?|#).*)?$)/i) ) {\r\n type = 'image';\r\n\r\n } else if ( src.match(/\\.(pdf)((\\?|#).*)?$/i) ) {\r\n type = 'pdf';\r\n\r\n } else if ( found = src.match(/\\.(mp4|mov|ogv)((\\?|#).*)?$/i) ) {\r\n type = 'video';\r\n\r\n if ( !obj.opts.videoFormat ) {\r\n obj.opts.videoFormat = 'video/' + ( found[1] === 'ogv' ? 'ogg' : found[1] );\r\n }\r\n\r\n } else if ( src.charAt(0) === '#' ) {\r\n type = 'inline';\r\n }\r\n }\r\n\r\n if ( type ) {\r\n obj.type = type;\r\n\r\n } else {\r\n self.trigger( 'objectNeedsType', obj );\r\n }\r\n\r\n\r\n // Step 3 - Some adjustments\r\n // =========================\r\n\r\n obj.index = self.group.length;\r\n\r\n // Check if $orig and $thumb objects exist\r\n if ( obj.opts.$orig && !obj.opts.$orig.length ) {\r\n delete obj.opts.$orig;\r\n }\r\n\r\n if ( !obj.opts.$thumb && obj.opts.$orig ) {\r\n obj.opts.$thumb = obj.opts.$orig.find( 'img:first' );\r\n }\r\n\r\n if ( obj.opts.$thumb && !obj.opts.$thumb.length ) {\r\n delete obj.opts.$thumb;\r\n }\r\n\r\n // \"caption\" is a \"special\" option, it can be used to customize caption per gallery item ..\r\n if ( $.type( obj.opts.caption ) === 'function' ) {\r\n obj.opts.caption = obj.opts.caption.apply( item, [ self, obj ] );\r\n }\r\n\r\n if ( $.type( self.opts.caption ) === 'function' ) {\r\n obj.opts.caption = self.opts.caption.apply( item, [ self, obj ] );\r\n }\r\n\r\n // Make sure we have caption as a string or jQuery object\r\n if ( !( obj.opts.caption instanceof $ ) ) {\r\n obj.opts.caption = obj.opts.caption === undefined ? '' : obj.opts.caption + '';\r\n }\r\n\r\n // Check if url contains \"filter\" used to filter the content\r\n // Example: \"ajax.html #something\"\r\n if ( type === 'ajax' ) {\r\n srcParts = src.split(/\\s+/, 2);\r\n\r\n if ( srcParts.length > 1 ) {\r\n obj.src = srcParts.shift();\r\n\r\n obj.opts.filter = srcParts.shift();\r\n }\r\n }\r\n\r\n if ( obj.opts.smallBtn == 'auto' ) {\r\n\r\n if ( $.inArray( type, ['html', 'inline', 'ajax'] ) > -1 ) {\r\n obj.opts.toolbar = false;\r\n obj.opts.smallBtn = true;\r\n\r\n } else {\r\n obj.opts.smallBtn = false;\r\n }\r\n\r\n }\r\n\r\n // If the type is \"pdf\", then simply load file into iframe\r\n if ( type === 'pdf' ) {\r\n obj.type = 'iframe';\r\n\r\n obj.opts.iframe.preload = false;\r\n }\r\n\r\n // Hide all buttons and disable interactivity for modal items\r\n if ( obj.opts.modal ) {\r\n\r\n obj.opts = $.extend(true, obj.opts, {\r\n // Remove buttons\r\n infobar : 0,\r\n toolbar : 0,\r\n\r\n smallBtn : 0,\r\n\r\n // Disable keyboard navigation\r\n keyboard : 0,\r\n\r\n // Disable some modules\r\n slideShow : 0,\r\n fullScreen : 0,\r\n thumbs : 0,\r\n touch : 0,\r\n\r\n // Disable click event handlers\r\n clickContent : false,\r\n clickSlide : false,\r\n clickOutside : false,\r\n dblclickContent : false,\r\n dblclickSlide : false,\r\n dblclickOutside : false\r\n });\r\n\r\n }\r\n\r\n // Step 4 - Add processed object to group\r\n // ======================================\r\n\r\n self.group.push( obj );\r\n\r\n });\r\n\r\n },\r\n\r\n\r\n // Attach an event handler functions for:\r\n // - navigation buttons\r\n // - browser scrolling, resizing;\r\n // - focusing\r\n // - keyboard\r\n // - detect idle\r\n // ======================================\r\n\r\n addEvents : function() {\r\n var self = this;\r\n\r\n self.removeEvents();\r\n\r\n // Make navigation elements clickable\r\n self.$refs.container.on('click.fb-close', '[data-fancybox-close]', function(e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n self.close( e );\r\n\r\n }).on( 'click.fb-prev touchend.fb-prev', '[data-fancybox-prev]', function(e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n self.previous();\r\n\r\n }).on( 'click.fb-next touchend.fb-next', '[data-fancybox-next]', function(e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n self.next();\r\n\r\n }).on( 'click.fb', '[data-fancybox-zoom]', function(e) {\r\n // Click handler for zoom button\r\n self[ self.isScaledDown() ? 'scaleToActual' : 'scaleToFit' ]();\r\n });\r\n\r\n\r\n // Handle page scrolling and browser resizing\r\n $W.on('orientationchange.fb resize.fb', function(e) {\r\n\r\n if ( e && e.originalEvent && e.originalEvent.type === \"resize\" ) {\r\n\r\n requestAFrame(function() {\r\n self.update();\r\n });\r\n\r\n } else {\r\n\r\n self.$refs.stage.hide();\r\n\r\n setTimeout(function() {\r\n self.$refs.stage.show();\r\n\r\n self.update();\r\n }, 600);\r\n\r\n }\r\n\r\n });\r\n\r\n // Trap keyboard focus inside of the modal, so the user does not accidentally tab outside of the modal\r\n // (a.k.a. \"escaping the modal\")\r\n $D.on('focusin.fb', function(e) {\r\n var instance = $.fancybox ? $.fancybox.getInstance() : null;\r\n\r\n if ( instance.isClosing || !instance.current || !instance.current.opts.trapFocus || $( e.target ).hasClass( 'fancybox-container' ) || $( e.target ).is( document ) ) {\r\n return;\r\n }\r\n\r\n if ( instance && $( e.target ).css( 'position' ) !== 'fixed' && !instance.$refs.container.has( e.target ).length ) {\r\n e.stopPropagation();\r\n\r\n instance.focus();\r\n\r\n // Sometimes page gets scrolled, set it back\r\n $W.scrollTop( self.scrollTop ).scrollLeft( self.scrollLeft );\r\n }\r\n });\r\n\r\n\r\n // Enable keyboard navigation\r\n $D.on('keydown.fb', function (e) {\r\n var current = self.current,\r\n keycode = e.keyCode || e.which;\r\n\r\n if ( !current || !current.opts.keyboard ) {\r\n return;\r\n }\r\n\r\n if ( $(e.target).is('input') || $(e.target).is('textarea') ) {\r\n return;\r\n }\r\n\r\n // Backspace and Esc keys\r\n if ( keycode === 8 || keycode === 27 ) {\r\n e.preventDefault();\r\n\r\n self.close( e );\r\n\r\n return;\r\n }\r\n\r\n // Left arrow and Up arrow\r\n if ( keycode === 37 || keycode === 38 ) {\r\n e.preventDefault();\r\n\r\n self.previous();\r\n\r\n return;\r\n }\r\n\r\n // Righ arrow and Down arrow\r\n if ( keycode === 39 || keycode === 40 ) {\r\n e.preventDefault();\r\n\r\n self.next();\r\n\r\n return;\r\n }\r\n\r\n self.trigger('afterKeydown', e, keycode);\r\n });\r\n\r\n\r\n // Hide controls after some inactivity period\r\n if ( self.group[ self.currIndex ].opts.idleTime ) {\r\n self.idleSecondsCounter = 0;\r\n\r\n $D.on('mousemove.fb-idle mouseleave.fb-idle mousedown.fb-idle touchstart.fb-idle touchmove.fb-idle scroll.fb-idle keydown.fb-idle', function(e) {\r\n self.idleSecondsCounter = 0;\r\n\r\n if ( self.isIdle ) {\r\n self.showControls();\r\n }\r\n\r\n self.isIdle = false;\r\n });\r\n\r\n self.idleInterval = window.setInterval(function() {\r\n self.idleSecondsCounter++;\r\n\r\n if ( self.idleSecondsCounter >= self.group[ self.currIndex ].opts.idleTime && !self.isDragging ) {\r\n self.isIdle = true;\r\n self.idleSecondsCounter = 0;\r\n\r\n self.hideControls();\r\n }\r\n\r\n }, 1000);\r\n }\r\n\r\n },\r\n\r\n\r\n // Remove events added by the core\r\n // ===============================\r\n\r\n removeEvents : function() {\r\n var self = this;\r\n\r\n $W.off( 'orientationchange.fb resize.fb' );\r\n $D.off( 'focusin.fb keydown.fb .fb-idle' );\r\n\r\n this.$refs.container.off( '.fb-close .fb-prev .fb-next' );\r\n\r\n if ( self.idleInterval ) {\r\n window.clearInterval( self.idleInterval );\r\n\r\n self.idleInterval = null;\r\n }\r\n },\r\n\r\n\r\n // Change to previous gallery item\r\n // ===============================\r\n\r\n previous : function( duration ) {\r\n return this.jumpTo( this.currPos - 1, duration );\r\n },\r\n\r\n\r\n // Change to next gallery item\r\n // ===========================\r\n\r\n next : function( duration ) {\r\n return this.jumpTo( this.currPos + 1, duration );\r\n },\r\n\r\n\r\n // Switch to selected gallery item\r\n // ===============================\r\n\r\n jumpTo : function ( pos, duration, slide ) {\r\n var self = this,\r\n firstRun,\r\n loop,\r\n current,\r\n previous,\r\n canvasWidth,\r\n currentPos,\r\n transitionProps;\r\n\r\n var groupLen = self.group.length;\r\n\r\n if ( self.isDragging || self.isClosing || ( self.isAnimating && self.firstRun ) ) {\r\n return;\r\n }\r\n\r\n pos = parseInt( pos, 10 );\r\n loop = self.current ? self.current.opts.loop : self.opts.loop;\r\n\r\n if ( !loop && ( pos < 0 || pos >= groupLen ) ) {\r\n return false;\r\n }\r\n\r\n firstRun = self.firstRun = ( self.firstRun === null );\r\n\r\n if ( groupLen < 2 && !firstRun && !!self.isDragging ) {\r\n return;\r\n }\r\n\r\n previous = self.current;\r\n\r\n self.prevIndex = self.currIndex;\r\n self.prevPos = self.currPos;\r\n\r\n // Create slides\r\n current = self.createSlide( pos );\r\n\r\n if ( groupLen > 1 ) {\r\n if ( loop || current.index > 0 ) {\r\n self.createSlide( pos - 1 );\r\n }\r\n\r\n if ( loop || current.index < groupLen - 1 ) {\r\n self.createSlide( pos + 1 );\r\n }\r\n }\r\n\r\n self.current = current;\r\n self.currIndex = current.index;\r\n self.currPos = current.pos;\r\n\r\n self.trigger( 'beforeShow', firstRun );\r\n\r\n self.updateControls();\r\n\r\n currentPos = $.fancybox.getTranslate( current.$slide );\r\n\r\n current.isMoved = ( currentPos.left !== 0 || currentPos.top !== 0 ) && !current.$slide.hasClass( 'fancybox-animated' );\r\n current.forcedDuration = undefined;\r\n\r\n if ( $.isNumeric( duration ) ) {\r\n current.forcedDuration = duration;\r\n } else {\r\n duration = current.opts[ firstRun ? 'animationDuration' : 'transitionDuration' ];\r\n }\r\n\r\n duration = parseInt( duration, 10 );\r\n\r\n // Fresh start - reveal container, current slide and start loading content\r\n if ( firstRun ) {\r\n\r\n if ( current.opts.animationEffect && duration ) {\r\n self.$refs.container.css( 'transition-duration', duration + 'ms' );\r\n }\r\n\r\n self.$refs.container.removeClass( 'fancybox-is-hidden' );\r\n\r\n forceRedraw( self.$refs.container );\r\n\r\n self.$refs.container.addClass( 'fancybox-is-open' );\r\n\r\n // Make first slide visible (to display loading icon, if needed)\r\n current.$slide.addClass( 'fancybox-slide--current' );\r\n\r\n self.loadSlide( current );\r\n\r\n self.preload( 'image' );\r\n\r\n return;\r\n }\r\n\r\n // Clean up\r\n $.each(self.slides, function( index, slide ) {\r\n $.fancybox.stop( slide.$slide );\r\n });\r\n\r\n // Make current that slide is visible even if content is still loading\r\n current.$slide.removeClass( 'fancybox-slide--next fancybox-slide--previous' ).addClass( 'fancybox-slide--current' );\r\n\r\n // If slides have been dragged, animate them to correct position\r\n if ( current.isMoved ) {\r\n canvasWidth = Math.round( current.$slide.width() );\r\n\r\n $.each(self.slides, function( index, slide ) {\r\n var pos = slide.pos - current.pos;\r\n\r\n $.fancybox.animate( slide.$slide, {\r\n top : 0,\r\n left : ( pos * canvasWidth ) + ( pos * slide.opts.gutter )\r\n }, duration, function() {\r\n\r\n slide.$slide.removeAttr('style').removeClass( 'fancybox-slide--next fancybox-slide--previous' );\r\n\r\n if ( slide.pos === self.currPos ) {\r\n current.isMoved = false;\r\n\r\n self.complete();\r\n }\r\n });\r\n });\r\n\r\n } else {\r\n self.$refs.stage.children().removeAttr( 'style' );\r\n }\r\n\r\n // Start transition that reveals current content\r\n // or wait when it will be loaded\r\n\r\n if ( current.isLoaded ) {\r\n self.revealContent( current );\r\n\r\n } else {\r\n self.loadSlide( current );\r\n }\r\n\r\n self.preload( 'image' );\r\n\r\n if ( previous.pos === current.pos ) {\r\n return;\r\n }\r\n\r\n // Handle previous slide\r\n // =====================\r\n\r\n transitionProps = 'fancybox-slide--' + ( previous.pos > current.pos ? 'next' : 'previous' );\r\n\r\n previous.$slide.removeClass( 'fancybox-slide--complete fancybox-slide--current fancybox-slide--next fancybox-slide--previous' );\r\n\r\n previous.isComplete = false;\r\n\r\n if ( !duration || ( !current.isMoved && !current.opts.transitionEffect ) ) {\r\n return;\r\n }\r\n\r\n if ( current.isMoved ) {\r\n previous.$slide.addClass( transitionProps );\r\n\r\n } else {\r\n\r\n transitionProps = 'fancybox-animated ' + transitionProps + ' fancybox-fx-' + current.opts.transitionEffect;\r\n\r\n $.fancybox.animate( previous.$slide, transitionProps, duration, function() {\r\n previous.$slide.removeClass( transitionProps ).removeAttr( 'style' );\r\n });\r\n\r\n }\r\n\r\n },\r\n\r\n\r\n // Create new \"slide\" element\r\n // These are gallery items that are actually added to DOM\r\n // =======================================================\r\n\r\n createSlide : function( pos ) {\r\n\r\n var self = this;\r\n var $slide;\r\n var index;\r\n\r\n index = pos % self.group.length;\r\n index = index < 0 ? self.group.length + index : index;\r\n\r\n if ( !self.slides[ pos ] && self.group[ index ] ) {\r\n $slide = $('
').appendTo( self.$refs.stage );\r\n\r\n self.slides[ pos ] = $.extend( true, {}, self.group[ index ], {\r\n pos : pos,\r\n $slide : $slide,\r\n isLoaded : false,\r\n });\r\n\r\n self.updateSlide( self.slides[ pos ] );\r\n }\r\n\r\n return self.slides[ pos ];\r\n },\r\n\r\n\r\n // Scale image to the actual size of the image\r\n // ===========================================\r\n\r\n scaleToActual : function( x, y, duration ) {\r\n\r\n var self = this;\r\n\r\n var current = self.current;\r\n var $what = current.$content;\r\n\r\n var imgPos, posX, posY, scaleX, scaleY;\r\n\r\n var canvasWidth = parseInt( current.$slide.width(), 10 );\r\n var canvasHeight = parseInt( current.$slide.height(), 10 );\r\n\r\n var newImgWidth = current.width;\r\n var newImgHeight = current.height;\r\n\r\n if ( !( current.type == 'image' && !current.hasError) || !$what || self.isAnimating ) {\r\n return;\r\n }\r\n\r\n $.fancybox.stop( $what );\r\n\r\n self.isAnimating = true;\r\n\r\n x = x === undefined ? canvasWidth * 0.5 : x;\r\n y = y === undefined ? canvasHeight * 0.5 : y;\r\n\r\n imgPos = $.fancybox.getTranslate( $what );\r\n\r\n scaleX = newImgWidth / imgPos.width;\r\n scaleY = newImgHeight / imgPos.height;\r\n\r\n // Get center position for original image\r\n posX = ( canvasWidth * 0.5 - newImgWidth * 0.5 );\r\n posY = ( canvasHeight * 0.5 - newImgHeight * 0.5 );\r\n\r\n // Make sure image does not move away from edges\r\n if ( newImgWidth > canvasWidth ) {\r\n posX = imgPos.left * scaleX - ( ( x * scaleX ) - x );\r\n\r\n if ( posX > 0 ) {\r\n posX = 0;\r\n }\r\n\r\n if ( posX < canvasWidth - newImgWidth ) {\r\n posX = canvasWidth - newImgWidth;\r\n }\r\n }\r\n\r\n if ( newImgHeight > canvasHeight) {\r\n posY = imgPos.top * scaleY - ( ( y * scaleY ) - y );\r\n\r\n if ( posY > 0 ) {\r\n posY = 0;\r\n }\r\n\r\n if ( posY < canvasHeight - newImgHeight ) {\r\n posY = canvasHeight - newImgHeight;\r\n }\r\n }\r\n\r\n self.updateCursor( newImgWidth, newImgHeight );\r\n\r\n $.fancybox.animate( $what, {\r\n top : posY,\r\n left : posX,\r\n scaleX : scaleX,\r\n scaleY : scaleY\r\n }, duration || 330, function() {\r\n self.isAnimating = false;\r\n });\r\n\r\n // Stop slideshow\r\n if ( self.SlideShow && self.SlideShow.isActive ) {\r\n self.SlideShow.stop();\r\n }\r\n },\r\n\r\n\r\n // Scale image to fit inside parent element\r\n // ========================================\r\n\r\n scaleToFit : function( duration ) {\r\n\r\n var self = this;\r\n\r\n var current = self.current;\r\n var $what = current.$content;\r\n var end;\r\n\r\n if ( !( current.type == 'image' && !current.hasError) || !$what || self.isAnimating ) {\r\n return;\r\n }\r\n\r\n $.fancybox.stop( $what );\r\n\r\n self.isAnimating = true;\r\n\r\n end = self.getFitPos( current );\r\n\r\n self.updateCursor( end.width, end.height );\r\n\r\n $.fancybox.animate( $what, {\r\n top : end.top,\r\n left : end.left,\r\n scaleX : end.width / $what.width(),\r\n scaleY : end.height / $what.height()\r\n }, duration || 330, function() {\r\n self.isAnimating = false;\r\n });\r\n\r\n },\r\n\r\n // Calculate image size to fit inside viewport\r\n // ===========================================\r\n\r\n getFitPos : function( slide ) {\r\n var self = this;\r\n var $what = slide.$content;\r\n\r\n var imgWidth = slide.width;\r\n var imgHeight = slide.height;\r\n\r\n var margin = slide.opts.margin;\r\n\r\n var canvasWidth, canvasHeight, minRatio, width, height;\r\n\r\n if ( !$what || !$what.length || ( !imgWidth && !imgHeight) ) {\r\n return false;\r\n }\r\n\r\n // Convert \"margin to CSS style: [ top, right, bottom, left ]\r\n if ( $.type( margin ) === \"number\" ) {\r\n margin = [ margin, margin ];\r\n }\r\n\r\n if ( margin.length == 2 ) {\r\n margin = [ margin[0], margin[1], margin[0], margin[1] ];\r\n }\r\n\r\n // We can not use $slide width here, because it can have different diemensions while in transiton\r\n canvasWidth = parseInt( self.$refs.stage.width(), 10 ) - ( margin[ 1 ] + margin[ 3 ] );\r\n canvasHeight = parseInt( self.$refs.stage.height(), 10 ) - ( margin[ 0 ] + margin[ 2 ] );\r\n\r\n minRatio = Math.min(1, canvasWidth / imgWidth, canvasHeight / imgHeight );\r\n\r\n width = Math.floor( minRatio * imgWidth );\r\n height = Math.floor( minRatio * imgHeight );\r\n\r\n // Use floor rounding to make sure it really fits\r\n return {\r\n top : Math.floor( ( canvasHeight - height ) * 0.5 ) + margin[ 0 ],\r\n left : Math.floor( ( canvasWidth - width ) * 0.5 ) + margin[ 3 ],\r\n width : width,\r\n height : height\r\n };\r\n\r\n },\r\n\r\n\r\n // Update content size and position for all slides\r\n // ==============================================\r\n\r\n update : function() {\r\n var self = this;\r\n\r\n $.each( self.slides, function( key, slide ) {\r\n self.updateSlide( slide );\r\n });\r\n },\r\n\r\n\r\n // Update slide content position and size\r\n // ======================================\r\n\r\n updateSlide : function( slide, duration ) {\r\n var self = this,\r\n $what = slide && slide.$content;\r\n\r\n if ( $what && ( slide.width || slide.height ) ) {\r\n self.isAnimating = false;\r\n\r\n $.fancybox.stop( $what );\r\n\r\n $.fancybox.setTranslate( $what, self.getFitPos( slide ) );\r\n\r\n if ( slide.pos === self.currPos ) {\r\n self.updateCursor();\r\n }\r\n }\r\n\r\n slide.$slide.trigger( 'refresh' );\r\n\r\n self.trigger( 'onUpdate', slide );\r\n\r\n },\r\n\r\n\r\n // Horizontally center slide\r\n // =========================\r\n\r\n centerSlide : function( slide, duration ) {\r\n var self = this, canvasWidth, pos;\r\n\r\n if ( self.current ) {\r\n canvasWidth = Math.round( slide.$slide.width() );\r\n pos = slide.pos - self.current.pos;\r\n\r\n $.fancybox.animate( slide.$slide, {\r\n top : 0,\r\n left : ( pos * canvasWidth ) + ( pos * slide.opts.gutter ),\r\n opacity : 1\r\n }, duration === undefined ? 0 : duration, null, false);\r\n }\r\n },\r\n\r\n\r\n // Update cursor style depending if content can be zoomed\r\n // ======================================================\r\n\r\n updateCursor : function( nextWidth, nextHeight ) {\r\n\r\n var self = this;\r\n var isScaledDown;\r\n\r\n var $container = self.$refs.container.removeClass( 'fancybox-is-zoomable fancybox-can-zoomIn fancybox-can-drag fancybox-can-zoomOut' );\r\n\r\n if ( !self.current || self.isClosing ) {\r\n return;\r\n }\r\n\r\n if ( self.isZoomable() ) {\r\n\r\n $container.addClass( 'fancybox-is-zoomable' );\r\n\r\n if ( nextWidth !== undefined && nextHeight !== undefined ) {\r\n isScaledDown = nextWidth < self.current.width && nextHeight < self.current.height;\r\n\r\n } else {\r\n isScaledDown = self.isScaledDown();\r\n }\r\n\r\n if ( isScaledDown ) {\r\n\r\n // If image is scaled down, then, obviously, it can be zoomed to full size\r\n $container.addClass( 'fancybox-can-zoomIn' );\r\n\r\n } else {\r\n\r\n if ( self.current.opts.touch ) {\r\n\r\n // If image size ir largen than available available and touch module is not disable,\r\n // then user can do panning\r\n $container.addClass( 'fancybox-can-drag' );\r\n\r\n } else {\r\n $container.addClass( 'fancybox-can-zoomOut' );\r\n }\r\n\r\n }\r\n\r\n } else if ( self.current.opts.touch ) {\r\n $container.addClass( 'fancybox-can-drag' );\r\n }\r\n\r\n },\r\n\r\n\r\n // Check if current slide is zoomable\r\n // ==================================\r\n\r\n isZoomable : function() {\r\n\r\n var self = this;\r\n\r\n var current = self.current;\r\n var fitPos;\r\n\r\n if ( !current || self.isClosing ) {\r\n return;\r\n }\r\n\r\n // Assume that slide is zoomable if\r\n // - image is loaded successfuly\r\n // - click action is \"zoom\"\r\n // - actual size of the image is smaller than available area\r\n if ( current.type === 'image' && current.isLoaded && !current.hasError &&\r\n ( current.opts.clickContent === 'zoom' || ( $.isFunction( current.opts.clickContent ) && current.opts.clickContent( current ) === \"zoom\" ) )\r\n ) {\r\n\r\n fitPos = self.getFitPos( current );\r\n\r\n if ( current.width > fitPos.width || current.height > fitPos.height ) {\r\n return true;\r\n }\r\n\r\n }\r\n\r\n return false;\r\n\r\n },\r\n\r\n\r\n // Check if current image dimensions are smaller than actual\r\n // =========================================================\r\n\r\n isScaledDown : function() {\r\n\r\n var self = this;\r\n\r\n var current = self.current;\r\n var $what = current.$content;\r\n\r\n var rez = false;\r\n\r\n if ( $what ) {\r\n rez = $.fancybox.getTranslate( $what );\r\n rez = rez.width < current.width || rez.height < current.height;\r\n }\r\n\r\n return rez;\r\n\r\n },\r\n\r\n\r\n // Check if image dimensions exceed parent element\r\n // ===============================================\r\n\r\n canPan : function() {\r\n\r\n var self = this;\r\n\r\n var current = self.current;\r\n var $what = current.$content;\r\n\r\n var rez = false;\r\n\r\n if ( $what ) {\r\n rez = self.getFitPos( current );\r\n rez = Math.abs( $what.width() - rez.width ) > 1 || Math.abs( $what.height() - rez.height ) > 1;\r\n }\r\n\r\n return rez;\r\n\r\n },\r\n\r\n\r\n // Load content into the slide\r\n // ===========================\r\n\r\n loadSlide : function( slide ) {\r\n\r\n var self = this, type, $slide;\r\n var ajaxLoad;\r\n\r\n if ( slide.isLoading ) {\r\n return;\r\n }\r\n\r\n if ( slide.isLoaded ) {\r\n return;\r\n }\r\n\r\n slide.isLoading = true;\r\n\r\n self.trigger( 'beforeLoad', slide );\r\n\r\n type = slide.type;\r\n $slide = slide.$slide;\r\n\r\n $slide\r\n .off( 'refresh' )\r\n .trigger( 'onReset' )\r\n .addClass( 'fancybox-slide--' + ( type || 'unknown' ) )\r\n .addClass( slide.opts.slideClass );\r\n\r\n // Create content depending on the type\r\n\r\n switch ( type ) {\r\n\r\n case 'image':\r\n\r\n self.setImage( slide );\r\n\r\n break;\r\n\r\n case 'iframe':\r\n\r\n self.setIframe( slide );\r\n\r\n break;\r\n\r\n case 'html':\r\n\r\n self.setContent( slide, slide.src || slide.content );\r\n\r\n break;\r\n\r\n case 'inline':\r\n\r\n if ( $( slide.src ).length ) {\r\n self.setContent( slide, $( slide.src ) );\r\n\r\n } else {\r\n self.setError( slide );\r\n }\r\n\r\n break;\r\n\r\n case 'ajax':\r\n\r\n self.showLoading( slide );\r\n\r\n ajaxLoad = $.ajax( $.extend( {}, slide.opts.ajax.settings, {\r\n url : slide.src,\r\n success : function ( data, textStatus ) {\r\n\r\n if ( textStatus === 'success' ) {\r\n self.setContent( slide, data );\r\n }\r\n\r\n },\r\n error : function ( jqXHR, textStatus ) {\r\n\r\n if ( jqXHR && textStatus !== 'abort' ) {\r\n self.setError( slide );\r\n }\r\n\r\n }\r\n }));\r\n\r\n $slide.one( 'onReset', function () {\r\n ajaxLoad.abort();\r\n });\r\n\r\n break;\r\n\r\n case 'video' :\r\n\r\n self.setContent( slide,\r\n ''\r\n );\r\n\r\n break;\r\n\r\n default:\r\n\r\n self.setError( slide );\r\n\r\n break;\r\n\r\n }\r\n\r\n return true;\r\n\r\n },\r\n\r\n\r\n // Use thumbnail image, if possible\r\n // ================================\r\n\r\n setImage : function( slide ) {\r\n\r\n var self = this;\r\n var srcset = slide.opts.srcset || slide.opts.image.srcset;\r\n\r\n var found, temp, pxRatio, windowWidth;\r\n\r\n // If we have \"srcset\", then we need to find matching \"src\" value.\r\n // This is necessary, because when you set an src attribute, the browser will preload the image\r\n // before any javascript or even CSS is applied.\r\n if ( srcset ) {\r\n pxRatio = window.devicePixelRatio || 1;\r\n windowWidth = window.innerWidth * pxRatio;\r\n\r\n temp = srcset.split(',').map(function ( el ) {\r\n \t\tvar ret = {};\r\n\r\n \t\tel.trim().split(/\\s+/).forEach(function ( el, i ) {\r\n var value = parseInt( el.substring(0, el.length - 1), 10 );\r\n\r\n \t\t\tif ( i === 0 ) {\r\n \t\t\t\treturn ( ret.url = el );\r\n \t\t\t}\r\n\r\n if ( value ) {\r\n ret.value = value;\r\n ret.postfix = el[ el.length - 1 ];\r\n }\r\n\r\n \t\t});\r\n\r\n \t\treturn ret;\r\n \t});\r\n\r\n // Sort by value\r\n temp.sort(function (a, b) {\r\n return a.value - b.value;\r\n });\r\n\r\n // Ok, now we have an array of all srcset values\r\n for ( var j = 0; j < temp.length; j++ ) {\r\n var el = temp[ j ];\r\n\r\n if ( ( el.postfix === 'w' && el.value >= windowWidth ) || ( el.postfix === 'x' && el.value >= pxRatio ) ) {\r\n found = el;\r\n break;\r\n }\r\n }\r\n\r\n // If not found, take the last one\r\n if ( !found && temp.length ) {\r\n found = temp[ temp.length - 1 ];\r\n }\r\n\r\n if ( found ) {\r\n slide.src = found.url;\r\n\r\n // If we have default width/height values, we can calculate height for matching source\r\n if ( slide.width && slide.height && found.postfix == 'w' ) {\r\n slide.height = ( slide.width / slide.height ) * found.value;\r\n slide.width = found.value;\r\n }\r\n }\r\n }\r\n\r\n // This will be wrapper containing both ghost and actual image\r\n slide.$content = $('
')\r\n .addClass( 'fancybox-is-hidden' )\r\n .appendTo( slide.$slide );\r\n\r\n\r\n // If we have a thumbnail, we can display it while actual image is loading\r\n // Users will not stare at black screen and actual image will appear gradually\r\n if ( slide.opts.preload !== false && slide.opts.width && slide.opts.height && ( slide.opts.thumb || slide.opts.$thumb ) ) {\r\n\r\n slide.width = slide.opts.width;\r\n slide.height = slide.opts.height;\r\n\r\n slide.$ghost = $('')\r\n .one('error', function() {\r\n\r\n $(this).remove();\r\n\r\n slide.$ghost = null;\r\n\r\n self.setBigImage( slide );\r\n\r\n })\r\n .one('load', function() {\r\n\r\n self.afterLoad( slide );\r\n\r\n self.setBigImage( slide );\r\n\r\n })\r\n .addClass( 'fancybox-image' )\r\n .appendTo( slide.$content )\r\n .attr( 'src', slide.opts.thumb || slide.opts.$thumb.attr( 'src' ) );\r\n\r\n } else {\r\n\r\n self.setBigImage( slide );\r\n\r\n }\r\n\r\n },\r\n\r\n\r\n // Create full-size image\r\n // ======================\r\n\r\n setBigImage : function ( slide ) {\r\n var self = this;\r\n var $img = $('');\r\n\r\n slide.$image = $img\r\n .one('error', function() {\r\n\r\n self.setError( slide );\r\n\r\n })\r\n .one('load', function() {\r\n\r\n // Clear timeout that checks if loading icon needs to be displayed\r\n clearTimeout( slide.timouts );\r\n\r\n slide.timouts = null;\r\n\r\n if ( self.isClosing ) {\r\n return;\r\n }\r\n\r\n slide.width = slide.opts.width || this.naturalWidth;\r\n slide.height = slide.opts.height || this.naturalHeight;\r\n\r\n if ( slide.opts.image.srcset ) {\r\n $img.attr( 'sizes', '100vw' ).attr( 'srcset', slide.opts.image.srcset );\r\n }\r\n\r\n self.hideLoading( slide );\r\n\r\n if ( slide.$ghost ) {\r\n\r\n slide.timouts = setTimeout(function() {\r\n slide.timouts = null;\r\n\r\n slide.$ghost.hide();\r\n\r\n }, Math.min( 300, Math.max( 1000, slide.height / 1600 ) ) );\r\n\r\n } else {\r\n self.afterLoad( slide );\r\n }\r\n\r\n })\r\n .addClass( 'fancybox-image' )\r\n .attr('src', slide.src)\r\n .appendTo( slide.$content );\r\n\r\n if ( ( $img[0].complete || $img[0].readyState == \"complete\" ) && $img[0].naturalWidth && $img[0].naturalHeight ) {\r\n $img.trigger( 'load' );\r\n\r\n } else if( $img[0].error ) {\r\n $img.trigger( 'error' );\r\n\r\n } else {\r\n\r\n slide.timouts = setTimeout(function() {\r\n if ( !$img[0].complete && !slide.hasError ) {\r\n self.showLoading( slide );\r\n }\r\n\r\n }, 100);\r\n\r\n }\r\n\r\n },\r\n\r\n\r\n // Create iframe wrapper, iframe and bindings\r\n // ==========================================\r\n\r\n setIframe : function( slide ) {\r\n var self\t= this,\r\n opts = slide.opts.iframe,\r\n $slide\t= slide.$slide,\r\n $iframe;\r\n\r\n slide.$content = $('
')\r\n .css( opts.css )\r\n .appendTo( $slide );\r\n\r\n $iframe = $( opts.tpl.replace(/\\{rnd\\}/g, new Date().getTime()) )\r\n .attr( opts.attr )\r\n .appendTo( slide.$content );\r\n\r\n if ( opts.preload ) {\r\n\r\n self.showLoading( slide );\r\n\r\n // Unfortunately, it is not always possible to determine if iframe is successfully loaded\r\n // (due to browser security policy)\r\n\r\n $iframe.on('load.fb error.fb', function(e) {\r\n this.isReady = 1;\r\n\r\n slide.$slide.trigger( 'refresh' );\r\n\r\n self.afterLoad( slide );\r\n });\r\n\r\n // Recalculate iframe content size\r\n // ===============================\r\n\r\n $slide.on('refresh.fb', function() {\r\n var $wrap = slide.$content,\r\n frameWidth = opts.css.width,\r\n frameHeight = opts.css.height,\r\n scrollWidth,\r\n $contents,\r\n $body;\r\n\r\n if ( $iframe[0].isReady !== 1 ) {\r\n return;\r\n }\r\n\r\n // Check if content is accessible,\r\n // it will fail if frame is not with the same origin\r\n\r\n try {\r\n $contents = $iframe.contents();\r\n $body = $contents.find('body');\r\n\r\n } catch (ignore) {}\r\n\r\n // Calculate dimensions for the wrapper\r\n if ( $body && $body.length ) {\r\n\r\n if ( frameWidth === undefined ) {\r\n scrollWidth = $iframe[0].contentWindow.document.documentElement.scrollWidth;\r\n\r\n frameWidth = Math.ceil( $body.outerWidth(true) + ( $wrap.width() - scrollWidth ) );\r\n frameWidth += $wrap.outerWidth() - $wrap.innerWidth();\r\n }\r\n\r\n if ( frameHeight === undefined ) {\r\n frameHeight = Math.ceil( $body.outerHeight(true) );\r\n frameHeight += $wrap.outerHeight() - $wrap.innerHeight();\r\n }\r\n\r\n // Resize wrapper to fit iframe content\r\n if ( frameWidth ) {\r\n $wrap.width( frameWidth );\r\n }\r\n\r\n if ( frameHeight ) {\r\n $wrap.height( frameHeight );\r\n }\r\n }\r\n\r\n $wrap.removeClass( 'fancybox-is-hidden' );\r\n\r\n });\r\n\r\n } else {\r\n\r\n this.afterLoad( slide );\r\n\r\n }\r\n\r\n $iframe.attr( 'src', slide.src );\r\n\r\n if ( slide.opts.smallBtn === true ) {\r\n slide.$content.prepend( self.translate( slide, slide.opts.btnTpl.smallBtn ) );\r\n }\r\n\r\n // Remove iframe if closing or changing gallery item\r\n $slide.one( 'onReset', function () {\r\n\r\n // This helps IE not to throw errors when closing\r\n try {\r\n\r\n $( this ).find( 'iframe' ).hide().attr( 'src', '//about:blank' );\r\n\r\n } catch ( ignore ) {}\r\n\r\n $( this ).empty();\r\n\r\n slide.isLoaded = false;\r\n\r\n });\r\n\r\n },\r\n\r\n\r\n // Wrap and append content to the slide\r\n // ======================================\r\n\r\n setContent : function ( slide, content ) {\r\n\r\n var self = this;\r\n\r\n if ( self.isClosing ) {\r\n return;\r\n }\r\n\r\n self.hideLoading( slide );\r\n\r\n slide.$slide.empty();\r\n\r\n if ( isQuery( content ) && content.parent().length ) {\r\n\r\n // If content is a jQuery object, then it will be moved to the slide.\r\n // The placeholder is created so we will know where to put it back.\r\n // If user is navigating gallery fast, then the content might be already inside fancyBox\r\n // =====================================================================================\r\n\r\n // Make sure content is not already moved to fancyBox\r\n content.parent( '.fancybox-slide--inline' ).trigger( 'onReset' );\r\n\r\n // Create temporary element marking original place of the content\r\n slide.$placeholder = $( '
' ).hide().insertAfter( content );\r\n\r\n // Make sure content is visible\r\n content.css('display', 'inline-block');\r\n\r\n } else if ( !slide.hasError ) {\r\n\r\n // If content is just a plain text, try to convert it to html\r\n if ( $.type( content ) === 'string' ) {\r\n content = $('
').append( $.trim( content ) ).contents();\r\n\r\n // If we have text node, then add wrapping element to make vertical alignment work\r\n if ( content[0].nodeType === 3 ) {\r\n content = $('
').html( content );\r\n }\r\n }\r\n\r\n // If \"filter\" option is provided, then filter content\r\n if ( slide.opts.filter ) {\r\n content = $('
').html( content ).find( slide.opts.filter );\r\n }\r\n\r\n }\r\n\r\n slide.$slide.one('onReset', function () {\r\n\r\n // Pause all html5 video/audio\r\n $( this ).find( 'video,audio' ).trigger( 'pause' );\r\n\r\n // Put content back\r\n if ( slide.$placeholder ) {\r\n slide.$placeholder.after( content.hide() ).remove();\r\n\r\n slide.$placeholder = null;\r\n }\r\n\r\n // Remove custom close button\r\n if ( slide.$smallBtn ) {\r\n slide.$smallBtn.remove();\r\n\r\n slide.$smallBtn = null;\r\n }\r\n\r\n // Remove content and mark slide as not loaded\r\n if ( !slide.hasError ) {\r\n $(this).empty();\r\n\r\n slide.isLoaded = false;\r\n }\r\n\r\n });\r\n\r\n slide.$content = $( content ).appendTo( slide.$slide );\r\n\r\n this.afterLoad( slide );\r\n },\r\n\r\n // Display error message\r\n // =====================\r\n\r\n setError : function ( slide ) {\r\n\r\n slide.hasError = true;\r\n\r\n slide.$slide.removeClass( 'fancybox-slide--' + slide.type );\r\n\r\n this.setContent( slide, this.translate( slide, slide.opts.errorTpl ) );\r\n\r\n },\r\n\r\n\r\n // Show loading icon inside the slide\r\n // ==================================\r\n\r\n showLoading : function( slide ) {\r\n\r\n var self = this;\r\n\r\n slide = slide || self.current;\r\n\r\n if ( slide && !slide.$spinner ) {\r\n slide.$spinner = $( self.opts.spinnerTpl ).appendTo( slide.$slide );\r\n }\r\n\r\n },\r\n\r\n // Remove loading icon from the slide\r\n // ==================================\r\n\r\n hideLoading : function( slide ) {\r\n\r\n var self = this;\r\n\r\n slide = slide || self.current;\r\n\r\n if ( slide && slide.$spinner ) {\r\n slide.$spinner.remove();\r\n\r\n delete slide.$spinner;\r\n }\r\n\r\n },\r\n\r\n\r\n // Adjustments after slide content has been loaded\r\n // ===============================================\r\n\r\n afterLoad : function( slide ) {\r\n\r\n var self = this;\r\n\r\n if ( self.isClosing ) {\r\n return;\r\n }\r\n\r\n slide.isLoading = false;\r\n slide.isLoaded = true;\r\n\r\n self.trigger( 'afterLoad', slide );\r\n\r\n self.hideLoading( slide );\r\n\r\n if ( slide.opts.smallBtn && !slide.$smallBtn ) {\r\n slide.$smallBtn = $( self.translate( slide, slide.opts.btnTpl.smallBtn ) ).appendTo( slide.$content.filter('div,form').first() );\r\n }\r\n\r\n if ( slide.opts.protect && slide.$content && !slide.hasError ) {\r\n\r\n // Disable right click\r\n slide.$content.on( 'contextmenu.fb', function( e ) {\r\n if ( e.button == 2 ) {\r\n e.preventDefault();\r\n }\r\n\r\n return true;\r\n });\r\n\r\n // Add fake element on top of the image\r\n // This makes a bit harder for user to select image\r\n if ( slide.type === 'image' ) {\r\n $( '
' ).appendTo( slide.$content );\r\n }\r\n\r\n }\r\n\r\n self.revealContent( slide );\r\n\r\n },\r\n\r\n\r\n // Make content visible\r\n // This method is called right after content has been loaded or\r\n // user navigates gallery and transition should start\r\n // ============================================================\r\n\r\n revealContent : function( slide ) {\r\n\r\n var self = this;\r\n var $slide = slide.$slide;\r\n\r\n var effect, effectClassName, duration, opacity, end, start = false;\r\n\r\n effect = slide.opts[ self.firstRun ? 'animationEffect' : 'transitionEffect' ];\r\n duration = slide.opts[ self.firstRun ? 'animationDuration' : 'transitionDuration' ];\r\n\r\n duration = parseInt( slide.forcedDuration === undefined ? duration : slide.forcedDuration, 10 );\r\n\r\n if ( slide.isMoved || slide.pos !== self.currPos || !duration ) {\r\n effect = false;\r\n }\r\n\r\n // Check if can zoom\r\n if ( effect === 'zoom' && !( slide.pos === self.currPos && duration && slide.type === 'image' && !slide.hasError && ( start = self.getThumbPos( slide ) ) ) ) {\r\n effect = 'fade';\r\n }\r\n\r\n // Zoom animation\r\n // ==============\r\n\r\n if ( effect === 'zoom' ) {\r\n end = self.getFitPos( slide );\r\n\r\n end.scaleX = end.width / start.width;\r\n end.scaleY = end.height / start.height;\r\n\r\n delete end.width;\r\n delete end.height;\r\n\r\n // Check if we need to animate opacity\r\n opacity = slide.opts.zoomOpacity;\r\n\r\n if ( opacity == 'auto' ) {\r\n opacity = Math.abs( slide.width / slide.height - start.width / start.height ) > 0.1;\r\n }\r\n\r\n if ( opacity ) {\r\n start.opacity = 0.1;\r\n end.opacity = 1;\r\n }\r\n\r\n // Draw image at start position\r\n $.fancybox.setTranslate( slide.$content.removeClass( 'fancybox-is-hidden' ), start );\r\n\r\n forceRedraw( slide.$content );\r\n\r\n // Start animation\r\n $.fancybox.animate( slide.$content, end, duration, function() {\r\n self.complete();\r\n });\r\n\r\n return;\r\n }\r\n\r\n self.updateSlide( slide );\r\n\r\n\r\n // Simply show content\r\n // ===================\r\n\r\n if ( !effect ) {\r\n forceRedraw( $slide );\r\n\r\n slide.$content.removeClass( 'fancybox-is-hidden' );\r\n\r\n if ( slide.pos === self.currPos ) {\r\n self.complete();\r\n }\r\n\r\n return;\r\n }\r\n\r\n $.fancybox.stop( $slide );\r\n\r\n effectClassName = 'fancybox-animated fancybox-slide--' + ( slide.pos >= self.prevPos ? 'next' : 'previous' ) + ' fancybox-fx-' + effect;\r\n\r\n $slide.removeAttr( 'style' ).removeClass( 'fancybox-slide--current fancybox-slide--next fancybox-slide--previous' ).addClass( effectClassName );\r\n\r\n slide.$content.removeClass( 'fancybox-is-hidden' );\r\n\r\n //Force reflow for CSS3 transitions\r\n forceRedraw( $slide );\r\n\r\n $.fancybox.animate( $slide, 'fancybox-slide--current', duration, function(e) {\r\n $slide.removeClass( effectClassName ).removeAttr( 'style' );\r\n\r\n if ( slide.pos === self.currPos ) {\r\n self.complete();\r\n }\r\n\r\n }, true);\r\n\r\n },\r\n\r\n\r\n // Check if we can and have to zoom from thumbnail\r\n //================================================\r\n\r\n getThumbPos : function( slide ) {\r\n\r\n var self = this;\r\n var rez = false;\r\n\r\n // Check if element is inside the viewport by at least 1 pixel\r\n var isElementVisible = function( $el ) {\r\n var element = $el[0];\r\n\r\n var elementRect = element.getBoundingClientRect();\r\n var parentRects = [];\r\n\r\n var visibleInAllParents;\r\n\r\n while ( element.parentElement !== null ) {\r\n if ( $(element.parentElement).css('overflow') === 'hidden' || $(element.parentElement).css('overflow') === 'auto' ) {\r\n parentRects.push(element.parentElement.getBoundingClientRect());\r\n }\r\n\r\n element = element.parentElement;\r\n }\r\n\r\n visibleInAllParents = parentRects.every(function(parentRect){\r\n var visiblePixelX = Math.min(elementRect.right, parentRect.right) - Math.max(elementRect.left, parentRect.left);\r\n var visiblePixelY = Math.min(elementRect.bottom, parentRect.bottom) - Math.max(elementRect.top, parentRect.top);\r\n\r\n return visiblePixelX > 0 && visiblePixelY > 0;\r\n });\r\n\r\n return visibleInAllParents &&\r\n elementRect.bottom > 0 && elementRect.right > 0 &&\r\n elementRect.left < $(window).width() && elementRect.top < $(window).height();\r\n };\r\n\r\n var $thumb = slide.opts.$thumb;\r\n var thumbPos = $thumb ? $thumb.offset() : 0;\r\n var slidePos;\r\n\r\n if ( thumbPos && $thumb[0].ownerDocument === document && isElementVisible( $thumb ) ) {\r\n slidePos = self.$refs.stage.offset();\r\n\r\n rez = {\r\n top : thumbPos.top - slidePos.top + parseFloat( $thumb.css( \"border-top-width\" ) || 0 ),\r\n left : thumbPos.left - slidePos.left + parseFloat( $thumb.css( \"border-left-width\" ) || 0 ),\r\n width : $thumb.width(),\r\n height : $thumb.height(),\r\n scaleX : 1,\r\n scaleY : 1\r\n };\r\n }\r\n\r\n return rez;\r\n },\r\n\r\n\r\n // Final adjustments after current gallery item is moved to position\r\n // and it`s content is loaded\r\n // ==================================================================\r\n\r\n complete : function() {\r\n var self = this,\r\n current = self.current,\r\n slides = {},\r\n promise;\r\n\r\n if ( current.isMoved || !current.isLoaded || current.isComplete ) {\r\n return;\r\n }\r\n\r\n current.isComplete = true;\r\n\r\n current.$slide.siblings().trigger( 'onReset' );\r\n\r\n self.preload( 'inline' );\r\n\r\n // Trigger any CSS3 transiton inside the slide\r\n forceRedraw( current.$slide );\r\n\r\n current.$slide.addClass( 'fancybox-slide--complete' );\r\n\r\n // Remove unnecessary slides\r\n $.each( self.slides, function( key, slide ) {\r\n if ( slide.pos >= self.currPos - 1 && slide.pos <= self.currPos + 1 ) {\r\n slides[ slide.pos ] = slide;\r\n\r\n } else if ( slide ) {\r\n $.fancybox.stop( slide.$slide );\r\n\r\n slide.$slide.off().remove();\r\n }\r\n });\r\n\r\n self.slides = slides;\r\n\r\n self.updateCursor();\r\n\r\n self.trigger( 'afterShow' );\r\n\r\n // Play first html5 video/audio\r\n current.$slide.find( 'video,audio' ).first().trigger( 'play' );\r\n\r\n // Try to focus on the first focusable element\r\n if ( $( document.activeElement ).is( '[disabled]' ) || ( current.opts.autoFocus && !( current.type == 'image' || current.type === 'iframe' ) ) ) {\r\n self.focus();\r\n }\r\n\r\n },\r\n\r\n\r\n // Preload next and previous slides\r\n // ================================\r\n\r\n preload : function( type ) {\r\n var self = this,\r\n next = self.slides[ self.currPos + 1 ],\r\n prev = self.slides[ self.currPos - 1 ];\r\n\r\n if ( next && next.type === type ) {\r\n self.loadSlide( next );\r\n }\r\n\r\n if ( prev && prev.type === type ) {\r\n self.loadSlide( prev );\r\n }\r\n },\r\n\r\n\r\n // Try to find and focus on the first focusable element\r\n // ====================================================\r\n\r\n focus : function() {\r\n var current = this.current;\r\n var $el;\r\n\r\n if ( this.isClosing ) {\r\n return;\r\n }\r\n\r\n if ( current && current.isComplete ) {\r\n\r\n // Look for first input with autofocus attribute\r\n $el = current.$slide.find('input[autofocus]:enabled:visible:first');\r\n\r\n if ( !$el.length ) {\r\n $el = current.$slide.find('button,:input,[tabindex],a').filter(':enabled:visible:first');\r\n }\r\n }\r\n\r\n $el = $el && $el.length ? $el : this.$refs.container;\r\n\r\n $el.focus();\r\n },\r\n\r\n\r\n // Activates current instance - brings container to the front and enables keyboard,\r\n // notifies other instances about deactivating\r\n // =================================================================================\r\n\r\n activate : function () {\r\n var self = this;\r\n\r\n // Deactivate all instances\r\n $( '.fancybox-container' ).each(function () {\r\n var instance = $(this).data( 'FancyBox' );\r\n\r\n // Skip self and closing instances\r\n if (instance && instance.id !== self.id && !instance.isClosing) {\r\n instance.trigger( 'onDeactivate' );\r\n\r\n instance.removeEvents();\r\n\r\n instance.isVisible = false;\r\n }\r\n\r\n });\r\n\r\n self.isVisible = true;\r\n\r\n if ( self.current || self.isIdle ) {\r\n self.update();\r\n\r\n self.updateControls();\r\n }\r\n\r\n self.trigger( 'onActivate' );\r\n\r\n self.addEvents();\r\n },\r\n\r\n\r\n // Start closing procedure\r\n // This will start \"zoom-out\" animation if needed and clean everything up afterwards\r\n // =================================================================================\r\n\r\n close : function( e, d ) {\r\n\r\n var self = this;\r\n var current = self.current;\r\n\r\n var effect, duration;\r\n var $what, opacity, start, end;\r\n\r\n var done = function() {\r\n self.cleanUp( e );\r\n };\r\n\r\n if ( self.isClosing ) {\r\n return false;\r\n }\r\n\r\n self.isClosing = true;\r\n\r\n // If beforeClose callback prevents closing, make sure content is centered\r\n if ( self.trigger( 'beforeClose', e ) === false ) {\r\n self.isClosing = false;\r\n\r\n requestAFrame(function() {\r\n self.update();\r\n });\r\n\r\n return false;\r\n }\r\n\r\n // Remove all events\r\n // If there are multiple instances, they will be set again by \"activate\" method\r\n self.removeEvents();\r\n\r\n if ( current.timouts ) {\r\n clearTimeout( current.timouts );\r\n }\r\n\r\n $what = current.$content;\r\n effect = current.opts.animationEffect;\r\n duration = $.isNumeric( d ) ? d : ( effect ? current.opts.animationDuration : 0 );\r\n\r\n // Remove other slides\r\n current.$slide.off( transitionEnd ).removeClass( 'fancybox-slide--complete fancybox-slide--next fancybox-slide--previous fancybox-animated' );\r\n\r\n current.$slide.siblings().trigger( 'onReset' ).remove();\r\n\r\n // Trigger animations\r\n if ( duration ) {\r\n self.$refs.container.removeClass( 'fancybox-is-open' ).addClass( 'fancybox-is-closing' );\r\n }\r\n\r\n // Clean up\r\n self.hideLoading( current );\r\n\r\n self.hideControls();\r\n\r\n self.updateCursor();\r\n\r\n // Check if possible to zoom-out\r\n if ( effect === 'zoom' && !( e !== true && $what && duration && current.type === 'image' && !current.hasError && ( end = self.getThumbPos( current ) ) ) ) {\r\n effect = 'fade';\r\n }\r\n\r\n if ( effect === 'zoom' ) {\r\n $.fancybox.stop( $what );\r\n\r\n start = $.fancybox.getTranslate( $what );\r\n\r\n start.width = start.width * start.scaleX;\r\n start.height = start.height * start.scaleY;\r\n\r\n // Check if we need to animate opacity\r\n opacity = current.opts.zoomOpacity;\r\n\r\n if ( opacity == 'auto' ) {\r\n opacity = Math.abs( current.width / current.height - end.width / end.height ) > 0.1;\r\n }\r\n\r\n if ( opacity ) {\r\n end.opacity = 0;\r\n }\r\n\r\n start.scaleX = start.width / end.width;\r\n start.scaleY = start.height / end.height;\r\n\r\n start.width = end.width;\r\n start.height = end.height;\r\n\r\n $.fancybox.setTranslate( current.$content, start );\r\n\r\n forceRedraw( current.$content );\r\n\r\n $.fancybox.animate( current.$content, end, duration, done );\r\n\r\n return true;\r\n }\r\n\r\n if ( effect && duration ) {\r\n\r\n // If skip animation\r\n if ( e === true ) {\r\n setTimeout( done, duration );\r\n\r\n } else {\r\n $.fancybox.animate( current.$slide.removeClass( 'fancybox-slide--current' ), 'fancybox-animated fancybox-slide--previous fancybox-fx-' + effect, duration, done );\r\n }\r\n\r\n } else {\r\n done();\r\n }\r\n\r\n return true;\r\n },\r\n\r\n\r\n // Final adjustments after removing the instance\r\n // =============================================\r\n\r\n cleanUp : function( e ) {\r\n var self = this,\r\n $body = $( 'body' ),\r\n instance,\r\n offset;\r\n\r\n self.current.$slide.trigger( 'onReset' );\r\n\r\n self.$refs.container.empty().remove();\r\n\r\n self.trigger( 'afterClose', e );\r\n\r\n // Place back focus\r\n if ( self.$lastFocus && !!self.current.opts.backFocus ) {\r\n self.$lastFocus.focus();\r\n }\r\n\r\n self.current = null;\r\n\r\n // Check if there are other instances\r\n instance = $.fancybox.getInstance();\r\n\r\n if ( instance ) {\r\n instance.activate();\r\n\r\n } else {\r\n\r\n $W.scrollTop( self.scrollTop ).scrollLeft( self.scrollLeft );\r\n\r\n $body.removeClass( 'fancybox-active compensate-for-scrollbar' );\r\n\r\n if ( $body.hasClass( 'fancybox-iosfix' ) ) {\r\n offset = parseInt(document.body.style.top, 10);\r\n\r\n $body.removeClass( 'fancybox-iosfix' ).css( 'top', '' ).scrollTop( offset * -1 );\r\n }\r\n\r\n $( '#fancybox-style-noscroll' ).remove();\r\n\r\n }\r\n\r\n },\r\n\r\n\r\n // Call callback and trigger an event\r\n // ==================================\r\n\r\n trigger : function( name, slide ) {\r\n var args = Array.prototype.slice.call(arguments, 1),\r\n self = this,\r\n obj = slide && slide.opts ? slide : self.current,\r\n rez;\r\n\r\n if ( obj ) {\r\n args.unshift( obj );\r\n\r\n } else {\r\n obj = self;\r\n }\r\n\r\n args.unshift( self );\r\n\r\n if ( $.isFunction( obj.opts[ name ] ) ) {\r\n rez = obj.opts[ name ].apply( obj, args );\r\n }\r\n\r\n if ( rez === false ) {\r\n return rez;\r\n }\r\n\r\n if ( name === 'afterClose' || !self.$refs ) {\r\n $D.trigger( name + '.fb', args );\r\n\r\n } else {\r\n self.$refs.container.trigger( name + '.fb', args );\r\n }\r\n\r\n },\r\n\r\n\r\n // Update infobar values, navigation button states and reveal caption\r\n // ==================================================================\r\n\r\n updateControls : function ( force ) {\r\n\r\n var self = this;\r\n\r\n var current = self.current,\r\n index = current.index,\r\n caption = current.opts.caption,\r\n $container = self.$refs.container,\r\n $caption = self.$refs.caption;\r\n\r\n // Recalculate content dimensions\r\n current.$slide.trigger( 'refresh' );\r\n\r\n self.$caption = caption && caption.length ? $caption.html( caption ) : null;\r\n\r\n if ( !self.isHiddenControls && !self.isIdle ) {\r\n self.showControls();\r\n }\r\n\r\n // Update info and navigation elements\r\n $container.find('[data-fancybox-count]').html( self.group.length );\r\n $container.find('[data-fancybox-index]').html( index + 1 );\r\n\r\n $container.find('[data-fancybox-prev]').prop( 'disabled', ( !current.opts.loop && index <= 0 ) );\r\n $container.find('[data-fancybox-next]').prop( 'disabled', ( !current.opts.loop && index >= self.group.length - 1 ) );\r\n\r\n if ( current.type === 'image' ) {\r\n\r\n // Update download button source\r\n $container.find('[data-fancybox-download]').attr( 'href', current.opts.image.src || current.src ).show();\r\n\r\n } else {\r\n $container.find('[data-fancybox-download],[data-fancybox-zoom]').hide();\r\n }\r\n },\r\n\r\n // Hide toolbar and caption\r\n // ========================\r\n\r\n hideControls : function () {\r\n\r\n this.isHiddenControls = true;\r\n\r\n this.$refs.container.removeClass( 'fancybox-show-infobar fancybox-show-toolbar fancybox-show-caption fancybox-show-nav' );\r\n\r\n },\r\n\r\n showControls : function() {\r\n var self = this;\r\n var opts = self.current ? self.current.opts : self.opts;\r\n var $container = self.$refs.container;\r\n\r\n self.isHiddenControls = false;\r\n self.idleSecondsCounter = 0;\r\n\r\n $container\r\n .toggleClass( 'fancybox-show-toolbar', !!( opts.toolbar && opts.buttons ) )\r\n .toggleClass( 'fancybox-show-infobar', !!( opts.infobar && self.group.length > 1 ) )\r\n .toggleClass( 'fancybox-show-nav', !!( opts.arrows && self.group.length > 1 ) )\r\n .toggleClass( 'fancybox-is-modal', !!opts.modal );\r\n\r\n if ( self.$caption ) {\r\n $container.addClass( 'fancybox-show-caption ');\r\n\r\n } else {\r\n $container.removeClass( 'fancybox-show-caption' );\r\n }\r\n\r\n },\r\n\r\n\r\n // Toggle toolbar and caption\r\n // ==========================\r\n\r\n toggleControls : function() {\r\n if ( this.isHiddenControls ) {\r\n this.showControls();\r\n\r\n } else {\r\n this.hideControls();\r\n }\r\n\r\n },\r\n\r\n\r\n });\r\n\r\n\r\n $.fancybox = {\r\n\r\n version : \"3.2.10\",\r\n defaults : defaults,\r\n\r\n\r\n // Get current instance and execute a command.\r\n //\r\n // Examples of usage:\r\n //\r\n // $instance = $.fancybox.getInstance();\r\n // $.fancybox.getInstance().jumpTo( 1 );\r\n // $.fancybox.getInstance( 'jumpTo', 1 );\r\n // $.fancybox.getInstance( function() {\r\n // console.info( this.currIndex );\r\n // });\r\n // ======================================================\r\n\r\n getInstance : function ( command ) {\r\n var instance = $('.fancybox-container:not(\".fancybox-is-closing\"):last').data( 'FancyBox' );\r\n var args = Array.prototype.slice.call(arguments, 1);\r\n\r\n if ( instance instanceof FancyBox ) {\r\n\r\n if ( $.type( command ) === 'string' ) {\r\n instance[ command ].apply( instance, args );\r\n\r\n } else if ( $.type( command ) === 'function' ) {\r\n command.apply( instance, args );\r\n }\r\n\r\n return instance;\r\n }\r\n\r\n return false;\r\n\r\n },\r\n\r\n\r\n // Create new instance\r\n // ===================\r\n\r\n open : function ( items, opts, index ) {\r\n return new FancyBox( items, opts, index );\r\n },\r\n\r\n\r\n // Close current or all instances\r\n // ==============================\r\n\r\n close : function ( all ) {\r\n var instance = this.getInstance();\r\n\r\n if ( instance ) {\r\n instance.close();\r\n\r\n // Try to find and close next instance\r\n\r\n if ( all === true ) {\r\n this.close();\r\n }\r\n }\r\n\r\n },\r\n\r\n // Close instances and unbind all events\r\n // ==============================\r\n\r\n destroy : function() {\r\n\r\n this.close( true );\r\n\r\n $D.off( 'click.fb-start' );\r\n\r\n },\r\n\r\n\r\n // Try to detect mobile devices\r\n // ============================\r\n\r\n isMobile : document.createTouch !== undefined && /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),\r\n\r\n\r\n // Detect if 'translate3d' support is available\r\n // ============================================\r\n\r\n use3d : (function() {\r\n var div = document.createElement('div');\r\n\r\n return window.getComputedStyle && window.getComputedStyle( div ).getPropertyValue('transform') && !(document.documentMode && document.documentMode < 11);\r\n }()),\r\n\r\n // Helper function to get current visual state of an element\r\n // returns array[ top, left, horizontal-scale, vertical-scale, opacity ]\r\n // =====================================================================\r\n\r\n getTranslate : function( $el ) {\r\n var matrix;\r\n\r\n if ( !$el || !$el.length ) {\r\n return false;\r\n }\r\n\r\n matrix = $el.eq( 0 ).css('transform');\r\n\r\n if ( matrix && matrix.indexOf( 'matrix' ) !== -1 ) {\r\n matrix = matrix.split('(')[1];\r\n matrix = matrix.split(')')[0];\r\n matrix = matrix.split(',');\r\n } else {\r\n matrix = [];\r\n }\r\n\r\n if ( matrix.length ) {\r\n\r\n // If IE\r\n if ( matrix.length > 10 ) {\r\n matrix = [ matrix[13], matrix[12], matrix[0], matrix[5] ];\r\n\r\n } else {\r\n matrix = [ matrix[5], matrix[4], matrix[0], matrix[3]];\r\n }\r\n\r\n matrix = matrix.map(parseFloat);\r\n\r\n } else {\r\n matrix = [ 0, 0, 1, 1 ];\r\n\r\n var transRegex = /\\.*translate\\((.*)px,(.*)px\\)/i;\r\n var transRez = transRegex.exec( $el.eq( 0 ).attr('style') );\r\n\r\n if ( transRez ) {\r\n matrix[ 0 ] = parseFloat( transRez[2] );\r\n matrix[ 1 ] = parseFloat( transRez[1] );\r\n }\r\n }\r\n\r\n return {\r\n top : matrix[ 0 ],\r\n left : matrix[ 1 ],\r\n scaleX : matrix[ 2 ],\r\n scaleY : matrix[ 3 ],\r\n opacity : parseFloat( $el.css('opacity') ),\r\n width : $el.width(),\r\n height : $el.height()\r\n };\r\n\r\n },\r\n\r\n\r\n // Shortcut for setting \"translate3d\" properties for element\r\n // Can set be used to set opacity, too\r\n // ========================================================\r\n\r\n setTranslate : function( $el, props ) {\r\n var str = '';\r\n var css = {};\r\n\r\n if ( !$el || !props ) {\r\n return;\r\n }\r\n\r\n if ( props.left !== undefined || props.top !== undefined ) {\r\n str = ( props.left === undefined ? $el.position().left : props.left ) + 'px, ' + ( props.top === undefined ? $el.position().top : props.top ) + 'px';\r\n\r\n if ( this.use3d ) {\r\n str = 'translate3d(' + str + ', 0px)';\r\n\r\n } else {\r\n str = 'translate(' + str + ')';\r\n }\r\n }\r\n\r\n if ( props.scaleX !== undefined && props.scaleY !== undefined ) {\r\n str = (str.length ? str + ' ' : '') + 'scale(' + props.scaleX + ', ' + props.scaleY + ')';\r\n }\r\n\r\n if ( str.length ) {\r\n css.transform = str;\r\n }\r\n\r\n if ( props.opacity !== undefined ) {\r\n css.opacity = props.opacity;\r\n }\r\n\r\n if ( props.width !== undefined ) {\r\n css.width = props.width;\r\n }\r\n\r\n if ( props.height !== undefined ) {\r\n css.height = props.height;\r\n }\r\n\r\n return $el.css( css );\r\n },\r\n\r\n\r\n // Simple CSS transition handler\r\n // =============================\r\n\r\n animate : function ( $el, to, duration, callback, leaveAnimationName ) {\r\n if ( $.isFunction( duration ) ) {\r\n callback = duration;\r\n duration = null;\r\n }\r\n\r\n if ( !$.isPlainObject( to ) ) {\r\n $el.removeAttr( 'style' );\r\n }\r\n\r\n $el.on( transitionEnd, function(e) {\r\n\r\n // Skip events from child elements and z-index change\r\n if ( e && e.originalEvent && ( !$el.is( e.originalEvent.target ) || e.originalEvent.propertyName == 'z-index' ) ) {\r\n return;\r\n }\r\n\r\n $.fancybox.stop( $el );\r\n\r\n if ( $.isPlainObject( to ) ) {\r\n\r\n if ( to.scaleX !== undefined && to.scaleY !== undefined ) {\r\n $el.css( 'transition-duration', '' );\r\n\r\n to.width = Math.round( $el.width() * to.scaleX );\r\n to.height = Math.round( $el.height() * to.scaleY );\r\n\r\n to.scaleX = 1;\r\n to.scaleY = 1;\r\n\r\n $.fancybox.setTranslate( $el, to );\r\n }\r\n\r\n if ( leaveAnimationName === false ) {\r\n $el.removeAttr( 'style' );\r\n }\r\n\r\n } else if ( leaveAnimationName !== true ) {\r\n $el.removeClass( to );\r\n }\r\n\r\n if ( $.isFunction( callback ) ) {\r\n callback( e );\r\n }\r\n\r\n });\r\n\r\n if ( $.isNumeric( duration ) ) {\r\n $el.css( 'transition-duration', duration + 'ms' );\r\n }\r\n\r\n if ( $.isPlainObject( to ) ) {\r\n $.fancybox.setTranslate( $el, to );\r\n\r\n } else {\r\n $el.addClass( to );\r\n }\r\n\r\n if ( to.scaleX && $el.hasClass( 'fancybox-image-wrap' ) ) {\r\n $el.parent().addClass( 'fancybox-is-scaling' );\r\n }\r\n\r\n // Make sure that `transitionend` callback gets fired\r\n $el.data(\"timer\", setTimeout(function() {\r\n $el.trigger( 'transitionend' );\r\n }, duration + 16));\r\n\r\n },\r\n\r\n stop : function( $el ) {\r\n clearTimeout( $el.data(\"timer\") );\r\n\r\n $el.off( 'transitionend' ).css( 'transition-duration', '' );\r\n\r\n if ( $el.hasClass( 'fancybox-image-wrap' ) ) {\r\n $el.parent().removeClass( 'fancybox-is-scaling' );\r\n }\r\n }\r\n\r\n };\r\n\r\n\r\n // Default click handler for \"fancyboxed\" links\r\n // ============================================\r\n\r\n function _run( e ) {\r\n var $target\t= $( e.currentTarget ),\r\n opts\t= e.data ? e.data.options : {},\r\n value\t= $target.attr( 'data-fancybox' ) || '',\r\n index\t= 0,\r\n items = [];\r\n\r\n // Avoid opening multiple times\r\n if ( e.isDefaultPrevented() ) {\r\n return;\r\n }\r\n\r\n e.preventDefault();\r\n\r\n // Get all related items and find index for clicked one\r\n if ( value ) {\r\n items = opts.selector ? $( opts.selector ) : ( e.data ? e.data.items : [] );\r\n items = items.length ? items.filter( '[data-fancybox=\"' + value + '\"]' ) : $( '[data-fancybox=\"' + value + '\"]' );\r\n\r\n index = items.index( $target );\r\n\r\n // Sometimes current item can not be found\r\n // (for example, when slider clones items)\r\n if ( index < 0 ) {\r\n index = 0;\r\n }\r\n\r\n } else {\r\n items = [ $target ];\r\n }\r\n\r\n $.fancybox.open( items, opts, index );\r\n }\r\n\r\n\r\n // Create a jQuery plugin\r\n // ======================\r\n\r\n $.fn.fancybox = function (options) {\r\n var selector;\r\n\r\n options = options || {};\r\n selector = options.selector || false;\r\n\r\n if ( selector ) {\r\n\r\n $( 'body' ).off( 'click.fb-start', selector ).on( 'click.fb-start', selector, {\r\n options : options\r\n }, _run );\r\n\r\n } else {\r\n\r\n this.off( 'click.fb-start' ).on( 'click.fb-start', {\r\n items : this,\r\n options : options\r\n }, _run);\r\n\r\n }\r\n\r\n return this;\r\n };\r\n\r\n\r\n // Self initializing plugin\r\n // ========================\r\n\r\n $D.on( 'click.fb-start', '[data-fancybox]', _run );\r\n\r\n}( window, document, window.jQuery || jQuery ));\r\n\r\n// ==========================================================================\r\n//\r\n// Media\r\n// Adds additional media type support\r\n//\r\n// ==========================================================================\r\n;(function ($) {\r\n\r\n\t'use strict';\r\n\r\n\t// Formats matching url to final form\r\n\r\n\tvar format = function (url, rez, params) {\r\n\t\tif ( !url ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tparams = params || '';\r\n\r\n\t\tif ( $.type(params) === \"object\" ) {\r\n\t\t\tparams = $.param(params, true);\r\n\t\t}\r\n\r\n\t\t$.each(rez, function (key, value) {\r\n\t\t\turl = url.replace('$' + key, value || '');\r\n\t\t});\r\n\r\n\t\tif (params.length) {\r\n\t\t\turl += (url.indexOf('?') > 0 ? '&' : '?') + params;\r\n\t\t}\r\n\r\n\t\treturn url;\r\n\t};\r\n\r\n\t// Object containing properties for each media type\r\n\r\n\tvar defaults = {\r\n\t\tyoutube : {\r\n\t\t\tmatcher : /(youtube\\.com|youtu\\.be|youtube\\-nocookie\\.com)\\/(watch\\?(.*&)?v=|v\\/|u\\/|embed\\/?)?(videoseries\\?list=(.*)|[\\w-]{11}|\\?listType=(.*)&list=(.*))(.*)/i,\r\n\t\t\tparams : {\r\n\t\t\t\tautoplay : 1,\r\n\t\t\t\tautohide : 1,\r\n\t\t\t\tfs : 1,\r\n\t\t\t\trel : 0,\r\n\t\t\t\thd : 1,\r\n\t\t\t\twmode : 'transparent',\r\n\t\t\t\tenablejsapi : 1,\r\n\t\t\t\thtml5 : 1\r\n\t\t\t},\r\n\t\t\tparamPlace : 8,\r\n\t\t\ttype : 'iframe',\r\n\t\t\turl : '//www.youtube.com/embed/$4',\r\n\t\t\tthumb : '//img.youtube.com/vi/$4/hqdefault.jpg'\r\n\t\t},\r\n\r\n\t\tvimeo : {\r\n\t\t\tmatcher : /^.+vimeo.com\\/(.*\\/)?([\\d]+)(.*)?/,\r\n\t\t\tparams : {\r\n\t\t\t\tautoplay : 1,\r\n\t\t\t\thd : 1,\r\n\t\t\t\tshow_title : 1,\r\n\t\t\t\tshow_byline : 1,\r\n\t\t\t\tshow_portrait : 0,\r\n\t\t\t\tfullscreen : 1,\r\n\t\t\t\tapi : 1\r\n\t\t\t},\r\n\t\t\tparamPlace : 3,\r\n\t\t\ttype : 'iframe',\r\n\t\t\turl : '//player.vimeo.com/video/$2'\r\n\t\t},\r\n\r\n\t\tmetacafe : {\r\n\t\t\tmatcher : /metacafe.com\\/watch\\/(\\d+)\\/(.*)?/,\r\n\t\t\ttype : 'iframe',\r\n\t\t\turl : '//www.metacafe.com/embed/$1/?ap=1'\r\n\t\t},\r\n\r\n\t\tdailymotion : {\r\n\t\t\tmatcher : /dailymotion.com\\/video\\/(.*)\\/?(.*)/,\r\n\t\t\tparams : {\r\n\t\t\t\tadditionalInfos : 0,\r\n\t\t\t\tautoStart : 1\r\n\t\t\t},\r\n\t\t\ttype : 'iframe',\r\n\t\t\turl : '//www.dailymotion.com/embed/video/$1'\r\n\t\t},\r\n\r\n\t\tvine : {\r\n\t\t\tmatcher : /vine.co\\/v\\/([a-zA-Z0-9\\?\\=\\-]+)/,\r\n\t\t\ttype : 'iframe',\r\n\t\t\turl : '//vine.co/v/$1/embed/simple'\r\n\t\t},\r\n\r\n\t\tinstagram : {\r\n\t\t\tmatcher : /(instagr\\.am|instagram\\.com)\\/p\\/([a-zA-Z0-9_\\-]+)\\/?/i,\r\n\t\t\ttype : 'image',\r\n\t\t\turl : '//$1/p/$2/media/?size=l'\r\n\t\t},\r\n\r\n\t\t// Examples:\r\n\t\t// http://maps.google.com/?ll=48.857995,2.294297&spn=0.007666,0.021136&t=m&z=16\r\n\t\t// https://www.google.com/maps/@37.7852006,-122.4146355,14.65z\r\n\t\t// https://www.google.com/maps/place/Googleplex/@37.4220041,-122.0833494,17z/data=!4m5!3m4!1s0x0:0x6c296c66619367e0!8m2!3d37.4219998!4d-122.0840572\r\n\t\tgmap_place : {\r\n\t\t\tmatcher : /(maps\\.)?google\\.([a-z]{2,3}(\\.[a-z]{2})?)\\/(((maps\\/(place\\/(.*)\\/)?\\@(.*),(\\d+.?\\d+?)z))|(\\?ll=))(.*)?/i,\r\n\t\t\ttype : 'iframe',\r\n\t\t\turl : function (rez) {\r\n\t\t\t\treturn '//maps.google.' + rez[2] + '/?ll=' + ( rez[9] ? rez[9] + '&z=' + Math.floor( rez[10] ) + ( rez[12] ? rez[12].replace(/^\\//, \"&\") : '' ) : rez[12] ) + '&output=' + ( rez[12] && rez[12].indexOf('layer=c') > 0 ? 'svembed' : 'embed' );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// Examples:\r\n\t\t// https://www.google.com/maps/search/Empire+State+Building/\r\n\t\t// https://www.google.com/maps/search/?api=1&query=centurylink+field\r\n\t\t// https://www.google.com/maps/search/?api=1&query=47.5951518,-122.3316393\r\n\t\tgmap_search : {\r\n\t\t\tmatcher : /(maps\\.)?google\\.([a-z]{2,3}(\\.[a-z]{2})?)\\/(maps\\/search\\/)(.*)/i,\r\n\t\t\ttype : 'iframe',\r\n\t\t\turl : function (rez) {\r\n\t\t\t\treturn '//maps.google.' + rez[2] + '/maps?q=' + rez[5].replace('query=', 'q=').replace('api=1', '') + '&output=embed';\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$(document).on('objectNeedsType.fb', function (e, instance, item) {\r\n\r\n\t\tvar url\t = item.src || '',\r\n\t\t\ttype = false,\r\n\t\t\tmedia,\r\n\t\t\tthumb,\r\n\t\t\trez,\r\n\t\t\tparams,\r\n\t\t\turlParams,\r\n\t\t\tparamObj,\r\n\t\t\tprovider;\r\n\r\n\t\tmedia = $.extend( true, {}, defaults, item.opts.media );\r\n\r\n\t\t// Look for any matching media type\r\n\t\t$.each(media, function ( providerName, providerOpts ) {\r\n\t\t\trez = url.match( providerOpts.matcher );\r\n\r\n\t\t\tif ( !rez ) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\ttype = providerOpts.type;\r\n\t\t\tparamObj = {};\r\n\r\n\t\t\tif ( providerOpts.paramPlace && rez[ providerOpts.paramPlace ] ) {\r\n\t\t\t\turlParams = rez[ providerOpts.paramPlace ];\r\n\r\n\t\t\t\tif ( urlParams[ 0 ] == '?' ) {\r\n\t\t\t\t\turlParams = urlParams.substring(1);\r\n\t\t\t\t}\r\n\r\n\t\t\t\turlParams = urlParams.split('&');\r\n\r\n\t\t\t\tfor ( var m = 0; m < urlParams.length; ++m ) {\r\n\t\t\t\t\tvar p = urlParams[ m ].split('=', 2);\r\n\r\n\t\t\t\t\tif ( p.length == 2 ) {\r\n\t\t\t\t\t\tparamObj[ p[0] ] = decodeURIComponent( p[1].replace(/\\+/g, \" \") );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tparams = $.extend( true, {}, providerOpts.params, item.opts[ providerName ], paramObj );\r\n\r\n\t\t\turl = $.type( providerOpts.url ) === \"function\" ? providerOpts.url.call( this, rez, params, item ) : format( providerOpts.url, rez, params );\r\n\t\t\tthumb = $.type( providerOpts.thumb ) === \"function\" ? providerOpts.thumb.call( this, rez, params, item ) : format( providerOpts.thumb, rez );\r\n\r\n\t\t\tif ( providerName === 'vimeo' ) {\r\n\t\t\t\turl = url.replace('&%23', '#');\r\n\t\t\t}\r\n\r\n\t\t\treturn false;\r\n\t\t});\r\n\r\n\t\t// If it is found, then change content type and update the url\r\n\r\n\t\tif ( type ) {\r\n\t\t\titem.src = url;\r\n\t\t\titem.type = type;\r\n\r\n\t\t\tif ( !item.opts.thumb && !( item.opts.$thumb && item.opts.$thumb.length ) ) {\r\n\t\t\t\titem.opts.thumb = thumb;\r\n\t\t\t}\r\n\r\n\t\t\tif ( type === 'iframe' ) {\r\n\t\t\t\t$.extend(true, item.opts, {\r\n\t\t\t\t\tiframe : {\r\n\t\t\t\t\t\tpreload : false,\r\n\t\t\t\t\t\tattr : {\r\n\t\t\t\t\t\t\tscrolling : \"no\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\titem.contentProvider = provider;\r\n\r\n\t\t\t\titem.opts.slideClass += ' fancybox-slide--' + ( provider == 'gmap_place' || provider == 'gmap_search' ? 'map' : 'video' );\r\n\t\t\t}\r\n\r\n\t\t} else if ( url ) {\r\n\t\t\titem.type = item.opts.defaultType;\r\n\t\t}\r\n\r\n\t});\r\n\r\n}( window.jQuery || jQuery ));\r\n\r\n// ==========================================================================\r\n//\r\n// Guestures\r\n// Adds touch guestures, handles click and tap events\r\n//\r\n// ==========================================================================\r\n;(function (window, document, $) {\r\n\t'use strict';\r\n\r\n\tvar requestAFrame = (function () {\r\n\t\treturn window.requestAnimationFrame ||\r\n\t\t\twindow.webkitRequestAnimationFrame ||\r\n\t\t\twindow.mozRequestAnimationFrame ||\r\n\t\t\twindow.oRequestAnimationFrame ||\r\n\t\t\t// if all else fails, use setTimeout\r\n\t\t\tfunction (callback) {\r\n\t\t\t\treturn window.setTimeout(callback, 1000 / 60);\r\n\t\t\t};\r\n\t})();\r\n\r\n\tvar cancelAFrame = (function () {\r\n\t\treturn window.cancelAnimationFrame ||\r\n\t\t\twindow.webkitCancelAnimationFrame ||\r\n\t\t\twindow.mozCancelAnimationFrame ||\r\n\t\t\twindow.oCancelAnimationFrame ||\r\n\t\t\tfunction (id) {\r\n\t\t\t\twindow.clearTimeout(id);\r\n\t\t\t};\r\n\t})();\r\n\r\n\tvar pointers = function( e ) {\r\n\t\tvar result = [];\r\n\r\n\t\te = e.originalEvent || e || window.e;\r\n\t\te = e.touches && e.touches.length ? e.touches : ( e.changedTouches && e.changedTouches.length ? e.changedTouches : [ e ] );\r\n\r\n\t\tfor ( var key in e ) {\r\n\r\n\t\t\tif ( e[ key ].pageX ) {\r\n\t\t\t\tresult.push( { x : e[ key ].pageX, y : e[ key ].pageY } );\r\n\r\n\t\t\t} else if ( e[ key ].clientX ) {\r\n\t\t\t\tresult.push( { x : e[ key ].clientX, y : e[ key ].clientY } );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t};\r\n\r\n\tvar distance = function( point2, point1, what ) {\r\n\t\tif ( !point1 || !point2 ) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tif ( what === 'x' ) {\r\n\t\t\treturn point2.x - point1.x;\r\n\r\n\t\t} else if ( what === 'y' ) {\r\n\t\t\treturn point2.y - point1.y;\r\n\t\t}\r\n\r\n\t\treturn Math.sqrt( Math.pow( point2.x - point1.x, 2 ) + Math.pow( point2.y - point1.y, 2 ) );\r\n\t};\r\n\r\n\tvar isClickable = function( $el ) {\r\n\t\tif ( $el.is('a,area,button,[role=\"button\"],input,label,select,summary,textarea') || $.isFunction( $el.get(0).onclick ) || $el.data('selectable') ) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t// Check for attributes like data-fancybox-next or data-fancybox-close\r\n\t\tfor ( var i = 0, atts = $el[0].attributes, n = atts.length; i < n; i++ ) {\r\n\t\t\tif ( atts[i].nodeName.substr(0, 14) === 'data-fancybox-' ) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t \treturn false;\r\n\t};\r\n\r\n\tvar hasScrollbars = function( el ) {\r\n\t\tvar overflowY = window.getComputedStyle( el )['overflow-y'];\r\n\t\tvar overflowX = window.getComputedStyle( el )['overflow-x'];\r\n\r\n\t\tvar vertical = (overflowY === 'scroll' || overflowY === 'auto') && el.scrollHeight > el.clientHeight;\r\n\t\tvar horizontal = (overflowX === 'scroll' || overflowX === 'auto') && el.scrollWidth > el.clientWidth;\r\n\r\n\t\treturn vertical || horizontal;\r\n\t};\r\n\r\n\tvar isScrollable = function ( $el ) {\r\n\t\tvar rez = false;\r\n\r\n\t\twhile ( true ) {\r\n\t\t\trez\t= hasScrollbars( $el.get(0) );\r\n\r\n\t\t\tif ( rez ) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\t$el = $el.parent();\r\n\r\n\t\t\tif ( !$el.length || $el.hasClass( 'fancybox-stage' ) || $el.is( 'body' ) ) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn rez;\r\n\t};\r\n\r\n\r\n\tvar Guestures = function ( instance ) {\r\n\t\tvar self = this;\r\n\r\n\t\tself.instance = instance;\r\n\r\n\t\tself.$bg = instance.$refs.bg;\r\n\t\tself.$stage = instance.$refs.stage;\r\n\t\tself.$container = instance.$refs.container;\r\n\r\n\t\tself.destroy();\r\n\r\n\t\tself.$container.on( 'touchstart.fb.touch mousedown.fb.touch', $.proxy(self, 'ontouchstart') );\r\n\t};\r\n\r\n\tGuestures.prototype.destroy = function() {\r\n\t\tthis.$container.off( '.fb.touch' );\r\n\t};\r\n\r\n\tGuestures.prototype.ontouchstart = function( e ) {\r\n\t\tvar self = this;\r\n\r\n\t\tvar $target = $( e.target );\r\n\t\tvar instance = self.instance;\r\n\t\tvar current = instance.current;\r\n\t\tvar $content = current.$content;\r\n\r\n\t\tvar isTouchDevice = ( e.type == 'touchstart' );\r\n\r\n\t\t// Do not respond to both (touch and mouse) events\r\n\t\tif ( isTouchDevice ) {\r\n\t\t\tself.$container.off( 'mousedown.fb.touch' );\r\n\t\t}\r\n\r\n\t\t// Ignore right click\r\n\t\tif ( e.originalEvent && e.originalEvent.button == 2 ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Ignore taping on links, buttons, input elements\r\n\t\tif ( !$target.length || isClickable( $target ) || isClickable( $target.parent() ) ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Ignore clicks on the scrollbar\r\n\t\tif ( !$target.is('img') && e.originalEvent.clientX > $target[0].clientWidth + $target.offset().left ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Ignore clicks while zooming or closing\r\n\t\tif ( !current || self.instance.isAnimating || self.instance.isClosing ) {\r\n\t\t\te.stopPropagation();\r\n\t\t\te.preventDefault();\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tself.realPoints = self.startPoints = pointers( e );\r\n\r\n\t\tif ( !self.startPoints ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\te.stopPropagation();\r\n\r\n\t\tself.startEvent = e;\r\n\r\n\t\tself.canTap = true;\r\n\t\tself.$target = $target;\r\n\t\tself.$content = $content;\r\n\t\tself.opts = current.opts.touch;\r\n\r\n\t\tself.isPanning = false;\r\n\t\tself.isSwiping = false;\r\n\t\tself.isZooming = false;\r\n\t\tself.isScrolling = false;\r\n\r\n\t\tself.sliderStartPos = self.sliderLastPos || { top: 0, left: 0 };\r\n\t\tself.contentStartPos = $.fancybox.getTranslate( self.$content );\r\n\t\tself.contentLastPos = null;\r\n\r\n\t\tself.startTime = new Date().getTime();\r\n\t\tself.distanceX = self.distanceY = self.distance = 0;\r\n\r\n\t\tself.canvasWidth = Math.round( current.$slide[0].clientWidth );\r\n\t\tself.canvasHeight = Math.round( current.$slide[0].clientHeight );\r\n\r\n\t\t$(document)\r\n\t\t\t.off( '.fb.touch' )\r\n\t\t\t.on( isTouchDevice ? 'touchend.fb.touch touchcancel.fb.touch' : 'mouseup.fb.touch mouseleave.fb.touch', $.proxy(self, \"ontouchend\"))\r\n\t\t\t.on( isTouchDevice ? 'touchmove.fb.touch' : 'mousemove.fb.touch', $.proxy(self, \"ontouchmove\"));\r\n\r\n\t\tif ( $.fancybox.isMobile ) {\r\n\t\t\tdocument.addEventListener('scroll', self.onscroll, true);\r\n\t\t}\r\n\r\n\t\tif ( !(self.opts || instance.canPan() ) || !( $target.is( self.$stage ) || self.$stage.find( $target ).length ) ) {\r\n\r\n\t\t\t// Prevent image ghosting while dragging\r\n\t\t\tif ( $target.is('img') ) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif ( !( $.fancybox.isMobile && ( isScrollable( $target ) || isScrollable( $target.parent() ) ) ) ) {\r\n\t\t\te.preventDefault();\r\n\t\t}\r\n\r\n\t\tif ( self.startPoints.length === 1 ) {\r\n\t\t\tif ( current.type === 'image' && ( self.contentStartPos.width > self.canvasWidth + 1 || self.contentStartPos.height > self.canvasHeight + 1 ) ) {\r\n\t\t\t\t$.fancybox.stop( self.$content );\r\n\r\n\t\t\t\tself.$content.css( 'transition-duration', '' );\r\n\r\n\t\t\t\tself.isPanning = true;\r\n\r\n\t\t\t} else {\r\n\t\t\t\tself.isSwiping = true;\r\n\t\t\t}\r\n\r\n\t\t\tself.$container.addClass( 'fancybox-controls--isGrabbing' );\r\n\t\t}\r\n\r\n\t\tif ( self.startPoints.length === 2 && !instance.isAnimating && !current.hasError && current.type === 'image' && ( current.isLoaded || current.$ghost ) ) {\r\n\t\t\tself.canTap = false;\r\n\t\t\tself.isSwiping = false;\r\n\t\t\tself.isPanning = false;\r\n\r\n\t\t\tself.isZooming = true;\r\n\r\n\t\t\t$.fancybox.stop( self.$content );\r\n\r\n\t\t\tself.$content.css( 'transition-duration', '' );\r\n\r\n\t\t\tself.centerPointStartX = ( ( self.startPoints[0].x + self.startPoints[1].x ) * 0.5 ) - $(window).scrollLeft();\r\n\t\t\tself.centerPointStartY = ( ( self.startPoints[0].y + self.startPoints[1].y ) * 0.5 ) - $(window).scrollTop();\r\n\r\n\t\t\tself.percentageOfImageAtPinchPointX = ( self.centerPointStartX - self.contentStartPos.left ) / self.contentStartPos.width;\r\n\t\t\tself.percentageOfImageAtPinchPointY = ( self.centerPointStartY - self.contentStartPos.top ) / self.contentStartPos.height;\r\n\r\n\t\t\tself.startDistanceBetweenFingers = distance( self.startPoints[0], self.startPoints[1] );\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tGuestures.prototype.onscroll = function(e) {\r\n\t\tself.isScrolling = true;\r\n\t};\r\n\r\n\tGuestures.prototype.ontouchmove = function( e ) {\r\n\t\tvar self = this,\r\n\t\t\t$target = $(e.target);\r\n\r\n\t\tif ( self.isScrolling || !( $target.is( self.$stage ) || self.$stage.find( $target ).length ) ) {\r\n\t\t\tself.canTap = false;\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tself.newPoints = pointers( e );\r\n\r\n\t\tif ( !( self.opts || self.instance.canPan() ) || !self.newPoints || !self.newPoints.length ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif ( !(self.isSwiping && self.isSwiping === true) ) {\r\n\t\t\te.preventDefault();\r\n\t\t}\r\n\r\n\t\tself.distanceX = distance( self.newPoints[0], self.startPoints[0], 'x' );\r\n\t\tself.distanceY = distance( self.newPoints[0], self.startPoints[0], 'y' );\r\n\r\n\t\tself.distance = distance( self.newPoints[0], self.startPoints[0] )\r\n\r\n\t\t// Skip false ontouchmove events (Chrome)\r\n\t\tif ( self.distance > 0 ) {\r\n\t\t\tif ( self.isSwiping ) {\r\n\t\t\t\tself.onSwipe(e);\r\n\r\n\t\t\t} else if ( self.isPanning ) {\r\n\t\t\t\tself.onPan();\r\n\r\n\t\t\t} else if ( self.isZooming ) {\r\n\t\t\t\tself.onZoom();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tGuestures.prototype.onSwipe = function(e) {\r\n\t\tvar self = this,\r\n\t\t\tswiping = self.isSwiping,\r\n\t\t\tleft = self.sliderStartPos.left || 0,\r\n\t\t\tangle;\r\n\r\n\t\t// If direction is not yet determined\r\n\t\tif ( swiping === true ) {\r\n\r\n\t\t\t// We need at least 10px distance to correctly calculate an angle\r\n\t\t\tif ( Math.abs( self.distance ) > 10 ) {\r\n\t\t\t\tself.canTap = false;\r\n\r\n\t\t\t\tif ( self.instance.group.length < 2 && self.opts.vertical ) {\r\n\t\t\t\t\tself.isSwiping = 'y';\r\n\r\n\t\t\t\t} else if ( self.instance.isDragging || self.opts.vertical === false || ( self.opts.vertical === 'auto' && $( window ).width() > 800 ) ) {\r\n\t\t\t\t\tself.isSwiping = 'x';\r\n\r\n\t\t\t\t} else {\r\n\t\t\t\t\tangle = Math.abs( Math.atan2( self.distanceY, self.distanceX ) * 180 / Math.PI );\r\n\r\n\t\t\t\t\tself.isSwiping = ( angle > 45 && angle < 135 ) ? 'y' : 'x';\r\n\t\t\t\t}\r\n\r\n\t\t\t\tself.canTap = false;\r\n\r\n\t\t\t\t if ( self.isSwiping === 'y' && $.fancybox.isMobile && ( isScrollable( self.$target ) || isScrollable( self.$target.parent() ) ) ) {\r\n\t\t\t\t\t self.isScrolling = true;\r\n\r\n\t\t\t\t\t return;\r\n\t\t\t\t }\r\n\r\n\t\t\t\tself.instance.isDragging = self.isSwiping;\r\n\r\n\t\t\t\t// Reset points to avoid jumping, because we dropped first swipes to calculate the angle\r\n\t\t\t\tself.startPoints = self.newPoints;\r\n\r\n\t\t\t\t$.each(self.instance.slides, function( index, slide ) {\r\n\t\t\t\t\t$.fancybox.stop( slide.$slide );\r\n\r\n\t\t\t\t\tslide.$slide.css( 'transition-duration', '' );\r\n\r\n\t\t\t\t\tslide.inTransition = false;\r\n\r\n\t\t\t\t\tif ( slide.pos === self.instance.current.pos ) {\r\n\t\t\t\t\t\tself.sliderStartPos.left = $.fancybox.getTranslate( slide.$slide ).left;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// Stop slideshow\r\n\t\t\t\tif ( self.instance.SlideShow && self.instance.SlideShow.isActive ) {\r\n\t\t\t\t\tself.instance.SlideShow.stop();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Sticky edges\r\n\t\tif ( swiping == 'x' ) {\r\n\t\t\tif ( self.distanceX > 0 && ( self.instance.group.length < 2 || ( self.instance.current.index === 0 && !self.instance.current.opts.loop ) ) ) {\r\n\t\t\t\tleft = left + Math.pow( self.distanceX, 0.8 );\r\n\r\n\t\t\t} else if ( self.distanceX < 0 && ( self.instance.group.length < 2 || ( self.instance.current.index === self.instance.group.length - 1 && !self.instance.current.opts.loop ) ) ) {\r\n\t\t\t\tleft = left - Math.pow( -self.distanceX, 0.8 );\r\n\r\n\t\t\t} else {\r\n\t\t\t\tleft = left + self.distanceX;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tself.sliderLastPos = {\r\n\t\t\ttop : swiping == 'x' ? 0 : self.sliderStartPos.top + self.distanceY,\r\n\t\t\tleft : left\r\n\t\t};\r\n\r\n\t\tif ( self.requestId ) {\r\n\t\t\tcancelAFrame( self.requestId );\r\n\r\n\t\t\tself.requestId = null;\r\n\t\t}\r\n\r\n\t\tself.requestId = requestAFrame(function() {\r\n\r\n\t\t\tif ( self.sliderLastPos ) {\r\n\t\t\t\t$.each(self.instance.slides, function( index, slide ) {\r\n\t\t\t\t\tvar pos = slide.pos - self.instance.currPos;\r\n\r\n\t\t\t\t\t$.fancybox.setTranslate( slide.$slide, {\r\n\t\t\t\t\t\ttop : self.sliderLastPos.top,\r\n\t\t\t\t\t\tleft : self.sliderLastPos.left + ( pos * self.canvasWidth ) + ( pos * slide.opts.gutter )\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\r\n\t\t\t\tself.$container.addClass( 'fancybox-is-sliding' );\r\n\t\t\t}\r\n\r\n\t\t});\r\n\r\n\t};\r\n\r\n\tGuestures.prototype.onPan = function() {\r\n\t\tvar self = this;\r\n\r\n\t\t// Sometimes, when tapping causally, image can move a bit and that breaks double tapping\r\n\t\tif ( distance( self.newPoints[0], self.realPoints[0] ) < ($.fancybox.isMobile ? 10 : 5) ) {\r\n\t\t\tself.startPoints = self.newPoints;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tself.canTap = false;\r\n\r\n\t\tself.contentLastPos = self.limitMovement();\r\n\r\n\t\tif ( self.requestId ) {\r\n\t\t\tcancelAFrame( self.requestId );\r\n\r\n\t\t\tself.requestId = null;\r\n\t\t}\r\n\r\n\t\tself.requestId = requestAFrame(function() {\r\n\t\t\t$.fancybox.setTranslate( self.$content, self.contentLastPos );\r\n\t\t});\r\n\t};\r\n\r\n\t// Make panning sticky to the edges\r\n\tGuestures.prototype.limitMovement = function() {\r\n\t\tvar self = this;\r\n\r\n\t\tvar canvasWidth = self.canvasWidth;\r\n\t\tvar canvasHeight = self.canvasHeight;\r\n\r\n\t\tvar distanceX = self.distanceX;\r\n\t\tvar distanceY = self.distanceY;\r\n\r\n\t\tvar contentStartPos = self.contentStartPos;\r\n\r\n\t\tvar currentOffsetX = contentStartPos.left;\r\n\t\tvar currentOffsetY = contentStartPos.top;\r\n\r\n\t\tvar currentWidth = contentStartPos.width;\r\n\t\tvar currentHeight = contentStartPos.height;\r\n\r\n\t\tvar minTranslateX, minTranslateY,\r\n\t\t\tmaxTranslateX, maxTranslateY,\r\n\t\t\tnewOffsetX, newOffsetY;\r\n\r\n\t\tif ( currentWidth > canvasWidth ) {\r\n\t\t\tnewOffsetX = currentOffsetX + distanceX;\r\n\r\n\t\t} else {\r\n\t\t\tnewOffsetX = currentOffsetX;\r\n\t\t}\r\n\r\n\t\tnewOffsetY = currentOffsetY + distanceY;\r\n\r\n\t\t// Slow down proportionally to traveled distance\r\n\t\tminTranslateX = Math.max( 0, canvasWidth * 0.5 - currentWidth * 0.5 );\r\n\t\tminTranslateY = Math.max( 0, canvasHeight * 0.5 - currentHeight * 0.5 );\r\n\r\n\t\tmaxTranslateX = Math.min( canvasWidth - currentWidth, canvasWidth * 0.5 - currentWidth * 0.5 );\r\n\t\tmaxTranslateY = Math.min( canvasHeight - currentHeight, canvasHeight * 0.5 - currentHeight * 0.5 );\r\n\r\n\t\tif ( currentWidth > canvasWidth ) {\r\n\r\n\t\t\t// ->\r\n\t\t\tif ( distanceX > 0 && newOffsetX > minTranslateX ) {\r\n\t\t\t\tnewOffsetX = minTranslateX - 1 + Math.pow( -minTranslateX + currentOffsetX + distanceX, 0.8 ) || 0;\r\n\t\t\t}\r\n\r\n\t\t\t// <-\r\n\t\t\tif ( distanceX < 0 && newOffsetX < maxTranslateX ) {\r\n\t\t\t\tnewOffsetX = maxTranslateX + 1 - Math.pow( maxTranslateX - currentOffsetX - distanceX, 0.8 ) || 0;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( currentHeight > canvasHeight ) {\r\n\r\n\t\t\t// \\/\r\n\t\t\tif ( distanceY > 0 && newOffsetY > minTranslateY ) {\r\n\t\t\t\tnewOffsetY = minTranslateY - 1 + Math.pow(-minTranslateY + currentOffsetY + distanceY, 0.8 ) || 0;\r\n\t\t\t}\r\n\r\n\t\t\t// /\\\r\n\t\t\tif ( distanceY < 0 && newOffsetY < maxTranslateY ) {\r\n\t\t\t\tnewOffsetY = maxTranslateY + 1 - Math.pow ( maxTranslateY - currentOffsetY - distanceY, 0.8 ) || 0;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\ttop : newOffsetY,\r\n\t\t\tleft : newOffsetX,\r\n\t\t\tscaleX : contentStartPos.scaleX,\r\n\t\t\tscaleY : contentStartPos.scaleY\r\n\t\t};\r\n\r\n\t};\r\n\r\n\tGuestures.prototype.limitPosition = function( newOffsetX, newOffsetY, newWidth, newHeight ) {\r\n\t\tvar self = this;\r\n\r\n\t\tvar canvasWidth = self.canvasWidth;\r\n\t\tvar canvasHeight = self.canvasHeight;\r\n\r\n\t\tif ( newWidth > canvasWidth ) {\r\n\t\t\tnewOffsetX = newOffsetX > 0 ? 0 : newOffsetX;\r\n\t\t\tnewOffsetX = newOffsetX < canvasWidth - newWidth ? canvasWidth - newWidth : newOffsetX;\r\n\r\n\t\t} else {\r\n\r\n\t\t\t// Center horizontally\r\n\t\t\tnewOffsetX = Math.max( 0, canvasWidth / 2 - newWidth / 2 );\r\n\r\n\t\t}\r\n\r\n\t\tif ( newHeight > canvasHeight ) {\r\n\t\t\tnewOffsetY = newOffsetY > 0 ? 0 : newOffsetY;\r\n\t\t\tnewOffsetY = newOffsetY < canvasHeight - newHeight ? canvasHeight - newHeight : newOffsetY;\r\n\r\n\t\t} else {\r\n\r\n\t\t\t// Center vertically\r\n\t\t\tnewOffsetY = Math.max( 0, canvasHeight / 2 - newHeight / 2 );\r\n\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\ttop : newOffsetY,\r\n\t\t\tleft : newOffsetX\r\n\t\t};\r\n\r\n\t};\r\n\r\n\tGuestures.prototype.onZoom = function() {\r\n\t\tvar self = this;\r\n\r\n\t\t// Calculate current distance between points to get pinch ratio and new width and height\r\n\r\n\t\tvar currentWidth = self.contentStartPos.width;\r\n\t\tvar currentHeight = self.contentStartPos.height;\r\n\r\n\t\tvar currentOffsetX = self.contentStartPos.left;\r\n\t\tvar currentOffsetY = self.contentStartPos.top;\r\n\r\n\t\tvar endDistanceBetweenFingers = distance( self.newPoints[0], self.newPoints[1] );\r\n\r\n\t\tvar pinchRatio = endDistanceBetweenFingers / self.startDistanceBetweenFingers;\r\n\r\n\t\tvar newWidth = Math.floor( currentWidth * pinchRatio );\r\n\t\tvar newHeight = Math.floor( currentHeight * pinchRatio );\r\n\r\n\t\t// This is the translation due to pinch-zooming\r\n\t\tvar translateFromZoomingX = (currentWidth - newWidth) * self.percentageOfImageAtPinchPointX;\r\n\t\tvar translateFromZoomingY = (currentHeight - newHeight) * self.percentageOfImageAtPinchPointY;\r\n\r\n\t\t//Point between the two touches\r\n\r\n\t\tvar centerPointEndX = ((self.newPoints[0].x + self.newPoints[1].x) / 2) - $(window).scrollLeft();\r\n\t\tvar centerPointEndY = ((self.newPoints[0].y + self.newPoints[1].y) / 2) - $(window).scrollTop();\r\n\r\n\t\t// And this is the translation due to translation of the centerpoint\r\n\t\t// between the two fingers\r\n\r\n\t\tvar translateFromTranslatingX = centerPointEndX - self.centerPointStartX;\r\n\t\tvar translateFromTranslatingY = centerPointEndY - self.centerPointStartY;\r\n\r\n\t\t// The new offset is the old/current one plus the total translation\r\n\r\n\t\tvar newOffsetX = currentOffsetX + ( translateFromZoomingX + translateFromTranslatingX );\r\n\t\tvar newOffsetY = currentOffsetY + ( translateFromZoomingY + translateFromTranslatingY );\r\n\r\n\t\tvar newPos = {\r\n\t\t\ttop : newOffsetY,\r\n\t\t\tleft : newOffsetX,\r\n\t\t\tscaleX : self.contentStartPos.scaleX * pinchRatio,\r\n\t\t\tscaleY : self.contentStartPos.scaleY * pinchRatio\r\n\t\t};\r\n\r\n\t\tself.canTap = false;\r\n\r\n\t\tself.newWidth = newWidth;\r\n\t\tself.newHeight = newHeight;\r\n\r\n\t\tself.contentLastPos = newPos;\r\n\r\n\t\tif ( self.requestId ) {\r\n\t\t\tcancelAFrame( self.requestId );\r\n\r\n\t\t\tself.requestId = null;\r\n\t\t}\r\n\r\n\t\tself.requestId = requestAFrame(function() {\r\n\t\t\t$.fancybox.setTranslate( self.$content, self.contentLastPos );\r\n\t\t});\r\n\r\n\t};\r\n\r\n\tGuestures.prototype.ontouchend = function( e ) {\r\n\t\tvar self = this;\r\n\t\tvar dMs = Math.max( (new Date().getTime() ) - self.startTime, 1);\r\n\r\n\t\tvar swiping = self.isSwiping;\r\n\t\tvar panning = self.isPanning;\r\n\t\tvar zooming = self.isZooming;\r\n\t\tvar scrolling = self.isScrolling;\r\n\r\n\t\tself.endPoints = pointers( e );\r\n\r\n\t\tself.$container.removeClass( 'fancybox-controls--isGrabbing' );\r\n\r\n\t\t$(document).off( '.fb.touch' );\r\n\r\n\t\tdocument.removeEventListener('scroll', self.onscroll, true);\r\n\r\n\t\tif ( self.requestId ) {\r\n\t\t\tcancelAFrame( self.requestId );\r\n\r\n\t\t\tself.requestId = null;\r\n\t\t}\r\n\r\n\t\tself.isSwiping = false;\r\n\t\tself.isPanning = false;\r\n\t\tself.isZooming = false;\r\n\t\tself.isScrolling = false;\r\n\r\n\t\tself.instance.isDragging = false;\r\n\r\n\t\tif ( self.canTap ) {\r\n\t\t\treturn self.onTap( e );\r\n\t\t}\r\n\r\n\t\tself.speed = 366;\r\n\r\n\t\t// Speed in px/ms\r\n\t\tself.velocityX = self.distanceX / dMs * 0.5;\r\n\t\tself.velocityY = self.distanceY / dMs * 0.5;\r\n\r\n\t\tself.speedX = Math.max( self.speed * 0.5, Math.min( self.speed * 1.5, ( 1 / Math.abs( self.velocityX ) ) * self.speed ) );\r\n\r\n\t\tif ( panning ) {\r\n\t\t\tself.endPanning();\r\n\r\n\t\t} else if ( zooming ) {\r\n\t\t\tself.endZooming();\r\n\r\n\t\t} else {\r\n\t\t\tself.endSwiping( swiping, scrolling );\r\n\t\t}\r\n\r\n\t\treturn;\r\n\t};\r\n\r\n\tGuestures.prototype.endSwiping = function( swiping, scrolling ) {\r\n\t\tvar self = this,\r\n\t\t\tret = false,\r\n\t\t\tlen = self.instance.group.length;\r\n\r\n\t\tself.sliderLastPos = null;\r\n\r\n\t\t// Close if swiped vertically / navigate if horizontally\r\n\t\tif ( swiping == 'y' && !scrolling && Math.abs( self.distanceY ) > 50 ) {\r\n\r\n\t\t\t// Continue vertical movement\r\n\t\t\t$.fancybox.animate( self.instance.current.$slide, {\r\n\t\t\t\ttop : self.sliderStartPos.top + self.distanceY + ( self.velocityY * 150 ),\r\n\t\t\t\topacity : 0\r\n\t\t\t}, 150 );\r\n\r\n\t\t\tret = self.instance.close( true, 300 );\r\n\r\n\t\t} else if ( swiping == 'x' && self.distanceX > 50 && len > 1 ) {\r\n\t\t\tret = self.instance.previous( self.speedX );\r\n\r\n\t\t} else if ( swiping == 'x' && self.distanceX < -50 && len > 1 ) {\r\n\t\t\tret = self.instance.next( self.speedX );\r\n\t\t}\r\n\r\n\t\tif ( ret === false && ( swiping == 'x' || swiping == 'y' ) ) {\r\n\t\t\tif ( scrolling || len < 2 ) {\r\n\t\t\t\tself.instance.centerSlide( self.instance.current, 150 );\r\n\t\t\t} else {\r\n\t\t\t\tself.instance.jumpTo( self.instance.current.index );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tself.$container.removeClass( 'fancybox-is-sliding' );\r\n\r\n\t};\r\n\r\n\t// Limit panning from edges\r\n\t// ========================\r\n\r\n\tGuestures.prototype.endPanning = function() {\r\n\r\n\t\tvar self = this;\r\n\t\tvar newOffsetX, newOffsetY, newPos;\r\n\r\n\t\tif ( !self.contentLastPos ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif ( self.opts.momentum === false ) {\r\n\t\t\tnewOffsetX = self.contentLastPos.left;\r\n\t\t\tnewOffsetY = self.contentLastPos.top;\r\n\r\n\t\t} else {\r\n\r\n\t\t\t// Continue movement\r\n\t\t\tnewOffsetX = self.contentLastPos.left + ( self.velocityX * self.speed );\r\n\t\t\tnewOffsetY = self.contentLastPos.top + ( self.velocityY * self.speed );\r\n\t\t}\r\n\r\n\t\tnewPos = self.limitPosition( newOffsetX, newOffsetY, self.contentStartPos.width, self.contentStartPos.height );\r\n\r\n\t\t newPos.width = self.contentStartPos.width;\r\n\t\t newPos.height = self.contentStartPos.height;\r\n\r\n\t\t$.fancybox.animate( self.$content, newPos, 330 );\r\n\t};\r\n\r\n\r\n\tGuestures.prototype.endZooming = function() {\r\n\t\tvar self = this;\r\n\r\n\t\tvar current = self.instance.current;\r\n\r\n\t\tvar newOffsetX, newOffsetY, newPos, reset;\r\n\r\n\t\tvar newWidth = self.newWidth;\r\n\t\tvar newHeight = self.newHeight;\r\n\r\n\t\tif ( !self.contentLastPos ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tnewOffsetX = self.contentLastPos.left;\r\n\t\tnewOffsetY = self.contentLastPos.top;\r\n\r\n\t\treset = {\r\n\t\t\ttop : newOffsetY,\r\n\t\t\tleft : newOffsetX,\r\n\t\t\twidth : newWidth,\r\n\t\t\theight : newHeight,\r\n\t\t\tscaleX : 1,\r\n\t\t\tscaleY : 1\r\n\t\t};\r\n\r\n\t\t// Reset scalex/scaleY values; this helps for perfomance and does not break animation\r\n\t\t$.fancybox.setTranslate( self.$content, reset );\r\n\r\n\t\tif ( newWidth < self.canvasWidth && newHeight < self.canvasHeight ) {\r\n\t\t\tself.instance.scaleToFit( 150 );\r\n\r\n\t\t} else if ( newWidth > current.width || newHeight > current.height ) {\r\n\t\t\tself.instance.scaleToActual( self.centerPointStartX, self.centerPointStartY, 150 );\r\n\r\n\t\t} else {\r\n\r\n\t\t\tnewPos = self.limitPosition( newOffsetX, newOffsetY, newWidth, newHeight );\r\n\r\n\t\t\t// Switch from scale() to width/height or animation will not work correctly\r\n\t\t\t$.fancybox.setTranslate( self.content, $.fancybox.getTranslate( self.$content ) );\r\n\r\n\t\t\t$.fancybox.animate( self.$content, newPos, 150 );\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tGuestures.prototype.onTap = function(e) {\r\n\t\tvar self = this;\r\n\t\tvar $target = $( e.target );\r\n\r\n\t\tvar instance = self.instance;\r\n\t\tvar current = instance.current;\r\n\r\n\t\tvar endPoints = ( e && pointers( e ) ) || self.startPoints;\r\n\r\n\t\tvar tapX = endPoints[0] ? endPoints[0].x - self.$stage.offset().left : 0;\r\n\t\tvar tapY = endPoints[0] ? endPoints[0].y - self.$stage.offset().top : 0;\r\n\r\n\t\tvar where;\r\n\r\n\t\tvar process = function ( prefix ) {\r\n\r\n\t\t\tvar action = current.opts[ prefix ];\r\n\r\n\t\t\tif ( $.isFunction( action ) ) {\r\n\t\t\t\taction = action.apply( instance, [ current, e ] );\r\n\t\t\t}\r\n\r\n\t\t\tif ( !action) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tswitch ( action ) {\r\n\r\n\t\t\t\tcase \"close\" :\r\n\r\n\t\t\t\t\tinstance.close( self.startEvent );\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"toggleControls\" :\r\n\r\n\t\t\t\t\tinstance.toggleControls( true );\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"next\" :\r\n\r\n\t\t\t\t\tinstance.next();\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"nextOrClose\" :\r\n\r\n\t\t\t\t\tif ( instance.group.length > 1 ) {\r\n\t\t\t\t\t\tinstance.next();\r\n\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tinstance.close( self.startEvent );\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"zoom\" :\r\n\r\n\t\t\t\t\tif ( current.type == 'image' && ( current.isLoaded || current.$ghost ) ) {\r\n\r\n\t\t\t\t\t\tif ( instance.canPan() ) {\r\n\t\t\t\t\t\t\tinstance.scaleToFit();\r\n\r\n\t\t\t\t\t\t} else if ( instance.isScaledDown() ) {\r\n\t\t\t\t\t\t\tinstance.scaleToActual( tapX, tapY );\r\n\r\n\t\t\t\t\t\t} else if ( instance.group.length < 2 ) {\r\n\t\t\t\t\t\t\tinstance.close( self.startEvent );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t};\r\n\r\n\t\t// Ignore right click\r\n\t\tif ( e.originalEvent && e.originalEvent.button == 2 ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Skip if clicked on the scrollbar\r\n\t\tif ( !$target.is('img') && tapX > $target[0].clientWidth + $target.offset().left ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Check where is clicked\r\n\t\tif ( $target.is( '.fancybox-bg,.fancybox-inner,.fancybox-outer,.fancybox-container' ) ) {\r\n\t\t\twhere = 'Outside';\r\n\r\n\t\t} else if ( $target.is( '.fancybox-slide' ) ) {\r\n\t\t\twhere = 'Slide';\r\n\r\n\t\t} else if ( instance.current.$content && instance.current.$content.find( $target ).addBack().filter( $target ).length ) {\r\n\t\t \twhere = 'Content';\r\n\r\n\t\t} else {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Check if this is a double tap\r\n\t\tif ( self.tapped ) {\r\n\r\n\t\t\t// Stop previously created single tap\r\n\t\t\tclearTimeout( self.tapped );\r\n\t\t\tself.tapped = null;\r\n\r\n\t\t\t// Skip if distance between taps is too big\r\n\t\t\tif ( Math.abs( tapX - self.tapX ) > 50 || Math.abs( tapY - self.tapY ) > 50 ) {\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\t// OK, now we assume that this is a double-tap\r\n\t\t\tprocess( 'dblclick' + where );\r\n\r\n\t\t} else {\r\n\r\n\t\t\t// Single tap will be processed if user has not clicked second time within 300ms\r\n\t\t\t// or there is no need to wait for double-tap\r\n\t\t\tself.tapX = tapX;\r\n\t\t\tself.tapY = tapY;\r\n\r\n\t\t\tif ( current.opts[ 'dblclick' + where ] && current.opts[ 'dblclick' + where ] !== current.opts[ 'click' + where ] ) {\r\n\r\n\t\t\t\tself.tapped = setTimeout(function() {\r\n\t\t\t\t\tself.tapped = null;\r\n\r\n\t\t\t\t\tprocess( 'click' + where );\r\n\r\n\t\t\t\t}, 500);\r\n\r\n\t\t\t} else {\r\n\t\t\t\tprocess( 'click' + where );\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\t$(document).on('onActivate.fb', function (e, instance) {\r\n\t\tif ( instance && !instance.Guestures ) {\r\n\t\t\tinstance.Guestures = new Guestures( instance );\r\n\t\t}\r\n\t});\r\n\r\n}( window, document, window.jQuery || jQuery ));\r\n\r\n// ==========================================================================\r\n//\r\n// SlideShow\r\n// Enables slideshow functionality\r\n//\r\n// Example of usage:\r\n// $.fancybox.getInstance().SlideShow.start()\r\n//\r\n// ==========================================================================\r\n;(function (document, $) {\r\n\t'use strict';\r\n\r\n\t$.extend(true, $.fancybox.defaults, {\r\n\t\tbtnTpl : {\r\n\t\t\tslideShow :\r\n\t\t\t\t''\r\n\t\t},\r\n\t\tslideShow : {\r\n\t\t\tautoStart : false,\r\n speed : 3000\r\n\t\t}\r\n\t});\r\n\r\n\tvar SlideShow = function( instance ) {\r\n\t\tthis.instance = instance;\r\n\t\tthis.init();\r\n\t};\r\n\r\n\t$.extend( SlideShow.prototype, {\r\n\t\ttimer : null,\r\n\t\tisActive : false,\r\n\t\t$button : null,\r\n\r\n\t\tinit : function() {\r\n\t\t\tvar self = this;\r\n\r\n\t\t\tself.$button = self.instance.$refs.toolbar.find('[data-fancybox-play]').on('click', function() {\r\n\t\t\t\tself.toggle();\r\n\t\t\t});\r\n\r\n\t\t\tif ( self.instance.group.length < 2 || !self.instance.group[ self.instance.currIndex ].opts.slideShow ) {\r\n\t\t\t\tself.$button.hide();\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tset : function( force ) {\r\n\t\t\tvar self = this;\r\n\r\n\t\t\t// Check if reached last element\r\n\t\t\tif ( self.instance && self.instance.current && (force === true || self.instance.current.opts.loop || self.instance.currIndex < self.instance.group.length - 1 )) {\r\n\t\t\t\tself.timer = setTimeout(function() {\r\n\t\t\t\t\tif ( self.isActive ) {\r\n\t\t\t\t\t\tself.instance.jumpTo( (self.instance.currIndex + 1) % self.instance.group.length );\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}, self.instance.current.opts.slideShow.speed);\r\n\r\n\t\t\t} else {\r\n\t\t\t\tself.stop();\r\n\t\t\t\tself.instance.idleSecondsCounter = 0;\r\n\t\t\t\tself.instance.showControls();\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tclear : function() {\r\n\t\t\tvar self = this;\r\n\r\n\t\t\tclearTimeout( self.timer );\r\n\r\n\t\t\tself.timer = null;\r\n\t\t},\r\n\r\n\t\tstart : function() {\r\n\t\t\tvar self = this;\r\n\t\t\tvar current = self.instance.current;\r\n\r\n\t\t\tif ( current ) {\r\n\t\t\t\tself.isActive = true;\r\n\r\n\t\t\t\tself.$button\r\n\t\t\t\t\t.attr( 'title', current.opts.i18n[ current.opts.lang ].PLAY_STOP )\r\n\t\t\t\t\t.removeClass( 'fancybox-button--play' )\r\n\t\t\t\t\t.addClass( 'fancybox-button--pause' );\r\n\r\n\t\t\t\t\tself.set( true );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tstop : function() {\r\n\t\t\tvar self = this;\r\n\t\t\tvar current = self.instance.current;\r\n\r\n\t\t\tself.clear();\r\n\r\n\t\t\tself.$button\r\n\t\t\t\t.attr( 'title', current.opts.i18n[ current.opts.lang ].PLAY_START )\r\n\t\t\t\t.removeClass( 'fancybox-button--pause' )\r\n\t\t\t\t.addClass( 'fancybox-button--play' );\r\n\r\n\t\t\tself.isActive = false;\r\n\t\t},\r\n\r\n\t\ttoggle : function() {\r\n\t\t\tvar self = this;\r\n\r\n\t\t\tif ( self.isActive ) {\r\n\t\t\t\tself.stop();\r\n\r\n\t\t\t} else {\r\n\t\t\t\tself.start();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t});\r\n\r\n\t$(document).on({\r\n\t\t'onInit.fb' : function(e, instance) {\r\n\t\t\tif ( instance && !instance.SlideShow ) {\r\n\t\t\t\tinstance.SlideShow = new SlideShow( instance );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t'beforeShow.fb' : function(e, instance, current, firstRun) {\r\n\t\t\tvar SlideShow = instance && instance.SlideShow;\r\n\r\n\t\t\tif ( firstRun ) {\r\n\r\n\t\t\t\tif ( SlideShow && current.opts.slideShow.autoStart ) {\r\n\t\t\t\t\tSlideShow.start();\r\n\t\t\t\t}\r\n\r\n\t\t\t} else if ( SlideShow && SlideShow.isActive ) {\r\n\t\t\t\tSlideShow.clear();\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t'afterShow.fb' : function(e, instance, current) {\r\n\t\t\tvar SlideShow = instance && instance.SlideShow;\r\n\r\n\t\t\tif ( SlideShow && SlideShow.isActive ) {\r\n\t\t\t\tSlideShow.set();\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t'afterKeydown.fb' : function(e, instance, current, keypress, keycode) {\r\n\t\t\tvar SlideShow = instance && instance.SlideShow;\r\n\r\n\t\t\t// \"P\" or Spacebar\r\n\t\t\tif ( SlideShow && current.opts.slideShow && ( keycode === 80 || keycode === 32 ) && !$(document.activeElement).is( 'button,a,input' ) ) {\r\n\t\t\t\tkeypress.preventDefault();\r\n\r\n\t\t\t\tSlideShow.toggle();\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t'beforeClose.fb onDeactivate.fb' : function(e, instance) {\r\n\t\t\tvar SlideShow = instance && instance.SlideShow;\r\n\r\n\t\t\tif ( SlideShow ) {\r\n\t\t\t\tSlideShow.stop();\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\t// Page Visibility API to pause slideshow when window is not active\r\n\t$(document).on(\"visibilitychange\", function() {\r\n\t\tvar instance = $.fancybox.getInstance();\r\n\t\tvar SlideShow = instance && instance.SlideShow;\r\n\r\n\t\tif ( SlideShow && SlideShow.isActive ) {\r\n\t\t\tif ( document.hidden ) {\r\n\t\t\t\tSlideShow.clear();\r\n\r\n\t\t\t} else {\r\n\t\t\t\tSlideShow.set();\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n}( document, window.jQuery || jQuery ));\r\n\r\n// ==========================================================================\r\n//\r\n// FullScreen\r\n// Adds fullscreen functionality\r\n//\r\n// ==========================================================================\r\n;(function (document, $) {\r\n\t'use strict';\r\n\r\n\t// Collection of methods supported by user browser\r\n\tvar fn = (function () {\r\n\r\n\t\tvar fnMap = [\r\n\t\t\t[\r\n\t\t\t\t'requestFullscreen',\r\n\t\t\t\t'exitFullscreen',\r\n\t\t\t\t'fullscreenElement',\r\n\t\t\t\t'fullscreenEnabled',\r\n\t\t\t\t'fullscreenchange',\r\n\t\t\t\t'fullscreenerror'\r\n\t\t\t],\r\n\t\t\t// new WebKit\r\n\t\t\t[\r\n\t\t\t\t'webkitRequestFullscreen',\r\n\t\t\t\t'webkitExitFullscreen',\r\n\t\t\t\t'webkitFullscreenElement',\r\n\t\t\t\t'webkitFullscreenEnabled',\r\n\t\t\t\t'webkitfullscreenchange',\r\n\t\t\t\t'webkitfullscreenerror'\r\n\r\n\t\t\t],\r\n\t\t\t// old WebKit (Safari 5.1)\r\n\t\t\t[\r\n\t\t\t\t'webkitRequestFullScreen',\r\n\t\t\t\t'webkitCancelFullScreen',\r\n\t\t\t\t'webkitCurrentFullScreenElement',\r\n\t\t\t\t'webkitCancelFullScreen',\r\n\t\t\t\t'webkitfullscreenchange',\r\n\t\t\t\t'webkitfullscreenerror'\r\n\r\n\t\t\t],\r\n\t\t\t[\r\n\t\t\t\t'mozRequestFullScreen',\r\n\t\t\t\t'mozCancelFullScreen',\r\n\t\t\t\t'mozFullScreenElement',\r\n\t\t\t\t'mozFullScreenEnabled',\r\n\t\t\t\t'mozfullscreenchange',\r\n\t\t\t\t'mozfullscreenerror'\r\n\t\t\t],\r\n\t\t\t[\r\n\t\t\t\t'msRequestFullscreen',\r\n\t\t\t\t'msExitFullscreen',\r\n\t\t\t\t'msFullscreenElement',\r\n\t\t\t\t'msFullscreenEnabled',\r\n\t\t\t\t'MSFullscreenChange',\r\n\t\t\t\t'MSFullscreenError'\r\n\t\t\t]\r\n\t\t];\r\n\r\n\t\tvar val;\r\n\t\tvar ret = {};\r\n\t\tvar i, j;\r\n\r\n\t\tfor ( i = 0; i < fnMap.length; i++ ) {\r\n\t\t\tval = fnMap[ i ];\r\n\r\n\t\t\tif ( val && val[ 1 ] in document ) {\r\n\t\t\t\tfor ( j = 0; j < val.length; j++ ) {\r\n\t\t\t\t\tret[ fnMap[ 0 ][ j ] ] = val[ j ];\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn ret;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t})();\r\n\r\n\t// If browser does not have Full Screen API, then simply unset default button template and stop\r\n\tif ( !fn ) {\r\n\r\n\t\tif ( $ && $.fancybox ) {\r\n\t\t\t$.fancybox.defaults.btnTpl.fullScreen = false;\r\n\t\t}\r\n\r\n\t\treturn;\r\n\t}\r\n\r\n\tvar FullScreen = {\r\n\r\n\t\trequest : function ( elem ) {\r\n\r\n\t\t\telem = elem || document.documentElement;\r\n\r\n\t\t\telem[ fn.requestFullscreen ]( elem.ALLOW_KEYBOARD_INPUT );\r\n\r\n\t\t},\r\n\t\texit : function () {\r\n\r\n\t\t\tdocument[ fn.exitFullscreen ]();\r\n\r\n\t\t},\r\n\t\ttoggle : function ( elem ) {\r\n\r\n\t\t\telem = elem || document.documentElement;\r\n\r\n\t\t\tif ( this.isFullscreen() ) {\r\n\t\t\t\tthis.exit();\r\n\r\n\t\t\t} else {\r\n\t\t\t\tthis.request( elem );\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\tisFullscreen : function() {\r\n\r\n\t\t\treturn Boolean( document[ fn.fullscreenElement ] );\r\n\r\n\t\t},\r\n\t\tenabled : function() {\r\n\r\n\t\t\treturn Boolean( document[ fn.fullscreenEnabled ] );\r\n\r\n\t\t}\r\n\t};\r\n\r\n\t$.extend(true, $.fancybox.defaults, {\r\n\t\tbtnTpl : {\r\n\t\t\tfullScreen :\r\n\t\t\t\t''\r\n\t\t},\r\n\t\tfullScreen : {\r\n\t\t\tautoStart : false\r\n\t\t}\r\n\t});\r\n\r\n\t$(document).on({\r\n\t\t'onInit.fb' : function(e, instance) {\r\n\t\t\tvar $container;\r\n\r\n\t\t\tif ( instance && instance.group[ instance.currIndex ].opts.fullScreen ) {\r\n\t\t\t\t$container = instance.$refs.container;\r\n\r\n\t\t\t\t$container.on('click.fb-fullscreen', '[data-fancybox-fullscreen]', function(e) {\r\n\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\t\tFullScreen.toggle( $container[ 0 ] );\r\n\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif ( instance.opts.fullScreen && instance.opts.fullScreen.autoStart === true ) {\r\n\t\t\t\t\tFullScreen.request( $container[ 0 ] );\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Expose API\r\n\t\t\t\tinstance.FullScreen = FullScreen;\r\n\r\n\t\t\t} else if ( instance ) {\r\n\t\t\t\tinstance.$refs.toolbar.find('[data-fancybox-fullscreen]').hide();\r\n\t\t\t}\r\n\r\n\t\t},\r\n\r\n\t\t'afterKeydown.fb' : function(e, instance, current, keypress, keycode) {\r\n\r\n\t\t\t// \"P\" or Spacebar\r\n\t\t\tif ( instance && instance.FullScreen && keycode === 70 ) {\r\n\t\t\t\tkeypress.preventDefault();\r\n\r\n\t\t\t\tinstance.FullScreen.toggle( instance.$refs.container[ 0 ] );\r\n\t\t\t}\r\n\r\n\t\t},\r\n\r\n\t\t'beforeClose.fb' : function( instance ) {\r\n\t\t\tif ( instance && instance.FullScreen ) {\r\n\t\t\t\tFullScreen.exit();\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\t$(document).on(fn.fullscreenchange, function() {\r\n\t\tvar isFullscreen = FullScreen.isFullscreen(),\r\n\t\t\tinstance = $.fancybox.getInstance();\r\n\r\n\t\tif ( instance ) {\r\n\r\n\t\t\t// If image is zooming, then force to stop and reposition properly\r\n\t\t\tif ( instance.current && instance.current.type === 'image' && instance.isAnimating ) {\r\n\t\t\t\tinstance.current.$content.css( 'transition', 'none' );\r\n\r\n\t\t\t\tinstance.isAnimating = false;\r\n\r\n\t\t\t\tinstance.update( true, true, 0 );\r\n\t\t\t}\r\n\r\n\t\t\tinstance.trigger( 'onFullscreenChange', isFullscreen );\r\n\r\n\t\t\tinstance.$refs.container.toggleClass( 'fancybox-is-fullscreen', isFullscreen );\r\n\t\t}\r\n\r\n\t});\r\n\r\n}( document, window.jQuery || jQuery ));\r\n\r\n// ==========================================================================\r\n//\r\n// Thumbs\r\n// Displays thumbnails in a grid\r\n//\r\n// ==========================================================================\r\n;(function (document, $) {\r\n\t'use strict';\r\n\r\n\t// Make sure there are default values\r\n\t$.fancybox.defaults = $.extend(true, {\r\n\t\tbtnTpl : {\r\n\t\t\tthumbs :\r\n\t\t\t''\r\n\t\t},\r\n\t\tthumbs : {\r\n\t\t\tautoStart : false, // Display thumbnails on opening\r\n\t\t\thideOnClose : true, // Hide thumbnail grid when closing animation starts\r\n\t\t\tparentEl : '.fancybox-container', // Container is injected into this element\r\n\t\t\taxis : 'y' // Vertical (y) or horizontal (x) scrolling\r\n\t\t}\r\n\t}, $.fancybox.defaults);\r\n\r\n\tvar FancyThumbs = function( instance ) {\r\n\t\tthis.init( instance );\r\n\t};\r\n\r\n\t$.extend( FancyThumbs.prototype, {\r\n\r\n\t\t$button\t\t: null,\r\n\t\t$grid\t\t: null,\r\n\t\t$list\t\t: null,\r\n\t\tisVisible\t: false,\r\n\t\tisActive\t: false,\r\n\r\n\t\tinit : function( instance ) {\r\n\t\t\tvar self = this;\r\n\r\n\t\t\tself.instance = instance;\r\n\r\n\t\t\tinstance.Thumbs = self;\r\n\r\n\t\t\t// Enable thumbs if at least two group items have thumbnails\r\n\t\t\tvar first = instance.group[0],\r\n\t\t\t\tsecond = instance.group[1];\r\n\r\n\t\t\tself.opts = instance.group[ instance.currIndex ].opts.thumbs;\r\n\r\n\t\t\tself.$button = instance.$refs.toolbar.find( '[data-fancybox-thumbs]' );\r\n\r\n\t\t\tif ( self.opts && first && second && (\r\n\t\t \t\t( first.type == 'image' || first.opts.thumb || first.opts.$thumb ) &&\r\n\t\t \t\t( second.type == 'image' || second.opts.thumb || second.opts.$thumb )\r\n\t\t\t)) {\r\n\r\n\t\t\t\tself.$button.show().on('click', function() {\r\n\t\t\t\t\tself.toggle();\r\n\t\t\t\t});\r\n\r\n\t\t\t\tself.isActive = true;\r\n\r\n\t\t\t} else {\r\n\t\t\t\tself.$button.hide();\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tcreate : function() {\r\n\t\t\tvar self = this,\r\n\t\t\t\tinstance = self.instance,\r\n\t\t\t\tparentEl = self.opts.parentEl,\r\n\t\t\t\tlist,\r\n\t\t\t\tsrc;\r\n\r\n\t\t\tself.$grid = $('
').appendTo( instance.$refs.container.find( parentEl ).addBack().filter( parentEl ) );\r\n\r\n\t\t\t// Build list HTML\r\n\t\t\tlist = '
    ';\r\n\r\n\t\t\t$.each(instance.group, function( i, item ) {\r\n\t\t\t\tsrc = item.opts.thumb || ( item.opts.$thumb ? item.opts.$thumb.attr( 'src' ) : null );\r\n\r\n\t\t\t\tif ( !src && item.type === 'image' ) {\r\n\t\t\t\t\tsrc = item.src;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( src && src.length ) {\r\n\t\t\t\t\tlist += '
  • ';\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tlist += '
';\r\n\r\n\t\t\tself.$list = $( list ).appendTo( self.$grid ).on('click', 'li', function() {\r\n\t\t\t\tinstance.jumpTo( $(this).data('index') );\r\n\t\t\t});\r\n\r\n\t\t\tself.$list.find( 'img' ).hide().one('load', function() {\r\n\t\t\t\tvar $parent\t\t= $(this).parent().removeClass( 'fancybox-thumbs-loading' ),\r\n\t\t\t\t\tthumbWidth\t= $parent.outerWidth(),\r\n\t\t\t\t\tthumbHeight\t= $parent.outerHeight(),\r\n\t\t\t\t\twidth,\r\n\t\t\t\t\theight,\r\n\t\t\t\t\twidthRatio,\r\n\t\t\t\t\theightRatio;\r\n\r\n\t\t\t\twidth = this.naturalWidth\t|| this.width;\r\n\t\t\t\theight = this.naturalHeight\t|| this.height;\r\n\r\n\t\t\t\t// Calculate thumbnail dimensions; center vertically and horizontally\r\n\t\t\t\twidthRatio = width / thumbWidth;\r\n\t\t\t\theightRatio = height / thumbHeight;\r\n\r\n\t\t\t\tif (widthRatio >= 1 && heightRatio >= 1) {\r\n\t\t\t\t\tif (widthRatio > heightRatio) {\r\n\t\t\t\t\t\twidth = width / heightRatio;\r\n\t\t\t\t\t\theight = thumbHeight;\r\n\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\twidth = thumbWidth;\r\n\t\t\t\t\t\theight = height / widthRatio;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$(this).css({\r\n\t\t\t\t\twidth : Math.floor(width),\r\n\t\t\t\t\theight : Math.floor(height),\r\n\t\t\t\t\t'margin-top' : height > thumbHeight ? ( Math.floor(thumbHeight * 0.3 - height * 0.3 ) ) : Math.floor(thumbHeight * 0.5 - height * 0.5 ),\r\n\t\t\t\t\t'margin-left' : Math.floor(thumbWidth * 0.5 - width * 0.5 )\r\n\t\t\t\t}).show();\r\n\r\n\t\t\t})\r\n\t\t\t.each(function() {\r\n\t\t\t\tthis.src = $( this ).data( 'src' );\r\n\t\t\t});\r\n\r\n\t\t\tif ( self.opts.axis === 'x' ) {\r\n\t\t\t\tself.$list.width( parseInt( self.$grid.css(\"padding-right\") ) + ( instance.group.length * self.$list.children().eq(0).outerWidth(true) ) + 'px' );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tfocus : function( duration ) {\r\n\t\t\tvar self = this,\r\n\t\t\t\t$list = self.$list,\r\n\t\t\t\tthumb,\r\n\t\t\t\tthumbPos;\r\n\r\n\t\t\tif ( self.instance.current ) {\r\n\t\t\t\tthumb = $list.children()\r\n\t\t\t\t\t.removeClass( 'fancybox-thumbs-active' )\r\n\t\t\t\t\t.filter('[data-index=\"' + self.instance.current.index + '\"]')\r\n\t\t\t\t\t.addClass('fancybox-thumbs-active');\r\n\r\n\t\t\t\tthumbPos = thumb.position();\r\n\r\n\t\t\t\t// Check if need to scroll to make current thumb visible\r\n\t\t\t\tif ( self.opts.axis === 'y' && ( thumbPos.top < 0 || thumbPos.top > ( $list.height() - thumb.outerHeight() ) ) ) {\r\n\t\t\t\t\t$list.stop().animate({ 'scrollTop' : $list.scrollTop() + thumbPos.top }, duration);\r\n\r\n\t\t\t\t} else if ( self.opts.axis === 'x' && (\r\n\t\t\t\t\t\tthumbPos.left < $list.parent().scrollLeft() ||\r\n\t\t\t\t\t\tthumbPos.left > ( $list.parent().scrollLeft() + ( $list.parent().width() - thumb.outerWidth() ) )\r\n\t\t\t\t\t)\r\n\t\t\t\t) {\r\n\t\t\t\t\t$list.parent().stop().animate({ 'scrollLeft' : thumbPos.left }, duration);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tupdate : function() {\r\n\t\t\tthis.instance.$refs.container.toggleClass( 'fancybox-show-thumbs', this.isVisible );\r\n\r\n\t\t\tif ( this.isVisible ) {\r\n\t\t\t\tif ( !this.$grid ) {\r\n\t\t\t\t\tthis.create();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.instance.trigger( 'onThumbsShow' );\r\n\r\n\t\t\t\tthis.focus( 0 );\r\n\r\n\t\t\t} else if ( this.$grid ) {\r\n\t\t\t\tthis.instance.trigger( 'onThumbsHide' );\r\n\t\t\t}\r\n\r\n\t\t\t// Update content position\r\n\t\t\tthis.instance.update();\r\n\t\t},\r\n\r\n\t\thide : function() {\r\n\t\t\tthis.isVisible = false;\r\n\t\t\tthis.update();\r\n\t\t},\r\n\r\n\t\tshow : function() {\r\n\t\t\tthis.isVisible = true;\r\n\t\t\tthis.update();\r\n\t\t},\r\n\r\n\t\ttoggle : function() {\r\n\t\t\tthis.isVisible = !this.isVisible;\r\n\t\t\tthis.update();\r\n\t\t}\r\n\t});\r\n\r\n\t$(document).on({\r\n\r\n\t\t'onInit.fb' : function(e, instance) {\r\n\t\t\tvar Thumbs;\r\n\r\n\t\t\tif ( instance && !instance.Thumbs ) {\r\n\t\t\t\tThumbs = new FancyThumbs( instance );\r\n\r\n\t\t\t\tif ( Thumbs.isActive && Thumbs.opts.autoStart === true ) {\r\n\t\t\t\t\tThumbs.show();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t'beforeShow.fb' : function(e, instance, item, firstRun) {\r\n\t\t\tvar Thumbs = instance && instance.Thumbs;\r\n\r\n\t\t\tif ( Thumbs && Thumbs.isVisible ) {\r\n\t\t\t\tThumbs.focus( firstRun ? 0 : 250 );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t'afterKeydown.fb' : function(e, instance, current, keypress, keycode) {\r\n\t\t\tvar Thumbs = instance && instance.Thumbs;\r\n\r\n\t\t\t// \"G\"\r\n\t\t\tif ( Thumbs && Thumbs.isActive && keycode === 71 ) {\r\n\t\t\t\tkeypress.preventDefault();\r\n\r\n\t\t\t\tThumbs.toggle();\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t'beforeClose.fb' : function( e, instance ) {\r\n\t\t\tvar Thumbs = instance && instance.Thumbs;\r\n\r\n\t\t\tif ( Thumbs && Thumbs.isVisible && Thumbs.opts.hideOnClose !== false ) {\r\n\t\t\t\tThumbs.$grid.hide();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t});\r\n\r\n}(document, window.jQuery));\r\n\r\n//// ==========================================================================\r\n//\r\n// Share\r\n// Displays simple form for sharing current url\r\n//\r\n// ==========================================================================\r\n;(function (document, $) {\r\n\t'use strict';\r\n\r\n\t$.extend(true, $.fancybox.defaults, {\r\n\t\tbtnTpl : {\r\n\t\t\tshare :\r\n\t\t\t\t''\r\n\t\t},\r\n\t\tshare : {\r\n\t\t\ttpl :\r\n\t\t\t\t'
' +\r\n\t\t\t\t\t'

{{SHARE}}

' +\r\n\t\t\t\t\t'

' +\r\n\t\t\t\t\t\t'' +\r\n\t\t\t\t\t\t\t'' +\r\n\t\t\t\t\t\t\t'Facebook' +\r\n\t\t\t\t\t\t'' +\r\n\t\t\t\t\t\t'' +\r\n\t\t\t\t\t\t\t'' +\r\n\t\t\t\t\t\t\t'Pinterest' +\r\n\t\t\t\t\t\t'' +\r\n\t\t\t\t\t\t'' +\r\n\t\t\t\t\t\t\t'' +\r\n\t\t\t\t\t\t\t'Twitter' +\r\n\t\t\t\t\t\t'' +\r\n\t\t\t\t\t'

' +\r\n\t\t\t\t\t'

' +\r\n\t\t\t\t'
'\r\n\t\t}\r\n\t});\r\n\r\n\tfunction escapeHtml(string) {\r\n\t\tvar entityMap = {\r\n\t\t '&': '&',\r\n\t\t '<': '<',\r\n\t\t '>': '>',\r\n\t\t '\"': '"',\r\n\t\t \"'\": ''',\r\n\t\t '/': '/',\r\n\t\t '`': '`',\r\n\t\t '=': '='\r\n\t\t};\r\n\r\n\t\treturn String(string).replace(/[&<>\"'`=\\/]/g, function (s) {\r\n\t\t\treturn entityMap[s];\r\n\t\t});\r\n\t}\r\n\r\n\t$(document).on('click', '[data-fancybox-share]', function() {\r\n\t\tvar f = $.fancybox.getInstance(),\r\n\t\t\turl,\r\n\t\t\ttpl;\r\n\r\n\t\tif ( f ) {\r\n\t\t\turl = f.current.opts.hash === false ? f.current.src : window.location;\r\n\t\t\ttpl = f.current.opts.share.tpl\r\n\t\t\t\t\t.replace( /\\{\\{media\\}\\}/g, f.current.type === 'image' ? encodeURIComponent( f.current.src ) : '' )\r\n\t\t\t\t\t.replace( /\\{\\{url\\}\\}/g, encodeURIComponent( url ) )\r\n\t\t\t\t\t.replace( /\\{\\{url_raw\\}\\}/g, escapeHtml( url ) )\r\n\t\t\t\t\t.replace( /\\{\\{descr\\}\\}/g, f.$caption ? encodeURIComponent( f.$caption.text() ) : '' );\r\n\r\n\t\t\t$.fancybox.open({\r\n\t\t\t\tsrc : f.translate( f, tpl ),\r\n\t\t\t\ttype : 'html',\r\n\t\t\t\topts : {\r\n\t\t\t\t\tanimationEffect : \"fade\",\r\n\t\t\t\t\tanimationDuration : 250,\r\n\t\t\t\t\tafterLoad : function(instance, current) {\r\n\t\t\t\t\t\t// Opening links in a popup window\r\n\t\t\t\t\t\tcurrent.$content.find('.fancybox-share__links a').click(function() {\r\n\t\t\t\t\t window.open(this.href, \"Share\", \"width=550, height=450\");\r\n\t\t\t\t\t return false;\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t});\r\n\r\n}( document, window.jQuery || jQuery ));\r\n\r\n// ==========================================================================\r\n//\r\n// Hash\r\n// Enables linking to each modal\r\n//\r\n// ==========================================================================\r\n;(function (document, window, $) {\r\n\t'use strict';\r\n\r\n\t// Simple $.escapeSelector polyfill (for jQuery prior v3)\r\n\tif ( !$.escapeSelector ) {\r\n\t\t$.escapeSelector = function( sel ) {\r\n\t\t\tvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\r\n\t\t\tvar fcssescape = function( ch, asCodePoint ) {\r\n\t\t\t\tif ( asCodePoint ) {\r\n\t\t\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\r\n\t\t\t\t\tif ( ch === \"\\0\" ) {\r\n\t\t\t\t\t\treturn \"\\uFFFD\";\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\r\n\t\t\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Other potentially-special ASCII characters get backslash-escaped\r\n\t\t\t\treturn \"\\\\\" + ch;\r\n\t\t\t};\r\n\r\n\t\t\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\r\n\t\t};\r\n\t}\r\n\r\n\t// Create new history entry only once\r\n\tvar shouldCreateHistory = true;\r\n\r\n\t// Variable containing last hash value set by fancyBox\r\n\t// It will be used to determine if fancyBox needs to close after hash change is detected\r\n var currentHash = null;\r\n\r\n\t// Throttling the history change\r\n\tvar timerID = null;\r\n\r\n\t// Get info about gallery name and current index from url\r\n function parseUrl() {\r\n var hash = window.location.hash.substr( 1 );\r\n var rez = hash.split( '-' );\r\n var index = rez.length > 1 && /^\\+?\\d+$/.test( rez[ rez.length - 1 ] ) ? parseInt( rez.pop( -1 ), 10 ) || 1 : 1;\r\n var gallery = rez.join( '-' );\r\n\r\n\t\t// Index is starting from 1\r\n\t\tif ( index < 1 ) {\r\n\t\t\tindex = 1;\r\n\t\t}\r\n\r\n return {\r\n hash : hash,\r\n index : index,\r\n gallery : gallery\r\n };\r\n }\r\n\r\n\t// Trigger click evnt on links to open new fancyBox instance\r\n\tfunction triggerFromUrl( url ) {\r\n\t\tvar $el;\r\n\r\n if ( url.gallery !== '' ) {\r\n\r\n\t\t\t// If we can find element matching 'data-fancybox' atribute, then trigger click event for that ..\r\n\t\t\t$el = $( \"[data-fancybox='\" + $.escapeSelector( url.gallery ) + \"']\" ).eq( url.index - 1 );\r\n\r\n if ( !$el.length ) {\r\n\t\t\t\t// .. if not, try finding element by ID\r\n\t\t\t\t$el = $( \"#\" + $.escapeSelector( url.gallery ) + \"\" );\r\n\t\t\t}\r\n\r\n\t\t\tif ( $el.length ) {\r\n\t\t\t\tshouldCreateHistory = false;\r\n\r\n\t\t\t\t$el.trigger( 'click' );\r\n\t\t\t}\r\n\r\n }\r\n\t}\r\n\r\n\t// Get gallery name from current instance\r\n\tfunction getGalleryID( instance ) {\r\n\t\tvar opts;\r\n\r\n\t\tif ( !instance ) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\topts = instance.current ? instance.current.opts : instance.opts;\r\n\r\n\t\treturn opts.hash || ( opts.$orig ? opts.$orig.data( 'fancybox' ) : '' );\r\n\t}\r\n\r\n\t// Start when DOM becomes ready\r\n $(function() {\r\n\r\n\t\t// Check if user has disabled this module\r\n\t\tif ( $.fancybox.defaults.hash === false ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Update hash when opening/closing fancyBox\r\n\t $(document).on({\r\n\t\t\t'onInit.fb' : function( e, instance ) {\r\n\t\t\t\tvar url, gallery;\r\n\r\n\t\t\t\tif ( instance.group[ instance.currIndex ].opts.hash === false ) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\turl = parseUrl();\r\n\t\t\t\tgallery = getGalleryID( instance );\r\n\r\n\t\t\t\t// Make sure gallery start index matches index from hash\r\n\t\t\t\tif ( gallery && url.gallery && gallery == url.gallery ) {\r\n\t\t\t\t\tinstance.currIndex = url.index - 1;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t'beforeShow.fb' : function( e, instance, current ) {\r\n\t\t\t\tvar gallery;\r\n\r\n\t\t\t\tif ( !current || current.opts.hash === false ) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t gallery = getGalleryID( instance );\r\n\r\n\t // Update window hash\r\n\t if ( gallery && gallery !== '' ) {\r\n\r\n\t\t\t\t\tif ( window.location.hash.indexOf( gallery ) < 0 ) {\r\n\t\t instance.opts.origHash = window.location.hash;\r\n\t\t }\r\n\r\n\t\t\t\t\tcurrentHash = gallery + ( instance.group.length > 1 ? '-' + ( current.index + 1 ) : '' );\r\n\r\n\t\t\t\t\tif ( 'replaceState' in window.history ) {\r\n\t\t\t\t\t\tif ( timerID ) {\r\n\t\t\t\t\t\t\tclearTimeout( timerID );\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\ttimerID = setTimeout(function() {\r\n\t\t\t\t\t\t\twindow.history[ shouldCreateHistory ? 'pushState' : 'replaceState' ]( {} , document.title, window.location.pathname + window.location.search + '#' + currentHash );\r\n\r\n\t\t\t\t\t\t\ttimerID = null;\r\n\r\n\t\t\t\t\t\t\tshouldCreateHistory = false;\r\n\r\n\t\t\t\t\t\t}, 300);\r\n\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\twindow.location.hash = currentHash;\r\n\t\t\t\t\t}\r\n\r\n\t }\r\n\r\n\t },\r\n\r\n\t\t\t'beforeClose.fb' : function( e, instance, current ) {\r\n\t\t\t\tvar gallery, origHash;\r\n\r\n\t\t\t\tif ( timerID ) {\r\n\t\t\t\t\tclearTimeout( timerID );\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( current.opts.hash === false ) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tgallery = getGalleryID( instance );\r\n\t\t\t\torigHash = instance && instance.opts.origHash ? instance.opts.origHash : '';\r\n\r\n\t // Remove hash from location bar\r\n\t if ( gallery && gallery !== '' ) {\r\n\r\n\t if ( 'replaceState' in history ) {\r\n\t\t\t\t\t\twindow.history.replaceState( {} , document.title, window.location.pathname + window.location.search + origHash );\r\n\r\n\t } else {\r\n\t\t\t\t\t\twindow.location.hash = origHash;\r\n\r\n\t\t\t\t\t\t// Keep original scroll position\r\n\t\t\t\t\t\t$( window ).scrollTop( instance.scrollTop ).scrollLeft( instance.scrollLeft );\r\n\t }\r\n\t }\r\n\r\n\t\t\t\tcurrentHash = null;\r\n\t }\r\n\t });\r\n\r\n\t\t// Check if need to close after url has changed\r\n\t\t$(window).on('hashchange.fb', function() {\r\n\t\t\tvar url = parseUrl();\r\n\r\n\t\t\tif ( $.fancybox.getInstance() ) {\r\n\t\t\t\tif ( currentHash && currentHash !== url.gallery + '-' + url.index && !( url.index === 1 && currentHash == url.gallery ) ) {\r\n\t\t\t\t\tcurrentHash = null;\r\n\r\n\t\t\t\t\t$.fancybox.close();\r\n\t\t\t\t}\r\n\r\n\t\t\t} else if ( url.gallery !== '' ) {\r\n\t\t\t\ttriggerFromUrl( url );\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// Check current hash and trigger click event on matching element to start fancyBox, if needed\r\n\t\tsetTimeout(function() {\r\n\t\t\ttriggerFromUrl( parseUrl() );\r\n\t\t}, 50);\r\n });\r\n\r\n}( document, window, window.jQuery || jQuery ));\r\n\r\n;(function (document, $) {\r\n\t'use strict';\r\n\r\n\tvar prevTime = new Date().getTime();\r\n\r\n $(document).on({\r\n 'onInit.fb' : function( e, instance, current ) {\r\n\t\t\tinstance.$refs.stage.on('mousewheel DOMMouseScroll wheel MozMousePixelScroll', function(e) {\r\n\t\t\t\tvar current = instance.current,\r\n\t\t\t\t\tcurrTime = new Date().getTime();\r\n\r\n\t\t\t\tif ( instance.group.length < 1 || current.opts.wheel === false || ( current.opts.wheel === 'auto' && current.type !== 'image' ) ) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\te.stopPropagation();\r\n\r\n\t\t\t\tif ( current.$slide.hasClass( 'fancybox-animated' ) ) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\te = e.originalEvent || e;\r\n\r\n\t\t\t\tif ( currTime - prevTime < 250 ) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tprevTime = currTime;\r\n\r\n\t\t\t\tinstance[ ( -e.deltaY || -e.deltaX || e.wheelDelta || -e.detail ) < 0 ? 'next' : 'previous' ]();\r\n\r\n\t\t\t});\r\n\t\t}\r\n });\r\n\r\n}( document, window.jQuery || jQuery ));\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/Vadim/Projects/Php/zakupki/node_modules/@fancyapps/fancybox/dist/jquery.fancybox.js\n// module id = GfF8\n// module chunks = 0 7 13 22","require(\"!!C:\\\\Vadim\\\\Projects\\\\Php\\\\zakupki\\\\node_modules\\\\script-loader\\\\addScript.js\")(require(\"!!C:\\\\Vadim\\\\Projects\\\\Php\\\\zakupki\\\\node_modules\\\\raw-loader\\\\index.js!C:\\\\Vadim\\\\Projects\\\\Php\\\\zakupki\\\\assets\\\\vendor\\\\soon-countdown\\\\soon.1.9.0.min.js\"))\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../vendor/soon-countdown/soon.1.9.0.min.js\n// module id = HH+/\n// module chunks = 6 7","import $ from 'jquery';\nimport * as lastComments from \"../../blocks/last_comments/lastcomments\";\nimport {globals} from \"../../../core/utils/globals\";\n\nexport function init() {\n lastComments.init({\n heightTarget: '#blogContent',\n commentsType: 'blog'\n });\n\n const toggleFilterClear = function() {\n const filtered = ($('#sortSelect').val() !== 'add_date') || $('#shopSearch').val()\n || ($('.category-filter-item:checked').length > 0);\n\n if(filtered) {\n $('.filter-clear-wrapper').show();\n } else {\n $('.filter-clear-wrapper').hide();\n }\n };\n\n $('#sortSelect').change(function(e) {\n $.cookie('blog_sort_by', $(this).val(), {expires: 365, path: '/'});\n\n toggleFilterClear();\n $(document).trigger('reloadSales');\n });\n $('#filterSelect').change(function(e) {\n $.cookie('blog_date_filter', $(this).val(), {expires: 365, path: '/'});\n\n toggleFilterClear();\n $(document).trigger('reloadSales');\n });\n\n $('#shopSearch').on('keyup paste', function(e) {\n toggleFilterClear();\n $(document).trigger('reloadSales');\n });\n\n $('.category-filter-item-wrapper').click(function(e) {\n e.preventDefault();\n let $this = $(this);\n let $checkBox = $this.find('.category-filter-item');\n\n let category = $checkBox.data('slug');\n let checked = !$this.hasClass('current-cat');\n\n const blogType = globals('blogType');\n if (blogType != 'sale_new') {\n // just go to new location\n if (checked) {\n\t const blogUrl = globals('blogUrl');\n location.href = blogUrl + '/category/' + category;\n }\n return;\n }\n\n let categories = $.cookie('blog_categories_filter');\n\n $checkBox.prop('checked', checked);\n $this.toggleClass('current-cat', checked);\n\n if(categories === undefined) {\n categories = [];\n } else {\n categories = categories.split(',');\n }\n\n let arrIndex = categories.indexOf(category);\n if(checked && arrIndex === -1) {\n categories.push(category);\n } else if(!checked && arrIndex !== -1) {\n categories.splice(arrIndex, 1);\n }\n\n $.cookie('blog_categories_filter', categories.join(','), {path: '/'});\n\n toggleFilterClear();\n $(document).trigger('reloadSales');\n });\n\n $('.filter-clear').click(function (e) {\n e.preventDefault();\n\n //Clear cookies\n $.removeCookie('blog_sort_by', {path: '/'});\n $.removeCookie('blog_categories_filter', {path: '/'});\n\n const blogType = globals('blogType');\n if (blogType === 'sale_new') {\n //Clear elements\n $('#sortSelect').val('add_date').trigger('chosen:updated');\n $('#shopSearch').val('');\n $('.category-filter-item').prop('checked', false);\n $('.category-filter-item-wrapper').toggleClass('current-cat', false);\n\n $('.filter-clear-wrapper').hide();\n $(document).trigger('reloadSales');\n } else {\n window.location = '/articles';\n }\n });\n}\n\n\n// WEBPACK FOOTER //\n// ./modules/blog/sidebar/index.js","import * as sidebar from \"../sidebar\";\nimport * as pageComments from \"../pagecomments\";\nimport {SaleModel} from \"../common/model/salemodel\";\nimport {initSaleAdminPanel} from \"../common/adminpanel\";\nimport 'lib/adaptivefontsize';\nimport {newLogger} from \"../../../core/utils/logger\";\n\nconst logger = newLogger('Sale page');\n\nexport function init(options) {\n\tconst o = {\n\t\tpage: {},\n\t\tcomments: [],\n\t\t...options\n\t};\n\n\tlogger.log('init', o);\n\n\tinitPage(o.page);\n\tpageComments.init({page: o.page, comments: o.comments});\n\tsetTimeout(sidebar.init);\n\tcategoriesCrop($('#saleWrapper .sale-cats'));\n\tsetTimeout(initFontScale);\n\n\tinitSaleAdminPanel('#wrapAdminPanel');\n\n}\n\nfunction initPage(page) {\n\tlet model = new SalePage(page);\n\tko.applyBindings(model, $(`#page_content`)[0]);\n}\n\nfunction initFontScale() {\n\t$('#saleWrapper').find('.sale-name-inner').adaptiveFontSize({\n\t\tdone: (el) => {\n\t\t\t$(el).parent().css('opacity', 1);\n\t\t}\n\t});\n}\n\nclass SalePage extends SaleModel {\n\tconstructor(item) {\n\t\tsuper(item);\n\n $(document).on('reloadSales', () => {\n location.href = '/sale';\n\t\t});\n\t}\n}\n\nexport function categoriesCrop($container){\n\tconst $list = $container.find('.cats-list');\n\twhile($container.innerWidth() < $list.innerWidth()){\n\t\t$list.find('li').last().remove();\n\t}\n\t$container.css('opacity','1');\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./modules/blog/page/sale.js","function select(element) {\n var selectedText;\n\n if (element.nodeName === 'SELECT') {\n element.focus();\n\n selectedText = element.value;\n }\n else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\n var isReadOnly = element.hasAttribute('readonly');\n\n if (!isReadOnly) {\n element.setAttribute('readonly', '');\n }\n\n element.select();\n element.setSelectionRange(0, element.value.length);\n\n if (!isReadOnly) {\n element.removeAttribute('readonly');\n }\n\n selectedText = element.value;\n }\n else {\n if (element.hasAttribute('contenteditable')) {\n element.focus();\n }\n\n var selection = window.getSelection();\n var range = document.createRange();\n\n range.selectNodeContents(element);\n selection.removeAllRanges();\n selection.addRange(range);\n\n selectedText = selection.toString();\n }\n\n return selectedText;\n}\n\nmodule.exports = select;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/Vadim/Projects/Php/zakupki/node_modules/select/src/select.js\n// module id = NKwv\n// module chunks = 7","import * as newComment from \"./newcomment\";\nimport * as pageComments from \"./pagecomments\";\n\nexport function init(options) {\n const o = {\n page: {},\n comments: [],\n ...options\n };\n\n let commentsModel = pageComments.init(o.comments);\n newComment.init(o.page, commentsModel);\n}\n\n\n// WEBPACK FOOTER //\n// ./modules/blog/pagecomments/index.js","import $ from 'jquery';\n\n/**\n *\n * @param {Array} comments\n * @return {PageCommentsViewModel}\n */\nexport function init(comments) {\n\tlet model = new PageCommentsViewModel(comments);\n\n ko.applyBindings(model, $('#page_comments_wrapper')[0]);\n model.postInit();\n\n return model;\n}\n\nclass PageCommentsViewModel {\n _$wrapper = $('#page_comments_wrapper');\n _scroll = null;\n comments = null;\n\n constructor(comments) {\n this.comments = new ko.observableArray(comments);\n this._scroll = this._$wrapper.zInfiniteScroll(\n {\n selector: '.comment',\n checkViewport: false,\n enabled: true,\n autoStart: false,\n maxAutoloadPages: 100,\n loading: '#page_comments_scroll_loader',\n fetch: (page, callback) => {\n $.get(\n this._$wrapper.data('load-url'),\n {\n page: page,\n blog_page_id: this._$wrapper.data('page-id'),\n raw: 1\n },\n (response) => {\n callback(response.comments);\n },\n 'json'\n );\n },\n show: (items) => {\n for(let i = 0; i < items.length; i++) {\n this.comments.push(items[i]);\n }\n\n return items.length;\n }\n }\n );\n }\n\n afterRender(elements, data) {\n $(elements).find('.comment-text-container').urlconverter(30);\n $(document).trigger('heightTargetUpdated');\n };\n\n postInit() {\n this._scroll.on();\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./modules/blog/pagecomments/pagecomments.js","var is = require('./is');\nvar delegate = require('delegate');\n\n/**\n * Validates all params and calls the right\n * listener function based on its target type.\n *\n * @param {String|HTMLElement|HTMLCollection|NodeList} target\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listen(target, type, callback) {\n if (!target && !type && !callback) {\n throw new Error('Missing required arguments');\n }\n\n if (!is.string(type)) {\n throw new TypeError('Second argument must be a String');\n }\n\n if (!is.fn(callback)) {\n throw new TypeError('Third argument must be a Function');\n }\n\n if (is.node(target)) {\n return listenNode(target, type, callback);\n }\n else if (is.nodeList(target)) {\n return listenNodeList(target, type, callback);\n }\n else if (is.string(target)) {\n return listenSelector(target, type, callback);\n }\n else {\n throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');\n }\n}\n\n/**\n * Adds an event listener to a HTML element\n * and returns a remove listener function.\n *\n * @param {HTMLElement} node\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNode(node, type, callback) {\n node.addEventListener(type, callback);\n\n return {\n destroy: function() {\n node.removeEventListener(type, callback);\n }\n }\n}\n\n/**\n * Add an event listener to a list of HTML elements\n * and returns a remove listener function.\n *\n * @param {NodeList|HTMLCollection} nodeList\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNodeList(nodeList, type, callback) {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.addEventListener(type, callback);\n });\n\n return {\n destroy: function() {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.removeEventListener(type, callback);\n });\n }\n }\n}\n\n/**\n * Add an event listener to a selector\n * and returns a remove listener function.\n *\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenSelector(selector, type, callback) {\n return delegate(document.body, selector, type, callback);\n}\n\nmodule.exports = listen;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/Vadim/Projects/Php/zakupki/node_modules/good-listener/src/listen.js\n// module id = PtfZ\n// module chunks = 7","import $ from 'jquery';\nimport ko from 'lib/knockout';\n\n/**\n *\n * @param {object} page\n * @param {PageCommentsViewModel} commentsModel\n * @return {newComment}\n */\nexport function init(page, commentsModel) {\n\tlet model = new newComment(page.page_id, commentsModel);\n\tko.applyBindings(model, $('#comment_add_wrap')[0]);\n\treturn model;\n}\n\nclass newComment {\n pageId = null;\n commentsModel = null;\n text = ko.observable('');\n progress = ko.observable(false);\n valid = ko.computed(() => {return (this.text().replace(' ', '').length > 0) && !this.progress()});\n\n constructor(pageId, commentsModel) {\n this.pageId = pageId;\n this.commentsModel = commentsModel;\n }\n\n save(model, event, userId = null) {\n if(USER_ID || userId) {\n this.progress(true);\n\n let data = {\n comments_page_id: this.pageId,\n comments_content: this.text()\n };\n if (this.commentsModel.comments().length > 0) {\n data.after_date = this.commentsModel.comments()[0].comments_date;\n }\n $.post(\n site_url('blog/comments_save'),\n data,\n (response) => {\n if(response.success) {\n this.text('');\n for(let i = response.comments.length - 1; i >= 0; i--) {\n this.commentsModel.comments.unshift(response.comments[i]);\n }\n } else if(response.message !== undefined) {\n zde.notifier.error(response.message);\n }\n this.progress(false);\n },\n 'json'\n );\n } else {\n zde.showLogin((data) => {\n if(data) {\n this.save(model, event, data.id);\n return;\n }\n });\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./modules/blog/pagecomments/newcomment.js","require(\"!!C:\\\\Vadim\\\\Projects\\\\Php\\\\zakupki\\\\node_modules\\\\script-loader\\\\addScript.js\")(require(\"!!C:\\\\Vadim\\\\Projects\\\\Php\\\\zakupki\\\\node_modules\\\\raw-loader\\\\index.js!C:\\\\Vadim\\\\Projects\\\\Php\\\\zakupki\\\\assets\\\\vendor\\\\cookie\\\\jquery.cookie.js\"))\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../vendor/cookie/jquery.cookie.js\n// module id = TvIv\n// module chunks = 7","import {element} from \"./var\";\n\nconst _globals = {};\nconst _phrases = {};\n\n/**\n * Returns Globals object\n * @param {string|null} key Optional key to return\n * @param {*} defaultValue Default value for key\n * @return {object|*} Globals object if no key is provided, otherwise associated value\n */\nexport function globals(key = null, defaultValue = null) {\n\tconst g = window.globals || _globals;\n\treturn key !== null ? element(g, key, defaultValue) : g;\n}\n\n/**\n * Returns global Phrases object\n * @param {string|null} key Optional key to return\n * @param {*} defaultValue Default value for key\n * @return {object} Phrases object if no key is provided, otherwise associated value\n */\nexport function phrases(key = null, defaultValue = null) {\n\tconst g = globals('phrases') || _phrases;\n\treturn key !== null ? element(g, key, defaultValue) : g;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./core/utils/globals.js","import * as sidebar from \"../../sidebar/index\";\r\nimport {SaleModel} from \"../../common/model/salemodel\";\r\nimport {initSaleAdminPanelForList} from \"../../common/adminpanel\";\r\nimport 'lib/adaptivefontsize';\r\n\r\n/**\r\n *\r\n * @param {object} options\r\n */\r\nexport function init(options) {\r\n const o = {\r\n pages: [],\r\n ...options\r\n };\r\n\r\n\tsidebar.init({\r\n heightTarget: '#salesWrapper'\r\n });\r\n\r\n\tinitCustomSelect ();\r\n\tinitList(o.pages);\r\n\tinitSaleAdminPanelForList('#salesWrapper', '.admin-area');\r\n}\r\n\r\nfunction initCustomSelect() {\r\n $('.sort-wrapper').find('select[rel=chosen]').chosen();\r\n}\r\n\r\nfunction initList(pages) {\r\n\tconst model = new ListViewModel(pages, (element) => {\r\n\t\t$(element).find('.sale-name-inner').adaptiveFontSize({\r\n\t\t\tdone: (el) => {\r\n\t\t\t\t$(el).parent().css('opacity', 1);\r\n\t\t\t}\r\n\t\t});\r\n\t\tsetTimeout(() => {\r\n\t\t\t// update last comments in sidebar\r\n\t\t\t$(document).trigger('heightTargetUpdated');\r\n\t\t});\r\n\t});\r\n\r\n\tko.applyBindings(model, $('#salesWrapper')[0]);\r\n\tmodel.postInit();\r\n\r\n\treturn model;\r\n}\r\n\r\nclass ListViewModel {\r\n _$wrapper = $('.sales-wrapper');\r\n _itemsLoadedCallback = null;\r\n _scroll = null;\r\n pages = new ko.observableArray();\r\n\r\n\t/**\r\n\t *\r\n\t * @param {object[]} pages\r\n\t * @param {function} itemsLoadedCallback Called for each rendered item, accepts DOM Element as parameter\r\n\t */\r\n\tconstructor(pages, itemsLoadedCallback = null) {\r\n const SEEN_ARRAY_KEY = 'blog_sale_seen';\r\n const SEEN_ARRAY_MAX_LENGTH = 200;\r\n\r\n let seenArray = null;\r\n\r\n const readSeenArray = () => {\r\n const valueStored = localStorage.getItem(SEEN_ARRAY_KEY);\r\n try {\r\n seenArray = (valueStored !== null) ? JSON.parse(valueStored) : [];\r\n } catch(e) {\r\n seenArray = [];\r\n }\r\n };\r\n\r\n const writeSeenArray = () => {\r\n if(seenArray.length > SEEN_ARRAY_MAX_LENGTH) {\r\n seenArray = seenArray.slice(0, SEEN_ARRAY_MAX_LENGTH);\r\n }\r\n localStorage.setItem(SEEN_ARRAY_KEY, JSON.stringify(seenArray));\r\n };\r\n\r\n this._itemsLoadedCallback = itemsLoadedCallback;\r\n\r\n readSeenArray();\r\n\t\tpages.forEach(item => {\r\n\t\t\tthis.pages.push(new SaleItem(item, seenArray));\r\n\t\t});\r\n writeSeenArray();\r\n\r\n this._scroll = this._$wrapper.zInfiniteScroll(\r\n {\r\n selector: '.sale-item',\r\n checkViewport: false,\r\n enabled: true,\r\n autoStart: false,\r\n maxAutoloadPages: 100,\r\n getCurrentCount: () => this.pages().length,\r\n totalCount: this._$wrapper.data('count'),\r\n countPerPage: this._$wrapper.data('count-per-page'),\r\n loading: '#pagesScrollLoader',\r\n fetch: (page, callback) => {\r\n $.get(\r\n this._$wrapper.data('load-url'),\r\n {\r\n page: page,\r\n type: this._$wrapper.data('blog-type'),\r\n category: $('.category-filter-item:checked')\r\n .map(function() {return $(this).data('slug'); }).get().join(','),\r\n blog_sort_by: $('#sortSelect').val(),\r\n blog_shop_filter: $('#shopSearch').val(),\r\n blog_date_filter: $('#filterSelect').val()\r\n },\r\n (response) => {\r\n if(response.archiveCount !== undefined) {\r\n $('#archiveButtonCounter').text(response.archiveCount);\r\n }\r\n callback(response.pages);\r\n },\r\n 'json'\r\n );\r\n },\r\n clear: () => {\r\n this.pages.removeAll();\r\n },\r\n show: (items) => {\r\n readSeenArray();\r\n\t items.forEach(item => {\r\n\t \tthis.pages.push(new SaleItem(item, seenArray));\r\n\t });\r\n writeSeenArray();\r\n return items.length;\r\n },\r\n finished: () => {\r\n $('#archiveButton').css('display','inline-block');\r\n }\r\n }\r\n );\r\n\r\n $(document).on('reloadSales', () => {\r\n $('#archiveButton').hide();\r\n this._scroll.reload();\r\n });\r\n }\r\n\r\n\t/**\r\n\t *\r\n\t * @param {Element} element\r\n\t * @param {SaleItem} data\r\n\t */\r\n\tafterRender = (element, data) => {\r\n if($.isFunction(this._itemsLoadedCallback)) {\r\n\t\t\tconst $item = $(element).filter('.sale-item');\r\n\t setTimeout(() => {\r\n\t\t this._itemsLoadedCallback($item[0]);\r\n\t });\r\n }\r\n };\r\n\r\n postInit() {\r\n this._scroll.on();\r\n }\r\n}\r\n\r\nclass SaleItem extends SaleModel {\r\n constructor(item, seenArray) {\r\n super(item);\r\n\r\n this.multicolumn = this.details_type == 'multicolumn';\r\n this.seen = (seenArray.indexOf(this.page_id) != -1);\r\n\r\n if(!this.seen) {\r\n seenArray.unshift(this.page_id);\r\n }\r\n\r\n if(this.discount_code) {\r\n this.discount_code = `Скидочный код: ${this.discount_code}`;\r\n }\r\n\r\n this.isPureImageBanner = this.isImageBanner && !this.details_content_columns.length;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./modules/blog/list/sale/index.js","module.exports = _;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"_\"\n// module id = X0GP\n// module chunks = 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 28","/**\r\n * This script adds some additional methods to window.location\r\n * buildQuery Helper method for constricting query strings\r\n * query location.query manipulator\r\n * hashQuery location.hash manipulator\r\n */\r\n\r\nconst location = window.location;\r\n\r\nexport function buildUrl(pathname, queryString) {\r\n\tif (!queryString) {\r\n\t\treturn pathname;\r\n\t}\r\n\tqueryString = '' + queryString;\r\n\tif (!queryString.startsWith('?')) {\r\n\t\tqueryString = '?' + queryString;\r\n\t}\r\n\treturn pathname + queryString;\r\n}\r\n\r\n/**\r\n * Builds query string from given object\r\n * @param {object} queryData\r\n * @param {boolean} [numeric_prefix]\r\n * @return {string}\r\n */\r\nexport function buildQuery(queryData, numeric_prefix) {\r\n\tlet value, key, tmp = [];\r\n\tconst arg_separator = \"&\";\r\n\r\n\tfor (key in queryData) {\r\n\t\tif (!queryData.hasOwnProperty(key)) {\r\n\t\t\tcontinue;\r\n\t\t}\r\n\t\tvalue = queryData[key];\r\n\t\tif (numeric_prefix && !isNaN(key)) {\r\n\t\t\tkey = String(numeric_prefix) + key;\r\n\t\t}\r\n\t\tconst query = http_build_query_helper(urlencode(key), value, arg_separator);\r\n\t\tif (query !== '') {\r\n\t\t\ttmp.push(query);\r\n\t\t}\r\n\t}\r\n\r\n\treturn tmp.join(arg_separator);\r\n}\r\n\r\n/**\r\n * Appends given query data to given URL\r\n * @param {string} url\r\n * @param {object} queryData\r\n * @return {string} New url\r\n */\r\nexport function addQuery(url, queryData) {\r\n\tconst q = buildQuery(queryData);\r\n\turl = '' + url;\r\n\tconst m = /^([^?#]*)(\\?[^#]+)?(#.+)?$/.exec(url);\r\n\tif (!m) {\r\n\t\treturn url + '?' + q;\r\n\t}\r\n\treturn (m[1] || '') + (m[2] ? m[2] + '&' + q : '?' + q) + (m[3] || '');\r\n}\r\n\r\n/**\r\n * Appends given query data to given query string\r\n * @param {string} queryString\r\n * @param {object} queryData\r\n * @return {string} New query string\r\n */\r\nexport function appendQuery(queryString, queryData) {\r\n\tconst q = buildQuery(queryData);\r\n\tif (!q) {\r\n\t\treturn queryString;\r\n\t}\r\n\tconst str = '' + queryString;\r\n\treturn str.length > 0 ? str + '&' + q : q;\r\n}\r\n\r\n/**\r\n * Manipulates location.search as an object.
\r\n * With no arguments - returns the whole location.search object.
\r\n * With only key argument - returns value for this key.
\r\n * With key and value arguments (or only key as object) - updates location.search with new value\r\n * @param [key] The key to set. Can be an object, so the value is not needed\r\n * @param [value] The value to set\r\n * @param [extend] TRUE to extend current location.search object, or FALSE to replace it. Default is TRUE\r\n * @returns {Object|String}\r\n */\r\nexport function query(key, value, extend) {\r\n\treturn processQuery('search', key, value, extend);\r\n}\r\n\r\n/**\r\n * Manipulates location.hash as an object.
\r\n * With no arguments - returns the whole location.hash object.
\r\n * With only key argument - returns value for this key.
\r\n * With key and value arguments (or only key as object) - updates location.hash with new value\r\n * @param [key] The key to set. Can be an object, so the value is not needed\r\n * @param [value] The value to set\r\n * @param [extend] TRUE to extend current location.hash object, or FALSE to replace it. Default is TRUE\r\n * @returns {Object|String}\r\n */\r\nexport function hashQuery(key, value, extend) {\r\n\treturn processQuery('hash', key, value, extend);\r\n}\r\n\r\nfunction processQuery(type, key, value, extend) {\r\n\tlet queryData = decodeQueryString(location[type].substring(1));\r\n\tif (key !== undefined) {\r\n\t\tconst isObj = typeof key === 'object';\r\n\r\n\t\tif (value === undefined && !isObj) {\r\n\t\t\t// return value\r\n\t\t\treturn queryData[key] === undefined ? null : queryData[key];\r\n\t\t} else if (!isObj) {\r\n\t\t\tif (extend === undefined) extend = true;\r\n\r\n\t\t\t// set value to key\r\n\t\t\tconst k = key.toString();\r\n\t\t\tkey = {};\r\n\t\t\tkey[k] = value;\r\n\t\t}\r\n\r\n\t\tif (extend) {\r\n\t\t\t$.extend(queryData, key);\r\n\t\t} else {\r\n\t\t\tqueryData = key;\r\n\t\t}\r\n\r\n\t\t// clear data\r\n\t\tconst newData = {};\r\n\t\t$.each(queryData, function (key, value) {\r\n\t\t\tif (value) newData[key] = value;\r\n\t\t});\r\n\t\tqueryData = newData;\r\n\r\n\t\tlocation[type] = buildQuery(queryData);\r\n\t}\r\n\treturn queryData;\r\n}\r\n\r\n/**\r\n * Decodes query string like 'a=one&b=two&c[]=three' and returns an object\r\n * @param string\r\n * @return {Object}\r\n */\r\nexport function decodeQueryString(string) {\r\n\tlet glue1 = '=',\r\n\t\tglue2 = '&',\r\n\t\tarray = {}, // holds result\r\n\t\tarray2 = String(string).replace(/^&?([\\s\\S]*?)&?$/, '$1').split(glue2),\r\n\t\ti, j, chr, tmp, key, value, bracket, keys, evalStr,\r\n\t\tfixStr = function (str) {\r\n\t\t\treturn decodeURIComponent(str).replace(/([\\\\\"'])/g, '\\\\$1').replace(/\\n/g, '\\\\n').replace(/\\r/g, '\\\\r').replace(/\\+/g, ' ');\r\n\t\t};\r\n\r\n\tfor (i = 0; i < array2.length; i++) {\r\n\t\ttmp = array2[i].split(glue1);\r\n\t\tif (tmp.length < 2) {\r\n\t\t\ttmp = [tmp, ''];\r\n\t\t}\r\n\t\tkey = fixStr(tmp[0]);\r\n\t\tvalue = fixStr(tmp[1]);\r\n\t\twhile (key.charAt(0) === ' ') {\r\n\t\t\tkey = key.substr(1);\r\n\t\t}\r\n\t\tif (key.indexOf('\\0') !== -1) {\r\n\t\t\tkey = key.substr(0, key.indexOf('\\0'));\r\n\t\t}\r\n\t\tif (key && key.charAt(0) !== '[') {\r\n\t\t\tkeys = [];\r\n\t\t\tbracket = 0;\r\n\t\t\tfor (j = 0; j < key.length; j++) {\r\n\t\t\t\tif (key.charAt(j) === '[' && !bracket) {\r\n\t\t\t\t\tbracket = j + 1;\r\n\t\t\t\t} else if (key.charAt(j) === ']') {\r\n\t\t\t\t\tif (bracket) {\r\n\t\t\t\t\t\tif (!keys.length) {\r\n\t\t\t\t\t\t\tkeys.push(key.substr(0, bracket - 1));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tkeys.push(key.substr(bracket, j - bracket));\r\n\t\t\t\t\t\tbracket = 0;\r\n\t\t\t\t\t\tif (key.charAt(j + 1) !== '[') {\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (!keys.length) {\r\n\t\t\t\tkeys = [key];\r\n\t\t\t}\r\n\t\t\tfor (j = 0; j < keys[0].length; j++) {\r\n\t\t\t\tchr = keys[0].charAt(j);\r\n\t\t\t\tif (chr === ' ' || chr === '.' || chr === '[') {\r\n\t\t\t\t\tkeys[0] = keys[0].substr(0, j) + '_' + keys[0].substr(j + 1);\r\n\t\t\t\t}\r\n\t\t\t\tif (chr === '[') {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tevalStr = 'array';\r\n\t\t\tfor (j = 0; j < keys.length; j++) {\r\n\t\t\t\tkey = keys[j];\r\n\t\t\t\tif ((key !== '' && key !== ' ') || j === 0) {\r\n\t\t\t\t\tkey = \"'\" + key + \"'\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\tkey = eval(evalStr + '.push([]);') - 1;\r\n\t\t\t\t}\r\n\t\t\t\tevalStr += '[' + key + ']';\r\n\t\t\t\tif (j !== keys.length - 1 && eval('typeof ' + evalStr) === 'undefined') {\r\n\t\t\t\t\teval(evalStr + ' = [];');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tevalStr += \" = '\" + value + \"';\\n\";\r\n\t\t\teval(evalStr);\r\n\t\t}\r\n\t}\r\n\r\n\treturn array;\r\n}\r\n\r\nfunction urlencode(str) {\r\n\tstr = (str + '').toString();\r\n\treturn encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\\(/g, '%28').replace(/\\)/g, '%29').replace(/\\*/g, '%2A').replace(/%20/g, '+');\r\n}\r\n\r\nfunction http_build_query_helper(key, val, arg_separator) {\r\n\tlet k, tmp = [];\r\n\tif (val === true) {\r\n\t\tval = \"1\";\r\n\t} else if (val === false) {\r\n\t\tval = \"0\";\r\n\t}\r\n\tif (val !== null && val !== undefined && val !== '') {\r\n\t\tif (typeof(val) === \"object\") {\r\n\t\t\tlet start = 0;\r\n\t\t\tfor (k in val) {\r\n\t\t\t\tif (!val.hasOwnProperty(k)) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (val[k] !== null) {\r\n\t\t\t\t\tlet sk, num = Number(k);\r\n\t\t\t\t\tif (!isNaN(num) && num - start === 0) {\r\n\t\t\t\t\t\tif (typeof(val[k]) === \"object\") {\r\n\t\t\t\t\t\t\tsk = num;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tsk = '';\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tstart++;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tsk = urlencode(k);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tconst part = http_build_query_helper(key + \"[\" + sk + \"]\", val[k], arg_separator);\r\n\t\t\t\t\tif (part) {\r\n\t\t\t\t\t\ttmp.push(part);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn tmp.join(arg_separator);\r\n\t\t} else if (typeof(val) !== \"function\") {\r\n\t\t\treturn key + \"=\" + urlencode(val);\r\n\t\t} else {\r\n\t\t\tthrow new Error('There was an error processing for http_build_query().');\r\n\t\t}\r\n\t} else {\r\n\t\treturn '';\r\n\t}\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./core/utils/location.js","import * as sidebar from \"../../sidebar/index\";\n\nexport function init() {\n\tconst $list = $('#articlesList');\n itemSizeSpot();\n\tsidebar.init({\n\t\theightTarget: $list\n\t});\n\n\t$list.zInfiniteScroll({\n\t\tselector: '[rel=page]',\n\t\tloading: '#pagesScrollLoader',\n\t\tmaxAutoloadPages: 200,\n\t\ttotalCount: $list.data('totalCount'),\n\t\tfetch: (page, callback) => {\n\t\t\tconst data = {\n\t\t\t\tpage: page,\n\t\t\t\ttype: $list.data('blogType'),\n\t\t\t\tcategory: $list.data('blogCategory'),\n\t\t\t};\n\t\t\t$.get($list.data('loadUrl'), data, null, 'json')\n\t\t\t\t.done(response => {\n\t\t\t\t\tconst $blocks = $(response['html']).filter('[rel=page]');\n\t\t\t\t\tcallback($blocks);\n\t\t\t\t});\n\t\t}\n\t});\n\n $(window).resize(function(){\n itemSizeSpot();\n });\n}\n\nfunction itemSizeSpot(){\n\tlet $items = $('.articles-list').find('.post');\n let width = $items.find('.content').innerWidth();\n\n if( width > 254){\n $items.attr('size', 'large');\n }\n\n if( width <= 254 && width >= 240){\n $items.attr('size', 'medium');\n }\n\n if( width >= 208 && width < 240){\n $items.attr('size', 'small');\n }\n if( width < 208){\n $items.attr('size', 'extra-small');\n }\n}\n\n\n// WEBPACK FOOTER //\n// ./modules/blog/list/article/index.js","/**\n * @return {boolean} TRUE if current window is an iframe window\n */\nexport function checkIsIframe() {\n\treturn window !== window.top;\n}\n\nconst _isMobile = ('orientation' in window) || (navigator.userAgent.indexOf('IEMobile') !== -1);\nconst _isTouchScreen = ('ontouchstart' in window || navigator.msMaxTouchPoints);\n\nexport function isMobile() {\n\treturn _isMobile;\n}\n\nexport function isTouchScreen() {\n\treturn _isTouchScreen;\n}\n\nexport const WEBP_FEATURES = {\n\tLOSSY: 'lossy',\n\tLOSSLESS: 'lossless',\n\tALPHA: 'alpha',\n\tANIMATION: 'animation'\n};\n\nexport function isWebpFeatureSupported(feature) {\n\treturn new Promise((resolve, reject) => {\n\t\tif (!Object.values(WEBP_FEATURES).includes(feature)) {\n\t\t\treject('Invalid feature name');\n\t\t\treturn;\n\t\t}\n\n\t\tconst kTestImages = {\n\t\t\tlossy: \"UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA\",\n\t\t\tlossless: \"UklGRhoAAABXRUJQVlA4TA0AAAAvAAAAEAcQERGIiP4HAA==\",\n\t\t\talpha: \"UklGRkoAAABXRUJQVlA4WAoAAAAQAAAAAAAAAAAAQUxQSAwAAAARBxAR/Q9ERP8DAABWUDggGAAAABQBAJ0BKgEAAQAAAP4AAA3AAP7mtQAAAA==\",\n\t\t\tanimation: \"UklGRlIAAABXRUJQVlA4WAoAAAASAAAAAAAAAAAAQU5JTQYAAAD/////AABBTk1GJgAAAAAAAAAAAAAAAAAAAGQAAABWUDhMDQAAAC8AAAAQBxAREYiI/gcA\"\n\t\t};\n\t\tconst img = new Image();\n\t\timg.onload = () => {\n\t\t\tconst result = (img.width > 0) && (img.height > 0);\n\t\t\tresolve(result);\n\t\t};\n\t\timg.onerror = function () {\n\t\t\tresolve(false);\n\t\t};\n\t\timg.src = \"data:image/webp;base64,\" + kTestImages[feature];\n\t});\n}\n\n/*export class MobileDetect {\n\tstatic Android = navigator.userAgent.match(/Android/i);\n\tstatic BlackBerry = navigator.userAgent.match(/BlackBerry/i);\n\tstatic iOS = navigator.userAgent.match(/iPhone|iPad|iPod/i);\n\tstatic Opera = navigator.userAgent.match(/Opera Mini/i);\n\tstatic Windows = navigator.userAgent.match(/IEMobile/i);\n\tstatic Any = MobileDetect.Android || MobileDetect.BlackBerry || MobileDetect.iOS || MobileDetect.Opera || MobileDetect.Windows;\n}*/\n\n\n\n// WEBPACK FOOTER //\n// ./core/utils/utils.js","export class SaleModel {\n constructor(item) {\n for(let property in item) {\n if(property == 'my_like') {\n this[property] = ko.observable(item[property]);\n } else {\n this[property] = item[property];\n }\n }\n\n this.active = this.status == 'Активна';\n this.totalLikes = ko.observable(parseInt(this.likes_initial) + parseInt(this.likes));\n this.isTextBanner = this.banner_type == 'text';\n this.isImageBanner = this.banner_type == 'image';\n }\n\n saveLike(model, event, userId = null) {\n if (USER_ID || userId) {\n $.post(\n base_url + 'blog/likes_save',\n {id: this.page_id},\n (response) => {\n if (response.success) {\n if (response.action == 'up') {\n this.my_like(true);\n } else {\n this.my_like(false);\n }\n\n this.totalLikes(response.likes);\n }\n },\n 'json'\n );\n }\n else {\n zde.showLogin((data) => {\n if(data) {\n this.saveLike(model, event, data.id);\n return;\n }\n });\n }\n }\n}\n\n\n// WEBPACK FOOTER //\n// ./modules/blog/common/model/salemodel.js","import './popup.less';\nimport {openHtmlDialog} from \"./dialog\";\n\n/**\n * The same as {@link openHtmlDialog()} but with name='popup' enabled\n * @param {*} content HTML content\n * @param {object} options ZDialog options\n * @return {ZDialog} Dialog instance\n */\nexport function openPopup(content, options = null) {\n\treturn openHtmlDialog(content, {name: 'popup', ...options});\n}\n\n\n\n// WEBPACK FOOTER //\n// ./core/widgets/popup.js","import _ from \"lib/underscore\";\n\n/**\n * Is a given variable defined and has value?\n * @param {*} val\n * @return {boolean} false if given value is undefined or null, otherwise true\n */\nexport function isset(val) {\n\treturn !_.isUndefined(val) && !_.isNull(val);\n}\n\n/**\n * Returns object's property or array's index if exists and default value otherwise\n * @param {object|array} object Inspected object or array\n * @param {string|number} key Property name for objects, numeric index for arrays\n * @param {*} defaultValue\n * @return {*}\n */\nexport function element(object, key, defaultValue = null) {\n\treturn _.has(object, key) ? object[key] : defaultValue;\n}\n\n/**\n * Returns object's property or array's index if exists and is not null or default value otherwise\n * @param {object|array} object Inspected object or array\n * @param {string|number} key Property name for objects, numeric index for arrays\n * @param {*} defaultValue\n * @return {*}\n */\nexport function elementOrDefault(object, key, defaultValue = null) {\n\treturn _.has(object, key) && object[key] !== null ? object[key] : defaultValue;\n}\n\n/**\n * Returns object's property or array's index if exists and is not null or \"—\" value otherwise\n * @param {object|array} object Inspected object or array\n * @param {string|number} key Property name for objects, numeric index for arrays\n * @param {*} defaultValue\n * @return {*}\n */\nexport function elementOrDash(object, key) {\n\treturn elementOrDefault(object, key, '—');\n}\n\n/**\n * Returns value if it's not undefined or null, otherwise defaultValue\n * @param {*} value\n * @param {*} defaultValue\n * @return {*}\n */\nexport function orDefault(value, defaultValue = null) {\n\treturn isset(value) ? value : defaultValue;\n}\n\n/**\n * Converts given value to number using standard javascript converter: +value\n * @param {*} value Input value\n * @param {number} defaultValue\n * @return {number} Either converted value if it's not NaN and default value otherwise\n */\nexport function asNumber(value, defaultValue = 0) {\n\tvalue = +value;\n\treturn !isNaN(value) ? value : 0;\n}\n\n/**\n * Converts given value to boolean using such algo:\n * - string \"0\" results in false;\n * - string \"false\" results in false;\n * - string \"null\" results in false;\n * - empty object results in false;\n * - empty array results in false;\n * - other values go through standard javascript converter: !!value\n * @param {*} value Input value\n * @return {boolean} Converted value\n */\nexport function asBoolean(value) {\n\tif (_.isBoolean(value)) return value;\n\tif (value === '0') return false;\n\tif (value === 'false') return false;\n\tif (value === 'null') return false;\n\tif (_.isObject(value) && _.isEmpty(value)) return false;\n\tif (_.isArray(value) && _.isEmpty(value)) return false;\n\treturn !!value;\n}\n\n/**\n * Converts given value to string using standard javascript converter: ''+value\n * except that null and undefined values will be converted to empty string.\n * @param {*} value Input value\n * @return {string} Converted value\n */\nexport function asString(value) {\n\tif (value === null || _.isUndefined(value)) return '';\n\treturn '' + value;\n}\n\n/**\n * Converts given value to string using {@link asString()} and trims whitespace characters.\n * @param {string|*} value\n * @return {string} Converted and trimmed value\n */\nexport function trim(value) {\n\treturn asString(value).trim();\n}\n\n/**\n * If input value is an array - it will be returned as is.\n * In other cases input value will be converted to string and either split with given delimiter\n * or just returned as a single array element.\n * @param {array|string} value\n * @param {string} delimiter\n * @return {array}\n */\nexport function asArray(value, delimiter = '') {\n\tif (!value) return [];\n\tif (_.isArray(value)) return value;\n\tvalue = asString(value);\n\treturn delimiter ? value.split(delimiter) : [value];\n}\n\n\n// WEBPACK FOOTER //\n// ./core/utils/var.js","require(\"!!C:\\\\Vadim\\\\Projects\\\\Php\\\\zakupki\\\\node_modules\\\\script-loader\\\\addScript.js\")(require(\"!!C:\\\\Vadim\\\\Projects\\\\Php\\\\zakupki\\\\node_modules\\\\raw-loader\\\\index.js!C:\\\\Vadim\\\\Projects\\\\Php\\\\zakupki\\\\assets\\\\vendor\\\\urlconverter\\\\jquery.urlconverter.js\"))\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../vendor/urlconverter/jquery.urlconverter.js\n// module id = dydC\n// module chunks = 7 12","function E () {\n // Keep this empty so it's easier to inherit from\n // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n on: function (name, callback, ctx) {\n var e = this.e || (this.e = {});\n\n (e[name] || (e[name] = [])).push({\n fn: callback,\n ctx: ctx\n });\n\n return this;\n },\n\n once: function (name, callback, ctx) {\n var self = this;\n function listener () {\n self.off(name, listener);\n callback.apply(ctx, arguments);\n };\n\n listener._ = callback\n return this.on(name, listener, ctx);\n },\n\n emit: function (name) {\n var data = [].slice.call(arguments, 1);\n var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n var i = 0;\n var len = evtArr.length;\n\n for (i; i < len; i++) {\n evtArr[i].fn.apply(evtArr[i].ctx, data);\n }\n\n return this;\n },\n\n off: function (name, callback) {\n var e = this.e || (this.e = {});\n var evts = e[name];\n var liveEvents = [];\n\n if (evts && callback) {\n for (var i = 0, len = evts.length; i < len; i++) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n liveEvents.push(evts[i]);\n }\n }\n\n // Remove event from queue to prevent memory leak\n // Suggested by https://github.com/lazd\n // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n (liveEvents.length)\n ? e[name] = liveEvents\n : delete e[name];\n\n return this;\n }\n};\n\nmodule.exports = E;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/Vadim/Projects/Php/zakupki/node_modules/tiny-emitter/index.js\n// module id = e2Zi\n// module chunks = 7","import './dialog.less'\nimport _ from \"lib/underscore\";\nimport ko from \"lib/knockout\";\nimport {newLogger} from \"../utils/logger\";\nimport {checkIsIframe, isMobile} from \"../utils/utils\";\nimport {asString} from \"../utils/var\";\n\nconst logger = newLogger('ZDialog');\n\n/**\n * Creates new dialog with IFrame with given url\n * @param {string} url IFrame url\n * @param {object} options ZDialog Options. See {@link ZDialog.defaults}\n * @return {ZDialog}\n */\nexport function createIframeDialog(url, options = null) {\n\treturn newDialog({content: url, type: 'iframe', __width: 800, ...options});\n}\n\n/**\n * Creates new dialog instance.\n * autoOpen option is false by default, so you should either call open() method\n * or override autoOpen option\n * @param {*} content HTML content. Can be either valid HTML string, or DOM node, or jQuery object\n * @param {object} options ZDialog Options. See {@link ZDialog.defaults}\n * @return {ZDialog} Dialog instance\n */\nexport function createHtmlDialog(content, options = null) {\n\treturn newDialog({content, type: 'html', showCloseButton: true, ...options});\n}\n\n/**\n * The same as {@link createHtmlDialog()} but with autoOpen enabled\n * @param {*} content HTML content\n * @param {object} options ZDialog options\n * @return {ZDialog} Dialog instance\n */\nexport function openHtmlDialog(content, options = null) {\n\treturn createHtmlDialog(content, {autoOpen: true, ...options});\n}\n\n/**\n * Creates new dialog as new window with given url\n * @param {string} url IFrame url\n * @param {object} options ZDialog Options. See {@link ZDialog.defaults}\n * @return {ZDialog}\n */\nexport function createWindowDialog(url, options = null) {\n\treturn newDialog({content: url, type: 'window', ...options});\n}\n\n// add some helper functions to jQuery\n$.extend($.fn, {\n\t/**\n\t * Calls {@link openHtmlDialog()} with source element as content\n\t * @param {object} options ZDialog Options. See {@link ZDialog.defaults}\n\t */\n\tzdialog: function (options = null) {\n\t\tconst $el = $(this);\n\t\tconst $placeholder = $('
').insertAfter($el);\n\t\tconst isInDom = $el.closest(document.documentElement);\n\t\tconst isVisible = $el.css('display') != 'none';\n\t\tif (isInDom) {\n\t\t\t$el.detach();\n\t\t}\n\t\tif (!isVisible) {\n\t\t\t$el.show();\n\t\t}\n\t\tconst dialog = createHtmlDialog($el, options);\n\t\tdialog.onBeforeClose(() => {\n\t\t\t$el.detach();\n\t\t});\n\t\tdialog.onClose(() => {\n\t\t\tif (isInDom) {\n\t\t\t\t$el.insertAfter($placeholder);\n\t\t\t}\n\t\t\tif (!isVisible) {\n\t\t\t\t$el.hide();\n\t\t\t}\n\t\t\t$placeholder.remove();\n\t\t});\n\t\tdialog.open();\n\t\t$el.data('zdialogInstance', dialog);\n\t\treturn this;\n\t},\n\n\t/**\n\t * Returns ZDialog instance for given element (if the dialog was created with {@link jQuery.fn.zdialog} function)\n\t * @return {ZDialog}\n\t */\n\tzdialogInstance: function () {\n\t\treturn this.data('zdialogInstance');\n\t}\n});\n\n// FOR TESTING\n/*import {MODAL_ASK_REDIRECT, MODAL_CRITICAL_NEWS, MODAL_LOGIN, MODAL_PACKAGE_INFO, MODAL_REVIEW} from \"../modals\";\n$('.logo').click(function(e) {\n\te.preventDefault();\n\tconst queue = [];\n\tconst showNext = () => {\n\t\tif (queue.length > 0) {\n\t\t\tqueue.shift()();\n\t\t}\n\t};\n\tconst onOpen = () => {};\n\t// queue.push(() => MODAL_REVIEW.show(104625).onOpen(showNext));\n\t// queue.push(() => MODAL_LOGIN.show().onOpen(showNext));\n\t// queue.push(() => MODAL_PACKAGE_INFO.show(1803110691).onOpen(showNext));\n\t// queue.push(() => MODAL_ASK_REDIRECT.show().onOpen(showNext));\n\t// queue.push(() => MODAL_CRITICAL_NEWS.show(312).onOpen(showNext));\n\tqueue.push(() => openHtmlDialog('
').onOpen(onOpen));\n\tqueue.push(() => openHtmlDialog('
').onOpen(onOpen));\n\tqueue.push(() => openHtmlDialog('
').onOpen(onOpen));\n\tqueue.push(() => openHtmlDialog('
', {fullscreen: true}).onOpen(onOpen));\n\tqueue.push(() => openHtmlDialog('
', {fullscreen: true}).onOpen(onOpen));\n\tshowNext();\n\n\t$(document).on('click', '.zdialog-html > div', showNext);\n});*/\n\n/**\n * @param {object} options\n * @return {ZDialog}\n */\nlet newDialog = function (options) {\n\treturn new ZDialog(options);\n};\n\n// force use newDialog function from top window\nconst key = '__zdialog_newDialog';\nif (checkIsIframe()) {\n\tnewDialog = window.top[key];\n} else {\n\twindow.top[key] = newDialog;\n}\n\n/**\n * Dialog class\n */\nclass ZDialog {\n\tstatic defaults = {\n\t\tname: '',\n\t\ttype: 'iframe', // iframe, html\n\t\tcontent: '',\n\t\ttitle: '',\n\t\tbuttons: [],\n\t\tmodal: false,\n\t\tautoOpen: false,\n\t\tshowCloseButton: false,\n\n\t\twidth: '',\n\t\theight: '',\n\t\tfullscreen: false,\n\t\tcssClass: '',\n\n\t\tcustom: null,\n\n\t\t//events\n\t\tonOpen: null,\n\t\tonClose: null\n\t};\n\n\t// options\n\t_width = ko.observable();\n\t_height = ko.observable();\n\t_isModal = ko.observable(false);\n\t_isCloseBtnVisible = ko.observable(false);\n\n\t_$el;\n\t_$iframe;\n\t_wnd;\n\t_isLoading = ko.observable(false);\n\t_isOpened = ko.observable(false);\n\t_isClosed = ko.observable(false);\n\t_isHidden = ko.observable(false);\n\t_contentHeight = ko.observable(0);\n\t_iframeHeight = ko.observable(0);\n\t/** @type {HeightWatcher} */\n\t_heightWatcher;\n\t_opened = false;\n\t/** @type {JQuery.Callbacks} */\n\t_onOpen = $.Callbacks();\n\t/** @type {JQuery.Callbacks} */\n\t_onClose = $.Callbacks();\n\t/** @type {JQuery.Callbacks} */\n\t_onBeforeClose = $.Callbacks();\n\t_result = null;\n\n\tconstructor(options) {\n\t\tconst o = {\n\t\t\t...ZDialog.defaults,\n\t\t\t...options\n\t\t};\n\n\t\tthis._name = o.name;\n\t\tthis._o = o;\n\t\tthis._isModal(!!o.modal);\n\t\tthis._isCloseBtnVisible(!!o.showCloseButton);\n\t\tthis._width(o.width);\n\t\tthis._height(o.height);\n\n\t\tif (o.onOpen) {\n\t\t\tthis._onOpen.add(o.onOpen);\n\t\t}\n\t\tif (o.onClose) {\n\t\t\tthis._onClose.add(o.onClose);\n\t\t}\n\n\t\tif (o.autoOpen) {\n\t\t\tthis.open();\n\t\t}\n\t}\n\n\topen() {\n\t\tif (this.isOpened) {\n\t\t\treturn;\n\t\t}\n\t\tthis._isClosed(false);\n\t\tthis._isHidden(false);\n\t\tthis._result = null;\n\t\tif (this.type === 'window') {\n\t\t\tthis._wnd = window.open(this.content);\n\t\t\tthis._wnd.addEventListener('DOMContentLoaded', () => this._handleWindowReady());\n\t\t\tthis._wnd.onbeforeunload = () => {\n\t\t\t\tif (!this.isClosed) {\n\t\t\t\t\tthis.close();\n\t\t\t\t}\n\t\t\t};\n\t\t\tthis._isLoading(true);\n\t\t} else if (!dialogManager.isRegistered(this)) {\n\t\t\tif (this.isFullScreen) {\n\t\t\t\tthis._width('');\n\t\t\t\tthis._height('');\n\t\t\t\tthis._contentHeight('');\n\t\t\t\tthis._iframeHeight('');\n\t\t\t}\n\t\t\tif (this.type === 'iframe') {\n\t\t\t\tthis._isLoading(true);\n\t\t\t\tif (!this.isAutoHeight) {\n\t\t\t\t\tthis._contentHeight(this.height);\n\t\t\t\t\tthis._iframeHeight(this.height);\n\t\t\t\t} else {\n\t\t\t\t\tthis._contentHeight('');\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis._contentHeight(this.height);\n\t\t\t\tthis._isOpened(true);\n\t\t\t\tsetTimeout(() => this._onOpen.fireWith(this), 0);\n\t\t\t}\n\t\t\tdialogManager.register(this);\n\t\t} else if (this._isHidden()) {\n\t\t\tdialogManager.show(this);\n\t\t}\n\t}\n\n\tclose() {\n\t\tif (this.isClosed) {\n\t\t\treturn;\n\t\t}\n\t\tthis._onBeforeClose.fireWith(this, [this._result]);\n\t\tthis._isOpened(false);\n\t\tthis._isHidden(false);\n\t\tthis._isClosed(true);\n\t\tif (this.type === 'window') {\n\t\t\tif (this._wnd) {\n\t\t\t\tthis._wnd.close();\n\t\t\t\twindow.top.focus();\n\t\t\t\tthis._wnd = null;\n\t\t\t\tsetTimeout(() => this._onClose.fireWith(this, [this._result]), 0);\n\t\t\t}\n\t\t} else if (dialogManager.isRegistered(this)) {\n\t\t\tif (this._heightWatcher) {\n\t\t\t\tthis._heightWatcher.off();\n\t\t\t}\n\t\t\tdialogManager.unregister(this);\n\t\t\tsetTimeout(() => this._onClose.fireWith(this, [this._result]), 0);\n\t\t}\n\t}\n\n\thide() {\n\t\tif (this.type === 'window') {\n\t\t\tlogger.error('Method is not supported for current dialog type');\n\t\t} else if (dialogManager.isRegistered(this)) {\n\t\t\tthis._isOpened(false);\n\t\t\tthis._isHidden(true);\n\t\t\tdialogManager.hide(this);\n\t\t}\n\t}\n\n\tcloseWithResult(result) {\n\t\tthis.result = result;\n\t\tthis.close();\n\t}\n\n\tupdatePosition() {\n\t\tif (this.type === 'iframe') {\n\t\t\tthis._contentHeight(this.iframeHeight);\n\t\t}\n\t}\n\n\t/** @return {string} */\n\tget name() {\n\t\treturn this._name;\n\t}\n\n\t/** @return {string} */\n\tget type() {\n\t\treturn this._o.type;\n\t}\n\n\t/** @return {string} */\n\tget content() {\n\t\treturn this._o.content;\n\t}\n\n\t/** @return {string} */\n\tget title() {\n\t\treturn this._o.title;\n\t}\n\n\t/** @return {number} */\n\tget width() {\n\t\treturn this._width();\n\t}\n\n\t/** @return {number|string} */\n\tget height() {\n\t\treturn this._height();\n\t}\n\n\t/** @return {number|string} */\n\tget minWidth() {\n\t\treturn this._o.minWidth;\n\t}\n\n\t/** @return {number|string} */\n\tget maxWidth() {\n\t\treturn this._o.maxWidth;\n\t}\n\n\t/** @return {number|string} */\n\tget contentWidth() {\n\t\treturn this._width();\n\t}\n\n\t/** @return {number|string} */\n\tget contentHeight() {\n\t\treturn this._contentHeight();\n\t}\n\n\t/** @return {number} */\n\tget iframeHeight() {\n\t\treturn this._iframeHeight();\n\t}\n\n\t/** @return {boolean} */\n\tget isLoading() {\n\t\treturn this._isLoading();\n\t}\n\n\t/** @return {boolean} */\n\tget isOpened() {\n\t\treturn this._isOpened();\n\t}\n\n\t/** @return {boolean} */\n\tget isClosed() {\n\t\treturn this._isClosed();\n\t}\n\n\t/** @return {boolean} */\n\tget isHidden() {\n\t\treturn this._isHidden();\n\t}\n\n\t/** @return {boolean} */\n\tget isModal() {\n\t\treturn this._isModal();\n\t}\n\n\t/** @return {boolean} */\n\tget isCloseBtnVisible() {\n\t\treturn this._isCloseBtnVisible();\n\t}\n\n\t/** @type {boolean} */\n\tget isFullScreen() {\n\t\treturn this._o.fullscreen;\n\t}\n\n\t/** @type {boolean} */\n\tget isAutoHeight() {\n\t\treturn asString(this.height) === '' || this.height === 'auto';\n\t}\n\n\t/** @return {*} */\n\tget result() {\n\t\treturn this._result;\n\t}\n\n\t/**\n\t * @param {*} value\n\t */\n\tset result(value) {\n\t\tthis._result = value;\n\t}\n\n\t/**\n\t * @return {*}\n\t */\n\tget customData() {\n\t\treturn this._o.custom;\n\t}\n\n\t/**\n\t * @return {string}\n\t */\n\tget cssClass() {\n\t\treturn asString(this._o.cssClass);\n\t}\n\n\thandleIframeLoad(item, e) {\n\t\tlogger.log('loaded', e);\n\t\tthis._isLoading(false);\n\n\t\tif (!this.isFullScreen && this.isAutoHeight) {\n\t\t\tthis._heightWatcher = new HeightWatcher(e.target, (newHeight) => {\n\t\t\t\tlogger.log(`new height = ${newHeight}`);\n\t\t\t\tthis._iframeHeight(newHeight);\n\t\t\t\tif (!this.contentHeight) {\n\t\t\t\t\tthis._contentHeight(newHeight);\n\t\t\t\t}\n\t\t\t\tthis._isOpened(true);\n\t\t\t\tsetTimeout(() => this._onOpen.fireWith(this), 0);\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tthis._isOpened(true);\n\t\t\tsetTimeout(() => this._onOpen.fireWith(this), 0);\n\t\t}\n\n\t\t// inject this instance to iframe\n\t\te.target.contentWindow.dialogInstance = this;\n\n\t\t// apply special classes\n\t\t$(e.target.contentWindow.document.body)\n\t\t\t.toggleClass('zdialog-layout-modal', this.isModal)\n\t\t\t.toggleClass('zdialog-layout-autoheight', this.isAutoHeight)\n\t\t\t.toggleClass('zdialog-layout-fullscreen', this.isFullScreen);\n\n\t\t// triger event inside iframe\n e.target.contentWindow.$(e.target.contentWindow.document).trigger('zdialog-shown');\n\t}\n\n\t_handleWindowReady(e) {\n\t\tlogger.log('loaded', e);\n\t\tthis._isLoading(false);\n\t\tthis._isOpened(true);\n\n\t\t// inject this instance to iframe\n\t\tthis._wnd.dialogInstance = this;\n\t\t$(this._wnd.document.body).addClass('zdialog-layout-window');\n\n\t\tsetTimeout(() => this._onOpen.fireWith(this), 0);\n\t}\n\n\thandleCloseClick(item, e) {\n\t\tconst $target = $(e.target);\n\t\tif ($target.is('[data-dialog-result]')) {\n\t\t\tthis.result = $target.data('dialogResult');\n\t\t}\n\t\tthis.close();\n\t}\n\n\thandleBackdropClick() {\n\t\tif (dialogManager.isTopmost(this) && !this.isModal) {\n\t\t\tthis.close();\n\t\t}\n\t}\n\n\tonOpen(callback) {\n\t\tthis._onOpen.add(callback);\n\t}\n\n\toffOpen(callback) {\n\t\tthis._onOpen.remove(callback);\n\t}\n\n\tonClose(callback) {\n\t\tthis._onClose.add(callback);\n\t}\n\n\toffClose(callback) {\n\t\tthis._onClose.remove(callback);\n\t}\n\n\tonBeforeClose(callback) {\n\t\tthis._onBeforeClose.add(callback);\n\t}\n\n\toffBeforeClose(callback) {\n\t\tthis._onBeforeClose.remove(callback);\n\t}\n}\n\nclass DialogManager {\n\t_counter = 0;\n\t/** @type {KnockoutObservableArray} */\n\t_dialogs = ko.observableArray([]);\n\t_$el;\n\t_isClosing = ko.observable(false);\n\t_initialized = false;\n\t_timeout;\n\n\t_wrapper = new WindowWrapper();\n\n\tconstructor() {\n\t\tthis._$html = $('html');\n\t\tthis._$body = $('body');\n\n\t\tthis._isLoading = ko.pureComputed(() => {\n\t\t return _.any(this.dialogs, d => d.isLoading);\n\t\t});\n\n\t\tthis._visibleDialogs = ko.pureComputed(() => {\n\t\t return this.dialogs.filter(d => !d.isHidden);\n\t\t});\n\t}\n\n\t/**\n\t * @param {ZDialog} dialog\n\t */\n\tregister(dialog) {\n\t\tif (this.isRegistered(dialog)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._dialogs.push(dialog);\n\t\tthis._checkMarkupAfterOpen();\n\t}\n\n\t/**\n\t * @param {ZDialog} dialog\n\t */\n\tunregister(dialog) {\n\t\tif (this._dialogs.remove(dialog).length === 0) {\n\t\t\t// nothing has been removed\n\t\t\treturn;\n\t\t}\n\t\tthis._checkMarkupAfterClose();\n\t}\n\n\t/**\n\t * @param {ZDialog} dialog\n\t */\n\thide(dialog) {\n\t\tif (this.isRegistered(dialog)) {\n\t\t\tthis._checkMarkupAfterClose();\n\t\t}\n\t}\n\n\t/**\n\t * @param {ZDialog} dialog\n\t */\n\tshow(dialog) {\n\t\tif (this.isRegistered(dialog)) {\n\t\t\tthis._checkMarkupAfterOpen();\n\t\t}\n\t}\n\n\t_checkMarkupAfterOpen() {\n\t\tif (this._isClosing()) {\n\t\t\tclearTimeout(this._timeout);\n\t\t\tthis._timeout = null;\n\t\t\tthis._isClosing(false);\n\t\t} else if (this.visibleDialogs.length === 1 && !this._initialized) {\n\t\t\tthis._wrapper.on();\n\n\t\t\tif (!this._$el) {\n\t\t\t\tthis._$el = $(`
`);\n\t\t\t\tko.applyBindings(this, this._$el[0]);\n\t\t\t\tthis._$el.appendTo('body');\n\t\t\t} else {\n\t\t\t\tthis._$el.show();\n\t\t\t}\n\t\t\tthis._initialized = true;\n\t\t}\n\t}\n\n\t_checkMarkupAfterClose() {\n\t\tif (!this._isClosing() && this.visibleDialogs.length === 0 && this._initialized) {\n\t\t\t// no dialogs left\n\t\t\tthis._isClosing(true);\n\t\t\tthis._timeout = setTimeout(() => {\n\t\t\t\tthis._wrapper.off();\n\t\t\t\t// logger.log('remove container');\n\t\t\t\tthis._$el.remove();\n\t\t\t\tko.cleanNode(this._$el[0]);\n this._$el = null;\n\t\t\t\tthis._initialized = false;\n\t\t\t\tthis._isClosing(false);\n\t\t\t}, 300);\n\t\t}\n\t}\n\n\t/**\n\t * @param {ZDialog} dialog\n\t * @return {boolean}\n\t */\n\tisRegistered(dialog) {\n\t\treturn _.contains(this.dialogs, dialog);\n\t}\n\n\thandleBeforeRemove(node) {\n\t\tconst $node = $(node);\n\t\t$node.remove();\n\t\t/*if (node.nodeType === 3) {\n\t\t\t$node.remove();\n\t\t\treturn;\n\t\t}\n\t\t$node.addClass('zdialog-closing');\n\t\tsetTimeout(() => $node.remove(), 300);*/\n\t}\n\n\t/** @return {ZDialog[]} */\n\tget dialogs() {\n\t\treturn this._dialogs();\n\t}\n\n\t/** @return {ZDialog[]} */\n\tget visibleDialogs() {\n\t\treturn this._visibleDialogs();\n\t}\n\n\t/** @return {boolean} */\n\tget isLoading() {\n\t\treturn this._isLoading();\n\t}\n\n\t/** @return {boolean} */\n\tget isClosing() {\n\t\treturn this._isClosing();\n\t}\n\n\tgetTopmostDialog() {\n\t\treturn _.last(this.visibleDialogs.filter(d => !d.isLoading));\n\t}\n\n\tisTopmost(dialog) {\n\t\treturn dialog === this.getTopmostDialog();\n\t}\n\n\t/**\n\t * @param {ZDialog} dialog\n\t */\n\tgetDialogClass(dialog) {\n\t\tconst css = [];\n\t\tif (dialog.isModal) {\n\t\t\tcss.push('zdialog-modal');\n\t\t}\n\t\tif (dialog.isFullScreen) {\n\t\t\tcss.push('zdialog-fullscreen');\n\t\t}\n\t\tif (this.isTopmost(dialog)) {\n\t\t\tcss.push('zdialog-topmost');\n\t\t} else if (this.visibleDialogs.length > 1) {\n\t\t\tcss.push('zdialog-overlapped');\n\t\t}\n\t\tif (dialog.isLoading) {\n\t\t\tcss.push('zdialog-loading');\n\t\t}\n\t\tif (dialog.isOpened) {\n\t\t\tcss.push('zdialog-opened');\n\t\t}\n\t\tif (dialog.isHidden) {\n\t\t\tcss.push('zdialog-hidden');\n\t\t}\n\t\tif (dialog.name) {\n\t\t\tcss.push('zdialog-instance-' + dialog.name);\n\t\t}\n\t\tif (dialog.cssClass) {\n\t\t\tcss.push(dialog.cssClass);\n\t\t}\n\t\treturn css.join(' ');\n\t}\n}\n\nclass HeightWatcher {\n\t_currHeight = 0;\n\t_event = $.Callbacks();\n\n\tconstructor($iframe, callback) {\n\t\tthis._event.add(callback);\n\t\tthis._ibody = $($iframe)[0].contentWindow.document.body;\n // this.updateHeight();\n\t\tsetTimeout(() => {\n\t\t\tthis.updateHeight();\n\t\t\tthis._interval = setInterval(() => this.updateHeight(), 50);\n\t\t}, 0);\n\t}\n\n\tupdateHeight() {\n\t\t// const newHeight = this._ibody.offsetHeight;\n\t\tconst newHeight = this.getHeight();\n\t\tif (newHeight !== this._currHeight) {\n\t\t\tthis._currHeight = newHeight;\n\t\t\tthis._event.fire(newHeight);\n\t\t}\n\t}\n\n\tgetHeight() {\n\t\tlet height = this._ibody.scrollHeight;\n\t\t$(this._ibody).find('iframe:visible').filter(function () {\n\t\t\treturn $(this).css('visibility') !== 'hidden';\n\t\t}).each(function() {\n\t\t\tlet iHeight = $(this).height();\n\t\t\tif (iHeight > height) {\n\t\t\t\theight = iHeight;\n\t\t\t}\n\t\t});\n\t\treturn height;\n\t}\n\n\toff() {\n\t\tclearInterval(this._interval);\n\t\tthis._event.empty();\n\t}\n}\n\nclass WindowWrapper {\n\t_$wnd = $(window);\n\t_$html = $('html');\n\t_$head = $('head');\n\t_scrollTop = 0;\n\t_scrollLeft = 0;\n\n\tconstructor() {\n\t\tthis._$scrollBarStyle = $(``).appendTo(this._$head);\n\t\tthis._$positionStyle = $(``).appendTo(this._$head);\n\t\t// this._useFixedLayout = /(iPod|iPhone|iPad)/.test(navigator.userAgent);\n\t\tthis._useFixedLayout = isMobile();///(iPod|iPhone|iPad)/.test(navigator.userAgent);\n\t}\n\n\ton() {\n\t\tif (this._useFixedLayout) {\n\t\t\tthis._scrollTop = this._$wnd.scrollTop();\n\t\t\tthis._scrollLeft = this._$wnd.scrollLeft();\n\t\t\tthis._applyPositionStyle();\n\t\t\tthis._$wnd.scrollTop(0).scrollLeft(0);\n\t\t}\n\t\tthis._applyScrollbarStyle();\n\n\t\tthis._$html\n\t\t\t.toggleClass('zdialog-scrollbar-fix', this._hasScrollBar())\n\t\t\t.toggleClass('zdialog-position-fix', this._useFixedLayout)\n\t\t\t.addClass('zdialog-open');\n\t}\n\n\toff() {\n\t\tthis._$html\n\t\t\t.removeClass('zdialog-scrollbar-fix')\n\t\t\t.removeClass('zdialog-position-fix')\n\t\t\t.removeClass('zdialog-open');\n\t\tif (this._useFixedLayout) {\n\t\t\tthis._$wnd.scrollTop(this._scrollTop).scrollLeft(this._scrollLeft);\n\t\t}\n\t}\n\n\t_applyScrollbarStyle() {\n\t\tconst scrollBarWidth = getScrollBarWidth();\n\t\t// language=CSS\n\t\tthis._$scrollBarStyle.html(`\n.zdialog-scrollbar-fix {\n\tpadding-right: ${scrollBarWidth}px;\n}\n`);\n\t}\n\n\t_applyPositionStyle() {\n\t\t// language=CSS\n\t\tthis._$positionStyle.html(`\n.zdialog-position-fix {\n\tposition: fixed;\n\twidth: 100%;\n\theight: 100%;\n\ttop: -${this._scrollTop}px;\n\tleft: -${this._scrollLeft}px;\n}\n`);\n\t}\n\n\t_hasScrollBar() {\n\t\treturn hasScrollBar(this._$html);\n\t}\n}\n\nfunction getScrollBarWidth() {\n\tconst $outer = $('
').css({visibility: 'hidden', width: 100, overflow: 'scroll'}).appendTo('body'),\n\t\twidthWithScroll = $('
').css({width: '100%'}).appendTo($outer).outerWidth();\n\t$outer.remove();\n\treturn 100 - widthWithScroll;\n}\n\nfunction hasScrollBar(el) {\n\tconst $el = $(el);\n\treturn $el.length > 0 ? $el[0].scrollHeight > $(window).height() : false;\n}\n\nexport const dialogManager = new DialogManager();\n\nko.components.register('zdialog-wrapper', {\n\ttemplate: `\n
\n
\n
\n\t
\n\t\t
\n\t
\n
\n`.trim()\n});\nko.components.register('zdialog', {\n\ttemplate: `\n
\n
\n`.trim()\n});\nko.components.register('zdialog-content-iframe', {\n\ttemplate: `\n
\n\n`.trim()\n});\nko.components.register('zdialog-content-html', {\n\ttemplate: `\n\n

\n\t\n\t
\n

\n\n\n
\n\n
\n`.trim()\n});\n\n\n\n// WEBPACK FOOTER //\n// ./core/widgets/dialog.js","module.exports = \"/*!\\n * jQuery Cookie Plugin v1.4.1\\n * https://github.com/carhartl/jquery-cookie\\n *\\n * Copyright 2013 Klaus Hartl\\n * Released under the MIT license\\n */\\n(function (factory) {\\n\\tif (typeof define === 'function' && define.amd) {\\n\\t\\t// AMD\\n\\t\\tdefine(['jquery'], factory);\\n\\t} else if (typeof exports === 'object') {\\n\\t\\t// CommonJS\\n\\t\\tfactory(require('jquery'));\\n\\t} else {\\n\\t\\t// Browser globals\\n\\t\\tfactory(jQuery);\\n\\t}\\n}(function ($) {\\n\\n\\tvar pluses = /\\\\+/g;\\n\\n\\tfunction encode(s) {\\n\\t\\treturn config.raw ? s : encodeURIComponent(s);\\n\\t}\\n\\n\\tfunction decode(s) {\\n\\t\\treturn config.raw ? s : decodeURIComponent(s);\\n\\t}\\n\\n\\tfunction stringifyCookieValue(value) {\\n\\t\\treturn encode(config.json ? JSON.stringify(value) : String(value));\\n\\t}\\n\\n\\tfunction parseCookieValue(s) {\\n\\t\\tif (s.indexOf('\\\"') === 0) {\\n\\t\\t\\t// This is a quoted cookie as according to RFC2068, unescape...\\n\\t\\t\\ts = s.slice(1, -1).replace(/\\\\\\\\\\\"/g, '\\\"').replace(/\\\\\\\\\\\\\\\\/g, '\\\\\\\\');\\n\\t\\t}\\n\\n\\t\\ttry {\\n\\t\\t\\t// Replace server-side written pluses with spaces.\\n\\t\\t\\t// If we can't decode the cookie, ignore it, it's unusable.\\n\\t\\t\\t// If we can't parse the cookie, ignore it, it's unusable.\\n\\t\\t\\ts = decodeURIComponent(s.replace(pluses, ' '));\\n\\t\\t\\treturn config.json ? JSON.parse(s) : s;\\n\\t\\t} catch(e) {}\\n\\t}\\n\\n\\tfunction read(s, converter) {\\n\\t\\tvar value = config.raw ? s : parseCookieValue(s);\\n\\t\\treturn $.isFunction(converter) ? converter(value) : value;\\n\\t}\\n\\n\\tvar config = $.cookie = function (key, value, options) {\\n\\n\\t\\t// Write\\n\\n\\t\\tif (value !== undefined && !$.isFunction(value)) {\\n\\t\\t\\toptions = $.extend({}, config.defaults, options);\\n\\n\\t\\t\\tif (typeof options.expires === 'number') {\\n\\t\\t\\t\\tvar days = options.expires, t = options.expires = new Date();\\n\\t\\t\\t\\tt.setTime(+t + days * 864e+5);\\n\\t\\t\\t}\\n\\n\\t\\t\\treturn (document.cookie = [\\n\\t\\t\\t\\tencode(key), '=', stringifyCookieValue(value),\\n\\t\\t\\t\\toptions.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE\\n\\t\\t\\t\\toptions.path ? '; path=' + options.path : '',\\n\\t\\t\\t\\toptions.domain ? '; domain=' + options.domain : '',\\n\\t\\t\\t\\toptions.secure ? '; secure' : ''\\n\\t\\t\\t].join(''));\\n\\t\\t}\\n\\n\\t\\t// Read\\n\\n\\t\\tvar result = key ? undefined : {};\\n\\n\\t\\t// To prevent the for loop in the first place assign an empty array\\n\\t\\t// in case there are no cookies at all. Also prevents odd result when\\n\\t\\t// calling $.cookie().\\n\\t\\tvar cookies = document.cookie ? document.cookie.split('; ') : [];\\n\\n\\t\\tfor (var i = 0, l = cookies.length; i < l; i++) {\\n\\t\\t\\tvar parts = cookies[i].split('=');\\n\\t\\t\\tvar name = decode(parts.shift());\\n\\t\\t\\tvar cookie = parts.join('=');\\n\\n\\t\\t\\tif (key && key === name) {\\n\\t\\t\\t\\t// If second argument (value) is a function it's a converter...\\n\\t\\t\\t\\tresult = read(cookie, value);\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Prevent storing a cookie that we couldn't decode.\\n\\t\\t\\tif (!key && (cookie = read(cookie)) !== undefined) {\\n\\t\\t\\t\\tresult[name] = cookie;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\treturn result;\\n\\t};\\n\\n\\tconfig.defaults = {};\\n\\n\\t$.removeCookie = function (key, options) {\\n\\t\\tif ($.cookie(key) === undefined) {\\n\\t\\t\\treturn false;\\n\\t\\t}\\n\\n\\t\\t// Must not alter options, thus extending a fresh object...\\n\\t\\t$.cookie(key, '', $.extend({}, options, { expires: -1 }));\\n\\t\\treturn !$.cookie(key);\\n\\t};\\n\\n}));\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/Vadim/Projects/Php/zakupki/node_modules/raw-loader!../vendor/cookie/jquery.cookie.js\n// module id = i4G7\n// module chunks = 7","module.exports = \"(function($) {\\r\\n $.fn.urlconverter = function(maxlength) {\\r\\n return this.each(function() {\\r\\n let text = $(this).html();\\r\\n if(text) {\\r\\n text = text.replace(\\\"&\\\", \\\"&\\\");\\r\\n $(this).html(text.replace(/(https?:\\\\/\\\\/)?([\\\\da-z\\\\.\\\\-@]+)\\\\.([a-z\\\\.]{2,6})([\\\\?+=&%#\\\\/\\\\wА-Яа-яёЁ\\\\.;\\\\-]*)*\\\\/?/g, function (s) {\\r\\n let st = s;\\r\\n\\r\\n if (s.length > maxlength) {\\r\\n st = s.slice(0, maxlength) + \\\"...\\\";\\r\\n }\\r\\n\\r\\n if (!/^(https?:\\\\/\\\\/)/.test(s)) {\\r\\n if(s.indexOf('@') !== -1) {\\r\\n s = \\\"mailto:\\\" + s;\\r\\n } else {\\r\\n s = \\\"http://\\\" + s;\\r\\n }\\r\\n }\\r\\n\\r\\n return \\\"\\\" + st + \\\"\\\";\\r\\n }));\\r\\n }\\r\\n });\\r\\n };\\r\\n}(jQuery));\\r\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/Vadim/Projects/Php/zakupki/node_modules/raw-loader!../vendor/urlconverter/jquery.urlconverter.js\n// module id = i8fT\n// module chunks = 7 12","import \"./loading.less\";\nimport {checkIsIframe} from \"../utils/utils\";\n\nlet $el;\nlet counter = 0;\nconst iframeOverride = checkIsIframe() ? window.top.zde.loading : {};\n\nexport default {\n\t/**\n\t * Shows loading spinner\n\t */\n\tshow: function() {\n\t\tif (!$el) {\n\t\t\t$el = $('
').appendTo('body');\n\t\t\t/*$el = $(`
\n\t
\n\t
\n\t
\n\t
`).appendTo('body');*/\n\t\t}\n\t\tcounter++;\n\t},\n\n\t/**\n\t * Shows loading spinner\n\t */\n\thide: function() {\n\t\tif ($el && --counter <= 0) {\n\t\t\t$el.addClass('zloader-closing');\n\t\t\t// let animation finish and remove the element\n\t\t\tconst $element = $el;\n\t\t\tsetTimeout(() => {\n\t\t\t\t$element.remove();\n\t\t\t}, 1000);\n\t\t\t$el = null;\n\t\t\tcounter = 0;\n\t\t}\n\t},\n\n\t...iframeOverride\n}\n\n\n\n// WEBPACK FOOTER //\n// ./core/widgets/loading.js","import Clipboard from \"clipboard\";\nimport _ from \"lib/underscore\";\nimport loading from \"../../../core/widgets/loading\";\nimport {Notifier} from \"../../../core/widgets/notifier\";\nimport {siteUrl} from \"../../../core/utils/url\";\nimport {openHtmlDialog} from \"../../../core/widgets/dialog\";\nimport {globals} from \"../../../core/utils/globals\";\n\nexport function initSaleAdminPanelForList($listWrapper, selector) {\n\t$listWrapper = $($listWrapper);\n\t$listWrapper.on('click', selector + ' [rel=change-status]', function() {\n\t\tonClickChangeStatus($(this));\n\t});\n}\n\nexport function initSaleAdminPanel(selector) {\n\tconst $wrap = $(selector);\n\tif (!$wrap || !$wrap.length) {\n\t\treturn;\n\t}\n\n\t$wrap.find('[rel=change-status]').on('click', function () {\n\t\tonClickChangeStatus($(this));\n\t});\n\n\tinitSaleTemplatesCopy($wrap.find('[rel=copy-template]'));\n}\n\nfunction onClickChangeStatus($wrap) {\n\tif (!$wrap || !$wrap.length || $wrap.data('isWorking')) {\n\t\treturn;\n\t}\n\tconst id = $wrap.data('pageId');\n\tconst $status = $wrap.find('[rel=page-status]');\n\tconst status = $status.text();\n\t$wrap.data('isWorking', true);\n\tloading.show();\n\t$.post(siteUrl('blog/changePageStatus'), {id, status}, null, 'json')\n\t\t.always(loading.hide)\n\t\t.fail(Notifier.errorXHR)\n\t\t.done(response => {\n\t\t\tif (!response || !response.success) {\n\t\t\t\tNotifier.error();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconst newStatus = response.status;\n\t\t\t\t$status.text(newStatus);\n\t\t\t\tNotifier.success('Статус изменен на ' + newStatus);\n\t\t\t\t$wrap.data('isWorking', false);\n\t\t\t}\n\t\t});\n}\n\n/**\n * Initialize copy-template admin block\n * @param {JQuery} $wrap\n */\nexport function initSaleTemplatesCopy($wrap) {\n\tif (!$wrap || !$wrap.length) {\n\t\treturn;\n\t}\n\tconst items = globals('saleTemplateItems');\n\tif (!items) {\n\t\treturn;\n\t}\n\tconst $select = $wrap.find('select[rel=template-items]');\n\t$.each(items, (id, name) => {\n\t\t$select.append(\n\t\t\t$('').attr('value', id).text(name)\n\t\t);\n\t});\n\n\tconst clipboard = new Clipboard('#btnCopySaleTemplate', {\n\t\ttext: () => {\n\t\t\treturn $wrap.data('content');\n\t\t}\n\t});\n\tconst page_id = $wrap.data('pageId');\n\tconst $buttons = $wrap.find('button.main');\n\tconst $buttonsTg = $wrap.find('button.tg');\n\tlet zresponse = '';\n\t$select.on('change', function () {\n\t\t$buttons.prop('disabled', true);\n\t\t$buttonsTg.prop('disabled', true);\n\t\tconst template_id = $(this).val();\n\t\tif (!template_id) {\n\t\t\treturn;\n\t\t}\n\t\tloading.show();\n const selected = $(this).val();\n const text = $(this).find('option[value=\"'+selected+'\"]').text();\n\t\t$.get(siteUrl('sale/ajax_get_template'), {page_id, template_id}, null, 'json')\n\t\t\t.always(loading.hide)\n\t\t\t.fail(Notifier.errorXHR)\n\t\t\t.done(response => {\n\t\t\t\t$wrap.data('content', response['content']);\n\t\t\t\t$buttons.prop('disabled', false);\n\t\t\t\tzresponse = response.content;\n if(text.indexOf('TG') + 1){\n $buttonsTg.prop('disabled', false);\n }\n\t\t\t});\n\t});\n\tclipboard.on('success', function (e) {\n\t\tNotifier.success('Шаблон скопирован в буффер обмена');\n\t});\n\t$wrap.find('[rel=btn-view-template]').on('click', () => {\n\t\tconst content = _.escape($wrap.data('content'));\n\t\topenHtmlDialog(`
${content}
`);\n\t});\n\t$('#btn-tg-test').click(function(){\n\t\tlet request = {\n\t\t\ttext: zresponse,\n chat_id: '-1001283636934',\n\t\t\tparse_mode: 'Markdown'\n\t\t}\n\n $.post(siteUrl('blog/telegramPost'), request, function(response){\n updateResponse(response);\n }, 'json');\n\t})\n $('#btn-tg-prod').click(function(){\n let request = {\n text: zresponse,\n chat_id: '-1001220675019',\n parse_mode: 'Markdown'\n }\n\n $.post(siteUrl('blog/telegramPost'), request, function(response){\n updateResponse(response);\n }, 'json');\n })\n\n\tfunction updateResponse(response){\n if(response.success){\n zde.notifier.success('Сообщение отправлено');\n } else {\n zde.notifier.error('Произошла ошибка');\n }\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./modules/blog/common/adminpanel.js","import $ from 'jquery';\n\n/**\n *\n * @param {object} options\n * @return {LastCommentsViewModel}\n */\nexport function init(options) {\n const o = {\n heightTarget: '.layout-content',\n commentsType: 'all',\n reviewType: null,\n ...options\n };\n\n\treturn new LastCommentsViewModel(o.heightTarget, o.commentsType, o.reviewType);\n}\n\nclass LastCommentsViewModel {\n _$wrapper = $('#commentsWrapper');\n\n needsLoading = true;\n allVisible = true;\n heightTarget = null;\n\n\tconstructor(heightTarget, commentsType, reviewType) {\n\t const commentsPerPage = 50;\n\n\t this.heightTarget = $(heightTarget);\n\n\t this._prepareCommentBlocks(this._$wrapper.children('.comment-item'));\n\t this.fit();\n\n\t\tthis._$wrapper.zInfiniteScroll(\n {\n selector: '.comment-item',\n checkViewport: false,\n enabled: () => {\n if (!this.allVisible) {\n this.fit();\n }\n return this.needsLoading && this.allVisible;\n },\n maxAutoloadPages: 100,\n loading: '#lastCommentsScrollLoader',\n fetch: (page, callback) => {\n $.get(\n this._$wrapper.data('load-url'),\n {\n offset: (page - 1) * commentsPerPage,\n count: commentsPerPage,\n comments_type: commentsType,\n review_type: reviewType,\n new_layout: 1\n },\n (response) => {\n let $blocks = $(response['html']);\n callback($blocks);\n },\n 'json'\n );\n },\n show: ($blocks) => {\n $blocks = $blocks.filter('.comment-item');\n this.fit();\n this._$wrapper.append($blocks);\n this._prepareCommentBlocks($blocks);\n this.fit();\n return $blocks.length\n }\n }\n\t\t);\n\n\t\t$(document).on('heightTargetUpdated', () => {\n\t\t this.fit();\n\t\t});\n\t}\n\n _prepareCommentBlocks($blocks) {\n $blocks.each(function () {\n let $this = $(this);\n $this.data('height', $this.outerHeight(true));\n });\n }\n\n fit() {\n let $content = this.heightTarget;\n let $comments = this._$wrapper.children('.comment-item');\n\n let contentBottom = $content.offset().top + $content.outerHeight();\n let top = this._$wrapper.offset().top;\n let commentsBottom = top + this._$wrapper.outerHeight();\n let $item;\n let result = 0;\n\n let commentsHeight = this._$wrapper.outerHeight();\n\n if (commentsBottom > contentBottom) {\n // hide elements one by one while comments column is longer\n do {\n $item = $comments.filter(':visible').last();\n if ($item.length === 0) {\n break;\n }\n if (top + commentsHeight > contentBottom) {\n commentsHeight -= $item.data('height');\n $item.hide();\n result--;\n } else {\n break;\n }\n } while (true);\n } else if (commentsBottom < contentBottom) {\n // show elements one by one while comments column is shorter\n do {\n $item = $comments.filter(':hidden').first();\n if ($item.length === 0) {\n break;\n }\n commentsHeight += $item.data('height');\n if (top + commentsHeight <= contentBottom) {\n $item.show();\n result++;\n } else {\n break;\n }\n } while (true);\n }\n\n this.needsLoading = result >= 0;\n this.allVisible = $comments.filter(':hidden').length === 0;\n return result;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./modules/blocks/last_comments/lastcomments.js","import {newLogger} from \"../../../core/utils/logger\";\nimport * as pageComments from \"../pagecomments\";\nimport * as sidebar from \"../sidebar\";\n\nconst logger = newLogger('Contest page');\n\nexport function init(options) {\n\tconst o = {\n\t\tpage: {},\n\t\tcomments: [],\n\t\t...options\n\t};\n\n\tlogger.log('init', o);\n\n\tpageComments.init({page: o.page, comments: o.comments});\n\tsetTimeout(sidebar.init);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./modules/blog/page/contest.js","/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\nmodule.exports = function(src) {\n\tfunction log(error) {\n\t\t(typeof console !== \"undefined\")\n\t\t&& (console.error || console.log)(\"[Script Loader]\", error);\n\t}\n\n\t// Check for IE =< 8\n\tfunction isIE() {\n\t\treturn typeof attachEvent !== \"undefined\" && typeof addEventListener === \"undefined\";\n\t}\n\n\ttry {\n\t\tif (typeof execScript !== \"undefined\" && isIE()) {\n\t\t\texecScript(src);\n\t\t} else if (typeof eval !== \"undefined\") {\n\t\t\teval.call(null, src);\n\t\t} else {\n\t\t\tlog(\"EvalError: No eval function available\");\n\t\t}\n\t} catch (error) {\n\t\tlog(error);\n\t}\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/Vadim/Projects/Php/zakupki/node_modules/script-loader/addScript.js\n// module id = oN+n\n// module chunks = 0 1 2 3 4 5 6 7 11 12 14 15 16 20 23 24 27 29","module.exports = toastr;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"toastr\"\n// module id = og09\n// module chunks = 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 23 28","(function (global, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(['module', './clipboard-action', 'tiny-emitter', 'good-listener'], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(module, require('./clipboard-action'), require('tiny-emitter'), require('good-listener'));\n } else {\n var mod = {\n exports: {}\n };\n factory(mod, global.clipboardAction, global.tinyEmitter, global.goodListener);\n global.clipboard = mod.exports;\n }\n})(this, function (module, _clipboardAction, _tinyEmitter, _goodListener) {\n 'use strict';\n\n var _clipboardAction2 = _interopRequireDefault(_clipboardAction);\n\n var _tinyEmitter2 = _interopRequireDefault(_tinyEmitter);\n\n var _goodListener2 = _interopRequireDefault(_goodListener);\n\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n }\n\n var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n var _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n\n function _possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n }\n\n function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n }\n\n var Clipboard = function (_Emitter) {\n _inherits(Clipboard, _Emitter);\n\n /**\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n * @param {Object} options\n */\n function Clipboard(trigger, options) {\n _classCallCheck(this, Clipboard);\n\n var _this = _possibleConstructorReturn(this, (Clipboard.__proto__ || Object.getPrototypeOf(Clipboard)).call(this));\n\n _this.resolveOptions(options);\n _this.listenClick(trigger);\n return _this;\n }\n\n /**\n * Defines if attributes would be resolved using internal setter functions\n * or custom functions that were passed in the constructor.\n * @param {Object} options\n */\n\n\n _createClass(Clipboard, [{\n key: 'resolveOptions',\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this.action = typeof options.action === 'function' ? options.action : this.defaultAction;\n this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;\n this.text = typeof options.text === 'function' ? options.text : this.defaultText;\n this.container = _typeof(options.container) === 'object' ? options.container : document.body;\n }\n }, {\n key: 'listenClick',\n value: function listenClick(trigger) {\n var _this2 = this;\n\n this.listener = (0, _goodListener2.default)(trigger, 'click', function (e) {\n return _this2.onClick(e);\n });\n }\n }, {\n key: 'onClick',\n value: function onClick(e) {\n var trigger = e.delegateTarget || e.currentTarget;\n\n if (this.clipboardAction) {\n this.clipboardAction = null;\n }\n\n this.clipboardAction = new _clipboardAction2.default({\n action: this.action(trigger),\n target: this.target(trigger),\n text: this.text(trigger),\n container: this.container,\n trigger: trigger,\n emitter: this\n });\n }\n }, {\n key: 'defaultAction',\n value: function defaultAction(trigger) {\n return getAttributeValue('action', trigger);\n }\n }, {\n key: 'defaultTarget',\n value: function defaultTarget(trigger) {\n var selector = getAttributeValue('target', trigger);\n\n if (selector) {\n return document.querySelector(selector);\n }\n }\n }, {\n key: 'defaultText',\n value: function defaultText(trigger) {\n return getAttributeValue('text', trigger);\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.listener.destroy();\n\n if (this.clipboardAction) {\n this.clipboardAction.destroy();\n this.clipboardAction = null;\n }\n }\n }], [{\n key: 'isSupported',\n value: function isSupported() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];\n\n var actions = typeof action === 'string' ? [action] : action;\n var support = !!document.queryCommandSupported;\n\n actions.forEach(function (action) {\n support = support && !!document.queryCommandSupported(action);\n });\n\n return support;\n }\n }]);\n\n return Clipboard;\n }(_tinyEmitter2.default);\n\n /**\n * Helper function to retrieve attribute value.\n * @param {String} suffix\n * @param {Element} element\n */\n function getAttributeValue(suffix, element) {\n var attribute = 'data-clipboard-' + suffix;\n\n if (!element.hasAttribute(attribute)) {\n return;\n }\n\n return element.getAttribute(attribute);\n }\n\n module.exports = Clipboard;\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/Vadim/Projects/Php/zakupki/node_modules/clipboard/lib/clipboard.js\n// module id = oqjq\n// module chunks = 7","module.exports = \"/* Soon v1.9.0 - Soon, Animated Responsive Countdowns, jQuery\\n * Copyright (c) 2016 Rik Schennink - http://rikschennink.nl/products/soon\\n */\\n!function(a,b,c){function d(){H!==window.innerWidth&&(H=window.innerWidth,g())}function e(a,b,c,d){var e=parseInt(getComputedStyle(document.documentElement).fontSize,10)/16,f=parseInt(getComputedStyle(b).fontSize,10)/16/e,g=d/b.scrollWidth,h=g*f;return 4>h?(a.style.fontSize=\\\"\\\",c.redraw(),!1):(a.style.fontSize=h+\\\"rem\\\",a.setAttribute(\\\"data-scale-rounded\\\",Math.round(h).toString()),c.redraw(),!0)}function f(a,b){if(!B.isSlow()){for(var c,d,f=window.getComputedStyle(a.parentNode),g=parseInt(f.getPropertyValue(\\\"padding-left\\\"),10),h=parseInt(f.getPropertyValue(\\\"padding-right\\\"),10),i=a.parentNode.clientWidth-g-h,j=a.getAttribute(\\\"data-scale-max\\\"),k=a.getAttribute(\\\"data-scale-hide\\\"),l=j?I.indexOf(j):J,m=a.querySelectorAll(\\\".soon-group-sub\\\"),n=0,o=m.length,p=a.querySelector(\\\".soon-group\\\");o>n;n++)m[n].style.display=\\\"\\\";if(\\\"fit\\\"===j||\\\"fill\\\"===j){if(e(a,p,b,i))return;l=0}c=l;do a.setAttribute(\\\"data-scale\\\",I[c]),c++;while(p.scrollWidth>i&&I[c]);if(c!==l&&b.redraw(),!(p.scrollWidth<=i||\\\"none\\\"===k)){n=0,d=!1;do{if(\\\"0\\\"!==m[n].getAttribute(\\\"data-value\\\"))break;m[n].style.display=\\\"none\\\",d=!0,n++}while(p.scrollWidth>i&&o>n);if(d&&b.redraw(),\\\"empty\\\"!==k){n=o-1,d=!1;do m[n].style.display=\\\"none\\\",d=!0,n--;while(p.scrollWidth>i&&n>0);d&&b.redraw()}}}}function g(){for(var a=K.length-1;a>=0;a--)f(K[a].node,K[a].presenter)}function h(a){for(var b=0,c=K.length;c>b;b++)if(K[b].node===a)return b;return null}function i(a){for(var b=0,c=L.length;c>b;b++)if(L[b].node===a)return b;return null}function j(a){var b=h(a);return null===b?null:K[b]}function k(a){-1===a.className.indexOf(\\\"soon\\\")&&(a.className+=\\\" soon\\\"),B.supportsAnimation()||(a.className+=\\\" soon-no-animation\\\");var b=a.getAttribute(\\\"data-layout\\\");(!b||-1===b.indexOf(\\\"group\\\")&&-1===b.indexOf(\\\"line\\\"))&&(b||(b=\\\"\\\"),a.setAttribute(\\\"data-layout\\\",b+\\\" group\\\")),B.isSlow()&&(a.removeAttribute(\\\"data-visual\\\"),a.setAttribute(\\\"data-view\\\",\\\"text\\\"),a.className+=\\\" soon-slow-browser\\\")}function l(a,b,c){b[c]&&!a.getAttribute(\\\"data-\\\"+c)&&a.setAttribute(\\\"data-\\\"+c,b[c])}function m(a,b){return a.getAttribute(\\\"data-\\\"+b)}function n(a,b){var c=null!==a.due||null!==a.since,d=null;if(c)if(a.since){var e=a.now?a.now.valueOf():(new Date).valueOf();d=D.chain(function(b){return a.now?-b:b},D.offset(e),D.diff(a.since.valueOf()),function(a){return Math.abs(a)},function(a){return Math.max(0,a)},function(b){return a.callback.onTick(b,a.since),b},D.event(function(a){return 0===a},b),D.duration(new Date(e),a.since,a.format,a.cascade))}else d=D.chain(D.offset(a.now.valueOf()),D.diff(a.due.valueOf()),function(a){return Math.max(0,a)},function(b){return a.callback.onTick(b,a.due),b},D.event(function(a){return 0>=a},b),D.duration(a.now,a.due,a.format,a.cascade));else d=function(){var a=new Date;return[a.getHours(),a.getMinutes(),a.getSeconds()]},a.format=[\\\"h\\\",\\\"m\\\",\\\"s\\\"],a.separator=\\\":\\\";return d}function o(a,b){for(var c,d,e,f,g,h,i,j=null!==a.due||null!==a.since,k=n(a,b),l={type:\\\"group\\\",options:{transform:k,presenters:[]}},m=[],o=a.format.length,r=0;o>r;r++)h=a.format[r],i=r,c={type:\\\"group\\\",options:{className:\\\"soon-group-sub\\\",presenters:[]}},a.visual&&(c.options.presenters.push(p(a,h)),a.reflect&&c.options.presenters.push(p(a,h,\\\"soon-reflection\\\"))),d={type:\\\"text\\\",options:{className:\\\"soon-label\\\"}},d.options.transform=a.singular?D.plural(a.label[h],a.label[h+\\\"_s\\\"]):function(b){return function(){return a.label[b+\\\"_s\\\"]}}(h),e=q(a,h),f=null,a.reflect&&!a.visual&&(f=q(a,h,\\\"soon-reflection\\\")),c.options.presenters.push(e),f&&c.options.presenters.push(f),j&&c.options.presenters.push(d),a.separator&&(g={type:\\\"group\\\",options:{className:\\\"soon-group-separator\\\",presenters:[c]}},0!==i&&(a.reflect&&g.options.presenters.unshift({type:\\\"text\\\",options:{className:\\\"soon-separator soon-reflection\\\",transform:function(){return a.separator}}}),g.options.presenters.unshift({type:\\\"text\\\",options:{className:\\\"soon-separator\\\",transform:function(){return a.separator}}})),c=g),m.push(c);return l.options.presenters=m,l}function p(a,b,c){var d=a.visual.split(\\\" \\\"),e=d[0];return d.shift(),{type:e,options:{className:\\\"soon-visual \\\"+(c||\\\"\\\"),transform:D.chain(D.progress(B.MAX[b]),D.cap()),modifiers:d,animate:\\\"ms\\\"!==b}}}function q(a,b,c){var d=[];return a.face&&(d=a.face.split(\\\" \\\"),d.shift()),a.chars?{type:\\\"repeater\\\",options:{delay:\\\"text\\\"===a.view?0:50,className:\\\"soon-value \\\"+(c||\\\"\\\"),transform:D.chain(D.pad(a.padding[b]),D.chars()),presenter:{type:a.view,options:{modifiers:d}}}}:{type:\\\"group\\\",options:{className:\\\"soon-group-sub-sub soon-value \\\"+(c||\\\"\\\"),transform:D.pad(a.padding[b]),presenters:[{type:a.view,options:{modifiers:d}}]}}}function r(a,b,c,d){K.push({node:a,ticker:b,presenter:c,options:d})}function s(a){return new(t(a.type))(a.options||{})}function t(a){return C[a.charAt(0).toUpperCase()+a.slice(1)]}function u(a,b){var c=a.getElementsByClassName?a.getElementsByClassName(\\\"soon-placeholder\\\"):a.querySelectorAll(\\\"soon-placeholder\\\");c.length&&(c[0].innerHTML=\\\"\\\",a=c[0]);var d=s(b);return a.appendChild(d.getElement()),d}function v(a,b,c,d){var e=new F(function(a){b.setValue(a)},{rate:c});return r(a,e,b,d),e.start(),f(a,b),e}function w(a){var b,c,d=[\\\"labels\\\",\\\"padding\\\"],e=2,f={since:m(a,\\\"since\\\"),due:m(a,\\\"due\\\"),now:m(a,\\\"now\\\"),face:m(a,\\\"face\\\"),visual:m(a,\\\"visual\\\"),format:m(a,\\\"format\\\"),singular:\\\"true\\\"===m(a,\\\"singular\\\"),reflect:\\\"true\\\"===m(a,\\\"reflect\\\"),scaleMax:m(a,\\\"scale-max\\\"),scaleHide:m(a,\\\"scale-hide\\\"),separateChars:!(\\\"false\\\"===m(a,\\\"separate-chars\\\")),cascade:!(\\\"false\\\"===m(a,\\\"cascade\\\")),separator:m(a,\\\"separator\\\"),padding:!(\\\"false\\\"===m(a,\\\"padding\\\")),eventComplete:m(a,\\\"event-complete\\\"),eventTick:m(a,\\\"event-tick\\\")};for(var g in M)if(M.hasOwnProperty(g))for(b=M[g],c=0;e>c;c++)f[d[c]+b.option]=m(a,d[c]+\\\"-\\\"+b.option.toLowerCase());return A.create(a,f)}function x(a){var b;if(0===a.indexOf(\\\"in \\\")){var c=a.match(N),d=parseInt(c[1],10),e=c[2];return b=new Date,-1!==e.indexOf(\\\"hour\\\")?b.setHours(b.getHours()+d):-1!==e.indexOf(\\\"minute\\\")?b.setMinutes(b.getMinutes()+d):-1!==e.indexOf(\\\"second\\\")&&b.setSeconds(b.getSeconds()+d),b}if(-1!==a.indexOf(\\\"at \\\")){b=new Date;var f=b.getTime(),g=-1!==a.indexOf(\\\"reset\\\");a=a.replace(\\\"reset \\\",\\\"\\\");var h=a.split(\\\"at \\\"),i=h[1].match(O),j=parseInt(i[1],10),k=i[2]?parseInt(i[2],10):0,l=i[3]?parseInt(i[3],10):0,m=h[1].split(\\\" zone \\\");if(m&&(m=m[1]),h[0].length){var n=B.getDayIndex(h[0]),o=(n+7-b.getDay())%7;b.setDate(b.getDate()+o)}b.setHours(j),b.setMinutes(k),b.setSeconds(l),b.setMilliseconds(0),g&&f>=b.getTime()&&b.setHours(j+(h[0].length?168:24));var p=B.pad,q=b.getFullYear()+\\\"-\\\"+p(b.getMonth()+1)+\\\"-\\\"+p(b.getDate()),r=p(b.getHours())+\\\":\\\"+p(b.getMinutes())+\\\":\\\"+p(b.getSeconds());a=q+\\\"T\\\"+r+(m||\\\"\\\")}return B.isoToDate(a)}function y(a,b){if(0===b.indexOf(a))return\\\"\\\";if(\\\"w\\\"===a&&-1!==b.indexOf(\\\"M\\\"))return\\\"\\\";if(\\\"d\\\"===a){if(-1!==b.indexOf(\\\"w\\\"))return\\\"\\\";if(-1!==b.indexOf(\\\"M\\\"))return\\\"00\\\"}return null}function z(a,b,c){if(c&&-1!==G.indexOf(a))return c;var d=function(c){return function(){c(),A.destroy(a),A.create(a,b)}}(c);return G.push(a),d}if(document.querySelectorAll&&!a.Soon){var A={},B={},C={},D={},E={timer:0,cbs:[],register:function(a){E.cbs.push(a)},deregister:function(a){for(var b=E.cbs.length-1;b>=0;b--)E.cbs[b]===a&&E.cbs.splice(b,1)},onresize:function(){clearTimeout(E.timer),E.timer=setTimeout(function(){E.resize()},100)},resize:function(){for(var a=0,b=E.cbs.length;b>a;a++)E.cbs[a]()},init:function(){a.addEventListener&&a.addEventListener(\\\"resize\\\",E.onresize,!1)}};E.init(),Function.prototype.bind||(Function.prototype.bind=function(a){if(\\\"function\\\"!=typeof this)throw new TypeError(\\\"Function.prototype.bind - what is trying to be bound is not callable\\\");var b=Array.prototype.slice.call(arguments,1),c=this,d=function(){},e=function(){return c.apply(this instanceof d&&a?this:a,b.concat(Array.prototype.slice.call(arguments)))};return d.prototype=this.prototype,e.prototype=new d,e}),Array.prototype.indexOf||(Array.prototype.indexOf=function(a,b){var c;if(null==this)throw new TypeError('\\\"this\\\" is null or not defined');var d=Object(this),e=d.length>>>0;if(0===e)return-1;var f=+b||0;if(1/0===Math.abs(f)&&(f=0),f>=e)return-1;for(c=Math.max(f>=0?f:e-Math.abs(f),0);e>c;){if(c in d&&d[c]===a)return c;c++}return-1}),function(){function a(a){this.el=a;for(var b=a.className.replace(/^\\\\s+|\\\\s+$/g,\\\"\\\").split(/\\\\s+/),c=0;c0&&\\\"none\\\"!==a}function b(){var a=!1,b=\\\"animation\\\",d=\\\"\\\",e=\\\"Webkit Moz O ms Khtml\\\".split(\\\" \\\"),f=\\\"\\\",g=0,h=document.body,i=e.length;if(h.style.animationName!==c&&(a=!0),a===!1)for(;i>g;g++)if(h.style[e[g]+\\\"AnimationName\\\"]!==c){f=e[g],b=f+\\\"Animation\\\",d=\\\"-\\\"+f.toLowerCase()+\\\"-\\\",a=!0;break}return a}var d,e,f=\\\"textContent\\\"in document.documentElement,g=function(a){var b,c,d=/^(\\\\d{4}\\\\-\\\\d\\\\d\\\\-\\\\d\\\\d([tT ][\\\\d:\\\\.]*)?)([zZ]|([+\\\\-])(\\\\d\\\\d):(\\\\d\\\\d))?$/,e=d.exec(a)||[];if(e[1]){b=e[1].split(/\\\\D/);for(var f=0,g=b.length;g>f;f++)b[f]=parseInt(b[f],10)||0;return b[1]-=1,b=new Date(Date.UTC.apply(Date,b)),b.getDate()?(e[5]&&(c=60*parseInt(e[5],10),e[6]&&(c+=parseInt(e[6],10)),\\\"+\\\"==e[4]&&(c*=-1),c&&b.setUTCMinutes(b.getUTCMinutes()+c)),b):Number.NaN}return Number.NaN},h=new Date(\\\"2015-01-01T12:00:00.123+01:00\\\"),i=isNaN(h)?function(a){return g(a)}:function(a){return new Date(a)};\\\"undefined\\\"!=typeof document.hidden?(e=\\\"hidden\\\",d=\\\"visibilitychange\\\"):\\\"undefined\\\"!=typeof document.mozHidden?(e=\\\"mozHidden\\\",d=\\\"mozvisibilitychange\\\"):\\\"undefined\\\"!=typeof document.msHidden?(e=\\\"msHidden\\\",d=\\\"msvisibilitychange\\\"):\\\"undefined\\\"!=typeof document.webkitHidden&&(e=\\\"webkitHidden\\\",d=\\\"webkitvisibilitychange\\\");var j=!1,k=1,l=1e3*k,m=60*l,n=60*m,o=24*n,p=7*o,q={MAX:{y:100,M:12,w:52,d:365,h:24,m:60,s:60,ms:1e3},AMOUNT:{w:p,d:o,h:n,m:m,s:l,ms:k},NAMES:{y:\\\"years\\\",M:\\\"months\\\",w:\\\"weeks\\\",d:\\\"days\\\",h:\\\"hours\\\",m:\\\"minutes\\\",s:\\\"seconds\\\",ms:\\\"milliseconds\\\"},FORMATS:[\\\"y\\\",\\\"M\\\",\\\"w\\\",\\\"d\\\",\\\"h\\\",\\\"m\\\",\\\"s\\\",\\\"ms\\\"],CIRC:2*Math.PI,QUART:.5*Math.PI,DAYS:[\\\"su\\\",\\\"mo\\\",\\\"tu\\\",\\\"we\\\",\\\"th\\\",\\\"fr\\\",\\\"sa\\\"],setText:null,documentVisibilityEvent:d,pad:function(a){return(\\\"00\\\"+a).slice(-2)},getDayIndex:function(a){return this.DAYS.indexOf(a.substr(0,2))},isSlow:function(){return!f},supportsAnimation:function(){return j=b()&&a(),q.supportsAnimation=function(){return j},j},toArray:function(a){return Array.prototype.slice.call(a)},toBoolean:function(a){return\\\"string\\\"==typeof a?\\\"true\\\"===a:a},isoToDate:function(a){if(a.match(/(Z)|([+\\\\-][0-9]{2}:?[0-9]*$)/g))return i(a);a+=-1!==a.indexOf(\\\"T\\\")?\\\"Z\\\":\\\"\\\";var b=i(a);return this.dateToLocal(b)},dateToLocal:function(a){return new Date(a.getTime()+6e4*a.getTimezoneOffset())},prefix:function(){for(var a,b=[\\\"webkit\\\",\\\"Moz\\\",\\\"ms\\\",\\\"O\\\"],c=0,d=b.length,e=document.createElement(\\\"div\\\").style;d>c;c++)if(a=b[c]+\\\"Transform\\\",a in e)return b[c];return null}(),setTransform:function(a,b){a.style[this.prefix+\\\"Transform\\\"]=b,a.style.transform=b},setTransitionDelay:function(a,b){a.style[this.prefix+\\\"TransitionDelay\\\"]=b+\\\",\\\"+b+\\\",\\\"+b,a.style.TransitionDelay=b+\\\",\\\"+b+\\\",\\\"+b},getShadowProperties:function(a){if(a=a?a.match(/(-?\\\\d+px)|(rgba\\\\(.+\\\\))|(rgb\\\\(.+\\\\))|(#[abcdef\\\\d]+)/g):null,!a)return null;for(var b,c=0,d=a.length,e=[];d>c;c++)-1!==a[c].indexOf(\\\"px\\\")?e.push(parseInt(a[c],10)):b=a[c];return e.push(b),5===e.length&&e.splice(3,1),e},getDevicePixelRatio:function(){return window.devicePixelRatio||1},isDocumentHidden:function(){return e?document[e]:!1},triggerAnimation:function(a,b){a.classList.remove(b),window.requestAnimationFrame(function(){a.offsetLeft,a.classList.add(b)})},getBackingStoreRatio:function(a){return a.webkitBackingStorePixelRatio||a.mozBackingStorePixelRatio||a.msBackingStorePixelRatio||a.oBackingStorePixelRatio||a.backingStorePixelRatio||1},setShadow:function(a,b,c,d,e){a.shadowOffsetX=b,a.shadowOffsetY=c,a.shadowBlur=d,a.shadowColor=e},getColorBetween:function(a,b,c){function d(a,b){return a+Math.round((b-a)*c)}function e(a){a=Math.min(a,255),a=Math.max(a,0);var b=a.toString(16);return b.length<2&&(b=\\\"0\\\"+b),b}return\\\"#\\\"+e(d(a.r,b.r))+e(d(a.g,b.g))+e(d(a.b,b.b))},getGradientColors:function(a,b,c){for(var d=[],e=0,f=c,g=1/(f-1),h=0;f>e;e++)d[e]=this.getColorBetween(a,b,h),h+=g;return d},hexToRgb:function(a){var b=/^#?([a-f\\\\d]{2})([a-f\\\\d]{2})([a-f\\\\d]{2})$/i.exec(a);return b?{r:parseInt(b[1],16),g:parseInt(b[2],16),b:parseInt(b[3],16)}:null},drawGradientArc:function(a,b,c,d,e,f,g,h,i,j,k,l,m){if(!(g>h)){l&&this.drawArc(a,b,c,d,e,f,g,h,i,\\\"transparent\\\",l,m);for(var n,o,p,q,r,s,t,u=this.hexToRgb(j),v=this.hexToRgb(k),w=this.hexToRgb(this.getColorBetween(u,v,(g-e)/f)),x=this.hexToRgb(this.getColorBetween(u,v,(h-e)/f)),y=h-g,z=Math.ceil(30*y),A=this.getGradientColors(w,x,z),B=-this.QUART+this.CIRC*g,C=A.length,D=0,E=this.CIRC*y/C;C>D;D++)o=A[D],p=A[D+1]||o,q=b+Math.cos(B)*d,s=b+Math.cos(B+E)*d,r=c+Math.sin(B)*d,t=c+Math.sin(B+E)*d,a.beginPath(),n=a.createLinearGradient(q,r,s,t),n.addColorStop(0,o),n.addColorStop(1,p),a.lineCap=m,a.strokeStyle=n,a.arc(b,c,d,B-.005,B+E+.005),a.lineWidth=i,a.stroke(),a.closePath(),B+=E}},drawArc:function(a,b,c,d,e,f,g,h,i,j,k,l){if(!(g>h)){if(null!==j.gradient.colors&&\\\"follow\\\"===j.gradient.type)return void this.drawGradientArc(a,b,c,d,e,f,g,h,i,j.gradient.colors[0],j.gradient.colors[1],k,l);if(k){var m=\\\"transparent\\\"===j.fill?9999:0;a.save(),a.translate(m,0),this.setShadow(a,k[0]-m,k[1],k[2],k[3])}if(a.beginPath(),a.lineWidth=i,a.arc(b,c,d,-this.QUART+this.CIRC*g,-this.QUART+this.CIRC*h,!1),j.gradient.colors){var n=\\\"horizontal\\\"===j.gradient.type?a.createLinearGradient(0,d,2*d,d):a.createLinearGradient(d,0,d,2*d);n.addColorStop(0,j.gradient.colors[0]),n.addColorStop(1,j.gradient.colors[1]),a.strokeStyle=n}else a.strokeStyle=\\\"transparent\\\"===j.fill?\\\"#000\\\":j.fill;a.lineCap=l,a.stroke(),k&&a.restore()}},drawRing:function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){d+e>1&&(d-=-1+d+e,c+=.5*e);var q=c,r=c+d,s=b*d,t=.5-Math.abs(-.5+b),u=c+(s-t*e),v=c+(s+(1-t)*e);(g||k)&&(p?(this.drawArc(a,f,f,g,c,d,v,r,h,i,j,o),this.drawArc(a,f,f,k,c,d,q,u,l,m,n,o)):(this.drawArc(a,f,f,g,c,d,q,u,h,i,j,o),this.drawArc(a,f,f,k,c,d,v,r,l,m,n,o)))},setTextContent:function(){return f?function(a,b){a.textContent=b}:function(a,b){a.innerText=b}}()};return q}(),D.cap=function(a,b){return a=a||0,b=b||1,function(c){return Math.min(Math.max(c,a),b)}},D.chain=function(a){return function(){var b,c=a.toArray(arguments),d=c.length;return function(a){for(b=0;d>b;b++)a=c[b](a);return a}}}(B),D.chars=function(){return function(a){return(a+\\\"\\\").split(\\\"\\\")}},D.diff=function(a){return function(b){return a-b}},D.duplicate=function(a){var b,c=new Array(a);return function(d){for(b=a;b--;)c[b]=d;return c}},D.duration=function(a){function b(a,b){return a.setMonth(a.getMonth()+b),a}function c(a){return new Date(a.valueOf())}function d(a,b){return-1!==b.indexOf(a)}function e(a,d){var e,f,g=12*(d.getFullYear()-a.getFullYear())+(d.getMonth()-a.getMonth()),h=b(c(a),g);return 0>d-h?(e=b(c(a),g-1),f=(d-h)/(h-e)):(e=b(c(a),g+1),f=(d-h)/(e-h)),-(g+f)}var f=a.FORMATS,g=f.length,h={M:1,y:12};return function(i,j,k,l){var m=d(\\\"M\\\",k),n=d(\\\"y\\\",k);return function(j){var o,p,q,r,s,t,u=0,v=[];for((m||n||!l)&&(o=new Date(i.valueOf()+j),p=e(o,i),t=m?Math.floor(p):12*Math.floor(p/12),j=o.valueOf()-b(c(i),t).valueOf());g>u;u++)r=f[u],2>u?(q=Math.floor(p/h[r]),d(r,k)?(p-=q*h[r],v.push(Math.max(0,q))):l||(p-=q*h[r])):(s=a.AMOUNT[r],q=Math.floor(j/s),d(r,k)?(j%=s,v.push(Math.max(0,q))):l||(j%=s));return v}}}(B),D.event=function(a,b){return function(c){return a(c)&&b(),c}},D.modulate=function(a){return function(b){return parseInt(b,10)%2===0?a:\\\"\\\"}},D.now=function(){return function(){return(new Date).getTime()}},D.offset=function(a){return function(b){return a+b}},D.pad=function(a){return a=a||\\\"\\\",function(b){return(a+b).slice(-a.length)}},D.plural=function(a,b){return function(c){return 1===parseInt(c,10)?a:b}},D.progress=function(a,b){return function(c){return c=parseInt(c,10),b>a?c/b:(a-c)/a}},C.Console=function(){var a=function(a){this._transform=a.transform||function(a){return a}};return a.prototype={redraw:function(){},destroy:function(){return null},getElement:function(){return null},setValue:function(a){console.log(this._transform(a))}},a}(),C.Fill=function(a){var b=function(a){this._wrapper=document.createElement(\\\"span\\\"),this._wrapper.className=\\\"soon-fill \\\"+(a.className||\\\"\\\"),this._transform=a.transform||function(a){return a},this._direction=\\\"to-top\\\";for(var b=0,c=a.modifiers.length;c>b;b++)if(0===a.modifiers[b].indexOf(\\\"to-\\\")){this._direction=a.modifiers[b];break}this._fill=document.createElement(\\\"span\\\"),this._fill.className=\\\"soon-fill-inner\\\",this._progress=document.createElement(\\\"span\\\"),this._progress.className=\\\"soon-fill-progress\\\",this._fill.appendChild(this._progress),this._wrapper.appendChild(this._fill)};return b.prototype={redraw:function(){},destroy:function(){return this._wrapper},getElement:function(){return this._wrapper},setValue:function(b){var c,d=this._transform(b);switch(this._direction){case\\\"to-top\\\":c=\\\"translateY(\\\"+(100-100*d)+\\\"%)\\\";break;case\\\"to-top-right\\\":c=\\\"scale(1.45) rotateZ(-45deg) translateX(\\\"+(-100+100*d)+\\\"%)\\\";break;case\\\"to-top-left\\\":c=\\\"scale(1.45) rotateZ(45deg) translateX(\\\"+(100-100*d)+\\\"%)\\\";break;case\\\"to-left\\\":c=\\\"translateX(\\\"+(100-100*d)+\\\"%)\\\";break;case\\\"to-right\\\":c=\\\"translateX(\\\"+(-100+100*d)+\\\"%)\\\";break;case\\\"to-bottom-right\\\":c=\\\"scale(1.45) rotateZ(45deg) translateX(\\\"+(-100+100*d)+\\\"%)\\\";break;case\\\"to-bottom-left\\\":c=\\\"scale(1.45) rotateZ(-45deg) translateX(\\\"+(100-100*d)+\\\"%)\\\";break;case\\\"to-bottom\\\":c=\\\"translateY(\\\"+(-100+100*d)+\\\"%)\\\"}a.setTransform(this._progress,c)}},b}(B),C.Flip=function(a){var b=function(b){this._wrapper=document.createElement(\\\"span\\\"),this._wrapper.className=\\\"soon-flip \\\"+(b.className||\\\"\\\"),this._transform=b.transform||function(a){return a},this._inner=document.createElement(\\\"span\\\"),this._inner.className=\\\"soon-flip-inner\\\",this._card=document.createElement(\\\"span\\\"),this._card.className=\\\"soon-flip-card\\\",a.supportsAnimation()?(this._front=document.createElement(\\\"span\\\"),this._front.className=\\\"soon-flip-front soon-flip-face\\\",this._back=document.createElement(\\\"span\\\"),this._back.className=\\\"soon-flip-back soon-flip-face\\\",this._card.appendChild(this._front),this._card.appendChild(this._back),this._top=document.createElement(\\\"span\\\"),this._top.className=\\\"soon-flip-top soon-flip-face\\\",this._card.appendChild(this._top),this._bottom=document.createElement(\\\"span\\\"),this._bottom.className=\\\"soon-flip-bottom soon-flip-face\\\",this._card.appendChild(this._bottom)):(this._fallback=document.createElement(\\\"span\\\"),this._fallback.className=\\\"soon-flip-fallback\\\",this._card.appendChild(this._fallback)),this._bounding=document.createElement(\\\"span\\\"),this._bounding.className=\\\"soon-flip-bounding\\\",this._card.appendChild(this._bounding),this._inner.appendChild(this._card),this._wrapper.appendChild(this._inner),this._frontValue=null,this._backValue=null,this._boundingLength=0};return b.prototype={redraw:function(){},_setBoundingForValue:function(a){var b=(a+\\\"\\\").length;if(b!==this._boundingLength){this._boundingLength=b;for(var c=\\\"\\\",d=0;b>d;d++)c+=\\\"8\\\";this._bounding.textContent=c;var e=parseInt(getComputedStyle(this._card).fontSize,10),f=this._bounding.offsetWidth/e;this._inner.style.width=f+.1*(b-1)+\\\"em\\\"}},destroy:function(){return this._wrapper},getElement:function(){return this._wrapper},setValue:function(b){return b=this._transform(b),a.supportsAnimation()?this._frontValue?void(this._backValue&&this._backValue===b||this._frontValue===b||(this._backValue&&(this._bottom.textContent=this._backValue,this._front.textContent=this._backValue,this._frontValue=this._backValue),this._setBoundingForValue(b),this._top.textContent=b,this._back.textContent=b,this._backValue=b,a.triggerAnimation(this._inner,\\\"soon-flip-animate\\\"))):(this._bottom.textContent=b,this._front.textContent=b,this._frontValue=b,void this._setBoundingForValue(b)):(this._fallback.textContent=b,void this._setBoundingForValue(b))}},b}(B),C.Group=function(a){var b=function(a){this._wrapper=document.createElement(\\\"span\\\"),this._wrapper.className=\\\"soon-group \\\"+(a.className||\\\"\\\"),this._inner=document.createElement(\\\"span\\\"),this._inner.className=\\\"soon-group-inner\\\",this._wrapper.appendChild(this._inner),this._transform=a.transform||function(a){return a},this._presenters=a.presenters,this._presenterStorage=[]};return b.prototype={redraw:function(){for(var a=this._presenterStorage.length-1;a>=0;a--)this._presenterStorage[a].redraw()},destroy:function(){for(var a=this._presenterStorage.length-1;a>=0;a--)this._presenterStorage[a].destroy();return this._wrapper},getElement:function(){return this._wrapper},setValue:function(b){this._wrapper.setAttribute(\\\"data-value\\\",b),b=this._transform(b);for(var c,d=0,e=b instanceof Array,f=e?b.length:this._presenters.length;f>d;d++)c=this._presenterStorage[d],c||(c=a(this._presenters[d]),this._inner.appendChild(c.getElement()),this._presenterStorage[d]=c),c.setValue(e?b[d]:b)}},b}(s),C.Matrix=function(){var a={\\\"3x5\\\":{\\\" \\\":[[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],0:[[1,1,1],[1,0,1],[1,0,1],[1,0,1],[1,1,1]],1:[[1,1,0],[0,1,0],[0,1,0],[0,1,0],[0,1,0]],2:[[1,1,1],[0,0,1],[1,1,1],[1,0,0],[1,1,1]],3:[[1,1,1],[0,0,1],[1,1,1],[0,0,1],[1,1,1]],4:[[1,0,1],[1,0,1],[1,1,1],[0,0,1],[0,0,1]],5:[[1,1,1],[1,0,0],[1,1,1],[0,0,1],[1,1,1]],6:[[1,1,1],[1,0,0],[1,1,1],[1,0,1],[1,1,1]],7:[[1,1,1],[0,0,1],[0,0,1],[0,0,1],[0,0,1]],8:[[1,1,1],[1,0,1],[1,1,1],[1,0,1],[1,1,1]],9:[[1,1,1],[1,0,1],[1,1,1],[0,0,1],[1,1,1]]},\\\"5x7\\\":{\\\" \\\":[[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],0:[[0,1,1,1,0],[1,1,0,1,1],[1,1,0,1,1],[1,1,0,1,1],[1,1,0,1,1],[1,1,0,1,1],[0,1,1,1,0]],1:[[0,0,1,1,0],[0,1,1,1,0],[0,0,1,1,0],[0,0,1,1,0],[0,0,1,1,0],[0,0,1,1,0],[0,1,1,1,1]],2:[[0,1,1,1,0],[1,1,0,1,1],[0,0,0,1,1],[0,0,1,1,0],[0,1,1,0,0],[1,1,0,0,0],[1,1,1,1,1]],3:[[0,1,1,1,0],[1,1,0,1,1],[0,0,0,1,1],[0,0,1,1,0],[0,0,0,1,1],[1,1,0,1,1],[0,1,1,1,0]],4:[[0,0,1,1,1],[0,1,0,1,1],[1,1,0,1,1],[1,1,1,1,1],[0,0,0,1,1],[0,0,0,1,1],[0,0,0,1,1]],5:[[1,1,1,1,1],[1,1,0,0,0],[1,1,0,0,0],[1,1,1,1,0],[0,0,0,1,1],[1,1,0,1,1],[0,1,1,1,0]],6:[[0,1,1,1,0],[1,1,0,0,0],[1,1,1,1,0],[1,1,0,1,1],[1,1,0,1,1],[1,1,0,1,1],[0,1,1,1,0]],7:[[1,1,1,1,1],[0,0,0,1,1],[0,0,0,1,1],[0,0,1,1,0],[0,1,1,0,0],[1,1,0,0,0],[1,1,0,0,0]],8:[[0,1,1,1,0],[1,1,0,1,1],[1,1,0,1,1],[0,1,1,1,0],[1,1,0,1,1],[1,1,0,1,1],[0,1,1,1,0]],9:[[0,1,1,1,0],[1,1,0,1,1],[1,1,0,1,1],[1,1,0,1,1],[0,1,1,1,1],[0,0,0,1,1],[0,1,1,1,0]]}},b=function(){var b,c,d,e,f,g,h=[];for(d in a)if(a.hasOwnProperty(d)){for(b=a[d][0].length,c=a[d][0][0].length,g=\\\"\\\",e=0;b>e;e++){for(g+='',f=0;c>f;f++)g+='';g+=\\\"\\\"}h[d]=g}return h}(),c=function(a){this._wrapper=document.createElement(\\\"span\\\"),this._wrapper.className=\\\"soon-matrix \\\"+(a.className||\\\"\\\"),this._inner=document.createElement(\\\"span\\\"),this._inner.className=\\\"soon-matrix-inner\\\",this._wrapper.appendChild(this._inner),this._transform=a.transform||function(a){return a},this._value=[],this._type=-1!==a.modifiers.indexOf(\\\"3x5\\\")?\\\"3x5\\\":\\\"5x7\\\"};return c.prototype={redraw:function(){},destroy:function(){return this._wrapper},getElement:function(){return this._wrapper},_addChar:function(){var a=document.createElement(\\\"span\\\");return a.className=\\\"soon-matrix-char\\\",a.innerHTML=b[this._type],{node:a,ref:[]}},_updateChar:function(b,c){var d,e=a[this._type][c],f=e.length,g=e[0].length,h=0,i=b.ref;if(!i.length)for(var j=b.node.getElementsByClassName(\\\"soon-matrix-dot\\\");f>h;h++)for(i[h]=[],d=0;g>d;d++)i[h][d]=j[h*g+d];for(;f>h;h++)for(d=0;g>d;d++)i[h][d].setAttribute(\\\"data-state\\\",1===e[h][d]?\\\"1\\\":\\\"0\\\")},setValue:function(a){a=this._transform(a),a+=\\\"\\\",a=a.split(\\\"\\\");for(var b=0,c=a.length;c>b;b++){var d=this._value[b];d||(d=this._addChar(),this._inner.appendChild(d.node),this._value[b]=d),this._updateChar(d,a[b])}}},c}(),C.Repeater=function(a){var b=function(b){this._wrapper=document.createElement(\\\"span\\\"),this._wrapper.className=\\\"soon-repeater \\\"+(b.className||\\\"\\\"),this._delay=b.delay||0,this._transform=b.transform||function(a){return a},this._destroyed=!1,this._presenter=b.presenter,this._Presenter=a(this._presenter.type),this._prepend=\\\"undefined\\\"==typeof b.prepend?!0:b.prepend,this._presenterStorage=[]};return b.prototype={redraw:function(){for(var a=this._presenterStorage.length-1;a>=0;a--)this._presenterStorage[a].redraw()},destroy:function(){this._destroyed=!0;for(var a=this._presenterStorage.length-1;a>=0;a--)this._presenterStorage[a].destroy();return this._wrapper},getElement:function(){return this._wrapper},setValue:function(a){a=this._transform(a),a=a instanceof Array?a:[a],this._prepend&&a.reverse();for(var b,c,d,e=0,f=a.length,g=0,h=a.length!==this._wrapper.children.length;f>e;e++)b=this._presenterStorage[e],b||(b=new this._Presenter(this._presenter.options||{}),0!==this._wrapper.children.length&&this._prepend?this._wrapper.insertBefore(b.getElement(),this._wrapper.firstChild):this._wrapper.appendChild(b.getElement()),this._presenterStorage[e]=b,this._delay&&(g-=this._delay)),this._delay&&!h?(this._setValueDelayed(b,a[e],g),g+=this._delay):this._setValue(b,a[e],h);for(f=this._wrapper.children.length,d=e;f>e;e++)b=this._presenterStorage[e],c=b.destroy(),c.parentNode.removeChild(c),this._presenterStorage[e]=null;this._presenterStorage.length=d},_setValueDelayed:function(a,b,c,d){var e=this;setTimeout(function(){e._setValue(a,b,d)},c)},_setValue:function(a,b,c){c&&a.setValue(\\\" \\\"),a.setValue(b)}},b}(t),C.Ring=function(a,b){var c=function(b){this._wrapper=document.createElement(\\\"span\\\"),this._wrapper.className=\\\"soon-ring \\\"+(b.className||\\\"\\\"),this._transform=b.transform||function(a){return a},this._modifiers=b.modifiers,this._animate=b.animate,this._drawn=!1,this._canvas=document.createElement(\\\"canvas\\\"),this._wrapper.appendChild(this._canvas),this._style=document.createElement(\\\"span\\\"),this._style.className=\\\"soon-ring-progress\\\",this._style.style.visibility=\\\"hidden\\\",this._style.style.position=\\\"absolute\\\",this._wrapper.appendChild(this._style),this._current=0,this._target=null,this._destroyed=!1,this._lastTick=0,this._styles=null;var c=this;a.supportsAnimation()?window.requestAnimationFrame(function(a){c._tick(a)}):this._animate=!1};return c.prototype={destroy:function(){return this._destroyed=!0,b.deregister(this._resizeBind),this._wrapper},getElement:function(){return this._wrapper},_getModifier:function(a){for(var b=0,c=this._modifiers.length,d=null;c>b;b++)if(-1!==this._modifiers[b].indexOf(a)){d=this._modifiers[b];break}if(!d)return null;if(-1===d.indexOf(\\\"-\\\"))return!0;var e=d.split(\\\"-\\\");if(-1!==e[1].indexOf(\\\"_\\\")){var f=e[1].split(\\\"_\\\");return f[0]=\\\"#\\\"+f[0],f[1]=\\\"#\\\"+f[1],f}var g=parseFloat(e[1]);return isNaN(g)?e[1]:g/100},redraw:function(){var b=window.getComputedStyle(this._style);this._styles={offset:this._getModifier(\\\"offset\\\")||0,gap:this._getModifier(\\\"gap\\\")||0,length:this._getModifier(\\\"length\\\")||1,flip:this._getModifier(\\\"flip\\\")||!1,invert:this._getModifier(\\\"invert\\\")||null,align:\\\"center\\\",size:0,radius:0,padding:parseInt(b.getPropertyValue(\\\"padding-bottom\\\"),10)||0,cap:0===parseInt(b.getPropertyValue(\\\"border-top-right-radius\\\"),10)?\\\"butt\\\":\\\"round\\\",progressColor:{fill:b.getPropertyValue(\\\"color\\\")||\\\"#000\\\",gradient:{colors:this._getModifier(\\\"progressgradient\\\")||null,type:this._getModifier(\\\"progressgradienttype\\\")||\\\"follow\\\"}},progressWidth:parseInt(b.getPropertyValue(\\\"border-top-width\\\"),10)||2,progressShadow:a.getShadowProperties(b.getPropertyValue(\\\"text-shadow\\\")),ringColor:{fill:b.getPropertyValue(\\\"background-color\\\")||\\\"#fff\\\",gradient:{colors:this._getModifier(\\\"ringgradient\\\")||null,type:this._getModifier(\\\"ringgradienttype\\\")||\\\"follow\\\"}},ringWidth:parseInt(b.getPropertyValue(\\\"border-bottom-width\\\"),10)||2,ringShadow:a.getShadowProperties(b.getPropertyValue(\\\"box-shadow\\\"))};var c=this._canvas.getContext(\\\"2d\\\"),d=this._canvas.parentNode.clientWidth,e=a.getDevicePixelRatio(),f=a.getBackingStoreRatio(c),g=e/f,h=125>d?Math.min(1,.005*d):1;if(this._styles.ringWidth=Math.ceil(this._styles.ringWidth*h),this._styles.progressWidth=Math.ceil(this._styles.progressWidth*h),\\\"transparent\\\"===this._styles.ringColor.fill&&(this._styles.ringColor.fill=\\\"rgba(0,0,0,0)\\\"),\\\"transparent\\\"===this._styles.progressColor.fill&&(this._styles.progressColor.fill=\\\"rgba(0,0,0,0)\\\"),\\\"round\\\"===this._styles.cap&&-1===this._modifiers.join(\\\"\\\").indexOf(\\\"gap-\\\")&&(this._styles.gap=.5*(this._styles.ringWidth+this._styles.progressWidth)*.005),d){e!==f?(this._canvas.width=d*g,this._canvas.height=d*g,this._canvas.style.width=d+\\\"px\\\",this._canvas.style.height=d+\\\"px\\\",c.scale(g,g)):(this._canvas.width=d,this._canvas.height=d),this._styles.size=.5*d;var i=this._styles.size-this._styles.padding;this._styles.ringRadius=i-.5*this._styles.ringWidth,this._styles.progressRadius=i-.5*this._styles.progressWidth,this._styles.progressWidth===this._styles.ringWidth?this._styles.progressRadius=this._styles.ringRadius:this._styles.progressWidthc?1e3/c:30;if(this._lastTick=b,this._current===this._target&&this._drawn)return;this._current+=(this._target-this._current)/(d/3),Math.abs(this._current-this._target)<=.001&&(this._current=this._target)}else this._current=this._target;\\n var e=this._canvas.getContext(\\\"2d\\\");e.clearRect(0,0,this._canvas.width,this._canvas.height);var f=this._styles.flip?1-this._current:this._current;a.drawRing(e,f,this._styles.offset,this._styles.length,this._styles.gap,this._styles.size,this._styles.ringRadius,this._styles.ringWidth,this._styles.ringColor,this._styles.ringShadow,this._styles.progressRadius,this._styles.progressWidth,this._styles.progressColor,this._styles.progressShadow,this._styles.cap,this._styles.invert),this._drawn=!0},setValue:function(b){this._styles||this.redraw(),b=this._transform(b),this._target!==b&&(null==this._target&&(this._current=b),this._target=b),a.supportsAnimation()||(this._current=this._target,this._draw())}},c}(B,E),C.Slot=function(a){var b=function(a){this._forceReplace=\\\"undefined\\\"==typeof a.forceReplace?!1:a.forceReplace,this._wrapper=document.createElement(\\\"span\\\"),this._wrapper.className=\\\"soon-slot \\\"+(a.className||\\\"\\\"),this._transform=a.transform||function(a){return a},this._new=document.createElement(\\\"span\\\"),this._new.className=\\\"soon-slot-new\\\",this._old=document.createElement(\\\"span\\\"),this._old.className=\\\"soon-slot-old\\\",this._bounding=document.createElement(\\\"span\\\"),this._bounding.className=\\\"soon-slot-bounding\\\",this._inner=document.createElement(\\\"span\\\"),this._inner.className=\\\"soon-slot-inner soon-slot-animate\\\",this._inner.appendChild(this._old),this._inner.appendChild(this._new),this._inner.appendChild(this._bounding),this._wrapper.appendChild(this._inner),this._newValue=\\\"\\\",this._oldValue=\\\"\\\",this._boundingLength=0};return b.prototype={redraw:function(){},destroy:function(){return this._wrapper},getElement:function(){return this._wrapper},_isEmpty:function(){return!this._newValue},_isSame:function(a){return this._newValue===a},_setBoundingForValue:function(a){var b=(a+\\\"\\\").length;if(b!==this._boundingLength){this._boundingLength=b;for(var c=\\\"\\\",d=0;b>d;d++)c+=\\\"8\\\";this._bounding.textContent=c;var e=parseInt(getComputedStyle(this._wrapper).fontSize,10),f=this._bounding.offsetWidth/e;this._inner.style.width=f+.1*(b-1)+\\\"em\\\"}},_setNewValue:function(a){this._newValue=a,\\\" \\\"!==a&&(this._new.textContent=a)},_setOldValue:function(a){this._oldValue=a,this._old.textContent=a},setValue:function(b){b=this._transform(b),this._isEmpty()?(this._setNewValue(b),this._setBoundingForValue(b),a.triggerAnimation(this._inner,\\\"soon-slot-animate\\\")):this._isSame(b)&&!this._forceReplace||(this._newValue.length&&this._setOldValue(this._newValue),this._setNewValue(b),this._setBoundingForValue(b),a.triggerAnimation(this._inner,\\\"soon-slot-animate\\\"))}},b}(B),C.Text=function(a){var b=function(a){this._wrapper=document.createElement(\\\"span\\\"),this._wrapper.className=\\\"soon-text \\\"+(a.className||\\\"\\\"),this._transform=a.transform||function(a){return a}};return b.prototype={redraw:function(){},destroy:function(){return this._wrapper},getElement:function(){return this._wrapper},setValue:function(b){a.setTextContent(this._wrapper,this._transform(b))}},b}(B);var F=function(a,b){var c=function(a,c){c=c||{},this._rate=c.rate||1e3,this._offset=null,this._time=0,this._paused=!1,this._nextTickReference=null,this._tickBind=this._tick.bind(this),this._onTick=a||function(){},\\\"addEventListener\\\"in document&&document.addEventListener(b.documentVisibilityEvent,this)};return c.prototype={handleEvent:function(){b.isDocumentHidden()?this._lock():this._unlock()},isRunning:function(){return null!==this._offset},isPaused:function(){return this.isRunning()&&this._paused},start:function(){this.isRunning()||this.reset()},getTime:function(){return this._time},reset:function(){this.pause(),this._offset=(new Date).getTime(),this._time=0,this.resume()},stop:function(){var a=this;setTimeout(function(){a._clearTimer(),a._offset=null},0)},pause:function(){this._paused=!0,this._clearTimer()},resume:function(){if(this.isPaused()){this._paused=!1;var a=(new Date).getTime();this._time+=a-this._offset,this._offset=a,this._tick()}},_clearTimer:function(){clearTimeout(this._nextTickReference),this._nextTickReference=null},_lock:function(){this._clearTimer()},_unlock:function(){this.isPaused()||(this.pause(),this.resume())},_tick:function(){this._onTick(this._time),this._offset+=this._rate,this._time+=this._rate,this._nextTickReference=setTimeout(this._tickBind,this._offset-(new Date).getTime())}},c}(this,B),G=[],H=0,I=[\\\"xxl\\\",\\\"xl\\\",\\\"l\\\",\\\"m\\\",\\\"s\\\",\\\"xs\\\",\\\"xxs\\\"],J=3,K=(I.length,[]),L=[],M={y:{labels:\\\"Year,Years\\\",option:\\\"Years\\\",padding:\\\"\\\"},M:{labels:\\\"Month,Months\\\",option:\\\"Months\\\",padding:\\\"00\\\"},w:{labels:\\\"Week,Weeks\\\",option:\\\"Weeks\\\",padding:\\\"00\\\"},d:{labels:\\\"Day,Days\\\",option:\\\"Days\\\",padding:\\\"000\\\"},h:{labels:\\\"Hour,Hours\\\",option:\\\"Hours\\\",padding:\\\"00\\\"},m:{labels:\\\"Minute,Minutes\\\",option:\\\"Minutes\\\",padding:\\\"00\\\"},s:{labels:\\\"Second,Seconds\\\",option:\\\"Seconds\\\",padding:\\\"00\\\"},ms:{labels:\\\"Millisecond,Milliseconds\\\",option:\\\"Milliseconds\\\",padding:\\\"000\\\"}};E.register(d);var N=/([\\\\d]+)[\\\\s]+([a-z]+)/i,O=/([\\\\d]+)[:]*([\\\\d]{2})*[:]*([\\\\d]{2})*/;A.parse=function(a){w(a)},A.redraw=function(a){if(a){var b=j(a);f(b.node,b.presenter)}else g()},A.reset=function(a){var b=j(a);b&&b.ticker.reset()},A.freeze=function(a){var b=j(a);b&&b.ticker.pause()},A.unfreeze=function(a){var b=j(a);b&&b.ticker.resume()},A.setOption=function(a,b,c){var d=j(a);if(d){var e=d.options;e[b]=c,this.destroy(a),this.create(a,e)}},A.setOptions=function(a,b){var c=j(a);if(c){var d,e=c.options;for(d in b)b.hasOwnProperty(d)&&(e[d]=b[d]);this.destroy(a),this.create(a,b)}},A.destroy=function(a){var b=h(a);if(null!==b){var c=i(a);null!==c&&L.splice(c,1);var d=K[b];d.ticker&&d.ticker.stop(),d.presenter.destroy();var e=d.node.querySelector(\\\".soon-placeholder\\\");d.node.removeChild(e?e:d.node.querySelector(\\\".soon-group\\\")),a.removeAttribute(\\\"data-initialized\\\"),K.splice(b,1)}},A.create=function(a,b){if(!b)return w(a);if(\\\"true\\\"===a.getAttribute(\\\"data-initialized\\\"))return null;a.setAttribute(\\\"data-initialized\\\",\\\"true\\\");var c=null,d=null;b.eventComplete&&(c=\\\"string\\\"==typeof b.eventComplete?window[b.eventComplete]:b.eventComplete),b.eventTick&&(d=\\\"string\\\"==typeof b.eventTick?window[b.eventTick]:b.eventTick),b.due&&-1!==b.due.indexOf(\\\"reset\\\")&&(c=z(a,b,c),b.eventComplete=c),l(a,b,\\\"layout\\\"),l(a,b,\\\"face\\\"),l(a,b,\\\"visual\\\"),l(a,b,\\\"format\\\"),b.scaleMax&&a.setAttribute(\\\"data-scale-max\\\",b.scaleMax),b.scaleHide&&a.setAttribute(\\\"data-scale-hide\\\",b.scaleHide);var e,f,g,h=(b.format||\\\"d,h,m,s\\\").split(\\\",\\\"),i=-1===h.indexOf(\\\"ms\\\")?1e3:24,j={};for(e in M)M.hasOwnProperty(e)&&(f=M[e],g=(b[\\\"labels\\\"+f.option]||f.labels).split(\\\",\\\"),j[e]=g[0],j[e+\\\"_s\\\"]=g[1]||g[0]);var m=\\\"undefined\\\"==typeof b.padding?!0:b.padding,n={};for(e in M)M.hasOwnProperty(e)&&(f=M[e],m?(n[e]=y(e,h),null===n[e]&&(n[e]=f.padding),b[\\\"padding\\\"+f.option]&&(n[e]=b[\\\"padding\\\"+f.option])):n[e]=\\\"\\\");var p=(b.face||\\\"text \\\").split(\\\" \\\")[0],q=b.due?x(b.due):null,r=b.since?B.isoToDate(b.since):null,s=b.now?B.isoToDate(b.now):r?null:new Date,t={due:q,since:r,now:s,view:p,face:b.face,visual:b.visual||null,format:h,separator:b.separator||null,cascade:\\\"undefined\\\"==typeof b.cascade?!0:B.toBoolean(b.cascade),singular:b.singular,reflect:b.reflect||!1,chars:\\\"undefined\\\"==typeof b.separateChars?!0:B.toBoolean(b.separateChars),label:j,padding:n,callback:{onComplete:c||function(){},onTick:d||function(){}}};B.isSlow()&&(t.view=\\\"text\\\",t.reflect=!1,t.visual=null);var A=null,C=o(t,function(){A&&A.stop(),t.callback.onComplete()});k(a);var D=u(a,C);return A=v(a,D,i,b)};var P;!function(a){P=a()}(function(a){function b(a){for(n=1;a=d.shift();)a()}var c,d=[],e=!1,f=document,g=f.documentElement,h=g.doScroll,i=\\\"DOMContentLoaded\\\",j=\\\"addEventListener\\\",k=\\\"onreadystatechange\\\",l=\\\"readyState\\\",m=h?/^loaded|^c/:/^loaded|c/,n=m.test(f[l]);return f[j]&&f[j](i,c=function(){f.removeEventListener(i,c,e),b()},e),h&&f.attachEvent(k,c=function(){/^c/.test(f[l])&&(f.detachEvent(k,c),b())}),a=h?function(b){self!=top?n?b():d.push(b):function(){try{g.doScroll(\\\"left\\\")}catch(c){return setTimeout(function(){a(b)},50)}b()}()}:function(a){n?a():d.push(a)}}),P(function(){var a=document.querySelector(\\\"script[src*=soon]\\\");if(!a||\\\"false\\\"!==a.getAttribute(\\\"data-auto\\\"))for(var b=document.getElementsByClassName?document.getElementsByClassName(\\\"soon\\\"):document.querySelectorAll(\\\".soon\\\"),c=0,d=b.length;d>c;c++)w(b[c])}),function(a,b){\\\"use strict\\\";if(b){var c=[\\\"destroy\\\",\\\"reset\\\",\\\"resize\\\",\\\"freeze\\\",\\\"unfreeze\\\",\\\"redraw\\\"],d=c.length;b.fn.soon=function(){var b=this;b.create=function(b){return this.each(function(){a.create(this,b)})},b.setOption=function(b,c){return this.each(function(){a.setOption(this,b,c)})},b.setOptions=function(b){return this.each(function(){a.setOptions(this,b)})};for(var e=0;d>e;e++)!function(c){b[c]=function(){return this.each(function(){a[c](this)})}}(c[e]);return this}}}(A,b),\\\"undefined\\\"!=typeof module&&module.exports?module.exports=A:\\\"function\\\"==typeof define&&define.amd?define(function(){return A}):a.Soon=A}}(window,window.jQuery);\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/Vadim/Projects/Php/zakupki/node_modules/raw-loader!../vendor/soon-countdown/soon.1.9.0.min.js\n// module id = q/mW\n// module chunks = 6 7","(function (global, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(['module', 'select'], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(module, require('select'));\n } else {\n var mod = {\n exports: {}\n };\n factory(mod, global.select);\n global.clipboardAction = mod.exports;\n }\n})(this, function (module, _select) {\n 'use strict';\n\n var _select2 = _interopRequireDefault(_select);\n\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n }\n\n var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n var _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n\n var ClipboardAction = function () {\n /**\n * @param {Object} options\n */\n function ClipboardAction(options) {\n _classCallCheck(this, ClipboardAction);\n\n this.resolveOptions(options);\n this.initSelection();\n }\n\n /**\n * Defines base properties passed from constructor.\n * @param {Object} options\n */\n\n\n _createClass(ClipboardAction, [{\n key: 'resolveOptions',\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this.action = options.action;\n this.container = options.container;\n this.emitter = options.emitter;\n this.target = options.target;\n this.text = options.text;\n this.trigger = options.trigger;\n\n this.selectedText = '';\n }\n }, {\n key: 'initSelection',\n value: function initSelection() {\n if (this.text) {\n this.selectFake();\n } else if (this.target) {\n this.selectTarget();\n }\n }\n }, {\n key: 'selectFake',\n value: function selectFake() {\n var _this = this;\n\n var isRTL = document.documentElement.getAttribute('dir') == 'rtl';\n\n this.removeFake();\n\n this.fakeHandlerCallback = function () {\n return _this.removeFake();\n };\n this.fakeHandler = this.container.addEventListener('click', this.fakeHandlerCallback) || true;\n\n this.fakeElem = document.createElement('textarea');\n // Prevent zooming on iOS\n this.fakeElem.style.fontSize = '12pt';\n // Reset box model\n this.fakeElem.style.border = '0';\n this.fakeElem.style.padding = '0';\n this.fakeElem.style.margin = '0';\n // Move element out of screen horizontally\n this.fakeElem.style.position = 'absolute';\n this.fakeElem.style[isRTL ? 'right' : 'left'] = '-9999px';\n // Move element to the same position vertically\n var yPosition = window.pageYOffset || document.documentElement.scrollTop;\n this.fakeElem.style.top = yPosition + 'px';\n\n this.fakeElem.setAttribute('readonly', '');\n this.fakeElem.value = this.text;\n\n this.container.appendChild(this.fakeElem);\n\n this.selectedText = (0, _select2.default)(this.fakeElem);\n this.copyText();\n }\n }, {\n key: 'removeFake',\n value: function removeFake() {\n if (this.fakeHandler) {\n this.container.removeEventListener('click', this.fakeHandlerCallback);\n this.fakeHandler = null;\n this.fakeHandlerCallback = null;\n }\n\n if (this.fakeElem) {\n this.container.removeChild(this.fakeElem);\n this.fakeElem = null;\n }\n }\n }, {\n key: 'selectTarget',\n value: function selectTarget() {\n this.selectedText = (0, _select2.default)(this.target);\n this.copyText();\n }\n }, {\n key: 'copyText',\n value: function copyText() {\n var succeeded = void 0;\n\n try {\n succeeded = document.execCommand(this.action);\n } catch (err) {\n succeeded = false;\n }\n\n this.handleResult(succeeded);\n }\n }, {\n key: 'handleResult',\n value: function handleResult(succeeded) {\n this.emitter.emit(succeeded ? 'success' : 'error', {\n action: this.action,\n text: this.selectedText,\n trigger: this.trigger,\n clearSelection: this.clearSelection.bind(this)\n });\n }\n }, {\n key: 'clearSelection',\n value: function clearSelection() {\n if (this.trigger) {\n this.trigger.focus();\n }\n\n window.getSelection().removeAllRanges();\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.removeFake();\n }\n }, {\n key: 'action',\n set: function set() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'copy';\n\n this._action = action;\n\n if (this._action !== 'copy' && this._action !== 'cut') {\n throw new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"');\n }\n },\n get: function get() {\n return this._action;\n }\n }, {\n key: 'target',\n set: function set(target) {\n if (target !== undefined) {\n if (target && (typeof target === 'undefined' ? 'undefined' : _typeof(target)) === 'object' && target.nodeType === 1) {\n if (this.action === 'copy' && target.hasAttribute('disabled')) {\n throw new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\n }\n\n if (this.action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {\n throw new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');\n }\n\n this._target = target;\n } else {\n throw new Error('Invalid \"target\" value, use a valid Element');\n }\n }\n },\n get: function get() {\n return this._target;\n }\n }]);\n\n return ClipboardAction;\n }();\n\n module.exports = ClipboardAction;\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/Vadim/Projects/Php/zakupki/node_modules/clipboard/lib/clipboard-action.js\n// module id = qqFi\n// module chunks = 7","import '@fancyapps/fancybox';\nimport '@fancyapps/fancybox/dist/jquery.fancybox.css';\n\n$.fancybox.defaults.i18n.ru = {\n\tCLOSE: 'Закрыть',\n\tNEXT: 'Следующий',\n\tPREV: 'Предыдущий',\n\tERROR: 'Не удалось загрузить содержимое
Пожалуйста, попробуйте позже.',\n\tPLAY_START: 'Начать слайдшоу',\n\tPLAY_STOP: 'Остановить слайдшоу',\n\tFULL_SCREEN: 'На весь экран',\n\tTHUMBS: 'Предпросмотр'\n};\n\n$.fancybox.defaults.lang = LANG;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/fancybox/index.js","/* Copy-paste of Vadim's extension*/\n\nimport $ from 'jquery';\n\n/**\n * This is simple plugin that checks when window is scrolled\n * to the bottom of the element and fires event in this case\n */\nexport class InfiniteScroll {\n\t_$el;\n\t_$window;\n\t_eventHandler;\n\t_needMore;\n\n\t_clNeedMore = $.Callbacks();\n\n\tconstructor(element, options) {\n\t\tthis._$el = $(element);\n\t\tthis._$window = $(window);\n\t\tthis._o = {\n\t\t\t/**\n\t\t\t * If distance in pixels between bottom of the window and bottom of the element\n\t\t\t * becomes less than this value - event is fired\n\t\t\t */\n\t\t\tdistance: 500,\n\t\t\t/**\n\t\t\t * Event handler\n\t\t\t */\n\t\t\tonNeedMore: null,\n\n\t\t\t...options\n\t\t};\n\t\tif(this._o.onNeedMore) {\n\t\t\tthis._clNeedMore.add(this._o.onNeedMore);\n\t\t}\n\t}\n\n\t/**\n\t * Subscribe to needed events and start monitoring\n\t */\n\ton() {\n\t\tif (this._eventHandler) {\n\t\t\treturn;\n\t\t}\n\t\tthis._eventHandler = this.update.bind(this);\n\t\tthis._$window.on('scroll resize', this._eventHandler);\n\t\tthis.update();\n\t}\n\n\t/**\n\t * Unsubscribe from all events and stop monitoring\n\t */\n\toff() {\n\t\tif (!this._eventHandler) {\n\t\t\treturn;\n\t\t}\n\t\tthis._$window.off('scroll resize', this._eventHandler);\n\t\tthis._eventHandler = null;\n\t}\n\n\t/**\n\t * Manual update. Event will be fired immediately if needed.\n\t */\n\tupdate(checkVisible = true) {\n\t\tif(checkVisible && !this._$el.is(':visible')) {\n\t\t\treturn;\n\t\t}\n\t\tconst blockEnd = this._$el.offset().top + this._$el.outerHeight();\n\t\tconst windowHeight = this._$window.height();\n\t\tconst windowScrollTop = this._$window.scrollTop();\n\t\tlet isNearBottom = blockEnd < windowScrollTop + windowHeight + this._o.distance;\n\n\t\tif(isNearBottom != this._needMore) {\n\t\t\tthis._needMore = isNearBottom;\n\n\t\t\tif(isNearBottom) {\n\t\t\t\tthis._clNeedMore.fireWith(this._$el[0], [this._loadedMoreCallback.bind(this)]);\n\t\t\t}\n\t\t}\n\t}\n\n /**\n\t * Change internal state in response to loaded more event\n */\n _loadedMoreCallback() {\n \tthis._needMore = false;\n\t}\n\n\t/**\n\t * Add event handler\n\t * @param callback\n\t */\n\tonNeedMore(callback) {\n\t\tthis._clNeedMore.add(callback);\n\t}\n\n\t/**\n\t * Remove event handler\n\t * @param callback\n\t */\n\toffNeedMore(callback) {\n\t\tthis._clNeedMore.remove(callback);\n\t}\n}\n\n$.fn.zInfiniteScroll = function (options) {\n\tlet o = $.extend({\n\t\tfetch: null,\n\t\tclear: null,\n\t\tshow: null,\n\t\tenabled: null,\n\t\tfinished: null,\n getCurrentCount: null,\n countPerPage: null,\n totalCount: Number.MAX_VALUE,\n\t\tselector: '*',\n\t\tbtnShowMore: null,\n\t\tloading: null,\n\t\tmaxAutoloadPages: null,\n\t\tcheckViewport: true,\n\t\tautoStart: true\n\t}, options);\n\n\tlet $wrapper = $(this);\n\tlet $window = $(window);\n\tlet $btnShowMore = $(o.btnShowMore);\n\tlet $loading = $(o.loading);\n\tlet getCurrentCount = $.isFunction(o.getCurrentCount)\n\t\t? o.getCurrentCount : () => $wrapper.children(o.selector).length;\n let currentPage = (o.countPerPage === null) ? 1 : () => { return getCurrentCount() / o.countPerPage; };\n\tlet inProgress = false;\n\tlet isReloading = false;\n\tlet finished = false;\n\tlet t = new Throttler(50);\n\n\t$btnShowMore.click(function () {\n\t\t$btnShowMore.hide();\n\t\tloadMore(function (hasMore) {\n\t\t\tif (hasMore) {\n\t\t\t\t$btnShowMore.show();\n\t\t\t}\n\t\t});\n\t});\n\n\to.totalCount = +o.totalCount;\n\to.maxAutoloadPages = +o.maxAutoloadPages;\n\n\tif (o.autoStart) {\n\t\tif (getCurrentCount() < o.totalCount) {\n\t\t\tstart();\n\t\t} else {\n\t\t\tfinished = true;\n\t\t\tif ($.isFunction(o.finished)) {\n\t\t\t\to.finished();\n\t\t\t}\n\t\t}\n\t}\n\n\treturn {\n\t\ton: function () {\n\t\t\tfinished = false;\n\t\t\tif (getCurrentCount() < o.totalCount) {\n\t\t\t\tstart();\n\t\t\t} else {\n\t\t\t\tfinished = true;\n\t\t\t\tif ($.isFunction(o.finished)) {\n\t\t\t\t\to.finished();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\toff: function () {\n\t\t\tstop();\n\t\t\tfinished = true;\n\t\t},\n\t\treload: function () {\n finished = false;\n if(!$.isFunction(currentPage)) {\n currentPage = 0;\n }\n o.totalCount = Number.MAX_VALUE;\n\n if($.isFunction(o.clear)) {\n \to.clear();\n\t\t\t} else {\n $wrapper.children(o.selector).remove();\n\t\t\t}\n\n\t\t\tif(inProgress) {\n \tisReloading = true;\n\t\t\t} else {\n\t\t\t\tloadRoutine();\n\t\t\t}\n }\n\t};\n\n\tfunction start() {\n\t\tif (!finished) {\n\t\t\t$window.on('scroll', onScroll);\n\t\t}\n\t}\n\n\tfunction stop() {\n\t\t$window.off('scroll', onScroll);\n\t}\n\n\tfunction onScroll() {\n\t\tif ((unwrap(o.enabled) === false) || inProgress || !t.ready() || !$wrapper.is(':visible')) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet blockEnd = $wrapper.offset().top + $wrapper.height();\n\t\tlet windowHeight = $window.height();\n\t\tlet windowScrollTop = $window.scrollTop();\n\t\tlet isNearBottom = blockEnd < windowScrollTop + windowHeight + 500;\n\t\tlet isInViewport = !o.checkViewport || blockEnd > windowScrollTop + 50;\n\t\tlet ready = isNearBottom && isInViewport;\n\n\t\tif (ready) {\n loadRoutine();\n\t\t}\n\t}\n\n\tfunction loadRoutine() {\n stop();\n loadMore(function () {\n let needMore = getCurrentCount() < o.totalCount;\n if (needMore) {\n if (!o.maxAutoloadPages || unwrap(currentPage) < o.maxAutoloadPages) {\n t.reset();\n start();\n } else {\n $btnShowMore.show();\n }\n } else {\n \tfinished = true;\n \tif ($.isFunction(o.finished)) {\n \to.finished();\n \t}\n }\n });\n }\n\n\tfunction loadMore(callback) {\n\t\tif (inProgress) {\n\t\t\treturn;\n\t\t}\n\t\tinProgress = true;\n\t\t$loading.show();\n\n\t\to.fetch(unwrap(currentPage) + 1, function ($blocks) {\n\t\t\tif(isReloading) {\n isReloading = false;\n inProgress = false;\n\n loadRoutine();\n return;\n\t\t\t}\n\t\t\tlet count = 0;\n\t\t\tif ($.isFunction(o.show)) {\n\t\t\t\tcount = o.show($blocks);\n\t\t\t} else {\n\t\t\t\t$blocks.addClass('fadein');\n\t\t\t\t$wrapper.append($blocks);\n\t\t\t\tcount = $blocks.length;\n\t\t\t}\n\n if(!$.isFunction(currentPage)) {\n currentPage++;\n }\n\t\t\tinProgress = false;\n\t\t\t$loading.hide();\n\n\t\t\tif ((count === 0) || (o.countPerPage !== null && count < o.countPerPage)) {\n\t\t\t\t// force stop because no more data on server\n\t\t\t\to.totalCount = getCurrentCount();\n\t\t\t}\n\n\t\t\tcallback();\n\t\t});\n\t}\n};\n\nfunction unwrap(value) {\n\treturn $.isFunction(value) ? value() : value;\n}\n\nclass Throttler {\n\tconstructor(period) {\n\t\tthis.period = +period;\n\t\tthis.start = +new Date();\n\t}\n\n\tready() {\n\t\tlet ready = (+new Date()) - this.start >= this.period;\n\t\tif (ready) {\n\t\t\tthis.reset();\n\t\t}\n\t\treturn ready;\n\t};\n\n\treset() {\n\t\tthis.start = +new Date();\n\t};\n}\n\n\n\n// WEBPACK FOOTER //\n// ./lib/zinfinitescroll/index.js","var closest = require('./closest');\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction _delegate(element, selector, type, callback, useCapture) {\n var listenerFn = listener.apply(this, arguments);\n\n element.addEventListener(type, listenerFn, useCapture);\n\n return {\n destroy: function() {\n element.removeEventListener(type, listenerFn, useCapture);\n }\n }\n}\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element|String|Array} [elements]\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction delegate(elements, selector, type, callback, useCapture) {\n // Handle the regular Element usage\n if (typeof elements.addEventListener === 'function') {\n return _delegate.apply(null, arguments);\n }\n\n // Handle Element-less usage, it defaults to global delegation\n if (typeof type === 'function') {\n // Use `document` as the first parameter, then apply arguments\n // This is a short way to .unshift `arguments` without running into deoptimizations\n return _delegate.bind(null, document).apply(null, arguments);\n }\n\n // Handle Selector-based usage\n if (typeof elements === 'string') {\n elements = document.querySelectorAll(elements);\n }\n\n // Handle Array-like based usage\n return Array.prototype.map.call(elements, function (element) {\n return _delegate(element, selector, type, callback, useCapture);\n });\n}\n\n/**\n * Finds closest match and invokes callback.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Function}\n */\nfunction listener(element, selector, type, callback) {\n return function(e) {\n e.delegateTarget = closest(e.target, selector);\n\n if (e.delegateTarget) {\n callback.call(element, e);\n }\n }\n}\n\nmodule.exports = delegate;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/Vadim/Projects/Php/zakupki/node_modules/delegate/src/delegate.js\n// module id = wYtf\n// module chunks = 7"],"sourceRoot":""}