base_ui/components/other/TahrirMyTinyMce.vue
2025-02-01 13:04:55 +03:30

352 lines
12 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="w-100">
<editor
tinymceScriptSrc="/tinymce/tinymce.min.js"
ref="global-tiny-editor"
output-format="html"
v-model="editorData"
:init="tinyMceConfiguration"
>
</editor>
<div class="my-3" v-if="hideButton">
<button-component
:class="$attrs.hideButton"
@click="save"
type="button"
classes="btn-primary"
buttonText="ذخیره"
title="ذخیره"
:buttonLoading="buttonLoading"
></button-component>
</div>
</div>
</template>
<script>
export default {
mounted() {
// this.showTiny = true
// this.$nextTick(() => {
this.editorData = this.tinyText;
var n = Math.floor(Math.random() * 11);
var k = Math.floor(Math.random() * 1000000);
var m = String.fromCharCode(n) + k;
this.api_key = m;
// })
},
props: {
hideButton:{
default:true
},
tinyText: {
default: "",
},
parentButtonLoading: {
default: false,
},
},
data() {
return {
buttonLoading: this.parentButtonLoading,
editorData: "",
api_key: "",
tinyMceConfiguration: {
selector: "#textarea",
apiKey: "pnxkbox1zj5zaghgi1dolyi9ch28kr9ohnvc1qz3beeqdfwg",
menubar: false,
statusbar: false,
language: "fa_IR",
language_url: "/tinymce/langs/fa_IR.js",
directionality: "rtl",
baseUel: "/",
theme_url: "/tinymce/themes/silver/theme.min.js",
toolbar_sticky: true,
force_br_newlines: false,
force_p_newlines: false,
//forced_root_block : 'p',
setup: function(editor) {
if (editor) {
editor.on("init", function(e) {});
editor.on("ScrollWindow", function(e) {
//var y1 = editor.getWin().pageYOffset;
//var sctop = $(editor.getContainer()).scrollTop();
if ("js_ScrollChanged" in window.external) {
window.external.js_ScrollChanged(0);
}
});
editor.on("Paste", function(e) {
if ("js_ScrollHeightChanged" in window.external) {
window.external.js_ScrollHeightChanged();
}
});
editor.on("DblClick", function(e) {
if (e.ctrlKey) selectParag(editor);
else selectWord(editor);
});
editor.on("SelectionChange", function(e) {
//if ('js_SelectionChange' in window.external){
// window.external.js_SelectionChange();
//}
});
editor.on("NodeChange", function(e) {
if ("js_NodeChange" in window.external) {
wlast = "";
window.external.js_NodeChange(e.element.innerText);
}
});
editor.on("mousedown", function(e) {
if ("js_mousedown" in window.external) {
window.external.js_mousedown();
}
});
editor.on("keydown", function(e) {
if ("js_keydown" in window.external) {
var handeled = window.external.js_keydown(e.ctrlKey, e.keyCode);
if (handeled) {
e.preventDefault();
return false;
}
}
if (checkPairedChar(editor, e)) {
//tinymce.execCommand('ayahautocomplate',false,'وتد');
return false;
}
endingMarkDowns(editor, e);
});
editor.on("keyup", function(e) {
if (editor.selection) checkMarkDown(editor, e);
//setingTag2(editor, e);
});
editor.on("keypress", function(e) {
if (checkHalfSpace(editor, e)) {
return false;
} else if (checkNemayah(editor, e)) {
} else if (wlast != "") {
if ("js_AutoComplete" in window.external) {
window.external.js_AutoComplete(wlast, indexlast);
}
}
});
editor.on("change", function(e) {
//console.log('Editor contents was changed.');
if ("js_Changed" in window.external) {
window.external.js_Changed("change");
}
});
editor.on("redo", function(e) {
//console.log('Editor contents was changed.');
if ("js_Changed" in window.external) {
window.external.js_Changed("redo");
}
});
editor.on("undo", function(e) {
//console.log('Editor contents was changed.');
if ("js_Changed" in window.external) {
window.external.js_Changed("undo");
}
});
editor.ui.registry.addMenuItem("DeleteErab", {
text: "Delete erab paragraph",
context: "tools",
shortcut: "Alt+5",
onAction: function() {
removeContentErab(editor);
},
});
editor.ui.registry.addMenuItem("ParseHadith", {
text: "Parse hadith format",
context: "tools",
shortcut: "Alt+6",
onAction: function() {
parseHadith(editor);
},
});
// editor.ui.registry.addMenuItem('MenuTextOption', {
// text: 'Text option',
// context: 'tools',
// getSubmenuItems: function () {
// return [ {
// text: "Delete erab",
// onclick: function () {
// removeContentErab(editor);
// }
// }, {
// text: "Parse hadith format",
// onclick: function () {
// parseHadith(editor);
// }
// }]
// }
// });
}
},
block_formats:
"متن عادی=p; عنوان1=h1; عنوان 2=h2; عنوان 3=h3; عنوان 4=h4; عنوان 5=h5; عنوان 6=h6",
plugins: [
"advlist autolink lists link image imagetools charmap print preview anchor",
"searchreplace visualblocks code fullscreen",
"insertdatetime media table contextmenu paste imagetools wordcount autoresize searchreplace help quickbars",
],
external_plugins: {
hadithyab: "/tinymce/pluginsEx/hadithyab/plugin.min.js",
tchecklist: "/tinymce/pluginsEx/tchecklist/plugin.min.js",
comment: "/tinymce/pluginsEx/comment/plugin.min.js",
footnotes: "/tinymce/pluginsEx/footnotes/plugin.min.js",
ayahautocomplate: "/tinymce/pluginsEx/ayahautocomplate/plugin.min.js",
},
toolbar:
"searchreplace undo redo copy paste | formatselect styleselect | bold italic underline strikethrough | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image table | footnotes code hadithyab help",
contextmenu:
"copy paste pastetext removeformat | DeleteErab ParseHadith | footnotes link image",
contextmenu_never_use_native: true,
quickbars_insert_toolbar: false,
//quickbars_insert_toolbar: 'quicktable image media codesample',
quickbars_selection_toolbar:
"bold underline | forecolor backcolor | bullist numlist | quicklink comment",
style_formats: [
{ title: "آیه", inline: "span", classes: "tayah" },
{ title: "حدیث", inline: "span", classes: "thadith" },
{ title: "سند", inline: "span", classes: "tsanad" },
{ title: "اصطلاح", inline: "span", classes: "tterm" },
{ title: "برچسب", inline: "span", classes: "ttag" },
],
paste_preprocess: function(plugin, args) {
args.content = safePaste(args.content);
},
paste_postprocess: function(plugin, args) {
//console.log(args.node);
//args.node.setAttribute('id', '42');
},
paste_tab_spaces: 2,
init_instance_callback: function(editor) {
editor.shortcuts.add("alt+1", "درج علامت آیه", function() {
tinymce.activeEditor.formatter.apply("ayah");
unSelect(editor);
}),
editor.shortcuts.add("alt+2", "درج علامت حدیث", function() {
tinymce.activeEditor.formatter.apply("hadith");
unSelect(editor);
}),
editor.shortcuts.add("alt+3", "درج علامت سند", function() {
tinymce.activeEditor.formatter.apply("sanad");
unSelect(editor);
}),
editor.shortcuts.add("alt+4", "درج علامت اصطلاح", function() {
tinymce.activeEditor.formatter.apply("term");
unSelect(editor);
}),
editor.shortcuts.add("alt+5", "حذف اعراب متن جاری", function() {
removeContentErab(editor);
}),
editor.shortcuts.add(
"alt+6",
"تحلیل خودکار سند و حدیث",
function() {
parseHadith(editor);
}
),
editor.shortcuts.add("f3", "درج علامت برچسب", function() {
tinymce.activeEditor.formatter.apply("tag");
}),
editor.shortcuts.add("ctrl+alt+f", "درج پاورقی جدید", function() {
tinymce.execCommand("footnotes", false, "");
}),
editor.shortcuts.add("ctrl+alt+c", "درج حاشیه جدید", function() {
tinymce.execCommand("comment", false, "");
});
},
formats: {
alignleft: {
selector: "p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img",
classes: "left",
},
aligncenter: {
selector: "p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img",
classes: "center",
},
alignright: {
selector: "p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img",
classes: "right",
},
alignfull: {
selector: "p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img",
classes: "full",
},
bold: { inline: "span", classes: "tbold" },
italic: { inline: "span", classes: "titalic" },
underline: { inline: "span", classes: "tunderline", exact: true },
strikethrough: { inline: "span", classes: "tstrikethrough" },
ayah: { title: "آیه", inline: "span", classes: "tayah" },
hadith: { title: "حدیث", inline: "span", classes: "thadith" },
sanad: { title: "سند", inline: "span", classes: "tsanad" },
term: { title: "اصطلاح", inline: "span", classes: "tterm" },
tag: { title: "برچسب", inline: "span", classes: "ttag" },
},
content_css: "tinystyle.css",
imagetools_toolbar:
"rotateleft rotateright | flipv fliph | editimage imageoptions",
//برای افزودن امکان درج تصویر از شخصی
image_title: true,
automatic_uploads: true,
file_picker_types: "image",
file_picker_callback: function(cb) {
var input = document.createElement("input");
input.setAttribute("type", "file");
input.setAttribute("accept", "image/*");
input.onchange = function() {
var file = this.files[0];
var reader = new FileReader();
reader.onload = function() {
var id = "blobid" + new Date().getTime();
var blobCache = tinymce.activeEditor.editorUpload.blobCache;
var base64 = reader.result.split(",")[1];
var blobInfo = blobCache.create(id, file, base64);
blobCache.add(blobInfo);
cb(blobInfo.blobUri(), { title: file.name });
};
reader.readAsDataURL(file);
};
input.click();
},
content_style:
"body { font-family:Sahel,Tahoma,Arial,sans-serif; font-size:16px }",
},
};
},
computed: {
editorModel: {
get() {
return this.editorData;
},
set(value) {
this.editorData = value;
},
},
},
methods: {
save() {
if (this.buttonLoading) return;
this.buttonLoading = true;
this.$emit("on-save", this.editorData);
},
},
};
</script>
<style></style>