erweitern um notizfeld, hinzufügen des Nachorder Portals

This commit is contained in:
Christian Schmied 2025-03-25 10:14:23 +01:00
parent 1034caefd4
commit 1acfd5e991

View file

@ -1,21 +1,44 @@
// ==UserScript== // ==UserScript==
// @name SportWanninger OrderNotes // @name SportWanninger OrderNotes
// @namespace http://sportwanninger.de/ // @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 // @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 // @downloadURL https://git.sportwanninger.de/Public/UserScripts/raw/branch/master/SportWanninger_OrderNotes.user.js
// @description Vordefinierte Notizen für Smart.Order // @description Vordefinierte Notizen für Smart.Order
// @author Christian Schmied <cs@sport-wanninger.de> // @author Christian Schmied <cs@sport-wanninger.de>
// @match https://vororder.intersport.de/* // @match https://vororder.intersport.de/*
// @match https://nachorder.intersport.de/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=intersport.de // @icon https://www.google.com/s2/favicons?sz=64&domain=intersport.de
// @grant none // @grant none
// ==/UserScript== // ==/UserScript==
const ISWOptions = [ const DEBUG = false;
{name: "NO_ONLINE"},
{name: "NO_MARKET"}, const ISWOptions = [{
{name: "Z-FLYER"}, name: "NOTE",
{name: "HausPreis", type: "price"} 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() { var observeDOM = (function() {
@ -31,7 +54,10 @@ var observeDOM = (function() {
var mutationObserver = new MutationObserver(callback); var mutationObserver = new MutationObserver(callback);
// have the observer observe for changes in children // have the observer observe for changes in children
mutationObserver.observe(obj, {childList: true, subtree: true}); mutationObserver.observe(obj, {
childList: true,
subtree: true
});
return mutationObserver; return mutationObserver;
} else if (window.addEventListener) { // browser support fallback } else if (window.addEventListener) { // browser support fallback
obj.addEventListener('DOMNodeInserted', callback, false); obj.addEventListener('DOMNodeInserted', callback, false);
@ -65,7 +91,13 @@ function evaluateForNoteFields(){
let selectionList = noteContainer[0].getElementsByClassName("isw-note-selection"); let selectionList = noteContainer[0].getElementsByClassName("isw-note-selection");
if (selectionList.length === 0) { 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)); textArea[0].addEventListener("change", (e) => console.log("Hi ;D", e));
addSelectionList(noteContainer[0], textArea[0]); addSelectionList(noteContainer[0], textArea[0]);
} }
@ -79,13 +111,22 @@ function addSelectionList(parent, textArea) {
var tBody = ""; var tBody = "";
for (const option of ISWOptions) { for (const option of ISWOptions) {
if (option.type === "price") { 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 { } 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; 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) { for (const input of allInputs) {
input.onchange = handleIswChange(textArea); input.onchange = handleIswChange(textArea);
input.oninput = handleIswChange(textArea); input.oninput = handleIswChange(textArea);
@ -99,28 +140,37 @@ function handleIswChange(textArea) {
console.log(event); console.log(event);
const name = event.target.getAttribute("data-name"); 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; var value = event.target.value;
if (type === "checkbox") { if (type === "checkbox") {
value = event.target.checked; value = event.target.checked;
}else if(type === "number"){ } else if (type === "price") {
value = parseFloat(value); value = parseFloat(value);
} }
console.log("handleIswChange", name, 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) { function updateFromTextArea(textArea, fieldSet) {
const {obj} = parseTextArea(textArea); const { obj, other } = parseTextArea(textArea);
const inputs = fieldSet.getElementsByTagName("input"); const inputs = fieldSet.getElementsByClassName("isw-input");
for (const input of inputs) { for (const input of inputs) {
const name = input.getAttribute("data-name"); 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") { if (type === "checkbox") {
input.checked = obj[name] || false; input.checked = obj[name] || false;
} else { } else {
@ -128,6 +178,7 @@ function updateFromTextArea(textArea, fieldSet){
} }
} }
} }
}
function parseTextArea(textArea) { function parseTextArea(textArea) {
const split = textArea.value.split("\n"); const split = textArea.value.split("\n");
@ -135,11 +186,16 @@ function parseTextArea(textArea) {
var obj = {}; var obj = {};
if (jsonString.length > 0 && jsonString.charAt(0) == "{") { if (jsonString.length > 0 && jsonString.charAt(0) == "{") {
obj = JSON.parse(jsonString); obj = JSON.parse(jsonString);
} else {
return {
obj: obj,
other: textArea.value.trim()
};
} }
var other = ""; var other = "";
if (split.length > 1) { if (split.length > 1) {
other = split.slice(1).join('\n'); other = split.slice(1);
} }
return { return {
@ -149,7 +205,11 @@ function parseTextArea(textArea) {
} }
function setPropertyValue(textArea, name, value) { 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) { if (value === false || value === 0) {
obj[name] = undefined; obj[name] = undefined;
@ -157,6 +217,16 @@ function setPropertyValue(textArea,name,value){
obj[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); var jsonString = JSON.stringify(obj);
if (jsonString === "{}") { if (jsonString === "{}") {
@ -168,7 +238,7 @@ function setPropertyValue(textArea,name,value){
fullString += "\n" + other; fullString += "\n" + other;
} }
textArea.value = fullString; textArea.value = fullString.trim();
var e = new Event('input', { var e = new Event('input', {
bubbles: true, bubbles: true,
@ -177,6 +247,7 @@ function setPropertyValue(textArea,name,value){
textArea.dispatchEvent(e); textArea.dispatchEvent(e);
} }
(function() { (function() {
'use strict'; 'use strict';