// ==UserScript== // @name TinyMce for Evernote // @namespace http://www.bigbytetech.ca/userscripts // @version 0.1 // @description Adds TinyMce in Evernote with custom options including source code. A new button is added to Evernote top toolbar section. // @require https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js // @run-at document-end // @include /^https?:\/\/www\.evernote\.com\/home\.action.*n=.*$/ // @match http://www.evernote.com/Home.action* // @match https://www.evernote.com/Home.action* // @grant none // @noframes // @license MIT // @homepageURL https://openuserjs.org/scripts/Amourspirit/TinyMce_for_Evernote // @update https://openuserjs.org/install/Amourspirit/TinyMce_for_Evernote.user.js // ==/UserScript== function GM_main () { // ensure top level window calling and not any iframes if (window.top != window.self) { return; } var gmPageInitialized = false; var gmTimer = null; var gmCounter = 0; window.onload = function(){ if(gmPageInitialized) return; gmPageInitialized = true; // do not append to main edit window (window.top.frames[4].document) as this cause evernote to auto save the page // this results in a loop and page continues to call document ready event // set up timer to find evernote toolbar when it appears gmTimer = setInterval(function () { gmCounter++; console.log("turn no. " + gmCounter); var objLen = jQuery('.GOSDSN-CFFB').length; if(objLen) { console.log('found class GOSDSN-CFFB'); // add my own toolbar button clearInterval(gmTimer); jQuery('.GOSDSN-CFFB').prepend(createToolbarHtml()); addButtonClick(); } else { console.log('unable to find class GOSDSN-CFFB'); } if (gmCounter >= 20 || objLen > 0) { clearInterval(gmTimer); } }, 500); } function addButtonClick() { if(jQuery('#gm-edit-btn').length) { jQuery('#gm-edit-btn').click(function (){ if(gmFullscreen) { tinyMCE.get('gminput').execCommand('mceFullScreen'); } tinymce.get('gminput').setContent(jQuery('#entinymce_170_ifr').contents().find('body').html()); jQuery('.gmbackdrop, .gmbox').animate({'opacity':'.50'}, 300, 'linear'); jQuery('.gmbox').animate({'opacity':'1.00'}, 300, 'linear'); jQuery('.gmbackdrop, .gmbox').css('display', 'block'); }); console.log('Edit Button Click added'); } } function createToolbarHtml() { var btnHtml = createToolbarEditBtn(); var html = ''; html += '
'+btnHtml+'
'; return html; } function createToolbarEditBtn() { var html = '
'; return html; } } function getCss() { return '.gmbackdrop,.gmbox{position:absolute;display:none}.gmbackdrop{top:0;left:0;width:100%;height:100%;background:#000;opacity:0;filter:alpha(opacity=0);z-index:201}.gmbox{top:20%;left:30%;width:650px;height:450px;background:#fff;z-index:202;padding:10px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;-moz-box-shadow:0 0 5px #444;-webkit-box-shadow:0 0 5px #444;box-shadow:0 0 5px #444}.gmclose{float:right;margin-right:6px;cursor:pointer}.mce-panel{border:none}div.gmbox .mce-panel{border:0 solid rgba(0,0,0,.2)}div.mce-tinymce.mce-container.mce-panel{margin-top:2em}div.mce-tinymce.mce-container.mce-panel.mce-fullscreen{margin-top:0}#gm-edit-btn{font-size:1.6em;color:#ABABAB}#gm-edit-btn:hover{color:#2DBE60}'; } // function to add lightbox divs to page function getLightBoxHtml(id, title) { id = typeof id !== 'undefined' ? id : 'gminput'; title = typeof title !== 'undefined' ? title : ''; var h = '
'; h += '
'; h += title; h += ''; h += '
'; return h; } // ensure the script are being added to only the main window and not the iframes if (window.top == window.self) { addJS_Node (null, null, GM_main); addCss_Node(getCss(),'body'); addLink_Node('https://cdnjs.cloudflare.com/ajax/libs/foundicons/3.0.0/foundation-icons.css'); addLink_Node('https://cdnjs.cloudflare.com/ajax/libs/tinymce/4.3.2/skins/lightgray/skin.min.css'); addHtml_Node(getLightBoxHtml()); addJS_NodeToBody(getTinyMceInit()); addJS_NodeToBody(getSaveAndCloseCode()); } //-- This is a standard-ish utility function: function addJS_Node (text, s_URL, funcToRun, runOnLoad) { var D = document; var scriptNode = D.createElement ('script'); if (runOnLoad) { scriptNode.addEventListener ("load", runOnLoad, false); } scriptNode.type = "text/javascript"; if (text) scriptNode.textContent = text; if (s_URL) scriptNode.src = s_URL; if (funcToRun) scriptNode.textContent = '(' + funcToRun.toString() + ')()'; var targ = D.getElementsByTagName ('head')[0] || D.body || D.documentElement; targ.appendChild (scriptNode); } function addJS_NodeToBody (text, s_URL, funcToRun, runOnLoad) { var D = document; var scriptNode = D.createElement ('script'); if (runOnLoad) { scriptNode.addEventListener ("load", runOnLoad, false); } scriptNode.type = "text/javascript"; if (text) scriptNode.textContent = text; if (s_URL) scriptNode.src = s_URL; if (funcToRun) scriptNode.textContent = '(' + funcToRun.toString() + ')()'; var targ = D.getElementsByTagName ('body')[0] || D.body || D.documentElement; targ.appendChild (scriptNode); } //-- This is a standard-ish utility function: function addCss_Node (text, element) { element = typeof element !== 'undefined' ? element : 'head'; var D = document; var scriptNode = D.createElement ('style'); scriptNode.type = "text/css"; if (text) scriptNode.textContent = text; var targ = D.getElementsByTagName (element)[0] || D.body || D.documentElement; targ.appendChild (scriptNode); } function addLink_Node(href, type, rel) { type = typeof type !== 'undefined' ? type : "text/css"; rel = typeof rel !== 'undefined' ? rel : "stylesheet"; var D = document; var scriptNode = D.createElement ('link'); scriptNode.type = type; scriptNode.href = href; if (rel) scriptNode.rel = rel; var targ = D.getElementsByTagName ('head')[0] || D.body || D.documentElement; targ.appendChild (scriptNode); } function addHtml_Node(html) { var D = document; var targ = D.getElementsByTagName ('body')[0] || D.body || D.documentElement; targ.insertAdjacentHTML('beforeend', html); } function getTinyMceInit(ver){ ver = typeof ver !== 'undefined' ? ver : '4.1.0'; var script = 'function myCustomInitInstance(i){jQuery(".mce-i-mysave").addClass("fi-save"),jQuery(".mce-i-myexit").addClass("fi-x")}var gmFullscreen=!1,gmTinyMceTimer=null,gmTinyMceTimerCounter=0;jQuery(document).ready(function(){window.top==window.self&&(gmTinyMceTimer=setInterval(function(){return gmTinyMceTimerCounter++,console.log("turn no. "+gmTinyMceTimerCounter+" looking for tinymce"),void 0!==typeof tinymce?(console.log("found tinymce library"),clearInterval(gmTinyMceTimer),void tinymce.init({selector:"textarea#gminput",init_instance_callback:"myCustomInitInstance",height:260,inline:!1,browser_spellcheck:!0,plugins:"",menubar:"edit insert format view tools table",toolbar1:"mysave myexit | insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent",toolbar2:"print preview media | forecolor backcolor | link image | insertdatetime table emoticons | code fullscreen",external_plugins:{fullscreen:"https://cdnjs.cloudflare.com/ajax/libs/tinymce/'+ver+'/plugins/fullscreen/plugin.min.js",textcolor:"https://cdnjs.cloudflare.com/ajax/libs/tinymce/'+ver+'/plugins/textcolor/plugin.min.js",nonbreaking:"https://cdnjs.cloudflare.com/ajax/libs/tinymce/'+ver+'/plugins/nonbreaking/plugin.min.js",code:"https://cdnjs.cloudflare.com/ajax/libs/tinymce/'+ver+'/plugins/code/plugin.min.js",hr:"https://cdnjs.cloudflare.com/ajax/libs/tinymce/'+ver+'/plugins/hr/plugin.min.js",searchreplace:"https://cdnjs.cloudflare.com/ajax/libs/tinymce/'+ver+'/plugins/searchreplace/plugin.min.js",table:"https://cdnjs.cloudflare.com/ajax/libs/tinymce/'+ver+'/plugins/table/plugin.min.js",list:"https://cdnjs.cloudflare.com/ajax/libs/tinymce/'+ver+'/plugins/lists/plugin.min.js",advlist:"https://cdnjs.cloudflare.com/ajax/libs/tinymce/'+ver+'/plugins/advlist/plugin.min.js",paste:"https://cdnjs.cloudflare.com/ajax/libs/tinymce/'+ver+'/plugins/paste/plugin.min.js",link:"https://cdnjs.cloudflare.com/ajax/libs/tinymce/'+ver+'/plugins/link/plugin.min.js",autolink:"https://cdnjs.cloudflare.com/ajax/libs/tinymce/'+ver+'/plugins/autolink/plugin.min.js",charmap:"https://cdnjs.cloudflare.com/ajax/libs/tinymce/'+ver+'/plugins/charmap/plugin.min.js",insertdatetime:"https://cdnjs.cloudflare.com/ajax/libs/tinymce/'+ver+'/plugins/insertdatetime/plugin.min.js",image:"https://cdnjs.cloudflare.com/ajax/libs/tinymce/'+ver+'/plugins/image/plugin.min.js",visualblocks:"https://cdnjs.cloudflare.com/ajax/libs/tinymce/'+ver+'/plugins/visualblocks/plugin.min.js",emoticons:"https://cdnjs.cloudflare.com/ajax/libs/tinymce/'+ver+'/plugins/emoticons/plugin.min.js"},setup:function(i){i.on("FullscreenStateChanged",function(i){gmFullscreen=i.state,i.state?jQuery("#gwt-debug-sidebar").hide():jQuery("#gwt-debug-sidebar").show()}),i.addButton("mysave",{title:"Save",onclick:function(){save_box()}}),i.addButton("myexit",{title:"Close",onclick:function(){jQuery(".gmclose").trigger("click")}})},content_css:"https://www.evernote.com/js/tinymce/skins/lightgray/content.min.css",content_style:\'a,blockquote,body,code,dd,del,dfn,div,dl,dt,em,h1,h2,h3,h4,h5,h6,html,iframe,img,li,ol,p,pre,q,ul{border:0;padding:0;margin:0}a,abbr,acronym,address,area,b,bdo,big,blockquote,caption,center,cite,code,col,colgroup,dd,del,dfn,div,dl,dt,em,font,h3,h4,h5,h6,hr,i,ins,kbd,li,map,ol,p,pre,q,s,samp,small,span,strike,strong,sub,sup,table,tbody,td,tfoot,th,thead,tr,tt,u,ul{line-height:1.57143em}a,body{margin:0}body,h1,h2{font-family:gotham,helvetica,arial,sans-serif}a,img[name=en-crypt]{cursor:pointer}h3,p{margin-bottom:.714285em}del{text-decoration:line-through}dfn{font-style:italic}body{box-sizing:border-box;color:#383838;font-size:14px;padding-right:1px;word-wrap:break-word}a:link,a:visited{color:#047ac6}a:active,a:hover{color:#2596de}h1{font-size:1.5em;font-weight:700;line-height:1.04762em;margin-bottom:.4761em;margin-top:.9523em}h2{font-size:1.286em;font-weight:700;line-height:1.22222em;margin-bottom:.5556em;margin-top:1.111em}h3,h4,h5,h6{font-size:1em;font-weight:700;font-family:gotham,helvetica,arial,sans-serif}h3{margin-top:1.4285em}div{font-family:gotham,helvetica,arial,sans-serif;font-size:14px}img.en-media{height:auto;margin-bottom:1.286em;max-width:100%}img.en-media[height="1"]{height:1px}p+div img,p+img{margin-top:.714285em}div+div img,div+img{margin-top:.857412em}div+div img+img,img+img,li ol,li ul{margin-top:0}ol,ul{list-style-position:outside;margin-bottom:.714285em;margin-left:2em;margin-top:.2857em;padding-left:0}li ol,li ul{margin-bottom:0}h1+ol,h1+ul,h2+ol,h2+ul,p+ol,p+ul{margin-top:-.428571em}blockquote{border-left:2px solid #bfbfbf;margin-bottom:1.4285em;margin-left:1.4285em;margin-top:1.4285em;padding-left:.714285em}code,pre{font-family:Monaco,Courier,monospace}cite{font-style:italic}table{font-size:1em}td,th{padding:.2em 2em .2em 0;text-align:left;vertical-align:top}button.en-ignore{margin-bottom:1em}.highlight{background:#c9f2d0;border:1px solid #62eb92}.Decrypted{background-color:#f7f7f7;padding:5px}.Decrypted .Header{color:#404040;font-family:gotham,helvetica,arial,sans-serif;font-size:11px;padding-bottom:5px}.Decrypted .Body{background-color:#fff;padding:5px}.canvas-container{background:url(/redesign/global/img/loading-spinner.gif) center center no-repeat #fff;border:1px solid #cacaca;margin-bottom:10px}\'})):void(gmTinyMceTimerCounter>=20&&clearInterval(gmTinyMceTimer))},500))});'; return script; } function getSaveAndCloseCode() { return 'function close_box(){return confirm("Are you sure you want to close this editor?")?(jQuery(".gmbackdrop, .gmbox").animate({opacity:"0"},300,"linear",function(){jQuery(".gmbackdrop, .gmbox").css("display","none")}),jQuery("textarea#gminput").val(""),tinymce.get("gminput").setContent(""),jQuery("#gwt-debug-sidebar").show(),!0):!1}function save_box(){var e=tinymce.get("gminput").getContent();jQuery(".gmbackdrop, .gmbox").animate({opacity:"0"},300,"linear",function(){jQuery(".gmbackdrop, .gmbox").css("display","none")}),jQuery("#entinymce_170_ifr").contents().find("body").html(e),jQuery("textarea#gminput").val(""),tinymce.get("gminput").setContent(""),jQuery("#gwt-debug-sidebar").show()}jQuery(document).ready(function(){window.top==window.self&&jQuery(".gmclose").click(function(){close_box()})});'; }