From 195367d2fb5f4c18787e0e8daa02e8625cf51362 Mon Sep 17 00:00:00 2001 From: Gaurang Tandon <1gaurangtandon@gmail.com> Date: Thu, 24 Dec 2015 11:34:14 +0530 Subject: [PATCH] remove jquery dependency --- forum-updater.js | 80 ++++++++++++++++++++++++++++++------------------ 1 file changed, 51 insertions(+), 29 deletions(-) diff --git a/forum-updater.js b/forum-updater.js index 2e76528..0131fc0 100644 --- a/forum-updater.js +++ b/forum-updater.js @@ -1,7 +1,35 @@ +var qS = document.querySelector.bind(document), + wmdButtonBar = qS('.wmd-button-bar'); + +function toggle(el){ + if(el.style.display === "none") el.style.display = "initial"; + else el.style.display = "none"; +} + +function hasClass(el, class){ + if (el.classList) + el.classList.contains(class); + else + new RegExp('(^| )' + class + '( |$)', 'gi').test(el.class); +} + +function toggleClass(el, class){ + if(hasClass(el, class)) el.classList.remove(class); + else el.classList.add(class); +} + +// jquery equivlent of .not +function jqNot(nodelist, sel){ + [].filter.call(nodelist, function(el) { + return !el.matches(sel); + }); +} + function forumUpdater() { // for use below, they need to be defined globally var cannedResponses, - HtmlListOfCannedResponses; + HtmlListOfCannedResponses, + cannedResponsesContainer = qS('.canned-response-container'); // get the canned responses function getCannedResponses() { @@ -10,8 +38,7 @@ function forumUpdater() { localStorage.setItem("Canned Responses", JSON.stringify(cannedResponses)); } - cannedResponses = localStorage.getItem("Canned Responses"); - cannedResponses = JSON.parse(cannedResponses); + cannedResponses = JSON.parse(localStorage.getItem("Canned Responses")); return cannedResponses; }; @@ -22,44 +49,43 @@ function forumUpdater() { HtmlListOfCannedResponses = '
  • Create new
  • '; - for (i in cannedResponses) { + for (var i in cannedResponses) HtmlListOfCannedResponses += '
  • ' + cannedResponses[i]["name"] + '
  • '; - } + return HtmlListOfCannedResponses; }; // add the canned response button to the formatting bar function addCannedResponseButton() { - $('.wmd-button-bar .wmd-button-row').append('
    '); - $('.wmd-button-bar').append('
    '); - $('.canned-response-container').hide(); + qS('.wmd-button-bar .wmd-button-row').innerHTML += '
    '; + wmdButtonBar.innerHTML += '
    '; + cannedResponsesContainer.style.display = "none"; }; // create a new canned response function newCannedResponse() { - var textarea = document.querySelector("textarea"), + var textarea = qS("textarea"), start = textarea.selectionStart, end = textarea.selectionEnd, cannedResponseText = textarea.value.substring(start, end), cannedResponseName = prompt("Please name your canned response:", cannedResponseText.slice(0, 10) + "..."); - if (!cannedResponseName) { + if (!cannedResponseName) return "You need to name your canned response!"; - } cannedResponses[Object.keys(cannedResponses).length] = { "name": cannedResponseName, "body": cannedResponseText } localStorage.setItem("Canned Responses", JSON.stringify(cannedResponses)); generateHtmlListOfCannedResponses(); - $('#canned-responses-list').html(HtmlListOfCannedResponses); + qS('#canned-responses-list').innerHTML = HtmlListOfCannedResponses; }; // put the canned response text into the textarea function prefillWithCannedResponse(text) { - $('.wmd-input')[0].value = text; - $('#canned-response-container').toggle(); + qS('.wmd-input')[0].value = text; + toggle(cannedResponsesContainer); }; // collect all the other functions together and run them @@ -67,24 +93,25 @@ function forumUpdater() { generateHtmlListOfCannedResponses(); addCannedResponseButton(); - $('#wmd-canned-response-button').click(function() { - $('.canned-response-container').toggle(); - $('.wmd-button-bar').toggleClass("active"); + qS('#wmd-canned-response-button').addEventListener("click", function() { + toggle(cannedResponsesContainer); + toggleClass(wmdButtonBar, "active"); + - $('#canned-responses-list li').not('#new-canned-response').click(function() { - prefillWithCannedResponse(cannedResponses[$(this).attr("data-canned-response-id")]["body"]); - $('.wmd-button-bar').toggleClass("active"); + jqNot(qS('#canned-responses-list li'), '#new-canned-response').addEventListener("click", function() { + prefillWithCannedResponse(cannedResponses[this.getAttribute("data-canned-response-id")]["body"]); + toggleClass(wmdButtonBar, "active"); }); - $('#new-canned-response').click(function() { + qS('#new-canned-response').addEventListener("click", function() { newCannedResponse(); - $('.wmd-button-bar').toggleClass("active"); + toggleClass(wmdButtonBar, "active"); }); }); } // detect when the text box is popped up, then run - var target = document.querySelector('#reply-control'), + var target = qS('#reply-control'), config = { attributes: true, childList: true, @@ -94,15 +121,10 @@ function forumUpdater() { var observer = new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { - if ($('#wmd-canned-response-button').length < 1) { + if (document.querySelectorAll('#wmd-canned-response-button').length < 1) runTheCannedResponseFunctions(); - } }); }); observer.observe(target, config); } - -var script = document.createElement("script"); -script.textContent = "$(document).ready(" + forumUpdater.toString() + ")"; -document.documentElement.appendChild(script); \ No newline at end of file