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==
// @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';