diff --git a/classic.js b/classic.js
index f31ad61..e6e7126 100644
--- a/classic.js
+++ b/classic.js
@@ -158,6 +158,7 @@
let topperOffsetY_Px = 0;
let topperSizeMultiplier = 1;
let shineEnabled = true;
+ let borderEnabled = false;
const patterns = {};
const api = {
@@ -171,7 +172,8 @@
setTopperOffsetX(val) { topperOffsetX_Px = (Number(val) || 0) * 5; },
setTopperOffsetY(val) { topperOffsetY_Px = (Number(val) || 0) * -5; },
setTopperSize(multiplier) { topperSizeMultiplier = Number(multiplier) || 1; },
- setShineEnabled(on) { shineEnabled = !!on; }
+ setShineEnabled(on) { shineEnabled = !!on; },
+ setBorderEnabled(on) { borderEnabled = !!on; }
};
const svg = (tag, attrs, children) => m(tag, attrs, children);
@@ -199,8 +201,10 @@
const scale = cellScale(cell);
const transform = [(shape.base.transform||''), `scale(${scale})`].join(' ');
const commonAttrs = {
- 'vector-effect': 'non-scaling-stroke', stroke: '#111827',
- 'stroke-width': 2, 'paint-order': 'stroke fill', class: 'balloon',
+ 'vector-effect': 'non-scaling-stroke',
+ stroke: borderEnabled ? '#111827' : 'none',
+ 'stroke-width': borderEnabled ? 0.6 : 0,
+ 'paint-order': 'stroke fill', class: 'balloon',
fill: explicitFill || '#cccccc'
};
if (cell.isTopper) {
@@ -667,7 +671,7 @@ function distinctPaletteSlots(palette) {
function initClassic() {
try {
if (typeof window.m === 'undefined') return fail('Mithril not loaded');
- const display = document.getElementById('classic-display'), patSel = document.getElementById('classic-pattern'), lengthInp = document.getElementById('classic-length-ft'), clusterHint = document.getElementById('classic-cluster-hint'), reverseCb = document.getElementById('classic-reverse'), topperControls = document.getElementById('topper-controls'), topperToggleRow = document.getElementById('classic-topper-toggle-row'), topperEnabledCb = document.getElementById('classic-topper-enabled'), topperSizeInp = document.getElementById('classic-topper-size'), shineEnabledCb = document.getElementById('classic-shine-enabled');
+ const display = document.getElementById('classic-display'), patSel = document.getElementById('classic-pattern'), lengthInp = document.getElementById('classic-length-ft'), clusterHint = document.getElementById('classic-cluster-hint'), reverseCb = document.getElementById('classic-reverse'), topperControls = document.getElementById('topper-controls'), topperToggleRow = document.getElementById('classic-topper-toggle-row'), topperEnabledCb = document.getElementById('classic-topper-enabled'), topperSizeInp = document.getElementById('classic-topper-size'), shineEnabledCb = document.getElementById('classic-shine-enabled'), borderEnabledCb = document.getElementById('classic-border-enabled');
const patternShapeBtns = Array.from(document.querySelectorAll('[data-pattern-shape]'));
const patternCountBtns = Array.from(document.querySelectorAll('[data-pattern-count]'));
const patternLayoutBtns = Array.from(document.querySelectorAll('[data-pattern-layout]'));
@@ -762,6 +766,7 @@ function distinctPaletteSlots(palette) {
GC.setTopperOffsetY(topperOffsetY);
GC.setTopperSize(topperSizeInp?.value);
GC.setShineEnabled(!!shineEnabledCb?.checked);
+ GC.setBorderEnabled(!!borderEnabledCb?.checked);
if (document.body) {
if (showTopper) document.body.dataset.topperOverlay = '1';
else delete document.body.dataset.topperOverlay;
@@ -814,8 +819,15 @@ function distinctPaletteSlots(palette) {
.forEach(el => { if (!el) return; const eventType = (el.type === 'range' || el.type === 'number') ? 'input' : 'change'; el.addEventListener(eventType, () => { if (el === topperSizeInp || el === topperEnabledCb) lastPresetKey = 'custom'; updateClassicDesign(); }); });
topperEnabledCb?.addEventListener('change', updateClassicDesign);
shineEnabledCb?.addEventListener('change', (e) => { const on = !!e.target.checked; GC.setShineEnabled(on); updateClassicDesign(); window.syncAppShine?.(on); });
+ borderEnabledCb?.addEventListener('change', (e) => {
+ const on = !!e.target.checked;
+ GC.setBorderEnabled(on);
+ try { localStorage.setItem('classic:borderEnabled:v1', JSON.stringify(on)); } catch {}
+ updateClassicDesign();
+ });
refreshClassicPaletteUi = initClassicColorPicker(updateClassicDesign);
try { const saved = localStorage.getItem('app:shineEnabled:v1'); if (saved !== null && shineEnabledCb) shineEnabledCb.checked = JSON.parse(saved); } catch {}
+ try { const saved = localStorage.getItem('classic:borderEnabled:v1'); if (saved !== null && borderEnabledCb) borderEnabledCb.checked = JSON.parse(saved); } catch {}
setLengthForPattern();
updateClassicDesign();
refreshClassicPaletteUi?.();
diff --git a/index.html b/index.html
index 22ad0cd..be688e3 100644
--- a/index.html
+++ b/index.html
@@ -7,6 +7,7 @@
+
@@ -33,11 +34,19 @@
Professional Design Tool
-
+
+
@@ -49,11 +58,15 @@
Tools
-
+
+
+
Use Path to click-drag a line; balloons will be auto-placed along it.
+
+
+
+
+ 1.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -115,6 +163,10 @@
Enable Shine
+
@@ -264,6 +316,10 @@
Enable Shine
+