diff --git a/composer.json b/composer.json
index ecd5236..9b94e5e 100644
--- a/composer.json
+++ b/composer.json
@@ -2,7 +2,10 @@
"name": "laravel/laravel",
"type": "project",
"description": "The Laravel Framework.",
- "keywords": ["framework", "laravel"],
+ "keywords": [
+ "framework",
+ "laravel"
+ ],
"license": "MIT",
"require": {
"php": "^7.3|^8.0",
@@ -18,7 +21,6 @@
"laravel/tinker": "^2.5",
"laravel/ui": "^3.4",
"mews/purifier": "^3.3",
- "slevomat/coding-standard": "^7.2",
"spatie/laravel-mix-preload": "^1.3"
},
"require-dev": {
@@ -27,7 +29,8 @@
"laravel/sail": "^1.0.1",
"mockery/mockery": "^1.4.4",
"nunomaduro/collision": "^5.10",
- "phpunit/phpunit": "^9.5.10"
+ "phpunit/phpunit": "^9.5.10",
+ "slevomat/coding-standard": "^7.2"
},
"autoload": {
"psr-4": {
diff --git a/resources/ts/back/CkUploadAdaptater.ts b/resources/ts/back/CkUploadAdaptater.ts
new file mode 100644
index 0000000..3661758
--- /dev/null
+++ b/resources/ts/back/CkUploadAdaptater.ts
@@ -0,0 +1,82 @@
+import axios, { CancelTokenSource } from "axios";
+import route from "../modules/route";
+
+class CKUploadAdaptater {
+ route: string | null = "";
+ cancel: CancelTokenSource | null = null;
+
+ // @ts-ignore
+ constructor(loader) {
+ // The file loader instance to use during the upload.
+ // @ts-ignore
+ this.loader = loader;
+ this.cancel = axios.CancelToken.source();
+ }
+
+ // Starts the upload process.
+ upload() {
+ // @ts-ignore
+ return this.loader.file.then(
+ (file: File) =>
+ new Promise((resolve, reject) => {
+ this._initRequest();
+ this._sendRequest(file, resolve, reject);
+ })
+ );
+ }
+
+ // Aborts the upload process.
+ abort() {
+ if (this.cancel) {
+ this.cancel.cancel();
+ }
+ }
+
+ // Initializes the XMLHttpRequest object using the URL passed to the constructor.
+ _initRequest() {
+ this.route = route.methods.route("crud-policies.upload");
+ }
+
+ // Prepares the data and sends the request.
+ _sendRequest(
+ file: File,
+ resolve: (value: unknown) => void,
+ reject: (reason?: any) => void
+ ) {
+ // Prepare the form data.
+ const data = new FormData();
+ data.append("upload", file);
+ const headers = Object.assign(
+ {},
+ window.axios ? window.axios.defaults.headers.common : {}
+ );
+ headers["Content-Type"] = "multipart/form-data";
+
+ if (!this.route) {
+ throw new Error("Route is not set");
+ }
+
+ axios
+ .post(this.route, data, {
+ withCredentials: true,
+ headers: headers,
+ onUploadProgress: (evt) => {
+ // @ts-ignore
+ this.loader.uploadTotal = evt.total;
+ // @ts-ignore
+ this.loader.uploaded = evt.loaded;
+ },
+ })
+ .then((response) => {
+ resolve({
+ default: response.data.url,
+ });
+ })
+ .catch((error) => {
+ console.error(error);
+ reject("Le fichier à été marbré");
+ });
+ }
+}
+
+export { CKUploadAdaptater };
diff --git a/resources/ts/components/bo/CkEditorBoComponent.vue b/resources/ts/components/bo/CkEditorBoComponent.vue
index 6cb5054..7455d2a 100644
--- a/resources/ts/components/bo/CkEditorBoComponent.vue
+++ b/resources/ts/components/bo/CkEditorBoComponent.vue
@@ -17,6 +17,7 @@
import { defineComponent, ref } from "vue";
import trans from "../../modules/trans";
import "./../../../js/vendor/ckeditor/build/ckeditor";
+import { CKUploadAdaptater } from "../../back/CkUploadAdaptater";
export default defineComponent({
mixins: [trans],
@@ -71,6 +72,16 @@ export default defineComponent({
wordCounter = this.$refs.wordCounter as HTMLElement;
// @ts-ignore
ClassicEditor.create(ckeditor, {
+ extraPlugins: [
+ // @ts-ignore
+ (editor) => {
+ // @ts-ignore
+ editor.plugins.get("FileRepository").createUploadAdapter = (loader) => {
+ // Configure the URL to the upload script in your back-end here!
+ return new CKUploadAdaptater(loader);
+ };
+ },
+ ],
wordCount: {
container: wordCounter,
// @ts-ignore
@@ -125,7 +136,7 @@ export default defineComponent({
"undo",
"redo",
"|",
- "laravelFileManager",
+ "insertImage",
"mediaEmbed",
"blockQuote",
"|",
diff --git a/resources/ts/components/bo/ImageInputComponent.vue b/resources/ts/components/bo/ImageInputComponent.vue
index a64854a..5b9f732 100644
--- a/resources/ts/components/bo/ImageInputComponent.vue
+++ b/resources/ts/components/bo/ImageInputComponent.vue
@@ -89,7 +89,10 @@
v-if="_value"
:id="`PreviewHelp${_id}`"
class="form-text text-muted d-block"
- >{{ __("Prévisualisation de l'image") }}{{ __("Prévisualisation de l'image")
+ }} {{ humanFileSize(_originalFile.size) }}
= BYTES_PER_KB && u < UNITS.length - 1) {
+ size /= BYTES_PER_KB;
+ ++u;
+ }
+
+ return new Intl.NumberFormat([], {
+ style: "unit",
+ unit: UNITS[u],
+ unitDisplay: "short",
+ maximumFractionDigits: 1,
+ }).format(size);
+ },
},
});
@@ -743,12 +768,6 @@ export default defineComponent({
left: 50%;
transform: translateX(-50%) translateY(-50%);
}
-
- @include media-breakpoint-up(md) {
- & > div {
- position: absolute;
- }
- }
}
input.rightAligned {
direction: ltr !important;
diff --git a/resources/ts/index.d.ts b/resources/ts/index.d.ts
index e97ee8b..640ff80 100644
--- a/resources/ts/index.d.ts
+++ b/resources/ts/index.d.ts
@@ -26,7 +26,7 @@ type Model = Record<
interface NestedModelInterface extends Model {}
type NestedStringList = NestedStringListInterface | StringList | string;
-type NestedNumberList = NestedStringListInterface | NumberList | number;
+type NestedNumberList = NestedNumberListInterface | NumberList | number;
type ModelList = Array;
declare global {
diff --git a/webpack.mix.js b/webpack.mix.js
index 222f6a1..36efb78 100644
--- a/webpack.mix.js
+++ b/webpack.mix.js
@@ -4,8 +4,8 @@ const mix = require('laravel-mix')
require('laravel-mix-polyfill')
require('laravel-mix-clean')
-let assetDir = 'assets'
-let polyfill = {
+const assetDir = 'assets'
+const polyfill = {
enabled: true,
bugfixes: true,
useBuiltIns: "usage",