Skip to content

Commit 3c0a2cc

Browse files
committed
feat: support multiple lines #1
1 parent a349d9f commit 3c0a2cc

File tree

2 files changed

+58
-11
lines changed

2 files changed

+58
-11
lines changed

Diff for: app.js

+44-9
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,15 @@ let defaultSize = 512
33
const generateIconSVG = (options) => {
44
const {
55
text = 'AI',
6-
size = defaultSize,
7-
bgColor = '#131516',
8-
radius = 80,
9-
fontFamily = 'Arial',
10-
fontWeight = 'normal',
11-
textColor = '#70e000',
12-
verticalOffset = 0
6+
textLead = -1,
7+
textLineHeight = 1,
8+
size = defaultSize,
9+
bgColor = '#131516',
10+
radius = 80,
11+
fontFamily = 'Arial',
12+
fontWeight = 'normal',
13+
textColor = '#70e000',
14+
verticalOffset = 0
1315
} = options;
1416

1517
const svgNS = "http://www.w3.org/2000/svg";
@@ -33,7 +35,14 @@ const generateIconSVG = (options) => {
3335
textElement.setAttribute("font-family", fontFamily);
3436
textElement.setAttribute("font-weight", fontWeight);
3537
textElement.setAttribute("fill", textColor);
36-
textElement.textContent = text;
38+
textElement.innerHTML = text.replace(/\r\n|\r/g, '\n').split('\n')[0] + text
39+
.replace(/\r\n|\r/g, '\n')
40+
.split('\n')
41+
.slice(1)
42+
.map((item) => {
43+
return '<tspan dx="'+textLead+'em" dy="'+textLineHeight + 'em">' + item + '</tspan>'
44+
}).join('')
45+
3746
svg.appendChild(textElement);
3847

3948
const adjustTextSizeAndPosition = () => {
@@ -506,6 +515,8 @@ const applyColorScheme = (index) => {
506515

507516
const defaultSettings = {
508517
text: 'AI',
518+
textLead: -1,
519+
textLineHeight: 1,
509520
size: defaultSize,
510521
bgColor: '#131516',
511522
radius: 80,
@@ -518,6 +529,8 @@ const defaultSettings = {
518529
const generateIcon = () => {
519530
const options = {
520531
text: document.getElementById('text').value,
532+
textLead: parseFloat(document.getElementById('textLead').value),
533+
textLineHeight: parseFloat(document.getElementById('textLineHeight').value),
521534
size: parseInt(document.getElementById('size').value),
522535
bgColor: document.getElementById('bgColor').value,
523536
radius: parseInt(document.getElementById('radius').value),
@@ -641,6 +654,8 @@ const resetToDefault = () => {
641654
}
642655
});
643656
document.getElementById('verticalOffsetValue').textContent = '0%';
657+
document.getElementById('textLeadValue').textContent = -1;
658+
document.getElementById('textLineHeightValue').textContent = 1;
644659

645660
generateIcon();
646661
};
@@ -726,6 +741,24 @@ verticalOffsetInput.addEventListener('input', function() {
726741
generateIcon();
727742
});
728743

744+
const textLeadInput = document.getElementById('textLead');
745+
const textLeadValue = document.getElementById('textLeadValue');
746+
747+
textLeadInput.addEventListener('input', function() {
748+
console.log('changed', this.value)
749+
textLeadValue.textContent = this.value;
750+
generateIcon();
751+
});
752+
753+
const textLineHeightInput = document.getElementById('textLineHeight');
754+
const textLineHeightValue = document.getElementById('textLineHeightValue');
755+
756+
textLineHeightInput.addEventListener('input', function() {
757+
console.log('changed', this.value)
758+
textLineHeightValue.textContent = this.value;
759+
generateIcon();
760+
});
761+
729762
// Add event listeners to all input elements
730763
const inputElements = document.querySelectorAll('input, select');
731764
inputElements.forEach(element => {
@@ -1611,6 +1644,8 @@ document.addEventListener('DOMContentLoaded', function() {
16111644

16121645
function applyConfig(config) {
16131646
document.getElementById('text').value = config.text;
1647+
document.getElementById('textLead').value = config.textLead;
1648+
document.getElementById('textLineHeight').value = config.textLineHeight;
16141649
document.getElementById('size').value = config.size === 64 ? config.size * 8 : config.size;
16151650
document.getElementById('bgColor').value = config.bgColor;
16161651
document.getElementById('textColor').value = config.textColor;
@@ -1663,4 +1698,4 @@ document.addEventListener('DOMContentLoaded', (event) => {
16631698
}
16641699
});
16651700
});
1666-
});
1701+
});

Diff for: index.html

+14-2
Original file line numberDiff line numberDiff line change
@@ -159,10 +159,22 @@ <h2 class="text-3xl sm:text-4xl font-semibold mb-6 text-center text-gray-900">Tr
159159
<h2 class="text-xl sm:text-2xl font-semibold mb-4 text-gray-700">Settings</h2>
160160
<div class="mb-4">
161161
<label for="text" class="block mb-2 text-gray-600">Text</label>
162-
<input type="text" id="text" class="w-full border rounded px-3 py-2" value="AI">
162+
<textarea type="text" id="text" class="w-full border rounded px-3 py-2">AI</textarea>
163163
<p class="text-xs text-gray-600 mt-2">Emojis are supported. Search & copy emoji on <a href="https://emojispark.com" target="_blank" class="inline-block underline">EmojiSpark.com</a>
164164
</p>
165165
</div>
166+
<div class="flex gap-2.5" id="multipleLineConfig">
167+
<div class="mb-4 flex-1">
168+
<label for="textLead" class="block mb-2 text-gray-600">Text Lead</label>
169+
<input type="range" id="textLead" min="-3" max="3" value="-1" step="0.01" class="w-full">
170+
<span id="textLeadValue" class="text-sm text-gray-500">-1</span>
171+
</div>
172+
<div class="mb-4 flex-1">
173+
<label for="textLineHeight" class="block mb-2 text-gray-600">Text Line Height</label>
174+
<input type="range" id="textLineHeight" min="-3" max="3" value="1" step="0.01" class="w-full">
175+
<span id="textLineHeightValue" class="text-sm text-gray-500">1</span>
176+
</div>
177+
</div>
166178
<div class="flex flex-wrap -mx-2 mb-4">
167179
<div class="w-1/2 px-2">
168180
<label for="size" class="block mb-2 text-gray-600">Size</label>
@@ -451,4 +463,4 @@ <h3 class="text-xl font-semibold text-gray-700">How do I add the favicon to my w
451463
font-display: swap;
452464
}</style>
453465
</body>
454-
</html>
466+
</html>

0 commit comments

Comments
 (0)