2 lines
24 KiB
JavaScript
2 lines
24 KiB
JavaScript
/*! image_picker 2016-04-18 */
|
|
angular.module("mediaModalTemplates",[]).run(["$templateCache",function(a){"use strict";a.put("camera.html",'<div ng-controller="cameraController" class="media-resource1">\n <h3>Upload Media</h3>\n <div>\n <form id="fileupload" action="{{upload_url}}" method="POST" enctype="multipart/form-data" data-file-upload="options" data-ng-class="{\'fileupload-processing\': processing() || loadingFiles}">\n <!-- The fileupload-buttonbar contains buttons to add/delete files and start/cancel the upload -->\n <div class="row fileupload-buttonbar">\n <div class="col-lg-7">\n <!-- The fileinput-button span is used to style the file input field as button -->\n <span class="btn btn-success fileinput-button" ng-class="{disabled: disabled}">\n <i class="glyphicon glyphicon-plus"></i>\n <span>Add files...</span>\n <input type="file" name="files[]" multiple ng-disabled="disabled" accept="image/*" capture="camera">\n </span>\n <button type="button" class="btn btn-primary start" data-ng-click="submit()">\n <i class="glyphicon glyphicon-upload"></i>\n <span>Start upload</span>\n </button>\n <button type="button" class="btn btn-warning cancel" data-ng-click="cancel()">\n <i class="glyphicon glyphicon-ban-circle"></i>\n <span>Cancel upload</span>\n </button>\n <!-- The global file processing state -->\n <span class="fileupload-process"></span>\n </div>\n <!-- The global progress state -->\n <div class="col-lg-5 fade" data-ng-class="{in: active()}">\n <!-- The global progress bar -->\n <div class="progress progress-striped active" data-file-upload-progress="progress()"><div class="progress-bar progress-bar-success" data-ng-style="{width: num + \'%\'}"></div></div>\n <!-- The extended global progress state -->\n <div class="progress-extended"> </div>\n </div>\n </div>\n <div>\n <div class="row media-resource files ng-cloak">\n <div ng-repeat="file in queue" class="image-container" ng-click="selectImage(file)" data-ng-class="{\'processing\': file.$processing()}">\n <div class="col-xs-6 col-sm-3 col-md-2 col-lg-2">\n <div class="media-wrapper" ng-class="{selected: file.selected}">\n <div class="image-wrapper">\n <div class="centered">\n <img ng-src="{{file.url}}" class="img-responsive"/>\n </div>\n </div>\n <div class="image-title">{{file.name}}</div>\n </div>\n <div class="progress progress-striped active fade" data-ng-class="{pending: \'in\'}[file.$state()]" data-file-upload-progress="file.$progress()">\n <div class="progress-bar progress-bar-success" data-ng-style="{width: num + \'%\'}"></div>\n </div>\n <div class="text-center">\n <button class="btn btn-primary" data-ng-controller="FileDestroyController" data-ng-click="file.$destroy()" data-ng-hide="!file.$destroy">\n <i class="fa fa-trash"></i> Delete\n </button>\n </div>\n </div>\n\n </div>\n <div ng-repeat="file in filequeue" class="image-container" ng-click="selectImage(file)" data-ng-class="{\'processing\': file.$processing()}">\n <div class="col-xs-6 col-sm-3 col-md-2 col-lg-2">\n <div class="media-wrapper" ng-class="{selected: file.selected}">\n <div class="image-wrapper">\n <div class="centered">\n <img ng-src="{{file.url}}" class="img-responsive"/>\n </div>\n </div>\n <div class="image-title">{{file.name}}</div>\n </div>\n <div class="progress progress-striped active fade" data-ng-class="{pending: \'in\'}[file.$state()]" data-file-upload-progress="file.$progress()">\n <div class="progress-bar progress-bar-success" data-ng-style="{width: num + \'%\'}"></div>\n </div>\n <div class="text-center">\n <button class="btn btn-primary" data-ng-controller="FileDestroyController" data-ng-click="file.$destroy()" data-ng-hide="!file.$destroy">\n <i class="fa fa-trash"></i> Delete\n </button>\n </div>\n </div>\n\n </div>\n\n </div>\n </div>\n </form>\n </div>\n</div>'),a.put("gallery.html",'<div class="container-fluid" id="otonomic-media-modal">\n <uib-tabset>\n <uib-tab ng-repeat="resource in availableResources" select="tabSelected(resource)">\n <uib-tab-heading>\n <i ng-class="resource.icon"></i>\n <span>{{resource.title}}</span>\n </uib-tab-heading>\n <div ng-include="resource.viewPath"></div>\n </uib-tab>\n </uib-tabset>\n</div>\n<span us-spinner spinner-on="appState.loading"></span>'),a.put("galleryWindow.html",'<div class="modal-header">\n <h2 class="modal-title">Add Image</h2>\n</div>\n<div class="modal-body">\n <div ng-include="\'gallery.html\'"></div>\n</div>\n<div class="modal-footer">\n <button class="btn btn-default" type="button" ng-click="cancel()"><i class="fa fa-remove"></i>Cancel</button>\n <button class="btn btn-primary" type="button" ng-click="selectImages()" data-ng-disabled="!selectedImages.length"><i class="fa fa-ok"></i>Add Images</button>\n</div>'),a.put("upload.html",'<div ng-controller="uploadController" class="media-resource1">\n <h3>Upload Media</h3>\n <div>\n <form id="fileupload" action="{{upload_url}}" method="POST" enctype="multipart/form-data" data-file-upload="options" data-ng-class="{\'fileupload-processing\': processing() || loadingFiles}">\n <!-- The fileupload-buttonbar contains buttons to add/delete files and start/cancel the upload -->\n <div class="row fileupload-buttonbar">\n <div class="col-lg-7">\n <!-- The fileinput-button span is used to style the file input field as button -->\n <span class="btn btn-success fileinput-button" ng-class="{disabled: disabled}">\n <i class="glyphicon glyphicon-plus"></i>\n <span>Add files...</span>\n <input type="file" name="files[]" multiple ng-disabled="disabled">\n </span>\n <button type="button" class="btn btn-primary start" data-ng-click="submit()">\n <i class="glyphicon glyphicon-upload"></i>\n <span>Start upload</span>\n </button>\n <button type="button" class="btn btn-warning cancel" data-ng-click="cancel()">\n <i class="glyphicon glyphicon-ban-circle"></i>\n <span>Cancel upload</span>\n </button>\n <!-- The global file processing state -->\n <span class="fileupload-process"></span>\n </div>\n <!-- The global progress state -->\n <div class="col-lg-5 fade" data-ng-class="{in: active()}">\n <!-- The global progress bar -->\n <div class="progress progress-striped active" data-file-upload-progress="progress()"><div class="progress-bar progress-bar-success" data-ng-style="{width: num + \'%\'}"></div></div>\n <!-- The extended global progress state -->\n <div class="progress-extended"> </div>\n </div>\n </div>\n <div>\n <div class="row media-resource files ng-cloak">\n <div ng-repeat="file in queue" class="image-container" ng-click="selectImage(file)" data-ng-class="{\'processing\': file.$processing()}">\n <div class="col-xs-6 col-sm-3 col-md-2 col-lg-2">\n <div class="media-wrapper" ng-class="{selected: file.selected}">\n <div class="image-wrapper">\n <div class="centered">\n <img ng-src="{{file.url}}" class="img-responsive"/>\n </div>\n </div>\n <div class="image-title">{{file.name}}</div>\n </div>\n <div class="progress progress-striped active fade" data-ng-class="{pending: \'in\'}[file.$state()]" data-file-upload-progress="file.$progress()">\n <div class="progress-bar progress-bar-success" data-ng-style="{width: num + \'%\'}"></div>\n </div>\n <div class="text-center">\n <button class="btn btn-primary" data-ng-controller="FileDestroyController" data-ng-click="file.$destroy()" data-ng-hide="!file.$destroy">\n <i class="fa fa-trash"></i> Delete\n </button>\n </div>\n </div>\n\n </div>\n <div ng-repeat="file in filequeue" class="image-container" ng-click="selectImage(file)" data-ng-class="{\'processing\': file.$processing()}">\n <div class="col-xs-6 col-sm-3 col-md-2 col-lg-2">\n <div class="media-wrapper" ng-class="{selected: file.selected}">\n <div class="image-wrapper">\n <div class="centered">\n <img ng-src="{{file.url}}" class="img-responsive"/>\n </div>\n </div>\n <div class="image-title">{{file.name}}</div>\n </div>\n <div class="progress progress-striped active fade" data-ng-class="{pending: \'in\'}[file.$state()]" data-file-upload-progress="file.$progress()">\n <div class="progress-bar progress-bar-success" data-ng-style="{width: num + \'%\'}"></div>\n </div>\n <div class="text-center">\n <button class="btn btn-primary" data-ng-controller="FileDestroyController" data-ng-click="file.$destroy()" data-ng-hide="!file.$destroy">\n <i class="fa fa-trash"></i> Delete\n </button>\n </div>\n </div>\n\n </div>\n\n </div>\n </div>\n </form>\n </div>\n</div>'),a.put("webService.html",'<div ng-controller="webServicesController" ng-init="setWebServiceType(resource.webServiceType)">\n <h3><i ng-class="resource.icon"></i>{{resource.title}}</h3>\n <form ng-submit=\'search()\'>\n <div class="input-group search-container" ng-show="showSearcher()">\n <input type="text" class="form-control" ng-model="imageFilter" placeholder="search"/>\n <span class="input-group-btn">\n <button type="submit" class="btn btn-primary" ng-click=\'search()\'>\n <i class="fa fa-search"></i>\n </button>\n </span>\n </div>\n </form>\n\n <div class="row media-resource">\n <div ng-repeat="image in images" class="image-container" ng-click="selectImage(image)">\n <div class="col-xs-6 col-sm-3 col-md-2 col-lg-2">\n <div class="media-wrapper" ng-class="{selected: image.selected}">\n <div class="image-wrapper">\n <div class="centered">\n <img ng-src="{{image.thumbnail}}" class="img-responsive"/>\n </div>\n </div>\n <div class="image-title">{{image.title}}</div>\n </div>\n </div>\n </div>\n </div>\n\n <div class="row text-center">\n <button class="btn btn-primary" ng-click="loadMore()">Load More</button>\n </div>\n\n</div>')}]),angular.module("mediaModal",["ui.bootstrap","angularSpinner","flow","images-resizer","mediaModalTemplates","blueimp.fileupload"]),angular.module("mediaModal").config(["$httpProvider","fileUploadProvider","$sceDelegateProvider",function(a,b,c){c.resourceUrlWhitelist(["self","http://business.otonomic.com/**"]),delete a.defaults.headers.common["X-Requested-With"],b.defaults.redirect=window.location.href.replace(/\/[^\/]*$/,"/cors/result.html?%s"),angular.extend(b.defaults,{autoUpload:!0,forceIframeTransport:!0,disableImageResize:/Android(?!.*Chrome)|Opera/.test(window.navigator.userAgent),acceptFileTypes:/(\.|\/)(gif|jpe?g|png)$/i})}]).constant("flickrApiKey","b5245e9b9cbaeecee26ea278bfa20253").constant("upload_url","http://business.otonomic.com/api/v1/?cmd=upload").constant("instagramApiKey","44171713.10d405b.25e232f920f94ac9907d8c0ea34ce1de").constant("facebookApiKey","CAANkofzWtSoBAG0FcIPXZAFFUJjZBdZAiejDxnPXXapvIP1UZA9ZBKiryHlB3GZCjrY1P3rgnKO70AWYQ1bLFp03MxZAuYTaimqsETawQxE9PRhCuLKHZCxDd9wrzJQrqXMsscI80UzPapvPoQKa9WeE7NHIN8H30lb48AhXqZAbVbX7w33nuEhI8ZCPc56VnTS2IZD").constant("pexelsApiKey","563492ad6f9170000100000183fb18af4b5f4b5c6a67f7e6433578ba").factory("availableResources",["enums",function(a){return[{title:"Camera",icon:"fa fa-camera",viewPath:"camera.html"},{title:"Upload",icon:"fa fa-cloud-upload",viewPath:"upload.html"},{title:"Flickr",icon:"fa fa-flickr",viewPath:"webService.html",webServiceType:a.webServiceTypes.flickr},{title:"Instagram",icon:"fa fa-instagram",viewPath:"webService.html",webServiceType:a.webServiceTypes.instagram},{title:"Background Patterns",icon:"fa fa-star",viewPath:"webService.html",webServiceType:a.webServiceTypes.backgroundPatterns},{title:"Facebook Photos",icon:"fa fa-facebook",viewPath:"webService.html",webServiceType:a.webServiceTypes.facebookPhotos},{title:"Facebook Users",icon:"fa fa-facebook-official",viewPath:"webService.html",webServiceType:a.webServiceTypes.facebookUsers},{title:"Pexels",icon:"fa fa-picture-o",viewPath:"webService.html",webServiceType:a.webServiceTypes.pexels}]}]),angular.module("mediaModal").controller("cameraController",["$scope","$http","upload_url",function(a,b,c){a.upload_url=c,a.options={url:c},a.loadingFiles=!0,b.get(c).then(function(b){a.loadingFiles=!1,a.filequeue=b.data.files||[]},function(){a.loadingFiles=!1}),a.selectImage=function(b){if(b.selected=!b.selected,b.thumbnail=b.url,a.selectedImages){if(b.selected)return void a.selectedImages.push(b);var c=a.selectedImages.indexOf(b);-1!=c&&a.selectedImages.splice(c,1)}},a.$on("fileuploaddone",function(b,c){$.each(c.result.files,function(b,c){a.selectImage(c)})})}]),angular.module("mediaModal").controller("FileDestroyController",["$scope","$http","upload_url",function(a,b,c){var d,e=a.file;e.url?(e.$state=function(){return d},e.$destroy=function(){return d="pending",b({url:e.deleteUrl,method:e.deleteType}).then(function(){d="resolved",a.clear(e)},function(){d="rejected"})}):e.$cancel||e._index||(e.$cancel=function(){a.clear(e)})}]),function(){angular.module("mediaModal").controller("GalleryController",["$scope","availableResources","$uibModalInstance",function(a,b,c){a.availableResources=b,a.appState={},a.selectedImages=[],a.tabSelected=function(b){a.$broadcast("currentResourceChanged",b.webServiceType)},a.cancel=function(){c.dismiss("cancel")},a.selectImages=function(){c.close(a.selectedImages)}}])}(),angular.module("mediaModal").controller("uploadController",["$scope","$http","upload_url",function(a,b,c){a.upload_url=c,a.options={url:c},a.loadingFiles=!0,b.get(c).then(function(b){a.loadingFiles=!1,a.filequeue=b.data.files||[]},function(){a.loadingFiles=!1}),a.selectImage=function(b){if(b.selected=!b.selected,b.thumbnail=b.url,a.selectedImages){if(b.selected)return void a.selectedImages.push(b);var c=a.selectedImages.indexOf(b);-1!=c&&a.selectedImages.splice(c,1)}},a.$on("fileuploaddone",function(b,c){$.each(c.result.files,function(b,c){a.selectImage(c)})})}]),angular.module("mediaModal").controller("webServicesController",["$scope","webStorage","enums",function(a,b,c){a.currentPage=0,a.itemsOnPage=25,a.search=function(){a.appState.loading=!0,b.search(a.webServiceType,a.imageFilter,a.currentPage,a.itemsOnPage).then(function(b){a.fullImagesCount=b.count,a.images=b.images})["finally"](function(){a.appState.loading=!1})},a.loadMore=function(){a.appState.loading=!0,b.loadMore(a.webServiceType).then(function(b){a.images||(a.images=[]),a.images=a.images.concat(b.images)})["finally"](function(){a.appState.loading=!1})},a.setWebServiceType=function(b){a.webServiceType=b},a.selectImage=function(b){if(b.selected=!b.selected,a.selectedImages){if(b.selected)return void a.selectedImages.push(b);var c=a.selectedImages.indexOf(b);-1!=c&&a.selectedImages.splice(c,1)}},a.showSearcher=function(){return a.webServiceType!==c.webServiceTypes.backgroundPatterns},a.$on("currentResourceChanged",function(b,d){a.webServiceType===c.webServiceTypes.backgroundPatterns&&d===c.webServiceTypes.backgroundPatterns&&a.search()})}]),angular.module("mediaModal").factory("enums",function(){return{webServiceTypes:{flickr:1,instagram:2,backgroundPatterns:3,facebookUsers:4,pexels:5}}}),angular.module("mediaModal").factory("backgroundPatterns",["$http","$q",function(a,b){function c(c,d,g){return a.jsonp("http://www.colourlovers.com/api/patterns/top?format=json&jsonCallback=JSON_CALLBACK&numResults="+f+"&resultOffset="+e).then(function(a){return e++,{count:0,images:a.data.map(function(a){return{thumbnail:a.imageUrl,full:a.imageUrl,title:a.title}})}},function(a){return b.reject(a.data)})}function d(){return a.jsonp("http://www.colourlovers.com/api/patterns/top?format=json&jsonCallback=JSON_CALLBACK&numResults="+f+"&resultOffset="+e).then(function(a){return e++,{count:0,images:a.data.map(function(a){return{thumbnail:a.imageUrl,full:a.imageUrl,title:a.title}})}},function(a){return b.reject(a.data)})}var e=0,f=20;return{search:c,loadMore:d}}]),angular.module("mediaModal").factory("facebookPhotos",["$http","facebookApiKey","$q",function(a,b,c){function d(d,e,g){return a.get("https://graph.facebook.com/v2.5/"+d+"/photos?access_token="+b).then(function(a){return f=a.data.paging.next,{count:0,images:a.data.data.map(function(a){return{thumbnail:"http://graph.facebook.com/"+a.id+"/picture?type=normal",full:"http://graph.facebook.com/"+a.id+"/picture?type=large",title:a.name}})}},function(a){return c.reject(a.data)})}function e(){return f?a.get(f).then(function(a){return f=a.data.paging.next,{count:0,images:a.data.data.map(function(a){return{thumbnail:"http://graph.facebook.com/"+a.id+"/picture?type=normal",full:"http://graph.facebook.com/"+a.id+"/picture?type=large",title:a.name}})}},function(a){return c.reject(a.data)}):c.reject("no more images")}var f;return{search:d,loadMore:e}}]),angular.module("mediaModal").factory("facebookUsers",["$http","facebookApiKey","$q",function(a,b,c){function d(d,e,g){return a.get("https://graph.facebook.com/v2.2/search?q="+d+"&type=user&access_token="+b).then(function(a){return f=a.data.paging.next,{count:0,images:a.data.data.map(function(a){return{thumbnail:"http://graph.facebook.com/"+a.id+"/picture?type=normal",full:"http://graph.facebook.com/"+a.id+"/picture?type=large",title:a.name}})}},function(a){return c.reject(a.data)})}function e(){return f?a.get(f).then(function(a){return f=a.data.paging.next,{count:0,images:a.data.data.map(function(a){return{thumbnail:"http://graph.facebook.com/"+a.id+"/picture?type=normal",full:"http://graph.facebook.com/"+a.id+"/picture?type=large",title:a.name}})}},function(a){return c.reject(a.data)}):c.reject("no more images")}var f;return{search:d,loadMore:e}}]),angular.module("mediaModal").factory("flickr",["$http","flickrApiKey",function(a,b){function c(c,d,h){return e=1,f=h,g=c,a.get("https://api.flickr.com/services/rest/?api_key="+b+"&format=json&nojsoncallback=1&method=flickr.photos.search&format=json&page="+d+"&per_page="+h+"&text="+c).then(function(a){return{count:+a.data.photos.total,images:a.data.photos.photo.map(function(a){return{thumbnail:"https://farm"+a.farm+".staticflickr.com/"+a.server+"/"+a.id+"_"+a.secret+"_t.jpg",full:"https://farm"+a.farm+".staticflickr.com/"+a.server+"/"+a.id+"_"+a.secret+".jpg"}})}},function(a){return $q.reject(a.data)})}function d(){return e++,a.get("https://api.flickr.com/services/rest/?api_key="+b+"&format=json&nojsoncallback=1&method=flickr.photos.search&format=json&page="+e+"&per_page="+f+"&text="+g).then(function(a){return{count:+a.data.photos.total,images:a.data.photos.photo.map(function(a){return{thumbnail:"https://farm"+a.farm+".staticflickr.com/"+a.server+"/"+a.id+"_"+a.secret+"_t.jpg",full:"https://farm"+a.farm+".staticflickr.com/"+a.server+"/"+a.id+"_"+a.secret+".jpg"}})}},function(a){return $q.reject(a.data)})}var e=1,f=50,g="";return{search:c,loadMore:d}}]),angular.module("mediaModal").factory("gallery",["$q","$uibModal",function(a,b){function c(a){return b.open({animation:a,templateUrl:"galleryWindow.html",controller:"GalleryController",size:"lg"}).result}return{open:c}}]),angular.module("mediaModal").factory("instagram",["$http","instagramApiKey","$q",function(a,b,c){function d(d,e,g){return a.jsonp("https://api.instagram.com/v1/tags/"+d+"/media/recent?access_token="+b+"&callback=JSON_CALLBACK&count=20").then(function(a){return f=a.data.pagination.next_url,{count:0,images:a.data.data.map(function(a){return{thumbnail:a.images.thumbnail.url,full:a.images.standard_resolution.url,title:a.caption.text.substr(0,50)}})}},function(a){return c.reject(a.data)})}function e(){return f?a.jsonp(f+"&callback=JSON_CALLBACK").then(function(a){return f=a.data.pagination.next_url,{count:0,images:a.data.data.map(function(a){return{thumbnail:a.images.thumbnail.url,full:a.images.standard_resolution.url,title:a.caption.text.substr(0,50)}})}},function(a){return c.reject(a.data)}):c.reject("no more images")}var f;return{search:d,loadMore:e}}]),angular.module("mediaModal").factory("pexels",["$http","pexelsApiKey","$q",function(a,b,c){function d(d,e,f){return a.get("http://api.pexels.com/v1/search?query="+d+"&per_page="+f+"&page="+(e+1),{headers:{Authorization:b}}).then(function(a){return{count:a.data.total_results,images:a.data.photos.map(function(a){return{thumbnail:a.src.square,full:a.src.large,title:a.photographer}})}},function(a){return c.reject(a.data)})}return{search:d}}]),angular.module("mediaModal").factory("webStorage",["enums","flickr","instagram","backgroundPatterns","facebookUsers","pexels","facebookPhotos",function(a,b,c,d,e,f,g){function h(h){switch(h){case a.webServiceTypes.flickr:return b;case a.webServiceTypes.instagram:return c;case a.webServiceTypes.backgroundPatterns:return d;case a.webServiceTypes.facebookUsers:return e;case a.webServiceTypes.pexels:return f;case a.webServiceTypes.facebookPhotos:return g}}function i(a,b,c,d){return h(a).search(b,c,d)}function j(a){return h(a).loadMore()}return{search:i,loadMore:j}}]); |