Binary file src/ztfy/myams/resources/img/fancybox/blank.gif has changed
Binary file src/ztfy/myams/resources/img/fancybox/fancybox-buttons.png has changed
Binary file src/ztfy/myams/resources/img/fancybox/fancybox_loading.gif has changed
Binary file src/ztfy/myams/resources/img/fancybox/fancybox_loading@2x.gif has changed
Binary file src/ztfy/myams/resources/img/fancybox/fancybox_overlay.png has changed
Binary file src/ztfy/myams/resources/img/fancybox/fancybox_sprite.png has changed
Binary file src/ztfy/myams/resources/img/fancybox/fancybox_sprite@2x.png has changed
Binary file src/ztfy/myams/resources/img/imgareaselect/border-anim-h.gif has changed
Binary file src/ztfy/myams/resources/img/imgareaselect/border-anim-v.gif has changed
Binary file src/ztfy/myams/resources/img/imgareaselect/border-h.gif has changed
Binary file src/ztfy/myams/resources/img/imgareaselect/border-v.gif has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ztfy/myams/resources/js/ext/fancybox-helpers/fancybox-buttons.js Fri Mar 27 15:53:44 2015 +0100
@@ -0,0 +1,122 @@
+ /*!
+ * Buttons helper for fancyBox
+ * version: 1.0.5 (Mon, 15 Oct 2012)
+ * @requires fancyBox v2.0 or later
+ *
+ * Usage:
+ * $(".fancybox").fancybox({
+ * helpers : {
+ * buttons: {
+ * position : 'top'
+ * }
+ * }
+ * });
+ *
+ */
+(function ($) {
+ //Shortcut for fancyBox object
+ var F = $.fancybox;
+
+ //Add helper object
+ F.helpers.buttons = {
+ defaults : {
+ skipSingle : false, // disables if gallery contains single image
+ position : 'top', // 'top' or 'bottom'
+ tpl : '<div id="fancybox-buttons"><ul><li><a class="btnPrev" title="Previous" href="javascript:;"></a></li><li><a class="btnPlay" title="Start slideshow" href="javascript:;"></a></li><li><a class="btnNext" title="Next" href="javascript:;"></a></li><li><a class="btnToggle" title="Toggle size" href="javascript:;"></a></li><li><a class="btnClose" title="Close" href="javascript:;"></a></li></ul></div>'
+ },
+
+ list : null,
+ buttons: null,
+
+ beforeLoad: function (opts, obj) {
+ //Remove self if gallery do not have at least two items
+
+ if (opts.skipSingle && obj.group.length < 2) {
+ obj.helpers.buttons = false;
+ obj.closeBtn = true;
+
+ return;
+ }
+
+ //Increase top margin to give space for buttons
+ obj.margin[ opts.position === 'bottom' ? 2 : 0 ] += 30;
+ },
+
+ onPlayStart: function () {
+ if (this.buttons) {
+ this.buttons.play.attr('title', 'Pause slideshow').addClass('btnPlayOn');
+ }
+ },
+
+ onPlayEnd: function () {
+ if (this.buttons) {
+ this.buttons.play.attr('title', 'Start slideshow').removeClass('btnPlayOn');
+ }
+ },
+
+ afterShow: function (opts, obj) {
+ var buttons = this.buttons;
+
+ if (!buttons) {
+ this.list = $(opts.tpl).addClass(opts.position).appendTo('body');
+
+ buttons = {
+ prev : this.list.find('.btnPrev').click( F.prev ),
+ next : this.list.find('.btnNext').click( F.next ),
+ play : this.list.find('.btnPlay').click( F.play ),
+ toggle : this.list.find('.btnToggle').click( F.toggle ),
+ close : this.list.find('.btnClose').click( F.close )
+ }
+ }
+
+ //Prev
+ if (obj.index > 0 || obj.loop) {
+ buttons.prev.removeClass('btnDisabled');
+ } else {
+ buttons.prev.addClass('btnDisabled');
+ }
+
+ //Next / Play
+ if (obj.loop || obj.index < obj.group.length - 1) {
+ buttons.next.removeClass('btnDisabled');
+ buttons.play.removeClass('btnDisabled');
+
+ } else {
+ buttons.next.addClass('btnDisabled');
+ buttons.play.addClass('btnDisabled');
+ }
+
+ this.buttons = buttons;
+
+ this.onUpdate(opts, obj);
+ },
+
+ onUpdate: function (opts, obj) {
+ var toggle;
+
+ if (!this.buttons) {
+ return;
+ }
+
+ toggle = this.buttons.toggle.removeClass('btnDisabled btnToggleOn');
+
+ //Size toggle button
+ if (obj.canShrink) {
+ toggle.addClass('btnToggleOn');
+
+ } else if (!obj.canExpand) {
+ toggle.addClass('btnDisabled');
+ }
+ },
+
+ beforeClose: function () {
+ if (this.list) {
+ this.list.remove();
+ }
+
+ this.list = null;
+ this.buttons = null;
+ }
+ };
+
+}(jQuery));
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ztfy/myams/resources/js/ext/fancybox-helpers/fancybox-buttons.min.js Fri Mar 27 15:53:44 2015 +0100
@@ -0,0 +1,16 @@
+/*
+ * Buttons helper for fancyBox
+ * version: 1.0.5 (Mon, 15 Oct 2012)
+ * @requires fancyBox v2.0 or later
+ *
+ * Usage:
+ * $(".fancybox").fancybox({
+ * helpers : {
+ * buttons: {
+ * position : 'top'
+ * }
+ * }
+ * });
+ *
+ */
+(function(b){var a=b.fancybox;a.helpers.buttons={defaults:{skipSingle:false,position:"top",tpl:'<div id="fancybox-buttons"><ul><li><a class="btnPrev" title="Previous" href="javascript:;"></a></li><li><a class="btnPlay" title="Start slideshow" href="javascript:;"></a></li><li><a class="btnNext" title="Next" href="javascript:;"></a></li><li><a class="btnToggle" title="Toggle size" href="javascript:;"></a></li><li><a class="btnClose" title="Close" href="javascript:;"></a></li></ul></div>'},list:null,buttons:null,beforeLoad:function(c,d){if(c.skipSingle&&d.group.length<2){d.helpers.buttons=false;d.closeBtn=true;return}d.margin[c.position==="bottom"?2:0]+=30},onPlayStart:function(){if(this.buttons){this.buttons.play.attr("title","Pause slideshow").addClass("btnPlayOn")}},onPlayEnd:function(){if(this.buttons){this.buttons.play.attr("title","Start slideshow").removeClass("btnPlayOn")}},afterShow:function(d,e){var c=this.buttons;if(!c){this.list=b(d.tpl).addClass(d.position).appendTo("body");c={prev:this.list.find(".btnPrev").click(a.prev),next:this.list.find(".btnNext").click(a.next),play:this.list.find(".btnPlay").click(a.play),toggle:this.list.find(".btnToggle").click(a.toggle),close:this.list.find(".btnClose").click(a.close)}}if(e.index>0||e.loop){c.prev.removeClass("btnDisabled")}else{c.prev.addClass("btnDisabled")}if(e.loop||e.index<e.group.length-1){c.next.removeClass("btnDisabled");c.play.removeClass("btnDisabled")}else{c.next.addClass("btnDisabled");c.play.addClass("btnDisabled")}this.buttons=c;this.onUpdate(d,e)},onUpdate:function(d,e){var c;if(!this.buttons){return}c=this.buttons.toggle.removeClass("btnDisabled btnToggleOn");if(e.canShrink){c.addClass("btnToggleOn")}else{if(!e.canExpand){c.addClass("btnDisabled")}}},beforeClose:function(){if(this.list){this.list.remove()}this.list=null;this.buttons=null}}}(jQuery));
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ztfy/myams/resources/js/ext/fancybox-helpers/fancybox-media.js Fri Mar 27 15:53:44 2015 +0100
@@ -0,0 +1,199 @@
+/*!
+ * Media helper for fancyBox
+ * version: 1.0.6 (Fri, 14 Jun 2013)
+ * @requires fancyBox v2.0 or later
+ *
+ * Usage:
+ * $(".fancybox").fancybox({
+ * helpers : {
+ * media: true
+ * }
+ * });
+ *
+ * Set custom URL parameters:
+ * $(".fancybox").fancybox({
+ * helpers : {
+ * media: {
+ * youtube : {
+ * params : {
+ * autoplay : 0
+ * }
+ * }
+ * }
+ * }
+ * });
+ *
+ * Or:
+ * $(".fancybox").fancybox({,
+ * helpers : {
+ * media: true
+ * },
+ * youtube : {
+ * autoplay: 0
+ * }
+ * });
+ *
+ * Supports:
+ *
+ * Youtube
+ * http://www.youtube.com/watch?v=opj24KnzrWo
+ * http://www.youtube.com/embed/opj24KnzrWo
+ * http://youtu.be/opj24KnzrWo
+ * http://www.youtube-nocookie.com/embed/opj24KnzrWo
+ * Vimeo
+ * http://vimeo.com/40648169
+ * http://vimeo.com/channels/staffpicks/38843628
+ * http://vimeo.com/groups/surrealism/videos/36516384
+ * http://player.vimeo.com/video/45074303
+ * Metacafe
+ * http://www.metacafe.com/watch/7635964/dr_seuss_the_lorax_movie_trailer/
+ * http://www.metacafe.com/watch/7635964/
+ * Dailymotion
+ * http://www.dailymotion.com/video/xoytqh_dr-seuss-the-lorax-premiere_people
+ * Twitvid
+ * http://twitvid.com/QY7MD
+ * Twitpic
+ * http://twitpic.com/7p93st
+ * Instagram
+ * http://instagr.am/p/IejkuUGxQn/
+ * http://instagram.com/p/IejkuUGxQn/
+ * Google maps
+ * http://maps.google.com/maps?q=Eiffel+Tower,+Avenue+Gustave+Eiffel,+Paris,+France&t=h&z=17
+ * http://maps.google.com/?ll=48.857995,2.294297&spn=0.007666,0.021136&t=m&z=16
+ * http://maps.google.com/?ll=48.859463,2.292626&spn=0.000965,0.002642&t=m&z=19&layer=c&cbll=48.859524,2.292532&panoid=YJ0lq28OOy3VT2IqIuVY0g&cbp=12,151.58,,0,-15.56
+ */
+(function ($) {
+ "use strict";
+
+ //Shortcut for fancyBox object
+ var F = $.fancybox,
+ format = function( url, rez, params ) {
+ params = params || '';
+
+ if ( $.type( params ) === "object" ) {
+ params = $.param(params, true);
+ }
+
+ $.each(rez, function(key, value) {
+ url = url.replace( '$' + key, value || '' );
+ });
+
+ if (params.length) {
+ url += ( url.indexOf('?') > 0 ? '&' : '?' ) + params;
+ }
+
+ return url;
+ };
+
+ //Add helper object
+ F.helpers.media = {
+ defaults : {
+ youtube : {
+ matcher : /(youtube\.com|youtu\.be|youtube-nocookie\.com)\/(watch\?v=|v\/|u\/|embed\/?)?(videoseries\?list=(.*)|[\w-]{11}|\?listType=(.*)&list=(.*)).*/i,
+ params : {
+ autoplay : 1,
+ autohide : 1,
+ fs : 1,
+ rel : 0,
+ hd : 1,
+ wmode : 'opaque',
+ enablejsapi : 1
+ },
+ type : 'iframe',
+ url : '//www.youtube.com/embed/$3'
+ },
+ vimeo : {
+ matcher : /(?:vimeo(?:pro)?.com)\/(?:[^\d]+)?(\d+)(?:.*)/,
+ params : {
+ autoplay : 1,
+ hd : 1,
+ show_title : 1,
+ show_byline : 1,
+ show_portrait : 0,
+ fullscreen : 1
+ },
+ type : 'iframe',
+ url : '//player.vimeo.com/video/$1'
+ },
+ metacafe : {
+ matcher : /metacafe.com\/(?:watch|fplayer)\/([\w\-]{1,10})/,
+ params : {
+ autoPlay : 'yes'
+ },
+ type : 'swf',
+ url : function( rez, params, obj ) {
+ obj.swf.flashVars = 'playerVars=' + $.param( params, true );
+
+ return '//www.metacafe.com/fplayer/' + rez[1] + '/.swf';
+ }
+ },
+ dailymotion : {
+ matcher : /dailymotion.com\/video\/(.*)\/?(.*)/,
+ params : {
+ additionalInfos : 0,
+ autoStart : 1
+ },
+ type : 'swf',
+ url : '//www.dailymotion.com/swf/video/$1'
+ },
+ twitvid : {
+ matcher : /twitvid\.com\/([a-zA-Z0-9_\-\?\=]+)/i,
+ params : {
+ autoplay : 0
+ },
+ type : 'iframe',
+ url : '//www.twitvid.com/embed.php?guid=$1'
+ },
+ twitpic : {
+ matcher : /twitpic\.com\/(?!(?:place|photos|events)\/)([a-zA-Z0-9\?\=\-]+)/i,
+ type : 'image',
+ url : '//twitpic.com/show/full/$1/'
+ },
+ instagram : {
+ matcher : /(instagr\.am|instagram\.com)\/p\/([a-zA-Z0-9_\-]+)\/?/i,
+ type : 'image',
+ url : '//$1/p/$2/media/?size=l'
+ },
+ google_maps : {
+ matcher : /maps\.google\.([a-z]{2,3}(\.[a-z]{2})?)\/(\?ll=|maps\?)(.*)/i,
+ type : 'iframe',
+ url : function( rez ) {
+ return '//maps.google.' + rez[1] + '/' + rez[3] + '' + rez[4] + '&output=' + (rez[4].indexOf('layer=c') > 0 ? 'svembed' : 'embed');
+ }
+ }
+ },
+
+ beforeLoad : function(opts, obj) {
+ var url = obj.href || '',
+ type = false,
+ what,
+ item,
+ rez,
+ params;
+
+ for (what in opts) {
+ if (opts.hasOwnProperty(what)) {
+ item = opts[ what ];
+ rez = url.match( item.matcher );
+
+ if (rez) {
+ type = item.type;
+ params = $.extend(true, {}, item.params, obj[ what ] || ($.isPlainObject(opts[ what ]) ? opts[ what ].params : null));
+
+ url = $.type( item.url ) === "function" ? item.url.call( this, rez, params, obj ) : format( item.url, rez, params );
+
+ break;
+ }
+ }
+ }
+
+ if (type) {
+ obj.href = url;
+ obj.type = type;
+
+ obj.autoHeight = false;
+ }
+ }
+ };
+
+}(jQuery));
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ztfy/myams/resources/js/ext/fancybox-helpers/fancybox-media.min.js Fri Mar 27 15:53:44 2015 +0100
@@ -0,0 +1,65 @@
+/*
+ * Media helper for fancyBox
+ * version: 1.0.6 (Fri, 14 Jun 2013)
+ * @requires fancyBox v2.0 or later
+ *
+ * Usage:
+ * $(".fancybox").fancybox({
+ * helpers : {
+ * media: true
+ * }
+ * });
+ *
+ * Set custom URL parameters:
+ * $(".fancybox").fancybox({
+ * helpers : {
+ * media: {
+ * youtube : {
+ * params : {
+ * autoplay : 0
+ * }
+ * }
+ * }
+ * }
+ * });
+ *
+ * Or:
+ * $(".fancybox").fancybox({,
+ * helpers : {
+ * media: true
+ * },
+ * youtube : {
+ * autoplay: 0
+ * }
+ * });
+ *
+ * Supports:
+ *
+ * Youtube
+ * http://www.youtube.com/watch?v=opj24KnzrWo
+ * http://www.youtube.com/embed/opj24KnzrWo
+ * http://youtu.be/opj24KnzrWo
+ * http://www.youtube-nocookie.com/embed/opj24KnzrWo
+ * Vimeo
+ * http://vimeo.com/40648169
+ * http://vimeo.com/channels/staffpicks/38843628
+ * http://vimeo.com/groups/surrealism/videos/36516384
+ * http://player.vimeo.com/video/45074303
+ * Metacafe
+ * http://www.metacafe.com/watch/7635964/dr_seuss_the_lorax_movie_trailer/
+ * http://www.metacafe.com/watch/7635964/
+ * Dailymotion
+ * http://www.dailymotion.com/video/xoytqh_dr-seuss-the-lorax-premiere_people
+ * Twitvid
+ * http://twitvid.com/QY7MD
+ * Twitpic
+ * http://twitpic.com/7p93st
+ * Instagram
+ * http://instagr.am/p/IejkuUGxQn/
+ * http://instagram.com/p/IejkuUGxQn/
+ * Google maps
+ * http://maps.google.com/maps?q=Eiffel+Tower,+Avenue+Gustave+Eiffel,+Paris,+France&t=h&z=17
+ * http://maps.google.com/?ll=48.857995,2.294297&spn=0.007666,0.021136&t=m&z=16
+ * http://maps.google.com/?ll=48.859463,2.292626&spn=0.000965,0.002642&t=m&z=19&layer=c&cbll=48.859524,2.292532&panoid=YJ0lq28OOy3VT2IqIuVY0g&cbp=12,151.58,,0,-15.56
+ */
+(function(b){var a=b.fancybox,c=function(d,e,f){f=f||"";if(b.type(f)==="object"){f=b.param(f,true)}b.each(e,function(g,h){d=d.replace("$"+g,h||"")});if(f.length){d+=(d.indexOf("?")>0?"&":"?")+f}return d};a.helpers.media={defaults:{youtube:{matcher:/(youtube\.com|youtu\.be|youtube-nocookie\.com)\/(watch\?v=|v\/|u\/|embed\/?)?(videoseries\?list=(.*)|[\w-]{11}|\?listType=(.*)&list=(.*)).*/i,params:{autoplay:1,autohide:1,fs:1,rel:0,hd:1,wmode:"opaque",enablejsapi:1},type:"iframe",url:"//www.youtube.com/embed/$3"},vimeo:{matcher:/(?:vimeo(?:pro)?.com)\/(?:[^\d]+)?(\d+)(?:.*)/,params:{autoplay:1,hd:1,show_title:1,show_byline:1,show_portrait:0,fullscreen:1},type:"iframe",url:"//player.vimeo.com/video/$1"},metacafe:{matcher:/metacafe.com\/(?:watch|fplayer)\/([\w\-]{1,10})/,params:{autoPlay:"yes"},type:"swf",url:function(e,f,d){d.swf.flashVars="playerVars="+b.param(f,true);return"//www.metacafe.com/fplayer/"+e[1]+"/.swf"}},dailymotion:{matcher:/dailymotion.com\/video\/(.*)\/?(.*)/,params:{additionalInfos:0,autoStart:1},type:"swf",url:"//www.dailymotion.com/swf/video/$1"},twitvid:{matcher:/twitvid\.com\/([a-zA-Z0-9_\-\?\=]+)/i,params:{autoplay:0},type:"iframe",url:"//www.twitvid.com/embed.php?guid=$1"},twitpic:{matcher:/twitpic\.com\/(?!(?:place|photos|events)\/)([a-zA-Z0-9\?\=\-]+)/i,type:"image",url:"//twitpic.com/show/full/$1/"},instagram:{matcher:/(instagr\.am|instagram\.com)\/p\/([a-zA-Z0-9_\-]+)\/?/i,type:"image",url:"//$1/p/$2/media/?size=l"},google_maps:{matcher:/maps\.google\.([a-z]{2,3}(\.[a-z]{2})?)\/(\?ll=|maps\?)(.*)/i,type:"iframe",url:function(d){return"//maps.google."+d[1]+"/"+d[3]+""+d[4]+"&output="+(d[4].indexOf("layer=c")>0?"svembed":"embed")}}},beforeLoad:function(g,j){var d=j.href||"",e=false,i,f,h,k;for(i in g){if(g.hasOwnProperty(i)){f=g[i];h=d.match(f.matcher);if(h){e=f.type;k=b.extend(true,{},f.params,j[i]||(b.isPlainObject(g[i])?g[i].params:null));d=b.type(f.url)==="function"?f.url.call(this,h,k,j):c(f.url,h,k);break}}}if(e){j.href=d;j.type=e;j.autoHeight=false}}}}(jQuery));
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ztfy/myams/resources/js/ext/fancybox-helpers/fancybox-thumbs.js Fri Mar 27 15:53:44 2015 +0100
@@ -0,0 +1,162 @@
+ /*!
+ * Thumbnail helper for fancyBox
+ * version: 1.0.7 (Mon, 01 Oct 2012)
+ * @requires fancyBox v2.0 or later
+ *
+ * Usage:
+ * $(".fancybox").fancybox({
+ * helpers : {
+ * thumbs: {
+ * width : 50,
+ * height : 50
+ * }
+ * }
+ * });
+ *
+ */
+(function ($) {
+ //Shortcut for fancyBox object
+ var F = $.fancybox;
+
+ //Add helper object
+ F.helpers.thumbs = {
+ defaults : {
+ width : 50, // thumbnail width
+ height : 50, // thumbnail height
+ position : 'bottom', // 'top' or 'bottom'
+ source : function ( item ) { // function to obtain the URL of the thumbnail image
+ var href;
+
+ if (item.element) {
+ href = $(item.element).find('img').attr('src');
+ }
+
+ if (!href && item.type === 'image' && item.href) {
+ href = item.href;
+ }
+
+ return href;
+ }
+ },
+
+ wrap : null,
+ list : null,
+ width : 0,
+
+ init: function (opts, obj) {
+ var that = this,
+ list,
+ thumbWidth = opts.width,
+ thumbHeight = opts.height,
+ thumbSource = opts.source;
+
+ //Build list structure
+ list = '';
+
+ for (var n = 0; n < obj.group.length; n++) {
+ list += '<li><a style="width:' + thumbWidth + 'px;height:' + thumbHeight + 'px;" href="javascript:jQuery.fancybox.jumpto(' + n + ');"></a></li>';
+ }
+
+ this.wrap = $('<div id="fancybox-thumbs"></div>').addClass(opts.position).appendTo('body');
+ this.list = $('<ul>' + list + '</ul>').appendTo(this.wrap);
+
+ //Load each thumbnail
+ $.each(obj.group, function (i) {
+ var href = thumbSource( obj.group[ i ] );
+
+ if (!href) {
+ return;
+ }
+
+ $("<img />").load(function () {
+ var width = this.width,
+ height = this.height,
+ widthRatio, heightRatio, parent;
+
+ if (!that.list || !width || !height) {
+ return;
+ }
+
+ //Calculate thumbnail width/height and center it
+ widthRatio = width / thumbWidth;
+ heightRatio = height / thumbHeight;
+
+ parent = that.list.children().eq(i).find('a');
+
+ if (widthRatio >= 1 && heightRatio >= 1) {
+ if (widthRatio > heightRatio) {
+ width = Math.floor(width / heightRatio);
+ height = thumbHeight;
+
+ } else {
+ width = thumbWidth;
+ height = Math.floor(height / widthRatio);
+ }
+ }
+
+ $(this).css({
+ width : width,
+ height : height,
+ top : Math.floor(thumbHeight / 2 - height / 2),
+ left : Math.floor(thumbWidth / 2 - width / 2)
+ });
+
+ parent.width(thumbWidth).height(thumbHeight);
+
+ $(this).hide().appendTo(parent).fadeIn(300);
+
+ }).attr('src', href);
+ });
+
+ //Set initial width
+ this.width = this.list.children().eq(0).outerWidth(true);
+
+ this.list.width(this.width * (obj.group.length + 1)).css('left', Math.floor($(window).width() * 0.5 - (obj.index * this.width + this.width * 0.5)));
+ },
+
+ beforeLoad: function (opts, obj) {
+ //Remove self if gallery do not have at least two items
+ if (obj.group.length < 2) {
+ obj.helpers.thumbs = false;
+
+ return;
+ }
+
+ //Increase bottom margin to give space for thumbs
+ obj.margin[ opts.position === 'top' ? 0 : 2 ] += ((opts.height) + 15);
+ },
+
+ afterShow: function (opts, obj) {
+ //Check if exists and create or update list
+ if (this.list) {
+ this.onUpdate(opts, obj);
+
+ } else {
+ this.init(opts, obj);
+ }
+
+ //Set active element
+ this.list.children().removeClass('active').eq(obj.index).addClass('active');
+ },
+
+ //Center list
+ onUpdate: function (opts, obj) {
+ if (this.list) {
+ this.list.stop(true).animate({
+ 'left': Math.floor($(window).width() * 0.5 - (obj.index * this.width + this.width * 0.5))
+ }, 150);
+ }
+ },
+
+ beforeClose: function () {
+ if (this.wrap) {
+ this.wrap.remove();
+ }
+
+ this.wrap = null;
+ this.list = null;
+ this.width = 0;
+ }
+ }
+
+}(jQuery));
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ztfy/myams/resources/js/ext/fancybox-helpers/fancybox-thumbs.min.js Fri Mar 27 15:53:44 2015 +0100
@@ -0,0 +1,17 @@
+/*
+ * Thumbnail helper for fancyBox
+ * version: 1.0.7 (Mon, 01 Oct 2012)
+ * @requires fancyBox v2.0 or later
+ *
+ * Usage:
+ * $(".fancybox").fancybox({
+ * helpers : {
+ * thumbs: {
+ * width : 50,
+ * height : 50
+ * }
+ * }
+ * });
+ *
+ */
+(function(b){var a=b.fancybox;a.helpers.thumbs={defaults:{width:50,height:50,position:"bottom",source:function(d){var c;if(d.element){c=b(d.element).find("img").attr("src")}if(!c&&d.type==="image"&&d.href){c=d.href}return c}},wrap:null,list:null,width:0,init:function(f,i){var e=this,g,c=f.width,h=f.height,d=f.source;g="";for(var j=0;j<i.group.length;j++){g+='<li><a style="width:'+c+"px;height:"+h+'px;" href="javascript:jQuery.fancybox.jumpto('+j+');"></a></li>'}this.wrap=b('<div id="fancybox-thumbs"></div>').addClass(f.position).appendTo("body");this.list=b("<ul>"+g+"</ul>").appendTo(this.wrap);b.each(i.group,function(l){var k=d(i.group[l]);if(!k){return}b("<img />").load(function(){var q=this.width,m=this.height,p,n,o;if(!e.list||!q||!m){return}p=q/c;n=m/h;o=e.list.children().eq(l).find("a");if(p>=1&&n>=1){if(p>n){q=Math.floor(q/n);m=h}else{q=c;m=Math.floor(m/p)}}b(this).css({width:q,height:m,top:Math.floor(h/2-m/2),left:Math.floor(c/2-q/2)});o.width(c).height(h);b(this).hide().appendTo(o).fadeIn(300)}).attr("src",k)});this.width=this.list.children().eq(0).outerWidth(true);this.list.width(this.width*(i.group.length+1)).css("left",Math.floor(b(window).width()*0.5-(i.index*this.width+this.width*0.5)))},beforeLoad:function(c,d){if(d.group.length<2){d.helpers.thumbs=false;return}d.margin[c.position==="top"?0:2]+=((c.height)+15)},afterShow:function(c,d){if(this.list){this.onUpdate(c,d)}else{this.init(c,d)}this.list.children().removeClass("active").eq(d.index).addClass("active")},onUpdate:function(c,d){if(this.list){this.list.stop(true).animate({left:Math.floor(b(window).width()*0.5-(d.index*this.width+this.width*0.5))},150)}},beforeClose:function(){if(this.wrap){this.wrap.remove()}this.wrap=null;this.list=null;this.width=0}}}(jQuery));
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ztfy/myams/resources/js/ext/jquery-fancybox-2.1.5.js Fri Mar 27 15:53:44 2015 +0100
@@ -0,0 +1,2020 @@
+/*!
+ * fancyBox - jQuery Plugin
+ * version: 2.1.5 (Fri, 14 Jun 2013)
+ * @requires jQuery v1.6 or later
+ *
+ * Examples at http://fancyapps.com/fancybox/
+ * License: www.fancyapps.com/fancybox/#license
+ *
+ * Copyright 2012 Janis Skarnelis - janis@fancyapps.com
+ *
+ */
+
+(function (window, document, $, undefined) {
+ "use strict";
+
+ var H = $("html"),
+ W = $(window),
+ D = $(document),
+ F = $.fancybox = function () {
+ F.open.apply( this, arguments );
+ },
+ IE = navigator.userAgent.match(/msie/i),
+ didUpdate = null,
+ isTouch = document.createTouch !== undefined,
+
+ isQuery = function(obj) {
+ return obj && obj.hasOwnProperty && obj instanceof $;
+ },
+ isString = function(str) {
+ return str && $.type(str) === "string";
+ },
+ isPercentage = function(str) {
+ return isString(str) && str.indexOf('%') > 0;
+ },
+ isScrollable = function(el) {
+ return (el && !(el.style.overflow && el.style.overflow === 'hidden') && ((el.clientWidth && el.scrollWidth > el.clientWidth) || (el.clientHeight && el.scrollHeight > el.clientHeight)));
+ },
+ getScalar = function(orig, dim) {
+ var value = parseInt(orig, 10) || 0;
+
+ if (dim && isPercentage(orig)) {
+ value = F.getViewport()[ dim ] / 100 * value;
+ }
+
+ return Math.ceil(value);
+ },
+ getValue = function(value, dim) {
+ return getScalar(value, dim) + 'px';
+ };
+
+ $.extend(F, {
+ // The current version of fancyBox
+ version: '2.1.5',
+
+ defaults: {
+ padding : 15,
+ margin : 20,
+
+ width : 800,
+ height : 600,
+ minWidth : 100,
+ minHeight : 100,
+ maxWidth : 9999,
+ maxHeight : 9999,
+ pixelRatio: 1, // Set to 2 for retina display support
+
+ autoSize : true,
+ autoHeight : false,
+ autoWidth : false,
+
+ autoResize : true,
+ autoCenter : !isTouch,
+ fitToView : true,
+ aspectRatio : false,
+ topRatio : 0.5,
+ leftRatio : 0.5,
+
+ scrolling : 'auto', // 'auto', 'yes' or 'no'
+ wrapCSS : '',
+
+ arrows : true,
+ closeBtn : true,
+ closeClick : false,
+ nextClick : false,
+ mouseWheel : true,
+ autoPlay : false,
+ playSpeed : 3000,
+ preload : 3,
+ modal : false,
+ loop : true,
+
+ ajax : {
+ dataType : 'html',
+ headers : { 'X-fancyBox': true }
+ },
+ iframe : {
+ scrolling : 'auto',
+ preload : true
+ },
+ swf : {
+ wmode: 'transparent',
+ allowfullscreen : 'true',
+ allowscriptaccess : 'always'
+ },
+
+ keys : {
+ next : {
+ 13 : 'left', // enter
+ 34 : 'up', // page down
+ 39 : 'left', // right arrow
+ 40 : 'up' // down arrow
+ },
+ prev : {
+ 8 : 'right', // backspace
+ 33 : 'down', // page up
+ 37 : 'right', // left arrow
+ 38 : 'down' // up arrow
+ },
+ close : [27], // escape key
+ play : [32], // space - start/stop slideshow
+ toggle : [70] // letter "f" - toggle fullscreen
+ },
+
+ direction : {
+ next : 'left',
+ prev : 'right'
+ },
+
+ scrollOutside : true,
+
+ // Override some properties
+ index : 0,
+ type : null,
+ href : null,
+ content : null,
+ title : null,
+
+ // HTML templates
+ tpl: {
+ wrap : '<div class="fancybox-wrap" tabIndex="-1"><div class="fancybox-skin"><div class="fancybox-outer"><div class="fancybox-inner"></div></div></div></div>',
+ image : '<img class="fancybox-image" src="{href}" alt="" />',
+ iframe : '<iframe id="fancybox-frame{rnd}" name="fancybox-frame{rnd}" class="fancybox-iframe" frameborder="0" vspace="0" hspace="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen' + (IE ? ' allowtransparency="true"' : '') + '></iframe>',
+ error : '<p class="fancybox-error">The requested content cannot be loaded.<br/>Please try again later.</p>',
+ closeBtn : '<a title="Close" class="fancybox-item fancybox-close" href="javascript:;"></a>',
+ next : '<a title="Next" class="fancybox-nav fancybox-next" href="javascript:;"><span></span></a>',
+ prev : '<a title="Previous" class="fancybox-nav fancybox-prev" href="javascript:;"><span></span></a>'
+ },
+
+ // Properties for each animation type
+ // Opening fancyBox
+ openEffect : 'fade', // 'elastic', 'fade' or 'none'
+ openSpeed : 250,
+ openEasing : 'swing',
+ openOpacity : true,
+ openMethod : 'zoomIn',
+
+ // Closing fancyBox
+ closeEffect : 'fade', // 'elastic', 'fade' or 'none'
+ closeSpeed : 250,
+ closeEasing : 'swing',
+ closeOpacity : true,
+ closeMethod : 'zoomOut',
+
+ // Changing next gallery item
+ nextEffect : 'elastic', // 'elastic', 'fade' or 'none'
+ nextSpeed : 250,
+ nextEasing : 'swing',
+ nextMethod : 'changeIn',
+
+ // Changing previous gallery item
+ prevEffect : 'elastic', // 'elastic', 'fade' or 'none'
+ prevSpeed : 250,
+ prevEasing : 'swing',
+ prevMethod : 'changeOut',
+
+ // Enable default helpers
+ helpers : {
+ overlay : true,
+ title : true
+ },
+
+ // Callbacks
+ onCancel : $.noop, // If canceling
+ beforeLoad : $.noop, // Before loading
+ afterLoad : $.noop, // After loading
+ beforeShow : $.noop, // Before changing in current item
+ afterShow : $.noop, // After opening
+ beforeChange : $.noop, // Before changing gallery item
+ beforeClose : $.noop, // Before closing
+ afterClose : $.noop // After closing
+ },
+
+ //Current state
+ group : {}, // Selected group
+ opts : {}, // Group options
+ previous : null, // Previous element
+ coming : null, // Element being loaded
+ current : null, // Currently loaded element
+ isActive : false, // Is activated
+ isOpen : false, // Is currently open
+ isOpened : false, // Have been fully opened at least once
+
+ wrap : null,
+ skin : null,
+ outer : null,
+ inner : null,
+
+ player : {
+ timer : null,
+ isActive : false
+ },
+
+ // Loaders
+ ajaxLoad : null,
+ imgPreload : null,
+
+ // Some collections
+ transitions : {},
+ helpers : {},
+
+ /*
+ * Static methods
+ */
+
+ open: function (group, opts) {
+ if (!group) {
+ return;
+ }
+
+ if (!$.isPlainObject(opts)) {
+ opts = {};
+ }
+
+ // Close if already active
+ if (false === F.close(true)) {
+ return;
+ }
+
+ // Normalize group
+ if (!$.isArray(group)) {
+ group = isQuery(group) ? $(group).get() : [group];
+ }
+
+ // Recheck if the type of each element is `object` and set content type (image, ajax, etc)
+ $.each(group, function(i, element) {
+ var obj = {},
+ href,
+ title,
+ content,
+ type,
+ rez,
+ hrefParts,
+ selector;
+
+ if ($.type(element) === "object") {
+ // Check if is DOM element
+ if (element.nodeType) {
+ element = $(element);
+ }
+
+ if (isQuery(element)) {
+ obj = {
+ href : element.data('fancybox-href') || element.attr('href'),
+ title : element.data('fancybox-title') || element.attr('title'),
+ isDom : true,
+ element : element
+ };
+
+ if ($.metadata) {
+ $.extend(true, obj, element.metadata());
+ }
+
+ } else {
+ obj = element;
+ }
+ }
+
+ href = opts.href || obj.href || (isString(element) ? element : null);
+ title = opts.title !== undefined ? opts.title : obj.title || '';
+
+ content = opts.content || obj.content;
+ type = content ? 'html' : (opts.type || obj.type);
+
+ if (!type && obj.isDom) {
+ type = element.data('fancybox-type');
+
+ if (!type) {
+ rez = element.prop('class').match(/fancybox\.(\w+)/);
+ type = rez ? rez[1] : null;
+ }
+ }
+
+ if (isString(href)) {
+ // Try to guess the content type
+ if (!type) {
+ if (F.isImage(href)) {
+ type = 'image';
+
+ } else if (F.isSWF(href)) {
+ type = 'swf';
+
+ } else if (href.charAt(0) === '#') {
+ type = 'inline';
+
+ } else if (isString(element)) {
+ type = 'html';
+ content = element;
+ }
+ }
+
+ // Split url into two pieces with source url and content selector, e.g,
+ // "/mypage.html #my_id" will load "/mypage.html" and display element having id "my_id"
+ if (type === 'ajax') {
+ hrefParts = href.split(/\s+/, 2);
+ href = hrefParts.shift();
+ selector = hrefParts.shift();
+ }
+ }
+
+ if (!content) {
+ if (type === 'inline') {
+ if (href) {
+ content = $( isString(href) ? href.replace(/.*(?=#[^\s]+$)/, '') : href ); //strip for ie7
+
+ } else if (obj.isDom) {
+ content = element;
+ }
+
+ } else if (type === 'html') {
+ content = href;
+
+ } else if (!type && !href && obj.isDom) {
+ type = 'inline';
+ content = element;
+ }
+ }
+
+ $.extend(obj, {
+ href : href,
+ type : type,
+ content : content,
+ title : title,
+ selector : selector
+ });
+
+ group[ i ] = obj;
+ });
+
+ // Extend the defaults
+ F.opts = $.extend(true, {}, F.defaults, opts);
+
+ // All options are merged recursive except keys
+ if (opts.keys !== undefined) {
+ F.opts.keys = opts.keys ? $.extend({}, F.defaults.keys, opts.keys) : false;
+ }
+
+ F.group = group;
+
+ return F._start(F.opts.index);
+ },
+
+ // Cancel image loading or abort ajax request
+ cancel: function () {
+ var coming = F.coming;
+
+ if (!coming || false === F.trigger('onCancel')) {
+ return;
+ }
+
+ F.hideLoading();
+
+ if (F.ajaxLoad) {
+ F.ajaxLoad.abort();
+ }
+
+ F.ajaxLoad = null;
+
+ if (F.imgPreload) {
+ F.imgPreload.onload = F.imgPreload.onerror = null;
+ }
+
+ if (coming.wrap) {
+ coming.wrap.stop(true, true).trigger('onReset').remove();
+ }
+
+ F.coming = null;
+
+ // If the first item has been canceled, then clear everything
+ if (!F.current) {
+ F._afterZoomOut( coming );
+ }
+ },
+
+ // Start closing animation if is open; remove immediately if opening/closing
+ close: function (event) {
+ F.cancel();
+
+ if (false === F.trigger('beforeClose')) {
+ return;
+ }
+
+ F.unbindEvents();
+
+ if (!F.isActive) {
+ return;
+ }
+
+ if (!F.isOpen || event === true) {
+ $('.fancybox-wrap').stop(true).trigger('onReset').remove();
+
+ F._afterZoomOut();
+
+ } else {
+ F.isOpen = F.isOpened = false;
+ F.isClosing = true;
+
+ $('.fancybox-item, .fancybox-nav').remove();
+
+ F.wrap.stop(true, true).removeClass('fancybox-opened');
+
+ F.transitions[ F.current.closeMethod ]();
+ }
+ },
+
+ // Manage slideshow:
+ // $.fancybox.play(); - toggle slideshow
+ // $.fancybox.play( true ); - start
+ // $.fancybox.play( false ); - stop
+ play: function ( action ) {
+ var clear = function () {
+ clearTimeout(F.player.timer);
+ },
+ set = function () {
+ clear();
+
+ if (F.current && F.player.isActive) {
+ F.player.timer = setTimeout(F.next, F.current.playSpeed);
+ }
+ },
+ stop = function () {
+ clear();
+
+ D.unbind('.player');
+
+ F.player.isActive = false;
+
+ F.trigger('onPlayEnd');
+ },
+ start = function () {
+ if (F.current && (F.current.loop || F.current.index < F.group.length - 1)) {
+ F.player.isActive = true;
+
+ D.bind({
+ 'onCancel.player beforeClose.player' : stop,
+ 'onUpdate.player' : set,
+ 'beforeLoad.player' : clear
+ });
+
+ set();
+
+ F.trigger('onPlayStart');
+ }
+ };
+
+ if (action === true || (!F.player.isActive && action !== false)) {
+ start();
+ } else {
+ stop();
+ }
+ },
+
+ // Navigate to next gallery item
+ next: function ( direction ) {
+ var current = F.current;
+
+ if (current) {
+ if (!isString(direction)) {
+ direction = current.direction.next;
+ }
+
+ F.jumpto(current.index + 1, direction, 'next');
+ }
+ },
+
+ // Navigate to previous gallery item
+ prev: function ( direction ) {
+ var current = F.current;
+
+ if (current) {
+ if (!isString(direction)) {
+ direction = current.direction.prev;
+ }
+
+ F.jumpto(current.index - 1, direction, 'prev');
+ }
+ },
+
+ // Navigate to gallery item by index
+ jumpto: function ( index, direction, router ) {
+ var current = F.current;
+
+ if (!current) {
+ return;
+ }
+
+ index = getScalar(index);
+
+ F.direction = direction || current.direction[ (index >= current.index ? 'next' : 'prev') ];
+ F.router = router || 'jumpto';
+
+ if (current.loop) {
+ if (index < 0) {
+ index = current.group.length + (index % current.group.length);
+ }
+
+ index = index % current.group.length;
+ }
+
+ if (current.group[ index ] !== undefined) {
+ F.cancel();
+
+ F._start(index);
+ }
+ },
+
+ // Center inside viewport and toggle position type to fixed or absolute if needed
+ reposition: function (e, onlyAbsolute) {
+ var current = F.current,
+ wrap = current ? current.wrap : null,
+ pos;
+
+ if (wrap) {
+ pos = F._getPosition(onlyAbsolute);
+
+ if (e && e.type === 'scroll') {
+ delete pos.position;
+
+ wrap.stop(true, true).animate(pos, 200);
+
+ } else {
+ wrap.css(pos);
+
+ current.pos = $.extend({}, current.dim, pos);
+ }
+ }
+ },
+
+ update: function (e) {
+ var type = (e && e.type),
+ anyway = !type || type === 'orientationchange';
+
+ if (anyway) {
+ clearTimeout(didUpdate);
+
+ didUpdate = null;
+ }
+
+ if (!F.isOpen || didUpdate) {
+ return;
+ }
+
+ didUpdate = setTimeout(function() {
+ var current = F.current;
+
+ if (!current || F.isClosing) {
+ return;
+ }
+
+ F.wrap.removeClass('fancybox-tmp');
+
+ if (anyway || type === 'load' || (type === 'resize' && current.autoResize)) {
+ F._setDimension();
+ }
+
+ if (!(type === 'scroll' && current.canShrink)) {
+ F.reposition(e);
+ }
+
+ F.trigger('onUpdate');
+
+ didUpdate = null;
+
+ }, (anyway && !isTouch ? 0 : 300));
+ },
+
+ // Shrink content to fit inside viewport or restore if resized
+ toggle: function ( action ) {
+ if (F.isOpen) {
+ F.current.fitToView = $.type(action) === "boolean" ? action : !F.current.fitToView;
+
+ // Help browser to restore document dimensions
+ if (isTouch) {
+ F.wrap.removeAttr('style').addClass('fancybox-tmp');
+
+ F.trigger('onUpdate');
+ }
+
+ F.update();
+ }
+ },
+
+ hideLoading: function () {
+ D.unbind('.loading');
+
+ $('#fancybox-loading').remove();
+ },
+
+ showLoading: function () {
+ var el, viewport;
+
+ F.hideLoading();
+
+ el = $('<div id="fancybox-loading"><div></div></div>').click(F.cancel).appendTo('body');
+
+ // If user will press the escape-button, the request will be canceled
+ D.bind('keydown.loading', function(e) {
+ if ((e.which || e.keyCode) === 27) {
+ e.preventDefault();
+
+ F.cancel();
+ }
+ });
+
+ if (!F.defaults.fixed) {
+ viewport = F.getViewport();
+
+ el.css({
+ position : 'absolute',
+ top : (viewport.h * 0.5) + viewport.y,
+ left : (viewport.w * 0.5) + viewport.x
+ });
+ }
+ },
+
+ getViewport: function () {
+ var locked = (F.current && F.current.locked) || false,
+ rez = {
+ x: W.scrollLeft(),
+ y: W.scrollTop()
+ };
+
+ if (locked) {
+ rez.w = locked[0].clientWidth;
+ rez.h = locked[0].clientHeight;
+
+ } else {
+ // See http://bugs.jquery.com/ticket/6724
+ rez.w = isTouch && window.innerWidth ? window.innerWidth : W.width();
+ rez.h = isTouch && window.innerHeight ? window.innerHeight : W.height();
+ }
+
+ return rez;
+ },
+
+ // Unbind the keyboard / clicking actions
+ unbindEvents: function () {
+ if (F.wrap && isQuery(F.wrap)) {
+ F.wrap.unbind('.fb');
+ }
+
+ D.unbind('.fb');
+ W.unbind('.fb');
+ },
+
+ bindEvents: function () {
+ var current = F.current,
+ keys;
+
+ if (!current) {
+ return;
+ }
+
+ // Changing document height on iOS devices triggers a 'resize' event,
+ // that can change document height... repeating infinitely
+ W.bind('orientationchange.fb' + (isTouch ? '' : ' resize.fb') + (current.autoCenter && !current.locked ? ' scroll.fb' : ''), F.update);
+
+ keys = current.keys;
+
+ if (keys) {
+ D.bind('keydown.fb', function (e) {
+ var code = e.which || e.keyCode,
+ target = e.target || e.srcElement;
+
+ // Skip esc key if loading, because showLoading will cancel preloading
+ if (code === 27 && F.coming) {
+ return false;
+ }
+
+ // Ignore key combinations and key events within form elements
+ if (!e.ctrlKey && !e.altKey && !e.shiftKey && !e.metaKey && !(target && (target.type || $(target).is('[contenteditable]')))) {
+ $.each(keys, function(i, val) {
+ if (current.group.length > 1 && val[ code ] !== undefined) {
+ F[ i ]( val[ code ] );
+
+ e.preventDefault();
+ return false;
+ }
+
+ if ($.inArray(code, val) > -1) {
+ F[ i ] ();
+
+ e.preventDefault();
+ return false;
+ }
+ });
+ }
+ });
+ }
+
+ if ($.fn.mousewheel && current.mouseWheel) {
+ F.wrap.bind('mousewheel.fb', function (e, delta, deltaX, deltaY) {
+ var target = e.target || null,
+ parent = $(target),
+ canScroll = false;
+
+ while (parent.length) {
+ if (canScroll || parent.is('.fancybox-skin') || parent.is('.fancybox-wrap')) {
+ break;
+ }
+
+ canScroll = isScrollable( parent[0] );
+ parent = $(parent).parent();
+ }
+
+ if (delta !== 0 && !canScroll) {
+ if (F.group.length > 1 && !current.canShrink) {
+ if (deltaY > 0 || deltaX > 0) {
+ F.prev( deltaY > 0 ? 'down' : 'left' );
+
+ } else if (deltaY < 0 || deltaX < 0) {
+ F.next( deltaY < 0 ? 'up' : 'right' );
+ }
+
+ e.preventDefault();
+ }
+ }
+ });
+ }
+ },
+
+ trigger: function (event, o) {
+ var ret, obj = o || F.coming || F.current;
+
+ if (!obj) {
+ return;
+ }
+
+ if ($.isFunction( obj[event] )) {
+ ret = obj[event].apply(obj, Array.prototype.slice.call(arguments, 1));
+ }
+
+ if (ret === false) {
+ return false;
+ }
+
+ if (obj.helpers) {
+ $.each(obj.helpers, function (helper, opts) {
+ if (opts && F.helpers[helper] && $.isFunction(F.helpers[helper][event])) {
+ F.helpers[helper][event]($.extend(true, {}, F.helpers[helper].defaults, opts), obj);
+ }
+ });
+ }
+
+ D.trigger(event);
+ },
+
+ isImage: function (str) {
+ return isString(str) && str.match(/(^data:image\/.*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg)((\?|#).*)?$)/i);
+ },
+
+ isSWF: function (str) {
+ return isString(str) && str.match(/\.(swf)((\?|#).*)?$/i);
+ },
+
+ _start: function (index) {
+ var coming = {},
+ obj,
+ href,
+ type,
+ margin,
+ padding;
+
+ index = getScalar( index );
+ obj = F.group[ index ] || null;
+
+ if (!obj) {
+ return false;
+ }
+
+ coming = $.extend(true, {}, F.opts, obj);
+
+ // Convert margin and padding properties to array - top, right, bottom, left
+ margin = coming.margin;
+ padding = coming.padding;
+
+ if ($.type(margin) === 'number') {
+ coming.margin = [margin, margin, margin, margin];
+ }
+
+ if ($.type(padding) === 'number') {
+ coming.padding = [padding, padding, padding, padding];
+ }
+
+ // 'modal' propery is just a shortcut
+ if (coming.modal) {
+ $.extend(true, coming, {
+ closeBtn : false,
+ closeClick : false,
+ nextClick : false,
+ arrows : false,
+ mouseWheel : false,
+ keys : null,
+ helpers: {
+ overlay : {
+ closeClick : false
+ }
+ }
+ });
+ }
+
+ // 'autoSize' property is a shortcut, too
+ if (coming.autoSize) {
+ coming.autoWidth = coming.autoHeight = true;
+ }
+
+ if (coming.width === 'auto') {
+ coming.autoWidth = true;
+ }
+
+ if (coming.height === 'auto') {
+ coming.autoHeight = true;
+ }
+
+ /*
+ * Add reference to the group, so it`s possible to access from callbacks, example:
+ * afterLoad : function() {
+ * this.title = 'Image ' + (this.index + 1) + ' of ' + this.group.length + (this.title ? ' - ' + this.title : '');
+ * }
+ */
+
+ coming.group = F.group;
+ coming.index = index;
+
+ // Give a chance for callback or helpers to update coming item (type, title, etc)
+ F.coming = coming;
+
+ if (false === F.trigger('beforeLoad')) {
+ F.coming = null;
+
+ return;
+ }
+
+ type = coming.type;
+ href = coming.href;
+
+ if (!type) {
+ F.coming = null;
+
+ //If we can not determine content type then drop silently or display next/prev item if looping through gallery
+ if (F.current && F.router && F.router !== 'jumpto') {
+ F.current.index = index;
+
+ return F[ F.router ]( F.direction );
+ }
+
+ return false;
+ }
+
+ F.isActive = true;
+
+ if (type === 'image' || type === 'swf') {
+ coming.autoHeight = coming.autoWidth = false;
+ coming.scrolling = 'visible';
+ }
+
+ if (type === 'image') {
+ coming.aspectRatio = true;
+ }
+
+ if (type === 'iframe' && isTouch) {
+ coming.scrolling = 'scroll';
+ }
+
+ // Build the neccessary markup
+ coming.wrap = $(coming.tpl.wrap).addClass('fancybox-' + (isTouch ? 'mobile' : 'desktop') + ' fancybox-type-' + type + ' fancybox-tmp ' + coming.wrapCSS).appendTo( coming.parent || 'body' );
+
+ $.extend(coming, {
+ skin : $('.fancybox-skin', coming.wrap),
+ outer : $('.fancybox-outer', coming.wrap),
+ inner : $('.fancybox-inner', coming.wrap)
+ });
+
+ $.each(["Top", "Right", "Bottom", "Left"], function(i, v) {
+ coming.skin.css('padding' + v, getValue(coming.padding[ i ]));
+ });
+
+ F.trigger('onReady');
+
+ // Check before try to load; 'inline' and 'html' types need content, others - href
+ if (type === 'inline' || type === 'html') {
+ if (!coming.content || !coming.content.length) {
+ return F._error( 'content' );
+ }
+
+ } else if (!href) {
+ return F._error( 'href' );
+ }
+
+ if (type === 'image') {
+ F._loadImage();
+
+ } else if (type === 'ajax') {
+ F._loadAjax();
+
+ } else if (type === 'iframe') {
+ F._loadIframe();
+
+ } else {
+ F._afterLoad();
+ }
+ },
+
+ _error: function ( type ) {
+ $.extend(F.coming, {
+ type : 'html',
+ autoWidth : true,
+ autoHeight : true,
+ minWidth : 0,
+ minHeight : 0,
+ scrolling : 'no',
+ hasError : type,
+ content : F.coming.tpl.error
+ });
+
+ F._afterLoad();
+ },
+
+ _loadImage: function () {
+ // Reset preload image so it is later possible to check "complete" property
+ var img = F.imgPreload = new Image();
+
+ img.onload = function () {
+ this.onload = this.onerror = null;
+
+ F.coming.width = this.width / F.opts.pixelRatio;
+ F.coming.height = this.height / F.opts.pixelRatio;
+
+ F._afterLoad();
+ };
+
+ img.onerror = function () {
+ this.onload = this.onerror = null;
+
+ F._error( 'image' );
+ };
+
+ img.src = F.coming.href;
+
+ if (img.complete !== true) {
+ F.showLoading();
+ }
+ },
+
+ _loadAjax: function () {
+ var coming = F.coming;
+
+ F.showLoading();
+
+ F.ajaxLoad = $.ajax($.extend({}, coming.ajax, {
+ url: coming.href,
+ error: function (jqXHR, textStatus) {
+ if (F.coming && textStatus !== 'abort') {
+ F._error( 'ajax', jqXHR );
+
+ } else {
+ F.hideLoading();
+ }
+ },
+ success: function (data, textStatus) {
+ if (textStatus === 'success') {
+ coming.content = data;
+
+ F._afterLoad();
+ }
+ }
+ }));
+ },
+
+ _loadIframe: function() {
+ var coming = F.coming,
+ iframe = $(coming.tpl.iframe.replace(/\{rnd\}/g, new Date().getTime()))
+ .attr('scrolling', isTouch ? 'auto' : coming.iframe.scrolling)
+ .attr('src', coming.href);
+
+ // This helps IE
+ $(coming.wrap).bind('onReset', function () {
+ try {
+ $(this).find('iframe').hide().attr('src', '//about:blank').end().empty();
+ } catch (e) {}
+ });
+
+ if (coming.iframe.preload) {
+ F.showLoading();
+
+ iframe.one('load', function() {
+ $(this).data('ready', 1);
+
+ // iOS will lose scrolling if we resize
+ if (!isTouch) {
+ $(this).bind('load.fb', F.update);
+ }
+
+ // Without this trick:
+ // - iframe won't scroll on iOS devices
+ // - IE7 sometimes displays empty iframe
+ $(this).parents('.fancybox-wrap').width('100%').removeClass('fancybox-tmp').show();
+
+ F._afterLoad();
+ });
+ }
+
+ coming.content = iframe.appendTo( coming.inner );
+
+ if (!coming.iframe.preload) {
+ F._afterLoad();
+ }
+ },
+
+ _preloadImages: function() {
+ var group = F.group,
+ current = F.current,
+ len = group.length,
+ cnt = current.preload ? Math.min(current.preload, len - 1) : 0,
+ item,
+ i;
+
+ for (i = 1; i <= cnt; i += 1) {
+ item = group[ (current.index + i ) % len ];
+
+ if (item.type === 'image' && item.href) {
+ new Image().src = item.href;
+ }
+ }
+ },
+
+ _afterLoad: function () {
+ var coming = F.coming,
+ previous = F.current,
+ placeholder = 'fancybox-placeholder',
+ current,
+ content,
+ type,
+ scrolling,
+ href,
+ embed;
+
+ F.hideLoading();
+
+ if (!coming || F.isActive === false) {
+ return;
+ }
+
+ if (false === F.trigger('afterLoad', coming, previous)) {
+ coming.wrap.stop(true).trigger('onReset').remove();
+
+ F.coming = null;
+
+ return;
+ }
+
+ if (previous) {
+ F.trigger('beforeChange', previous);
+
+ previous.wrap.stop(true).removeClass('fancybox-opened')
+ .find('.fancybox-item, .fancybox-nav')
+ .remove();
+ }
+
+ F.unbindEvents();
+
+ current = coming;
+ content = coming.content;
+ type = coming.type;
+ scrolling = coming.scrolling;
+
+ $.extend(F, {
+ wrap : current.wrap,
+ skin : current.skin,
+ outer : current.outer,
+ inner : current.inner,
+ current : current,
+ previous : previous
+ });
+
+ href = current.href;
+
+ switch (type) {
+ case 'inline':
+ case 'ajax':
+ case 'html':
+ if (current.selector) {
+ content = $('<div>').html(content).find(current.selector);
+
+ } else if (isQuery(content)) {
+ if (!content.data(placeholder)) {
+ content.data(placeholder, $('<div class="' + placeholder + '"></div>').insertAfter( content ).hide() );
+ }
+
+ content = content.show().detach();
+
+ current.wrap.bind('onReset', function () {
+ if ($(this).find(content).length) {
+ content.hide().replaceAll( content.data(placeholder) ).data(placeholder, false);
+ }
+ });
+ }
+ break;
+
+ case 'image':
+ content = current.tpl.image.replace('{href}', href);
+ break;
+
+ case 'swf':
+ content = '<object id="fancybox-swf" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="100%" height="100%"><param name="movie" value="' + href + '"></param>';
+ embed = '';
+
+ $.each(current.swf, function(name, val) {
+ content += '<param name="' + name + '" value="' + val + '"></param>';
+ embed += ' ' + name + '="' + val + '"';
+ });
+
+ content += '<embed src="' + href + '" type="application/x-shockwave-flash" width="100%" height="100%"' + embed + '></embed></object>';
+ break;
+ }
+
+ if (!(isQuery(content) && content.parent().is(current.inner))) {
+ current.inner.append( content );
+ }
+
+ // Give a chance for helpers or callbacks to update elements
+ F.trigger('beforeShow');
+
+ // Set scrolling before calculating dimensions
+ current.inner.css('overflow', scrolling === 'yes' ? 'scroll' : (scrolling === 'no' ? 'hidden' : scrolling));
+
+ // Set initial dimensions and start position
+ F._setDimension();
+
+ F.reposition();
+
+ F.isOpen = false;
+ F.coming = null;
+
+ F.bindEvents();
+
+ if (!F.isOpened) {
+ $('.fancybox-wrap').not( current.wrap ).stop(true).trigger('onReset').remove();
+
+ } else if (previous.prevMethod) {
+ F.transitions[ previous.prevMethod ]();
+ }
+
+ F.transitions[ F.isOpened ? current.nextMethod : current.openMethod ]();
+
+ F._preloadImages();
+ },
+
+ _setDimension: function () {
+ var viewport = F.getViewport(),
+ steps = 0,
+ canShrink = false,
+ canExpand = false,
+ wrap = F.wrap,
+ skin = F.skin,
+ inner = F.inner,
+ current = F.current,
+ width = current.width,
+ height = current.height,
+ minWidth = current.minWidth,
+ minHeight = current.minHeight,
+ maxWidth = current.maxWidth,
+ maxHeight = current.maxHeight,
+ scrolling = current.scrolling,
+ scrollOut = current.scrollOutside ? current.scrollbarWidth : 0,
+ margin = current.margin,
+ wMargin = getScalar(margin[1] + margin[3]),
+ hMargin = getScalar(margin[0] + margin[2]),
+ wPadding,
+ hPadding,
+ wSpace,
+ hSpace,
+ origWidth,
+ origHeight,
+ origMaxWidth,
+ origMaxHeight,
+ ratio,
+ width_,
+ height_,
+ maxWidth_,
+ maxHeight_,
+ iframe,
+ body;
+
+ // Reset dimensions so we could re-check actual size
+ wrap.add(skin).add(inner).width('auto').height('auto').removeClass('fancybox-tmp');
+
+ wPadding = getScalar(skin.outerWidth(true) - skin.width());
+ hPadding = getScalar(skin.outerHeight(true) - skin.height());
+
+ // Any space between content and viewport (margin, padding, border, title)
+ wSpace = wMargin + wPadding;
+ hSpace = hMargin + hPadding;
+
+ origWidth = isPercentage(width) ? (viewport.w - wSpace) * getScalar(width) / 100 : width;
+ origHeight = isPercentage(height) ? (viewport.h - hSpace) * getScalar(height) / 100 : height;
+
+ if (current.type === 'iframe') {
+ iframe = current.content;
+
+ if (current.autoHeight && iframe.data('ready') === 1) {
+ try {
+ if (iframe[0].contentWindow.document.location) {
+ inner.width( origWidth ).height(9999);
+
+ body = iframe.contents().find('body');
+
+ if (scrollOut) {
+ body.css('overflow-x', 'hidden');
+ }
+
+ origHeight = body.outerHeight(true);
+ }
+
+ } catch (e) {}
+ }
+
+ } else if (current.autoWidth || current.autoHeight) {
+ inner.addClass( 'fancybox-tmp' );
+
+ // Set width or height in case we need to calculate only one dimension
+ if (!current.autoWidth) {
+ inner.width( origWidth );
+ }
+
+ if (!current.autoHeight) {
+ inner.height( origHeight );
+ }
+
+ if (current.autoWidth) {
+ origWidth = inner.width();
+ }
+
+ if (current.autoHeight) {
+ origHeight = inner.height();
+ }
+
+ inner.removeClass( 'fancybox-tmp' );
+ }
+
+ width = getScalar( origWidth );
+ height = getScalar( origHeight );
+
+ ratio = origWidth / origHeight;
+
+ // Calculations for the content
+ minWidth = getScalar(isPercentage(minWidth) ? getScalar(minWidth, 'w') - wSpace : minWidth);
+ maxWidth = getScalar(isPercentage(maxWidth) ? getScalar(maxWidth, 'w') - wSpace : maxWidth);
+
+ minHeight = getScalar(isPercentage(minHeight) ? getScalar(minHeight, 'h') - hSpace : minHeight);
+ maxHeight = getScalar(isPercentage(maxHeight) ? getScalar(maxHeight, 'h') - hSpace : maxHeight);
+
+ // These will be used to determine if wrap can fit in the viewport
+ origMaxWidth = maxWidth;
+ origMaxHeight = maxHeight;
+
+ if (current.fitToView) {
+ maxWidth = Math.min(viewport.w - wSpace, maxWidth);
+ maxHeight = Math.min(viewport.h - hSpace, maxHeight);
+ }
+
+ maxWidth_ = viewport.w - wMargin;
+ maxHeight_ = viewport.h - hMargin;
+
+ if (current.aspectRatio) {
+ if (width > maxWidth) {
+ width = maxWidth;
+ height = getScalar(width / ratio);
+ }
+
+ if (height > maxHeight) {
+ height = maxHeight;
+ width = getScalar(height * ratio);
+ }
+
+ if (width < minWidth) {
+ width = minWidth;
+ height = getScalar(width / ratio);
+ }
+
+ if (height < minHeight) {
+ height = minHeight;
+ width = getScalar(height * ratio);
+ }
+
+ } else {
+ width = Math.max(minWidth, Math.min(width, maxWidth));
+
+ if (current.autoHeight && current.type !== 'iframe') {
+ inner.width( width );
+
+ height = inner.height();
+ }
+
+ height = Math.max(minHeight, Math.min(height, maxHeight));
+ }
+
+ // Try to fit inside viewport (including the title)
+ if (current.fitToView) {
+ inner.width( width ).height( height );
+
+ wrap.width( width + wPadding );
+
+ // Real wrap dimensions
+ width_ = wrap.width();
+ height_ = wrap.height();
+
+ if (current.aspectRatio) {
+ while ((width_ > maxWidth_ || height_ > maxHeight_) && width > minWidth && height > minHeight) {
+ if (steps++ > 19) {
+ break;
+ }
+
+ height = Math.max(minHeight, Math.min(maxHeight, height - 10));
+ width = getScalar(height * ratio);
+
+ if (width < minWidth) {
+ width = minWidth;
+ height = getScalar(width / ratio);
+ }
+
+ if (width > maxWidth) {
+ width = maxWidth;
+ height = getScalar(width / ratio);
+ }
+
+ inner.width( width ).height( height );
+
+ wrap.width( width + wPadding );
+
+ width_ = wrap.width();
+ height_ = wrap.height();
+ }
+
+ } else {
+ width = Math.max(minWidth, Math.min(width, width - (width_ - maxWidth_)));
+ height = Math.max(minHeight, Math.min(height, height - (height_ - maxHeight_)));
+ }
+ }
+
+ if (scrollOut && scrolling === 'auto' && height < origHeight && (width + wPadding + scrollOut) < maxWidth_) {
+ width += scrollOut;
+ }
+
+ inner.width( width ).height( height );
+
+ wrap.width( width + wPadding );
+
+ width_ = wrap.width();
+ height_ = wrap.height();
+
+ canShrink = (width_ > maxWidth_ || height_ > maxHeight_) && width > minWidth && height > minHeight;
+ canExpand = current.aspectRatio ? (width < origMaxWidth && height < origMaxHeight && width < origWidth && height < origHeight) : ((width < origMaxWidth || height < origMaxHeight) && (width < origWidth || height < origHeight));
+
+ $.extend(current, {
+ dim : {
+ width : getValue( width_ ),
+ height : getValue( height_ )
+ },
+ origWidth : origWidth,
+ origHeight : origHeight,
+ canShrink : canShrink,
+ canExpand : canExpand,
+ wPadding : wPadding,
+ hPadding : hPadding,
+ wrapSpace : height_ - skin.outerHeight(true),
+ skinSpace : skin.height() - height
+ });
+
+ if (!iframe && current.autoHeight && height > minHeight && height < maxHeight && !canExpand) {
+ inner.height('auto');
+ }
+ },
+
+ _getPosition: function (onlyAbsolute) {
+ var current = F.current,
+ viewport = F.getViewport(),
+ margin = current.margin,
+ width = F.wrap.width() + margin[1] + margin[3],
+ height = F.wrap.height() + margin[0] + margin[2],
+ rez = {
+ position: 'absolute',
+ top : margin[0],
+ left : margin[3]
+ };
+
+ if (current.autoCenter && current.fixed && !onlyAbsolute && height <= viewport.h && width <= viewport.w) {
+ rez.position = 'fixed';
+
+ } else if (!current.locked) {
+ rez.top += viewport.y;
+ rez.left += viewport.x;
+ }
+
+ rez.top = getValue(Math.max(rez.top, rez.top + ((viewport.h - height) * current.topRatio)));
+ rez.left = getValue(Math.max(rez.left, rez.left + ((viewport.w - width) * current.leftRatio)));
+
+ return rez;
+ },
+
+ _afterZoomIn: function () {
+ var current = F.current;
+
+ if (!current) {
+ return;
+ }
+
+ F.isOpen = F.isOpened = true;
+
+ F.wrap.css('overflow', 'visible').addClass('fancybox-opened');
+
+ F.update();
+
+ // Assign a click event
+ if ( current.closeClick || (current.nextClick && F.group.length > 1) ) {
+ F.inner.css('cursor', 'pointer').bind('click.fb', function(e) {
+ if (!$(e.target).is('a') && !$(e.target).parent().is('a')) {
+ e.preventDefault();
+
+ F[ current.closeClick ? 'close' : 'next' ]();
+ }
+ });
+ }
+
+ // Create a close button
+ if (current.closeBtn) {
+ $(current.tpl.closeBtn).appendTo(F.skin).bind('click.fb', function(e) {
+ e.preventDefault();
+
+ F.close();
+ });
+ }
+
+ // Create navigation arrows
+ if (current.arrows && F.group.length > 1) {
+ if (current.loop || current.index > 0) {
+ $(current.tpl.prev).appendTo(F.outer).bind('click.fb', F.prev);
+ }
+
+ if (current.loop || current.index < F.group.length - 1) {
+ $(current.tpl.next).appendTo(F.outer).bind('click.fb', F.next);
+ }
+ }
+
+ F.trigger('afterShow');
+
+ // Stop the slideshow if this is the last item
+ if (!current.loop && current.index === current.group.length - 1) {
+ F.play( false );
+
+ } else if (F.opts.autoPlay && !F.player.isActive) {
+ F.opts.autoPlay = false;
+
+ F.play();
+ }
+ },
+
+ _afterZoomOut: function ( obj ) {
+ obj = obj || F.current;
+
+ $('.fancybox-wrap').trigger('onReset').remove();
+
+ $.extend(F, {
+ group : {},
+ opts : {},
+ router : false,
+ current : null,
+ isActive : false,
+ isOpened : false,
+ isOpen : false,
+ isClosing : false,
+ wrap : null,
+ skin : null,
+ outer : null,
+ inner : null
+ });
+
+ F.trigger('afterClose', obj);
+ }
+ });
+
+ /*
+ * Default transitions
+ */
+
+ F.transitions = {
+ getOrigPosition: function () {
+ var current = F.current,
+ element = current.element,
+ orig = current.orig,
+ pos = {},
+ width = 50,
+ height = 50,
+ hPadding = current.hPadding,
+ wPadding = current.wPadding,
+ viewport = F.getViewport();
+
+ if (!orig && current.isDom && element.is(':visible')) {
+ orig = element.find('img:first');
+
+ if (!orig.length) {
+ orig = element;
+ }
+ }
+
+ if (isQuery(orig)) {
+ pos = orig.offset();
+
+ if (orig.is('img')) {
+ width = orig.outerWidth();
+ height = orig.outerHeight();
+ }
+
+ } else {
+ pos.top = viewport.y + (viewport.h - height) * current.topRatio;
+ pos.left = viewport.x + (viewport.w - width) * current.leftRatio;
+ }
+
+ if (F.wrap.css('position') === 'fixed' || current.locked) {
+ pos.top -= viewport.y;
+ pos.left -= viewport.x;
+ }
+
+ pos = {
+ top : getValue(pos.top - hPadding * current.topRatio),
+ left : getValue(pos.left - wPadding * current.leftRatio),
+ width : getValue(width + wPadding),
+ height : getValue(height + hPadding)
+ };
+
+ return pos;
+ },
+
+ step: function (now, fx) {
+ var ratio,
+ padding,
+ value,
+ prop = fx.prop,
+ current = F.current,
+ wrapSpace = current.wrapSpace,
+ skinSpace = current.skinSpace;
+
+ if (prop === 'width' || prop === 'height') {
+ ratio = fx.end === fx.start ? 1 : (now - fx.start) / (fx.end - fx.start);
+
+ if (F.isClosing) {
+ ratio = 1 - ratio;
+ }
+
+ padding = prop === 'width' ? current.wPadding : current.hPadding;
+ value = now - padding;
+
+ F.skin[ prop ]( getScalar( prop === 'width' ? value : value - (wrapSpace * ratio) ) );
+ F.inner[ prop ]( getScalar( prop === 'width' ? value : value - (wrapSpace * ratio) - (skinSpace * ratio) ) );
+ }
+ },
+
+ zoomIn: function () {
+ var current = F.current,
+ startPos = current.pos,
+ effect = current.openEffect,
+ elastic = effect === 'elastic',
+ endPos = $.extend({opacity : 1}, startPos);
+
+ // Remove "position" property that breaks older IE
+ delete endPos.position;
+
+ if (elastic) {
+ startPos = this.getOrigPosition();
+
+ if (current.openOpacity) {
+ startPos.opacity = 0.1;
+ }
+
+ } else if (effect === 'fade') {
+ startPos.opacity = 0.1;
+ }
+
+ F.wrap.css(startPos).animate(endPos, {
+ duration : effect === 'none' ? 0 : current.openSpeed,
+ easing : current.openEasing,
+ step : elastic ? this.step : null,
+ complete : F._afterZoomIn
+ });
+ },
+
+ zoomOut: function () {
+ var current = F.current,
+ effect = current.closeEffect,
+ elastic = effect === 'elastic',
+ endPos = {opacity : 0.1};
+
+ if (elastic) {
+ endPos = this.getOrigPosition();
+
+ if (current.closeOpacity) {
+ endPos.opacity = 0.1;
+ }
+ }
+
+ F.wrap.animate(endPos, {
+ duration : effect === 'none' ? 0 : current.closeSpeed,
+ easing : current.closeEasing,
+ step : elastic ? this.step : null,
+ complete : F._afterZoomOut
+ });
+ },
+
+ changeIn: function () {
+ var current = F.current,
+ effect = current.nextEffect,
+ startPos = current.pos,
+ endPos = { opacity : 1 },
+ direction = F.direction,
+ distance = 200,
+ field;
+
+ startPos.opacity = 0.1;
+
+ if (effect === 'elastic') {
+ field = direction === 'down' || direction === 'up' ? 'top' : 'left';
+
+ if (direction === 'down' || direction === 'right') {
+ startPos[ field ] = getValue(getScalar(startPos[ field ]) - distance);
+ endPos[ field ] = '+=' + distance + 'px';
+
+ } else {
+ startPos[ field ] = getValue(getScalar(startPos[ field ]) + distance);
+ endPos[ field ] = '-=' + distance + 'px';
+ }
+ }
+
+ // Workaround for http://bugs.jquery.com/ticket/12273
+ if (effect === 'none') {
+ F._afterZoomIn();
+
+ } else {
+ F.wrap.css(startPos).animate(endPos, {
+ duration : current.nextSpeed,
+ easing : current.nextEasing,
+ complete : F._afterZoomIn
+ });
+ }
+ },
+
+ changeOut: function () {
+ var previous = F.previous,
+ effect = previous.prevEffect,
+ endPos = { opacity : 0.1 },
+ direction = F.direction,
+ distance = 200;
+
+ if (effect === 'elastic') {
+ endPos[ direction === 'down' || direction === 'up' ? 'top' : 'left' ] = ( direction === 'up' || direction === 'left' ? '-' : '+' ) + '=' + distance + 'px';
+ }
+
+ previous.wrap.animate(endPos, {
+ duration : effect === 'none' ? 0 : previous.prevSpeed,
+ easing : previous.prevEasing,
+ complete : function () {
+ $(this).trigger('onReset').remove();
+ }
+ });
+ }
+ };
+
+ /*
+ * Overlay helper
+ */
+
+ F.helpers.overlay = {
+ defaults : {
+ closeClick : true, // if true, fancyBox will be closed when user clicks on the overlay
+ speedOut : 200, // duration of fadeOut animation
+ showEarly : true, // indicates if should be opened immediately or wait until the content is ready
+ css : {}, // custom CSS properties
+ locked : !isTouch, // if true, the content will be locked into overlay
+ fixed : true // if false, the overlay CSS position property will not be set to "fixed"
+ },
+
+ overlay : null, // current handle
+ fixed : false, // indicates if the overlay has position "fixed"
+ el : $('html'), // element that contains "the lock"
+
+ // Public methods
+ create : function(opts) {
+ opts = $.extend({}, this.defaults, opts);
+
+ if (this.overlay) {
+ this.close();
+ }
+
+ this.overlay = $('<div class="fancybox-overlay"></div>').appendTo( F.coming ? F.coming.parent : opts.parent );
+ this.fixed = false;
+
+ if (opts.fixed && F.defaults.fixed) {
+ this.overlay.addClass('fancybox-overlay-fixed');
+
+ this.fixed = true;
+ }
+ },
+
+ open : function(opts) {
+ var that = this;
+
+ opts = $.extend({}, this.defaults, opts);
+
+ if (this.overlay) {
+ this.overlay.unbind('.overlay').width('auto').height('auto');
+
+ } else {
+ this.create(opts);
+ }
+
+ if (!this.fixed) {
+ W.bind('resize.overlay', $.proxy( this.update, this) );
+
+ this.update();
+ }
+
+ if (opts.closeClick) {
+ this.overlay.bind('click.overlay', function(e) {
+ if ($(e.target).hasClass('fancybox-overlay')) {
+ if (F.isActive) {
+ F.close();
+ } else {
+ that.close();
+ }
+
+ return false;
+ }
+ });
+ }
+
+ this.overlay.css( opts.css ).show();
+ },
+
+ close : function() {
+ var scrollV, scrollH;
+
+ W.unbind('resize.overlay');
+
+ if (this.el.hasClass('fancybox-lock')) {
+ $('.fancybox-margin').removeClass('fancybox-margin');
+
+ scrollV = W.scrollTop();
+ scrollH = W.scrollLeft();
+
+ this.el.removeClass('fancybox-lock');
+
+ W.scrollTop( scrollV ).scrollLeft( scrollH );
+ }
+
+ $('.fancybox-overlay').remove().hide();
+
+ $.extend(this, {
+ overlay : null,
+ fixed : false
+ });
+ },
+
+ // Private, callbacks
+
+ update : function () {
+ var width = '100%', offsetWidth;
+
+ // Reset width/height so it will not mess
+ this.overlay.width(width).height('100%');
+
+ // jQuery does not return reliable result for IE
+ if (IE) {
+ offsetWidth = Math.max(document.documentElement.offsetWidth, document.body.offsetWidth);
+
+ if (D.width() > offsetWidth) {
+ width = D.width();
+ }
+
+ } else if (D.width() > W.width()) {
+ width = D.width();
+ }
+
+ this.overlay.width(width).height(D.height());
+ },
+
+ // This is where we can manipulate DOM, because later it would cause iframes to reload
+ onReady : function (opts, obj) {
+ var overlay = this.overlay;
+
+ $('.fancybox-overlay').stop(true, true);
+
+ if (!overlay) {
+ this.create(opts);
+ }
+
+ if (opts.locked && this.fixed && obj.fixed) {
+ if (!overlay) {
+ this.margin = D.height() > W.height() ? $('html').css('margin-right').replace("px", "") : false;
+ }
+
+ obj.locked = this.overlay.append( obj.wrap );
+ obj.fixed = false;
+ }
+
+ if (opts.showEarly === true) {
+ this.beforeShow.apply(this, arguments);
+ }
+ },
+
+ beforeShow : function(opts, obj) {
+ var scrollV, scrollH;
+
+ if (obj.locked) {
+ if (this.margin !== false) {
+ $('*').filter(function(){
+ return ($(this).css('position') === 'fixed' && !$(this).hasClass("fancybox-overlay") && !$(this).hasClass("fancybox-wrap") );
+ }).addClass('fancybox-margin');
+
+ this.el.addClass('fancybox-margin');
+ }
+
+ scrollV = W.scrollTop();
+ scrollH = W.scrollLeft();
+
+ this.el.addClass('fancybox-lock');
+
+ W.scrollTop( scrollV ).scrollLeft( scrollH );
+ }
+
+ this.open(opts);
+ },
+
+ onUpdate : function() {
+ if (!this.fixed) {
+ this.update();
+ }
+ },
+
+ afterClose: function (opts) {
+ // Remove overlay if exists and fancyBox is not opening
+ // (e.g., it is not being open using afterClose callback)
+ //if (this.overlay && !F.isActive) {
+ if (this.overlay && !F.coming) {
+ this.overlay.fadeOut(opts.speedOut, $.proxy( this.close, this ));
+ }
+ }
+ };
+
+ /*
+ * Title helper
+ */
+
+ F.helpers.title = {
+ defaults : {
+ type : 'float', // 'float', 'inside', 'outside' or 'over',
+ position : 'bottom' // 'top' or 'bottom'
+ },
+
+ beforeShow: function (opts) {
+ var current = F.current,
+ text = current.title,
+ type = opts.type,
+ title,
+ target;
+
+ if ($.isFunction(text)) {
+ text = text.call(current.element, current);
+ }
+
+ if (!isString(text) || $.trim(text) === '') {
+ return;
+ }
+
+ title = $('<div class="fancybox-title fancybox-title-' + type + '-wrap">' + text + '</div>');
+
+ switch (type) {
+ case 'inside':
+ target = F.skin;
+ break;
+
+ case 'outside':
+ target = F.wrap;
+ break;
+
+ case 'over':
+ target = F.inner;
+ break;
+
+ default: // 'float'
+ target = F.skin;
+
+ title.appendTo('body');
+
+ if (IE) {
+ title.width( title.width() );
+ }
+
+ title.wrapInner('<span class="child"></span>');
+
+ //Increase bottom margin so this title will also fit into viewport
+ F.current.margin[2] += Math.abs( getScalar(title.css('margin-bottom')) );
+ break;
+ }
+
+ title[ (opts.position === 'top' ? 'prependTo' : 'appendTo') ](target);
+ }
+ };
+
+ // jQuery plugin initialization
+ $.fn.fancybox = function (options) {
+ var index,
+ that = $(this),
+ selector = this.selector || '',
+ run = function(e) {
+ var what = $(this).blur(), idx = index, relType, relVal;
+
+ if (!(e.ctrlKey || e.altKey || e.shiftKey || e.metaKey) && !what.is('.fancybox-wrap')) {
+ relType = options.groupAttr || 'data-fancybox-group';
+ relVal = what.attr(relType);
+
+ if (!relVal) {
+ relType = 'rel';
+ relVal = what.get(0)[ relType ];
+ }
+
+ if (relVal && relVal !== '' && relVal !== 'nofollow') {
+ what = selector.length ? $(selector) : that;
+ what = what.filter('[' + relType + '="' + relVal + '"]');
+ idx = what.index(this);
+ }
+
+ options.index = idx;
+
+ // Stop an event from bubbling if everything is fine
+ if (F.open(what, options) !== false) {
+ e.preventDefault();
+ }
+ }
+ };
+
+ options = options || {};
+ index = options.index || 0;
+
+ if (!selector || options.live === false) {
+ that.unbind('click.fb-start').bind('click.fb-start', run);
+
+ } else {
+ D.undelegate(selector, 'click.fb-start').delegate(selector + ":not('.fancybox-item, .fancybox-nav')", 'click.fb-start', run);
+ }
+
+ this.filter('[data-fancybox-start=1]').trigger('click');
+
+ return this;
+ };
+
+ // Tests that need a body at doc ready
+ D.ready(function() {
+ var w1, w2;
+
+ if ( $.scrollbarWidth === undefined ) {
+ // http://benalman.com/projects/jquery-misc-plugins/#scrollbarwidth
+ $.scrollbarWidth = function() {
+ var parent = $('<div style="width:50px;height:50px;overflow:auto"><div/></div>').appendTo('body'),
+ child = parent.children(),
+ width = child.innerWidth() - child.height( 99 ).innerWidth();
+
+ parent.remove();
+
+ return width;
+ };
+ }
+
+ if ( $.support.fixedPosition === undefined ) {
+ $.support.fixedPosition = (function() {
+ var elem = $('<div style="position:fixed;top:20px;"></div>').appendTo('body'),
+ fixed = ( elem[0].offsetTop === 20 || elem[0].offsetTop === 15 );
+
+ elem.remove();
+
+ return fixed;
+ }());
+ }
+
+ $.extend(F.defaults, {
+ scrollbarWidth : $.scrollbarWidth(),
+ fixed : $.support.fixedPosition,
+ parent : $('body')
+ });
+
+ //Get real width of page scroll-bar
+ w1 = $(window).width();
+
+ H.addClass('fancybox-lock-test');
+
+ w2 = $(window).width();
+
+ H.removeClass('fancybox-lock-test');
+
+ $("<style type='text/css'>.fancybox-margin{margin-right:" + (w2 - w1) + "px;}</style>").appendTo("head");
+ });
+
+}(window, document, jQuery));
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ztfy/myams/resources/js/ext/jquery-fancybox-2.1.5.min.js Fri Mar 27 15:53:44 2015 +0100
@@ -0,0 +1,12 @@
+/*
+ * fancyBox - jQuery Plugin
+ * version: 2.1.5 (Fri, 14 Jun 2013)
+ * @requires jQuery v1.6 or later
+ *
+ * Examples at http://fancyapps.com/fancybox/
+ * License: www.fancyapps.com/fancybox/#license
+ *
+ * Copyright 2012 Janis Skarnelis - janis@fancyapps.com
+ *
+ */
+(function(l,o,i,e){var p=i("html"),d=i(l),a=i(o),q=i.fancybox=function(){q.open.apply(this,arguments)},k=navigator.userAgent.match(/msie/i),c=null,f=o.createTouch!==e,j=function(r){return r&&r.hasOwnProperty&&r instanceof i},b=function(r){return r&&i.type(r)==="string"},m=function(r){return b(r)&&r.indexOf("%")>0},h=function(r){return(r&&!(r.style.overflow&&r.style.overflow==="hidden")&&((r.clientWidth&&r.scrollWidth>r.clientWidth)||(r.clientHeight&&r.scrollHeight>r.clientHeight)))},n=function(t,s){var r=parseInt(t,10)||0;if(s&&m(t)){r=q.getViewport()[s]/100*r}return Math.ceil(r)},g=function(r,s){return n(r,s)+"px"};i.extend(q,{version:"2.1.5",defaults:{padding:15,margin:20,width:800,height:600,minWidth:100,minHeight:100,maxWidth:9999,maxHeight:9999,pixelRatio:1,autoSize:true,autoHeight:false,autoWidth:false,autoResize:true,autoCenter:!f,fitToView:true,aspectRatio:false,topRatio:0.5,leftRatio:0.5,scrolling:"auto",wrapCSS:"",arrows:true,closeBtn:true,closeClick:false,nextClick:false,mouseWheel:true,autoPlay:false,playSpeed:3000,preload:3,modal:false,loop:true,ajax:{dataType:"html",headers:{"X-fancyBox":true}},iframe:{scrolling:"auto",preload:true},swf:{wmode:"transparent",allowfullscreen:"true",allowscriptaccess:"always"},keys:{next:{13:"left",34:"up",39:"left",40:"up"},prev:{8:"right",33:"down",37:"right",38:"down"},close:[27],play:[32],toggle:[70]},direction:{next:"left",prev:"right"},scrollOutside:true,index:0,type:null,href:null,content:null,title:null,tpl:{wrap:'<div class="fancybox-wrap" tabIndex="-1"><div class="fancybox-skin"><div class="fancybox-outer"><div class="fancybox-inner"></div></div></div></div>',image:'<img class="fancybox-image" src="{href}" alt="" />',iframe:'<iframe id="fancybox-frame{rnd}" name="fancybox-frame{rnd}" class="fancybox-iframe" frameborder="0" vspace="0" hspace="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen'+(k?' allowtransparency="true"':"")+"></iframe>",error:'<p class="fancybox-error">The requested content cannot be loaded.<br/>Please try again later.</p>',closeBtn:'<a title="Close" class="fancybox-item fancybox-close" href="javascript:;"></a>',next:'<a title="Next" class="fancybox-nav fancybox-next" href="javascript:;"><span></span></a>',prev:'<a title="Previous" class="fancybox-nav fancybox-prev" href="javascript:;"><span></span></a>'},openEffect:"fade",openSpeed:250,openEasing:"swing",openOpacity:true,openMethod:"zoomIn",closeEffect:"fade",closeSpeed:250,closeEasing:"swing",closeOpacity:true,closeMethod:"zoomOut",nextEffect:"elastic",nextSpeed:250,nextEasing:"swing",nextMethod:"changeIn",prevEffect:"elastic",prevSpeed:250,prevEasing:"swing",prevMethod:"changeOut",helpers:{overlay:true,title:true},onCancel:i.noop,beforeLoad:i.noop,afterLoad:i.noop,beforeShow:i.noop,afterShow:i.noop,beforeChange:i.noop,beforeClose:i.noop,afterClose:i.noop},group:{},opts:{},previous:null,coming:null,current:null,isActive:false,isOpen:false,isOpened:false,wrap:null,skin:null,outer:null,inner:null,player:{timer:null,isActive:false},ajaxLoad:null,imgPreload:null,transitions:{},helpers:{},open:function(s,r){if(!s){return}if(!i.isPlainObject(r)){r={}}if(false===q.close(true)){return}if(!i.isArray(s)){s=j(s)?i(s).get():[s]}i.each(s,function(x,y){var w={},t,B,z,A,v,C,u;if(i.type(y)==="object"){if(y.nodeType){y=i(y)}if(j(y)){w={href:y.data("fancybox-href")||y.attr("href"),title:y.data("fancybox-title")||y.attr("title"),isDom:true,element:y};if(i.metadata){i.extend(true,w,y.metadata())}}else{w=y}}t=r.href||w.href||(b(y)?y:null);B=r.title!==e?r.title:w.title||"";z=r.content||w.content;A=z?"html":(r.type||w.type);if(!A&&w.isDom){A=y.data("fancybox-type");if(!A){v=y.prop("class").match(/fancybox\.(\w+)/);A=v?v[1]:null}}if(b(t)){if(!A){if(q.isImage(t)){A="image"}else{if(q.isSWF(t)){A="swf"}else{if(t.charAt(0)==="#"){A="inline"}else{if(b(y)){A="html";z=y}}}}}if(A==="ajax"){C=t.split(/\s+/,2);t=C.shift();u=C.shift()}}if(!z){if(A==="inline"){if(t){z=i(b(t)?t.replace(/.*(?=#[^\s]+$)/,""):t)}else{if(w.isDom){z=y}}}else{if(A==="html"){z=t}else{if(!A&&!t&&w.isDom){A="inline";z=y}}}}i.extend(w,{href:t,type:A,content:z,title:B,selector:u});s[x]=w});q.opts=i.extend(true,{},q.defaults,r);if(r.keys!==e){q.opts.keys=r.keys?i.extend({},q.defaults.keys,r.keys):false}q.group=s;return q._start(q.opts.index)},cancel:function(){var r=q.coming;if(!r||false===q.trigger("onCancel")){return}q.hideLoading();if(q.ajaxLoad){q.ajaxLoad.abort()}q.ajaxLoad=null;if(q.imgPreload){q.imgPreload.onload=q.imgPreload.onerror=null}if(r.wrap){r.wrap.stop(true,true).trigger("onReset").remove()}q.coming=null;if(!q.current){q._afterZoomOut(r)}},close:function(r){q.cancel();if(false===q.trigger("beforeClose")){return}q.unbindEvents();if(!q.isActive){return}if(!q.isOpen||r===true){i(".fancybox-wrap").stop(true).trigger("onReset").remove();q._afterZoomOut()}else{q.isOpen=q.isOpened=false;q.isClosing=true;i(".fancybox-item, .fancybox-nav").remove();q.wrap.stop(true,true).removeClass("fancybox-opened");q.transitions[q.current.closeMethod]()}},play:function(t){var r=function(){clearTimeout(q.player.timer)},v=function(){r();if(q.current&&q.player.isActive){q.player.timer=setTimeout(q.next,q.current.playSpeed)}},s=function(){r();a.unbind(".player");q.player.isActive=false;q.trigger("onPlayEnd")},u=function(){if(q.current&&(q.current.loop||q.current.index<q.group.length-1)){q.player.isActive=true;a.bind({"onCancel.player beforeClose.player":s,"onUpdate.player":v,"beforeLoad.player":r});v();q.trigger("onPlayStart")}};if(t===true||(!q.player.isActive&&t!==false)){u()}else{s()}},next:function(s){var r=q.current;if(r){if(!b(s)){s=r.direction.next}q.jumpto(r.index+1,s,"next")}},prev:function(s){var r=q.current;if(r){if(!b(s)){s=r.direction.prev}q.jumpto(r.index-1,s,"prev")}},jumpto:function(s,u,r){var t=q.current;if(!t){return}s=n(s);q.direction=u||t.direction[(s>=t.index?"next":"prev")];q.router=r||"jumpto";if(t.loop){if(s<0){s=t.group.length+(s%t.group.length)}s=s%t.group.length}if(t.group[s]!==e){q.cancel();q._start(s)}},reposition:function(u,r){var t=q.current,s=t?t.wrap:null,v;if(s){v=q._getPosition(r);if(u&&u.type==="scroll"){delete v.position;s.stop(true,true).animate(v,200)}else{s.css(v);t.pos=i.extend({},t.dim,v)}}},update:function(t){var r=(t&&t.type),s=!r||r==="orientationchange";if(s){clearTimeout(c);c=null}if(!q.isOpen||c){return}c=setTimeout(function(){var u=q.current;if(!u||q.isClosing){return}q.wrap.removeClass("fancybox-tmp");if(s||r==="load"||(r==="resize"&&u.autoResize)){q._setDimension()}if(!(r==="scroll"&&u.canShrink)){q.reposition(t)}q.trigger("onUpdate");c=null},(s&&!f?0:300))},toggle:function(r){if(q.isOpen){q.current.fitToView=i.type(r)==="boolean"?r:!q.current.fitToView;if(f){q.wrap.removeAttr("style").addClass("fancybox-tmp");q.trigger("onUpdate")}q.update()}},hideLoading:function(){a.unbind(".loading");i("#fancybox-loading").remove()},showLoading:function(){var s,r;q.hideLoading();s=i('<div id="fancybox-loading"><div></div></div>').click(q.cancel).appendTo("body");a.bind("keydown.loading",function(t){if((t.which||t.keyCode)===27){t.preventDefault();q.cancel()}});if(!q.defaults.fixed){r=q.getViewport();s.css({position:"absolute",top:(r.h*0.5)+r.y,left:(r.w*0.5)+r.x})}},getViewport:function(){var r=(q.current&&q.current.locked)||false,s={x:d.scrollLeft(),y:d.scrollTop()};if(r){s.w=r[0].clientWidth;s.h=r[0].clientHeight}else{s.w=f&&l.innerWidth?l.innerWidth:d.width();s.h=f&&l.innerHeight?l.innerHeight:d.height()}return s},unbindEvents:function(){if(q.wrap&&j(q.wrap)){q.wrap.unbind(".fb")}a.unbind(".fb");d.unbind(".fb")},bindEvents:function(){var s=q.current,r;if(!s){return}d.bind("orientationchange.fb"+(f?"":" resize.fb")+(s.autoCenter&&!s.locked?" scroll.fb":""),q.update);r=s.keys;if(r){a.bind("keydown.fb",function(v){var t=v.which||v.keyCode,u=v.target||v.srcElement;if(t===27&&q.coming){return false}if(!v.ctrlKey&&!v.altKey&&!v.shiftKey&&!v.metaKey&&!(u&&(u.type||i(u).is("[contenteditable]")))){i.each(r,function(w,x){if(s.group.length>1&&x[t]!==e){q[w](x[t]);v.preventDefault();return false}if(i.inArray(t,x)>-1){q[w]();v.preventDefault();return false}})}})}if(i.fn.mousewheel&&s.mouseWheel){q.wrap.bind("mousewheel.fb",function(y,z,u,t){var x=y.target||null,v=i(x),w=false;while(v.length){if(w||v.is(".fancybox-skin")||v.is(".fancybox-wrap")){break}w=h(v[0]);v=i(v).parent()}if(z!==0&&!w){if(q.group.length>1&&!s.canShrink){if(t>0||u>0){q.prev(t>0?"down":"left")}else{if(t<0||u<0){q.next(t<0?"up":"right")}}y.preventDefault()}}})}},trigger:function(s,u){var r,t=u||q.coming||q.current;if(!t){return}if(i.isFunction(t[s])){r=t[s].apply(t,Array.prototype.slice.call(arguments,1))}if(r===false){return false}if(t.helpers){i.each(t.helpers,function(w,v){if(v&&q.helpers[w]&&i.isFunction(q.helpers[w][s])){q.helpers[w][s](i.extend(true,{},q.helpers[w].defaults,v),t)}})}a.trigger(s)},isImage:function(r){return b(r)&&r.match(/(^data:image\/.*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg)((\?|#).*)?$)/i)},isSWF:function(r){return b(r)&&r.match(/\.(swf)((\?|#).*)?$/i)},_start:function(s){var t={},x,r,u,v,w;s=n(s);x=q.group[s]||null;if(!x){return false}t=i.extend(true,{},q.opts,x);v=t.margin;w=t.padding;if(i.type(v)==="number"){t.margin=[v,v,v,v]}if(i.type(w)==="number"){t.padding=[w,w,w,w]}if(t.modal){i.extend(true,t,{closeBtn:false,closeClick:false,nextClick:false,arrows:false,mouseWheel:false,keys:null,helpers:{overlay:{closeClick:false}}})}if(t.autoSize){t.autoWidth=t.autoHeight=true}if(t.width==="auto"){t.autoWidth=true}if(t.height==="auto"){t.autoHeight=true}t.group=q.group;t.index=s;q.coming=t;if(false===q.trigger("beforeLoad")){q.coming=null;return}u=t.type;r=t.href;if(!u){q.coming=null;if(q.current&&q.router&&q.router!=="jumpto"){q.current.index=s;return q[q.router](q.direction)}return false}q.isActive=true;if(u==="image"||u==="swf"){t.autoHeight=t.autoWidth=false;t.scrolling="visible"}if(u==="image"){t.aspectRatio=true}if(u==="iframe"&&f){t.scrolling="scroll"}t.wrap=i(t.tpl.wrap).addClass("fancybox-"+(f?"mobile":"desktop")+" fancybox-type-"+u+" fancybox-tmp "+t.wrapCSS).appendTo(t.parent||"body");i.extend(t,{skin:i(".fancybox-skin",t.wrap),outer:i(".fancybox-outer",t.wrap),inner:i(".fancybox-inner",t.wrap)});i.each(["Top","Right","Bottom","Left"],function(z,y){t.skin.css("padding"+y,g(t.padding[z]))});q.trigger("onReady");if(u==="inline"||u==="html"){if(!t.content||!t.content.length){return q._error("content")}}else{if(!r){return q._error("href")}}if(u==="image"){q._loadImage()}else{if(u==="ajax"){q._loadAjax()}else{if(u==="iframe"){q._loadIframe()}else{q._afterLoad()}}}},_error:function(r){i.extend(q.coming,{type:"html",autoWidth:true,autoHeight:true,minWidth:0,minHeight:0,scrolling:"no",hasError:r,content:q.coming.tpl.error});q._afterLoad()},_loadImage:function(){var r=q.imgPreload=new Image();r.onload=function(){this.onload=this.onerror=null;q.coming.width=this.width/q.opts.pixelRatio;q.coming.height=this.height/q.opts.pixelRatio;q._afterLoad()};r.onerror=function(){this.onload=this.onerror=null;q._error("image")};r.src=q.coming.href;if(r.complete!==true){q.showLoading()}},_loadAjax:function(){var r=q.coming;q.showLoading();q.ajaxLoad=i.ajax(i.extend({},r.ajax,{url:r.href,error:function(s,t){if(q.coming&&t!=="abort"){q._error("ajax",s)}else{q.hideLoading()}},success:function(s,t){if(t==="success"){r.content=s;q._afterLoad()}}}))},_loadIframe:function(){var r=q.coming,s=i(r.tpl.iframe.replace(/\{rnd\}/g,new Date().getTime())).attr("scrolling",f?"auto":r.iframe.scrolling).attr("src",r.href);i(r.wrap).bind("onReset",function(){try{i(this).find("iframe").hide().attr("src","//about:blank").end().empty()}catch(t){}});if(r.iframe.preload){q.showLoading();s.one("load",function(){i(this).data("ready",1);if(!f){i(this).bind("load.fb",q.update)}i(this).parents(".fancybox-wrap").width("100%").removeClass("fancybox-tmp").show();q._afterLoad()})}r.content=s.appendTo(r.inner);if(!r.iframe.preload){q._afterLoad()}},_preloadImages:function(){var w=q.group,v=q.current,r=w.length,t=v.preload?Math.min(v.preload,r-1):0,u,s;for(s=1;s<=t;s+=1){u=w[(v.index+s)%r];if(u.type==="image"&&u.href){new Image().src=u.href}}},_afterLoad:function(){var s=q.coming,u=q.current,z="fancybox-placeholder",w,x,y,t,r,v;q.hideLoading();if(!s||q.isActive===false){return}if(false===q.trigger("afterLoad",s,u)){s.wrap.stop(true).trigger("onReset").remove();q.coming=null;return}if(u){q.trigger("beforeChange",u);u.wrap.stop(true).removeClass("fancybox-opened").find(".fancybox-item, .fancybox-nav").remove()}q.unbindEvents();w=s;x=s.content;y=s.type;t=s.scrolling;i.extend(q,{wrap:w.wrap,skin:w.skin,outer:w.outer,inner:w.inner,current:w,previous:u});r=w.href;switch(y){case"inline":case"ajax":case"html":if(w.selector){x=i("<div>").html(x).find(w.selector)}else{if(j(x)){if(!x.data(z)){x.data(z,i('<div class="'+z+'"></div>').insertAfter(x).hide())}x=x.show().detach();w.wrap.bind("onReset",function(){if(i(this).find(x).length){x.hide().replaceAll(x.data(z)).data(z,false)}})}}break;case"image":x=w.tpl.image.replace("{href}",r);break;case"swf":x='<object id="fancybox-swf" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="100%" height="100%"><param name="movie" value="'+r+'"></param>';v="";i.each(w.swf,function(A,B){x+='<param name="'+A+'" value="'+B+'"></param>';v+=" "+A+'="'+B+'"'});x+='<embed src="'+r+'" type="application/x-shockwave-flash" width="100%" height="100%"'+v+"></embed></object>";break}if(!(j(x)&&x.parent().is(w.inner))){w.inner.append(x)}q.trigger("beforeShow");w.inner.css("overflow",t==="yes"?"scroll":(t==="no"?"hidden":t));q._setDimension();q.reposition();q.isOpen=false;q.coming=null;q.bindEvents();if(!q.isOpened){i(".fancybox-wrap").not(w.wrap).stop(true).trigger("onReset").remove()}else{if(u.prevMethod){q.transitions[u.prevMethod]()}}q.transitions[q.isOpened?w.nextMethod:w.openMethod]();q._preloadImages()},_setDimension:function(){var U=q.getViewport(),Q=0,W=false,Y=false,C=q.wrap,O=q.skin,Z=q.inner,L=q.current,M=L.width,J=L.height,F=L.minWidth,y=L.minHeight,S=L.maxWidth,K=L.maxHeight,E=L.scrolling,w=L.scrollOutside?L.scrollbarWidth:0,I=L.margin,x=n(I[1]+I[3]),v=n(I[0]+I[2]),t,s,P,R,H,G,N,A,z,V,u,X,r,B,D;C.add(O).add(Z).width("auto").height("auto").removeClass("fancybox-tmp");t=n(O.outerWidth(true)-O.width());s=n(O.outerHeight(true)-O.height());P=x+t;R=v+s;H=m(M)?(U.w-P)*n(M)/100:M;G=m(J)?(U.h-R)*n(J)/100:J;if(L.type==="iframe"){B=L.content;if(L.autoHeight&&B.data("ready")===1){try{if(B[0].contentWindow.document.location){Z.width(H).height(9999);D=B.contents().find("body");if(w){D.css("overflow-x","hidden")}G=D.outerHeight(true)}}catch(T){}}}else{if(L.autoWidth||L.autoHeight){Z.addClass("fancybox-tmp");if(!L.autoWidth){Z.width(H)}if(!L.autoHeight){Z.height(G)}if(L.autoWidth){H=Z.width()}if(L.autoHeight){G=Z.height()}Z.removeClass("fancybox-tmp")}}M=n(H);J=n(G);z=H/G;F=n(m(F)?n(F,"w")-P:F);S=n(m(S)?n(S,"w")-P:S);y=n(m(y)?n(y,"h")-R:y);K=n(m(K)?n(K,"h")-R:K);N=S;A=K;if(L.fitToView){S=Math.min(U.w-P,S);K=Math.min(U.h-R,K)}X=U.w-x;r=U.h-v;if(L.aspectRatio){if(M>S){M=S;J=n(M/z)}if(J>K){J=K;M=n(J*z)}if(M<F){M=F;J=n(M/z)}if(J<y){J=y;M=n(J*z)}}else{M=Math.max(F,Math.min(M,S));if(L.autoHeight&&L.type!=="iframe"){Z.width(M);J=Z.height()}J=Math.max(y,Math.min(J,K))}if(L.fitToView){Z.width(M).height(J);C.width(M+t);V=C.width();u=C.height();if(L.aspectRatio){while((V>X||u>r)&&M>F&&J>y){if(Q++>19){break}J=Math.max(y,Math.min(K,J-10));M=n(J*z);if(M<F){M=F;J=n(M/z)}if(M>S){M=S;J=n(M/z)}Z.width(M).height(J);C.width(M+t);V=C.width();u=C.height()}}else{M=Math.max(F,Math.min(M,M-(V-X)));J=Math.max(y,Math.min(J,J-(u-r)))}}if(w&&E==="auto"&&J<G&&(M+t+w)<X){M+=w}Z.width(M).height(J);C.width(M+t);V=C.width();u=C.height();W=(V>X||u>r)&&M>F&&J>y;Y=L.aspectRatio?(M<N&&J<A&&M<H&&J<G):((M<N||J<A)&&(M<H||J<G));i.extend(L,{dim:{width:g(V),height:g(u)},origWidth:H,origHeight:G,canShrink:W,canExpand:Y,wPadding:t,hPadding:s,wrapSpace:u-O.outerHeight(true),skinSpace:O.height()-J});if(!B&&L.autoHeight&&J>y&&J<K&&!Y){Z.height("auto")}},_getPosition:function(t){var x=q.current,s=q.getViewport(),v=x.margin,u=q.wrap.width()+v[1]+v[3],r=q.wrap.height()+v[0]+v[2],w={position:"absolute",top:v[0],left:v[3]};if(x.autoCenter&&x.fixed&&!t&&r<=s.h&&u<=s.w){w.position="fixed"}else{if(!x.locked){w.top+=s.y;w.left+=s.x}}w.top=g(Math.max(w.top,w.top+((s.h-r)*x.topRatio)));w.left=g(Math.max(w.left,w.left+((s.w-u)*x.leftRatio)));return w},_afterZoomIn:function(){var r=q.current;if(!r){return}q.isOpen=q.isOpened=true;q.wrap.css("overflow","visible").addClass("fancybox-opened");q.update();if(r.closeClick||(r.nextClick&&q.group.length>1)){q.inner.css("cursor","pointer").bind("click.fb",function(s){if(!i(s.target).is("a")&&!i(s.target).parent().is("a")){s.preventDefault();q[r.closeClick?"close":"next"]()}})}if(r.closeBtn){i(r.tpl.closeBtn).appendTo(q.skin).bind("click.fb",function(s){s.preventDefault();q.close()})}if(r.arrows&&q.group.length>1){if(r.loop||r.index>0){i(r.tpl.prev).appendTo(q.outer).bind("click.fb",q.prev)}if(r.loop||r.index<q.group.length-1){i(r.tpl.next).appendTo(q.outer).bind("click.fb",q.next)}}q.trigger("afterShow");if(!r.loop&&r.index===r.group.length-1){q.play(false)}else{if(q.opts.autoPlay&&!q.player.isActive){q.opts.autoPlay=false;q.play()}}},_afterZoomOut:function(r){r=r||q.current;i(".fancybox-wrap").trigger("onReset").remove();i.extend(q,{group:{},opts:{},router:false,current:null,isActive:false,isOpened:false,isOpen:false,isClosing:false,wrap:null,skin:null,outer:null,inner:null});q.trigger("afterClose",r)}});q.transitions={getOrigPosition:function(){var u=q.current,s=u.element,x=u.orig,w={},r=50,y=50,v=u.hPadding,z=u.wPadding,t=q.getViewport();if(!x&&u.isDom&&s.is(":visible")){x=s.find("img:first");if(!x.length){x=s}}if(j(x)){w=x.offset();if(x.is("img")){r=x.outerWidth();y=x.outerHeight()}}else{w.top=t.y+(t.h-y)*u.topRatio;w.left=t.x+(t.w-r)*u.leftRatio}if(q.wrap.css("position")==="fixed"||u.locked){w.top-=t.y;w.left-=t.x}w={top:g(w.top-v*u.topRatio),left:g(w.left-z*u.leftRatio),width:g(r+z),height:g(y+v)};return w},step:function(s,t){var v,x,y,r=t.prop,u=q.current,w=u.wrapSpace,z=u.skinSpace;if(r==="width"||r==="height"){v=t.end===t.start?1:(s-t.start)/(t.end-t.start);if(q.isClosing){v=1-v}x=r==="width"?u.wPadding:u.hPadding;y=s-x;q.skin[r](n(r==="width"?y:y-(w*v)));q.inner[r](n(r==="width"?y:y-(w*v)-(z*v)))}},zoomIn:function(){var v=q.current,s=v.pos,t=v.openEffect,u=t==="elastic",r=i.extend({opacity:1},s);delete r.position;if(u){s=this.getOrigPosition();if(v.openOpacity){s.opacity=0.1}}else{if(t==="fade"){s.opacity=0.1}}q.wrap.css(s).animate(r,{duration:t==="none"?0:v.openSpeed,easing:v.openEasing,step:u?this.step:null,complete:q._afterZoomIn})},zoomOut:function(){var u=q.current,s=u.closeEffect,t=s==="elastic",r={opacity:0.1};if(t){r=this.getOrigPosition();if(u.closeOpacity){r.opacity=0.1}}q.wrap.animate(r,{duration:s==="none"?0:u.closeSpeed,easing:u.closeEasing,step:t?this.step:null,complete:q._afterZoomOut})},changeIn:function(){var w=q.current,t=w.nextEffect,s=w.pos,r={opacity:1},v=q.direction,x=200,u;s.opacity=0.1;if(t==="elastic"){u=v==="down"||v==="up"?"top":"left";if(v==="down"||v==="right"){s[u]=g(n(s[u])-x);r[u]="+="+x+"px"}else{s[u]=g(n(s[u])+x);r[u]="-="+x+"px"}}if(t==="none"){q._afterZoomIn()}else{q.wrap.css(s).animate(r,{duration:w.nextSpeed,easing:w.nextEasing,complete:q._afterZoomIn})}},changeOut:function(){var t=q.previous,s=t.prevEffect,r={opacity:0.1},u=q.direction,v=200;if(s==="elastic"){r[u==="down"||u==="up"?"top":"left"]=(u==="up"||u==="left"?"-":"+")+"="+v+"px"}t.wrap.animate(r,{duration:s==="none"?0:t.prevSpeed,easing:t.prevEasing,complete:function(){i(this).trigger("onReset").remove()}})}};q.helpers.overlay={defaults:{closeClick:true,speedOut:200,showEarly:true,css:{},locked:!f,fixed:true},overlay:null,fixed:false,el:i("html"),create:function(r){r=i.extend({},this.defaults,r);if(this.overlay){this.close()}this.overlay=i('<div class="fancybox-overlay"></div>').appendTo(q.coming?q.coming.parent:r.parent);this.fixed=false;if(r.fixed&&q.defaults.fixed){this.overlay.addClass("fancybox-overlay-fixed");this.fixed=true}},open:function(s){var r=this;s=i.extend({},this.defaults,s);if(this.overlay){this.overlay.unbind(".overlay").width("auto").height("auto")}else{this.create(s)}if(!this.fixed){d.bind("resize.overlay",i.proxy(this.update,this));this.update()}if(s.closeClick){this.overlay.bind("click.overlay",function(t){if(i(t.target).hasClass("fancybox-overlay")){if(q.isActive){q.close()}else{r.close()}return false}})}this.overlay.css(s.css).show()},close:function(){var r,s;d.unbind("resize.overlay");if(this.el.hasClass("fancybox-lock")){i(".fancybox-margin").removeClass("fancybox-margin");r=d.scrollTop();s=d.scrollLeft();this.el.removeClass("fancybox-lock");d.scrollTop(r).scrollLeft(s)}i(".fancybox-overlay").remove().hide();i.extend(this,{overlay:null,fixed:false})},update:function(){var s="100%",r;this.overlay.width(s).height("100%");if(k){r=Math.max(o.documentElement.offsetWidth,o.body.offsetWidth);if(a.width()>r){s=a.width()}}else{if(a.width()>d.width()){s=a.width()}}this.overlay.width(s).height(a.height())},onReady:function(s,t){var r=this.overlay;i(".fancybox-overlay").stop(true,true);if(!r){this.create(s)}if(s.locked&&this.fixed&&t.fixed){if(!r){this.margin=a.height()>d.height()?i("html").css("margin-right").replace("px",""):false}t.locked=this.overlay.append(t.wrap);t.fixed=false}if(s.showEarly===true){this.beforeShow.apply(this,arguments)}},beforeShow:function(t,u){var r,s;if(u.locked){if(this.margin!==false){i("*").filter(function(){return(i(this).css("position")==="fixed"&&!i(this).hasClass("fancybox-overlay")&&!i(this).hasClass("fancybox-wrap"))}).addClass("fancybox-margin");this.el.addClass("fancybox-margin")}r=d.scrollTop();s=d.scrollLeft();this.el.addClass("fancybox-lock");d.scrollTop(r).scrollLeft(s)}this.open(t)},onUpdate:function(){if(!this.fixed){this.update()}},afterClose:function(r){if(this.overlay&&!q.coming){this.overlay.fadeOut(r.speedOut,i.proxy(this.close,this))}}};q.helpers.title={defaults:{type:"float",position:"bottom"},beforeShow:function(s){var u=q.current,w=u.title,r=s.type,v,t;if(i.isFunction(w)){w=w.call(u.element,u)}if(!b(w)||i.trim(w)===""){return}v=i('<div class="fancybox-title fancybox-title-'+r+'-wrap">'+w+"</div>");switch(r){case"inside":t=q.skin;break;case"outside":t=q.wrap;break;case"over":t=q.inner;break;default:t=q.skin;v.appendTo("body");if(k){v.width(v.width())}v.wrapInner('<span class="child"></span>');q.current.margin[2]+=Math.abs(n(v.css("margin-bottom")));break}v[(s.position==="top"?"prependTo":"appendTo")](t)}};i.fn.fancybox=function(t){var s,u=i(this),r=this.selector||"",v=function(z){var y=i(this).blur(),w=s,x,A;if(!(z.ctrlKey||z.altKey||z.shiftKey||z.metaKey)&&!y.is(".fancybox-wrap")){x=t.groupAttr||"data-fancybox-group";A=y.attr(x);if(!A){x="rel";A=y.get(0)[x]}if(A&&A!==""&&A!=="nofollow"){y=r.length?i(r):u;y=y.filter("["+x+'="'+A+'"]');w=y.index(this)}t.index=w;if(q.open(y,t)!==false){z.preventDefault()}}};t=t||{};s=t.index||0;if(!r||t.live===false){u.unbind("click.fb-start").bind("click.fb-start",v)}else{a.undelegate(r,"click.fb-start").delegate(r+":not('.fancybox-item, .fancybox-nav')","click.fb-start",v)}this.filter("[data-fancybox-start=1]").trigger("click");return this};a.ready(function(){var s,r;if(i.scrollbarWidth===e){i.scrollbarWidth=function(){var u=i('<div style="width:50px;height:50px;overflow:auto"><div/></div>').appendTo("body"),v=u.children(),t=v.innerWidth()-v.height(99).innerWidth();u.remove();return t}}if(i.support.fixedPosition===e){i.support.fixedPosition=(function(){var u=i('<div style="position:fixed;top:20px;"></div>').appendTo("body"),t=(u[0].offsetTop===20||u[0].offsetTop===15);u.remove();return t}())}i.extend(q.defaults,{scrollbarWidth:i.scrollbarWidth(),fixed:i.support.fixedPosition,parent:i("body")});s=i(l).width();p.addClass("fancybox-lock-test");r=i(l).width();p.removeClass("fancybox-lock-test");i("<style type='text/css'>.fancybox-margin{margin-right:"+(r-s)+"px;}</style>").appendTo("head")})}(window,document,jQuery));
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ztfy/myams/resources/js/ext/jquery-imgareaselect-0.9.10.js Fri Mar 27 15:53:44 2015 +0100
@@ -0,0 +1,730 @@
+/*
+ * imgAreaSelect jQuery plugin
+ * version 0.9.10
+ *
+ * Copyright (c) 2008-2013 Michal Wojciechowski (odyniec.net)
+ *
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://odyniec.net/projects/imgareaselect/
+ *
+ */
+
+(function($) {
+
+var abs = Math.abs,
+ max = Math.max,
+ min = Math.min,
+ round = Math.round;
+
+function div() {
+ return $('<div/>');
+}
+
+$.imgAreaSelect = function (img, options) {
+ var
+
+ $img = $(img),
+
+ imgLoaded,
+
+ $box = div(),
+ $area = div(),
+ $border = div().add(div()).add(div()).add(div()),
+ $outer = div().add(div()).add(div()).add(div()),
+ $handles = $([]),
+
+ $areaOpera,
+
+ left, top,
+
+ imgOfs = { left: 0, top: 0 },
+
+ imgWidth, imgHeight,
+
+ $parent,
+
+ parOfs = { left: 0, top: 0 },
+
+ zIndex = 0,
+
+ position = 'absolute',
+
+ startX, startY,
+
+ scaleX, scaleY,
+
+ resize,
+
+ minWidth, minHeight, maxWidth, maxHeight,
+
+ aspectRatio,
+
+ shown,
+
+ x1, y1, x2, y2,
+
+ selection = { x1: 0, y1: 0, x2: 0, y2: 0, width: 0, height: 0 },
+
+ docElem = document.documentElement,
+
+ ua = navigator.userAgent,
+
+ $p, d, i, o, w, h, adjusted;
+
+ function viewX(x) {
+ return x + imgOfs.left - parOfs.left;
+ }
+
+ function viewY(y) {
+ return y + imgOfs.top - parOfs.top;
+ }
+
+ function selX(x) {
+ return x - imgOfs.left + parOfs.left;
+ }
+
+ function selY(y) {
+ return y - imgOfs.top + parOfs.top;
+ }
+
+ function evX(event) {
+ return event.pageX - parOfs.left;
+ }
+
+ function evY(event) {
+ return event.pageY - parOfs.top;
+ }
+
+ function getSelection(noScale) {
+ var sx = noScale || scaleX, sy = noScale || scaleY;
+
+ return { x1: round(selection.x1 * sx),
+ y1: round(selection.y1 * sy),
+ x2: round(selection.x2 * sx),
+ y2: round(selection.y2 * sy),
+ width: round(selection.x2 * sx) - round(selection.x1 * sx),
+ height: round(selection.y2 * sy) - round(selection.y1 * sy) };
+ }
+
+ function setSelection(x1, y1, x2, y2, noScale) {
+ var sx = noScale || scaleX, sy = noScale || scaleY;
+
+ selection = {
+ x1: round(x1 / sx || 0),
+ y1: round(y1 / sy || 0),
+ x2: round(x2 / sx || 0),
+ y2: round(y2 / sy || 0)
+ };
+
+ selection.width = selection.x2 - selection.x1;
+ selection.height = selection.y2 - selection.y1;
+ }
+
+ function adjust() {
+ if (!imgLoaded || !$img.width())
+ return;
+
+ imgOfs = { left: round($img.offset().left), top: round($img.offset().top) };
+
+ imgWidth = $img.innerWidth();
+ imgHeight = $img.innerHeight();
+
+ imgOfs.top += ($img.outerHeight() - imgHeight) >> 1;
+ imgOfs.left += ($img.outerWidth() - imgWidth) >> 1;
+
+ minWidth = round(options.minWidth / scaleX) || 0;
+ minHeight = round(options.minHeight / scaleY) || 0;
+ maxWidth = round(min(options.maxWidth / scaleX || 1<<24, imgWidth));
+ maxHeight = round(min(options.maxHeight / scaleY || 1<<24, imgHeight));
+
+ if ($().jquery == '1.3.2' && position == 'fixed' &&
+ !docElem['getBoundingClientRect'])
+ {
+ imgOfs.top += max(document.body.scrollTop, docElem.scrollTop);
+ imgOfs.left += max(document.body.scrollLeft, docElem.scrollLeft);
+ }
+
+ parOfs = /absolute|relative/.test($parent.css('position')) ?
+ { left: round($parent.offset().left) - $parent.scrollLeft(),
+ top: round($parent.offset().top) - $parent.scrollTop() } :
+ position == 'fixed' ?
+ { left: $(document).scrollLeft(), top: $(document).scrollTop() } :
+ { left: 0, top: 0 };
+
+ left = viewX(0);
+ top = viewY(0);
+
+ if (selection.x2 > imgWidth || selection.y2 > imgHeight)
+ doResize();
+ }
+
+ function update(resetKeyPress) {
+ if (!shown) return;
+
+ $box.css({ left: viewX(selection.x1), top: viewY(selection.y1) })
+ .add($area).width(w = selection.width).height(h = selection.height);
+
+ $area.add($border).add($handles).css({ left: 0, top: 0 });
+
+ $border
+ .width(max(w - $border.outerWidth() + $border.innerWidth(), 0))
+ .height(max(h - $border.outerHeight() + $border.innerHeight(), 0));
+
+ $($outer[0]).css({ left: left, top: top,
+ width: selection.x1, height: imgHeight });
+ $($outer[1]).css({ left: left + selection.x1, top: top,
+ width: w, height: selection.y1 });
+ $($outer[2]).css({ left: left + selection.x2, top: top,
+ width: imgWidth - selection.x2, height: imgHeight });
+ $($outer[3]).css({ left: left + selection.x1, top: top + selection.y2,
+ width: w, height: imgHeight - selection.y2 });
+
+ w -= $handles.outerWidth();
+ h -= $handles.outerHeight();
+
+ switch ($handles.length) {
+ case 8:
+ $($handles[4]).css({ left: w >> 1 });
+ $($handles[5]).css({ left: w, top: h >> 1 });
+ $($handles[6]).css({ left: w >> 1, top: h });
+ $($handles[7]).css({ top: h >> 1 });
+ case 4:
+ $handles.slice(1,3).css({ left: w });
+ $handles.slice(2,4).css({ top: h });
+ }
+
+ if (resetKeyPress !== false) {
+ if ($.imgAreaSelect.onKeyPress != docKeyPress)
+ $(document).unbind($.imgAreaSelect.keyPress,
+ $.imgAreaSelect.onKeyPress);
+
+ if (options.keys)
+ $(document)[$.imgAreaSelect.keyPress](
+ $.imgAreaSelect.onKeyPress = docKeyPress);
+ }
+
+ if (msie && $border.outerWidth() - $border.innerWidth() == 2) {
+ $border.css('margin', 0);
+ setTimeout(function () { $border.css('margin', 'auto'); }, 0);
+ }
+ }
+
+ function doUpdate(resetKeyPress) {
+ adjust();
+ update(resetKeyPress);
+ x1 = viewX(selection.x1); y1 = viewY(selection.y1);
+ x2 = viewX(selection.x2); y2 = viewY(selection.y2);
+ }
+
+ function hide($elem, fn) {
+ options.fadeSpeed ? $elem.fadeOut(options.fadeSpeed, fn) : $elem.hide();
+
+ }
+
+ function areaMouseMove(event) {
+ var x = selX(evX(event)) - selection.x1,
+ y = selY(evY(event)) - selection.y1;
+
+ if (!adjusted) {
+ adjust();
+ adjusted = true;
+
+ $box.one('mouseout', function () { adjusted = false; });
+ }
+
+ resize = '';
+
+ if (options.resizable) {
+ if (y <= options.resizeMargin)
+ resize = 'n';
+ else if (y >= selection.height - options.resizeMargin)
+ resize = 's';
+ if (x <= options.resizeMargin)
+ resize += 'w';
+ else if (x >= selection.width - options.resizeMargin)
+ resize += 'e';
+ }
+
+ $box.css('cursor', resize ? resize + '-resize' :
+ options.movable ? 'move' : '');
+ if ($areaOpera)
+ $areaOpera.toggle();
+ }
+
+ function docMouseUp(event) {
+ $('body').css('cursor', '');
+ if (options.autoHide || selection.width * selection.height == 0)
+ hide($box.add($outer), function () { $(this).hide(); });
+
+ $(document).unbind('mousemove', selectingMouseMove);
+ $box.mousemove(areaMouseMove);
+
+ options.onSelectEnd(img, getSelection());
+ }
+
+ function areaMouseDown(event) {
+ if (event.which != 1) return false;
+
+ adjust();
+
+ if (resize) {
+ $('body').css('cursor', resize + '-resize');
+
+ x1 = viewX(selection[/w/.test(resize) ? 'x2' : 'x1']);
+ y1 = viewY(selection[/n/.test(resize) ? 'y2' : 'y1']);
+
+ $(document).mousemove(selectingMouseMove)
+ .one('mouseup', docMouseUp);
+ $box.unbind('mousemove', areaMouseMove);
+ }
+ else if (options.movable) {
+ startX = left + selection.x1 - evX(event);
+ startY = top + selection.y1 - evY(event);
+
+ $box.unbind('mousemove', areaMouseMove);
+
+ $(document).mousemove(movingMouseMove)
+ .one('mouseup', function () {
+ options.onSelectEnd(img, getSelection());
+
+ $(document).unbind('mousemove', movingMouseMove);
+ $box.mousemove(areaMouseMove);
+ });
+ }
+ else
+ $img.mousedown(event);
+
+ return false;
+ }
+
+ function fixAspectRatio(xFirst) {
+ if (aspectRatio)
+ if (xFirst) {
+ x2 = max(left, min(left + imgWidth,
+ x1 + abs(y2 - y1) * aspectRatio * (x2 > x1 || -1)));
+
+ y2 = round(max(top, min(top + imgHeight,
+ y1 + abs(x2 - x1) / aspectRatio * (y2 > y1 || -1))));
+ x2 = round(x2);
+ }
+ else {
+ y2 = max(top, min(top + imgHeight,
+ y1 + abs(x2 - x1) / aspectRatio * (y2 > y1 || -1)));
+ x2 = round(max(left, min(left + imgWidth,
+ x1 + abs(y2 - y1) * aspectRatio * (x2 > x1 || -1))));
+ y2 = round(y2);
+ }
+ }
+
+ function doResize() {
+ x1 = min(x1, left + imgWidth);
+ y1 = min(y1, top + imgHeight);
+
+ if (abs(x2 - x1) < minWidth) {
+ x2 = x1 - minWidth * (x2 < x1 || -1);
+
+ if (x2 < left)
+ x1 = left + minWidth;
+ else if (x2 > left + imgWidth)
+ x1 = left + imgWidth - minWidth;
+ }
+
+ if (abs(y2 - y1) < minHeight) {
+ y2 = y1 - minHeight * (y2 < y1 || -1);
+
+ if (y2 < top)
+ y1 = top + minHeight;
+ else if (y2 > top + imgHeight)
+ y1 = top + imgHeight - minHeight;
+ }
+
+ x2 = max(left, min(x2, left + imgWidth));
+ y2 = max(top, min(y2, top + imgHeight));
+
+ fixAspectRatio(abs(x2 - x1) < abs(y2 - y1) * aspectRatio);
+
+ if (abs(x2 - x1) > maxWidth) {
+ x2 = x1 - maxWidth * (x2 < x1 || -1);
+ fixAspectRatio();
+ }
+
+ if (abs(y2 - y1) > maxHeight) {
+ y2 = y1 - maxHeight * (y2 < y1 || -1);
+ fixAspectRatio(true);
+ }
+
+ selection = { x1: selX(min(x1, x2)), x2: selX(max(x1, x2)),
+ y1: selY(min(y1, y2)), y2: selY(max(y1, y2)),
+ width: abs(x2 - x1), height: abs(y2 - y1) };
+
+ update();
+
+ options.onSelectChange(img, getSelection());
+ }
+
+ function selectingMouseMove(event) {
+ x2 = /w|e|^$/.test(resize) || aspectRatio ? evX(event) : viewX(selection.x2);
+ y2 = /n|s|^$/.test(resize) || aspectRatio ? evY(event) : viewY(selection.y2);
+
+ doResize();
+
+ return false;
+
+ }
+
+ function doMove(newX1, newY1) {
+ x2 = (x1 = newX1) + selection.width;
+ y2 = (y1 = newY1) + selection.height;
+
+ $.extend(selection, { x1: selX(x1), y1: selY(y1), x2: selX(x2),
+ y2: selY(y2) });
+
+ update();
+
+ options.onSelectChange(img, getSelection());
+ }
+
+ function movingMouseMove(event) {
+ x1 = max(left, min(startX + evX(event), left + imgWidth - selection.width));
+ y1 = max(top, min(startY + evY(event), top + imgHeight - selection.height));
+
+ doMove(x1, y1);
+
+ event.preventDefault();
+
+ return false;
+ }
+
+ function startSelection() {
+ $(document).unbind('mousemove', startSelection);
+ adjust();
+
+ x2 = x1;
+ y2 = y1;
+
+ doResize();
+
+ resize = '';
+
+ if (!$outer.is(':visible'))
+ $box.add($outer).hide().fadeIn(options.fadeSpeed||0);
+
+ shown = true;
+
+ $(document).unbind('mouseup', cancelSelection)
+ .mousemove(selectingMouseMove).one('mouseup', docMouseUp);
+ $box.unbind('mousemove', areaMouseMove);
+
+ options.onSelectStart(img, getSelection());
+ }
+
+ function cancelSelection() {
+ $(document).unbind('mousemove', startSelection)
+ .unbind('mouseup', cancelSelection);
+ hide($box.add($outer));
+
+ setSelection(selX(x1), selY(y1), selX(x1), selY(y1));
+
+ if (!(this instanceof $.imgAreaSelect)) {
+ options.onSelectChange(img, getSelection());
+ options.onSelectEnd(img, getSelection());
+ }
+ }
+
+ function imgMouseDown(event) {
+ if (event.which != 1 || $outer.is(':animated')) return false;
+
+ adjust();
+ startX = x1 = evX(event);
+ startY = y1 = evY(event);
+
+ $(document).mousemove(startSelection).mouseup(cancelSelection);
+
+ return false;
+ }
+
+ function windowResize() {
+ doUpdate(false);
+ }
+
+ function imgLoad() {
+ imgLoaded = true;
+
+ setOptions(options = $.extend({
+ classPrefix: 'imgareaselect',
+ movable: true,
+ parent: 'body',
+ resizable: true,
+ resizeMargin: 10,
+ onInit: function () {},
+ onSelectStart: function () {},
+ onSelectChange: function () {},
+ onSelectEnd: function () {}
+ }, options));
+
+ $box.add($outer).css({ visibility: '' });
+
+ if (options.show) {
+ shown = true;
+ adjust();
+ update();
+ $box.add($outer).hide().fadeIn(options.fadeSpeed||0);
+ }
+
+ setTimeout(function () { options.onInit(img, getSelection()); }, 0);
+ }
+
+ var docKeyPress = function(event) {
+ var k = options.keys, d, t, key = event.keyCode;
+
+ d = !isNaN(k.alt) && (event.altKey || event.originalEvent.altKey) ? k.alt :
+ !isNaN(k.ctrl) && event.ctrlKey ? k.ctrl :
+ !isNaN(k.shift) && event.shiftKey ? k.shift :
+ !isNaN(k.arrows) ? k.arrows : 10;
+
+ if (k.arrows == 'resize' || (k.shift == 'resize' && event.shiftKey) ||
+ (k.ctrl == 'resize' && event.ctrlKey) ||
+ (k.alt == 'resize' && (event.altKey || event.originalEvent.altKey)))
+ {
+ switch (key) {
+ case 37:
+ d = -d;
+ case 39:
+ t = max(x1, x2);
+ x1 = min(x1, x2);
+ x2 = max(t + d, x1);
+ fixAspectRatio();
+ break;
+ case 38:
+ d = -d;
+ case 40:
+ t = max(y1, y2);
+ y1 = min(y1, y2);
+ y2 = max(t + d, y1);
+ fixAspectRatio(true);
+ break;
+ default:
+ return;
+ }
+
+ doResize();
+ }
+ else {
+ x1 = min(x1, x2);
+ y1 = min(y1, y2);
+
+ switch (key) {
+ case 37:
+ doMove(max(x1 - d, left), y1);
+ break;
+ case 38:
+ doMove(x1, max(y1 - d, top));
+ break;
+ case 39:
+ doMove(x1 + min(d, imgWidth - selX(x2)), y1);
+ break;
+ case 40:
+ doMove(x1, y1 + min(d, imgHeight - selY(y2)));
+ break;
+ default:
+ return;
+ }
+ }
+
+ return false;
+ };
+
+ function styleOptions($elem, props) {
+ for (var option in props)
+ if (options[option] !== undefined)
+ $elem.css(props[option], options[option]);
+ }
+
+ function setOptions(newOptions) {
+ if (newOptions.parent)
+ ($parent = $(newOptions.parent)).append($box.add($outer));
+
+ $.extend(options, newOptions);
+
+ adjust();
+
+ if (newOptions.handles != null) {
+ $handles.remove();
+ $handles = $([]);
+
+ i = newOptions.handles ? newOptions.handles == 'corners' ? 4 : 8 : 0;
+
+ while (i--)
+ $handles = $handles.add(div());
+
+ $handles.addClass(options.classPrefix + '-handle').css({
+ position: 'absolute',
+ fontSize: 0,
+ zIndex: zIndex + 1 || 1
+ });
+
+ if (!parseInt($handles.css('width')) >= 0)
+ $handles.width(5).height(5);
+
+ if (o = options.borderWidth)
+ $handles.css({ borderWidth: o, borderStyle: 'solid' });
+
+ styleOptions($handles, { borderColor1: 'border-color',
+ borderColor2: 'background-color',
+ borderOpacity: 'opacity' });
+ }
+
+ scaleX = options.imageWidth / imgWidth || 1;
+ scaleY = options.imageHeight / imgHeight || 1;
+
+ if (newOptions.x1 != null) {
+ setSelection(newOptions.x1, newOptions.y1, newOptions.x2,
+ newOptions.y2);
+ newOptions.show = !newOptions.hide;
+ }
+
+ if (newOptions.keys)
+ options.keys = $.extend({ shift: 1, ctrl: 'resize' },
+ newOptions.keys);
+
+ $outer.addClass(options.classPrefix + '-outer');
+ $area.addClass(options.classPrefix + '-selection');
+ for (i = 0; i++ < 4;)
+ $($border[i-1]).addClass(options.classPrefix + '-border' + i);
+
+ styleOptions($area, { selectionColor: 'background-color',
+ selectionOpacity: 'opacity' });
+ styleOptions($border, { borderOpacity: 'opacity',
+ borderWidth: 'border-width' });
+ styleOptions($outer, { outerColor: 'background-color',
+ outerOpacity: 'opacity' });
+ if (o = options.borderColor1)
+ $($border[0]).css({ borderStyle: 'solid', borderColor: o });
+ if (o = options.borderColor2)
+ $($border[1]).css({ borderStyle: 'dashed', borderColor: o });
+
+ $box.append($area.add($border).add($areaOpera)).append($handles);
+
+ if (msie) {
+ if (o = ($outer.css('filter')||'').match(/opacity=(\d+)/))
+ $outer.css('opacity', o[1]/100);
+ if (o = ($border.css('filter')||'').match(/opacity=(\d+)/))
+ $border.css('opacity', o[1]/100);
+ }
+
+ if (newOptions.hide)
+ hide($box.add($outer));
+ else if (newOptions.show && imgLoaded) {
+ shown = true;
+ $box.add($outer).fadeIn(options.fadeSpeed||0);
+ doUpdate();
+ }
+
+ aspectRatio = (d = (options.aspectRatio || '').split(/:/))[0] / d[1];
+
+ $img.add($outer).unbind('mousedown', imgMouseDown);
+
+ if (options.disable || options.enable === false) {
+ $box.unbind('mousemove', areaMouseMove).unbind('mousedown', areaMouseDown);
+ $(window).unbind('resize', windowResize);
+ }
+ else {
+ if (options.enable || options.disable === false) {
+ if (options.resizable || options.movable)
+ $box.mousemove(areaMouseMove).mousedown(areaMouseDown);
+
+ $(window).resize(windowResize);
+ }
+
+ if (!options.persistent)
+ $img.add($outer).mousedown(imgMouseDown);
+ }
+
+ options.enable = options.disable = undefined;
+ }
+
+ this.remove = function () {
+ setOptions({ disable: true });
+ $box.add($outer).remove();
+ };
+
+ this.getOptions = function () { return options; };
+
+ this.setOptions = setOptions;
+
+ this.getSelection = getSelection;
+
+ this.setSelection = setSelection;
+
+ this.cancelSelection = cancelSelection;
+
+ this.update = doUpdate;
+
+ var msie = (/msie ([\w.]+)/i.exec(ua)||[])[1],
+ opera = /opera/i.test(ua),
+ safari = /webkit/i.test(ua) && !/chrome/i.test(ua);
+
+ $p = $img;
+
+ while ($p.length) {
+ zIndex = max(zIndex,
+ !isNaN($p.css('z-index')) ? $p.css('z-index') : zIndex);
+ if ($p.css('position') == 'fixed')
+ position = 'fixed';
+
+ $p = $p.parent(':not(body)');
+ }
+
+ zIndex = options.zIndex || zIndex;
+
+ if (msie)
+ $img.attr('unselectable', 'on');
+
+ $.imgAreaSelect.keyPress = msie || safari ? 'keydown' : 'keypress';
+
+ if (opera)
+
+ $areaOpera = div().css({ width: '100%', height: '100%',
+ position: 'absolute', zIndex: zIndex + 2 || 2 });
+
+ $box.add($outer).css({ visibility: 'hidden', position: position,
+ overflow: 'hidden', zIndex: zIndex || '0' });
+ $box.css({ zIndex: zIndex + 2 || 2 });
+ $area.add($border).css({ position: 'absolute', fontSize: 0 });
+
+ img.complete || img.readyState == 'complete' || !$img.is('img') ?
+ imgLoad() : $img.one('load', imgLoad);
+
+ if (!imgLoaded && msie && msie >= 7)
+ img.src = img.src;
+};
+
+$.fn.imgAreaSelect = function (options) {
+ options = options || {};
+
+ this.each(function () {
+ if ($(this).data('imgAreaSelect')) {
+ if (options.remove) {
+ $(this).data('imgAreaSelect').remove();
+ $(this).removeData('imgAreaSelect');
+ }
+ else
+ $(this).data('imgAreaSelect').setOptions(options);
+ }
+ else if (!options.remove) {
+ if (options.enable === undefined && options.disable === undefined)
+ options.enable = true;
+
+ $(this).data('imgAreaSelect', new $.imgAreaSelect(this, options));
+ }
+ });
+
+ if (options.instance)
+ return $(this).data('imgAreaSelect');
+
+ return this;
+};
+
+})(jQuery);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ztfy/myams/resources/js/ext/jquery-imgareaselect-0.9.10.min.js Fri Mar 27 15:53:44 2015 +0100
@@ -0,0 +1,1 @@
+(function(e){var b=Math.abs,a=Math.max,d=Math.min,c=Math.round;function f(){return e("<div/>")}e.imgAreaSelect=function(R,af){var N=e(R),u,B=f(),F=f(),at=f().add(f()).add(f()).add(f()),v=f().add(f()).add(f()).add(f()),aB=e([]),am,U,ar,aC={left:0,top:0},T,aD,p,X={left:0,top:0},g=0,an="absolute",aq,ap,ad,ac,t,q,ao,k,x,aH,ak,E,n,D,l,aF={x1:0,y1:0,x2:0,y2:0,width:0,height:0},G=document.documentElement,V=navigator.userAgent,ab,S,P,O,L,Q,J;function aa(h){return h+aC.left-X.left}function Z(h){return h+aC.top-X.top}function ay(h){return h-aC.left+X.left}function ax(h){return h-aC.top+X.top}function A(h){return h.pageX-X.left}function z(h){return h.pageY-X.top}function aw(h){var o=h||ad,i=h||ac;return{x1:c(aF.x1*o),y1:c(aF.y1*i),x2:c(aF.x2*o),y2:c(aF.y2*i),width:c(aF.x2*o)-c(aF.x1*o),height:c(aF.y2*i)-c(aF.y1*i)}}function au(i,w,h,o,aI){var aK=aI||ad,aJ=aI||ac;aF={x1:c(i/aK||0),y1:c(w/aJ||0),x2:c(h/aK||0),y2:c(o/aJ||0)};aF.width=aF.x2-aF.x1;aF.height=aF.y2-aF.y1}function m(){if(!u||!N.width()){return}aC={left:c(N.offset().left),top:c(N.offset().top)};T=N.innerWidth();aD=N.innerHeight();aC.top+=(N.outerHeight()-aD)>>1;aC.left+=(N.outerWidth()-T)>>1;q=c(af.minWidth/ad)||0;ao=c(af.minHeight/ac)||0;k=c(d(af.maxWidth/ad||1<<24,T));x=c(d(af.maxHeight/ac||1<<24,aD));if(e().jquery=="1.3.2"&&an=="fixed"&&!G.getBoundingClientRect){aC.top+=a(document.body.scrollTop,G.scrollTop);aC.left+=a(document.body.scrollLeft,G.scrollLeft)}X=/absolute|relative/.test(p.css("position"))?{left:c(p.offset().left)-p.scrollLeft(),top:c(p.offset().top)-p.scrollTop()}:an=="fixed"?{left:e(document).scrollLeft(),top:e(document).scrollTop()}:{left:0,top:0};U=aa(0);ar=Z(0);if(aF.x2>T||aF.y2>aD){aE()}}function K(h){if(!ak){return}B.css({left:aa(aF.x1),top:Z(aF.y1)}).add(F).width(L=aF.width).height(Q=aF.height);F.add(at).add(aB).css({left:0,top:0});at.width(a(L-at.outerWidth()+at.innerWidth(),0)).height(a(Q-at.outerHeight()+at.innerHeight(),0));e(v[0]).css({left:U,top:ar,width:aF.x1,height:aD});e(v[1]).css({left:U+aF.x1,top:ar,width:L,height:aF.y1});e(v[2]).css({left:U+aF.x2,top:ar,width:T-aF.x2,height:aD});e(v[3]).css({left:U+aF.x1,top:ar+aF.y2,width:L,height:aD-aF.y2});L-=aB.outerWidth();Q-=aB.outerHeight();switch(aB.length){case 8:e(aB[4]).css({left:L>>1});e(aB[5]).css({left:L,top:Q>>1});e(aB[6]).css({left:L>>1,top:Q});e(aB[7]).css({top:Q>>1});case 4:aB.slice(1,3).css({left:L});aB.slice(2,4).css({top:Q})}if(h!==false){if(e.imgAreaSelect.onKeyPress!=az){e(document).unbind(e.imgAreaSelect.keyPress,e.imgAreaSelect.onKeyPress)}if(af.keys){e(document)[e.imgAreaSelect.keyPress](e.imgAreaSelect.onKeyPress=az)}}if(aj&&at.outerWidth()-at.innerWidth()==2){at.css("margin",0);setTimeout(function(){at.css("margin","auto")},0)}}function y(h){m();K(h);E=aa(aF.x1);n=Z(aF.y1);D=aa(aF.x2);l=Z(aF.y2)}function ai(h,i){af.fadeSpeed?h.fadeOut(af.fadeSpeed,i):h.hide()}function I(i){var h=ay(A(i))-aF.x1,o=ax(z(i))-aF.y1;if(!J){m();J=true;B.one("mouseout",function(){J=false})}t="";if(af.resizable){if(o<=af.resizeMargin){t="n"}else{if(o>=aF.height-af.resizeMargin){t="s"}}if(h<=af.resizeMargin){t+="w"}else{if(h>=aF.width-af.resizeMargin){t+="e"}}}B.css("cursor",t?t+"-resize":af.movable?"move":"");if(am){am.toggle()}}function j(h){e("body").css("cursor","");if(af.autoHide||aF.width*aF.height==0){ai(B.add(v),function(){e(this).hide()})}e(document).unbind("mousemove",ag);B.mousemove(I);af.onSelectEnd(R,aw())}function aA(h){if(h.which!=1){return false}m();if(t){e("body").css("cursor",t+"-resize");E=aa(aF[/w/.test(t)?"x2":"x1"]);n=Z(aF[/n/.test(t)?"y2":"y1"]);e(document).mousemove(ag).one("mouseup",j);B.unbind("mousemove",I)}else{if(af.movable){aq=U+aF.x1-A(h);ap=ar+aF.y1-z(h);B.unbind("mousemove",I);e(document).mousemove(ae).one("mouseup",function(){af.onSelectEnd(R,aw());e(document).unbind("mousemove",ae);B.mousemove(I)})}else{N.mousedown(h)}}return false}function M(h){if(aH){if(h){D=a(U,d(U+T,E+b(l-n)*aH*(D>E||-1)));l=c(a(ar,d(ar+aD,n+b(D-E)/aH*(l>n||-1))));D=c(D)}else{l=a(ar,d(ar+aD,n+b(D-E)/aH*(l>n||-1)));D=c(a(U,d(U+T,E+b(l-n)*aH*(D>E||-1))));l=c(l)}}}function aE(){E=d(E,U+T);n=d(n,ar+aD);if(b(D-E)<q){D=E-q*(D<E||-1);if(D<U){E=U+q}else{if(D>U+T){E=U+T-q}}}if(b(l-n)<ao){l=n-ao*(l<n||-1);if(l<ar){n=ar+ao}else{if(l>ar+aD){n=ar+aD-ao}}}D=a(U,d(D,U+T));l=a(ar,d(l,ar+aD));M(b(D-E)<b(l-n)*aH);if(b(D-E)>k){D=E-k*(D<E||-1);M()}if(b(l-n)>x){l=n-x*(l<n||-1);M(true)}aF={x1:ay(d(E,D)),x2:ay(a(E,D)),y1:ax(d(n,l)),y2:ax(a(n,l)),width:b(D-E),height:b(l-n)};K();af.onSelectChange(R,aw())}function ag(h){D=/w|e|^$/.test(t)||aH?A(h):aa(aF.x2);l=/n|s|^$/.test(t)||aH?z(h):Z(aF.y2);aE();return false}function W(h,i){D=(E=h)+aF.width;l=(n=i)+aF.height;e.extend(aF,{x1:ay(E),y1:ax(n),x2:ay(D),y2:ax(l)});K();af.onSelectChange(R,aw())}function ae(h){E=a(U,d(aq+A(h),U+T-aF.width));n=a(ar,d(ap+z(h),ar+aD-aF.height));W(E,n);h.preventDefault();return false}function r(){e(document).unbind("mousemove",r);m();D=E;l=n;aE();t="";if(!v.is(":visible")){B.add(v).hide().fadeIn(af.fadeSpeed||0)}ak=true;e(document).unbind("mouseup",Y).mousemove(ag).one("mouseup",j);B.unbind("mousemove",I);af.onSelectStart(R,aw())}function Y(){e(document).unbind("mousemove",r).unbind("mouseup",Y);ai(B.add(v));au(ay(E),ax(n),ay(E),ax(n));if(!(this instanceof e.imgAreaSelect)){af.onSelectChange(R,aw());af.onSelectEnd(R,aw())}}function aG(h){if(h.which!=1||v.is(":animated")){return false}m();aq=E=A(h);ap=n=z(h);e(document).mousemove(r).mouseup(Y);return false}function al(){y(false)}function s(){u=true;ah(af=e.extend({classPrefix:"imgareaselect",movable:true,parent:"body",resizable:true,resizeMargin:10,onInit:function(){},onSelectStart:function(){},onSelectChange:function(){},onSelectEnd:function(){}},af));B.add(v).css({visibility:""});if(af.show){ak=true;m();K();B.add(v).hide().fadeIn(af.fadeSpeed||0)}setTimeout(function(){af.onInit(R,aw())},0)}var az=function(w){var h=af.keys,aI,o,i=w.keyCode;aI=!isNaN(h.alt)&&(w.altKey||w.originalEvent.altKey)?h.alt:!isNaN(h.ctrl)&&w.ctrlKey?h.ctrl:!isNaN(h.shift)&&w.shiftKey?h.shift:!isNaN(h.arrows)?h.arrows:10;if(h.arrows=="resize"||(h.shift=="resize"&&w.shiftKey)||(h.ctrl=="resize"&&w.ctrlKey)||(h.alt=="resize"&&(w.altKey||w.originalEvent.altKey))){switch(i){case 37:aI=-aI;case 39:o=a(E,D);E=d(E,D);D=a(o+aI,E);M();break;case 38:aI=-aI;case 40:o=a(n,l);n=d(n,l);l=a(o+aI,n);M(true);break;default:return}aE()}else{E=d(E,D);n=d(n,l);switch(i){case 37:W(a(E-aI,U),n);break;case 38:W(E,a(n-aI,ar));break;case 39:W(E+d(aI,T-ay(D)),n);break;case 40:W(E,n+d(aI,aD-ax(l)));break;default:return}}return false};function H(h,o){for(var i in o){if(af[i]!==undefined){h.css(o[i],af[i])}}}function ah(h){if(h.parent){(p=e(h.parent)).append(B.add(v))}e.extend(af,h);m();if(h.handles!=null){aB.remove();aB=e([]);P=h.handles?h.handles=="corners"?4:8:0;while(P--){aB=aB.add(f())}aB.addClass(af.classPrefix+"-handle").css({position:"absolute",fontSize:0,zIndex:g+1||1});if(!parseInt(aB.css("width"))>=0){aB.width(5).height(5)}if(O=af.borderWidth){aB.css({borderWidth:O,borderStyle:"solid"})}H(aB,{borderColor1:"border-color",borderColor2:"background-color",borderOpacity:"opacity"})}ad=af.imageWidth/T||1;ac=af.imageHeight/aD||1;if(h.x1!=null){au(h.x1,h.y1,h.x2,h.y2);h.show=!h.hide}if(h.keys){af.keys=e.extend({shift:1,ctrl:"resize"},h.keys)}v.addClass(af.classPrefix+"-outer");F.addClass(af.classPrefix+"-selection");for(P=0;P++<4;){e(at[P-1]).addClass(af.classPrefix+"-border"+P)}H(F,{selectionColor:"background-color",selectionOpacity:"opacity"});H(at,{borderOpacity:"opacity",borderWidth:"border-width"});H(v,{outerColor:"background-color",outerOpacity:"opacity"});if(O=af.borderColor1){e(at[0]).css({borderStyle:"solid",borderColor:O})}if(O=af.borderColor2){e(at[1]).css({borderStyle:"dashed",borderColor:O})}B.append(F.add(at).add(am)).append(aB);if(aj){if(O=(v.css("filter")||"").match(/opacity=(\d+)/)){v.css("opacity",O[1]/100)}if(O=(at.css("filter")||"").match(/opacity=(\d+)/)){at.css("opacity",O[1]/100)}}if(h.hide){ai(B.add(v))}else{if(h.show&&u){ak=true;B.add(v).fadeIn(af.fadeSpeed||0);y()}}aH=(S=(af.aspectRatio||"").split(/:/))[0]/S[1];N.add(v).unbind("mousedown",aG);if(af.disable||af.enable===false){B.unbind("mousemove",I).unbind("mousedown",aA);e(window).unbind("resize",al)}else{if(af.enable||af.disable===false){if(af.resizable||af.movable){B.mousemove(I).mousedown(aA)}e(window).resize(al)}if(!af.persistent){N.add(v).mousedown(aG)}}af.enable=af.disable=undefined}this.remove=function(){ah({disable:true});B.add(v).remove()};this.getOptions=function(){return af};this.setOptions=ah;this.getSelection=aw;this.setSelection=au;this.cancelSelection=Y;this.update=y;var aj=(/msie ([\w.]+)/i.exec(V)||[])[1],av=/opera/i.test(V),C=/webkit/i.test(V)&&!/chrome/i.test(V);ab=N;while(ab.length){g=a(g,!isNaN(ab.css("z-index"))?ab.css("z-index"):g);if(ab.css("position")=="fixed"){an="fixed"}ab=ab.parent(":not(body)")}g=af.zIndex||g;if(aj){N.attr("unselectable","on")}e.imgAreaSelect.keyPress=aj||C?"keydown":"keypress";if(av){am=f().css({width:"100%",height:"100%",position:"absolute",zIndex:g+2||2})}B.add(v).css({visibility:"hidden",position:an,overflow:"hidden",zIndex:g||"0"});B.css({zIndex:g+2||2});F.add(at).css({position:"absolute",fontSize:0});R.complete||R.readyState=="complete"||!N.is("img")?s():N.one("load",s);if(!u&&aj&&aj>=7){R.src=R.src}};e.fn.imgAreaSelect=function(g){g=g||{};this.each(function(){if(e(this).data("imgAreaSelect")){if(g.remove){e(this).data("imgAreaSelect").remove();e(this).removeData("imgAreaSelect")}else{e(this).data("imgAreaSelect").setOptions(g)}}else{if(!g.remove){if(g.enable===undefined&&g.disable===undefined){g.enable=true}e(this).data("imgAreaSelect",new e.imgAreaSelect(this,g))}}});if(g.instance){return e(this).data("imgAreaSelect")}return this}})(jQuery);
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ztfy/myams/resources/js/ext/jquery-tablednd.js Fri Mar 27 15:53:44 2015 +0100
@@ -0,0 +1,672 @@
+/**
+ * TableDnD plug-in for JQuery, allows you to drag and drop table rows
+ * You can set up various options to control how the system will work
+ * Copyright (c) Denis Howlett <denish@isocra.com>
+ * Licensed like jQuery, see http://docs.jquery.com/License.
+ *
+ * Configuration options:
+ *
+ * onDragStyle
+ * This is the style that is assigned to the row during drag. There are limitations to the styles that can be
+ * associated with a row (such as you can't assign a border--well you can, but it won't be
+ * displayed). (So instead consider using onDragClass.) The CSS style to apply is specified as
+ * a map (as used in the jQuery css(...) function).
+ * onDropStyle
+ * This is the style that is assigned to the row when it is dropped. As for onDragStyle, there are limitations
+ * to what you can do. Also this replaces the original style, so again consider using onDragClass which
+ * is simply added and then removed on drop.
+ * onDragClass
+ * This class is added for the duration of the drag and then removed when the row is dropped. It is more
+ * flexible than using onDragStyle since it can be inherited by the row cells and other content. The default
+ * is class is tDnD_whileDrag. So to use the default, simply customise this CSS class in your
+ * stylesheet.
+ * onDrop
+ * Pass a function that will be called when the row is dropped. The function takes 2 parameters: the table
+ * and the row that was dropped. You can work out the new order of the rows by using
+ * table.rows.
+ * onDragStart
+ * Pass a function that will be called when the user starts dragging. The function takes 2 parameters: the
+ * table and the row which the user has started to drag.
+ * onAllowDrop
+ * Pass a function that will be called as a row is over another row. If the function returns true, allow
+ * dropping on that row, otherwise not. The function takes 2 parameters: the dragged row and the row under
+ * the cursor. It returns a boolean: true allows the drop, false doesn't allow it.
+ * scrollAmount
+ * This is the number of pixels to scroll if the user moves the mouse cursor to the top or bottom of the
+ * window. The page should automatically scroll up or down as appropriate (tested in IE6, IE7, Safari, FF2,
+ * FF3 beta
+ * dragHandle
+ * This is a jQuery mach string for one or more cells in each row that is draggable. If you
+ * specify this, then you are responsible for setting cursor: move in the CSS and only these cells
+ * will have the drag behaviour. If you do not specify a dragHandle, then you get the old behaviour where
+ * the whole row is draggable.
+ *
+ * Other ways to control behaviour:
+ *
+ * Add class="nodrop" to any rows for which you don't want to allow dropping, and class="nodrag" to any rows
+ * that you don't want to be draggable.
+ *
+ * Inside the onDrop method you can also call $.tableDnD.serialize() this returns a string of the form
+ * <tableID>[]=<rowID1>&<tableID>[]=<rowID2> so that you can send this back to the server. The table must have
+ * an ID as must all the rows.
+ *
+ * Other methods:
+ *
+ * $("...").tableDnDUpdate()
+ * Will update all the matching tables, that is it will reapply the mousedown method to the rows (or handle cells).
+ * This is useful if you have updated the table rows using Ajax and you want to make the table draggable again.
+ * The table maintains the original configuration (so you don't have to specify it again).
+ *
+ * $("...").tableDnDSerialize()
+ * Will serialize and return the serialized string as above, but for each of the matching tables--so it can be
+ * called from anywhere and isn't dependent on the currentTable being set up correctly before calling
+ *
+ * Known problems:
+ * - Auto-scoll has some problems with IE7 (it scrolls even when it shouldn't), work-around: set scrollAmount to 0
+ *
+ * Version 0.2: 2008-02-20 First public version
+ * Version 0.3: 2008-02-07 Added onDragStart option
+ * Made the scroll amount configurable (default is 5 as before)
+ * Version 0.4: 2008-03-15 Changed the noDrag/noDrop attributes to nodrag/nodrop classes
+ * Added onAllowDrop to control dropping
+ * Fixed a bug which meant that you couldn't set the scroll amount in both directions
+ * Added serialize method
+ * Version 0.5: 2008-05-16 Changed so that if you specify a dragHandle class it doesn't make the whole row
+ * draggable
+ * Improved the serialize method to use a default (and settable) regular expression.
+ * Added tableDnDupate() and tableDnDSerialize() to be called when you are outside the table
+ * Version 0.6: 2011-12-02 Added support for touch devices
+ * Version 0.7 2012-04-09 Now works with jQuery 1.7 and supports touch, tidied up tabs and spaces
+ */
+!function ($, window, document, undefined) {
+// Determine if this is a touch device
+var hasTouch = 'ontouchstart' in document.documentElement,
+ startEvent = 'touchstart mousedown',
+ moveEvent = 'touchmove mousemove',
+ endEvent = 'touchend mouseup';
+
+// If we're on a touch device, then wire up the events
+// see http://stackoverflow.com/a/8456194/1316086
+hasTouch
+ && $.each("touchstart touchmove touchend".split(" "), function(i, name) {
+ $.event.fixHooks[name] = $.event.mouseHooks;
+ });
+
+
+$(document).ready(function () {
+ function parseStyle(css) {
+ var objMap = {},
+ parts = css.match(/([^;:]+)/g) || [];
+ while (parts.length)
+ objMap[parts.shift()] = parts.shift().trim();
+
+ return objMap;
+ }
+ $('table').each(function () {
+ if ($(this).data('table') == 'dnd') {
+
+ $(this).tableDnD({
+ onDragStyle: $(this).data('ondragstyle') && parseStyle($(this).data('ondragstyle')) || null,
+ onDropStyle: $(this).data('ondropstyle') && parseStyle($(this).data('ondropstyle')) || null,
+ onDragClass: $(this).data('ondragclass') == undefined && "tDnD_whileDrag" || $(this).data('ondragclass'),
+ onDrop: $(this).data('ondrop') && new Function('table', 'row', $(this).data('ondrop')), // 'return eval("'+$(this).data('ondrop')+'");') || null,
+ onDragStart: $(this).data('ondragstart') && new Function('table', 'row' ,$(this).data('ondragstart')), // 'return eval("'+$(this).data('ondragstart')+'");') || null,
+ scrollAmount: $(this).data('scrollamount') || 5,
+ sensitivity: $(this).data('sensitivity') || 10,
+ hierarchyLevel: $(this).data('hierarchylevel') || 0,
+ indentArtifact: $(this).data('indentartifact') || '<div class="indent"> </div>',
+ autoWidthAdjust: $(this).data('autowidthadjust') || true,
+ autoCleanRelations: $(this).data('autocleanrelations') || true,
+ jsonPretifySeparator: $(this).data('jsonpretifyseparator') || '\t',
+ serializeRegexp: $(this).data('serializeregexp') && new RegExp($(this).data('serializeregexp')) || /[^\-]*$/,
+ serializeParamName: $(this).data('serializeparamname') || false,
+ dragHandle: $(this).data('draghandle') || null
+ });
+ }
+
+
+ });
+});
+
+jQuery.tableDnD = {
+ /** Keep hold of the current table being dragged */
+ currentTable: null,
+ /** Keep hold of the current drag object if any */
+ dragObject: null,
+ /** The current mouse offset */
+ mouseOffset: null,
+ /** Remember the old value of X and Y so that we don't do too much processing */
+ oldX: 0,
+ oldY: 0,
+
+ /** Actually build the structure */
+ build: function(options) {
+ // Set up the defaults if any
+
+ this.each(function() {
+ // This is bound to each matching table, set up the defaults and override with user options
+ this.tableDnDConfig = $.extend({
+ onDragStyle: null,
+ onDropStyle: null,
+ // Add in the default class for whileDragging
+ onDragClass: "tDnD_whileDrag",
+ onDrop: null,
+ onDragStart: null,
+ scrollAmount: 5,
+ /** Sensitivity setting will throttle the trigger rate for movement detection */
+ sensitivity: 10,
+ /** Hierarchy level to support parent child. 0 switches this functionality off */
+ hierarchyLevel: 0,
+ /** The html artifact to prepend the first cell with as indentation */
+ indentArtifact: '<div class="indent"> </div>',
+ /** Automatically adjust width of first cell */
+ autoWidthAdjust: true,
+ /** Automatic clean-up to ensure relationship integrity */
+ autoCleanRelations: true,
+ /** Specify a number (4) as number of spaces or any indent string for JSON.stringify */
+ jsonPretifySeparator: '\t',
+ /** The regular expression to use to trim row IDs */
+ serializeRegexp: /[^\-]*$/,
+ /** If you want to specify another parameter name instead of the table ID */
+ serializeParamName: false,
+ /** If you give the name of a class here, then only Cells with this class will be draggable */
+ dragHandle: null
+ }, options || {});
+
+ // Now make the rows draggable
+ $.tableDnD.makeDraggable(this);
+ // Prepare hierarchy support
+ this.tableDnDConfig.hierarchyLevel
+ && $.tableDnD.makeIndented(this);
+ });
+
+ // Don't break the chain
+ return this;
+ },
+ makeIndented: function (table) {
+ var config = table.tableDnDConfig,
+ rows = table.rows,
+ firstCell = $(rows).first().find('td:first')[0],
+ indentLevel = 0,
+ cellWidth = 0,
+ longestCell,
+ tableStyle;
+
+ if ($(table).hasClass('indtd'))
+ return null;
+
+ tableStyle = $(table).addClass('indtd').attr('style');
+ $(table).css({whiteSpace: "nowrap"});
+
+ for (var w = 0; w < rows.length; w++) {
+ if (cellWidth < $(rows[w]).find('td:first').text().length) {
+ cellWidth = $(rows[w]).find('td:first').text().length;
+ longestCell = w;
+ }
+ }
+ $(firstCell).css({width: 'auto'});
+ for (w = 0; w < config.hierarchyLevel; w++)
+ $(rows[longestCell]).find('td:first').prepend(config.indentArtifact);
+ firstCell && $(firstCell).css({width: firstCell.offsetWidth});
+ tableStyle && $(table).css(tableStyle);
+
+ for (w = 0; w < config.hierarchyLevel; w++)
+ $(rows[longestCell]).find('td:first').children(':first').remove();
+
+ config.hierarchyLevel
+ && $(rows).each(function () {
+ indentLevel = $(this).data('level') || 0;
+ indentLevel <= config.hierarchyLevel
+ && $(this).data('level', indentLevel)
+ || $(this).data('level', 0);
+ for (var i = 0; i < $(this).data('level'); i++)
+ $(this).find('td:first').prepend(config.indentArtifact);
+ });
+
+ return this;
+ },
+ /** This function makes all the rows on the table draggable apart from those marked as "NoDrag" */
+ makeDraggable: function(table) {
+ var config = table.tableDnDConfig;
+
+ config.dragHandle
+ // We only need to add the event to the specified cells
+ && $(config.dragHandle, table).each(function() {
+ // The cell is bound to "this"
+ $(this).bind(startEvent, function(e) {
+ $.tableDnD.initialiseDrag($(this).parents('tr')[0], table, this, e, config);
+ return false;
+ });
+ })
+ // For backwards compatibility, we add the event to the whole row
+ // get all the rows as a wrapped set
+ || $(table.rows).each(function() {
+ // Iterate through each row, the row is bound to "this"
+ if (! $(this).hasClass("nodrag")) {
+ $(this).bind(startEvent, function(e) {
+ if (e.target.tagName == "TD") {
+ $.tableDnD.initialiseDrag(this, table, this, e, config);
+ return false;
+ }
+ }).css("cursor", "move"); // Store the tableDnD object
+ }
+ });
+ },
+ currentOrder: function() {
+ var rows = this.currentTable.rows;
+ return $.map(rows, function (val) {
+ return ($(val).data('level') + val.id).replace(/\s/g, '');
+ }).join('');
+ },
+ initialiseDrag: function(dragObject, table, target, e, config) {
+ this.dragObject = dragObject;
+ this.currentTable = table;
+ this.mouseOffset = this.getMouseOffset(target, e);
+ this.originalOrder = this.currentOrder();
+
+ // Now we need to capture the mouse up and mouse move event
+ // We can use bind so that we don't interfere with other event handlers
+ $(document)
+ .bind(moveEvent, this.mousemove)
+ .bind(endEvent, this.mouseup);
+
+ // Call the onDragStart method if there is one
+ config.onDragStart
+ && config.onDragStart(table, target);
+ },
+ updateTables: function() {
+ this.each(function() {
+ // this is now bound to each matching table
+ if (this.tableDnDConfig)
+ $.tableDnD.makeDraggable(this);
+ });
+ },
+ /** Get the mouse coordinates from the event (allowing for browser differences) */
+ mouseCoords: function(e) {
+ e = e || window.event;
+
+ if (e.changedTouches)
+ return {
+ x: e.changedTouches[0].clientX,
+ y: e.changedTouches[0].clientY
+ };
+
+ if(e.pageX || e.pageY)
+ return {
+ x: e.pageX,
+ y: e.pageY
+ };
+
+ return {
+ x: e.clientX + document.body.scrollLeft - document.body.clientLeft,
+ y: e.clientY + document.body.scrollTop - document.body.clientTop
+ };
+ },
+ /** Given a target element and a mouse eent, get the mouse offset from that element.
+ To do this we need the element's position and the mouse position */
+ getMouseOffset: function(target, e) {
+ var mousePos,
+ docPos;
+
+ e = e || window.event;
+
+ docPos = this.getPosition(target);
+ mousePos = this.mouseCoords(e);
+
+ return {
+ x: mousePos.x - docPos.x,
+ y: mousePos.y - docPos.y
+ };
+ },
+ /** Get the position of an element by going up the DOM tree and adding up all the offsets */
+ getPosition: function(element) {
+ var left = 0,
+ top = 0;
+
+ // Safari fix -- thanks to Luis Chato for this!
+ // Safari 2 doesn't correctly grab the offsetTop of a table row
+ // this is detailed here:
+ // http://jacob.peargrove.com/blog/2006/technical/table-row-offsettop-bug-in-safari/
+ // the solution is likewise noted there, grab the offset of a table cell in the row - the firstChild.
+ // note that firefox will return a text node as a first child, so designing a more thorough
+ // solution may need to take that into account, for now this seems to work in firefox, safari, ie
+ if (element.offsetHeight == 0)
+ element = element.firstChild; // a table cell
+
+ while (element.offsetParent) {
+ left += element.offsetLeft;
+ top += element.offsetTop;
+ element = element.offsetParent;
+ }
+
+ left += element.offsetLeft;
+ top += element.offsetTop;
+
+ return {
+ x: left,
+ y: top
+ };
+ },
+ autoScroll: function (mousePos) {
+ var config = this.currentTable.tableDnDConfig,
+ yOffset = window.pageYOffset,
+ windowHeight = window.innerHeight
+ ? window.innerHeight
+ : document.documentElement.clientHeight
+ ? document.documentElement.clientHeight
+ : document.body.clientHeight;
+
+ // Windows version
+ // yOffset=document.body.scrollTop;
+ if (document.all)
+ if (typeof document.compatMode != 'undefined'
+ && document.compatMode != 'BackCompat')
+ yOffset = document.documentElement.scrollTop;
+ else if (typeof document.body != 'undefined')
+ yOffset = document.body.scrollTop;
+
+ mousePos.y - yOffset < config.scrollAmount
+ && window.scrollBy(0, - config.scrollAmount)
+ || windowHeight - (mousePos.y - yOffset) < config.scrollAmount
+ && window.scrollBy(0, config.scrollAmount);
+
+ },
+ moveVerticle: function (moving, currentRow) {
+
+ if (0 != moving.vertical
+ // If we're over a row then move the dragged row to there so that the user sees the
+ // effect dynamically
+ && currentRow
+ && this.dragObject != currentRow
+ && this.dragObject.parentNode == currentRow.parentNode)
+ 0 > moving.vertical
+ && this.dragObject.parentNode.insertBefore(this.dragObject, currentRow.nextSibling)
+ || 0 < moving.vertical
+ && this.dragObject.parentNode.insertBefore(this.dragObject, currentRow);
+
+ },
+ moveHorizontal: function (moving, currentRow) {
+ var config = this.currentTable.tableDnDConfig,
+ currentLevel;
+
+ if (!config.hierarchyLevel
+ || 0 == moving.horizontal
+ // We only care if moving left or right on the current row
+ || !currentRow
+ || this.dragObject != currentRow)
+ return null;
+
+ currentLevel = $(currentRow).data('level');
+
+ 0 < moving.horizontal
+ && currentLevel > 0
+ && $(currentRow).find('td:first').children(':first').remove()
+ && $(currentRow).data('level', --currentLevel);
+
+ 0 > moving.horizontal
+ && currentLevel < config.hierarchyLevel
+ && $(currentRow).prev().data('level') >= currentLevel
+ && $(currentRow).children(':first').prepend(config.indentArtifact)
+ && $(currentRow).data('level', ++currentLevel);
+
+ },
+ mousemove: function(e) {
+ var dragObj = $($.tableDnD.dragObject),
+ config = $.tableDnD.currentTable.tableDnDConfig,
+ currentRow,
+ mousePos,
+ moving,
+ x,
+ y;
+
+ e && e.preventDefault();
+
+ if (!$.tableDnD.dragObject)
+ return false;
+
+ // prevent touch device screen scrolling
+ e.type == 'touchmove'
+ && event.preventDefault(); // TODO verify this is event and not really e
+
+ // update the style to show we're dragging
+ config.onDragClass
+ && dragObj.addClass(config.onDragClass)
+ || dragObj.css(config.onDragStyle);
+
+ mousePos = $.tableDnD.mouseCoords(e);
+ x = mousePos.x - $.tableDnD.mouseOffset.x;
+ y = mousePos.y - $.tableDnD.mouseOffset.y;
+
+ // auto scroll the window
+ $.tableDnD.autoScroll(mousePos);
+
+ currentRow = $.tableDnD.findDropTargetRow(dragObj, y);
+ moving = $.tableDnD.findDragDirection(x, y);
+
+ $.tableDnD.moveVerticle(moving, currentRow);
+ $.tableDnD.moveHorizontal(moving, currentRow);
+
+ return false;
+ },
+ findDragDirection: function (x,y) {
+ var sensitivity = this.currentTable.tableDnDConfig.sensitivity,
+ oldX = this.oldX,
+ oldY = this.oldY,
+ xMin = oldX - sensitivity,
+ xMax = oldX + sensitivity,
+ yMin = oldY - sensitivity,
+ yMax = oldY + sensitivity,
+ moving = {
+ horizontal: x >= xMin && x <= xMax ? 0 : x > oldX ? -1 : 1,
+ vertical : y >= yMin && y <= yMax ? 0 : y > oldY ? -1 : 1
+ };
+
+ // update the old value
+ if (moving.horizontal != 0)
+ this.oldX = x;
+ if (moving.vertical != 0)
+ this.oldY = y;
+
+ return moving;
+ },
+ /** We're only worried about the y position really, because we can only move rows up and down */
+ findDropTargetRow: function(draggedRow, y) {
+ var rowHeight = 0,
+ rows = this.currentTable.rows,
+ config = this.currentTable.tableDnDConfig,
+ rowY = 0,
+ row = null;
+
+ for (var i = 0; i < rows.length; i++) {
+ row = rows[i];
+ rowY = this.getPosition(row).y;
+ rowHeight = parseInt(row.offsetHeight) / 2;
+ if (row.offsetHeight == 0) {
+ rowY = this.getPosition(row.firstChild).y;
+ rowHeight = parseInt(row.firstChild.offsetHeight) / 2;
+ }
+ // Because we always have to insert before, we need to offset the height a bit
+ if (y > (rowY - rowHeight) && y < (rowY + rowHeight))
+ // that's the row we're over
+ // If it's the same as the current row, ignore it
+ if (draggedRow.is(row)
+ || (config.onAllowDrop
+ && !config.onAllowDrop(draggedRow, row))
+ // If a row has nodrop class, then don't allow dropping (inspired by John Tarr and Famic)
+ || $(row).hasClass("nodrop"))
+ return null;
+ else
+ return row;
+ }
+ return null;
+ },
+ processMouseup: function() {
+ if (!this.currentTable || !this.dragObject)
+ return null;
+
+ var config = this.currentTable.tableDnDConfig,
+ droppedRow = this.dragObject,
+ parentLevel = 0,
+ myLevel = 0;
+
+ // Unbind the event handlers
+ $(document)
+ .unbind(moveEvent, this.mousemove)
+ .unbind(endEvent, this.mouseup);
+
+ config.hierarchyLevel
+ && config.autoCleanRelations
+ && $(this.currentTable.rows).first().find('td:first').children().each(function () {
+ myLevel = $(this).parents('tr:first').data('level');
+ myLevel
+ && $(this).parents('tr:first').data('level', --myLevel)
+ && $(this).remove();
+ })
+ && config.hierarchyLevel > 1
+ && $(this.currentTable.rows).each(function () {
+ myLevel = $(this).data('level');
+ if (myLevel > 1) {
+ parentLevel = $(this).prev().data('level');
+ while (myLevel > parentLevel + 1) {
+ $(this).find('td:first').children(':first').remove();
+ $(this).data('level', --myLevel);
+ }
+ }
+ });
+
+ // If we have a dragObject, then we need to release it,
+ // The row will already have been moved to the right place so we just reset stuff
+ config.onDragClass
+ && $(droppedRow).removeClass(config.onDragClass)
+ || $(droppedRow).css(config.onDropStyle);
+
+ this.dragObject = null;
+ // Call the onDrop method if there is one
+ config.onDrop
+ && this.originalOrder != this.currentOrder()
+ && $(droppedRow).hide().fadeIn('fast')
+ && config.onDrop(this.currentTable, droppedRow);
+
+ this.currentTable = null; // let go of the table too
+ },
+ mouseup: function(e) {
+ e && e.preventDefault();
+ $.tableDnD.processMouseup();
+ return false;
+ },
+ jsonize: function(pretify) {
+ var table = this.currentTable;
+ if (pretify)
+ return JSON.stringify(
+ this.tableData(table),
+ null,
+ table.tableDnDConfig.jsonPretifySeparator
+ );
+ return JSON.stringify(this.tableData(table));
+ },
+ serialize: function() {
+ return $.param(this.tableData(this.currentTable));
+ },
+ serializeTable: function(table) {
+ var result = "";
+ var paramName = table.tableDnDConfig.serializeParamName || table.id;
+ var rows = table.rows;
+ for (var i=0; i<rows.length; i++) {
+ if (result.length > 0) result += "&";
+ var rowId = rows[i].id;
+ if (rowId && table.tableDnDConfig && table.tableDnDConfig.serializeRegexp) {
+ rowId = rowId.match(table.tableDnDConfig.serializeRegexp)[0];
+ result += paramName + '[]=' + rowId;
+ }
+ }
+ return result;
+ },
+ serializeTables: function() {
+ var result = [];
+ $('table').each(function() {
+ this.id && result.push($.param(this.tableData(this)));
+ });
+ return result.join('&');
+ },
+ tableData: function (table) {
+ var config = table.tableDnDConfig,
+ previousIDs = [],
+ currentLevel = 0,
+ indentLevel = 0,
+ rowID = null,
+ data = {},
+ getSerializeRegexp,
+ paramName,
+ currentID,
+ rows;
+
+ if (!table)
+ table = this.currentTable;
+ if (!table || !table.id || !table.rows || !table.rows.length)
+ return {error: { code: 500, message: "Not a valid table, no serializable unique id provided."}};
+
+ rows = config.autoCleanRelations
+ && table.rows
+ || $.makeArray(table.rows);
+ paramName = config.serializeParamName || table.id;
+ currentID = paramName;
+
+ getSerializeRegexp = function (rowId) {
+ if (rowId && config && config.serializeRegexp)
+ return rowId.match(config.serializeRegexp)[0];
+ return rowId;
+ };
+
+ data[currentID] = [];
+ !config.autoCleanRelations
+ && $(rows[0]).data('level')
+ && rows.unshift({id: 'undefined'});
+
+
+
+ for (var i=0; i < rows.length; i++) {
+ if (config.hierarchyLevel) {
+ indentLevel = $(rows[i]).data('level') || 0;
+ if (indentLevel == 0) {
+ currentID = paramName;
+ previousIDs = [];
+ }
+ else if (indentLevel > currentLevel) {
+ previousIDs.push([currentID, currentLevel]);
+ currentID = getSerializeRegexp(rows[i-1].id);
+ }
+ else if (indentLevel < currentLevel) {
+ for (var h = 0; h < previousIDs.length; h++) {
+ if (previousIDs[h][1] == indentLevel)
+ currentID = previousIDs[h][0];
+ if (previousIDs[h][1] >= currentLevel)
+ previousIDs[h][1] = 0;
+ }
+ }
+ currentLevel = indentLevel;
+
+ if (!$.isArray(data[currentID]))
+ data[currentID] = [];
+ rowID = getSerializeRegexp(rows[i].id);
+ rowID && data[currentID].push(rowID);
+ }
+ else {
+ rowID = getSerializeRegexp(rows[i].id);
+ rowID && data[currentID].push(rowID);
+ }
+ }
+ return data;
+ }
+};
+
+jQuery.fn.extend(
+ {
+ tableDnD : $.tableDnD.build,
+ tableDnDUpdate : $.tableDnD.updateTables,
+ tableDnDSerialize : $.proxy($.tableDnD.serialize, $.tableDnD),
+ tableDnDSerializeAll : $.tableDnD.serializeTables,
+ tableDnDData : $.proxy($.tableDnD.tableData, $.tableDnD)
+ }
+);
+
+}(jQuery, window, window.document);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ztfy/myams/resources/js/ext/jquery-tablednd.min.js Fri Mar 27 15:53:44 2015 +0100
@@ -0,0 +1,1 @@
+!function(e,c,a,g){var d="ontouchstart" in a.documentElement,b="touchstart mousedown",f="touchmove mousemove",h="touchend mouseup";d&&e.each("touchstart touchmove touchend".split(" "),function(k,j){e.event.fixHooks[j]=e.event.mouseHooks});e(a).ready(function(){function i(k){var j={},l=k.match(/([^;:]+)/g)||[];while(l.length){j[l.shift()]=l.shift().trim()}return j}e("table").each(function(){if(e(this).data("table")=="dnd"){e(this).tableDnD({onDragStyle:e(this).data("ondragstyle")&&i(e(this).data("ondragstyle"))||null,onDropStyle:e(this).data("ondropstyle")&&i(e(this).data("ondropstyle"))||null,onDragClass:e(this).data("ondragclass")==g&&"tDnD_whileDrag"||e(this).data("ondragclass"),onDrop:e(this).data("ondrop")&&new Function("table","row",e(this).data("ondrop")),onDragStart:e(this).data("ondragstart")&&new Function("table","row",e(this).data("ondragstart")),scrollAmount:e(this).data("scrollamount")||5,sensitivity:e(this).data("sensitivity")||10,hierarchyLevel:e(this).data("hierarchylevel")||0,indentArtifact:e(this).data("indentartifact")||'<div class="indent"> </div>',autoWidthAdjust:e(this).data("autowidthadjust")||true,autoCleanRelations:e(this).data("autocleanrelations")||true,jsonPretifySeparator:e(this).data("jsonpretifyseparator")||"\t",serializeRegexp:e(this).data("serializeregexp")&&new RegExp(e(this).data("serializeregexp"))||/[^\-]*$/,serializeParamName:e(this).data("serializeparamname")||false,dragHandle:e(this).data("draghandle")||null})}})});jQuery.tableDnD={currentTable:null,dragObject:null,mouseOffset:null,oldX:0,oldY:0,build:function(i){this.each(function(){this.tableDnDConfig=e.extend({onDragStyle:null,onDropStyle:null,onDragClass:"tDnD_whileDrag",onDrop:null,onDragStart:null,scrollAmount:5,sensitivity:10,hierarchyLevel:0,indentArtifact:'<div class="indent"> </div>',autoWidthAdjust:true,autoCleanRelations:true,jsonPretifySeparator:"\t",serializeRegexp:/[^\-]*$/,serializeParamName:false,dragHandle:null},i||{});e.tableDnD.makeDraggable(this);this.tableDnDConfig.hierarchyLevel&&e.tableDnD.makeIndented(this)});return this},makeIndented:function(p){var i=p.tableDnDConfig,q=p.rows,m=e(q).first().find("td:first")[0],o=0,j=0,l,k;if(e(p).hasClass("indtd")){return null}k=e(p).addClass("indtd").attr("style");e(p).css({whiteSpace:"nowrap"});for(var n=0;n<q.length;n++){if(j<e(q[n]).find("td:first").text().length){j=e(q[n]).find("td:first").text().length;l=n}}e(m).css({width:"auto"});for(n=0;n<i.hierarchyLevel;n++){e(q[l]).find("td:first").prepend(i.indentArtifact)}m&&e(m).css({width:m.offsetWidth});k&&e(p).css(k);for(n=0;n<i.hierarchyLevel;n++){e(q[l]).find("td:first").children(":first").remove()}i.hierarchyLevel&&e(q).each(function(){o=e(this).data("level")||0;o<=i.hierarchyLevel&&e(this).data("level",o)||e(this).data("level",0);for(var r=0;r<e(this).data("level");r++){e(this).find("td:first").prepend(i.indentArtifact)}});return this},makeDraggable:function(j){var i=j.tableDnDConfig;i.dragHandle&&e(i.dragHandle,j).each(function(){e(this).bind(b,function(k){e.tableDnD.initialiseDrag(e(this).parents("tr")[0],j,this,k,i);return false})})||e(j.rows).each(function(){if(!e(this).hasClass("nodrag")){e(this).bind(b,function(k){if(k.target.tagName=="TD"){e.tableDnD.initialiseDrag(this,j,this,k,i);return false}}).css("cursor","move")}})},currentOrder:function(){var i=this.currentTable.rows;return e.map(i,function(j){return(e(j).data("level")+j.id).replace(/\s/g,"")}).join("")},initialiseDrag:function(k,j,m,l,i){this.dragObject=k;this.currentTable=j;this.mouseOffset=this.getMouseOffset(m,l);this.originalOrder=this.currentOrder();e(a).bind(f,this.mousemove).bind(h,this.mouseup);i.onDragStart&&i.onDragStart(j,m)},updateTables:function(){this.each(function(){if(this.tableDnDConfig){e.tableDnD.makeDraggable(this)}})},mouseCoords:function(i){i=i||c.event;if(i.changedTouches){return{x:i.changedTouches[0].clientX,y:i.changedTouches[0].clientY}}if(i.pageX||i.pageY){return{x:i.pageX,y:i.pageY}}return{x:i.clientX+a.body.scrollLeft-a.body.clientLeft,y:i.clientY+a.body.scrollTop-a.body.clientTop}},getMouseOffset:function(l,k){var i,j;k=k||c.event;j=this.getPosition(l);i=this.mouseCoords(k);return{x:i.x-j.x,y:i.y-j.y}},getPosition:function(i){var k=0,j=0;if(i.offsetHeight==0){i=i.firstChild}while(i.offsetParent){k+=i.offsetLeft;j+=i.offsetTop;i=i.offsetParent}k+=i.offsetLeft;j+=i.offsetTop;return{x:k,y:j}},autoScroll:function(i){var j=this.currentTable.tableDnDConfig,k=c.pageYOffset,l=c.innerHeight?c.innerHeight:a.documentElement.clientHeight?a.documentElement.clientHeight:a.body.clientHeight;if(a.all){if(typeof a.compatMode!="undefined"&&a.compatMode!="BackCompat"){k=a.documentElement.scrollTop}else{if(typeof a.body!="undefined"){k=a.body.scrollTop}}}i.y-k<j.scrollAmount&&c.scrollBy(0,-j.scrollAmount)||l-(i.y-k)<j.scrollAmount&&c.scrollBy(0,j.scrollAmount)},moveVerticle:function(i,j){if(0!=i.vertical&&j&&this.dragObject!=j&&this.dragObject.parentNode==j.parentNode){0>i.vertical&&this.dragObject.parentNode.insertBefore(this.dragObject,j.nextSibling)||0<i.vertical&&this.dragObject.parentNode.insertBefore(this.dragObject,j)}},moveHorizontal:function(i,k){var j=this.currentTable.tableDnDConfig,l;if(!j.hierarchyLevel||0==i.horizontal||!k||this.dragObject!=k){return null}l=e(k).data("level");0<i.horizontal&&l>0&&e(k).find("td:first").children(":first").remove()&&e(k).data("level",--l);0>i.horizontal&&l<j.hierarchyLevel&&e(k).prev().data("level")>=l&&e(k).children(":first").prepend(j.indentArtifact)&&e(k).data("level",++l)},mousemove:function(o){var n=e(e.tableDnD.dragObject),m=e.tableDnD.currentTable.tableDnDConfig,l,k,j,i,p;o&&o.preventDefault();if(!e.tableDnD.dragObject){return false}o.type=="touchmove"&&event.preventDefault();m.onDragClass&&n.addClass(m.onDragClass)||n.css(m.onDragStyle);k=e.tableDnD.mouseCoords(o);i=k.x-e.tableDnD.mouseOffset.x;p=k.y-e.tableDnD.mouseOffset.y;e.tableDnD.autoScroll(k);l=e.tableDnD.findDropTargetRow(n,p);j=e.tableDnD.findDragDirection(i,p);e.tableDnD.moveVerticle(j,l);e.tableDnD.moveHorizontal(j,l);return false},findDragDirection:function(o,n){var l=this.currentTable.tableDnDConfig.sensitivity,r=this.oldX,p=this.oldY,j=r-l,m=r+l,q=p-l,k=p+l,i={horizontal:o>=j&&o<=m?0:o>r?-1:1,vertical:n>=q&&n<=k?0:n>p?-1:1};if(i.horizontal!=0){this.oldX=o}if(i.vertical!=0){this.oldY=n}return i},findDropTargetRow:function(n,q){var m=0,o=this.currentTable.rows,k=this.currentTable.tableDnDConfig,j=0,p=null;for(var l=0;l<o.length;l++){p=o[l];j=this.getPosition(p).y;m=parseInt(p.offsetHeight)/2;if(p.offsetHeight==0){j=this.getPosition(p.firstChild).y;m=parseInt(p.firstChild.offsetHeight)/2}if(q>(j-m)&&q<(j+m)){if(n.is(p)||(k.onAllowDrop&&!k.onAllowDrop(n,p))||e(p).hasClass("nodrop")){return null}else{return p}}}return null},processMouseup:function(){if(!this.currentTable||!this.dragObject){return null}var i=this.currentTable.tableDnDConfig,j=this.dragObject,l=0,k=0;e(a).unbind(f,this.mousemove).unbind(h,this.mouseup);i.hierarchyLevel&&i.autoCleanRelations&&e(this.currentTable.rows).first().find("td:first").children().each(function(){k=e(this).parents("tr:first").data("level");k&&e(this).parents("tr:first").data("level",--k)&&e(this).remove()})&&i.hierarchyLevel>1&&e(this.currentTable.rows).each(function(){k=e(this).data("level");if(k>1){l=e(this).prev().data("level");while(k>l+1){e(this).find("td:first").children(":first").remove();e(this).data("level",--k)}}});i.onDragClass&&e(j).removeClass(i.onDragClass)||e(j).css(i.onDropStyle);this.dragObject=null;i.onDrop&&this.originalOrder!=this.currentOrder()&&e(j).hide().fadeIn("fast")&&i.onDrop(this.currentTable,j);this.currentTable=null},mouseup:function(i){i&&i.preventDefault();e.tableDnD.processMouseup();return false},jsonize:function(i){var j=this.currentTable;if(i){return JSON.stringify(this.tableData(j),null,j.tableDnDConfig.jsonPretifySeparator)}return JSON.stringify(this.tableData(j))},serialize:function(){return e.param(this.tableData(this.currentTable))},serializeTable:function(l){var j="";var o=l.tableDnDConfig.serializeParamName||l.id;var m=l.rows;for(var k=0;k<m.length;k++){if(j.length>0){j+="&"}var n=m[k].id;if(n&&l.tableDnDConfig&&l.tableDnDConfig.serializeRegexp){n=n.match(l.tableDnDConfig.serializeRegexp)[0];j+=o+"[]="+n}}return j},serializeTables:function(){var i=[];e("table").each(function(){this.id&&i.push(e.param(this.tableData(this)))});return i.join("&")},tableData:function(u){var n=u.tableDnDConfig,k=[],l=0,t=0,s=null,p={},m,r,j,v;if(!u){u=this.currentTable}if(!u||!u.id||!u.rows||!u.rows.length){return{error:{code:500,message:"Not a valid table, no serializable unique id provided."}}}v=n.autoCleanRelations&&u.rows||e.makeArray(u.rows);r=n.serializeParamName||u.id;j=r;m=function(i){if(i&&n&&n.serializeRegexp){return i.match(n.serializeRegexp)[0]}return i};p[j]=[];!n.autoCleanRelations&&e(v[0]).data("level")&&v.unshift({id:"undefined"});for(var o=0;o<v.length;o++){if(n.hierarchyLevel){t=e(v[o]).data("level")||0;if(t==0){j=r;k=[]}else{if(t>l){k.push([j,l]);j=m(v[o-1].id)}else{if(t<l){for(var q=0;q<k.length;q++){if(k[q][1]==t){j=k[q][0]}if(k[q][1]>=l){k[q][1]=0}}}}}l=t;if(!e.isArray(p[j])){p[j]=[]}s=m(v[o].id);s&&p[j].push(s)}else{s=m(v[o].id);s&&p[j].push(s)}}return p}};jQuery.fn.extend({tableDnD:e.tableDnD.build,tableDnDUpdate:e.tableDnD.updateTables,tableDnDSerialize:e.proxy(e.tableDnD.serialize,e.tableDnD),tableDnDSerializeAll:e.tableDnD.serializeTables,tableDnDData:e.proxy(e.tableDnD.tableData,e.tableDnD)})}(jQuery,window,window.document);
\ No newline at end of file