Skip to content

Instantly share code, notes, and snippets.

@marcus-at-localhost
Last active November 9, 2019 01:51
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save marcus-at-localhost/fa95d030919558062469e56cff468388 to your computer and use it in GitHub Desktop.
Save marcus-at-localhost/fa95d030919558062469e56cff468388 to your computer and use it in GitHub Desktop.
[Markdown Quote from Website - Bookmarklet] Select text, click the bookmarklet, get an overlay with the selection styled as Markdown quote with source, click "copy" to get the selection copied to your clipboard.Uses https://github.com/zenorocha/clipboard.js
/**
* Markdown Quote to Clipboard
*/
var mo = {
version: 1,
btnId: 'clipboard-btn-dceaeae8-1557-4454-883c-05ae99312192',
id:'clipboard-dceaeae8-1557-4454-883c-05ae99312192',
textareaId: 'clipboard-textarea-dceaeae8-1557-4454-883c-05ae99312192',
uniqueId: 'clipboard-script-dceaeae8-1557-4454-883c-05ae99312192',
styleId: 'clipboard-style-dceaeae8-1557-4454-883c-05ae99312192',
closeId: 'clipboard-close-dceaeae8-1557-4454-883c-05ae99312192',
init: function(){
var script = document.getElementById(mo.uniqueId);
if (script) {
script.parentNode.removeChild(script);
}
script = document.createElement('script'),
scripts = document.getElementsByTagName('script')[0];
script.src = 'https://cdn.jsdelivr.net/clipboard.js/1.5.16/clipboard.min.js'; //?r=' + Math.random();
script.id = mo.uniqueId;
scripts.parentNode.insertBefore(script, scripts);
var selection = window.getSelection().toString() || null;
if(!selection){
alert('Select some Text!');
return;
}
var quote = selection;
var content = '> '+quote+'\n\n--[' + document.title + '](' + location.href + ')';
var div = document.getElementById(mo.id);
if (div) {
div.parentNode.removeChild(div);
}
div = document.createElement("div");
div.id = mo.id;
var input = document.createElement("textarea");
var btn = document.createElement("button");
var close = document.createElement("button");
//console.log(content);
input.textContent = content;
input.name = "post";
input.maxLength = "5000";
input.cols = "80";
input.rows = "30";
input.id = mo.textareaId;
btn.innerText = 'copy'
btn.setAttribute('class', 'btn');
btn.setAttribute('data-clipboard-target', '#'+mo.textareaId);
btn.id = mo.btnId;
close.innerText = '×'
close.setAttribute('class', 'btn');
close.id = mo.closeId;
div.appendChild(input);
div.appendChild(btn);
div.appendChild(close);
document.body.appendChild(div);
var css = '';
css += 'body{position:relative;} body::before {content: ""; display: block; position: fixed;top: 0; left: 0; height: 100%; width: 100%; z-index: 10; background-color: rgba(0,0,0,0.2);}';
css += '#' +mo.id + '{display:block;background-color: transparent;border-radius: 5px;height:250px;width:800px;position:fixed;top:20%;left:50%;margin-left: -400px;margin-top:-100px;z-index:11;}';
css += '#' +mo.textareaId + '{position:relative;width:100%;height:90%;top:0;bottom:50px;border:10px solid #eee;box-shadow: 2px 2px 2px rgba(0,0,0,0.2);padding:10px;font-family: "Lucida Console", Monaco, monospace}';
// inject css
this.css(css);
script.onload = script.onreadystatechange = function() {
var rs = this.readyState;
if (rs && rs != 'complete' && rs != 'loaded') return;
try {
clipboard = mo.clipboard(mo.btnId);
} catch (e) {
console.log(e);
}
};
close.onclick = function (evt) {
mo.destroy();
}
if (document.attachEvent){
document.attachEvent('onkeydown', mo.handler);
}else{
document.addEventListener('keydown', mo.handler);
}
},
css: function (rule) {
var css = document.getElementById(mo.styleId);
if (css) {
css.parentNode.removeChild(css);
}
css = document.createElement('style');
css.type = 'text/css';
css.id = mo.styleId;
if (css.styleSheet) {
css.styleSheet.cssText = rule; // Support for IE
}else {
css.appendChild(document.createTextNode(rule)); // Support for the rest
}
document.getElementsByTagName("head")[0].appendChild(css); // Specifies where to place the css
},
clipboard: function(btn){
var clipboard = new Clipboard('#'+btn);
clipboard.on('success', function(e) {
console.info('Action:', e.action);
console.info('Text:', e.text);
console.info('Trigger:', e.trigger);
e.clearSelection();
mo.destroy();
});
clipboard.on('error', function(e) {
console.error('Action:', e.action);
console.error('Trigger:', e.trigger);
});
return clipboard;
},
destroy: function(){
var div = document.getElementById(mo.id);
div.parentNode.removeChild(div);
var css = document.getElementById(mo.styleId);
css.parentNode.removeChild(css);
},
handler: function(e) {
var key = window.event ? e.keyCode : e.which;
if(key === 27){
mo.destroy();
}
}
}

