UNPKG

page-slider

Version:

A little library to add CSS transitions between pages in a mobile web app.

2 lines 18.9 kB
!function(t,i){"function"==typeof define&&define.amd?define(["jquery"],i):"object"==typeof exports?module.exports=i(require("jquery")):t.PageSlider=i(t.jQuery)}(this,function(t){"use strict";var i=function(t){this.$container=t,t.css({height:"100%",width:"100%",overflow:"hidden"})};return i.prototype={constructor:i,$container:null,transitionsEnabled:!0,transitionDurationMs:300,stateHistory:[],$currentPage:null,_setPagePosition:function(t,i){var n="0px";switch(i){case"left":n="-100%";break;case"right":n="100%"}var e="translate3d("+n+", 0px , 0px)";t.css({webkitTransform:e,transform:e})},_jQueryArrayToCollection:function(i){if(i instanceof t)return i;var n=t();return i.forEach(function(t){n=n.add(t)}),n},_enableTransitionOnPages:function(t){t=this._jQueryArrayToCollection(t),t.css({webkitTransitionDuration:this.transitionDurationMs+"ms",transitionDuration:this.transitionDurationMs+"ms"})},_disableTransitionOnPages:function(t){t=this._jQueryArrayToCollection(t),t.css({webkitTransform:"none",transform:"none",webkitTransitionDuration:"0s",transitionDuration:"0s"})},setTransitionDurationMs:function(t){this.transitionDurationMs=t},disableTransitions:function(){this.transitionsEnabled=!1},enableTransitions:function(){this.transitionsEnabled=!0},getSlideOriginForLocation:function(t){var i=this.stateHistory.length;return 0===i||t===this.stateHistory[i-1]?null:t===this.stateHistory[i-2]?"left":"right"},getNextSlideOrigin:function(){return this.getSlideOriginForLocation(location.hash)},slidePage:function(t,i){var n=location.hash,e=this.getNextSlideOrigin();switch(e){case"left":this.stateHistory.pop(),this.slidePageFrom(t,"left",i);break;case"right":this.stateHistory.push(n),this.slidePageFrom(t,"right",i);break;default:this.stateHistory.push(n),this.slidePageFrom(t,null,i)}},slidePageFrom:function(i,n,e){var s=this;e=e||{},e.beforeTransition=e.beforeTransition||t.noop,e.afterTransition=e.afterTransition||t.noop;var r=this.$currentPage,o=!r;if(i.addClass("page"),this.$container.append(i),e.beforeTransition(),o||!n||!this.transitionsEnabled)return this._disableTransitionOnPages(i),r&&r.remove(),this.$currentPage=i,void e.afterTransition(o);this._setPagePosition(i,n);var a=setTimeout(function(){u()},this.transitionDurationMs+100);this.$currentPage.one("transitionend webkitTransitionEnd",function(){u()}),this._enableTransitionOnPages([i,r]),this.$container[0].offsetWidth,this._setPagePosition(i,"center"),this._setPagePosition(r,"left"===n?"right":"left"),this.$currentPage=i;var u=function(){s._disableTransitionOnPages(s.$currentPage),s.$container.find("> .page:not(:last)").remove(),clearTimeout(a),e.afterTransition(!1)}}},i}); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInBhZ2Utc2xpZGVyLmpzIl0sIm5hbWVzIjpbInJvb3QiLCJmYWN0b3J5IiwiZGVmaW5lIiwiYW1kIiwiZXhwb3J0cyIsIm1vZHVsZSIsInJlcXVpcmUiLCJQYWdlU2xpZGVyIiwialF1ZXJ5IiwidGhpcyIsIiQiLCIkY29udGFpbmVyIiwiY3NzIiwiaGVpZ2h0Iiwid2lkdGgiLCJvdmVyZmxvdyIsInByb3RvdHlwZSIsImNvbnN0cnVjdG9yIiwidHJhbnNpdGlvbnNFbmFibGVkIiwidHJhbnNpdGlvbkR1cmF0aW9uTXMiLCJzdGF0ZUhpc3RvcnkiLCIkY3VycmVudFBhZ2UiLCJfc2V0UGFnZVBvc2l0aW9uIiwiJHBhZ2UiLCJuZXdMb2NhdGlvbiIsIm5ld1Bvc2l0aW9uIiwidHJhbnNmb3JtIiwid2Via2l0VHJhbnNmb3JtIiwiX2pRdWVyeUFycmF5VG9Db2xsZWN0aW9uIiwianF1ZXJ5QXJyYXkiLCIkY29sbGVjdGlvbiIsImZvckVhY2giLCIkZWwiLCJhZGQiLCJfZW5hYmxlVHJhbnNpdGlvbk9uUGFnZXMiLCIkcGFnZXMiLCJ3ZWJraXRUcmFuc2l0aW9uRHVyYXRpb24iLCJ0cmFuc2l0aW9uRHVyYXRpb24iLCJfZGlzYWJsZVRyYW5zaXRpb25PblBhZ2VzIiwic2V0VHJhbnNpdGlvbkR1cmF0aW9uTXMiLCJkdXJhdGlvbk1zIiwiZGlzYWJsZVRyYW5zaXRpb25zIiwiZW5hYmxlVHJhbnNpdGlvbnMiLCJnZXRTbGlkZU9yaWdpbkZvckxvY2F0aW9uIiwiaGFzaCIsImhpc3RvcnlMZW5ndGgiLCJsZW5ndGgiLCJnZXROZXh0U2xpZGVPcmlnaW4iLCJsb2NhdGlvbiIsInNsaWRlUGFnZSIsIiRuZXdQYWdlIiwib3B0aW9ucyIsInN0YXRlIiwic2xpZGVCZWhhdmlvdXIiLCJwb3AiLCJzbGlkZVBhZ2VGcm9tIiwicHVzaCIsIm9yaWdpbiIsInRoYXQiLCJiZWZvcmVUcmFuc2l0aW9uIiwibm9vcCIsImFmdGVyVHJhbnNpdGlvbiIsIiRvbGRQYWdlIiwiaXNGaXJzdFBhZ2VTbGlkZSIsImFkZENsYXNzIiwiYXBwZW5kIiwicmVtb3ZlIiwic2hpbVRyYW5zaXRpb25FbmQiLCJzZXRUaW1lb3V0Iiwib25UcmFuc2l0aW9uRW5kIiwib25lIiwib2Zmc2V0V2lkdGgiLCJmaW5kIiwiY2xlYXJUaW1lb3V0Il0sIm1hcHBpbmdzIjoiQ0FPRSxTQUFVQSxFQUFNQyxHQUNTLGtCQUFYQyxTQUF5QkEsT0FBT0MsSUFFdkNELFFBQVEsVUFBV0QsR0FDTyxnQkFBWkcsU0FFZEMsT0FBT0QsUUFBVUgsRUFBUUssUUFBUSxXQUdqQ04sRUFBS08sV0FBYU4sRUFBUUQsRUFBS1EsU0FFckNDLEtBQU0sU0FBVUMsR0FDZixZQUVBLElBQUlILEdBQWEsU0FBVUksR0FFdkJGLEtBQUtFLFdBQWFBLEVBR2xCQSxFQUFXQyxLQUNQQyxPQUFRLE9BQ1JDLE1BQU8sT0FDUEMsU0FBVSxXQThPbEIsT0ExT0FSLEdBQVdTLFdBRVBDLFlBQWFWLEVBRWJJLFdBQVksS0FDWk8sb0JBQW9CLEVBQ3BCQyxxQkFBc0IsSUFDdEJDLGdCQUNBQyxhQUFjLEtBT2RDLGlCQUFrQixTQUFVQyxFQUFPQyxHQUUvQixHQUFJQyxHQUFjLEtBRWxCLFFBQVFELEdBQ0osSUFBSyxPQUNEQyxFQUFjLE9BQ2QsTUFDSixLQUFLLFFBQ0RBLEVBQWMsT0FJdEIsR0FBSUMsR0FBWSxlQUFpQkQsRUFBYyxjQUUvQ0YsR0FBTVgsS0FDRmUsZ0JBQW1CRCxFQUNuQkEsVUFBYUEsS0FJckJFLHlCQUEwQixTQUFVQyxHQUVoQyxHQUFJQSxZQUF1Qm5CLEdBQ3ZCLE1BQU9tQixFQUdYLElBQUlDLEdBQWNwQixHQU1sQixPQUpBbUIsR0FBWUUsUUFBUSxTQUFVQyxHQUMxQkYsRUFBY0EsRUFBWUcsSUFBSUQsS0FHM0JGLEdBTVhJLHlCQUEwQixTQUFVQyxHQUVoQ0EsRUFBUzFCLEtBQUttQix5QkFBeUJPLEdBRXZDQSxFQUFPdkIsS0FDSHdCLHlCQUE0QjNCLEtBQUtVLHFCQUF1QixLQUN4RGtCLG1CQUFzQjVCLEtBQUtVLHFCQUF1QixRQU8xRG1CLDBCQUEyQixTQUFVSCxHQUVqQ0EsRUFBUzFCLEtBQUttQix5QkFBeUJPLEdBRXZDQSxFQUFPdkIsS0FDSGUsZ0JBQW1CLE9BQ25CRCxVQUFhLE9BQ2JVLHlCQUE0QixLQUM1QkMsbUJBQXNCLFFBTzlCRSx3QkFBeUIsU0FBVUMsR0FDL0IvQixLQUFLVSxxQkFBdUJxQixHQU1oQ0MsbUJBQW9CLFdBQ2hCaEMsS0FBS1Msb0JBQXFCLEdBTTlCd0Isa0JBQW1CLFdBQ2ZqQyxLQUFLUyxvQkFBcUIsR0FHOUJ5QiwwQkFBMkIsU0FBVUMsR0FDakMsR0FBSUMsR0FBZ0JwQyxLQUFLVyxhQUFhMEIsTUFHdEMsT0FBc0IsS0FBbEJELEdBQXVCRCxJQUFTbkMsS0FBS1csYUFBYXlCLEVBQWdCLEdBQzNELEtBRUZELElBQVNuQyxLQUFLVyxhQUFheUIsRUFBZ0IsR0FDekMsT0FHQSxTQU9mRSxtQkFBb0IsV0FDaEIsTUFBT3RDLE1BQUtrQywwQkFBMEJLLFNBQVNKLE9BUW5ESyxVQUFXLFNBQVVDLEVBQVVDLEdBRTNCLEdBQUlDLEdBQVFKLFNBQVNKLEtBRWpCUyxFQUFpQjVDLEtBQUtzQyxvQkFFMUIsUUFBUU0sR0FDSixJQUFLLE9BQ0Q1QyxLQUFLVyxhQUFha0MsTUFDbEI3QyxLQUFLOEMsY0FBY0wsRUFBVSxPQUFRQyxFQUNyQyxNQUNKLEtBQUssUUFDRDFDLEtBQUtXLGFBQWFvQyxLQUFLSixHQUN2QjNDLEtBQUs4QyxjQUFjTCxFQUFVLFFBQVNDLEVBQ3RDLE1BQ0osU0FDSTFDLEtBQUtXLGFBQWFvQyxLQUFLSixHQUN2QjNDLEtBQUs4QyxjQUFjTCxFQUFVLEtBQU1DLEtBa0IvQ0ksY0FBZSxTQUFVTCxFQUFVTyxFQUFRTixHQUV2QyxHQUFJTyxHQUFPakQsSUFFWDBDLEdBQVVBLE1BQ1ZBLEVBQVFRLGlCQUFtQlIsRUFBUVEsa0JBQW9CakQsRUFBRWtELEtBQ3pEVCxFQUFRVSxnQkFBa0JWLEVBQVFVLGlCQUFtQm5ELEVBQUVrRCxJQUV2RCxJQUFJRSxHQUFXckQsS0FBS1ksYUFDaEIwQyxHQUFvQkQsQ0FReEIsSUFOQVosRUFBU2MsU0FBUyxRQUNsQnZELEtBQUtFLFdBQVdzRCxPQUFPZixHQUV2QkMsRUFBUVEsbUJBR0pJLElBQXFCTixJQUFXaEQsS0FBS1MsbUJBY3JDLE1BWEFULE1BQUs2QiwwQkFBMEJZLEdBRzNCWSxHQUNBQSxFQUFTSSxTQUdiekQsS0FBS1ksYUFBZTZCLE1BR3BCQyxHQUFRVSxnQkFBZ0JFLEVBSzVCdEQsTUFBS2EsaUJBQWlCNEIsRUFBVU8sRUFHaEMsSUFBSVUsR0FBb0JDLFdBQVcsV0FDL0JDLEtBQ0Q1RCxLQUFLVSxxQkFBdUIsSUFFL0JWLE1BQUtZLGFBQWFpRCxJQUFJLG9DQUFxQyxXQUN2REQsTUFNSjVELEtBQUt5QiwwQkFBMEJnQixFQUFVWSxJQUt6Q3JELEtBQUtFLFdBQVcsR0FBRzRELFlBRW5COUQsS0FBS2EsaUJBQWlCNEIsRUFBVSxVQUNoQ3pDLEtBQUthLGlCQUFpQndDLEVBQXVCLFNBQVhMLEVBQW9CLFFBQVUsUUFDaEVoRCxLQUFLWSxhQUFlNkIsQ0FFcEIsSUFBSW1CLEdBQWtCLFdBQ2xCWCxFQUFLcEIsMEJBQTBCb0IsRUFBS3JDLGNBRXBDcUMsRUFBSy9DLFdBQVc2RCxLQUFLLHNCQUFzQk4sU0FFM0NPLGFBQWFOLEdBQ2JoQixFQUFRVSxpQkFBZ0IsTUFNN0J0RCIsImZpbGUiOiJwYWdlLXNsaWRlci5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSGVscGVyIHRvIHNsaWRlIGEgbmV3IHBhZ2UgaW4gdGhlIGFwcC5cbiAqIFRoaXMgaGVscGVyIG9ubHkgd29ya3Mgd2VsbCBpZiB0aGUgY29udGFpbmVyIGlzIGF0IDEwMCUgaGVpZ2h0L3dpZHRoIGFuZCBvdmVyZmxvdyBoaWRkZW4uXG4gKlxuICogQmFzZWQgb24gOiBodHRwczovL2dpdGh1Yi5jb20vY2NvZW5yYWV0cy9kaXJlY3RvcnktYmFja2JvbmUtdG9wY29hdC1yZXF1aXJlXG4gKlxuICovXG4gKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG4gICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAgICAgIC8vIEFNRC4gUmVnaXN0ZXIgYXMgYW4gYW5vbnltb3VzIG1vZHVsZS5cbiAgICAgICAgIGRlZmluZShbJ2pxdWVyeSddLCBmYWN0b3J5KTtcbiAgICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgIC8vIE5vZGUuXG4gICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnanF1ZXJ5JykpO1xuICAgICB9IGVsc2Uge1xuICAgICAgICAgLy8gQnJvd3NlciBnbG9iYWxzIChyb290IGlzIHdpbmRvdylcbiAgICAgICAgIHJvb3QuUGFnZVNsaWRlciA9IGZhY3Rvcnkocm9vdC5qUXVlcnkpO1xuICAgICB9XG4gfSh0aGlzLCBmdW5jdGlvbiAoJCkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciBQYWdlU2xpZGVyID0gZnVuY3Rpb24gKCRjb250YWluZXIpIHtcblxuICAgICAgICB0aGlzLiRjb250YWluZXIgPSAkY29udGFpbmVyO1xuXG4gICAgICAgIC8vIFRoZSBjb250YWluZXIgbmVlZCBzcGVjaWZpYyBzdHlsZVxuICAgICAgICAkY29udGFpbmVyLmNzcyh7XG4gICAgICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBQYWdlU2xpZGVyLnByb3RvdHlwZSA9IHtcblxuICAgICAgICBjb25zdHJ1Y3RvcjogUGFnZVNsaWRlcixcblxuICAgICAgICAkY29udGFpbmVyOiBudWxsLFxuICAgICAgICB0cmFuc2l0aW9uc0VuYWJsZWQ6IHRydWUsXG4gICAgICAgIHRyYW5zaXRpb25EdXJhdGlvbk1zOiAzMDAsXG4gICAgICAgIHN0YXRlSGlzdG9yeTogW10sXG4gICAgICAgICRjdXJyZW50UGFnZTogbnVsbCxcblxuICAgICAgICAvKipcbiAgICAgICAgICogU2V0IGEgcGFnZSBwb3NpdGlvbiB2aWEgdHJhbnNsYXRlM2RcbiAgICAgICAgICogQHBhcmFtIHtqcXVlcnl9ICRwYWdlIFBhZ2UgdGhhdCB3ZSB3YW50IHRvIFBvc2l0aW9uXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuZXdMb2NhdGlvbiBOZXcgcG9zaXRpb24gKCdsZWZ0JywgJ3JpZ2h0JyBvciBudWxsIChkZWZhdWx0KSlcbiAgICAgICAgICovXG4gICAgICAgIF9zZXRQYWdlUG9zaXRpb246IGZ1bmN0aW9uICgkcGFnZSwgbmV3TG9jYXRpb24pIHtcblxuICAgICAgICAgICAgdmFyIG5ld1Bvc2l0aW9uID0gJzBweCc7XG5cbiAgICAgICAgICAgIHN3aXRjaCAobmV3TG9jYXRpb24pIHtcbiAgICAgICAgICAgICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgICAgICAgICAgICAgbmV3UG9zaXRpb24gPSAnLTEwMCUnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgICAgICAgICAgICAgIG5ld1Bvc2l0aW9uID0gJzEwMCUnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHRyYW5zZm9ybSA9ICd0cmFuc2xhdGUzZCgnICsgbmV3UG9zaXRpb24gKyAnLCAwcHggLCAwcHgpJztcblxuICAgICAgICAgICAgJHBhZ2UuY3NzKHtcbiAgICAgICAgICAgICAgICAnd2Via2l0VHJhbnNmb3JtJzogdHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgICd0cmFuc2Zvcm0nOiB0cmFuc2Zvcm0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcblxuICAgICAgICBfalF1ZXJ5QXJyYXlUb0NvbGxlY3Rpb246IGZ1bmN0aW9uIChqcXVlcnlBcnJheSkge1xuXG4gICAgICAgICAgICBpZiAoanF1ZXJ5QXJyYXkgaW5zdGFuY2VvZiAkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGpxdWVyeUFycmF5O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgJGNvbGxlY3Rpb24gPSAkKCk7XG5cbiAgICAgICAgICAgIGpxdWVyeUFycmF5LmZvckVhY2goZnVuY3Rpb24gKCRlbCkge1xuICAgICAgICAgICAgICAgICRjb2xsZWN0aW9uID0gJGNvbGxlY3Rpb24uYWRkKCRlbCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuICRjb2xsZWN0aW9uO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBFbmFibGUgY3NzIHRyYW5zaXRpb24gb24gdGhlIGdpdmVuIHBhZ2UuXG4gICAgICAgICAqL1xuICAgICAgICBfZW5hYmxlVHJhbnNpdGlvbk9uUGFnZXM6IGZ1bmN0aW9uICgkcGFnZXMpIHtcblxuICAgICAgICAgICAgJHBhZ2VzID0gdGhpcy5falF1ZXJ5QXJyYXlUb0NvbGxlY3Rpb24oJHBhZ2VzKTtcblxuICAgICAgICAgICAgJHBhZ2VzLmNzcyh7XG4gICAgICAgICAgICAgICAgJ3dlYmtpdFRyYW5zaXRpb25EdXJhdGlvbic6IHRoaXMudHJhbnNpdGlvbkR1cmF0aW9uTXMgKyAnbXMnLFxuICAgICAgICAgICAgICAgICd0cmFuc2l0aW9uRHVyYXRpb24nOiB0aGlzLnRyYW5zaXRpb25EdXJhdGlvbk1zICsgJ21zJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEaXNhYmxlIGNzcyB0cmFuc2l0aW9uIG9uIHRoZSBnaXZlbiBwYWdlLlxuICAgICAgICAgKi9cbiAgICAgICAgX2Rpc2FibGVUcmFuc2l0aW9uT25QYWdlczogZnVuY3Rpb24gKCRwYWdlcykge1xuXG4gICAgICAgICAgICAkcGFnZXMgPSB0aGlzLl9qUXVlcnlBcnJheVRvQ29sbGVjdGlvbigkcGFnZXMpO1xuXG4gICAgICAgICAgICAkcGFnZXMuY3NzKHtcbiAgICAgICAgICAgICAgICAnd2Via2l0VHJhbnNmb3JtJzogJ25vbmUnLFxuICAgICAgICAgICAgICAgICd0cmFuc2Zvcm0nOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgJ3dlYmtpdFRyYW5zaXRpb25EdXJhdGlvbic6ICcwcycsXG4gICAgICAgICAgICAgICAgJ3RyYW5zaXRpb25EdXJhdGlvbic6ICcwcycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogU2V0IHRyYW5zaXRpb24gZHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzXG4gICAgICAgICAqL1xuICAgICAgICBzZXRUcmFuc2l0aW9uRHVyYXRpb25NczogZnVuY3Rpb24gKGR1cmF0aW9uTXMpIHtcbiAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvbkR1cmF0aW9uTXMgPSBkdXJhdGlvbk1zO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEaXNhYmxlIGNzcyB0cmFuc2l0aW9uIG9uIHBhZ2VcbiAgICAgICAgICovXG4gICAgICAgIGRpc2FibGVUcmFuc2l0aW9uczogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy50cmFuc2l0aW9uc0VuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogRW5hYmxlIGNzcyB0cmFuc2l0aW9uIG9uIHBhZ2VcbiAgICAgICAgICovXG4gICAgICAgIGVuYWJsZVRyYW5zaXRpb25zOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLnRyYW5zaXRpb25zRW5hYmxlZCA9IHRydWU7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZ2V0U2xpZGVPcmlnaW5Gb3JMb2NhdGlvbjogZnVuY3Rpb24gKGhhc2gpIHtcbiAgICAgICAgICAgIHZhciBoaXN0b3J5TGVuZ3RoID0gdGhpcy5zdGF0ZUhpc3RvcnkubGVuZ3RoO1xuXG4gICAgICAgICAgICAvLyBGaXJzdCBwYWdlIGFuZCBwYWdlIHJlbG9hZCBkb24ndCBnZXQgc2xpZGluZyBhbmltYXRpb25cbiAgICAgICAgICAgIGlmIChoaXN0b3J5TGVuZ3RoID09PSAwIHx8IGhhc2ggPT09IHRoaXMuc3RhdGVIaXN0b3J5W2hpc3RvcnlMZW5ndGggLSAxXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaGFzaCA9PT0gdGhpcy5zdGF0ZUhpc3RvcnlbaGlzdG9yeUxlbmd0aCAtIDJdKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdsZWZ0JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAncmlnaHQnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm4gdGhlIHR5cGUgb2Ygc2xpZGUgKG51bGwsICdsZWZ0JyBvciAncmlnaHQnKVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0TmV4dFNsaWRlT3JpZ2luOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTbGlkZU9yaWdpbkZvckxvY2F0aW9uKGxvY2F0aW9uLmhhc2gpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBVc2UgdGhpcyBmdW5jdGlvbiBpZiB5b3Ugd2FudCBQYWdlU2xpZGVyIHRvIGF1dG9tYXRpY2FsbHkgZGV0ZXJtaW5lXG4gICAgICAgICAqIHRoZSBzbGlkaW5nIGRpcmVjdGlvbiBiYXNlZCBvbiB0aGUgc3RhdGUgaGlzdG9yeS5cbiAgICAgICAgICogYWZ0ZXJUcmFuc2l0aW9uIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSB0cmFuc2l0aW9uIGVuZHNcbiAgICAgICAgICovXG4gICAgICAgIHNsaWRlUGFnZTogZnVuY3Rpb24gKCRuZXdQYWdlLCBvcHRpb25zKSB7XG5cbiAgICAgICAgICAgIHZhciBzdGF0ZSA9IGxvY2F0aW9uLmhhc2g7XG5cbiAgICAgICAgICAgIHZhciBzbGlkZUJlaGF2aW91ciA9IHRoaXMuZ2V0TmV4dFNsaWRlT3JpZ2luKCk7XG5cbiAgICAgICAgICAgIHN3aXRjaCAoc2xpZGVCZWhhdmlvdXIpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZUhpc3RvcnkucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2xpZGVQYWdlRnJvbSgkbmV3UGFnZSwgJ2xlZnQnLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlSGlzdG9yeS5wdXNoKHN0YXRlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zbGlkZVBhZ2VGcm9tKCRuZXdQYWdlLCAncmlnaHQnLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZUhpc3RvcnkucHVzaChzdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2xpZGVQYWdlRnJvbSgkbmV3UGFnZSwgbnVsbCwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBVc2UgdGhpcyBmdW5jdGlvbiBkaXJlY3RseSBpZiB5b3Ugd2FudCB0byBjb250cm9sIHRoZSBzbGlkaW5nIGRpcmVjdGlvbiBvdXRzaWRlIFBhZ2VTbGlkZXJcbiAgICAgICAgICogQHBhcmFtICB7JH0gJG5ld1BhZ2UgVGhlIG5ldyBwYWdlIHRvIHNsaWRlIGluXG4gICAgICAgICAqIEBwYXJhbSAge1N0cmluZ30gb3JpZ2luIE9yaWdpbiBvZiB0aGUgc2xpZGUgKCdsZWZ0JywgJ3JpZ2h0Jywgb3IgbnVsbClcbiAgICAgICAgICogQHBhcmFtICB7ZnVuY3Rpb259IG9wdGlvbnNcbiAgICAgICAgICogIGJlZm9yZVRyYW5zaXRpb246IENhbGxlZCBiZWZvcmUgdGhlIHRyYW5zaXRpb24sIGFmdGVyIHRoZSBwYWdlIGlzIGFkZGVkXG4gICAgICAgICAqICAgICAgICAgICAgICAgICAgICB0byB0aGUgRE9NLlxuICAgICAgICAgKiAgIGFmdGVyVHJhbnNpdGlvbjogQ2FsbGVkIHdoZW4gdGhlIHNsaWRlIGVuZFxuICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgb3IgaW1tZWRpYXRlbHkgaWYgdGhlcmUgaXMgbm8gdHJhbnNpdGlvbi5cbiAgICAgICAgICogICAgICAgICAgICAgICAgICAgIEEgYm9vbGVhbiBpcyBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIDogdHJ1ZSBpZiB3ZSBqdXN0IHNsaWRlXG4gICAgICAgICAqICAgICAgICAgICAgICAgICAgICBpbiB0aGUgdmVyeSBmaXJzdCBwYWdlLlxuICAgICAgICAgKlxuICAgICAgICAgKi9cbiAgICAgICAgc2xpZGVQYWdlRnJvbTogZnVuY3Rpb24gKCRuZXdQYWdlLCBvcmlnaW4sIG9wdGlvbnMpIHtcblxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuXG4gICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgICAgIG9wdGlvbnMuYmVmb3JlVHJhbnNpdGlvbiA9IG9wdGlvbnMuYmVmb3JlVHJhbnNpdGlvbiB8fCAkLm5vb3A7XG4gICAgICAgICAgICBvcHRpb25zLmFmdGVyVHJhbnNpdGlvbiA9IG9wdGlvbnMuYWZ0ZXJUcmFuc2l0aW9uIHx8ICQubm9vcDtcblxuICAgICAgICAgICAgdmFyICRvbGRQYWdlID0gdGhpcy4kY3VycmVudFBhZ2U7XG4gICAgICAgICAgICB2YXIgaXNGaXJzdFBhZ2VTbGlkZSA9ICEkb2xkUGFnZTtcblxuICAgICAgICAgICAgJG5ld1BhZ2UuYWRkQ2xhc3MoJ3BhZ2UnKTtcbiAgICAgICAgICAgIHRoaXMuJGNvbnRhaW5lci5hcHBlbmQoJG5ld1BhZ2UpO1xuXG4gICAgICAgICAgICBvcHRpb25zLmJlZm9yZVRyYW5zaXRpb24oKTtcblxuICAgICAgICAgICAgLy8gRmlyc3QgbG9hZGVkIHBhZ2UgKG5vIG9sZCBwYWdlKSBvciBubyB0cmFuc2l0aW9uXG4gICAgICAgICAgICBpZiAoaXNGaXJzdFBhZ2VTbGlkZSB8fCAhb3JpZ2luIHx8ICF0aGlzLnRyYW5zaXRpb25zRW5hYmxlZCkge1xuXG4gICAgICAgICAgICAgICAgLy8gRGlzYWJsZSB0cmFuc2l0aW9uXG4gICAgICAgICAgICAgICAgdGhpcy5fZGlzYWJsZVRyYW5zaXRpb25PblBhZ2VzKCRuZXdQYWdlKTtcblxuICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBvbGQgcGFnZSBpZiBpdCBleGlzdHNcbiAgICAgICAgICAgICAgICBpZiAoJG9sZFBhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgJG9sZFBhZ2UucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy4kY3VycmVudFBhZ2UgPSAkbmV3UGFnZTtcblxuICAgICAgICAgICAgICAgIC8vIFdlIGNhbGwgdGhlIHRyYW5zaXRpb24gZW5kIGNhbGxiYWNrIGFueXdheVxuICAgICAgICAgICAgICAgIG9wdGlvbnMuYWZ0ZXJUcmFuc2l0aW9uKGlzRmlyc3RQYWdlU2xpZGUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gUG9zaXRpb24gdGhlIHBhZ2UgYXQgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIG9mIHRoZSBhbmltYXRpb25cbiAgICAgICAgICAgIHRoaXMuX3NldFBhZ2VQb3NpdGlvbigkbmV3UGFnZSwgb3JpZ2luKTtcblxuICAgICAgICAgICAgLy8gU2hpbSB0cmFuc2l0aW9uZW5kIGlmIGl0J3Mgbm90IGZpcmVkXG4gICAgICAgICAgICB2YXIgc2hpbVRyYW5zaXRpb25FbmQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIG9uVHJhbnNpdGlvbkVuZCgpO1xuICAgICAgICAgICAgfSwgdGhpcy50cmFuc2l0aW9uRHVyYXRpb25NcyArIDEwMCk7XG5cbiAgICAgICAgICAgIHRoaXMuJGN1cnJlbnRQYWdlLm9uZSgndHJhbnNpdGlvbmVuZCB3ZWJraXRUcmFuc2l0aW9uRW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIG9uVHJhbnNpdGlvbkVuZCgpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIFBvc2l0aW9uIHRoZSBuZXcgcGFnZSBhbmQgdGhlIGN1cnJlbnQgcGFnZSBhdCB0aGUgZW5kaW5nIHBvc2l0aW9uIG9mIHRoZWlyIGFuaW1hdGlvblxuICAgICAgICAgICAgLy8gQW5kIGVuYWJsZSB0aGVpciBhbmltYXRpb24gdmlhIHRyYW5zaXRpb25cblxuICAgICAgICAgICAgdGhpcy5fZW5hYmxlVHJhbnNpdGlvbk9uUGFnZXMoWyRuZXdQYWdlLCAkb2xkUGFnZV0pO1xuXG4gICAgICAgICAgICAvLyBGb3JjZSByZWZsb3cuIE1vcmUgaW5mb3JtYXRpb24gaGVyZTpcbiAgICAgICAgICAgIC8vIGh0dHA6Ly93d3cucGhwaWVkLmNvbS9yZW5kZXJpbmctcmVwYWludC1yZWZsb3dyZWxheW91dC1yZXN0eWxlL1xuICAgICAgICAgICAgLypqc2hpbnQgLVcwMzAqL1xuICAgICAgICAgICAgdGhpcy4kY29udGFpbmVyWzBdLm9mZnNldFdpZHRoO1xuXG4gICAgICAgICAgICB0aGlzLl9zZXRQYWdlUG9zaXRpb24oJG5ld1BhZ2UsICdjZW50ZXInKTtcbiAgICAgICAgICAgIHRoaXMuX3NldFBhZ2VQb3NpdGlvbigkb2xkUGFnZSwgIChvcmlnaW4gPT09ICdsZWZ0JyA/ICdyaWdodCcgOiAnbGVmdCcpKTtcbiAgICAgICAgICAgIHRoaXMuJGN1cnJlbnRQYWdlID0gJG5ld1BhZ2U7XG5cbiAgICAgICAgICAgIHZhciBvblRyYW5zaXRpb25FbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdGhhdC5fZGlzYWJsZVRyYW5zaXRpb25PblBhZ2VzKHRoYXQuJGN1cnJlbnRQYWdlKTtcblxuICAgICAgICAgICAgICAgIHRoYXQuJGNvbnRhaW5lci5maW5kKCc+IC5wYWdlOm5vdCg6bGFzdCknKS5yZW1vdmUoKTtcblxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChzaGltVHJhbnNpdGlvbkVuZCk7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5hZnRlclRyYW5zaXRpb24oZmFsc2UpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICB9LFxuICAgIH07XG5cbiAgICByZXR1cm4gUGFnZVNsaWRlcjtcblxufSkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9