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('' + HtmlListOfCannedResponses + ' ');
- $('.canned-response-container').hide();
+ qS('.wmd-button-bar .wmd-button-row').innerHTML += '
';
+ wmdButtonBar.innerHTML += '' + HtmlListOfCannedResponses + ' ';
+ 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