Advertisement
AmourSpirit

evernoteedit.user.js 0.1 Released version

Dec 25th, 2015
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ==UserScript==
  2. // @name            TinyMce for Evernote
  3. // @namespace       http://www.bigbytetech.ca/userscripts
  4. // @version         0.1
  5. // @description     Adds TinyMce in Evernote with custom options including source code. A new button is added to Evernote top toolbar section.
  6. // @require         https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js
  7. // @run-at          document-end
  8. // @include         /^https?:\/\/www\.evernote\.com\/home\.action.*n=.*$/
  9. // @match           http://www.evernote.com/Home.action*
  10. // @match           https://www.evernote.com/Home.action*
  11. // @grant           none
  12. // @noframes
  13. // @license         MIT
  14. // @homepageURL     https://openuserjs.org/scripts/Amourspirit/TinyMce_for_Evernote
  15. // @update          https://openuserjs.org/install/Amourspirit/TinyMce_for_Evernote.user.js
  16. // ==/UserScript==
  17.  
  18. function GM_main () {
  19.     // ensure top level window calling and not any iframes
  20.     if (window.top != window.self) {
  21.         return;
  22.     }
  23.     var gmPageInitialized = false;
  24.     var gmTimer = null;
  25.     var gmCounter = 0;
  26.    
  27.     window.onload = function(){
  28.         if(gmPageInitialized) return;
  29.         gmPageInitialized = true;
  30.         // do not append to main edit window (window.top.frames[4].document) as this cause evernote to auto save the page
  31.         // this results in a loop and page continues to call document ready event
  32.        
  33.         // set up timer to find evernote toolbar when it appears
  34.         gmTimer = setInterval(function () {
  35.             gmCounter++;
  36.             console.log("turn no. " + gmCounter);
  37.             var objLen = jQuery('.GOSDSN-CFFB').length;
  38.             if(objLen) {
  39.                 console.log('found class GOSDSN-CFFB');
  40.                 // add my own toolbar button
  41.                 clearInterval(gmTimer);
  42.                 jQuery('.GOSDSN-CFFB').prepend(createToolbarHtml());
  43.                
  44.                 addButtonClick();
  45.             } else {
  46.                 console.log('unable to find class GOSDSN-CFFB');
  47.             }
  48.  
  49.             if (gmCounter >= 20 || objLen > 0) {
  50.                 clearInterval(gmTimer);
  51.             }
  52.  
  53.  
  54.         }, 500);
  55.     }
  56.    
  57.     function addButtonClick() {
  58.         if(jQuery('#gm-edit-btn').length) {
  59.             jQuery('#gm-edit-btn').click(function (){
  60.             if(gmFullscreen)
  61.             {
  62.                 tinyMCE.get('gminput').execCommand('mceFullScreen');   
  63.             }
  64.             tinymce.get('gminput').setContent(jQuery('#entinymce_170_ifr').contents().find('body').html());
  65.             jQuery('.gmbackdrop, .gmbox').animate({'opacity':'.50'}, 300, 'linear');
  66.             jQuery('.gmbox').animate({'opacity':'1.00'}, 300, 'linear');
  67.             jQuery('.gmbackdrop, .gmbox').css('display', 'block');
  68.             });
  69.             console.log('Edit Button Click added');
  70.         }
  71.     }
  72.    
  73.     function createToolbarHtml() {
  74.         var btnHtml = createToolbarEditBtn();
  75.         var html = '';
  76.         html += '<div id="gm-tb" title="Edit with TinyMCE" class="GOSDSN-CGGB">'+btnHtml+'</div>';
  77.         return html;
  78.     }
  79.  
  80.     function createToolbarEditBtn() {
  81.         var html = '<div id="gm-edit-btn" name="gm-edit-btn" class="gm-btn"><i class="fi-page-edit"></i></div>';
  82.         return html;
  83.     }
  84. }
  85.  
  86. function getCss() {
  87.  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}';
  88. }
  89.  
  90. // function to add lightbox divs to page
  91. function getLightBoxHtml(id, title) {
  92.     id = typeof id !== 'undefined' ? id : 'gminput';
  93.     title = typeof title !== 'undefined' ? title : '';
  94.     var h = '<div class="gmbackdrop"></div>';
  95.     h += '<div class="gmbox"><div class="gmclose"><i class="fi-x"></i></div>';
  96.     h += title;
  97.     h += '<textarea id="'+ id +'" rows="18" cols="68"></textarea>';
  98.     h += '</div></div>';
  99.     return h;
  100. }
  101.  
  102. // ensure the script are being added to only the main window and not the iframes
  103. if (window.top == window.self)
  104. {
  105.     addJS_Node (null, null, GM_main);
  106.     addCss_Node(getCss(),'body');
  107.     addLink_Node('https://cdnjs.cloudflare.com/ajax/libs/foundicons/3.0.0/foundation-icons.css');
  108.     addLink_Node('https://cdnjs.cloudflare.com/ajax/libs/tinymce/4.3.2/skins/lightgray/skin.min.css');
  109.     addHtml_Node(getLightBoxHtml());
  110.     addJS_NodeToBody(getTinyMceInit());
  111.     addJS_NodeToBody(getSaveAndCloseCode());
  112. }
  113.  
  114. //-- This is a standard-ish utility function:
  115. function addJS_Node (text, s_URL, funcToRun, runOnLoad) {
  116.     var D                                   = document;
  117.     var scriptNode                          = D.createElement ('script');
  118.     if (runOnLoad) {
  119.         scriptNode.addEventListener ("load", runOnLoad, false);
  120.     }
  121.     scriptNode.type                         = "text/javascript";
  122.     if (text)       scriptNode.textContent  = text;
  123.     if (s_URL)      scriptNode.src          = s_URL;
  124.     if (funcToRun)  scriptNode.textContent  = '(' + funcToRun.toString() + ')()';
  125.  
  126.     var targ = D.getElementsByTagName ('head')[0] || D.body || D.documentElement;
  127.     targ.appendChild (scriptNode);
  128. }
  129.  
  130. function addJS_NodeToBody (text, s_URL, funcToRun, runOnLoad) {
  131.     var D                                   = document;
  132.     var scriptNode                          = D.createElement ('script');
  133.     if (runOnLoad) {
  134.         scriptNode.addEventListener ("load", runOnLoad, false);
  135.     }
  136.     scriptNode.type                         = "text/javascript";
  137.     if (text)       scriptNode.textContent  = text;
  138.     if (s_URL)      scriptNode.src          = s_URL;
  139.     if (funcToRun)  scriptNode.textContent  = '(' + funcToRun.toString() + ')()';
  140.  
  141.     var targ = D.getElementsByTagName ('body')[0] || D.body || D.documentElement;
  142.     targ.appendChild (scriptNode);
  143. }
  144.  
  145. //-- This is a standard-ish utility function:
  146. function addCss_Node (text, element) {
  147.     element = typeof element !== 'undefined' ? element : 'head';
  148.     var D                                   = document;
  149.     var scriptNode                          = D.createElement ('style');
  150.     scriptNode.type                         = "text/css";
  151.     if (text)       scriptNode.textContent  = text;
  152.    
  153.     var targ = D.getElementsByTagName (element)[0] || D.body || D.documentElement;
  154.     targ.appendChild (scriptNode);
  155. }
  156.  
  157. function addLink_Node(href, type, rel) {
  158.     type = typeof type !== 'undefined' ? type : "text/css";
  159.     rel = typeof rel !== 'undefined' ? rel : "stylesheet";
  160.     var D                                   = document;
  161.     var scriptNode                          = D.createElement ('link');
  162.     scriptNode.type                         = type;
  163.     scriptNode.href                         = href;
  164.     if (rel)        scriptNode.rel          = rel;
  165.        
  166.     var targ = D.getElementsByTagName ('head')[0] || D.body || D.documentElement;
  167.     targ.appendChild (scriptNode);
  168. }
  169.  
  170. function addHtml_Node(html) {
  171.     var D = document;
  172.     var targ = D.getElementsByTagName ('body')[0] || D.body || D.documentElement;
  173.     targ.insertAdjacentHTML('beforeend', html);
  174. }
  175.  
  176. function getTinyMceInit(ver){
  177.     ver = typeof ver !== 'undefined' ? ver : '4.1.0';
  178.     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))});';
  179.  
  180.     return script;
  181. }
  182. function getSaveAndCloseCode() {
  183. 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()})});';  
  184. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement