pro tip: we don't need to generate static svg!
This commit is contained in:
parent
1a9fb03ffb
commit
ba1d4bda40
|
@ -23,8 +23,10 @@ simple! just slap this code into your html document, and the js file will be aut
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<script type="text/javascript" src="https://www.mellodoot.com/js/pridetriangle.js" defer></script>
|
<script type="text/javascript" src="https://www.mellodoot.com/js/pridetriangle.js" defer></script>
|
||||||
|
<!-- in case this goes down, try the below example! -->
|
||||||
|
<script type="text/javascript" src="https://github.com/mellodoot/prideflag/blob/main/prideflag.js" defer></script>
|
||||||
```
|
```
|
||||||
|
|
||||||
...or copy the code from `pridetriangle.js` and drop it into your own self-hosted file. up to you!
|
...or copy the code from `prideflag.js` and drop it into your own self-hosted file. up to you!
|
||||||
|
|
||||||
have fun spreading the gay! 🌈
|
have fun spreading the gay! 🌈
|
||||||
|
|
|
@ -1,3 +1,23 @@
|
||||||
|
/**
|
||||||
|
* 🏳️🌈🏳️⚧️💖 pride flag 💖🏳️⚧️🏳️🌈
|
||||||
|
* made with ❤️ by mellodoot, 2023
|
||||||
|
*
|
||||||
|
* an alternate, insanely over-engineered version of prideflag.js
|
||||||
|
* which generates all required svg elements at runtime.
|
||||||
|
*
|
||||||
|
* given the svg doesn't exactly change however, this turned
|
||||||
|
* out to be wholly unnecessary.
|
||||||
|
*
|
||||||
|
* neat proof of concept, though!
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates an SVG path using the given parameters.
|
||||||
|
* @param {string} id The SVG `id` tag to give the path element.
|
||||||
|
* @param {string} d An SVG draw path.
|
||||||
|
* @param {string} fill A fill colour to apply within an included `style` tag.
|
||||||
|
* @returns An SVG path.
|
||||||
|
*/
|
||||||
function create_path(id, d, fill) {
|
function create_path(id, d, fill) {
|
||||||
const path = document.createElementNS("http://www.w3.org/2000/svg", "path");
|
const path = document.createElementNS("http://www.w3.org/2000/svg", "path");
|
||||||
path.setAttribute('id', id);
|
path.setAttribute('id', id);
|
||||||
|
@ -6,6 +26,16 @@ function create_path(id, d, fill) {
|
||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates an SVG rectangle using the given parameters.
|
||||||
|
* @param {string} id The SVG `id` tag to give the rectangle element.
|
||||||
|
* @param {number} x The X coordinate of the rectangle.
|
||||||
|
* @param {number} y The Y coordinate of the rectangle.
|
||||||
|
* @param {number} width The width of the rectangle.
|
||||||
|
* @param {number} height The height of the rectangle.
|
||||||
|
* @param {string} fill A fill colour to apply within an included `style` tag.
|
||||||
|
* @returns An SVG rectangle.
|
||||||
|
*/
|
||||||
function create_rect(id, x, y, width, height, fill) {
|
function create_rect(id, x, y, width, height, fill) {
|
||||||
const rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
|
const rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
|
||||||
rect.setAttribute('id', id);
|
rect.setAttribute('id', id);
|
||||||
|
@ -17,19 +47,35 @@ function create_rect(id, x, y, width, height, fill) {
|
||||||
return rect;
|
return rect;
|
||||||
}
|
}
|
||||||
|
|
||||||
function create_circle(id, x, y, radius, stroke, stroke_width, fill) {
|
/**
|
||||||
|
* Creates an SVG circle using the given parameters.
|
||||||
|
* @param {string} id The SVG `id` tag to give the circle element.
|
||||||
|
* @param {number} x The X coordinate of the circle.
|
||||||
|
* @param {number} y The Y coordinate of the circle.
|
||||||
|
* @param {number} radius The radius of the circle.
|
||||||
|
* @param {string} stroke_colour The stroke colour of the rectangle.
|
||||||
|
* @param {number} stroke_width The stroke width of the rectangle.
|
||||||
|
* @param {string} fill A fill colour to apply within an included `style` tag.
|
||||||
|
* @returns An SVG rectangle.
|
||||||
|
*/
|
||||||
|
function create_circle(id, x, y, radius, stroke_colour, stroke_width, fill) {
|
||||||
const circle = document.createElementNS("http://www.w3.org/2000/svg", "circle");
|
const circle = document.createElementNS("http://www.w3.org/2000/svg", "circle");
|
||||||
circle.setAttribute('id', id);
|
circle.setAttribute('id', id);
|
||||||
circle.setAttribute('cx', x);
|
circle.setAttribute('cx', x);
|
||||||
circle.setAttribute('cy', y);
|
circle.setAttribute('cy', y);
|
||||||
circle.setAttribute('r', radius);
|
circle.setAttribute('r', radius);
|
||||||
circle.setAttribute('stroke', stroke);
|
circle.setAttribute('stroke', stroke_colour);
|
||||||
circle.setAttribute('stroke-width', stroke_width);
|
circle.setAttribute('stroke-width', stroke_width);
|
||||||
circle.setAttribute('fill', fill);
|
circle.setAttribute('fill', fill);
|
||||||
return circle;
|
return circle;
|
||||||
}
|
}
|
||||||
|
|
||||||
function create_svg() {
|
/**
|
||||||
|
* Uses the included SVG generation methods to create a complete
|
||||||
|
* pride flag SVG element.
|
||||||
|
* @returns An SVG pride flag.
|
||||||
|
*/
|
||||||
|
function create_pride_flag_svg() {
|
||||||
const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
|
const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
|
||||||
svg.setAttribute("viewBox", "0 0 120 120");
|
svg.setAttribute("viewBox", "0 0 120 120");
|
||||||
|
|
||||||
|
@ -56,13 +102,16 @@ function create_svg() {
|
||||||
return svg;
|
return svg;
|
||||||
}
|
}
|
||||||
|
|
||||||
function create_triangle() {
|
/**
|
||||||
|
* @returns A completed pride flag with link and animations.
|
||||||
|
*/
|
||||||
|
function create_pride_flag() {
|
||||||
const link = document.createElement("a");
|
const link = document.createElement("a");
|
||||||
link.id = "pride-triangle";
|
link.id = "pride-triangle";
|
||||||
link.href = "https://github.com/mellodoot/prideflag";
|
link.href = "https://github.com/mellodoot/prideflag";
|
||||||
link.target = "_blank";
|
link.target = "_blank";
|
||||||
|
|
||||||
const triangle = create_svg();
|
const triangle = create_pride_flag_svg();
|
||||||
triangle.style.position = "fixed";
|
triangle.style.position = "fixed";
|
||||||
triangle.style.top = "0";
|
triangle.style.top = "0";
|
||||||
triangle.style.right = "0";
|
triangle.style.right = "0";
|
||||||
|
@ -90,5 +139,5 @@ function create_triangle() {
|
||||||
return link;
|
return link;
|
||||||
}
|
}
|
||||||
|
|
||||||
const triangle = create_triangle();
|
const triangle = create_pride_flag();
|
||||||
document.body.appendChild(triangle);
|
document.body.appendChild(triangle);
|
64
prideflag.js
Normal file
64
prideflag.js
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
/**
|
||||||
|
* 🏳️🌈🏳️⚧️💖 pride flag 💖🏳️⚧️🏳️🌈
|
||||||
|
* made with ❤️ by mellodoot, 2023
|
||||||
|
*
|
||||||
|
* web: https://mellodoot.com
|
||||||
|
* source: https://github.com/mellodoot/prideflag
|
||||||
|
*/
|
||||||
|
|
||||||
|
const pride_flag_svg =
|
||||||
|
`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 120 120" width="120" height="120">
|
||||||
|
<path id="red" d="M120,80 L100,100 L120,120 Z" style="fill:#d20605"/>
|
||||||
|
<path id="orange" d="M120,80 V40 L80,80 L100,100 Z" style="fill:#ef9c00"/>
|
||||||
|
<path id="yellow" d="M120,40 V0 L60,60 L80,80 Z" style="fill:#e5fe02"/>
|
||||||
|
<path id="green" d="M120,0 H80 L40,40 L60,60 Z" style="fill:#09be01"/>
|
||||||
|
<path id="blue" d="M80,0 H40 L20,20 L40,40 Z" style="fill:#081a9a"/>
|
||||||
|
<path id="purple" d="M40,0 H0 L20,20 Z" style="fill:#76008a"/>
|
||||||
|
|
||||||
|
<rect id="black" x="60" width="60" height="60" style="fill:#010101"/>
|
||||||
|
<rect id="brown" x="70" width="50" height="50" style="fill:#603814"/>
|
||||||
|
<rect id="lightblue" x="80" width="40" height="40" style="fill:#73d6ed"/>
|
||||||
|
<rect id="pink" x="90" width="30" height="30" style="fill:#ffafc8"/>
|
||||||
|
<rect id="white" x="100" width="20" height="20" style="fill:#fff"/>
|
||||||
|
|
||||||
|
<rect id="intyellow" x="110" width="10" height="10" style="fill:#fed800"/>
|
||||||
|
<circle id="intpurple" cx="120" cy="0" r="5" stroke="#7601ad" stroke-width="2" fill="none"/>
|
||||||
|
</svg>`;
|
||||||
|
|
||||||
|
function create_pride_flag() {
|
||||||
|
const container = document.createElement("a");
|
||||||
|
container.id = "pride-triangle";
|
||||||
|
container.href = "https://github.com/mellodoot/prideflag";
|
||||||
|
container.target = "_blank";
|
||||||
|
|
||||||
|
triangle = document.createElement('svg');
|
||||||
|
triangle.innerHTML = pride_flag_svg;
|
||||||
|
triangle.style.position = "fixed";
|
||||||
|
triangle.style.top = "0";
|
||||||
|
triangle.style.right = "0";
|
||||||
|
triangle.style.width = "120px";
|
||||||
|
triangle.style.transformOrigin = "100% 0%";
|
||||||
|
triangle.style.transition = "transform .5s cubic-bezier(.32,1.63,.41,1.01)";
|
||||||
|
triangle.style.zIndex = "8008135";
|
||||||
|
|
||||||
|
triangle.onmouseenter = function () {
|
||||||
|
this.style.transform = "scale(110%)";
|
||||||
|
};
|
||||||
|
triangle.onmouseleave = function () {
|
||||||
|
this.style.transform = "initial";
|
||||||
|
};
|
||||||
|
|
||||||
|
triangle.onmousedown = function () {
|
||||||
|
this.style.transform = "scale(90%)";
|
||||||
|
};
|
||||||
|
triangle.onmouseup = function () {
|
||||||
|
this.style.transform = "initial";
|
||||||
|
};
|
||||||
|
|
||||||
|
container.appendChild(triangle);
|
||||||
|
|
||||||
|
return container;
|
||||||
|
}
|
||||||
|
|
||||||
|
pride_flag = create_pride_flag();
|
||||||
|
document.body.appendChild(pride_flag);
|
Loading…
Reference in a new issue