From ebe20c96ff7b46f74dacb6e3c3c3207349505145 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Radek=20=C5=A0er=C3=BD?= Date: Fri, 2 Mar 2018 10:28:59 +0100 Subject: [PATCH] =?UTF-8?q?-=20**BC=20break:**=20p=C5=99i=20pou=C5=BEit?= =?UTF-8?q?=C3=AD=20metody=20`setOptions`=20s=20parametrem=20`options`=20j?= =?UTF-8?q?e=20nov=C4=9B=20nutn=C3=A9=20poslat=20jako=20druh=C3=BD=20param?= =?UTF-8?q?etr=20`true`=20pro=20rozli=C5=A1en=C3=AD=20mezi=20skute=C4=8Dn?= =?UTF-8?q?=C3=BDm=20options=20a=20contextem=20-=20do=20callbacku=20`onLoa?= =?UTF-8?q?d`=20se=20p=C5=99ed=C3=A1v=C3=A1=20element,=20kter=C3=BD=20otev?= =?UTF-8?q?=C5=99el=20pdbox,=20stejn=C4=9B=20jako=20do=20ostatn=C3=ADch=20?= =?UTF-8?q?callback=C5=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 +++- bower.json | 2 +- dist/js/jquery.pdbox.js | 24 +++++++++++++----------- dist/js/jquery.pdbox.min.js | 4 ++-- package.json | 2 +- src/js/jquery.pdbox.js | 32 ++++++++++++++++++++++---------- 6 files changed, 42 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index 6111d12..1f027fc 100644 --- a/README.md +++ b/README.md @@ -17,11 +17,13 @@ $ cat bower.json ## Changelog -### v1.1.2 draft +### v1.2.0 +- **BC break:** při použití metody `setOptions` s parametrem `options` je nově nutné poslat jako druhý parametr `true` pro rozlišení mezi skutečným options a contextem - oprava autora v `package.json` - při použití metody `openHtml` opraveno probliknutí spinneru na pozadí - při použití metody `openUrl` je možno předat element, ze kterého se přeberou options (napr. odkaz, na který se kliklo) - oprava [#9](https://github.com/peckadesign/jquery.pdbox/issues/9) +- do callbacku `onLoad` se předává element, který otevřel pdbox, stejně jako do ostatních callbacků ### v1.1.1 - oprava [#8](https://github.com/peckadesign/jquery.pdbox/issues/8) diff --git a/bower.json b/bower.json index ff8a80c..331e762 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "jquery.pdbox", - "version": "1.1.2-draft", + "version": "1.2.0", "homepage": "https://github.com/peckadesign/jquery.pdbox", "authors": [ "PeckaDesign, s.r.o " diff --git a/dist/js/jquery.pdbox.js b/dist/js/jquery.pdbox.js index b673134..6ae7e5f 100644 --- a/dist/js/jquery.pdbox.js +++ b/dist/js/jquery.pdbox.js @@ -6,7 +6,7 @@ * @copyright Copyright (c) 2014-2018 PeckaDesign, s.r.o * @license MIT * - * @version 1.1.2-draft + * @version 1.2.0 */ $.pdBox = (function () { @@ -117,7 +117,7 @@ $.pdBox = (function () { "
" + "

" + "
" + - (box.isAjax ? "
" : "") + + (box.isAjax ? "
" : "") + "
" + "

" + " " + box.langs[box.options.lang]["prev"] + "" + @@ -127,7 +127,7 @@ $.pdBox = (function () { "

" + "

