mechanize-store 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/README.rdoc +4 -2
- data/app/assets/javascripts/mechanize_store/sb-admin/jquery-file-upload/canvas-to-blob.min.js +1 -0
- data/app/assets/javascripts/mechanize_store/sb-admin/jquery-file-upload/jquery.blueimp-gallery.min.js +1 -0
- data/app/assets/javascripts/mechanize_store/sb-admin/jquery-file-upload/jquery.fileupload-angular.js +429 -0
- data/app/assets/javascripts/mechanize_store/sb-admin/jquery-file-upload/jquery.fileupload-audio.js +106 -0
- data/app/assets/javascripts/mechanize_store/sb-admin/jquery-file-upload/jquery.fileupload-image.js +309 -0
- data/app/assets/javascripts/mechanize_store/sb-admin/jquery-file-upload/jquery.fileupload-jquery-ui.js +152 -0
- data/app/assets/javascripts/mechanize_store/sb-admin/jquery-file-upload/jquery.fileupload-process.js +172 -0
- data/app/assets/javascripts/mechanize_store/sb-admin/jquery-file-upload/jquery.fileupload-ui.js +699 -0
- data/app/assets/javascripts/mechanize_store/sb-admin/jquery-file-upload/jquery.fileupload-validate.js +119 -0
- data/app/assets/javascripts/mechanize_store/sb-admin/jquery-file-upload/jquery.fileupload-video.js +106 -0
- data/app/assets/javascripts/mechanize_store/sb-admin/jquery-file-upload/jquery.fileupload.js +1426 -0
- data/app/assets/javascripts/mechanize_store/sb-admin/jquery-file-upload/jquery.iframe-transport.js +214 -0
- data/app/assets/javascripts/mechanize_store/sb-admin/jquery-file-upload/jquery.ui.widget.js +530 -0
- data/app/assets/javascripts/mechanize_store/sb-admin/jquery-file-upload/load-image.min.js +1 -0
- data/app/assets/javascripts/mechanize_store/sb-admin/jquery-file-upload/main.js +14 -0
- data/app/assets/javascripts/mechanize_store/sb-admin/jquery-file-upload/tmpl.min.js +1 -0
- data/app/assets/stylesheets/mechanize_store/application.css +0 -2
- data/app/assets/stylesheets/mechanize_store/sb-admin/sb-admin.css +2 -2
- data/app/controllers/mechanize_store/product_photos_controller.rb +49 -0
- data/app/models/mechanize_store/product.rb +4 -3
- data/app/models/mechanize_store/product_photo.rb +11 -0
- data/app/views/layouts/{store → mechanize_store}/application.html.erb +38 -2
- data/app/views/mechanize_store/flags/_form.html.erb +1 -1
- data/app/views/mechanize_store/flags/index.html.erb +2 -2
- data/app/views/mechanize_store/order_statuses/_form.html.erb +6 -6
- data/app/views/mechanize_store/order_statuses/index.html.erb +3 -3
- data/app/views/mechanize_store/orders/index.html.erb +5 -5
- data/app/views/mechanize_store/payment_statuses/_form.html.erb +1 -1
- data/app/views/mechanize_store/payment_statuses/index.html.erb +3 -3
- data/app/views/mechanize_store/payment_types/_form.html.erb +6 -6
- data/app/views/mechanize_store/payment_types/index.html.erb +2 -2
- data/app/views/mechanize_store/product_categories/index.html.erb +4 -6
- data/app/views/mechanize_store/product_photos/create.json.jbuilder +9 -0
- data/app/views/mechanize_store/product_photos/index.json.jbuilder +9 -0
- data/app/views/mechanize_store/products/_form.html.erb +1 -1
- data/app/views/mechanize_store/products/index.html.erb +1 -1
- data/app/views/mechanize_store/products/show.html.erb +186 -32
- data/config/locales/store.pt-BR.yml +54 -11
- data/config/routes.rb +3 -2
- data/db/migrate/20140402153139_create_mechanize_store_orders.rb +1 -1
- data/lib/mechanize_store/version.rb +1 -1
- metadata +108 -7
- data/app/models/mechanize_store/store.rb +0 -5
- data/db/migrate/20140402141340_create_mechanize_store_stores.rb +0 -12
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NDY5NzRmZDFlYWY2ZTc1NDk4NmQ2MmIwNGQyY2M3MjVmZDIxZmRjNw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NWRlNjI0MTY3MzAwYzM2MjRiOWY3NWY4NDc2YzMyOTQwMTEwNWE4NA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NTcwNmJhYjg4OWNkYTAxOWM0NWI0NjZlNmQzYjUwNmVmNmYyNTk4YWM1OWU1
|
10
|
+
NTg2NjE0ZTRhNDhmOGZiOWY4MDYzZWRmYjA3MGM5N2IxMDYwZWFlODZjNGE4
|
11
|
+
Yzk4YTIxODUxZDc0MzNkODdmMzU3YTlhYmQ3NmFkMjZjNTFkMTc=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZTYyMTJmNmU0NWM4YWRiYWZkNzkzZGE5OGY3ZWVmMDkyMzQ4NTRiNTU5ZmQz
|
14
|
+
M2UwOWE0MWJhMGIyZmRjYWYyZmVlYzk2NGQ2MzJiNjdlYWViYjA0YzZmMWE4
|
15
|
+
NzYzNDMxYjY4OGRhYjQzM2RhMzJmOGI4YmQ1YWM4YTJkNTY3MWE=
|
data/README.rdoc
CHANGED
@@ -42,7 +42,9 @@ These project was created to encapsulate a commom models of an MechanizeStore ap
|
|
42
42
|
- payment_status_id
|
43
43
|
|
44
44
|
* Order
|
45
|
-
-
|
45
|
+
- order_status_id
|
46
|
+
- store
|
47
|
+
- delivery_date
|
46
48
|
|
47
49
|
* Store
|
48
50
|
- name
|
@@ -51,7 +53,7 @@ These project was created to encapsulate a commom models of an MechanizeStore ap
|
|
51
53
|
|
52
54
|
Add mechanize_store as a gem in your product:
|
53
55
|
|
54
|
-
gem '
|
56
|
+
gem 'mechanize-store'
|
55
57
|
|
56
58
|
Next execute this command in your terminal:
|
57
59
|
|
@@ -0,0 +1 @@
|
|
1
|
+
!function(a){"use strict";var b=a.HTMLCanvasElement&&a.HTMLCanvasElement.prototype,c=a.Blob&&function(){try{return Boolean(new Blob)}catch(a){return!1}}(),d=c&&a.Uint8Array&&function(){try{return 100===new Blob([new Uint8Array(100)]).size}catch(a){return!1}}(),e=a.BlobBuilder||a.WebKitBlobBuilder||a.MozBlobBuilder||a.MSBlobBuilder,f=(c||e)&&a.atob&&a.ArrayBuffer&&a.Uint8Array&&function(a){var b,f,g,h,i,j;for(b=a.split(",")[0].indexOf("base64")>=0?atob(a.split(",")[1]):decodeURIComponent(a.split(",")[1]),f=new ArrayBuffer(b.length),g=new Uint8Array(f),h=0;h<b.length;h+=1)g[h]=b.charCodeAt(h);return i=a.split(",")[0].split(":")[1].split(";")[0],c?new Blob([d?g:f],{type:i}):(j=new e,j.append(f),j.getBlob(i))};a.HTMLCanvasElement&&!b.toBlob&&(b.mozGetAsFile?b.toBlob=function(a,c,d){d&&b.toDataURL&&f?a(f(this.toDataURL(c,d))):a(this.mozGetAsFile("blob",c))}:b.toDataURL&&f&&(b.toBlob=function(a,b,c){a(f(this.toDataURL(b,c)))})),"function"==typeof define&&define.amd?define(function(){return f}):a.dataURLtoBlob=f}(this);
|
@@ -0,0 +1 @@
|
|
1
|
+
!function(a){"use strict";"function"==typeof define&&define.amd?define(["./blueimp-helper"],a):(window.blueimp=window.blueimp||{},window.blueimp.Gallery=a(window.blueimp.helper||window.jQuery))}(function(a){"use strict";function b(a,c){return void 0===document.body.style.maxHeight?null:this&&this.options===b.prototype.options?a&&a.length?(this.list=a,this.num=a.length,this.initOptions(c),void this.initialize()):void this.console.log("blueimp Gallery: No or empty list provided as first argument.",a):new b(a,c)}return a.extend(b.prototype,{options:{container:"#blueimp-gallery",slidesContainer:"div",titleElement:"h3",displayClass:"blueimp-gallery-display",controlsClass:"blueimp-gallery-controls",singleClass:"blueimp-gallery-single",leftEdgeClass:"blueimp-gallery-left",rightEdgeClass:"blueimp-gallery-right",playingClass:"blueimp-gallery-playing",slideClass:"slide",slideLoadingClass:"slide-loading",slideErrorClass:"slide-error",slideContentClass:"slide-content",toggleClass:"toggle",prevClass:"prev",nextClass:"next",closeClass:"close",playPauseClass:"play-pause",typeProperty:"type",titleProperty:"title",urlProperty:"href",displayTransition:!0,clearSlides:!0,stretchImages:!1,toggleControlsOnReturn:!0,toggleSlideshowOnSpace:!0,enableKeyboardNavigation:!0,closeOnEscape:!0,closeOnSlideClick:!0,closeOnSwipeUpOrDown:!0,emulateTouchEvents:!0,stopTouchEventsPropagation:!1,hidePageScrollbars:!0,disableScroll:!0,carousel:!1,continuous:!0,unloadElements:!0,startSlideshow:!1,slideshowInterval:5e3,index:0,preloadRange:2,transitionSpeed:400,slideshowTransitionSpeed:void 0,event:void 0,onopen:void 0,onopened:void 0,onslide:void 0,onslideend:void 0,onslidecomplete:void 0,onclose:void 0,onclosed:void 0},carouselOptions:{hidePageScrollbars:!1,toggleControlsOnReturn:!1,toggleSlideshowOnSpace:!1,enableKeyboardNavigation:!1,closeOnEscape:!1,closeOnSlideClick:!1,closeOnSwipeUpOrDown:!1,disableScroll:!1,startSlideshow:!0},console:window.console&&"function"==typeof window.console.log?window.console:{log:function(){}},support:function(b){var c={touch:void 0!==window.ontouchstart||window.DocumentTouch&&document instanceof DocumentTouch},d={webkitTransition:{end:"webkitTransitionEnd",prefix:"-webkit-"},MozTransition:{end:"transitionend",prefix:"-moz-"},OTransition:{end:"otransitionend",prefix:"-o-"},transition:{end:"transitionend",prefix:""}},e=function(){var a,d,e=c.transition;document.body.appendChild(b),e&&(a=e.name.slice(0,-9)+"ransform",void 0!==b.style[a]&&(b.style[a]="translateZ(0)",d=window.getComputedStyle(b).getPropertyValue(e.prefix+"transform"),c.transform={prefix:e.prefix,name:a,translate:!0,translateZ:!!d&&"none"!==d})),void 0!==b.style.backgroundSize&&(c.backgroundSize={},b.style.backgroundSize="contain",c.backgroundSize.contain="contain"===window.getComputedStyle(b).getPropertyValue("background-size"),b.style.backgroundSize="cover",c.backgroundSize.cover="cover"===window.getComputedStyle(b).getPropertyValue("background-size")),document.body.removeChild(b)};return function(a,c){var d;for(d in c)if(c.hasOwnProperty(d)&&void 0!==b.style[d]){a.transition=c[d],a.transition.name=d;break}}(c,d),document.body?e():a(document).on("DOMContentLoaded",e),c}(document.createElement("div")),requestAnimationFrame:window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame,initialize:function(){return this.initStartIndex(),this.initWidget()===!1?!1:(this.initEventListeners(),this.onslide(this.index),this.ontransitionend(),void(this.options.startSlideshow&&this.play()))},slide:function(a,b){window.clearTimeout(this.timeout);var c,d,e,f=this.index;if(f!==a&&1!==this.num){if(b||(b=this.options.transitionSpeed),this.support.transition){for(this.options.continuous||(a=this.circle(a)),c=Math.abs(f-a)/(f-a),this.options.continuous&&(d=c,c=-this.positions[this.circle(a)]/this.slideWidth,c!==d&&(a=-c*this.num+a)),e=Math.abs(f-a)-1;e;)e-=1,this.move(this.circle((a>f?a:f)-e-1),this.slideWidth*c,0);a=this.circle(a),this.move(f,this.slideWidth*c,b),this.move(a,0,b),this.options.continuous&&this.move(this.circle(a-c),-(this.slideWidth*c),0)}else a=this.circle(a),this.animate(f*-this.slideWidth,a*-this.slideWidth,b);this.onslide(a)}},getIndex:function(){return this.index},getNumber:function(){return this.num},prev:function(){(this.options.continuous||this.index)&&this.slide(this.index-1)},next:function(){(this.options.continuous||this.index<this.num-1)&&this.slide(this.index+1)},play:function(a){var b=this;window.clearTimeout(this.timeout),this.interval=a||this.options.slideshowInterval,this.elements[this.index]>1&&(this.timeout=this.setTimeout(!this.requestAnimationFrame&&this.slide||function(a,c){b.animationFrameId=b.requestAnimationFrame.call(window,function(){b.slide(a,c)})},[this.index+1,this.options.slideshowTransitionSpeed],this.interval)),this.container.addClass(this.options.playingClass)},pause:function(){window.clearTimeout(this.timeout),this.interval=null,this.container.removeClass(this.options.playingClass)},add:function(a){var b;for(a.concat||(a=Array.prototype.slice.call(a)),this.list.concat||(this.list=Array.prototype.slice.call(this.list)),this.list=this.list.concat(a),this.num=this.list.length,this.num>2&&null===this.options.continuous&&(this.options.continuous=!0,this.container.removeClass(this.options.leftEdgeClass)),this.container.removeClass(this.options.rightEdgeClass).removeClass(this.options.singleClass),b=this.num-a.length;b<this.num;b+=1)this.addSlide(b),this.positionSlide(b);this.positions.length=this.num,this.initSlides(!0)},resetSlides:function(){this.slidesContainer.empty(),this.slides=[]},handleClose:function(){var a=this.options;this.destroyEventListeners(),this.pause(),this.container[0].style.display="none",this.container.removeClass(a.displayClass).removeClass(a.singleClass).removeClass(a.leftEdgeClass).removeClass(a.rightEdgeClass),a.hidePageScrollbars&&(document.body.style.overflow=this.bodyOverflowStyle),this.options.clearSlides&&this.resetSlides(),this.options.onclosed&&this.options.onclosed.call(this)},close:function(){var a=this,b=function(c){c.target===a.container[0]&&(a.container.off(a.support.transition.end,b),a.handleClose())};this.options.onclose&&this.options.onclose.call(this),this.support.transition&&this.options.displayTransition?(this.container.on(this.support.transition.end,b),this.container.removeClass(this.options.displayClass)):this.handleClose()},circle:function(a){return(this.num+a%this.num)%this.num},move:function(a,b,c){this.translateX(a,b,c),this.positions[a]=b},translate:function(a,b,c,d){var e=this.slides[a].style,f=this.support.transition,g=this.support.transform;e[f.name+"Duration"]=d+"ms",e[g.name]="translate("+b+"px, "+c+"px)"+(g.translateZ?" translateZ(0)":"")},translateX:function(a,b,c){this.translate(a,b,0,c)},translateY:function(a,b,c){this.translate(a,0,b,c)},animate:function(a,b,c){if(!c)return void(this.slidesContainer[0].style.left=b+"px");var d=this,e=(new Date).getTime(),f=window.setInterval(function(){var g=(new Date).getTime()-e;return g>c?(d.slidesContainer[0].style.left=b+"px",d.ontransitionend(),void window.clearInterval(f)):void(d.slidesContainer[0].style.left=(b-a)*(Math.floor(g/c*100)/100)+a+"px")},4)},preventDefault:function(a){a.preventDefault?a.preventDefault():a.returnValue=!1},stopPropagation:function(a){a.stopPropagation?a.stopPropagation():a.cancelBubble=!0},onresize:function(){this.initSlides(!0)},onmousedown:function(a){a.which&&1===a.which&&"VIDEO"!==a.target.nodeName&&(a.preventDefault(),(a.originalEvent||a).touches=[{pageX:a.pageX,pageY:a.pageY}],this.ontouchstart(a))},onmousemove:function(a){this.touchStart&&((a.originalEvent||a).touches=[{pageX:a.pageX,pageY:a.pageY}],this.ontouchmove(a))},onmouseup:function(a){this.touchStart&&(this.ontouchend(a),delete this.touchStart)},onmouseout:function(b){if(this.touchStart){var c=b.target,d=b.relatedTarget;(!d||d!==c&&!a.contains(c,d))&&this.onmouseup(b)}},ontouchstart:function(a){this.options.stopTouchEventsPropagation&&this.stopPropagation(a);var b=(a.originalEvent||a).touches[0];this.touchStart={x:b.pageX,y:b.pageY,time:Date.now()},this.isScrolling=void 0,this.touchDelta={}},ontouchmove:function(a){this.options.stopTouchEventsPropagation&&this.stopPropagation(a);var b,c,d=(a.originalEvent||a).touches[0],e=(a.originalEvent||a).scale,f=this.index;if(!(d.length>1||e&&1!==e))if(this.options.disableScroll&&a.preventDefault(),this.touchDelta={x:d.pageX-this.touchStart.x,y:d.pageY-this.touchStart.y},b=this.touchDelta.x,void 0===this.isScrolling&&(this.isScrolling=this.isScrolling||Math.abs(b)<Math.abs(this.touchDelta.y)),this.isScrolling)this.options.closeOnSwipeUpOrDown&&this.translateY(f,this.touchDelta.y+this.positions[f],0);else for(a.preventDefault(),window.clearTimeout(this.timeout),this.options.continuous?c=[this.circle(f+1),f,this.circle(f-1)]:(this.touchDelta.x=b/=!f&&b>0||f===this.num-1&&0>b?Math.abs(b)/this.slideWidth+1:1,c=[f],f&&c.push(f-1),f<this.num-1&&c.unshift(f+1));c.length;)f=c.pop(),this.translateX(f,b+this.positions[f],0)},ontouchend:function(a){this.options.stopTouchEventsPropagation&&this.stopPropagation(a);var b,c,d,e,f,g=this.index,h=this.options.transitionSpeed,i=this.slideWidth,j=Number(Date.now()-this.touchStart.time)<250,k=j&&Math.abs(this.touchDelta.x)>20||Math.abs(this.touchDelta.x)>i/2,l=!g&&this.touchDelta.x>0||g===this.num-1&&this.touchDelta.x<0,m=!k&&this.options.closeOnSwipeUpOrDown&&(j&&Math.abs(this.touchDelta.y)>20||Math.abs(this.touchDelta.y)>this.slideHeight/2);this.options.continuous&&(l=!1),b=this.touchDelta.x<0?-1:1,this.isScrolling?m?this.close():this.translateY(g,0,h):k&&!l?(c=g+b,d=g-b,e=i*b,f=-i*b,this.options.continuous?(this.move(this.circle(c),e,0),this.move(this.circle(g-2*b),f,0)):c>=0&&c<this.num&&this.move(c,e,0),this.move(g,this.positions[g]+e,h),this.move(this.circle(d),this.positions[this.circle(d)]+e,h),g=this.circle(d),this.onslide(g)):this.options.continuous?(this.move(this.circle(g-1),-i,h),this.move(g,0,h),this.move(this.circle(g+1),i,h)):(g&&this.move(g-1,-i,h),this.move(g,0,h),g<this.num-1&&this.move(g+1,i,h))},ontouchcancel:function(a){this.touchStart&&(this.ontouchend(a),delete this.touchStart)},ontransitionend:function(a){var b=this.slides[this.index];a&&b!==a.target||(this.interval&&this.play(),this.setTimeout(this.options.onslideend,[this.index,b]))},oncomplete:function(b){var c,d=b.target||b.srcElement,e=d&&d.parentNode;d&&e&&(c=this.getNodeIndex(e),a(e).removeClass(this.options.slideLoadingClass),"error"===b.type?(a(e).addClass(this.options.slideErrorClass),this.elements[c]=3):this.elements[c]=2,d.clientHeight>this.container[0].clientHeight&&(d.style.maxHeight=this.container[0].clientHeight),this.interval&&this.slides[this.index]===e&&this.play(),this.setTimeout(this.options.onslidecomplete,[c,e]))},onload:function(a){this.oncomplete(a)},onerror:function(a){this.oncomplete(a)},onkeydown:function(a){switch(a.which||a.keyCode){case 13:this.options.toggleControlsOnReturn&&(this.preventDefault(a),this.toggleControls());break;case 27:this.options.closeOnEscape&&this.close();break;case 32:this.options.toggleSlideshowOnSpace&&(this.preventDefault(a),this.toggleSlideshow());break;case 37:this.options.enableKeyboardNavigation&&(this.preventDefault(a),this.prev());break;case 39:this.options.enableKeyboardNavigation&&(this.preventDefault(a),this.next())}},handleClick:function(b){var c=this.options,d=b.target||b.srcElement,e=d.parentNode,f=function(b){return a(d).hasClass(b)||a(e).hasClass(b)};f(c.toggleClass)?(this.preventDefault(b),this.toggleControls()):f(c.prevClass)?(this.preventDefault(b),this.prev()):f(c.nextClass)?(this.preventDefault(b),this.next()):f(c.closeClass)?(this.preventDefault(b),this.close()):f(c.playPauseClass)?(this.preventDefault(b),this.toggleSlideshow()):e===this.slidesContainer[0]?(this.preventDefault(b),c.closeOnSlideClick?this.close():this.toggleControls()):e.parentNode&&e.parentNode===this.slidesContainer[0]&&(this.preventDefault(b),this.toggleControls())},onclick:function(a){return this.options.emulateTouchEvents&&this.touchDelta&&(Math.abs(this.touchDelta.x)>20||Math.abs(this.touchDelta.y)>20)?void delete this.touchDelta:this.handleClick(a)},updateEdgeClasses:function(a){a?this.container.removeClass(this.options.leftEdgeClass):this.container.addClass(this.options.leftEdgeClass),a===this.num-1?this.container.addClass(this.options.rightEdgeClass):this.container.removeClass(this.options.rightEdgeClass)},handleSlide:function(a){this.options.continuous||this.updateEdgeClasses(a),this.loadElements(a),this.options.unloadElements&&this.unloadElements(a),this.setTitle(a)},onslide:function(a){this.index=a,this.handleSlide(a),this.setTimeout(this.options.onslide,[a,this.slides[a]])},setTitle:function(a){var b=this.slides[a].firstChild.title,c=this.titleElement;c.length&&(this.titleElement.empty(),b&&c[0].appendChild(document.createTextNode(b)))},setTimeout:function(a,b,c){var d=this;return a&&window.setTimeout(function(){a.apply(d,b||[])},c||0)},imageFactory:function(b,c){var d,e,f,g=this,h=this.imagePrototype.cloneNode(!1),i=b,j=this.options.stretchImages,k=function(b){if(!d){if(b={type:b.type,target:e},!e.parentNode)return g.setTimeout(k,[b]);d=!0,a(h).off("load error",k),j&&"load"===b.type&&(e.style.background='url("'+i+'") center no-repeat',e.style.backgroundSize=j),c(b)}};return"string"!=typeof i&&(i=this.getItemProperty(b,this.options.urlProperty),f=this.getItemProperty(b,this.options.titleProperty)),j===!0&&(j="contain"),j=this.support.backgroundSize&&this.support.backgroundSize[j]&&j,j?e=this.elementPrototype.cloneNode(!1):(e=h,h.draggable=!1),f&&(e.title=f),a(h).on("load error",k),h.src=i,e},createElement:function(b,c){var d=b&&this.getItemProperty(b,this.options.typeProperty),e=d&&this[d.split("/")[0]+"Factory"]||this.imageFactory,f=b&&e.call(this,b,c);return f||(f=this.elementPrototype.cloneNode(!1),this.setTimeout(c,[{type:"error",target:f}])),a(f).addClass(this.options.slideContentClass),f},loadElement:function(b){this.elements[b]||(this.slides[b].firstChild?this.elements[b]=a(this.slides[b]).hasClass(this.options.slideErrorClass)?3:2:(this.elements[b]=1,a(this.slides[b]).addClass(this.options.slideLoadingClass),this.slides[b].appendChild(this.createElement(this.list[b],this.proxyListener))))},loadElements:function(a){var b,c=Math.min(this.num,2*this.options.preloadRange+1),d=a;for(b=0;c>b;b+=1)d+=b*(b%2===0?-1:1),d=this.circle(d),this.loadElement(d)},unloadElements:function(a){var b,c,d;for(b in this.elements)this.elements.hasOwnProperty(b)&&(d=Math.abs(a-b),d>this.options.preloadRange&&d+this.options.preloadRange<this.num&&(c=this.slides[b],c.removeChild(c.firstChild),delete this.elements[b]))},addSlide:function(a){var b=this.slidePrototype.cloneNode(!1);b.setAttribute("data-index",a),this.slidesContainer[0].appendChild(b),this.slides.push(b)},positionSlide:function(a){var b=this.slides[a];b.style.width=this.slideWidth+"px",this.support.transition&&(b.style.left=a*-this.slideWidth+"px",this.move(a,this.index>a?-this.slideWidth:this.index<a?this.slideWidth:0,0))},initSlides:function(b){var c,d;for(b||(this.positions=[],this.positions.length=this.num,this.elements={},this.imagePrototype=document.createElement("img"),this.elementPrototype=document.createElement("div"),this.slidePrototype=document.createElement("div"),a(this.slidePrototype).addClass(this.options.slideClass),this.slides=this.slidesContainer[0].children,c=this.options.clearSlides||this.slides.length!==this.num),this.slideWidth=this.container[0].offsetWidth,this.slideHeight=this.container[0].offsetHeight,this.slidesContainer[0].style.width=this.num*this.slideWidth+"px",c&&this.resetSlides(),d=0;d<this.num;d+=1)c&&this.addSlide(d),this.positionSlide(d);this.options.continuous&&this.support.transition&&(this.move(this.circle(this.index-1),-this.slideWidth,0),this.move(this.circle(this.index+1),this.slideWidth,0)),this.support.transition||(this.slidesContainer[0].style.left=this.index*-this.slideWidth+"px")},toggleControls:function(){var a=this.options.controlsClass;this.container.hasClass(a)?this.container.removeClass(a):this.container.addClass(a)},toggleSlideshow:function(){this.interval?this.pause():this.play()},getNodeIndex:function(a){return parseInt(a.getAttribute("data-index"),10)},getNestedProperty:function(a,b){return b.replace(/\[(?:'([^']+)'|"([^"]+)"|(\d+))\]|(?:(?:^|\.)([^\.\[]+))/g,function(b,c,d,e,f){var g=f||c||d||e&&parseInt(e,10);b&&a&&(a=a[g])}),a},getDataProperty:function(b,c){if(b.getAttribute){var d=b.getAttribute("data-"+c.replace(/([A-Z])/g,"-$1").toLowerCase());if("string"==typeof d){if(/^(true|false|null|-?\d+(\.\d+)?|\{[\s\S]*\}|\[[\s\S]*\])$/.test(d))try{return a.parseJSON(d)}catch(e){}return d}}},getItemProperty:function(a,b){var c=a[b];return void 0===c&&(c=this.getDataProperty(a,b),void 0===c&&(c=this.getNestedProperty(a,b))),c},initStartIndex:function(){var a,b=this.options.index,c=this.options.urlProperty;if(b&&"number"!=typeof b)for(a=0;a<this.num;a+=1)if(this.list[a]===b||this.getItemProperty(this.list[a],c)===this.getItemProperty(b,c)){b=a;break}this.index=this.circle(parseInt(b,10)||0)},initEventListeners:function(){var b=this,c=this.slidesContainer,d=function(a){var c=b.support.transition&&b.support.transition.end===a.type?"transitionend":a.type;b["on"+c](a)};a(window).on("resize",d),a(document.body).on("keydown",d),this.container.on("click",d),this.support.touch?c.on("touchstart touchmove touchend touchcancel",d):this.options.emulateTouchEvents&&this.support.transition&&c.on("mousedown mousemove mouseup mouseout",d),this.support.transition&&c.on(this.support.transition.end,d),this.proxyListener=d},destroyEventListeners:function(){var b=this.slidesContainer,c=this.proxyListener;a(window).off("resize",c),a(document.body).off("keydown",c),this.container.off("click",c),this.support.touch?b.off("touchstart touchmove touchend touchcancel",c):this.options.emulateTouchEvents&&this.support.transition&&b.off("mousedown mousemove mouseup mouseout",c),this.support.transition&&b.off(this.support.transition.end,c)},handleOpen:function(){this.options.onopened&&this.options.onopened.call(this)},initWidget:function(){var b=this,c=function(a){a.target===b.container[0]&&(b.container.off(b.support.transition.end,c),b.handleOpen())};return this.container=a(this.options.container),this.container.length?(this.slidesContainer=this.container.find(this.options.slidesContainer).first(),this.slidesContainer.length?(this.titleElement=this.container.find(this.options.titleElement).first(),1===this.num&&this.container.addClass(this.options.singleClass),this.options.onopen&&this.options.onopen.call(this),this.support.transition&&this.options.displayTransition?this.container.on(this.support.transition.end,c):this.handleOpen(),this.options.hidePageScrollbars&&(this.bodyOverflowStyle=document.body.style.overflow,document.body.style.overflow="hidden"),this.container[0].style.display="block",this.initSlides(),void this.container.addClass(this.options.displayClass)):(this.console.log("blueimp Gallery: Slides container not found.",this.options.slidesContainer),!1)):(this.console.log("blueimp Gallery: Widget container not found.",this.options.container),!1)},initOptions:function(b){this.options=a.extend({},this.options),(b&&b.carousel||this.options.carousel&&(!b||b.carousel!==!1))&&a.extend(this.options,this.carouselOptions),a.extend(this.options,b),this.num<3&&(this.options.continuous=this.options.continuous?null:!1),this.support.transition||(this.options.emulateTouchEvents=!1),this.options.event&&this.preventDefault(this.options.event)}}),b}),function(a){"use strict";"function"==typeof define&&define.amd?define(["./blueimp-helper","./blueimp-gallery"],a):a(window.blueimp.helper||window.jQuery,window.blueimp.Gallery)}(function(a,b){"use strict";a.extend(b.prototype.options,{fullScreen:!1});var c=b.prototype.initialize,d=b.prototype.close;return a.extend(b.prototype,{getFullScreenElement:function(){return document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement},requestFullScreen:function(a){a.requestFullscreen?a.requestFullscreen():a.webkitRequestFullscreen?a.webkitRequestFullscreen():a.mozRequestFullScreen?a.mozRequestFullScreen():a.msRequestFullscreen&&a.msRequestFullscreen()},exitFullScreen:function(){document.exitFullscreen?document.exitFullscreen():document.webkitCancelFullScreen?document.webkitCancelFullScreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.msExitFullscreen&&document.msExitFullscreen()},initialize:function(){c.call(this),this.options.fullScreen&&!this.getFullScreenElement()&&this.requestFullScreen(this.container[0])},close:function(){this.getFullScreenElement()===this.container[0]&&this.exitFullScreen(),d.call(this)}}),b}),function(a){"use strict";"function"==typeof define&&define.amd?define(["./blueimp-helper","./blueimp-gallery"],a):a(window.blueimp.helper||window.jQuery,window.blueimp.Gallery)}(function(a,b){"use strict";a.extend(b.prototype.options,{indicatorContainer:"ol",activeIndicatorClass:"active",thumbnailProperty:"thumbnail",thumbnailIndicators:!0});var c=b.prototype.initSlides,d=b.prototype.addSlide,e=b.prototype.resetSlides,f=b.prototype.handleClick,g=b.prototype.handleSlide,h=b.prototype.handleClose;return a.extend(b.prototype,{createIndicator:function(b){var c,d,e=this.indicatorPrototype.cloneNode(!1),f=this.getItemProperty(b,this.options.titleProperty),g=this.options.thumbnailProperty;return this.options.thumbnailIndicators&&(d=b.getElementsByTagName&&a(b).find("img")[0],d?c=d.src:g&&(c=this.getItemProperty(b,g)),c&&(e.style.backgroundImage='url("'+c+'")')),f&&(e.title=f),e},addIndicator:function(a){if(this.indicatorContainer.length){var b=this.createIndicator(this.list[a]);b.setAttribute("data-index",a),this.indicatorContainer[0].appendChild(b),this.indicators.push(b)}},setActiveIndicator:function(b){this.indicators&&(this.activeIndicator&&this.activeIndicator.removeClass(this.options.activeIndicatorClass),this.activeIndicator=a(this.indicators[b]),this.activeIndicator.addClass(this.options.activeIndicatorClass))},initSlides:function(a){a||(this.indicatorContainer=this.container.find(this.options.indicatorContainer),this.indicatorContainer.length&&(this.indicatorPrototype=document.createElement("li"),this.indicators=this.indicatorContainer[0].children)),c.call(this,a)},addSlide:function(a){d.call(this,a),this.addIndicator(a)},resetSlides:function(){e.call(this),this.indicatorContainer.empty(),this.indicators=[]},handleClick:function(a){var b=a.target||a.srcElement,c=b.parentNode;if(c===this.indicatorContainer[0])this.preventDefault(a),this.slide(this.getNodeIndex(b));else{if(c.parentNode!==this.indicatorContainer[0])return f.call(this,a);this.preventDefault(a),this.slide(this.getNodeIndex(c))}},handleSlide:function(a){g.call(this,a),this.setActiveIndicator(a)},handleClose:function(){this.activeIndicator&&this.activeIndicator.removeClass(this.options.activeIndicatorClass),h.call(this)}}),b}),function(a){"use strict";"function"==typeof define&&define.amd?define(["./blueimp-helper","./blueimp-gallery"],a):a(window.blueimp.helper||window.jQuery,window.blueimp.Gallery)}(function(a,b){"use strict";a.extend(b.prototype.options,{videoContentClass:"video-content",videoLoadingClass:"video-loading",videoPlayingClass:"video-playing",videoPosterProperty:"poster",videoSourcesProperty:"sources"});var c=b.prototype.handleSlide;return a.extend(b.prototype,{handleSlide:function(a){c.call(this,a),this.playingVideo&&this.playingVideo.pause()},videoFactory:function(b,c,d){var e,f,g,h,i,j=this,k=this.options,l=this.elementPrototype.cloneNode(!1),m=a(l),n=[{type:"error",target:l}],o=d||document.createElement("video"),p=this.getItemProperty(b,k.urlProperty),q=this.getItemProperty(b,k.typeProperty),r=this.getItemProperty(b,k.titleProperty),s=this.getItemProperty(b,k.videoPosterProperty),t=this.getItemProperty(b,k.videoSourcesProperty);if(m.addClass(k.videoContentClass),r&&(l.title=r),o.canPlayType)if(p&&q&&o.canPlayType(q))o.src=p;else for(;t&&t.length;)if(f=t.shift(),p=this.getItemProperty(f,k.urlProperty),q=this.getItemProperty(f,k.typeProperty),p&&q&&o.canPlayType(q)){o.src=p;break}return s&&(o.poster=s,e=this.imagePrototype.cloneNode(!1),a(e).addClass(k.toggleClass),e.src=s,e.draggable=!1,l.appendChild(e)),g=document.createElement("a"),g.setAttribute("target","_blank"),d||g.setAttribute("download",r),g.href=p,o.src&&(o.controls=!0,(d||a(o)).on("error",function(){j.setTimeout(c,n)}).on("pause",function(){h=!1,m.removeClass(j.options.videoLoadingClass).removeClass(j.options.videoPlayingClass),i&&j.container.addClass(j.options.controlsClass),delete j.playingVideo,j.interval&&j.play()}).on("playing",function(){h=!1,m.removeClass(j.options.videoLoadingClass).addClass(j.options.videoPlayingClass),j.container.hasClass(j.options.controlsClass)?(i=!0,j.container.removeClass(j.options.controlsClass)):i=!1}).on("play",function(){window.clearTimeout(j.timeout),h=!0,m.addClass(j.options.videoLoadingClass),j.playingVideo=o}),a(g).on("click",function(a){j.preventDefault(a),h?o.pause():o.play()}),l.appendChild(d&&d.element||o)),l.appendChild(g),this.setTimeout(c,[{type:"load",target:l}]),l}}),b}),function(a){"use strict";"function"==typeof define&&define.amd?define(["./blueimp-helper","./blueimp-gallery-video"],a):a(window.blueimp.helper||window.jQuery,window.blueimp.Gallery)}(function(a,b){"use strict";if(!window.postMessage)return b;a.extend(b.prototype.options,{vimeoVideoIdProperty:"vimeo",vimeoPlayerUrl:"//player.vimeo.com/video/VIDEO_ID?api=1&player_id=PLAYER_ID",vimeoPlayerIdPrefix:"vimeo-player-",vimeoClickToPlay:!0});var c=b.prototype.textFactory||b.prototype.imageFactory,d=function(a,b,c,d){this.url=a,this.videoId=b,this.playerId=c,this.clickToPlay=d,this.element=document.createElement("div"),this.listeners={}},e=0;return a.extend(d.prototype,{canPlayType:function(){return!0},on:function(a,b){return this.listeners[a]=b,this},loadAPI:function(){for(var b,c,d=this,e="//"+("https"===location.protocol?"secure-":"")+"a.vimeocdn.com/js/froogaloop2.min.js",f=document.getElementsByTagName("script"),g=f.length,h=function(){!c&&d.playOnReady&&d.play(),c=!0};g;)if(g-=1,f[g].src===e){b=f[g];break}b||(b=document.createElement("script"),b.src=e),a(b).on("load",h),f[0].parentNode.insertBefore(b,f[0]),/loaded|complete/.test(b.readyState)&&h()},onReady:function(){var a=this;this.ready=!0,this.player.addEvent("play",function(){a.hasPlayed=!0,a.onPlaying()}),this.player.addEvent("pause",function(){a.onPause()}),this.player.addEvent("finish",function(){a.onPause()}),this.playOnReady&&this.play()},onPlaying:function(){this.playStatus<2&&(this.listeners.playing(),this.playStatus=2)},onPause:function(){this.listeners.pause(),delete this.playStatus},insertIframe:function(){var a=document.createElement("iframe");a.src=this.url.replace("VIDEO_ID",this.videoId).replace("PLAYER_ID",this.playerId),a.id=this.playerId,this.element.parentNode.replaceChild(a,this.element),this.element=a},play:function(){var a=this;this.playStatus||(this.listeners.play(),this.playStatus=1),this.ready?!this.hasPlayed&&(this.clickToPlay||window.navigator&&/iP(hone|od|ad)/.test(window.navigator.platform))?this.onPlaying():this.player.api("play"):(this.playOnReady=!0,window.$f?this.player||(this.insertIframe(),this.player=$f(this.element),this.player.addEvent("ready",function(){a.onReady()})):this.loadAPI())},pause:function(){this.ready?this.player.api("pause"):this.playStatus&&(delete this.playOnReady,this.listeners.pause(),delete this.playStatus)}}),a.extend(b.prototype,{VimeoPlayer:d,textFactory:function(a,b){var f=this.getItemProperty(a,this.options.vimeoVideoIdProperty);return f?(e+=1,this.videoFactory(a,b,new d(this.options.vimeoPlayerUrl,f,this.options.vimeoPlayerIdPrefix+e,this.options.vimeoClickToPlay))):c.call(this,a,b)}}),b}),function(a){"use strict";"function"==typeof define&&define.amd?define(["./blueimp-helper","./blueimp-gallery-video"],a):a(window.blueimp.helper||window.jQuery,window.blueimp.Gallery)}(function(a,b){"use strict";if(!window.postMessage)return b;a.extend(b.prototype.options,{youTubeVideoIdProperty:"youtube",youTubePlayerVars:{wmode:"transparent"},youTubeClickToPlay:!0});var c=b.prototype.textFactory||b.prototype.imageFactory,d=function(a,b,c){this.videoId=a,this.playerVars=b,this.clickToPlay=c,this.element=document.createElement("div"),this.listeners={}};return a.extend(d.prototype,{canPlayType:function(){return!0},on:function(a,b){return this.listeners[a]=b,this},loadAPI:function(){var a,b=this,c=window.onYouTubeIframeAPIReady,d="//www.youtube.com/iframe_api",e=document.getElementsByTagName("script"),f=e.length;for(window.onYouTubeIframeAPIReady=function(){c&&c.apply(this),b.playOnReady&&b.play()};f;)if(f-=1,e[f].src===d)return;a=document.createElement("script"),a.src=d,e[0].parentNode.insertBefore(a,e[0])},onReady:function(){this.ready=!0,this.playOnReady&&this.play()},onPlaying:function(){this.playStatus<2&&(this.listeners.playing(),this.playStatus=2)},onPause:function(){b.prototype.setTimeout.call(this,this.checkSeek,null,2e3)},checkSeek:function(){(this.stateChange===YT.PlayerState.PAUSED||this.stateChange===YT.PlayerState.ENDED)&&(this.listeners.pause(),delete this.playStatus)},onStateChange:function(a){switch(a.data){case YT.PlayerState.PLAYING:this.hasPlayed=!0,this.onPlaying();break;case YT.PlayerState.PAUSED:case YT.PlayerState.ENDED:this.onPause()}this.stateChange=a.data},onError:function(a){this.listeners.error(a)},play:function(){var a=this;this.playStatus||(this.listeners.play(),this.playStatus=1),this.ready?!this.hasPlayed&&(this.clickToPlay||window.navigator&&/iP(hone|od|ad)/.test(window.navigator.platform))?this.onPlaying():this.player.playVideo():(this.playOnReady=!0,window.YT&&YT.Player?this.player||(this.player=new YT.Player(this.element,{videoId:this.videoId,playerVars:this.playerVars,events:{onReady:function(){a.onReady()},onStateChange:function(b){a.onStateChange(b)},onError:function(b){a.onError(b)}}})):this.loadAPI())},pause:function(){this.ready?this.player.pauseVideo():this.playStatus&&(delete this.playOnReady,this.listeners.pause(),delete this.playStatus)}}),a.extend(b.prototype,{YouTubePlayer:d,textFactory:function(a,b){var e=this.getItemProperty(a,this.options.youTubeVideoIdProperty);return e?this.videoFactory(a,b,new d(e,this.options.youTubePlayerVars,this.options.youTubeClickToPlay)):c.call(this,a,b)}}),b}),function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery","./blueimp-gallery"],a):a(window.jQuery,window.blueimp.Gallery)}(function(a,b){"use strict";a(document).on("click","[data-gallery]",function(c){var d=a(this).data("gallery"),e=a(d),f=e.length&&e||a(b.prototype.options.container),g={onopen:function(){f.data("gallery",this).trigger("open")},onopened:function(){f.trigger("opened")},onslide:function(){f.trigger("slide",arguments)},onslideend:function(){f.trigger("slideend",arguments)},onslidecomplete:function(){f.trigger("slidecomplete",arguments)},onclose:function(){f.trigger("close")},onclosed:function(){f.trigger("closed").removeData("gallery")}},h=a.extend(f.data(),{container:f[0],index:this,event:c},g),i=a('[data-gallery="'+d+'"]');return h.filter&&(i=i.filter(h.filter)),new b(i,h)})});
|
data/app/assets/javascripts/mechanize_store/sb-admin/jquery-file-upload/jquery.fileupload-angular.js
ADDED
@@ -0,0 +1,429 @@
|
|
1
|
+
/*
|
2
|
+
* jQuery File Upload AngularJS Plugin 2.2.0
|
3
|
+
* https://github.com/blueimp/jQuery-File-Upload
|
4
|
+
*
|
5
|
+
* Copyright 2013, Sebastian Tschan
|
6
|
+
* https://blueimp.net
|
7
|
+
*
|
8
|
+
* Licensed under the MIT license:
|
9
|
+
* http://www.opensource.org/licenses/MIT
|
10
|
+
*/
|
11
|
+
|
12
|
+
/* jshint nomen:false */
|
13
|
+
/* global define, angular */
|
14
|
+
|
15
|
+
(function (factory) {
|
16
|
+
'use strict';
|
17
|
+
if (typeof define === 'function' && define.amd) {
|
18
|
+
// Register as an anonymous AMD module:
|
19
|
+
define([
|
20
|
+
'jquery',
|
21
|
+
'angular',
|
22
|
+
'./jquery.fileupload-image',
|
23
|
+
'./jquery.fileupload-audio',
|
24
|
+
'./jquery.fileupload-video',
|
25
|
+
'./jquery.fileupload-validate'
|
26
|
+
], factory);
|
27
|
+
} else {
|
28
|
+
factory();
|
29
|
+
}
|
30
|
+
}(function () {
|
31
|
+
'use strict';
|
32
|
+
|
33
|
+
angular.module('blueimp.fileupload', [])
|
34
|
+
|
35
|
+
// The fileUpload service provides configuration options
|
36
|
+
// for the fileUpload directive and default handlers for
|
37
|
+
// File Upload events:
|
38
|
+
.provider('fileUpload', function () {
|
39
|
+
var scopeEvalAsync = function (expression) {
|
40
|
+
var scope = angular.element(this)
|
41
|
+
.fileupload('option', 'scope');
|
42
|
+
// Schedule a new $digest cycle if not already inside of one
|
43
|
+
// and evaluate the given expression:
|
44
|
+
scope.$evalAsync(expression);
|
45
|
+
},
|
46
|
+
addFileMethods = function (scope, data) {
|
47
|
+
var files = data.files,
|
48
|
+
file = files[0];
|
49
|
+
angular.forEach(files, function (file, index) {
|
50
|
+
file._index = index;
|
51
|
+
file.$state = function () {
|
52
|
+
return data.state();
|
53
|
+
};
|
54
|
+
file.$processing = function () {
|
55
|
+
return data.processing();
|
56
|
+
};
|
57
|
+
file.$progress = function () {
|
58
|
+
return data.progress();
|
59
|
+
};
|
60
|
+
file.$response = function () {
|
61
|
+
return data.response();
|
62
|
+
};
|
63
|
+
});
|
64
|
+
file.$submit = function () {
|
65
|
+
if (!file.error) {
|
66
|
+
return data.submit();
|
67
|
+
}
|
68
|
+
};
|
69
|
+
file.$cancel = function () {
|
70
|
+
return data.abort();
|
71
|
+
};
|
72
|
+
},
|
73
|
+
$config;
|
74
|
+
$config = this.defaults = {
|
75
|
+
handleResponse: function (e, data) {
|
76
|
+
var files = data.result && data.result.files;
|
77
|
+
if (files) {
|
78
|
+
data.scope.replace(data.files, files);
|
79
|
+
} else if (data.errorThrown ||
|
80
|
+
data.textStatus === 'error') {
|
81
|
+
data.files[0].error = data.errorThrown ||
|
82
|
+
data.textStatus;
|
83
|
+
}
|
84
|
+
},
|
85
|
+
add: function (e, data) {
|
86
|
+
if (e.isDefaultPrevented()) {
|
87
|
+
return false;
|
88
|
+
}
|
89
|
+
var scope = data.scope,
|
90
|
+
filesCopy = [];
|
91
|
+
angular.forEach(data.files, function (file) {
|
92
|
+
filesCopy.push(file);
|
93
|
+
});
|
94
|
+
scope.$apply(function () {
|
95
|
+
addFileMethods(scope, data);
|
96
|
+
var method = scope.option('prependFiles') ?
|
97
|
+
'unshift' : 'push';
|
98
|
+
Array.prototype[method].apply(scope.queue, data.files);
|
99
|
+
});
|
100
|
+
data.process(function () {
|
101
|
+
return scope.process(data);
|
102
|
+
}).always(function () {
|
103
|
+
scope.$apply(function () {
|
104
|
+
addFileMethods(scope, data);
|
105
|
+
scope.replace(filesCopy, data.files);
|
106
|
+
});
|
107
|
+
}).then(function () {
|
108
|
+
if ((scope.option('autoUpload') ||
|
109
|
+
data.autoUpload) &&
|
110
|
+
data.autoUpload !== false) {
|
111
|
+
data.submit();
|
112
|
+
}
|
113
|
+
});
|
114
|
+
},
|
115
|
+
progress: function (e, data) {
|
116
|
+
if (e.isDefaultPrevented()) {
|
117
|
+
return false;
|
118
|
+
}
|
119
|
+
data.scope.$apply();
|
120
|
+
},
|
121
|
+
done: function (e, data) {
|
122
|
+
if (e.isDefaultPrevented()) {
|
123
|
+
return false;
|
124
|
+
}
|
125
|
+
var that = this;
|
126
|
+
data.scope.$apply(function () {
|
127
|
+
data.handleResponse.call(that, e, data);
|
128
|
+
});
|
129
|
+
},
|
130
|
+
fail: function (e, data) {
|
131
|
+
if (e.isDefaultPrevented()) {
|
132
|
+
return false;
|
133
|
+
}
|
134
|
+
var that = this,
|
135
|
+
scope = data.scope;
|
136
|
+
if (data.errorThrown === 'abort') {
|
137
|
+
scope.clear(data.files);
|
138
|
+
return;
|
139
|
+
}
|
140
|
+
scope.$apply(function () {
|
141
|
+
data.handleResponse.call(that, e, data);
|
142
|
+
});
|
143
|
+
},
|
144
|
+
stop: scopeEvalAsync,
|
145
|
+
processstart: scopeEvalAsync,
|
146
|
+
processstop: scopeEvalAsync,
|
147
|
+
getNumberOfFiles: function () {
|
148
|
+
var scope = this.scope;
|
149
|
+
return scope.queue.length - scope.processing();
|
150
|
+
},
|
151
|
+
dataType: 'json',
|
152
|
+
autoUpload: false
|
153
|
+
};
|
154
|
+
this.$get = [
|
155
|
+
function () {
|
156
|
+
return {
|
157
|
+
defaults: $config
|
158
|
+
};
|
159
|
+
}
|
160
|
+
];
|
161
|
+
})
|
162
|
+
|
163
|
+
// Format byte numbers to readable presentations:
|
164
|
+
.provider('formatFileSizeFilter', function () {
|
165
|
+
var $config = {
|
166
|
+
// Byte units following the IEC format
|
167
|
+
// http://en.wikipedia.org/wiki/Kilobyte
|
168
|
+
units: [
|
169
|
+
{size: 1000000000, suffix: ' GB'},
|
170
|
+
{size: 1000000, suffix: ' MB'},
|
171
|
+
{size: 1000, suffix: ' KB'}
|
172
|
+
]
|
173
|
+
};
|
174
|
+
this.defaults = $config;
|
175
|
+
this.$get = function () {
|
176
|
+
return function (bytes) {
|
177
|
+
if (!angular.isNumber(bytes)) {
|
178
|
+
return '';
|
179
|
+
}
|
180
|
+
var unit = true,
|
181
|
+
i = 0,
|
182
|
+
prefix,
|
183
|
+
suffix;
|
184
|
+
while (unit) {
|
185
|
+
unit = $config.units[i];
|
186
|
+
prefix = unit.prefix || '';
|
187
|
+
suffix = unit.suffix || '';
|
188
|
+
if (i === $config.units.length - 1 || bytes >= unit.size) {
|
189
|
+
return prefix + (bytes / unit.size).toFixed(2) + suffix;
|
190
|
+
}
|
191
|
+
i += 1;
|
192
|
+
}
|
193
|
+
};
|
194
|
+
};
|
195
|
+
})
|
196
|
+
|
197
|
+
// The FileUploadController initializes the fileupload widget and
|
198
|
+
// provides scope methods to control the File Upload functionality:
|
199
|
+
.controller('FileUploadController', [
|
200
|
+
'$scope', '$element', '$attrs', '$window', 'fileUpload',
|
201
|
+
function ($scope, $element, $attrs, $window, fileUpload) {
|
202
|
+
var uploadMethods = {
|
203
|
+
progress: function () {
|
204
|
+
return $element.fileupload('progress');
|
205
|
+
},
|
206
|
+
active: function () {
|
207
|
+
return $element.fileupload('active');
|
208
|
+
},
|
209
|
+
option: function (option, data) {
|
210
|
+
if (arguments.length === 1) {
|
211
|
+
return $element.fileupload('option', option);
|
212
|
+
}
|
213
|
+
$element.fileupload('option', option, data);
|
214
|
+
},
|
215
|
+
add: function (data) {
|
216
|
+
return $element.fileupload('add', data);
|
217
|
+
},
|
218
|
+
send: function (data) {
|
219
|
+
return $element.fileupload('send', data);
|
220
|
+
},
|
221
|
+
process: function (data) {
|
222
|
+
return $element.fileupload('process', data);
|
223
|
+
},
|
224
|
+
processing: function (data) {
|
225
|
+
return $element.fileupload('processing', data);
|
226
|
+
}
|
227
|
+
};
|
228
|
+
$scope.disabled = !$window.jQuery.support.fileInput;
|
229
|
+
$scope.queue = $scope.queue || [];
|
230
|
+
$scope.clear = function (files) {
|
231
|
+
var queue = this.queue,
|
232
|
+
i = queue.length,
|
233
|
+
file = files,
|
234
|
+
length = 1;
|
235
|
+
if (angular.isArray(files)) {
|
236
|
+
file = files[0];
|
237
|
+
length = files.length;
|
238
|
+
}
|
239
|
+
while (i) {
|
240
|
+
i -= 1;
|
241
|
+
if (queue[i] === file) {
|
242
|
+
return queue.splice(i, length);
|
243
|
+
}
|
244
|
+
}
|
245
|
+
};
|
246
|
+
$scope.replace = function (oldFiles, newFiles) {
|
247
|
+
var queue = this.queue,
|
248
|
+
file = oldFiles[0],
|
249
|
+
i,
|
250
|
+
j;
|
251
|
+
for (i = 0; i < queue.length; i += 1) {
|
252
|
+
if (queue[i] === file) {
|
253
|
+
for (j = 0; j < newFiles.length; j += 1) {
|
254
|
+
queue[i + j] = newFiles[j];
|
255
|
+
}
|
256
|
+
return;
|
257
|
+
}
|
258
|
+
}
|
259
|
+
};
|
260
|
+
$scope.applyOnQueue = function (method) {
|
261
|
+
var list = this.queue.slice(0),
|
262
|
+
i,
|
263
|
+
file;
|
264
|
+
for (i = 0; i < list.length; i += 1) {
|
265
|
+
file = list[i];
|
266
|
+
if (file[method]) {
|
267
|
+
file[method]();
|
268
|
+
}
|
269
|
+
}
|
270
|
+
};
|
271
|
+
$scope.submit = function () {
|
272
|
+
this.applyOnQueue('$submit');
|
273
|
+
};
|
274
|
+
$scope.cancel = function () {
|
275
|
+
this.applyOnQueue('$cancel');
|
276
|
+
};
|
277
|
+
// Add upload methods to the scope:
|
278
|
+
angular.extend($scope, uploadMethods);
|
279
|
+
// The fileupload widget will initialize with
|
280
|
+
// the options provided via "data-"-parameters,
|
281
|
+
// as well as those given via options object:
|
282
|
+
$element.fileupload(angular.extend(
|
283
|
+
{scope: $scope},
|
284
|
+
fileUpload.defaults
|
285
|
+
)).on('fileuploadadd', function (e, data) {
|
286
|
+
data.scope = $scope;
|
287
|
+
}).on('fileuploadfail', function (e, data) {
|
288
|
+
if (data.errorThrown === 'abort') {
|
289
|
+
return;
|
290
|
+
}
|
291
|
+
if (data.dataType &&
|
292
|
+
data.dataType.indexOf('json') === data.dataType.length - 4) {
|
293
|
+
try {
|
294
|
+
data.result = angular.fromJson(data.jqXHR.responseText);
|
295
|
+
} catch (ignore) {}
|
296
|
+
}
|
297
|
+
}).on([
|
298
|
+
'fileuploadadd',
|
299
|
+
'fileuploadsubmit',
|
300
|
+
'fileuploadsend',
|
301
|
+
'fileuploaddone',
|
302
|
+
'fileuploadfail',
|
303
|
+
'fileuploadalways',
|
304
|
+
'fileuploadprogress',
|
305
|
+
'fileuploadprogressall',
|
306
|
+
'fileuploadstart',
|
307
|
+
'fileuploadstop',
|
308
|
+
'fileuploadchange',
|
309
|
+
'fileuploadpaste',
|
310
|
+
'fileuploaddrop',
|
311
|
+
'fileuploaddragover',
|
312
|
+
'fileuploadchunksend',
|
313
|
+
'fileuploadchunkdone',
|
314
|
+
'fileuploadchunkfail',
|
315
|
+
'fileuploadchunkalways',
|
316
|
+
'fileuploadprocessstart',
|
317
|
+
'fileuploadprocess',
|
318
|
+
'fileuploadprocessdone',
|
319
|
+
'fileuploadprocessfail',
|
320
|
+
'fileuploadprocessalways',
|
321
|
+
'fileuploadprocessstop'
|
322
|
+
].join(' '), function (e, data) {
|
323
|
+
if ($scope.$emit(e.type, data).defaultPrevented) {
|
324
|
+
e.preventDefault();
|
325
|
+
}
|
326
|
+
}).on('remove', function () {
|
327
|
+
// Remove upload methods from the scope,
|
328
|
+
// when the widget is removed:
|
329
|
+
var method;
|
330
|
+
for (method in uploadMethods) {
|
331
|
+
if (uploadMethods.hasOwnProperty(method)) {
|
332
|
+
delete $scope[method];
|
333
|
+
}
|
334
|
+
}
|
335
|
+
});
|
336
|
+
// Observe option changes:
|
337
|
+
$scope.$watch(
|
338
|
+
$attrs.fileUpload,
|
339
|
+
function (newOptions) {
|
340
|
+
if (newOptions) {
|
341
|
+
$element.fileupload('option', newOptions);
|
342
|
+
}
|
343
|
+
}
|
344
|
+
);
|
345
|
+
}
|
346
|
+
])
|
347
|
+
|
348
|
+
// Provide File Upload progress feedback:
|
349
|
+
.controller('FileUploadProgressController', [
|
350
|
+
'$scope', '$attrs', '$parse',
|
351
|
+
function ($scope, $attrs, $parse) {
|
352
|
+
var fn = $parse($attrs.fileUploadProgress),
|
353
|
+
update = function () {
|
354
|
+
var progress = fn($scope);
|
355
|
+
if (!progress || !progress.total) {
|
356
|
+
return;
|
357
|
+
}
|
358
|
+
$scope.num = Math.floor(
|
359
|
+
progress.loaded / progress.total * 100
|
360
|
+
);
|
361
|
+
};
|
362
|
+
update();
|
363
|
+
$scope.$watch(
|
364
|
+
$attrs.fileUploadProgress + '.loaded',
|
365
|
+
function (newValue, oldValue) {
|
366
|
+
if (newValue !== oldValue) {
|
367
|
+
update();
|
368
|
+
}
|
369
|
+
}
|
370
|
+
);
|
371
|
+
}
|
372
|
+
])
|
373
|
+
|
374
|
+
// Display File Upload previews:
|
375
|
+
.controller('FileUploadPreviewController', [
|
376
|
+
'$scope', '$element', '$attrs',
|
377
|
+
function ($scope, $element, $attrs) {
|
378
|
+
$scope.$watch(
|
379
|
+
$attrs.fileUploadPreview + '.preview',
|
380
|
+
function (preview) {
|
381
|
+
$element.empty();
|
382
|
+
if (preview) {
|
383
|
+
$element.append(preview);
|
384
|
+
}
|
385
|
+
}
|
386
|
+
);
|
387
|
+
}
|
388
|
+
])
|
389
|
+
|
390
|
+
.directive('fileUpload', function () {
|
391
|
+
return {
|
392
|
+
controller: 'FileUploadController',
|
393
|
+
scope: true
|
394
|
+
};
|
395
|
+
})
|
396
|
+
|
397
|
+
.directive('fileUploadProgress', function () {
|
398
|
+
return {
|
399
|
+
controller: 'FileUploadProgressController',
|
400
|
+
scope: true
|
401
|
+
};
|
402
|
+
})
|
403
|
+
|
404
|
+
.directive('fileUploadPreview', function () {
|
405
|
+
return {
|
406
|
+
controller: 'FileUploadPreviewController'
|
407
|
+
};
|
408
|
+
})
|
409
|
+
|
410
|
+
// Enhance the HTML5 download attribute to
|
411
|
+
// allow drag&drop of files to the desktop:
|
412
|
+
.directive('download', function () {
|
413
|
+
return function (scope, elm) {
|
414
|
+
elm.on('dragstart', function (e) {
|
415
|
+
try {
|
416
|
+
e.originalEvent.dataTransfer.setData(
|
417
|
+
'DownloadURL',
|
418
|
+
[
|
419
|
+
'application/octet-stream',
|
420
|
+
elm.prop('download'),
|
421
|
+
elm.prop('href')
|
422
|
+
].join(':')
|
423
|
+
);
|
424
|
+
} catch (ignore) {}
|
425
|
+
});
|
426
|
+
};
|
427
|
+
});
|
428
|
+
|
429
|
+
}));
|