<!DOCTYPE html> <html> <head> <meta charset='utf-8' /> <meta name="viewport" content="width=device-width, user-scalable=no"> <title>Tracim</title> <link rel='shortcut icon' href='favicon.ico'> <link rel="stylesheet" type="text/css" href="/font/font-awesome-4.7.0/css/font-awesome.css"> <link href="https://fonts.googleapis.com/css?family=Quicksand:300,400,500,700" rel="stylesheet"> <!-- <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous"> --> <link rel="stylesheet" type="text/css" href="/asset/hamburger/hamburgers.min.css"> <link rel="stylesheet" type="text/css" href="/dev/bootstrap-4.0.0-beta.css"> </head> <body> <div id='content'></div> <script src='/tracim.vendor.bundle.js'></script> <script src='/tracim.app.entry.js'></script> <!-- <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.min.js" integrity="sha384-vFJXuSJphROIrBnz7yo7oB41mKfc8JzQZiCq4NCceLEaO4IHwicKwpJf9c9IpFgh" crossorigin="anonymous"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/js/bootstrap.min.js" integrity="sha384-alpBpkh1PFOepccYVYDB4do5UnbKysX5WZXm3XxPqe5iKTfUKjNkCk9SaVuEZflJ" crossorigin="anonymous"></script> --> <script src='/app/pageHtml.app.js'></script> <script src='/app/thread.app.js'></script> <script src="/dev/jquery-3.2.1.js"></script> <script src="/dev/popper-1.12.3.js"></script> <script src="/dev/bootstrap-4.0.0-beta.2.js"></script> <script type="text/javascript" src="/asset/tinymce/jquery.tinymce.min.js"></script> <script type="text/javascript" src="/asset/tinymce/tinymce.min.js"></script> <script type='text/javascript'> let prevSelectedApp = {name: ''} // default value GLOBAL_renderApp = app => { const selectedApp = (() => { switch (app.config.name) { case 'PageHtml': return appPageHtml case 'Thread': return appThread } })() if (selectedApp.isRendered) { GLOBAL_dispatchEvent(`${app.config.name}_showApp`, app) } else { selectedApp.renderApp(app) selectedApp.isRendered = true prevSelectedApp.isRendered = false prevSelectedApp = selectedApp } } GLOBAL_dispatchEvent = (type, data) => { var event = new CustomEvent('appCustomEvent', {detail: {type, data}}) document.dispatchEvent(event) } GLOBAL_hideApp = appName => { switch (appName) { case 'PageHtml': GLOBAL_dispatchEvent('PageHtml_hideApp', {}); break case 'Thread': GLOBAL_dispatchEvent('Thread_hideApp', {}); break } } </script> <script type='text/javascript'> $(document).ready(function () { wysiwyg = function () { function base64EncodeAndTinyMceInsert (files) { for (var i = 0; i < files.length; i++) { if (files[i].size > 1000000) files[i].allowed = confirm(files[i].name + " fait plus de 1mo et peut prendre du temps à insérer, voulez-vous continuer ?") } for (var i = 0; i < files.length; i++) { if (files[i].allowed !== false && files[i].type.match('image.*')) { var img = document.createElement('img') var fr = new FileReader() fr.readAsDataURL(files[i]) fr.onloadend = function (e) { img.src = e.target.result tinymce.activeEditor.execCommand('mceInsertContent', false, img.outerHTML) } } } } // HACK: The tiny mce source code modal contain a textarea, but we // can't edit it (like it's readonly). The following solution // solve the bug: https://stackoverflow.com/questions/36952148/tinymce-code-editor-is-readonly-in-jtable-grid $(document).on('focusin', function(e) { if ($(e.target).closest(".mce-window").length) { e.stopImmediatePropagation(); } }); tinymce.init({ selector: 'textarea', height: 130, // width: 530, menubar: false, resize: false, plugins: [ 'advlist autolink lists link image charmap print preview anchor textcolor', 'searchreplace visualblocks code fullscreen', 'insertdatetime media table contextmenu paste code help' ], toolbar: 'insert | formatselect | bold italic underline strikethrough forecolor backcolor | link | alignleft aligncenter alignright alignjustify | numlist bullist outdent indent | table | code ', content_css: [ '//fonts.googleapis.com/css?family=Lato:300,300i,400,400i', '//www.tinymce.com/css/codepen.min.css' ], setup: function ($editor) { ////////////////////////////////////////////// // add custom btn to handle image by selecting them with system explorer $editor.addButton('customInsertImage', { icon: 'mce-ico mce-i-image', title: 'Image', onclick: function () { if ($('#hidden_tinymce_fileinput').length > 0) $('#hidden_tinymce_fileinput').remove() fileTag = document.createElement('input') fileTag.id = 'hidden_tinymce_fileinput' fileTag.type = 'file' $('body').append(fileTag) $('#hidden_tinymce_fileinput').on('change', function () { base64EncodeAndTinyMceInsert($(this)[0].files) }) $('#hidden_tinymce_fileinput').click() } }) ////////////////////////////////////////////// // Handle drag & drop image into TinyMce by encoding them in base64 (to avoid uploading them somewhere and keep saving comment in string format) $editor .on('drag dragstart dragend dragover dragenter dragleave drop', function (e) { e.preventDefault() e.stopPropagation() }) .on('drop', function(e) { base64EncodeAndTinyMceInsert(e.dataTransfer.files) }) } }); } wysiwyg() }) </script> </body> </html>