Bookmarklet - Markdown Quote to Clipboard

The bookmark:

javascript:(function(){javascript:(function(){ if (window.mo) { } window.mo = { }; var version = 1; rand = Math.random(); var uniqueId = %27gwtw-bookmarklet%27; var script = document.getElementById(uniqueId); if (script) { script.parentNode.removeChild(script); } script = document.createElement(%27script%27); script.setAttribute(%27type%27, %27text/javascript%27); script.setAttribute(%27charset%27, %27UTF-8%27); script.setAttribute(%27src%27, %27\/\/cdn.rawgit.com/marcus-at-localhorst/fa95d030919558062469e56cff468388/raw/f4caa7385a5cdb0627f8cbc9bcc6dcee93ec63a8/bookmarklet.js?r=%27 + rand); script.id = uniqueId; document.documentElement.appendChild(script); script.onload = script.onreadystatechange = function() { var rs = script.readyState; if (!rs || rs === %27loaded%27 || rs === %27complete%27) { script.onload = script.onreadystatechange = null; if (version !== window.mo.version) { alert(%27This bookmarklet is out of date!%27); } else { window.mo.init(); } } }; }());})();

As link:

<a href="javascript:(function(){javascript:(function(){ if (window.mo) { } window.mo = { }; var version = 1; rand = Math.random(); var uniqueId = %27gwtw-bookmarklet%27; var script = document.getElementById(uniqueId); if (script) { script.parentNode.removeChild(script); } script = document.createElement(%27script%27); script.setAttribute(%27type%27, %27text/javascript%27); script.setAttribute(%27charset%27, %27UTF-8%27); script.setAttribute(%27src%27, %27\/\/cdn.rawgit.com/marcus-at-localhorst/fa95d030919558062469e56cff468388/raw/f4caa7385a5cdb0627f8cbc9bcc6dcee93ec63a8/bookmarklet.js?r=%27 + rand); script.id = uniqueId; document.documentElement.appendChild(script); script.onload = script.onreadystatechange = function() { var rs = script.readyState; if (!rs || rs === %27loaded%27 || rs === %27complete%27) { script.onload = script.onreadystatechange = null; if (version !== window.mo.version) { alert(%27This bookmarklet is out of date!%27); } else { window.mo.init(); } } }; }());})();">Markdown Snippet</a>

Raw code, can be compressed on http://mcdlr.com/js-inject/

javascript:(function(){

// avoid the bookmarklet activating more than once
if (window.mo) {
    //return;
}
window.mo = { };

var version = 1;
rand = Math.random();
var uniqueId = 'gwtw-bookmarklet';
var script = document.getElementById(uniqueId);
if (script) {
   script.parentNode.removeChild(script);
}
  
script  = document.createElement('script');

script.setAttribute('type', 'text/javascript');
script.setAttribute('charset', 'UTF-8');
script.setAttribute('src', '\/\/cdn.rawgit.com/marcus-at-localhorst/fa95d030919558062469e56cff468388/raw/ff65bf5a19764ec53c3fe5a668013f2bdccca9ce/bookmarklet.js?r=' + rand);
script.id = uniqueId;
document.documentElement.appendChild(script);

script.onload = script.onreadystatechange = function() {
    var rs = script.readyState;
    if (!rs || rs === 'loaded' || rs === 'complete') {
        script.onload = script.onreadystatechange = null;

        // initialise or warn if older version
        if (version !== window.mo.version) {
            alert('This bookmarklet is out of date!');
        } else {
            window.mo.init();
        }
    }
};

}());

Appendix

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment