1
0
mirror of https://github.com/LaCasemate/fab-manager.git synced 2024-12-04 15:24:23 +01:00
fab-manager/vendor/assets/components/angular-base64-upload/dist/angular-base64-upload.js
2016-03-23 18:39:41 +01:00

66 lines
2.0 KiB
JavaScript

/*! angular-base64-upload - v0.0.8 - 2015-04-27
* https://github.com/adonespitogo/angular-base64-upload
* Copyright (c) Adones Pitogo <pitogo.adones@gmail.com> 2015; Licensed */
angular.module('naif.base64', [])
.directive('baseSixtyFourInput', ['$window', function ($window) {
return {
restrict: 'A',
require: 'ngModel',
link: function (scope, elem, attrs, ngModel) {
var fileObject = {};
scope.readerOnload = function(e){
var base64 = _arrayBufferToBase64(e.target.result);
fileObject.base64 = base64;
scope.$apply(function(){
ngModel.$setViewValue(angular.copy(fileObject));
});
};
var reader = new FileReader();
reader.onload = scope.readerOnload;
elem.on('change', function() {
if(!elem[0].files.length) {
return;
}
var file = elem[0].files[0];
fileObject.filetype = file.type;
fileObject.filename = file.name;
fileObject.filesize = file.size;
reader.readAsArrayBuffer(file);
});
//http://stackoverflow.com/questions/9267899/arraybuffer-to-base64-encoded-string
function _arrayBufferToBase64( buffer ) {
var binary = '';
var bytes = new Uint8Array( buffer );
var len = bytes.byteLength;
for (var i = 0; i < len; i++) {
binary += String.fromCharCode( bytes[ i ] );
}
return $window.btoa( binary );
}
}
};
}])
.directive('baseSixtyFourImage', [function() {
return {
restrict: 'A',
link: function(scope, elem, attrs) {
scope.$watch(attrs.baseSixtyFourImage, function(fileObject) {
if(fileObject && fileObject.filetype && fileObject.filetype.indexOf("image") === 0) {
elem.attr("src", _assemble_data_uri(fileObject));
} else {
elem.attr("src", attrs.baseSixtyFourImagePlaceholder);
}
});
function _assemble_data_uri(fileObject){
return "data:" + fileObject.filetype + ";base64," + fileObject.base64;
}
}
};
}]);