86 lines
No EOL
2.5 KiB
JavaScript
86 lines
No EOL
2.5 KiB
JavaScript
|
|
(function() {
|
|
|
|
var ImageManager = new Vue({
|
|
|
|
el: '#image-manager',
|
|
|
|
data: {
|
|
images: [],
|
|
hasMore: false,
|
|
page: 0,
|
|
cClickTime: 0
|
|
},
|
|
|
|
created: function() {
|
|
// Get initial images
|
|
this.fetchData(this.page);
|
|
},
|
|
|
|
ready: function() {
|
|
// Create dropzone
|
|
this.setupDropZone();
|
|
},
|
|
|
|
methods: {
|
|
fetchData: function() {
|
|
var _this = this;
|
|
$.getJSON('/images/all/' + _this.page, function(data) {
|
|
_this.images = _this.images.concat(data.images);
|
|
_this.hasMore = data.hasMore;
|
|
_this.page++;
|
|
});
|
|
},
|
|
|
|
setupDropZone: function() {
|
|
var _this = this;
|
|
var dropZone = new Dropzone(_this.$$.dropZone, {
|
|
url: '/upload/image',
|
|
init: function() {
|
|
var dz = this;
|
|
this.on("sending", function(file, xhr, data) {
|
|
data.append("_token", document.querySelector('meta[name=token]').getAttribute('content'));
|
|
});
|
|
this.on("success", function(file, data) {
|
|
_this.images.unshift(data);
|
|
$(file.previewElement).fadeOut(400, function() {
|
|
dz.removeFile(file);
|
|
});
|
|
});
|
|
}
|
|
});
|
|
},
|
|
|
|
imageClick: function(image) {
|
|
var dblClickTime = 380;
|
|
var cTime = (new Date()).getTime();
|
|
var timeDiff = cTime - this.cClickTime;
|
|
if(this.cClickTime !== 0 && timeDiff < dblClickTime) {
|
|
// DoubleClick
|
|
if(this.callback) {
|
|
this.callback(image);
|
|
}
|
|
this.hide();
|
|
} else {
|
|
// Single Click
|
|
}
|
|
this.cClickTime = cTime;
|
|
},
|
|
|
|
show: function(callback) {
|
|
this.callback = callback;
|
|
this.$$.overlay.style.display = 'block';
|
|
},
|
|
|
|
hide: function() {
|
|
this.$$.overlay.style.display = 'none';
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
window.ImageManager = ImageManager;
|
|
|
|
|
|
})(); |