- Created complete documentation in docs/ directory - Added PROJECT_OVERVIEW.md with feature highlights and getting started guide - Added ARCHITECTURE.md with system design and technical details - Added SECURITY.md with comprehensive security implementation guide - Added DEVELOPMENT.md with development workflows and best practices - Added DEPLOYMENT.md with production deployment instructions - Added API.md with complete REST API documentation - Added CONTRIBUTING.md with contribution guidelines - Added CHANGELOG.md with version history and migration notes - Reorganized all documentation files into docs/ directory for better organization - Updated README.md with proper documentation links and quick navigation - Enhanced project structure with professional documentation standards
162 lines
4.7 KiB
JavaScript
162 lines
4.7 KiB
JavaScript
if (!HTMLCanvasElement.prototype.toBlob) {
|
|
Object.defineProperty(HTMLCanvasElement.prototype, 'toBlob', {
|
|
value: function (callback, type, quality) {
|
|
type = 'image/jpeg';
|
|
quality = 1;
|
|
|
|
var binStr = atob(this.toDataURL(type, quality).split(',')[1]),
|
|
len = binStr.length,
|
|
arr = new Uint8Array(len);
|
|
|
|
for (var i = 0; i < len; i++) {
|
|
arr[i] = binStr.charCodeAt(i);
|
|
}
|
|
|
|
callback(new Blob([arr], {type: type || 'image/jpeg'}));
|
|
}
|
|
});
|
|
}
|
|
|
|
function pad(num, size) {
|
|
return ('000000000' + num).substr(-size);
|
|
}
|
|
|
|
String.prototype.chunk = function (n) {
|
|
var ret = [];
|
|
for (var i = 0, len = this.length; i < len; i += n) {
|
|
ret.push(this.substr(i, n))
|
|
}
|
|
|
|
return ret
|
|
};
|
|
|
|
$(document).ready(function() {
|
|
var $image = $(".cropper img");
|
|
|
|
$image.cropper({
|
|
aspectRatio: 512 / 85,
|
|
resizable: true,
|
|
rotatable: true,
|
|
responsive: true,
|
|
minCropBoxWidth: Math.round(2048),
|
|
minCropBoxHeight: Math.round(340),
|
|
done: function (data) {
|
|
}
|
|
});
|
|
|
|
|
|
var $inputImage = $('#fedit-image');
|
|
var URL = window.URL || window.webkitURL;
|
|
var blobURL;
|
|
|
|
if (URL) {
|
|
$inputImage.change(function () {
|
|
var files = this.files;
|
|
var file;
|
|
|
|
if (!$image.data('cropper')) {
|
|
return;
|
|
}
|
|
|
|
if (files && files.length) {
|
|
file = files[0];
|
|
|
|
if (/^image\/\w+$/.test(file.type)) {
|
|
blobURL = URL.createObjectURL(file);
|
|
$image.one('built.cropper', function () {
|
|
URL.revokeObjectURL(blobURL);
|
|
}).cropper('reset').cropper('replace', blobURL);
|
|
} else {
|
|
$body.tooltip('Please choose an image file.', 'warning');
|
|
}
|
|
}
|
|
});
|
|
} else {
|
|
$inputImage.prop('disabled', true).parent().addClass('disabled');
|
|
}
|
|
|
|
|
|
$("a[class='c-zoomin']").click(function () {
|
|
$image.cropper('zoom', '.1');
|
|
});
|
|
$("a[class='c-zoomout']").click(function () {
|
|
$image.cropper('zoom', '-.1');
|
|
});
|
|
$("a[class='c-moveup']").click(function () {
|
|
$image.cropper('move', '0', '-10');
|
|
});
|
|
$("a[class='c-movedown']").click(function () {
|
|
$image.cropper('move', '0', '10');
|
|
});
|
|
$("a[class='c-moveleft']").click(function () {
|
|
$image.cropper('move', '-10', '0');
|
|
});
|
|
$("a[class='c-moveright']").click(function () {
|
|
$image.cropper('move', '10', '0');
|
|
});
|
|
|
|
|
|
$("button[id='done']").click(function () {
|
|
if (typeof ($(".cropper-container").html()) != "undefined") {
|
|
$image.cropper('getCroppedCanvas').toBlob(function (blob) {
|
|
var reader = new window.FileReader();
|
|
reader.readAsDataURL(blob);
|
|
reader.onloadend = function () {
|
|
base64data = reader.result.replace('png', 'jpeg');
|
|
$("input[name='crop_data']").val(base64data);
|
|
|
|
$("#fedit-image-form").mask(" ");
|
|
jQuery.post(current_url + menu_section + "?s=channel-menu-entry3&do=save", $("#fedit-image-form").serialize(), function (data) {
|
|
|
|
window.location = current_url + menu_section + "?r=confirm";
|
|
|
|
return false;
|
|
});
|
|
|
|
}
|
|
});
|
|
} else {
|
|
}
|
|
});
|
|
|
|
|
|
|
|
$("button[id='update']").click(function () {
|
|
if (typeof ($(".cropper-container").html()) != "undefined") {
|
|
$image.cropper('getCroppedCanvas').toBlob(function (blob) {
|
|
var reader = new window.FileReader();
|
|
reader.readAsDataURL(blob);
|
|
reader.onloadend = function () {
|
|
t = $("#crop-string").val();
|
|
base64data = reader.result.replace('png', 'jpeg');
|
|
$("input[name='crop_data']").val(base64data);
|
|
|
|
$(".fancybox-inner").mask(" ");
|
|
jQuery.post(current_url + menu_section + "?s=channel-menu-entry3&do=save_crop&t=" + t, $("#fedit-image-form").serialize(), function (data) {
|
|
if (t > 24) {
|
|
$(".fancybox-inner #upload-response").html(data);
|
|
$(".fancybox-inner").unmask("");
|
|
} else {
|
|
window.location = current_url + menu_section + "?r=confirm";
|
|
|
|
return false;
|
|
}
|
|
});
|
|
}
|
|
});
|
|
} else {
|
|
}
|
|
});
|
|
|
|
|
|
$("button[id='default']").click(function () {
|
|
t = $("#crop-string").val();
|
|
$(".fancybox-inner").mask(" ");
|
|
jQuery.post(current_url + menu_section + "?s=channel-menu-entry3&do=save_default&t=" + t, $("#fedit-image-form").serialize(), function (data) {
|
|
$("#channel-own-photos img").removeClass("own");
|
|
$("#channel-own-photos #li-" + t + " img").addClass("own");
|
|
$(".fancybox-inner #upload-response").html(data);
|
|
$(".fancybox-inner").unmask("");
|
|
});
|
|
});
|
|
}); |