Library for Calculator (Graphing)
Dieses Skript sollte nicht direkt installiert werden. Es handelt sich hier um eine Bibliothek für andere Skripte, welche über folgenden Befehl in den Metadaten eines Skriptes eingebunden wird // @require https://update.greasyfork.org/scripts/503150/1425747/Graphing%20Plugin.js
// ==UserScript==
// @name Graphing Plugin
// @namespace https://greasyfork.org/en/users/1291009
// @author BadOrBest
// @license MIT
// @version 1.4
// @description A library for adding and managing graphs on any webpage.
// @grant none
// @require https://cdnjs.cloudflare.com/ajax/libs/mathjs/13.0.3/math.min.js
// @require https://cdnjs.cloudflare.com/ajax/libs/Chart.js/4.4.1/chart.min.js
// ==/UserScript==
(function(global) {
'use strict';
console.log('Graphing Library loaded');
global.GraphingLibrary = {
chartInstance: null,
createCanvas: function() {
let canvas = document.getElementById('graphCanvas');
if (!canvas) {
canvas = document.createElement('canvas');
canvas.id = 'graphCanvas';
canvas.style.position = 'fixed';
canvas.style.bottom = '0';
canvas.style.right = '0';
canvas.style.zIndex = '9999';
canvas.style.width = '600px'; // Set canvas width
canvas.style.height = '400px'; // Set canvas height
document.body.appendChild(canvas);
console.log('Canvas created');
}
return canvas;
},
updateGraph: function() {
console.log('Updating graph');
const graphData = JSON.parse(localStorage.getItem('graphData') || '[]');
const canvas = this.createCanvas();
const ctx = canvas.getContext('2d');
if (this.chartInstance) {
this.chartInstance.destroy();
}
this.chartInstance = new Chart(ctx, {
type: 'line',
data: {
datasets: graphData.map(data => ({
label: data.label,
data: data.points,
borderColor: data.color || 'blue',
borderWidth: 1,
fill: false
}))
},
options: {
scales: {
x: {
type: 'linear',
position: 'bottom'
}
}
}
});
},
toggleGraph: function() {
const canvas = this.createCanvas();
canvas.style.display = canvas.style.display === 'none' ? 'block' : 'none';
if (canvas.style.display === 'block') {
this.updateGraph();
}
console.log('Toggled graph display');
},
clearGraph: function() {
localStorage.setItem('graphData', JSON.stringify([]));
const canvas = document.getElementById('graphCanvas');
if (canvas) {
canvas.style.display = 'none';
}
if (this.chartInstance) {
this.chartInstance.destroy();
this.chartInstance = null;
}
console.log('Cleared graph data');
},
addGraphData: function(expression) {
if (expression) {
try {
const xValues = Array.from({ length: 100 }, (_, i) => i - 50); // X values from -50 to 50
const yValues = xValues.map(x => math.evaluate(expression.replace(/x/g, x))); // Evaluate expression
const newGraphData = JSON.parse(localStorage.getItem('graphData') || '[]');
newGraphData.push({
label: `Graph ${newGraphData.length + 1}`,
points: xValues.map((x, i) => ({ x, y: yValues[i] }))
});
localStorage.setItem('graphData', JSON.stringify(newGraphData));
this.updateGraph();
console.log('Added graph data');
} catch (error) {
alert('Error evaluating expression: ' + error.message);
console.error('Error evaluating expression:', error);
}
}
}
};
// Initialize or update the graph display if needed
if (JSON.parse(localStorage.getItem('graphData') || '[]').length > 0) {
GraphingLibrary.toggleGraph();
}
})(window);