From 6759b021e388348d8672d60f9943e19f6764a511 Mon Sep 17 00:00:00 2001 From: Baoshan Sheng Date: Sun, 4 Oct 2015 14:42:22 +0800 Subject: [PATCH] Support crossOrigin option --- dist/js/strip.pkgd.js | 3 ++- dist/js/strip.pkgd.min.js | 4 ++-- src/js/helpers/imageready.js | 1 + src/js/page.js | 2 +- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/dist/js/strip.pkgd.js b/dist/js/strip.pkgd.js index ae08cf1..78ed6c9 100644 --- a/dist/js/strip.pkgd.js +++ b/dist/js/strip.pkgd.js @@ -366,6 +366,7 @@ $.extend(ImageReady.prototype, { load: function() { this._loading = setTimeout($.proxy(function() { var image = new Image(); + image.crossOrigin = this.img.crossOrigin; this._onloadImage = image; image.onload = $.proxy(function() { @@ -1180,7 +1181,7 @@ $.extend(Page.prototype, { switch (this.view.type) { case 'image': - this.container.append(this.content = $('') + this.container.append(this.content = $('') .attr({ src: this.view.url }) ); break; diff --git a/dist/js/strip.pkgd.min.js b/dist/js/strip.pkgd.min.js index adcf9af..8fe5bae 100644 --- a/dist/js/strip.pkgd.min.js +++ b/dist/js/strip.pkgd.min.js @@ -9,5 +9,5 @@ * - Non-commercial: http://creativecommons.org/licenses/by-nc-nd/3.0 * */ -!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],b):"object"==typeof module&&module.exports?module.exports=b(require("jquery")):a.Strip=b(jQuery)}(this,function($){function Spinner(){return this.initialize.apply(this,_slice.call(arguments))}function Timers(){return this.initialize.apply(this,_slice.call(arguments))}function getURIData(a){var b={type:"image"};return $.each(Types,function(c,d){var e=d.data(a);e&&(b=e,b.type=c,b.url=a)}),b}function detectExtension(a){var b=(a||"").replace(/\?.*/g,"").match(/\.([^.]{3,4})$/);return b?b[1].toLowerCase():null}function View(){this.initialize.apply(this,_slice.call(arguments))}var Strip={version:"1.6.1"};Strip.Skins={strip:{}};var Browser=function(a){function b(b){var c=new RegExp(b+"([\\d.]+)").exec(a);return c?parseFloat(c[1]):!0}return{IE:!(!window.attachEvent||-1!==a.indexOf("Opera"))&&b("MSIE "),Opera:a.indexOf("Opera")>-1&&(!!window.opera&&opera.version&&parseFloat(opera.version())||7.55),WebKit:a.indexOf("AppleWebKit/")>-1&&b("AppleWebKit/"),Gecko:a.indexOf("Gecko")>-1&&-1===a.indexOf("KHTML")&&b("rv:"),MobileSafari:!!a.match(/Apple.*Mobile.*Safari/),Chrome:a.indexOf("Chrome")>-1&&b("Chrome/"),ChromeMobile:a.indexOf("CrMo")>-1&&b("CrMo/"),Android:a.indexOf("Android")>-1&&b("Android "),IEMobile:a.indexOf("IEMobile")>-1&&b("IEMobile/")}}(navigator.userAgent),_slice=Array.prototype.slice,Fit={within:function(a,b){for(var c=$.extend({height:!0,width:!0},arguments[2]||{}),d=$.extend({},b),e=1,f=5,g={width:c.width,height:c.height};f>0&&(g.width&&d.width>a.width||g.height&&d.height>a.height);){var h=1,i=1;g.width&&d.width>a.width&&(h=a.width/d.width),g.height&&d.height>a.height&&(i=a.height/d.height);var e=Math.min(h,i);d={width:Math.round(b.width*e),height:Math.round(b.height*e)},f--}return d.width=Math.max(d.width,0),d.height=Math.max(d.height,0),d}};$.extend($.easing,{stripEaseInCubic:function(a,b,c,d,e){return d*(b/=e)*b*b+c},stripEaseInSine:function(a,b,c,d,e){return-d*Math.cos(b/e*(Math.PI/2))+d+c},stripEaseOutSine:function(a,b,c,d,e){return d*Math.sin(b/e*(Math.PI/2))+c}});var Support=function(){function a(a){return c(a,"prefix")}function b(a,b){for(var c in a)if(void 0!==d.style[a[c]])return"prefix"==b?a[c]:!0;return!1}function c(a,c){var d=a.charAt(0).toUpperCase()+a.substr(1),f=(a+" "+e.join(d+" ")+d).split(" ");return b(f,c)}var d=document.createElement("div"),e="Webkit Moz O ms Khtml".split(" ");return{css:{animation:c("animation"),transform:c("transform"),prefixed:a},svg:!!document.createElementNS&&!!document.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect,touch:function(){try{return!!("ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch)}catch(a){return!1}}()}}();Support.mobileTouch=Support.touch&&(Browser.MobileSafari||Browser.Android||Browser.IEMobile||Browser.ChromeMobile||!/^(Win|Mac|Linux)/.test(navigator.platform));var Bounds={viewport:function(){var a={width:$(window).width()};if(Browser.MobileSafari||Browser.Android&&Browser.Gecko){var b=document.documentElement.clientWidth/window.innerWidth;a.height=window.innerHeight*b}else a.height=$(window).height();return a}},ImageReady=function(a){var b=function(){return this.initialize.apply(this,Array.prototype.slice.call(arguments))};a.extend(b.prototype,{initialize:function(){this.options=a.extend({test:function(){},success:function(){},timeout:function(){},callAt:!1,intervals:[[0,0],[1e3,10],[2e3,50],[4e3,100],[2e4,500]]},arguments[0]||{}),this._test=this.options.test,this._success=this.options.success,this._timeout=this.options.timeout,this._ipos=0,this._time=0,this._delay=this.options.intervals[this._ipos][1],this._callTimeouts=[],this.poll(),this._createCallsAt()},poll:function(){this._polling=setTimeout(a.proxy(function(){if(this._test())return void this.success();if(this._time+=this._delay,this._time>=this.options.intervals[this._ipos][0]){if(!this.options.intervals[this._ipos+1])return void("function"==a.type(this._timeout)&&this._timeout());this._ipos++,this._delay=this.options.intervals[this._ipos][1]}this.poll()},this),this._delay)},success:function(){this.abort(),this._success()},_createCallsAt:function(){this.options.callAt&&a.each(this.options.callAt,a.proxy(function(b,c){var d=c[0],e=c[1],f=setTimeout(a.proxy(function(){e()},this),d);this._callTimeouts.push(f)},this))},_stopCallTimeouts:function(){a.each(this._callTimeouts,function(a,b){clearTimeout(b)}),this._callTimeouts=[]},abort:function(){this._stopCallTimeouts(),this._polling&&(clearTimeout(this._polling),this._polling=null)}});var c=function(){return this.initialize.apply(this,Array.prototype.slice.call(arguments))};return a.extend(c.prototype,{supports:{naturalWidth:function(){return"naturalWidth"in new Image}()},initialize:function(b,c,d){return this.img=a(b)[0],this.successCallback=c,this.errorCallback=d,this.isLoaded=!1,this.options=a.extend({method:"onload",pollFallbackAfter:1e3},arguments[3]||{}),"onload"!=this.options.method&&this.supports.naturalWidth?void this.poll():void this.load()},poll:function(){this._poll=new b({test:a.proxy(function(){return this.img.naturalWidth>0},this),success:a.proxy(function(){this.success()},this),timeout:a.proxy(function(){this.error()},this),callAt:[[this.options.pollFallbackAfter,a.proxy(function(){this.load()},this)]]})},load:function(){this._loading=setTimeout(a.proxy(function(){var b=new Image;this._onloadImage=b,b.onload=a.proxy(function(){b.onload=function(){},this.supports.naturalWidth||(this.img.naturalWidth=b.width,this.img.naturalHeight=b.height,b.naturalWidth=b.width,b.naturalHeight=b.height),this.success()},this),b.onerror=a.proxy(this.error,this),b.src=this.img.src},this))},success:function(){this._calledSuccess||(this._calledSuccess=!0,this.abort(),this.waitForRender(a.proxy(function(){this.isLoaded=!0,this.successCallback(this)},this)))},error:function(){this._calledError||(this._calledError=!0,this.abort(),this._errorRenderTimeout=setTimeout(a.proxy(function(){this.errorCallback&&this.errorCallback(this)},this)))},abort:function(){this.stopLoading(),this.stopPolling(),this.stopWaitingForRender()},stopPolling:function(){this._poll&&(this._poll.abort(),this._poll=null)},stopLoading:function(){this._loading&&(clearTimeout(this._loading),this._loading=null),this._onloadImage&&(this._onloadImage.onload=function(){},this._onloadImage.onerror=function(){})},waitForRender:function(a){this._renderTimeout=setTimeout(a)},stopWaitingForRender:function(){this._renderTimeout&&(clearTimeout(this._renderTimeout),this._renderTimeout=null),this._errorRenderTimeout&&(clearTimeout(this._errorRenderTimeout),this._errorRenderTimeout=null)}}),c}(jQuery);Spinner.supported=Support.css.transform&&Support.css.animation,$.extend(Spinner.prototype,{initialize:function(a){this.element=$(a),this.element[0]&&(this.classPrefix="strp-",this.setOptions(arguments[1]||{}),this.element.addClass(this.classPrefix+"spinner"),this.element.append(this._rotate=$("
").addClass(this.classPrefix+"spinner-rotate")),this.build(),this.start())},setOptions:function(a){this.options=$.extend({show:200,hide:200},a||{})},build:function(){if(!this._build){this._rotate.html("");var a=(2*(this.options.length+this.options.radius),this.element.is(":visible"));a||this.element.show();var b,c;this._rotate.append(b=$("
").addClass(this.classPrefix+"spinner-frame").append(c=$("
").addClass(this.classPrefix+"spinner-line")));var d=parseInt($(c).css("z-index"));this.lines=d,c.css({"z-index":"inherit"}),b.remove(),a||this.element.hide();for(var e,f=0;d>f;f++){var b,c;this._rotate.append(b=$("
").addClass(this.classPrefix+"spinner-frame").append(c=$("
").addClass(this.classPrefix+"spinner-line"))),e=e||c.css("color"),c.css({background:e}),b.css({opacity:(1/d*(f+1)).toFixed(2)});var g={};g[Support.css.prefixed("transform")]="rotate("+360/d*(f+1)+"deg)",b.css(g)}this._build=!0}},start:function(){var a={};a[Support.css.prefixed("animation")]=this.classPrefix+"spinner-spin 1s infinite steps("+this.lines+")",this._rotate.css(a)},stop:function(){var a={};a[Support.css.prefixed("animation")]="none",this._rotate.css(a)},show:function(a){this.build(),this.start(),this.element.stop(!0).fadeTo(this.options.show,1,a)},hide:function(a){this.element.stop(!0).fadeOut(this.options.hide,$.proxy(function(){this.stop(),a&&a()},this))},refresh:function(){this._build=!1,this.build()}}),$.extend(Timers.prototype,{initialize:function(){this._timers={}},set:function(a,b,c){this._timers[a]=setTimeout(b,c)},get:function(a){return this._timers[a]},clear:function(a){a?this._timers[a]&&(clearTimeout(this._timers[a]),delete this._timers[a]):this.clearAll()},clearAll:function(){$.each(this._timers,function(a,b){clearTimeout(b)}),this._timers={}}});var Types={image:{extensions:"bmp gif jpeg jpg png webp",detect:function(a){return $.inArray(detectExtension(a),this.extensions.split(" "))>-1},data:function(a){return this.detect()?{extension:detectExtension(a)}:!1}},youtube:{detect:function(a){var b=/(youtube\.com|youtu\.be)\/watch\?(?=.*vi?=([a-zA-Z0-9-_]+))(?:\S+)?$/.exec(a);return b&&b[2]?b[2]:(b=/(youtube\.com|youtu\.be)\/(vi?\/|u\/|embed\/)?([a-zA-Z0-9-_]+)(?:\S+)?$/i.exec(a),b&&b[3]?b[3]:!1)},data:function(a){var b=this.detect(a);return b?{id:b}:!1}},vimeo:{detect:function(a){var b=/(vimeo\.com)\/([a-zA-Z0-9-_]+)(?:\S+)?$/i.exec(a);return b&&b[2]?b[2]:!1},data:function(a){var b=this.detect(a);return b?{id:b}:!1}}},VimeoReady=function(){var a=function(){return this.initialize.apply(this,_slice.call(arguments))};$.extend(a.prototype,{initialize:function(a,b){this.url=a,this.callback=b,this.load()},load:function(){var a=b.get(this.url);if(a)return this.callback(a.data);var c="http"+(window.location&&"https:"==window.location.protocol?"s":"")+":",d=getURIData(this.url).id;this._xhr=$.getJSON(c+"//vimeo.com/api/oembed.json?url="+c+"//vimeo.com/"+d+"&callback=?",$.proxy(function(a){var c={dimensions:{width:a.width,height:a.height}};b.set(this.url,c),this.callback&&this.callback(c)},this))},abort:function(){this._xhr&&(this._xhr.abort(),this._xhr=null)}});var b={cache:[],get:function(a){for(var b=null,c=0;c").addClass("strp-page").append(this.container=$("
").addClass("strp-container")).css({opacity:0}).hide());var a=this.view.options.position&&this._total>1;switch((this.view.caption||a)&&(this.element.append(this.info=$("
").addClass("strp-info").append(this.info_padder=$("
").addClass("strp-info-padder"))),a&&(this.element.addClass("strp-has-position"),this.info_padder.append($("
").addClass("strp-position").html(this._position+" / "+this._total))),this.view.caption&&this.info_padder.append(this.caption=$("
").addClass("strp-caption").html(this.view.caption))),this.view.type){case"image":this.container.append(this.content=$("").attr({src:this.view.url}));break;case"vimeo":case"youtube":this.container.append(this.content=$("
"))}this.element.addClass("strp"+(this.view.options.overlap?"":"-no")+"-overlap"),this._total<2&&this.element.addClass("strp-no-sides"),this.content.addClass("strp-content-element"),this._created=!0}},_getSurroundingPages:function(){var a;if(!(a=this.view.options.preload))return[];for(var b=[],c=Math.max(1,this._position-a[0]),d=Math.min(this._position+a[1],this._total),e=this._position,f=e;d>=f;f++){var g=Pages.pages[Pages.uid][f-1];g._position!=e&&b.push(g)}for(var f=e;f>=c;f--){var g=Pages.pages[Pages.uid][f-1];g._position!=e&&b.push(g)}return b},preloadSurroundingImages:function(){var a=this._getSurroundingPages();$.each(a,$.proxy(function(a,b){b.preload()},this))},preload:function(){this.preloading||this.preloaded||"image"!=this.view.type||!this.view.options.preload||this.loaded||(this.create(),this.preloading=!0,new ImageReady(this.content[0],$.proxy(function(a){this.loaded=!0,this.preloading=!1,this.preloaded=!0,this.dimensions={width:a.img.naturalWidth,height:a.img.naturalHeight}},this),null,{method:"naturalWidth"}))},load:function(a){if(this.create(),this.loaded)return void(a&&a());switch(this.abort(),this.loading=!0,this.view.options.spinner&&!c[this.view.url]&&Window.startLoading(),this.view.type){case"image":if(this.error)return void(a&&a());this.imageReady=new ImageReady(this.content[0],$.proxy(function(b){this._markAsLoaded(),this.dimensions={width:b.img.naturalWidth,height:b.img.naturalHeight},a&&a()},this),$.proxy(function(){this._markAsLoaded(),this.content.hide(),this.container.append(this.error=$("
").addClass("strp-error")),this.element.addClass("strp-has-error"),this.dimensions={width:this.error.outerWidth(),height:this.error.outerHeight()},a&&a()},this),{method:"naturalWidth"});break;case"vimeo":this.vimeoReady=new VimeoReady(this.view.url,$.proxy(function(b){this._markAsLoaded(),this.dimensions={width:b.dimensions.width,height:b.dimensions.height},a&&a()},this));break;case"youtube":this._markAsLoaded(),this.dimensions={width:this.view.options.width,height:this.view.options.height},a&&a()}},_markAsLoaded:function(){this.loading=!1,this.loaded=!0,c[this.view.url]=!0,Window.stopLoading()},isVideo:function(){return/^(youtube|vimeo)$/.test(this.view.type)},insertVideo:function(a){if(this.playerIframe||!this.isVideo())return void(a&&a());var b="http"+(window.location&&"https:"==window.location.protocol?"s":"")+":",c=$.extend({},this.view.options[this.view.type]||{}),d=$.param(c),e={vimeo:b+"//player.vimeo.com/video/{id}?{queryString}",youtube:b+"//www.youtube.com/embed/{id}?{queryString}"},f=e[this.view.type].replace("{id}",this.view._data.id).replace("{queryString}",d);this.content.append(this.playerIframe=$("