Ajout de script dans Tinymce

This commit is contained in:
fredtempez 2021-01-03 15:09:53 +01:00
parent 31981a39e6
commit 03b9ee2094
2 changed files with 306 additions and 299 deletions

View File

@ -8,9 +8,10 @@ Modifications :
- Sauvegarde des fichiers de données après un effacement et une écriture. - Sauvegarde des fichiers de données après un effacement et une écriture.
- Google Analytics, option d'anonymisation. - Google Analytics, option d'anonymisation.
- Procédure de connexion : les erreurs de captcha sont comptabilisées comme des échecs, allégement des messages d'information. - Procédure de connexion : les erreurs de captcha sont comptabilisées comme des échecs, allégement des messages d'information.
- TinyMCE : ajout des scripts possibles.
Correction : Correction :
- Notification de commentaire, nom de la page incorrect. - Notification de commentaire, remplacement du nom de la page par le titre de l'article.
- Thème : désactivation du changement de couleur du texte au survol d'un bouton standard. - Thème : couleur du texte au survol d'un bouton standard.
## Version 10.3.12 ## Version 10.3.12
Correction : Correction :

View File

@ -1,297 +1,303 @@
/** /**
* Initialisation de TinyMCE * Initialisation de TinyMCE
*/ */
tinymce.init({ tinymce.init({
// Classe où appliquer l'éditeur // Classe où appliquer l'éditeur
selector: ".editorWysiwyg", selector: ".editorWysiwyg",
// Aperçu dans le pied de page // Aperçu dans le pied de page
setup:function(ed) { setup:function(ed) {
ed.on('change', function(e) { ed.on('change', function(e) {
if (ed.id === 'themeFooterText') { if (ed.id === 'themeFooterText') {
$("#footerText").html(tinyMCE.get('themeFooterText').getContent()); $("#footerText").html(tinyMCE.get('themeFooterText').getContent());
} }
}); });
}, },
// Langue // Langue
language: "fr_FR", language: "fr_FR",
// Plugins // Plugins
plugins: "advlist anchor autolink autoresize autosave codemirror colorpicker contextmenu fullscreen hr image imagetools link lists media paste searchreplace stickytoolbar tabfocus table template textcolor emoticons nonbreaking", plugins: "advlist anchor autolink autoresize autosave codemirror colorpicker contextmenu fullscreen hr image imagetools link lists media paste searchreplace stickytoolbar tabfocus table template textcolor emoticons nonbreaking",
// Contenu de la barre d'outils // Contenu de la barre d'outils
toolbar: "restoredraft | undo redo | formatselect bold italic underline forecolor backcolor | alignleft aligncenter alignright alignjustify | bullist numlist emoticons | table template | image media link | code fullscreen", toolbar: "restoredraft | undo redo | formatselect bold italic underline forecolor backcolor | alignleft aligncenter alignright alignjustify | bullist numlist emoticons | table template | image media link | code fullscreen",
// Emoticons // Emoticons
emoticons_append: { emoticons_append: {
custom_mind_explode: { custom_mind_explode: {
keywords: ["brain", "mind", "explode", "blown"], keywords: ["brain", "mind", "explode", "blown"],
char: "🤯" char: "🤯"
} }
}, },
// CodeMirror // Autoriser tous les éléments
codemirror: { valid_elements : '*[*]',
indentOnInit: true, // Whether or not to indent code on init. // Autorise l'ajout de script
path: 'codemirror', // Path to CodeMirror distribution extended_valid_elements: "script[language|type|src]",
saveCursorPosition: false, // Insert caret marker // Conserver les styles
config: { // CodeMirror config object keep_styles: false,
/*theme: 'ambiance',*/ // CodeMirror
fullscreen: true, codemirror: {
/*mode: 'application/x-httpd-php',*/ indentOnInit: true, // Whether or not to indent code on init.
indentUnit: 4, path: 'codemirror', // Path to CodeMirror distribution
lineNumbers: true, saveCursorPosition: false, // Insert caret marker
mode: "htmlmixed", config: { // CodeMirror config object
}, /*theme: 'ambiance',*/
jsFiles: [ fullscreen: true,
'mode/php/php.js', /*mode: 'application/x-httpd-php',*/
'mode/css/css.js', indentUnit: 4,
'mode/htmlmixed/htmlmixed.js', lineNumbers: true,
'mode/htmlembedded/htmlembedded.js', mode: "htmlmixed",
'mode/javascript/javascript.js', },
'mode/xml/xml.js', jsFiles: [
'addon/search/searchcursor.js', 'mode/php/php.js',
'addon/search/search.js', 'mode/css/css.js',
], 'mode/htmlmixed/htmlmixed.js',
cssFiles: [ 'mode/htmlembedded/htmlembedded.js',
/*'theme/ambiance.css',*/ 'mode/javascript/javascript.js',
], 'mode/xml/xml.js',
width: 800, // Default value is 800 'addon/search/searchcursor.js',
height: 500 // Default value is 550 'addon/search/search.js',
}, ],
// Cibles de la target cssFiles: [
target_list: [ /*'theme/ambiance.css',*/
{title: 'None', value: ''}, ],
{title: 'Nouvel onglet', value: '_blank'} width: 800, // Default value is 800
], height: 500 // Default value is 550
// Target pour lightbox },
rel_list: [ // Cibles de la target
{title: 'None', value: ''}, target_list: [
{title: 'Une popup (Lity)', value: 'data-lity'}, {title: 'None', value: ''},
{title: 'Une galerie d\'images (SimpleLightbox)', value: 'gallery'} {title: 'Nouvel onglet', value: '_blank'}
], ],
// Titre des image // Target pour lightbox
image_title: true, rel_list: [
// Pages internes {title: 'None', value: ''},
link_list: baseUrl + "core/vendor/tinymce/links.php", {title: 'Une popup (Lity)', value: 'data-lity'},
// Contenu du menu contextuel {title: 'Une galerie d\'images (SimpleLightbox)', value: 'gallery'}
contextmenu: "selectall searchreplace | hr | media image link anchor nonbreaking | insertable cell row column deletetable", ],
// Fichiers CSS à intégrer à l'éditeur // Titre des image
content_css: [ image_title: true,
baseUrl + "core/layout/common.css", // Pages internes
baseUrl + "core/vendor/tinymce/content.css", link_list: baseUrl + "core/vendor/tinymce/links.php",
baseUrl + "site/data/theme.css", // Contenu du menu contextuel
baseUrl + "site/data/custom.css" contextmenu: "selectall searchreplace | hr | media image link anchor nonbreaking | insertable cell row column deletetable",
], // Fichiers CSS à intégrer à l'éditeur
// Classe à ajouter à la balise body dans l'iframe content_css: [
body_class: "editorWysiwyg", baseUrl + "core/layout/common.css",
// Cache les menus baseUrl + "core/vendor/tinymce/content.css",
menubar: true, baseUrl + "site/data/theme.css",
// URL menu contextuel baseUrl + "site/data/custom.css"
link_context_toolbar: true, ],
// Cache la barre de statut // Classe à ajouter à la balise body dans l'iframe
statusbar: false, body_class: "editorWysiwyg",
// Active le copié collé à partir du Web // Cache les menus
paste_data_images: true, menubar: true,
// Active le copié collé à partir du presse papier // URL menu contextuel
paste_filter_drop: false, link_context_toolbar: true,
/* Eviter BLOB à tester // Cache la barre de statut
images_dataimg_filter: function(img) { statusbar: false,
return img.hasAttribute('internal-blob'); // Active le copié collé à partir du Web
},*/ paste_data_images: true,
// Autorise l'ajout de script // Active le copié collé à partir du presse papier
// extended_valid_elements: "script[language|type|src]", paste_filter_drop: false,
// Bloque le dimensionnement des médias (car automatiquement en fullsize avec fitvids pour le responsive) /* Eviter BLOB à tester
media_dimensions: true, images_dataimg_filter: function(img) {
// Désactiver la dimension des images return img.hasAttribute('internal-blob');
image_dimensions: true, },*/
// Active l'onglet avancé lors de l'ajout d'une image // Autorise l'ajout de script
image_advtab: true, // extended_valid_elements: "script[language|type|src]",
// Urls absolues // Bloque le dimensionnement des médias (car automatiquement en fullsize avec fitvids pour le responsive)
relative_urls: false, media_dimensions: true,
// Url de base // Désactiver la dimension des images
document_base_url: baseUrl, image_dimensions: true,
// Gestionnaire de fichiers // Active l'onglet avancé lors de l'ajout d'une image
filemanager_access_key: privateKey, image_advtab: true,
external_filemanager_path: baseUrl + "core/vendor/filemanager/", // Urls absolues
external_plugins: { relative_urls: false,
"filemanager": baseUrl + "core/vendor/filemanager/plugin.min.js" // Url de base
}, document_base_url: baseUrl,
// Thème mobile // Gestionnaire de fichiers
// mobile: { filemanager_access_key: privateKey,
// theme: "mobile", external_filemanager_path: baseUrl + "core/vendor/filemanager/",
// plugins: [ 'autosave', 'lists', 'autolink' ], external_plugins: {
// toolbar: [ 'undo', 'bold', 'italic', 'styleselect' ] "filemanager": baseUrl + "core/vendor/filemanager/plugin.min.js"
//}, },
// Contenu du bouton insérer // Thème mobile
insert_button_items: "anchor hr table", // mobile: {
// Contenu du bouton formats // theme: "mobile",
style_formats: [ // plugins: [ 'autosave', 'lists', 'autolink' ],
{title: "Headers", items: [ // toolbar: [ 'undo', 'bold', 'italic', 'styleselect' ]
{title: "Header 1", format: "h1"}, //},
{title: "Header 2", format: "h2"}, // Contenu du bouton insérer
{title: "Header 3", format: "h3"}, insert_button_items: "anchor hr table",
{title: "Header 4", format: "h4"} // Contenu du bouton formats
]}, style_formats: [
{title: "Inline", items: [ {title: "Headers", items: [
{title: "Bold", icon: "bold", format: "bold"}, {title: "Header 1", format: "h1"},
{title: "Italic", icon: "italic", format: "italic"}, {title: "Header 2", format: "h2"},
{title: "Underline", icon: "underline", format: "underline"}, {title: "Header 3", format: "h3"},
{title: "Strikethrough", icon: "strikethrough", format: "strikethrough"}, {title: "Header 4", format: "h4"}
{title: "Superscript", icon: "superscript", format: "superscript"}, ]},
{title: "Subscript", icon: "subscript", format: "subscript"}, {title: "Inline", items: [
{title: "Code", icon: "code", format: "code"} {title: "Bold", icon: "bold", format: "bold"},
]}, {title: "Italic", icon: "italic", format: "italic"},
{title: "Blocks", items: [ {title: "Underline", icon: "underline", format: "underline"},
{title: "Paragraph", format: "p"}, {title: "Strikethrough", icon: "strikethrough", format: "strikethrough"},
{title: "Blockquote", format: "blockquote"}, {title: "Superscript", icon: "superscript", format: "superscript"},
{title: "Div", format: "div"}, {title: "Subscript", icon: "subscript", format: "subscript"},
{title: "Pre", format: "pre"} {title: "Code", icon: "code", format: "code"}
]}, ]},
{title: "Alignment", items: [ {title: "Blocks", items: [
{title: "Left", icon: "alignleft", format: "alignleft"}, {title: "Paragraph", format: "p"},
{title: "Center", icon: "aligncenter", format: "aligncenter"}, {title: "Blockquote", format: "blockquote"},
{title: "Right", icon: "alignright", format: "alignright"}, {title: "Div", format: "div"},
{title: "Justify", icon: "alignjustify", format: "alignjustify"} {title: "Pre", format: "pre"}
]} ]},
], {title: "Alignment", items: [
// Templates {title: "Left", icon: "alignleft", format: "alignleft"},
templates: [ {title: "Center", icon: "aligncenter", format: "aligncenter"},
{ {title: "Right", icon: "alignright", format: "alignright"},
title: "Bloc de texte", {title: "Justify", icon: "alignjustify", format: "alignjustify"}
url: baseUrl + "core/vendor/tinymce/templates/block.html", ]}
description: "Bloc de texte avec un titre." ],
}, // Templates
{ templates: [
title: "Effet accordéon", {
url: baseUrl + "core/vendor/tinymce/templates/accordion.html", title: "Bloc de texte",
description: "Bloc de texte avec effet accordéon." url: baseUrl + "core/vendor/tinymce/templates/block.html",
}, description: "Bloc de texte avec un titre."
{ },
title: "Grille symétrique : 6 - 6", {
url: baseUrl + "core/vendor/tinymce/templates/col6.html", title: "Effet accordéon",
description: "Grille adaptative sur 12 colonnes, sur mobile elles passent les unes en dessous des autres." url: baseUrl + "core/vendor/tinymce/templates/accordion.html",
}, description: "Bloc de texte avec effet accordéon."
{ },
title: "Grille symétrique : 4 - 4 - 4", {
url: baseUrl + "core/vendor/tinymce/templates/col4.html", title: "Grille symétrique : 6 - 6",
description: "Grille adaptative sur 12 colonnes, sur mobile elles passent les unes en dessous des autres." url: baseUrl + "core/vendor/tinymce/templates/col6.html",
}, description: "Grille adaptative sur 12 colonnes, sur mobile elles passent les unes en dessous des autres."
{ },
title: "Grille symétrique : 3 - 3 - 3 - 3", {
url: baseUrl + "core/vendor/tinymce/templates/col3.html", title: "Grille symétrique : 4 - 4 - 4",
description: "Grille adaptative sur 12 colonnes, sur mobile elles passent les unes en dessous des autres." url: baseUrl + "core/vendor/tinymce/templates/col4.html",
}, description: "Grille adaptative sur 12 colonnes, sur mobile elles passent les unes en dessous des autres."
{ },
title: "Grille asymétrique : 4 - 8", {
url: baseUrl + "core/vendor/tinymce/templates/col4-8.html", title: "Grille symétrique : 3 - 3 - 3 - 3",
description: "Grille adaptative sur 12 colonnes, sur mobile elles passent les unes en dessous des autres." url: baseUrl + "core/vendor/tinymce/templates/col3.html",
}, description: "Grille adaptative sur 12 colonnes, sur mobile elles passent les unes en dessous des autres."
{ },
title: "Grille asymétrique : 8 - 4", {
url: baseUrl + "core/vendor/tinymce/templates/col8-4.html", title: "Grille asymétrique : 4 - 8",
description: "Grille adaptative sur 12 colonnes, sur mobile elles passent les unes en dessous des autres." url: baseUrl + "core/vendor/tinymce/templates/col4-8.html",
}, description: "Grille adaptative sur 12 colonnes, sur mobile elles passent les unes en dessous des autres."
{ },
title: "Grille asymétrique : 2 - 10", {
url: baseUrl + "core/vendor/tinymce/templates/col2-10.html", title: "Grille asymétrique : 8 - 4",
description: "Grille adaptative sur 12 colonnes, sur mobile elles passent les unes en dessous des autres." url: baseUrl + "core/vendor/tinymce/templates/col8-4.html",
}, description: "Grille adaptative sur 12 colonnes, sur mobile elles passent les unes en dessous des autres."
{ },
title: "Grille asymétrique : 10 - 2", {
url: baseUrl + "core/vendor/tinymce/templates/col10-2.html", title: "Grille asymétrique : 2 - 10",
description: "Grille adaptative sur 12 colonnes, sur mobile elles passent les unes en dessous des autres." url: baseUrl + "core/vendor/tinymce/templates/col2-10.html",
} description: "Grille adaptative sur 12 colonnes, sur mobile elles passent les unes en dessous des autres."
] },
}); {
title: "Grille asymétrique : 10 - 2",
tinymce.PluginManager.add('stickytoolbar', function(editor, url) { url: baseUrl + "core/vendor/tinymce/templates/col10-2.html",
editor.on('init', function() { description: "Grille adaptative sur 12 colonnes, sur mobile elles passent les unes en dessous des autres."
setSticky(); }
}); ]
});
$(window).on('scroll', function() {
setSticky(); tinymce.PluginManager.add('stickytoolbar', function(editor, url) {
}); editor.on('init', function() {
setSticky();
function setSticky() { });
var container = editor.editorContainer;
var toolbars = $(container).find('.mce-toolbar-grp'); $(window).on('scroll', function() {
var statusbar = $(container).find('.mce-statusbar'); setSticky();
var menubar = $(container).find('.mce-menubar'); });
if (isSticky()) { function setSticky() {
$(container).css({ var container = editor.editorContainer;
paddingTop: menubar.outerHeight() var toolbars = $(container).find('.mce-toolbar-grp');
}); var statusbar = $(container).find('.mce-statusbar');
var menubar = $(container).find('.mce-menubar');
if (isAtBottom()) {
toolbars.css({ if (isSticky()) {
top: 'auto', $(container).css({
bottom: statusbar.outerHeight(), paddingTop: menubar.outerHeight()
position: 'absolute', });
width: '100%',
borderBottom: 'none' if (isAtBottom()) {
}); toolbars.css({
} else { top: 'auto',
menubar.css({ bottom: statusbar.outerHeight(),
top: 45, position: 'absolute',
bottom: 'auto', width: '100%',
position: 'fixed', borderBottom: 'none'
width: $(container).width(), });
borderBottom: '1px solid rgba(0,0,0,0.2)', } else {
background: '#fff' menubar.css({
}); top: 45,
toolbars.css({ bottom: 'auto',
top: 78, position: 'fixed',
bottom: 'auto', width: $(container).width(),
position: 'fixed', borderBottom: '1px solid rgba(0,0,0,0.2)',
width: $(container).width(), background: '#fff'
borderBottom: '1px solid rgba(0,0,0,0.2)' });
}); toolbars.css({
} top: 78,
} else { bottom: 'auto',
$(container).css({ position: 'fixed',
paddingTop: 0 width: $(container).width(),
}); borderBottom: '1px solid rgba(0,0,0,0.2)'
});
toolbars.css({ }
top:0, } else {
position: 'relative', $(container).css({
width: 'auto', paddingTop: 0
borderBottom: 'none' });
});
menubar.css({ toolbars.css({
top:0, top:0,
position: 'relative', position: 'relative',
width: 'auto', width: 'auto',
borderBottom: 'none' borderBottom: 'none'
}); });
} menubar.css({
} top:0,
position: 'relative',
function isSticky() { width: 'auto',
var container = editor.editorContainer, borderBottom: 'none'
editorTop = container.getBoundingClientRect().top; });
}
if (editorTop < 0) { }
return true;
} function isSticky() {
var container = editor.editorContainer,
return false; editorTop = container.getBoundingClientRect().top;
}
if (editorTop < 0) {
function isAtBottom() { return true;
var container = editor.editorContainer, }
editorTop = container.getBoundingClientRect().top;
return false;
var toolbarHeight = $(container).find('.mce-toolbar-grp').outerHeight(); }
var footerHeight = $(container).find('.mce-statusbar').outerHeight();
function isAtBottom() {
var hiddenHeight = -($(container).outerHeight() - toolbarHeight - footerHeight); var container = editor.editorContainer,
editorTop = container.getBoundingClientRect().top;
if (editorTop < hiddenHeight) {
return true; var toolbarHeight = $(container).find('.mce-toolbar-grp').outerHeight();
} var footerHeight = $(container).find('.mce-statusbar').outerHeight();
return false; var hiddenHeight = -($(container).outerHeight() - toolbarHeight - footerHeight);
}
}); if (editorTop < hiddenHeight) {
return true;
}
return false;
}
});