Greasyfork forum MARKDOWN for new comments

Select MARKDOWN format by default, add formatting help links, add CODE markdown button

2014-12-03 या दिनांकाला. सर्वात नवीन आवृत्ती पाहा.

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey, Greasemonkey किंवा Violentmonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

You will need to install an extension such as Tampermonkey to install this script.

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey किंवा Violentmonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल..

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल..

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्क्रिप्ट व्यवस्थापक एक्स्टेंशन इंस्टॉल करावे लागेल.

(माझ्याकडे आधीच युझर स्क्रिप्ट व्यवस्थापक आहे, मला इंस्टॉल करू द्या!)

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला Stylus सारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला Stylus सारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला Stylus सारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्टाईल व्यवस्थापक इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्टाईल व्यवस्थापक इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्टाईल व्यवस्थापक इंस्टॉल करावे लागेल.

(माझ्याकडे आधीच युझर स्टाईल व्यवस्थापक आहे, मला इंस्टॉल करू द्या!)

// ==UserScript==
// @name          Greasyfork forum MARKDOWN for new comments
// @author        wOxxOm
// @description   Select MARKDOWN format by default, add formatting help links, add CODE markdown button
// @namespace     wOxxOm.scripts
// @version       1.0
// @include       https://greatest.deepsurf.us/*forum/discussion/*
// @run-at        document-start
// @grant         none
// ==/UserScript==

var ob = new MutationObserver(function(mutations){
  for (var i=0, ml=mutations.length, m; (i<ml) && (m=mutations[i]); i++)
    for (var j=0, nodes=m.addedNodes, nl=nodes.length, n; (j<nl) && (n=nodes[j]); j++)
      if (n.nodeType == 1) {
        if (n.localName == 'label') {
          if (n.for != 'Form_Format2')
            continue;
        } 
        else if (!(n = n.querySelector('label[for="Form_Format2"]')))
          continue;

        n.click();

        n.previousElementSibling.insertAdjacentHTML('beforeend',' (<a href="/help/allowed-markup" target="_blank">?</a>)');
        n.insertAdjacentHTML('beforeend',' (<a href="http://www.darkcoding.net/software/markdown-quick-reference/" target="_blank">?</a>)');

        var a = document.createElement('a');
        a.className = "Button CodeButton"; a.style.setProperty('float','right'); a.textContent = 'Code';
        a.title = 'Apply CODE markdown to selected text';
        a.addEventListener('click', function(e){
          var txtNode = document.getElementById('Form_Body');
          var s1 = txtNode.selectionStart, s2 = txtNode.selectionEnd;
          var txt = txtNode.value;
          var sel = txt.substring(s1, s2);
          
          if (sel.indexOf('\n') < 0)
            sel_pre = sel_post = '`';
          else {
            sel_pre = ((s1==0) || (txt.charAt(s1-1) == '\n') ? '' : '\n') + '```' + (sel.charAt(0) == '\n' ? '' : '\n');
            sel_post =  (sel.substr(-1) == '\n' ? '' : '\n') + '```' + (txt.substr(s2,1) == '\n' ? '' : '\n');
          }
          txtNode.value = txt.substr(0, s1) + sel_pre + sel + sel_post + txt.substr(s2);
          txtNode.setSelectionRange(s1 + sel_pre.length, s1 + sel_pre.length + sel.length);
          txtNode.focus();
        });
        n.parentNode.insertBefore(a, n.nextElementSibling);

        ob.disconnect();
        return;
      }
})
ob.observe(document, {subtree:true, childList:true});