Added new script.
This commit is contained in:
parent
7e4d49192d
commit
028112b2a5
|
@ -0,0 +1,225 @@
|
|||
// ==UserScript==
|
||||
// @name Tumblr - Inline Queue Button
|
||||
// @namespace Makaze
|
||||
// @description Adds a Queue button to avoid using the submission dropdown.
|
||||
// @include *www.tumblr.com/*
|
||||
// @grant none
|
||||
// @version 1.0.0
|
||||
// ==/UserScript==
|
||||
|
||||
function createElement(type, callback) {
|
||||
var element = document.createElement(type);
|
||||
|
||||
callback(element);
|
||||
|
||||
return element;
|
||||
}
|
||||
|
||||
// Classes constructor
|
||||
|
||||
function ClassHandler() {
|
||||
var self = this;
|
||||
|
||||
this.classList = function(elem) {
|
||||
return elem.className.trim().split(/[\b\s]/);
|
||||
};
|
||||
|
||||
this.hasClass = function(elem, className) {
|
||||
var classes = self.classList(elem),
|
||||
has = false,
|
||||
i = 0;
|
||||
|
||||
for (i = 0; i < classes.length; i++) {
|
||||
if (classes[i] === className) {
|
||||
has = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return (has);
|
||||
};
|
||||
|
||||
this.addClass = function(elem, className) {
|
||||
var classes;
|
||||
|
||||
if (!self.hasClass(elem, className)) {
|
||||
classes = self.classList(elem);
|
||||
classes.push(className);
|
||||
elem.className = classes.join(' ').trim();
|
||||
}
|
||||
|
||||
return self;
|
||||
};
|
||||
|
||||
this.removeClass = function(elem, className) {
|
||||
var classes = self.classList(elem),
|
||||
i = 0;
|
||||
|
||||
for (i = 0; i < classes.length; i++) {
|
||||
if (classes[i] === className) {
|
||||
classes.splice(i, 1);
|
||||
}
|
||||
}
|
||||
|
||||
elem.className = classes.join(' ').trim();
|
||||
|
||||
return self;
|
||||
};
|
||||
|
||||
this.toggleClass = function(elem, className) {
|
||||
var classes;
|
||||
|
||||
if (self.hasClass(elem, className)) {
|
||||
self.removeClass(elem, className);
|
||||
} else {
|
||||
classes = self.classList(elem);
|
||||
classes.push(className);
|
||||
elem.className = classes.join(' ').trim();
|
||||
}
|
||||
|
||||
return self;
|
||||
};
|
||||
}
|
||||
|
||||
// Initilize
|
||||
|
||||
var Classes = new ClassHandler();
|
||||
|
||||
// End Classes constructor
|
||||
|
||||
function isChildOf(selector, element) {
|
||||
switch (selector.charAt(0)) {
|
||||
case '.':
|
||||
if (document.getElementsByClassName(selector.slice(1))[0] == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
while (element.getElementsByClassName(selector.slice(1))[0] == null && element.parentNode) {
|
||||
if (Classes.hasClass(element, selector.slice(1))) {
|
||||
return true;
|
||||
}
|
||||
element = element.parentNode;
|
||||
}
|
||||
break;
|
||||
case '#':
|
||||
if (document.getElementById(selector.slice(1)) == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
while (element.parentNode) {
|
||||
if (element.id === selector.slice(1)) {
|
||||
return true;
|
||||
}
|
||||
element = element.parentNode;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if (document.getElementsByTagName(selector)[0] == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
while (element.getElementsByTagName(selector) == null && element.parentNode) {
|
||||
if (element.tagName === selector.toUpperCase()) {
|
||||
return true;
|
||||
}
|
||||
element = element.parentNode;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function getParent(selector, element) {
|
||||
switch (selector.charAt(0)) {
|
||||
case '.':
|
||||
if (document.getElementsByClassName(selector.slice(1))[0] == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
while (element.getElementsByClassName(selector.slice(1))[0] == null && element.parentNode) {
|
||||
if (Classes.hasClass(element, selector.slice(1))) {
|
||||
return element;
|
||||
}
|
||||
element = element.parentNode;
|
||||
}
|
||||
break;
|
||||
case '#':
|
||||
if (document.getElementById(selector.slice(1)) == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
while (element.parentNode) {
|
||||
if (element.id === selector.slice(1)) {
|
||||
return element;
|
||||
}
|
||||
element = element.parentNode;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if (document.getElementsByTagName(selector)[0] == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
while (element.getElementsByTagName(selector) == null && element.parentNode) {
|
||||
if (element.tagName === selector.toUpperCase()) {
|
||||
return element;
|
||||
}
|
||||
element = element.parentNode;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function queueButtonHandler(event) {
|
||||
var context,
|
||||
controls;
|
||||
|
||||
if (!isChildOf('.post-form', event.target)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
context = getParent('.post-form', event.target);
|
||||
|
||||
if (context.getElementsByClassName('queueButton')[0] != null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
console.log(context);
|
||||
|
||||
controls = context.getElementsByClassName('post-form--controls')[0].firstChild;
|
||||
|
||||
controls.insertBefore(createElement('div', function(queueButton) {
|
||||
queueButton.className = 'queueButton control right';
|
||||
queueButton.appendChild(createElement('div', function(chrome) {
|
||||
chrome.className = 'split chrome blue';
|
||||
chrome.style.marginRight = '5px';
|
||||
chrome.appendChild(createElement('button', function(clickable) {
|
||||
clickable.className = "flat-button blue caption create_post_button";
|
||||
clickable.appendChild(document.createTextNode('Queue'));
|
||||
|
||||
clickable.onclick = function() {
|
||||
var dropButton = this.parentNode.parentNode.nextSibling.getElementsByClassName('dropdown')[0],
|
||||
context,
|
||||
items,
|
||||
item,
|
||||
i = 0;
|
||||
|
||||
dropButton.click();
|
||||
|
||||
context = document.getElementsByClassName('popover--save-post-dropdown')[0];
|
||||
|
||||
for (i = 0, items = context.getElementsByClassName('item-option'); i < items.length; i++) {
|
||||
item = items[i];
|
||||
|
||||
if (item.hasAttribute('data-js-queue')) {
|
||||
item.click();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
dropButton.previousSibling.click();
|
||||
};
|
||||
}));
|
||||
}));
|
||||
}), controls.lastChild);
|
||||
}
|
||||
|
||||
document.addEventListener('mouseover', queueButtonHandler, false);
|
|
@ -56,6 +56,7 @@ A collection of my client-side userscripts.
|
|||
* [`SF_Mafia_Disable_Post_Editing.user.js`](#sf_mafia_disable_post_editinguserjs)
|
||||
* [`Tumblr_Custom_Buttons.user.js`](#tumblr_custom_buttonsuserjs)
|
||||
* [`Tumblr_Custom_Shortcuts.user.js`](#tumblr_custom_shortcutsuserjs)
|
||||
* [`Tumblr_Inline_Queue_Button.user.js`](#tumblr_inline_queue_buttonuserjs)
|
||||
|
||||
## IP.Board
|
||||
|
||||
|
@ -253,3 +254,7 @@ Miscellaneous
|
|||
#### `Tumblr_Custom_Shortcuts.user.js`
|
||||
**Name**: Tumblr - Custom Shortcuts
|
||||
**Description**: Adds custom shortcuts to the Tumblr Editor.
|
||||
|
||||
#### `Tumblr_Inline_Queue_Button.user.js`
|
||||
**Name**: Tumblr - Inline Queue Button
|
||||
**Description**: Adds a Queue button to avoid using the submission dropdown.
|
||||
|
|
Loading…
Reference in New Issue