" + "
" + - box.spinnerHtml + + box.spinnerHtml + " " + box.langs[box.options.lang]["close"] + "" + "
" + ""; @@ -224,9 +224,10 @@ $.pdBox = (function () { * Nastaví vlastnosti pdboxu v pořadí defaults, nastavení z inicializace, nastavení z data atributů elementu, * který tb otevřel. Pokud je předán atribut options, použije se nsatavení z tohoto atributu. * - * @param options + * @param options předané options + * @param isOptions flag, zda jde opravdu o options a ne kontext předaný z onLoad callbacku */ - PdBox.prototype.setOptions = function (options) { + PdBox.prototype.setOptions = function (options, isOptions) { var e; var optName; var dataName; @@ -238,7 +239,7 @@ $.pdBox = (function () { // slouží k ad-hoc handlerům, proto můžeme smazat for (e in events) { - optName = getEventOptName(events[e]); + optName = getEventOptName(events[e]); this.options[optName] = null; } @@ -261,12 +262,13 @@ $.pdBox = (function () { $.extend(this.options, elOptions); } - if (options) { + // pokud byly předány options, ověříme, že jde skutečně o options a ne o context předaný v rámci onLoad callbacku + if (options && isOptions) { $.extend(this.options, options); } this.rootElem - // odstraníme všechny class krom "pdbox" a případné "pdbox--loading" + // odstraníme všechny class krom "pdbox" a případné "pdbox--loading" .removeClass(function(i, className) { var list = className.split(' '); return list.filter(function(val){ @@ -360,7 +362,7 @@ $.pdBox = (function () { this.window.title.hide(); } - this.dispatchEvent('load', {content: html}); + this.dispatchEvent('load', {element: $el, content: html}); }; PdBox.prototype.openUrl = function (href, $el) { @@ -371,7 +373,7 @@ $.pdBox = (function () { success: $.proxy(function (content) { this.window.descWrap.show(); this.window.desc.html(content); - this.dispatchEvent('load', {content: content}); + this.dispatchEvent('load', {element: $el, content: content}); }, this) }); }; @@ -562,7 +564,7 @@ $.pdBox = (function () { } if (e.type === 'load') { - box.dispatchEvent('load', {content: preloader}); + box.dispatchEvent('load', {element: $el, content: preloader}); } }); diff --git a/dist/js/jquery.pdbox.min.js b/dist/js/jquery.pdbox.min.js index 99953b6..9565fd3 100644 --- a/dist/js/jquery.pdbox.min.js +++ b/dist/js/jquery.pdbox.min.js @@ -1,3 +1,3 @@ -/*! jQuery pdBox 1.1.2-draft | MIT | PeckaDesign, s.r.o, https://github.com/peckadesign/jquery.pdbox */ +/*! jQuery pdBox 1.2.0 | MIT | PeckaDesign, s.r.o, https://github.com/peckadesign/jquery.pdbox */ -$.pdBox=function(){function a(a){a=a||{},this.defaults={},this.defaults.width=p.width,this.defaults.className=p.className,a.width&&(this.defaults.width=a.width),a.className&&(this.defaults.className+=" "+a.className),this.options=$.extend({},p,a),a.template&&(this.options.template=a.template.toString()),"object"==typeof a.langs?this.langs=$.extend({},q,a.langs):this.langs=q,this.options.lang in this.langs||(this.options.lang="en"),this.isOpen=!1,this.setOnOpenOptions=!1,this.isAjax=a.isAjax||!1,this.isInner=a.isInner||!1,this.events={},this.overlay=null,this.rootElem={},this.window={},this.$doc=$(document),this.$body=$("body"),this.$html=$("html"),this.spinnerHtml=a.spinnerHtml||"",this.html="function"==typeof a.template?a.template(this):b(this),this.$el=null;var c="";for(var d in r){if(c=v(r[d]),"object"==typeof a[c])for(fn in a[c])a[c].hasOwnProperty(fn)&&"function"==typeof a[c][fn]&&this.addEventListener(r[d],a[c][fn]);else"function"==typeof a[c]&&this.addEventListener(r[d],a[c]);this.options[c]=void 0}this.addEventListener("load",function(){this.rootElem.removeClass("pdbox--loading")}),this.addEventListener("afterOpen",i),this.addEventListener("load",i),l()}function b(a){return $content="
\t
\t\t

\t\t
"+(a.isAjax?"
":"")+"\t\t
\t\t

\t\t\t"+a.langs[a.options.lang].prev+"\t\t\t\t\t\t"+a.langs[a.options.lang].of+"\t\t\t"+a.langs[a.options.lang].next+"\t\t

\t\t

