您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Modifies Spectrum color pickers to offer the user’s selection of preset colors and accept input.
当前为
- // ==UserScript==
- // @name Custom Spectrum Palette
- // @namespace http://tampermonkey.net/
- // @version 3
- // @description Modifies Spectrum color pickers to offer the user’s selection of preset colors and accept input.
- // @author Salvatos
- // @match https://app.kanka.io/*relations*
- // @match https://app.kanka.io/*entity_events*
- // @match https://app.kanka.io/*map_markers*
- // @match https://app.kanka.io/*presets*
- // @match https://app.kanka.io/*calendars*
- // @match https://app.kanka.io/*families/*/tree*
- // @icon https://www.google.com/s2/favicons?domain=kanka.io
- // @grant none
- // @run-at document-end
- // ==/UserScript==
- /* INSTRUCTIONS
- Add your color values in any valid format to the "palette" setting in the function below.
- - Each line enclosed in square brackets corresponds to a row of options in the color picker.
- - Each line should end with a comma, except the last row.
- - Values are enclosed in quotation marks and separated by commas.
- Valid formats:
- https://bgrins.github.io/spectrum/#details-acceptedColorInputs
- */
- function spectrumSettings(appendTo, pageDelay = 0) {
- setTimeout(function() {
- $("input.spectrum").spectrum({
- showInput: true,
- showPalette: true,
- preferredFormat: "hex",
- appendTo: appendTo,
- palette: [ // Add your colors here
- ['#ffffff', '#000000', '#ff0000', '#ff8000', '#ffff00'],
- ['#008000', '#0000ff', '#4b0082', '#9400d3']
- ]
- });
- }, pageDelay);
- }
- /* Set the closest container (to the input) that exists at page load to watch for changes to keep MutationObserver lean */
- /* Also, specify appendTo to make the input field editable in modals */
- // Entity Connections page and calendar Event modal and entity Event modal
- if (
- (window.location.href.indexOf("relations") != -1 && window.location.href.indexOf("entities") != -1) ||
- window.location.href.indexOf("calendars") != -1 ||
- window.location.href.indexOf("entity_events") != -1
- ) {
- document.targetNode = $("#entity-modal")[0];
- document.appendTo = "#entity-modal";
- }
- // Bulk relation edit page
- else if (window.location.href.indexOf("relations") != -1 && window.location.href.indexOf("entities") == -1) {
- document.targetNode = $("#bulk-edit")[0];
- document.appendTo = "#bulk-edit";
- }
- // Map marker edit page
- else if (window.location.href.indexOf("map_markers") != -1) {
- document.targetNode = $("#map-marker-form")[0];
- document.appendTo = "#map-marker-form";
- }
- // Map marker preset edit page
- else if (window.location.href.indexOf("presets") != -1) {
- document.targetNode = $("section.content .grid")[0];
- document.appendTo = "section.content .grid";
- }
- // Family tree relation edit modal
- else if (window.location.href.indexOf("tree") != -1) {
- document.targetNode = $("#family-tree")[0];
- document.appendTo = "#family-tree";
- }
- // Undocumented instances (normally the script shouldn’t run on those pages)
- else {
- document.targetNode = false; // if we wanted to run everywhere just in case, we might observe and appendTo $("#app")[0];
- }
- // If we know what we’re looking for, start observing the page
- if (document.targetNode) {
- /* Even though it exists in the DOM at page load,
- * the relations bulk editor seems to recreate the color picker when the modal opens for the first time...
- * So we need a bit of a delay to hit the new instance and not the one that’s being destroyed
- */
- let pageDelay = (window.location.href.indexOf("relations") != -1 && window.location.href.indexOf("entities") == -1) ? 500 : 0;
- // Set and run the observer until the color picker becomes visible on screen after its container changes
- let observer = new MutationObserver(function(mutations) {
- if ($('.sp-replacer:visible').length) {
- observer.disconnect();
- spectrumSettings(document.appendTo, pageDelay);
- }
- });
- observer.observe(document.targetNode, {attributes: false, childList: true, characterData: false, subtree:true});
- }