Initial commit - Media.RCL
This commit is contained in:
Vendored
+304
@@ -0,0 +1,304 @@
|
||||
/*!
|
||||
* Cropper.js v1.6.1
|
||||
* https://fengyuanchen.github.io/cropperjs
|
||||
*
|
||||
* Copyright 2015-present Chen Fengyuan
|
||||
* Released under the MIT license
|
||||
*
|
||||
* Date: 2023-09-17T03:44:17.565Z
|
||||
*/
|
||||
.cropper-container {
|
||||
direction: ltr;
|
||||
font-size: 0;
|
||||
line-height: 0;
|
||||
position: relative;
|
||||
-ms-touch-action: none;
|
||||
touch-action: none;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none
|
||||
}
|
||||
|
||||
.cropper-container img {
|
||||
backface-visibility: hidden;
|
||||
display: block;
|
||||
height: 100%;
|
||||
image-orientation: 0deg;
|
||||
max-height: none !important;
|
||||
max-width: none !important;
|
||||
min-height: 0 !important;
|
||||
min-width: 0 !important;
|
||||
width: 100%
|
||||
}
|
||||
|
||||
.cropper-canvas,
|
||||
.cropper-crop-box,
|
||||
.cropper-drag-box,
|
||||
.cropper-modal,
|
||||
.cropper-wrap-box {
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0
|
||||
}
|
||||
|
||||
.cropper-canvas,
|
||||
.cropper-wrap-box {
|
||||
overflow: hidden
|
||||
}
|
||||
|
||||
.cropper-drag-box {
|
||||
background-color: #fff;
|
||||
opacity: 0
|
||||
}
|
||||
|
||||
.cropper-modal {
|
||||
background-color: #000;
|
||||
opacity: .5
|
||||
}
|
||||
|
||||
.cropper-view-box {
|
||||
display: block;
|
||||
height: 100%;
|
||||
outline: 1px solid #39f;
|
||||
outline-color: rgba(51, 153, 255, .75);
|
||||
overflow: hidden;
|
||||
width: 100%
|
||||
}
|
||||
|
||||
.cropper-dashed {
|
||||
border: 0 dashed #eee;
|
||||
display: block;
|
||||
opacity: .5;
|
||||
position: absolute
|
||||
}
|
||||
|
||||
.cropper-dashed.dashed-h {
|
||||
border-bottom-width: 1px;
|
||||
border-top-width: 1px;
|
||||
height: 33.33333%;
|
||||
left: 0;
|
||||
top: 33.33333%;
|
||||
width: 100%
|
||||
}
|
||||
|
||||
.cropper-dashed.dashed-v {
|
||||
border-left-width: 1px;
|
||||
border-right-width: 1px;
|
||||
height: 100%;
|
||||
left: 33.33333%;
|
||||
top: 0;
|
||||
width: 33.33333%
|
||||
}
|
||||
|
||||
.cropper-center {
|
||||
display: block;
|
||||
height: 0;
|
||||
left: 50%;
|
||||
opacity: .75;
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
width: 0
|
||||
}
|
||||
|
||||
.cropper-center:after,
|
||||
.cropper-center:before {
|
||||
background-color: #eee;
|
||||
content: " ";
|
||||
display: block;
|
||||
position: absolute
|
||||
}
|
||||
|
||||
.cropper-center:before {
|
||||
height: 1px;
|
||||
left: -3px;
|
||||
top: 0;
|
||||
width: 7px
|
||||
}
|
||||
|
||||
.cropper-center:after {
|
||||
height: 7px;
|
||||
left: 0;
|
||||
top: -3px;
|
||||
width: 1px
|
||||
}
|
||||
|
||||
.cropper-face,
|
||||
.cropper-line,
|
||||
.cropper-point {
|
||||
display: block;
|
||||
height: 100%;
|
||||
opacity: .1;
|
||||
position: absolute;
|
||||
width: 100%
|
||||
}
|
||||
|
||||
.cropper-face {
|
||||
background-color: #fff;
|
||||
left: 0;
|
||||
top: 0
|
||||
}
|
||||
|
||||
.cropper-line {
|
||||
background-color: #39f
|
||||
}
|
||||
|
||||
.cropper-line.line-e {
|
||||
cursor: ew-resize;
|
||||
right: -3px;
|
||||
top: 0;
|
||||
width: 5px
|
||||
}
|
||||
|
||||
.cropper-line.line-n {
|
||||
cursor: ns-resize;
|
||||
height: 5px;
|
||||
left: 0;
|
||||
top: -3px
|
||||
}
|
||||
|
||||
.cropper-line.line-w {
|
||||
cursor: ew-resize;
|
||||
left: -3px;
|
||||
top: 0;
|
||||
width: 5px
|
||||
}
|
||||
|
||||
.cropper-line.line-s {
|
||||
bottom: -3px;
|
||||
cursor: ns-resize;
|
||||
height: 5px;
|
||||
left: 0
|
||||
}
|
||||
|
||||
.cropper-point {
|
||||
background-color: #39f;
|
||||
height: 5px;
|
||||
opacity: .75;
|
||||
width: 5px
|
||||
}
|
||||
|
||||
.cropper-point.point-e {
|
||||
cursor: ew-resize;
|
||||
margin-top: -3px;
|
||||
right: -3px;
|
||||
top: 50%
|
||||
}
|
||||
|
||||
.cropper-point.point-n {
|
||||
cursor: ns-resize;
|
||||
left: 50%;
|
||||
margin-left: -3px;
|
||||
top: -3px
|
||||
}
|
||||
|
||||
.cropper-point.point-w {
|
||||
cursor: ew-resize;
|
||||
left: -3px;
|
||||
margin-top: -3px;
|
||||
top: 50%
|
||||
}
|
||||
|
||||
.cropper-point.point-s {
|
||||
bottom: -3px;
|
||||
cursor: s-resize;
|
||||
left: 50%;
|
||||
margin-left: -3px
|
||||
}
|
||||
|
||||
.cropper-point.point-ne {
|
||||
cursor: nesw-resize;
|
||||
right: -3px;
|
||||
top: -3px
|
||||
}
|
||||
|
||||
.cropper-point.point-nw {
|
||||
cursor: nwse-resize;
|
||||
left: -3px;
|
||||
top: -3px
|
||||
}
|
||||
|
||||
.cropper-point.point-sw {
|
||||
bottom: -3px;
|
||||
cursor: nesw-resize;
|
||||
left: -3px
|
||||
}
|
||||
|
||||
.cropper-point.point-se {
|
||||
bottom: -3px;
|
||||
cursor: nwse-resize;
|
||||
height: 20px;
|
||||
opacity: 1;
|
||||
right: -3px;
|
||||
width: 20px
|
||||
}
|
||||
|
||||
@media (min-width:768px) {
|
||||
.cropper-point.point-se {
|
||||
height: 15px;
|
||||
width: 15px
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width:992px) {
|
||||
.cropper-point.point-se {
|
||||
height: 10px;
|
||||
width: 10px
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width:1200px) {
|
||||
.cropper-point.point-se {
|
||||
height: 5px;
|
||||
opacity: .75;
|
||||
width: 5px
|
||||
}
|
||||
}
|
||||
|
||||
.cropper-point.point-se:before {
|
||||
background-color: #39f;
|
||||
bottom: -50%;
|
||||
content: " ";
|
||||
display: block;
|
||||
height: 200%;
|
||||
opacity: 0;
|
||||
position: absolute;
|
||||
right: -50%;
|
||||
width: 200%
|
||||
}
|
||||
|
||||
.cropper-invisible {
|
||||
opacity: 0
|
||||
}
|
||||
|
||||
.cropper-bg {
|
||||
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC")
|
||||
}
|
||||
|
||||
.cropper-hide {
|
||||
display: block;
|
||||
height: 0;
|
||||
position: absolute;
|
||||
width: 0
|
||||
}
|
||||
|
||||
.cropper-hidden {
|
||||
display: none !important
|
||||
}
|
||||
|
||||
.cropper-move {
|
||||
cursor: move
|
||||
}
|
||||
|
||||
.cropper-crop {
|
||||
cursor: crosshair
|
||||
}
|
||||
|
||||
.cropper-disabled .cropper-drag-box,
|
||||
.cropper-disabled .cropper-face,
|
||||
.cropper-disabled .cropper-line,
|
||||
.cropper-disabled .cropper-point {
|
||||
cursor: not-allowed
|
||||
}
|
||||
@@ -0,0 +1,112 @@
|
||||
|
||||
var modal;
|
||||
var cropper;
|
||||
var myDropzone;
|
||||
var dropzone;
|
||||
var cropped;
|
||||
var croppedImage;
|
||||
|
||||
function startCropper() {
|
||||
console.log("startcropper")
|
||||
dropzone = document.getElementById('dropzone')
|
||||
cropped = document.getElementById('cropped')
|
||||
croppedImage = document.getElementById('cropped-image')
|
||||
initTingle();
|
||||
|
||||
Dropzone.autoDiscover = false
|
||||
myDropzone = new Dropzone("div#dropzone", {
|
||||
url: "test",
|
||||
maxFiles: 1,
|
||||
autoProcessQueue: false,
|
||||
addedfile: file => {
|
||||
myDropzone.removeAllFiles();
|
||||
modal.open();
|
||||
openCropper(file)
|
||||
},
|
||||
maxfilesexceeded: () => {
|
||||
console.log("max File Exceeded")
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function openCropper(file) {
|
||||
|
||||
var pic = new FileReader();
|
||||
pic.readAsDataURL(file)
|
||||
console.log(file)
|
||||
if (cropper !== undefined) {
|
||||
cropper.destroy();
|
||||
}
|
||||
|
||||
pic.onload = function () {
|
||||
image.src = pic.result
|
||||
cropper = new Cropper(image, {
|
||||
aspectRatio: 16 / 9,
|
||||
crop(event) {
|
||||
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function initTingle() {
|
||||
modal = new tingle.modal({
|
||||
footer: true,
|
||||
stickyFooter: false,
|
||||
closeMethods: ['button', 'escape'],
|
||||
closeLabel: "Close",
|
||||
cssClass: ['custom-class-1', 'custom-class-2'],
|
||||
onOpen: function () {
|
||||
},
|
||||
onClose: function () {
|
||||
|
||||
},
|
||||
beforeClose: function () {
|
||||
// here's goes some logic
|
||||
// e.g. save content before closing the modal
|
||||
|
||||
return true; // close the modal
|
||||
return false; // nothing happens
|
||||
},
|
||||
|
||||
});
|
||||
|
||||
// set content
|
||||
modal.setContent(`<div><img id="image" class="w-full block " /></div>`);
|
||||
|
||||
// add a button
|
||||
modal.addFooterBtn('Button label', 'tingle-btn tingle-btn--primary', function () {
|
||||
crop();
|
||||
|
||||
modal.close();
|
||||
});
|
||||
|
||||
// add another button
|
||||
modal.addFooterBtn('Dangerous action !', 'tingle-btn tingle-btn--danger', function () {
|
||||
// here goes some logic
|
||||
modal.close();
|
||||
|
||||
});
|
||||
|
||||
// open modal
|
||||
|
||||
}
|
||||
|
||||
function crop() {
|
||||
croppedImage.src = cropper.getCroppedCanvas().toDataURL('image/jpeg')
|
||||
|
||||
dropzone.classList.toggle("hidden");
|
||||
cropped.classList.toggle("hidden");
|
||||
|
||||
return croppedImage.src;
|
||||
}
|
||||
|
||||
function removeCropped() {
|
||||
croppedImage.removeAttribute('src')
|
||||
|
||||
dropzone.classList.toggle("hidden");
|
||||
cropped.classList.toggle("hidden");
|
||||
}
|
||||
|
||||
Vendored
+19
File diff suppressed because one or more lines are too long
@@ -0,0 +1,79 @@
|
||||
class CropperInterop {
|
||||
static initCropper(imgId, options, dotNetObject) {
|
||||
const image = document.getElementById(imgId);
|
||||
if (!image) return;
|
||||
|
||||
// Clean up existing instance if any
|
||||
if (image.cropper) {
|
||||
image.cropper.destroy();
|
||||
}
|
||||
|
||||
new Cropper(image, {
|
||||
...options,
|
||||
ready() {
|
||||
// Optional: notify dotnet that it's ready
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
static getCroppedCanvasData(imgId) {
|
||||
const image = document.getElementById(imgId);
|
||||
if (!image || !image.cropper) return null;
|
||||
|
||||
return image.cropper.getCroppedCanvas().toDataURL();
|
||||
}
|
||||
|
||||
static setAspectRatio(imgId, ratio) {
|
||||
const image = document.getElementById(imgId);
|
||||
if (!image || !image.cropper) return;
|
||||
|
||||
image.cropper.setAspectRatio(ratio);
|
||||
}
|
||||
|
||||
static destroy(imgId) {
|
||||
const image = document.getElementById(imgId);
|
||||
if (image && image.cropper) {
|
||||
image.cropper.destroy();
|
||||
}
|
||||
}
|
||||
|
||||
static setFullWidth(imgId) {
|
||||
const image = document.getElementById(imgId);
|
||||
if (!image || !image.cropper) return;
|
||||
const data = image.cropper.getImageData();
|
||||
// Use setData for natural dimensions
|
||||
image.cropper.setData({ x: 0, width: data.naturalWidth });
|
||||
}
|
||||
|
||||
static setFullHeight(imgId) {
|
||||
const image = document.getElementById(imgId);
|
||||
if (!image || !image.cropper) return;
|
||||
const data = image.cropper.getImageData();
|
||||
// Use setData for natural dimensions
|
||||
image.cropper.setData({ y: 0, height: data.naturalHeight });
|
||||
}
|
||||
}
|
||||
|
||||
window.initCropper = (imgId, options, dotNetHelper) => {
|
||||
CropperInterop.initCropper(imgId, options, dotNetHelper);
|
||||
};
|
||||
|
||||
window.getCroppedImage = (imgId) => {
|
||||
return CropperInterop.getCroppedCanvasData(imgId);
|
||||
};
|
||||
|
||||
window.setCropperAspectRatio = (imgId, ratio) => {
|
||||
CropperInterop.setAspectRatio(imgId, ratio);
|
||||
};
|
||||
|
||||
window.destroyCropper = (imgId) => {
|
||||
CropperInterop.destroy(imgId);
|
||||
};
|
||||
|
||||
window.setCropperFullWidth = (imgId) => {
|
||||
CropperInterop.setFullWidth(imgId);
|
||||
};
|
||||
|
||||
window.setCropperFullHeight = (imgId) => {
|
||||
CropperInterop.setFullHeight(imgId);
|
||||
};
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
/*!
|
||||
* Cropper.js v1.5.13
|
||||
* https://fengyuanchen.github.io/cropperjs
|
||||
*
|
||||
* Copyright 2015-present Chen Fengyuan
|
||||
* Released under the MIT license
|
||||
*
|
||||
* Date: 2022-11-20T05:30:43.444Z
|
||||
*/.cropper-container{direction:ltr;font-size:0;line-height:0;position:relative;-ms-touch-action:none;touch-action:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.cropper-container img{-webkit-backface-visibility:hidden;backface-visibility:hidden;display:block;height:100%;image-orientation:0deg;max-height:none!important;max-width:none!important;min-height:0!important;min-width:0!important;width:100%}.cropper-canvas,.cropper-crop-box,.cropper-drag-box,.cropper-modal,.cropper-wrap-box{bottom:0;left:0;position:absolute;right:0;top:0}.cropper-canvas,.cropper-wrap-box{overflow:hidden}.cropper-drag-box{background-color:#fff;opacity:0}.cropper-modal{background-color:#000;opacity:.5}.cropper-view-box{display:block;height:100%;outline:1px solid #39f;outline-color:rgba(51,153,255,.75);overflow:hidden;width:100%}.cropper-dashed{border:0 dashed #eee;display:block;opacity:.5;position:absolute}.cropper-dashed.dashed-h{border-bottom-width:1px;border-top-width:1px;height:33.33333%;left:0;top:33.33333%;width:100%}.cropper-dashed.dashed-v{border-left-width:1px;border-right-width:1px;height:100%;left:33.33333%;top:0;width:33.33333%}.cropper-center{display:block;height:0;left:50%;opacity:.75;position:absolute;top:50%;width:0}.cropper-center:after,.cropper-center:before{background-color:#eee;content:" ";display:block;position:absolute}.cropper-center:before{height:1px;left:-3px;top:0;width:7px}.cropper-center:after{height:7px;left:0;top:-3px;width:1px}.cropper-face,.cropper-line,.cropper-point{display:block;height:100%;opacity:.1;position:absolute;width:100%}.cropper-face{background-color:#fff;left:0;top:0}.cropper-line{background-color:#39f}.cropper-line.line-e{cursor:ew-resize;right:-3px;top:0;width:5px}.cropper-line.line-n{cursor:ns-resize;height:5px;left:0;top:-3px}.cropper-line.line-w{cursor:ew-resize;left:-3px;top:0;width:5px}.cropper-line.line-s{bottom:-3px;cursor:ns-resize;height:5px;left:0}.cropper-point{background-color:#39f;height:5px;opacity:.75;width:5px}.cropper-point.point-e{cursor:ew-resize;margin-top:-3px;right:-3px;top:50%}.cropper-point.point-n{cursor:ns-resize;left:50%;margin-left:-3px;top:-3px}.cropper-point.point-w{cursor:ew-resize;left:-3px;margin-top:-3px;top:50%}.cropper-point.point-s{bottom:-3px;cursor:s-resize;left:50%;margin-left:-3px}.cropper-point.point-ne{cursor:nesw-resize;right:-3px;top:-3px}.cropper-point.point-nw{cursor:nwse-resize;left:-3px;top:-3px}.cropper-point.point-sw{bottom:-3px;cursor:nesw-resize;left:-3px}.cropper-point.point-se{bottom:-3px;cursor:nwse-resize;height:20px;opacity:1;right:-3px;width:20px}@media (min-width:768px){.cropper-point.point-se{height:15px;width:15px}}@media (min-width:992px){.cropper-point.point-se{height:10px;width:10px}}@media (min-width:1200px){.cropper-point.point-se{height:5px;opacity:.75;width:5px}}.cropper-point.point-se:before{background-color:#39f;bottom:-50%;content:" ";display:block;height:200%;opacity:0;position:absolute;right:-50%;width:200%}.cropper-invisible{opacity:0}.cropper-bg{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC")}.cropper-hide{display:block;height:0;position:absolute;width:0}.cropper-hidden{display:none!important}.cropper-move{cursor:move}.cropper-crop{cursor:crosshair}.cropper-disabled .cropper-drag-box,.cropper-disabled .cropper-face,.cropper-disabled .cropper-line,.cropper-disabled .cropper-point{cursor:not-allowed}
|
||||
+10
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user