\t\t
"+a.spinnerHtml+"\t\t "+a.langs[a.options.lang].close+"\t
",$content}function c(a){a.rootElem=$('
'),a.rootElem.html(a.html).prependTo(a.$body),a.window.elem=a.rootElem.find(".pdbox__window"),a.window.close=a.window.elem.find(".pdbox__close"),a.window.title=a.window.elem.find(".pdbox__title"),a.window.content=a.window.elem.find(".pdbox__content"),a.window.descWrap=a.window.elem.find(".pdbox__desc"),a.window.desc=a.window.elem.find(".pdbox__snippet"),a.window.desc.length||(a.window.desc=a.window.descWrap),a.window.pager={elem:a.window.elem.find(".pdbox__pager"),pages:a.window.elem.find(".pdbox__pages"),pagesSummary:a.window.elem.find(".pdbox__pages-summary"),activePage:a.window.elem.find(".pdbox__active-page"),pagesCount:a.window.elem.find(".pdbox__pages-count"),prev:a.window.elem.find(".pdbox__page--prev"),next:a.window.elem.find(".pdbox__page--next"),thumbnails:a.window.elem.find(".pdbox__pager--thumbnails")},a.window.image=a.window.elem.find(".pdbox__image"),$(document).on("click.pdbox",".pdbox__close, .pdbox__close--alternative",$.proxy(o,a)),a.$doc.on("keyup.pdbox",$.proxy(g,a)),a.window.image.on("click.pdbox",$.proxy(function(a){this.close(),a.preventDefault()},a))}function d(a){a.window.close.off(),a.window.pager.next.off(),a.window.pager.prev.off(),a.window.pager.pages.find("a").off(),a.window.pager.thumbnails.off(),a.window.image.off(),a.overlay.off(),a.$doc.off("keyup.pdbox"),a.rootElem.remove()}function e(a,b,c){var d=b.data("rel");if(d){var e=$(c),g=$([]),i=e.filter('[data-rel="'+d+'"]'),j="";if(i.each(function(a){j+=" "+(a+1)+" "}),a.window.pager.pages.empty().append(j),a.options.imageThumbnails){var k="";i.each(function(a){k+="
  • "}),a.window.pager.thumbnails.append($('
      ')).find(".pdbox__thumbnail-list").append(k),a.window.pager.thumbnails.show(),g=a.window.pager.thumbnails.find("a")}else a.window.pager.thumbnails.hide();$numbers=a.window.pager.pages.find("a"),$numbers.on("click.pdbox",function(b){var c=$(this),d=$numbers.index(this);$numbers.removeClass("pdbox__page--active"),c.addClass("pdbox__page--active"),g.length&&(g.removeClass("pdbox__thumbnail-link--active"),g.eq(d).addClass("pdbox__thumbnail-link--active")),a.window.pager.activePage.text(d+1),0===d?a.window.pager.prev.addClass("pdbox__page--disabled"):a.window.pager.prev.removeClass("pdbox__page--disabled"),d===$numbers.length-1?a.window.pager.next.addClass("pdbox__page--disabled"):a.window.pager.next.removeClass("pdbox__page--disabled"),f(a,this.href,i.eq(d)),b.preventDefault()}).eq(i.index(b)).trigger("click.pdbox"),g.length&&g.on("click.pdbox",function(a){a.preventDefault(),$numbers.eq(g.index(this)).trigger("click.pdbox")}),a.window.pager.prev.on("click.pdbox",function(b){b.preventDefault(),a.window.pager.pages.find(".pdbox__page--active").prev().trigger("click.pdbox")}),a.window.pager.next.on("click.pdbox",function(b){b.preventDefault(),a.window.pager.pages.find(".pdbox__page--active").next().trigger("click.pdbox")}),a.$doc.on("keyup.pdbox",$.proxy(h,a)),$numbers.length>1&&(a.window.pager.elem.show(),a.window.pager.pagesCount.text($numbers.length))}}function f(a,b,c){var d=$("img",c),e=d.attr("alt")||c.attr("title"),f=d.attr("title")||"";a.rootElem.addClass("pdbox--loading"),e?a.window.title.show().text(e):a.window.title.hide(),f?(a.window.descWrap.show(),a.window.desc.html("

      "+f+"

      ")):a.window.descWrap.hide();var g=c.data("pdbox-video");preloader=document.createElement(g?"iframe":"img"),$(preloader).on("load insert",function(b){(!g&&"load"===b.type||g&&"insert"===b.type)&&a.window.image[g?"addClass":"removeClass"]("pdbox__video").html(this).show(),"load"===b.type&&a.dispatchEvent("load",{content:preloader})}),$(preloader).attr("src",b),g&&$(preloader).attr({allowfullscreen:!0,width:a.options.width,height:a.options.width/(16/9)}).triggerHandler("insert")}function g(a){27===a.which&&this.close()}function h(a){37===a.which?this.window.pager.prev.not(".pdbox__page--disabled").trigger("click"):39===a.which&&this.window.pager.next.not(".pdbox__page--disabled").trigger("click"),a.preventDefault()}function i(){this.isBodyOverflowing?this.$body.addClass("pdbox-open--scrollbar-offset"):k(this)?this.window.elem.addClass("pdbox__window--scrollbar-offset"):this.window.elem.removeClass("pdbox__window--scrollbar-offset")}function j(){var a=document.body.getBoundingClientRect();return a.left+a.rightdocument.documentElement.clientHeight}function l(){var a=document.createElement("style");document.head.appendChild(a);var b=a.sheet;b.insertRule(":root { --pdbox-scrollbar-width:"+m()+"px; }",b.cssRules.length)}function m(){var a=document.createElement("p");a.style.width="100%",a.style.height="200px";var b=document.createElement("div");b.style.position="absolute",b.style.top="0px",b.style.left="0px",b.style.visibility="hidden",b.style.width="200px",b.style.height="150px",b.style.overflow="hidden",b.appendChild(a),document.body.appendChild(b);var c=a.offsetWidth;b.style.overflow="scroll";var d=a.offsetWidth;return c===d&&(d=b.clientWidth),document.body.removeChild(b),c-d}function n(a){a.overlay=$('
      ').prependTo(a.rootElem)}function o(a){var b=$(a.target).closest("a");(a.target===this.window.elem[0]||this.window.elem.has(a.target).length&&(b.hasClass("pdbox__close")||b.hasClass("pdbox__close--alternative")))&&(this.close(),a.preventDefault())}var p={width:900,className:"",lang:$("html").attr("lang")||"cs"},q={cs:{close:"Zavřít",prev:"Předchozí",next:"Další",of:"/"},sk:{close:"Zavrieť",prev:"Predchádzajúca",next:"Ďalšie",of:"/"},en:{close:"Close",prev:"Previous",next:"Next",of:"/"},de:{close:"Zumachen",prev:"Vorige",next:"Folgend",of:"/"},es:{close:"Vaer",prev:"Previo",next:"Siguiente",of:"/"},fr:{close:"Fermer",prev:"Précédant",next:"Suivant",of:"/"},it:{close:"Chiudere",prev:"Previo",next:"Veniente",of:"/"},ru:{close:"закрыть",prev:"Предшествующий",next:"Последующий",of:"/"}},r=["beforeOpen","afterOpen","load","beforeClose","afterClose"];a.prototype.open=function(a,b,d){this.$el=a,this.isOpen?this.removeEventListener("load",this.setOptions):(this.isOpen=!0,this.setOnOpenOptions=!0,this.isBodyOverflowing=j(),this.dispatchEvent("beforeOpen",{element:a}),c(this),n(this),d||this.rootElem.addClass("pdbox--loading"),this.isInner&&this.rootElem.addClass("pdbox--inner"),this.setOptions(),this.setOnOpenOptions=!1),this.addEventListener("load",this.setOptions),this.window.elem.on("click",$.proxy(o,this)),this.$body.addClass("pdbox-open"),this.window.pager.elem.hide(),this.window.pager.thumbnails.hide(),this.window.image.hide(),this.window.title.hide(),void 0!==a&&void 0!==b&&a.is(":not(.ajax)")&&e(this,a,b),this.dispatchEvent("afterOpen",{element:a})},a.prototype.close=function(){if(this.isOpen){this.isOpen=!1,this.$el=null,this.removeEventListener("load",this.setOptions),this.rootElem.addClass("pdbox--closing"),this.dispatchEvent("beforeClose"),this.window.elem.off();var a=parseInt(getComputedStyle(this.rootElem[0]).getPropertyValue("--pdbox-closing-duration")||0),b=this;setTimeout(function(){d(b),b.isInner||b.$body.removeClass("pdbox-open pdbox-open--scrollbar-offset"),b.dispatchEvent("afterClose")},a)}},a.prototype.content=function(a){if(void 0===a){var b=this.window.elem.clone();return b.find(".ajax-overlay, .ajax-loader").remove(),b.html()}this.window.elem.html(a),this.window.content=this.window.elem.find(".pdbox__content")},a.prototype.setOptions=function(a){var b,c,d;if(this.setOnOpenOptions){$.extend(this.options,this.defaults);for(b in r)c=v(r[b]),this.options[c]=null}if(this.$el){var e={};e.width=this.$el.data("pdboxWidth"),e.className=this.$el.data("pdboxClassName")?this.$el.data("pdboxClassName")+" "+this.defaults.className:this.defaults.className;for(b in r)d=u(r[b]),c=v(r[b]),e[c]=this.$el.data(d);$.extend(this.options,e)}a&&$.extend(this.options,a),this.rootElem.removeClass(function(a,b){return b.split(" ").filter(function(a){return"pdbox"!==a&&"pdbox--loading"!==a}).join(" ")}).addClass("pdbox").addClass(this.options.className),this.window.content.css({"max-width":this.options.width+"px"})};var s=function(a){a in this.events||(this.events[a]=[])};a.prototype.addEventListener=function(a,b){s.call(this,a),this.events[a].push(b)},a.prototype.removeEventListener=function(a,b){s.call(this,a),void 0===a?this.events={}:this.events[a]=$.grep(this.events[a],function(a){return void 0!==b&&a!==b})},a.prototype.dispatchEvent=function(a,b){s.call(this,a);for(var c=0;c",this.html="function"==typeof a.template?a.template(this):b(this),this.$el=null;var c="";for(var d in r){if(c=v(r[d]),"object"==typeof a[c])for(fn in a[c])a[c].hasOwnProperty(fn)&&"function"==typeof a[c][fn]&&this.addEventListener(r[d],a[c][fn]);else"function"==typeof a[c]&&this.addEventListener(r[d],a[c]);this.options[c]=void 0}this.addEventListener("load",function(){this.rootElem.removeClass("pdbox--loading")}),this.addEventListener("afterOpen",i),this.addEventListener("load",i),l()}function b(a){return $content="
      \t
      \t\t

      \t\t
      "+(a.isAjax?"
      ":"")+"\t\t
      \t\t

      \t\t\t"+a.langs[a.options.lang].prev+"\t\t\t\t\t\t"+a.langs[a.options.lang].of+"\t\t\t"+a.langs[a.options.lang].next+"\t\t

      \t\t

      \t\t
      "+a.spinnerHtml+"\t\t "+a.langs[a.options.lang].close+"\t
      ",$content}function c(a){a.rootElem=$('
      '),a.rootElem.html(a.html).prependTo(a.$body),a.window.elem=a.rootElem.find(".pdbox__window"),a.window.close=a.window.elem.find(".pdbox__close"),a.window.title=a.window.elem.find(".pdbox__title"),a.window.content=a.window.elem.find(".pdbox__content"),a.window.descWrap=a.window.elem.find(".pdbox__desc"),a.window.desc=a.window.elem.find(".pdbox__snippet"),a.window.desc.length||(a.window.desc=a.window.descWrap),a.window.pager={elem:a.window.elem.find(".pdbox__pager"),pages:a.window.elem.find(".pdbox__pages"),pagesSummary:a.window.elem.find(".pdbox__pages-summary"),activePage:a.window.elem.find(".pdbox__active-page"),pagesCount:a.window.elem.find(".pdbox__pages-count"),prev:a.window.elem.find(".pdbox__page--prev"),next:a.window.elem.find(".pdbox__page--next"),thumbnails:a.window.elem.find(".pdbox__pager--thumbnails")},a.window.image=a.window.elem.find(".pdbox__image"),$(document).on("click.pdbox",".pdbox__close, .pdbox__close--alternative",$.proxy(o,a)),a.$doc.on("keyup.pdbox",$.proxy(g,a)),a.window.image.on("click.pdbox",$.proxy(function(a){this.close(),a.preventDefault()},a))}function d(a){a.window.close.off(),a.window.pager.next.off(),a.window.pager.prev.off(),a.window.pager.pages.find("a").off(),a.window.pager.thumbnails.off(),a.window.image.off(),a.overlay.off(),a.$doc.off("keyup.pdbox"),a.rootElem.remove()}function e(a,b,c){var d=b.data("rel");if(d){var e=$(c),g=$([]),i=e.filter('[data-rel="'+d+'"]'),j="";if(i.each(function(a){j+=" "+(a+1)+" "}),a.window.pager.pages.empty().append(j),a.options.imageThumbnails){var k="";i.each(function(a){k+="
    • "}),a.window.pager.thumbnails.append($('
        ')).find(".pdbox__thumbnail-list").append(k),a.window.pager.thumbnails.show(),g=a.window.pager.thumbnails.find("a")}else a.window.pager.thumbnails.hide();$numbers=a.window.pager.pages.find("a"),$numbers.on("click.pdbox",function(b){var c=$(this),d=$numbers.index(this);$numbers.removeClass("pdbox__page--active"),c.addClass("pdbox__page--active"),g.length&&(g.removeClass("pdbox__thumbnail-link--active"),g.eq(d).addClass("pdbox__thumbnail-link--active")),a.window.pager.activePage.text(d+1),0===d?a.window.pager.prev.addClass("pdbox__page--disabled"):a.window.pager.prev.removeClass("pdbox__page--disabled"),d===$numbers.length-1?a.window.pager.next.addClass("pdbox__page--disabled"):a.window.pager.next.removeClass("pdbox__page--disabled"),f(a,this.href,i.eq(d)),b.preventDefault()}).eq(i.index(b)).trigger("click.pdbox"),g.length&&g.on("click.pdbox",function(a){a.preventDefault(),$numbers.eq(g.index(this)).trigger("click.pdbox")}),a.window.pager.prev.on("click.pdbox",function(b){b.preventDefault(),a.window.pager.pages.find(".pdbox__page--active").prev().trigger("click.pdbox")}),a.window.pager.next.on("click.pdbox",function(b){b.preventDefault(),a.window.pager.pages.find(".pdbox__page--active").next().trigger("click.pdbox")}),a.$doc.on("keyup.pdbox",$.proxy(h,a)),$numbers.length>1&&(a.window.pager.elem.show(),a.window.pager.pagesCount.text($numbers.length))}}function f(a,b,c){var d=$("img",c),e=d.attr("alt")||c.attr("title"),f=d.attr("title")||"";a.rootElem.addClass("pdbox--loading"),e?a.window.title.show().text(e):a.window.title.hide(),f?(a.window.descWrap.show(),a.window.desc.html("

        "+f+"

        ")):a.window.descWrap.hide();var g=c.data("pdbox-video");preloader=document.createElement(g?"iframe":"img"),$(preloader).on("load insert",function(b){(!g&&"load"===b.type||g&&"insert"===b.type)&&a.window.image[g?"addClass":"removeClass"]("pdbox__video").html(this).show(),"load"===b.type&&a.dispatchEvent("load",{element:c,content:preloader})}),$(preloader).attr("src",b),g&&$(preloader).attr({allowfullscreen:!0,width:a.options.width,height:a.options.width/(16/9)}).triggerHandler("insert")}function g(a){27===a.which&&this.close()}function h(a){37===a.which?this.window.pager.prev.not(".pdbox__page--disabled").trigger("click"):39===a.which&&this.window.pager.next.not(".pdbox__page--disabled").trigger("click"),a.preventDefault()}function i(){this.isBodyOverflowing?this.$body.addClass("pdbox-open--scrollbar-offset"):k(this)?this.window.elem.addClass("pdbox__window--scrollbar-offset"):this.window.elem.removeClass("pdbox__window--scrollbar-offset")}function j(){var a=document.body.getBoundingClientRect();return a.left+a.rightdocument.documentElement.clientHeight}function l(){var a=document.createElement("style");document.head.appendChild(a);var b=a.sheet;b.insertRule(":root { --pdbox-scrollbar-width:"+m()+"px; }",b.cssRules.length)}function m(){var a=document.createElement("p");a.style.width="100%",a.style.height="200px";var b=document.createElement("div");b.style.position="absolute",b.style.top="0px",b.style.left="0px",b.style.visibility="hidden",b.style.width="200px",b.style.height="150px",b.style.overflow="hidden",b.appendChild(a),document.body.appendChild(b);var c=a.offsetWidth;b.style.overflow="scroll";var d=a.offsetWidth;return c===d&&(d=b.clientWidth),document.body.removeChild(b),c-d}function n(a){a.overlay=$('
        ').prependTo(a.rootElem)}function o(a){var b=$(a.target).closest("a");(a.target===this.window.elem[0]||this.window.elem.has(a.target).length&&(b.hasClass("pdbox__close")||b.hasClass("pdbox__close--alternative")))&&(this.close(),a.preventDefault())}var p={width:900,className:"",lang:$("html").attr("lang")||"cs"},q={cs:{close:"Zavřít",prev:"Předchozí",next:"Další",of:"/"},sk:{close:"Zavrieť",prev:"Predchádzajúca",next:"Ďalšie",of:"/"},en:{close:"Close",prev:"Previous",next:"Next",of:"/"},de:{close:"Zumachen",prev:"Vorige",next:"Folgend",of:"/"},es:{close:"Vaer",prev:"Previo",next:"Siguiente",of:"/"},fr:{close:"Fermer",prev:"Précédant",next:"Suivant",of:"/"},it:{close:"Chiudere",prev:"Previo",next:"Veniente",of:"/"},ru:{close:"закрыть",prev:"Предшествующий",next:"Последующий",of:"/"}},r=["beforeOpen","afterOpen","load","beforeClose","afterClose"];a.prototype.open=function(a,b,d){this.$el=a,this.isOpen?this.removeEventListener("load",this.setOptions):(this.isOpen=!0,this.setOnOpenOptions=!0,this.isBodyOverflowing=j(),this.dispatchEvent("beforeOpen",{element:a}),c(this),n(this),d||this.rootElem.addClass("pdbox--loading"),this.isInner&&this.rootElem.addClass("pdbox--inner"),this.setOptions(),this.setOnOpenOptions=!1),this.addEventListener("load",this.setOptions),this.window.elem.on("click",$.proxy(o,this)),this.$body.addClass("pdbox-open"),this.window.pager.elem.hide(),this.window.pager.thumbnails.hide(),this.window.image.hide(),this.window.title.hide(),void 0!==a&&void 0!==b&&a.is(":not(.ajax)")&&e(this,a,b),this.dispatchEvent("afterOpen",{element:a})},a.prototype.close=function(){if(this.isOpen){this.isOpen=!1,this.$el=null,this.removeEventListener("load",this.setOptions),this.rootElem.addClass("pdbox--closing"),this.dispatchEvent("beforeClose"),this.window.elem.off();var a=parseInt(getComputedStyle(this.rootElem[0]).getPropertyValue("--pdbox-closing-duration")||0),b=this;setTimeout(function(){d(b),b.isInner||b.$body.removeClass("pdbox-open pdbox-open--scrollbar-offset"),b.dispatchEvent("afterClose")},a)}},a.prototype.content=function(a){if(void 0===a){var b=this.window.elem.clone();return b.find(".ajax-overlay, .ajax-loader").remove(),b.html()}this.window.elem.html(a),this.window.content=this.window.elem.find(".pdbox__content")},a.prototype.setOptions=function(a,b){var c,d,e;if(this.setOnOpenOptions){$.extend(this.options,this.defaults);for(c in r)d=v(r[c]),this.options[d]=null}if(this.$el){var f={};f.width=this.$el.data("pdboxWidth"),f.className=this.$el.data("pdboxClassName")?this.$el.data("pdboxClassName")+" "+this.defaults.className:this.defaults.className;for(c in r)e=u(r[c]),d=v(r[c]),f[d]=this.$el.data(e);$.extend(this.options,f)}a&&b&&$.extend(this.options,a),this.rootElem.removeClass(function(a,b){return b.split(" ").filter(function(a){return"pdbox"!==a&&"pdbox--loading"!==a}).join(" ")}).addClass("pdbox").addClass(this.options.className),this.window.content.css({"max-width":this.options.width+"px"})};var s=function(a){a in this.events||(this.events[a]=[])};a.prototype.addEventListener=function(a,b){s.call(this,a),this.events[a].push(b)},a.prototype.removeEventListener=function(a,b){s.call(this,a),void 0===a?this.events={}:this.events[a]=$.grep(this.events[a],function(a){return void 0!==b&&a!==b})},a.prototype.dispatchEvent=function(a,b){s.call(this,a);for(var c=0;c + * @copyright Copyright (c) 2014-2018 PeckaDesign, s.r.o + * @license MIT + * + * @version 1.1.2-draft + */ $.pdBox = (function () { /*************** configuration ***************/ @@ -107,7 +117,7 @@ $.pdBox = (function () { "
        " + "

        " + "
        " + - (box.isAjax ? "
        " : "") + + (box.isAjax ? "
        " : "") + "
        " + "

        " + " " + box.langs[box.options.lang]["prev"] + "" + @@ -117,7 +127,7 @@ $.pdBox = (function () { "

        " + "

        " + "
        " + - box.spinnerHtml + + box.spinnerHtml + " " + box.langs[box.options.lang]["close"] + "" + "
        " + ""; @@ -214,9 +224,10 @@ $.pdBox = (function () { * Nastaví vlastnosti pdboxu v pořadí defaults, nastavení z inicializace, nastavení z data atributů elementu, * který tb otevřel. Pokud je předán atribut options, použije se nsatavení z tohoto atributu. * - * @param options + * @param options předané options + * @param isOptions flag, zda jde opravdu o options a ne kontext předaný z onLoad callbacku */ - PdBox.prototype.setOptions = function (options) { + PdBox.prototype.setOptions = function (options, isOptions) { var e; var optName; var dataName; @@ -228,7 +239,7 @@ $.pdBox = (function () { // slouží k ad-hoc handlerům, proto můžeme smazat for (e in events) { - optName = getEventOptName(events[e]); + optName = getEventOptName(events[e]); this.options[optName] = null; } @@ -251,12 +262,13 @@ $.pdBox = (function () { $.extend(this.options, elOptions); } - if (options) { + // pokud byly předány options, ověříme, že jde skutečně o options a ne o context předaný v rámci onLoad callbacku + if (options && isOptions) { $.extend(this.options, options); } this.rootElem - // odstraníme všechny class krom "pdbox" a případné "pdbox--loading" + // odstraníme všechny class krom "pdbox" a případné "pdbox--loading" .removeClass(function(i, className) { var list = className.split(' '); return list.filter(function(val){ @@ -350,7 +362,7 @@ $.pdBox = (function () { this.window.title.hide(); } - this.dispatchEvent('load', {content: html}); + this.dispatchEvent('load', {element: $el, content: html}); }; PdBox.prototype.openUrl = function (href, $el) { @@ -361,7 +373,7 @@ $.pdBox = (function () { success: $.proxy(function (content) { this.window.descWrap.show(); this.window.desc.html(content); - this.dispatchEvent('load', {content: content}); + this.dispatchEvent('load', {element: $el, content: content}); }, this) }); }; @@ -552,7 +564,7 @@ $.pdBox = (function () { } if (e.type === 'load') { - box.dispatchEvent('load', {content: preloader}); + box.dispatchEvent('load', {element: $el, content: preloader}); } });