Last active
August 29, 2015 14:01
-
-
Save kfuchs/f95a7d7e8c64e68ba9d9 to your computer and use it in GitHub Desktop.
Directive
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<div class="row" ng-file-drop> | |
<div class="col-md-6 col-lg-6"> | |
<h3>Select files</h3> | |
<div ng-show="uploader.isHTML5"> | |
<!-- Example: ng-file-drop | ng-file-drop="options" --> | |
<div class="marketing img-drop-zone" ng-file-drop="{ url: '/foo' }" ng-file-over="img-hover"> | |
<span class="icon ion-image icon-bg"></span> | |
<div ng-repeat="item in uploader.queue" class="col-md-12 col-lg-12"> | |
<div ng-show="item.file" ng-thumb="{ file: item.file, width: 300, class: 'dropped-in-image' }"></div> | |
</div> | |
</div> | |
<button type="button" class="btn btn-danger btn-s" ng-click="uploader.clearQueue()" ng-disabled="!uploader.queue.length"> | |
<span class="glyphicon glyphicon-trash"></span> Remove Image | |
</button> | |
<div ng-show="uploader.isHTML5" ng-thumb="{ file: uploader.queue[0].file, width: 300 }"></div> | |
</div> | |
<!-- 2. ng-file-select | ng-file-select="options" --> | |
<input ng-file-select type="file"> | |
</div> | |
<div class="col-md-6" style="margin-bottom: 40px"> | |
<h2>Uploads only images (with canvas preview)</h2> | |
<h3>The queue</h3> | |
<p>Queue length: {{ uploader.queue.length }}</p> | |
<table class="table"> | |
<thead> | |
<tr> | |
<th width="50%">Name</th> | |
<th ng-show="uploader.isHTML5">Size</th> | |
<th ng-show="uploader.isHTML5">Progress</th> | |
<th>Status</th> | |
<th>Actions</th> | |
</tr> | |
</thead> | |
<tbody> | |
<tr ng-repeat="item in uploader.queue"> | |
<td ng-show="uploader.isHTML5"> | |
<div class="progress" style="margin-bottom: 0;"> | |
<div class="progress-bar" role="progressbar" ng-style="{ 'width': item.progress + '%' }"></div> | |
</div> | |
</td> | |
<td class="text-center"> | |
<span ng-show="item.isSuccess"><i class="glyphicon glyphicon-ok"></i></span> | |
<span ng-show="item.isCancel"><i class="glyphicon glyphicon-ban-circle"></i></span> | |
<span ng-show="item.isError"><i class="glyphicon glyphicon-remove"></i></span> | |
</td> | |
<td nowrap> | |
<button type="button" class="btn btn-success btn-xs" ng-click="item.upload()" ng-disabled="item.isReady || item.isUploading || item.isSuccess"> | |
<span class="glyphicon glyphicon-upload"></span> Upload | |
</button> | |
<button type="button" class="btn btn-warning btn-xs" ng-click="item.cancel()" ng-disabled="!item.isUploading"> | |
<span class="glyphicon glyphicon-ban-circle"></span> Cancel | |
</button> | |
<button type="button" class="btn btn-danger btn-xs" ng-click="item.remove()"> | |
<span class="glyphicon glyphicon-trash"></span> Remove | |
</button> | |
</td> | |
</tr> | |
</tbody> | |
</table> | |
<div> | |
<p> | |
Queue progress: | |
<div class="progress" style=""> | |
<div class="progress-bar" role="progressbar" ng-style="{ 'width': uploader.progress + '%' }"></div> | |
</div> | |
</p> | |
<button type="button" class="btn btn-success btn-s" ng-click="uploader.uploadAll()" ng-disabled="!uploader.getNotUploadedItems().length"> | |
<span class="glyphicon glyphicon-upload"></span> Upload all | |
</button> | |
<button type="button" class="btn btn-warning btn-s" ng-click="uploader.cancelAll()" ng-disabled="!uploader.isUploading"> | |
<span class="glyphicon glyphicon-ban-circle"></span> Cancel all | |
</button> | |
</div> | |
</div> | |
</div> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'use strict'; | |
canvaspeople.directive('ngThumb', ['$window', function($window) { | |
var helper = { | |
support: !!($window.FileReader && $window.CanvasRenderingContext2D), | |
isFile: function(item) { | |
return angular.isObject(item) && item instanceof $window.File; | |
}, | |
isImage: function(file) { | |
var type = '|' + file.type.slice(file.type.lastIndexOf('/') + 1) + '|'; | |
return '|jpg|png|jpeg|bmp|gif|'.indexOf(type) !== -1; | |
} | |
}; | |
return { | |
restrict: 'A', | |
template: '<canvas/>', | |
link: function(scope, element, attributes) { | |
if (!helper.support) return; | |
var params = scope.$eval(attributes.ngThumb); | |
if (!helper.isFile(params.file)) return; | |
if (!helper.isImage(params.file)) return; | |
var canvas = element.find('canvas'); | |
var reader = new FileReader(); | |
console.log(reader); | |
reader.onload = onLoadFile; | |
reader.readAsDataURL(params.file); | |
function onLoadFile(event) { | |
var img = new Image(); | |
img.onload = onLoadImage; | |
img.src = event.target.result; | |
} | |
function onLoadImage() { | |
var width = params.width || this.width / this.height * params.height; | |
var height = params.height || this.height / this.width * params.width; | |
canvas.attr({ width: width, height: height, class: params.class }); | |
canvas[0].getContext('2d').drawImage(this, 0, 0, width, height); | |
} | |
} | |
}; | |
}]); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment