erweitern um notizfeld, hinzufügen des Nachorder Portals
This commit is contained in:
parent
1034caefd4
commit
1acfd5e991
1 changed files with 117 additions and 46 deletions
|
@ -1,21 +1,44 @@
|
|||
// ==UserScript==
|
||||
// @name SportWanninger OrderNotes
|
||||
// @namespace http://sportwanninger.de/
|
||||
// @version 2024-11-28
|
||||
// @version 2025-03-25
|
||||
// @updateURL https://git.sportwanninger.de/Public/UserScripts/raw/branch/master/SportWanninger_OrderNotes.user.js
|
||||
// @downloadURL https://git.sportwanninger.de/Public/UserScripts/raw/branch/master/SportWanninger_OrderNotes.user.js
|
||||
// @description Vordefinierte Notizen für Smart.Order
|
||||
// @author Christian Schmied <cs@sport-wanninger.de>
|
||||
// @match https://vororder.intersport.de/*
|
||||
// @match https://nachorder.intersport.de/*
|
||||
// @icon https://www.google.com/s2/favicons?sz=64&domain=intersport.de
|
||||
// @grant none
|
||||
// ==/UserScript==
|
||||
|
||||
const ISWOptions = [
|
||||
{name: "NO_ONLINE"},
|
||||
{name: "NO_MARKET"},
|
||||
{name: "Z-FLYER"},
|
||||
{name: "HausPreis", type: "price"}
|
||||
const DEBUG = false;
|
||||
|
||||
const ISWOptions = [{
|
||||
name: "NOTE",
|
||||
type: "textarea",
|
||||
body: true
|
||||
},
|
||||
{
|
||||
name: "NO_ONLINE",
|
||||
type: "checkbox"
|
||||
},
|
||||
{
|
||||
name: "NO_MARKET",
|
||||
type: "checkbox"
|
||||
},
|
||||
{
|
||||
name: "Z-FLYER",
|
||||
type: "checkbox"
|
||||
},
|
||||
{
|
||||
name: "HausPreis",
|
||||
type: "price"
|
||||
},
|
||||
{
|
||||
name: "OriginalPreis",
|
||||
type: "price"
|
||||
},
|
||||
];
|
||||
|
||||
var observeDOM = (function() {
|
||||
|
@ -31,7 +54,10 @@ var observeDOM = (function() {
|
|||
var mutationObserver = new MutationObserver(callback);
|
||||
|
||||
// have the observer observe for changes in children
|
||||
mutationObserver.observe(obj, {childList: true, subtree: true});
|
||||
mutationObserver.observe(obj, {
|
||||
childList: true,
|
||||
subtree: true
|
||||
});
|
||||
return mutationObserver;
|
||||
} else if (window.addEventListener) { // browser support fallback
|
||||
obj.addEventListener('DOMNodeInserted', callback, false);
|
||||
|
@ -65,7 +91,13 @@ function evaluateForNoteFields(){
|
|||
let selectionList = noteContainer[0].getElementsByClassName("isw-note-selection");
|
||||
|
||||
if (selectionList.length === 0) {
|
||||
//textArea[0].style.display="none";
|
||||
if (!DEBUG) {
|
||||
textArea[0].parentNode.style.height = "0px";
|
||||
textArea[0].parentNode.style.padding = "0px";
|
||||
textArea[0].parentNode.style.border = "0px";
|
||||
textArea[0].style.height = "0px";
|
||||
}
|
||||
textArea[0].disabled = true;
|
||||
textArea[0].addEventListener("change", (e) => console.log("Hi ;D", e));
|
||||
addSelectionList(noteContainer[0], textArea[0]);
|
||||
}
|
||||
|
@ -79,13 +111,22 @@ function addSelectionList(parent, textArea) {
|
|||
var tBody = "";
|
||||
for (const option of ISWOptions) {
|
||||
if (option.type === "price") {
|
||||
tBody += `<div>${option.name}<input type="number" min="0" step="0.01" style="margin-left: .5em; border: 1px solid #c6c6c6; border-radius: 0.25em;" name="isw-option-${option.name}" data-name="${option.name}"/></label>`
|
||||
tBody += `<label>${option.name}<input class="isw-input" type="number" min="0" step="0.01" style="margin-left: .5em; border: 1px solid #c6c6c6; border-radius: 0.25em;" name="isw-option-${option.name}" data-name="${option.name}" data-type="${option.type}"/></label>`
|
||||
} else if (option.type === "text") {
|
||||
tBody += `<label>${option.name}<input class="isw-input" type="text" style="margin-left: .5em; border: 1px solid #c6c6c6; border-radius: 0.25em;" name="isw-option-${option.name}" data-name="${option.name}" data-type="${option.type}"/></label>`
|
||||
} else if (option.type === "textarea") {
|
||||
tBody += `<label>${option.name}
|
||||
<textarea class="isw-input" style="margin-left: .5em; border: 1px solid #c6c6c6; border-radius: 0.25em;"
|
||||
name="isw-option-${option.name}" data-name="${option.name}" data-type="${option.type}" data-body="true"
|
||||
>
|
||||
</textarea>
|
||||
</label>`
|
||||
} else {
|
||||
tBody += `<label><input type="checkbox" style="margin-right: .5em;" name="isw-option-${option.name}" data-name="${option.name}"/>${option.name}</label>`
|
||||
tBody += `<label><input class="isw-input" type="checkbox" style="margin-right: .5em;" name="isw-option-${option.name}" data-name="${option.name}" data-type="${option.type}"/>${option.name}</label>`
|
||||
}
|
||||
}
|
||||
template.innerHTML = templateHead + tBody + templateFoot;
|
||||
var allInputs = template.content.firstChild.getElementsByTagName("input");
|
||||
var allInputs = template.content.firstChild.getElementsByClassName("isw-input");
|
||||
for (const input of allInputs) {
|
||||
input.onchange = handleIswChange(textArea);
|
||||
input.oninput = handleIswChange(textArea);
|
||||
|
@ -99,28 +140,37 @@ function handleIswChange(textArea) {
|
|||
console.log(event);
|
||||
|
||||
const name = event.target.getAttribute("data-name");
|
||||
const type = event.target.getAttribute("type");
|
||||
const type = event.target.getAttribute("data-type");
|
||||
const body = event.target.getAttribute("data-body");
|
||||
|
||||
var value = event.target.value;
|
||||
|
||||
if (type === "checkbox") {
|
||||
value = event.target.checked;
|
||||
}else if(type === "number"){
|
||||
} else if (type === "price") {
|
||||
value = parseFloat(value);
|
||||
}
|
||||
|
||||
console.log("handleIswChange", name, value);
|
||||
|
||||
setPropertyValue(textArea, name, value)
|
||||
if (body === "true") {
|
||||
setOtherValue(textArea, value);
|
||||
} else {
|
||||
setPropertyValue(textArea, name, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function updateFromTextArea(textArea, fieldSet) {
|
||||
const {obj} = parseTextArea(textArea);
|
||||
const inputs = fieldSet.getElementsByTagName("input");
|
||||
const { obj, other } = parseTextArea(textArea);
|
||||
const inputs = fieldSet.getElementsByClassName("isw-input");
|
||||
for (const input of inputs) {
|
||||
const name = input.getAttribute("data-name");
|
||||
const type = input.getAttribute("type");
|
||||
const type = input.getAttribute("data-type");
|
||||
const body = input.getAttribute("data-body");
|
||||
if (body === "true") {
|
||||
input.value = other
|
||||
} else {
|
||||
if (type === "checkbox") {
|
||||
input.checked = obj[name] || false;
|
||||
} else {
|
||||
|
@ -128,6 +178,7 @@ function updateFromTextArea(textArea, fieldSet){
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function parseTextArea(textArea) {
|
||||
const split = textArea.value.split("\n");
|
||||
|
@ -135,11 +186,16 @@ function parseTextArea(textArea) {
|
|||
var obj = {};
|
||||
if (jsonString.length > 0 && jsonString.charAt(0) == "{") {
|
||||
obj = JSON.parse(jsonString);
|
||||
} else {
|
||||
return {
|
||||
obj: obj,
|
||||
other: textArea.value.trim()
|
||||
};
|
||||
}
|
||||
|
||||
var other = "";
|
||||
if (split.length > 1) {
|
||||
other = split.slice(1).join('\n');
|
||||
other = split.slice(1);
|
||||
}
|
||||
|
||||
return {
|
||||
|
@ -149,7 +205,11 @@ function parseTextArea(textArea) {
|
|||
}
|
||||
|
||||
function setPropertyValue(textArea, name, value) {
|
||||
const {obj, other} = parseTextArea(textArea);
|
||||
const {
|
||||
obj,
|
||||
other
|
||||
} = parseTextArea(textArea);
|
||||
console.log("PropValue: other:" + other);
|
||||
|
||||
if (value === false || value === 0) {
|
||||
obj[name] = undefined;
|
||||
|
@ -157,6 +217,16 @@ function setPropertyValue(textArea,name,value){
|
|||
obj[name] = value;
|
||||
}
|
||||
|
||||
updateTextAreaValue(textArea, obj, other);
|
||||
}
|
||||
|
||||
function setOtherValue(textArea, newOther) {
|
||||
const { obj } = parseTextArea(textArea);
|
||||
|
||||
updateTextAreaValue(textArea, obj, newOther);
|
||||
}
|
||||
|
||||
function updateTextAreaValue(textArea, obj, other) {
|
||||
var jsonString = JSON.stringify(obj);
|
||||
|
||||
if (jsonString === "{}") {
|
||||
|
@ -168,7 +238,7 @@ function setPropertyValue(textArea,name,value){
|
|||
fullString += "\n" + other;
|
||||
}
|
||||
|
||||
textArea.value = fullString;
|
||||
textArea.value = fullString.trim();
|
||||
|
||||
var e = new Event('input', {
|
||||
bubbles: true,
|
||||
|
@ -177,6 +247,7 @@ function setPropertyValue(textArea,name,value){
|
|||
textArea.dispatchEvent(e);
|
||||
}
|
||||
|
||||
|
||||
(function() {
|
||||
'use strict';
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue