index.html 6.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset='utf-8' />
  5. <meta name="viewport" content="width=device-width, user-scalable=no">
  6. <title>Tracim</title>
  7. <link rel='shortcut icon' href='favicon.ico'>
  8. <link rel="stylesheet" type="text/css" href="./font/font-awesome-4.7.0/css/font-awesome.css">
  9. <link href="https://fonts.googleapis.com/css?family=Quicksand:300,400,500,700" rel="stylesheet">
  10. <!--
  11. <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
  12. -->
  13. <link rel="stylesheet" type="text/css" href="./dev/bootstrap-4.0.0-beta.css">
  14. </head>
  15. <body>
  16. <div id='content'></div>
  17. <script src='tracim.vendor.bundle.js'></script>
  18. <script src='tracim.app.entry.js'></script>
  19. <!--
  20. <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
  21. <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.min.js" integrity="sha384-vFJXuSJphROIrBnz7yo7oB41mKfc8JzQZiCq4NCceLEaO4IHwicKwpJf9c9IpFgh" crossorigin="anonymous"></script>
  22. <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/js/bootstrap.min.js" integrity="sha384-alpBpkh1PFOepccYVYDB4do5UnbKysX5WZXm3XxPqe5iKTfUKjNkCk9SaVuEZflJ" crossorigin="anonymous"></script>
  23. -->
  24. <script src='./plugin/pageHtml.plugin.js'></script>
  25. <script src="./dev/jquery-3.2.1.js"></script>
  26. <script src="./dev/popper-1.12.3.js"></script>
  27. <script src="./dev/bootstrap-4.0.0-beta.2.js"></script>
  28. <script type='text/javascript'>
  29. function GLOBAL_renderPlugin () {
  30. pluginPageHtml.renderPlugin('pluginContainer')
  31. }
  32. function GLOBAL_dispatchEvent (data) {
  33. var event = new CustomEvent('pluginCustomEvent', {detail: data})
  34. document.dispatchEvent(event)
  35. }
  36. </script>
  37. <script type='text/javascript'>
  38. if (window.matchMedia("(min-width:1200px)").matches) {
  39. var jsScript = document.createElement("script");
  40. jsScript.type = "text/javascript";
  41. jsScript.src = "https://cloud.tinymce.com/stable/tinymce.min.js?apiKey=dfdhxdokxj2wagzkbxfgysgh86d6rr9m3dln0172vo3shipc";
  42. jsScript.onload = function() {
  43. function base64EncodeAndTinyMceInsert (files) {
  44. for (var i = 0; i < files.length; i++) {
  45. if (files[i].size > 1000000)
  46. files[i].allowed = confirm(files[i].name + " fait plus de 1mo et peut prendre du temps à insérer, voulez-vous continuer ?")
  47. }
  48. for (var i = 0; i < files.length; i++) {
  49. if (files[i].allowed !== false && files[i].type.match('image.*')) {
  50. var img = document.createElement('img')
  51. var fr = new FileReader()
  52. fr.readAsDataURL(files[i])
  53. fr.onloadend = function (e) {
  54. img.src = e.target.result
  55. tinymce.activeEditor.execCommand('mceInsertContent', false, img.outerHTML)
  56. }
  57. }
  58. }
  59. }
  60. // HACK: The tiny mce source code modal contain a textarea, but we
  61. // can't edit it (like it's readonly). The following solution
  62. // solve the bug: https://stackoverflow.com/questions/36952148/tinymce-code-editor-is-readonly-in-jtable-grid
  63. $(document).on('focusin', function(e) {
  64. if ($(e.target).closest(".mce-window").length) {
  65. e.stopImmediatePropagation();
  66. }
  67. });
  68. tinymce.init({
  69. selector: 'textarea',
  70. height: 130,
  71. // width: 530,
  72. menubar: false,
  73. resize: false,
  74. plugins: [
  75. 'advlist autolink lists link image charmap print preview anchor textcolor',
  76. 'searchreplace visualblocks code fullscreen',
  77. 'insertdatetime media table contextmenu paste code help'
  78. ],
  79. toolbar: 'insert | formatselect | bold italic underline strikethrough forecolor backcolor | link | alignleft aligncenter alignright alignjustify | numlist bullist outdent indent | table | code ',
  80. content_css: [
  81. '//fonts.googleapis.com/css?family=Lato:300,300i,400,400i',
  82. '//www.tinymce.com/css/codepen.min.css'
  83. ],
  84. setup: function ($editor) {
  85. //////////////////////////////////////////////
  86. // add custom btn to handle image by selecting them with system explorer
  87. $editor.addButton('customInsertImage', {
  88. icon: 'mce-ico mce-i-image',
  89. title: 'Image',
  90. onclick: function () {
  91. var hiddenTinyMceInput = $('#hidden_tinymce_fileinput')
  92. if (hiddenTinyMceInput.length > 0) hiddenTinyMceInput.remove()
  93. fileTag = document.createElement('input')
  94. fileTag.id = 'hidden_tinymce_fileinput'
  95. fileTag.type = 'file'
  96. $('body').append(fileTag)
  97. hiddenTinyMceInput.on('change', function () {
  98. base64EncodeAndTinyMceInsert($(this)[0].files)
  99. })
  100. hiddenTinyMceInput.click()
  101. }
  102. })
  103. //////////////////////////////////////////////
  104. // Handle drag & drop image into TinyMce by encoding them in base64 (to avoid uploading them somewhere and keep saving comment in string format)
  105. $editor
  106. .on('drag dragstart dragend dragover dragenter dragleave drop', function (e) {
  107. e.preventDefault()
  108. e.stopPropagation()
  109. })
  110. .on('drop', function(e) {
  111. base64EncodeAndTinyMceInsert(e.dataTransfer.files)
  112. })
  113. }
  114. });
  115. }
  116. document.getElementsByTagName("body")[0].appendChild(jsScript);
  117. }
  118. </script>
  119. </body>
  120. </html>