SHOWING: First 60
859678.bitmap#75,347,101text859628.bitmap#75,261,322text859627.bitmap#75,261,240textdmt-mint.billythecats#73,314,995tapdmt-mint.billythecats#73,314,994tapdmt-mint.billythecats#73,314,989tap<div id="bitcoindogs" width="100%" height="100%"></div><input id="blk" type="number" style="display: none" />
<script id="preview" mint="MINT_INSCRIPTION_ID">
const root = document.getElementById('bitcoindogs')
root.parentElement.style.width = '100%'
root.parentElement.style.height = '100%'
root.parentElement.style.padding = '0px'
root.parentElement.style.margin = '0px'
const orgWidth = 212
const orgHeight = 212
let scaleW = 1
let scaleH = 1
let blockNumber = '290304'
const colorMap = {
1: "#6D2BF8", // Purple
2: "#AF89FE", // Lilac
3: "#FDF64D", // Yellow
4: "#2067F0", // Blue
5: "#976F53", // Brown
6: "#CBC7E3", // Light Grey
7: "#15D96F", // Green
8: "#FF64C1", // Pink
9: "#F95E3C", // Orange
0: "#585663", // Grey
}
const colorMap2 = {
1: "#5922CD", // Purple
2: "#9C6EFE", // Lilac
3: "#FDE14D", // Yellow
4: "#1C54C0", // Blue
5: "#725540", // Brown
6: "#8F8DA5", // Light Grey
7: "#17B35F", // Green
8: "#F343AC", // Pink
9: "#EC5331", // Orange
0: "#403F4A", // Dark Grey
}
const colorMap3 = {
1: "#A2FF00", // GITD
2: "#49EFEF", // Alien
3: "#FFB800", // Gold
4: "#FFA1FB", // Bubblegum
5: "#FF7528", // Orange
6: "#FF1E39", // Red
7: "#00B127", // Green
8: "#2A32FF", // Blue
9: "#A9A8D6", // Platinum
}
window.addEventListener('resize', resize, true)
resize()
let mintText = document.getElementById('preview').getAttribute('mint')
if(mintText.includes('MINT_INSCRIPTION_ID')) {
let input = document.getElementById('blk')
input.style.display = 'block'
input.style.position = 'absolute'
input.style.fontSize = '20px'
input.style.margin = '20px'
input.style.top = '0'
input.value = blockNumber
input.addEventListener('input',(event) => {
blockNumber = input.value
update()
})
update()
}
else {
const request = new XMLHttpRequest()
try {
request.open('GET', '/content/' + mintText)
request.responseType = 'text'
request.addEventListener('load', () => initialize(request.response))
request.addEventListener('error', () => console.error('XHR error'))
request.send()
} catch (error) {
console.error(`XHR error ${request.status}`)
}
}
function initialize(result) {
if(result) {
console.log('Result', result)
data = JSON.parse(result)
blockNumber = data.blk
}
update()
}
function resize(event) {
root.width = window.innerWidth
root.height = window.innerHeight
scaleW = root.width / orgWidth
scaleH = root.height / orgHeight
offsetX = 0
offsetY = 0
if(scaleH < scaleW) {
scaleW = scaleH
offsetX = (root.width - orgWidth * scaleW) / 2
}
else {
scaleH = scaleW
offsetY = (root.height - orgHeight * scaleH) / 2
}
root.style.zoom = scaleW / 2
update('resize')
}
function update() {
generateHtmlBasedOnBlockNumber(blockNumber)
}
function generateSvgForDigits(blockNumber) {
const originalString = blockNumber.toString()
const digits = originalString.padStart(7, '0').split('').map(Number).reverse()
let svgs = []
//left ear
if (originalString.length >= 3) {
const colorForThirdDigit = colorMap2[digits[2]] || "transparent"
svgs.push(`
<div style="position: absolute; top: -20px; left: 65px;">
<svg width="160" height="160" viewBox="0 0 120 120" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M30,120 Q60,15 90,120 Z" fill="${colorForThirdDigit}"/>
</svg>
</div>
`)
}
//right ear
if (originalString.length >= 4) {
const colorForFourthDigit = colorMap2[digits[3]] || "transparent"
svgs.push(`
<div style="position: absolute; top: -20px; left: 198px;">
<svg width="160" height="160" viewBox="0 0 120 120" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M30,120 Q60,15 90,120 Z" fill="${colorForFourthDigit}"/>
</svg>
</div>
`)
}
//neck
if (originalString.length >= 2) {
const colorForSecondDigit = colorMap2[digits[1]] || "transparent"
svgs.push(`
<div style="position: absolute; top: 345px; left: 105px;">
<svg width="98" height="98" viewBox="0 0 78 80" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="72" height="80" rx="15" ry="15" fill="${colorForSecondDigit}"/>
</svg>
</div>
`)
}
if (originalString.length >= 1) {
const colorForFirstDigit = colorMap[digits[0]]
svgs.push(`<div style="position: absolute; top: 138px; left: 105px;">
<svg width="215" height="212" viewBox="0 0 215 209" fill="none" xmlns="http://www.w3.org/2000/svg">
<path id="facePath" fill-rule="evenodd" clip-rule="evenodd" fill="${colorForFirstDigit}" d="M215 30a30 30 0 0 0 185 0L15 0A30 30 0 0 0 0 30L0 179A30 30 0 0 0 15 209L200 209A30 30 0 0 0 215 179L215 30ZM22 58L142 58L142 94L22 94L22 58ZM197 155H94V180H197V155ZM94 58H215V94H94Z"/>
</svg>
</div>
`)
}
if (originalString.length >= 5) {
const colorForFifthDigit = colorMap2[digits[4]] || "transparent";
svgs.push(`<div style="position: absolute; top: 230px; left: 185px;">
<svg width="75" height="75" viewBox="0 0 150 150" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="30" y="15" width="105" height="82.5" rx="30" ry="30" fill="${colorForFifthDigit}"/>
</svg>
</div>
`)
}
if (originalString.length >= 2) {
const colorForSecondDigit = colorMap2[digits[1]] || "transparent"
svgs.push(`
<div style="position: absolute; top: 279px; left: 0;">
<svg width="46" height="185" viewBox="0 0 46 146" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M46.0001 146H0L5.3765e-05 23C5.93175e-05 10.2974 10.2975 -5.20515e-06 23.0001 0C35.7027 5.55247e-06 46.0001 10.2975 46.0001 23L46.0001 146Z" fill="${colorForSecondDigit}"/>
</svg>
</div>
`)
}
return svgs.join('')
}
function getLook(number) {
const numberStr = number.toString()
const lastFourDigits = parseInt(numberStr.substring(numberStr.length - 4))
if (lastFourDigits < 1000) {
return "look_right"
} else if (lastFourDigits >= 1000 && lastFourDigits <= 1200) {
return "look_crossed"
} else {
return "look_left"
}
}
function generateLookSvg(lookDir) {
let lookHtml = ""
if (lookDir === "look_left") {
lookHtml = `<div style="position: absolute; top: 195px; left: 126px;">
<svg width="158" height="38" viewBox="0 0 158 38" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="37" y="38" width="37" height="38" rx="10" ry="10" transform="rotate(-180 37 38)" fill="#070609"/>
<rect x="158" y="38" width="37" height="38" rx="10" ry="10" transform="rotate(-180 158 38)" fill="#070609"/>
</svg>
</div>`
} else if (lookDir === "look_right") {
lookHtml = `<div style="position: absolute; top: 195px; left: 163px;">
<svg width="158" height="38" viewBox="0 0 158 38" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="37" y="38" width="37" height="38" rx="10" ry="10" transform="rotate(-180 37 38)" fill="#070609"/>
<rect x="157.5" y="38" width="36.5" height="38" rx="10" ry="10" transform="rotate(-180 157.5 38)" fill="#070609"/>
</svg>
</div>`
} else if (lookDir === "look_crossed") {
lookHtml = `<div style="position: absolute; top: 195px; left: 126px;">
<svg width="195" height="38" viewBox="0 0 195 38" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="194.5" y="38" width="36.5" height="38" rx="10" ry="10" transform="rotate(-180 194.5 38)" fill="#070609"/>
<rect x="37" y="38" width="37" height="38" rx="10" ry="10" transform="rotate(-180 37 38)" fill="#070609"/>
</svg>
</div>`
}
return lookHtml
}
function trifibpites(number) {
const numberStr = number.toString();
return ['000', '111', '222', '333', '444', '555', '666', '777', '888', '999', '618', '314', '369'].some(trifibpites => numberStr.includes(trifibpites));
}
function displaycatnip() {
return `<div style="position: absolute; top: 293px; left: 356px;">
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="18" y="18" width="18" height="18" transform="rotate(-180 18 18)" fill="#00B127"/>
</svg>
</div>`
}
function dopifites(number) {
const numberStr = number.toString();
return /(00|11|22|33|44|55|66|77|88|99|314|618|369)/.test(numberStr);
}
function displaycig(number) {
return `<div style="position: absolute; top: 219px; left: 302px;">
<svg width="72" height="92" viewBox="0 0 72 92" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="72" y="92" width="72" height="18" transform="rotate(-180 72 92)" fill="#FBFBFB"/>
<rect id="smoke" x="72" y="56" width="18" height="56" transform="rotate(-180 72 56)" fill="white" fill-opacity="0.3">
</rect>
<rect x="72" y="92" width="18" height="18" transform="rotate(-180 72 92)" fill="#FF0034"/>
</svg>
</div>`
}
function fle(number) {
const numberStr = number.toString();
return /(0000|1111|2222|3333|4444|5555|6666|7777|8888|9999)/.test(numberStr);
}
function displayFlysLaserEyes(number) {
return `<div style="position: absolute; top: 178px; left: 0;">
<svg width="340" height="21" viewBox="0 0 340 19" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect id="laserBeam" width="300" height="20" fill="#FD1935"/>
</svg>
</div>
`
}
function palin(number) {
const numberStr = number.toString()
// Loop through the number string
for (let i = 0; i <= numberStr.length - 6; i++) { // Ensure there are at least 6 characters to check
const substring = numberStr.substring(i, i + 6) // Get the substring of 6 characters
// Check if the substring is a palindrome
if (substring === substring.split('').reverse().join('')) {
return "palin"
}
}
return null
}
function displayBTCDiamond(number) {
return `<div style="position: absolute; top: 358px; left: 321px;">
<svg width="67" height="68" viewBox="0 0 67 68" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="30.5" cy="33" r="30.5" fill="#FFA500"/>
<!-- Bitcoin Symbol -->
<text x="18" y="45" font-family="Courier New, Courier, monospace" font-weight="bold" font-size="45" fill="#FFFFFF">₿</text>
</svg>
</div>`
}
function displayHalo(number) {
return `<div style="position: absolute; top: 41px; left: 146px;">
<svg width="132" height="18" viewBox="0 0 132 18" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect id="halo" width="132" height="18" fill="#FFB700">
</rect>
<text x="50%" y="50%" dominant-baseline="middle" text-anchor="middle" fill="black">Hello, World!</text>
</svg>
</div>
`
}
function quad(number) {
const numberStr = number.toString();
if (numberStr.includes('7777') || numberStr.includes('1111') || numberStr.includes('2222') || numberStr.includes('3333') || numberStr.includes('4444') || numberStr.includes('5555') || numberStr.includes('6666') || numberStr.includes('8888') || numberStr.includes('9999')) {
return "quad";
}
return null;
}
function containsFourDigitSquare(number) {
const numberStr = number.toString()
for (let i = 0; i <= numberStr.length - 4; i++) {
const substring = numberStr.substring(i, i + 4)
const num = parseInt(substring, 10)
if (Math.sqrt(num) % 1 === 0) {
return true
}
}
return false
}
function getLaserEyeRange(lastFourDigits) {
if (lastFourDigits < 4800) {
return "laser_right"
} else if (lastFourDigits >= 4800 && lastFourDigits <= 5200) {
return "laser_crossed"
} else {
return "laser_left"
}
}
function displayLaserEyes(eyeDirection) {
let svgHTML = ""
switch (eyeDirection) {
case "laser_left":
svgHTML = `<div style="position: absolute; top: 214px; left: 0;">
<svg width="284" height="19" viewBox="0 0 284 19" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="284" height="18.5" fill="#FD1935"/>
</svg>
</svg>
</div>`
break
case "laser_right":
svgHTML = `<div style="position: absolute; top: 214px; left: 163px;">
<svg width="262" height="19" viewBox="0 0 262 19" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect id="laser" width="262" height="18.5" fill="#FD1935"/>
</svg>
</div>`
break
case "laser_crossed":
svgHTML = `<div style="position: absolute; top: 214px; left: 0;">
<svg width="425" height="19" viewBox="0 0 425 19" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="163" height="18.5" fill="#FD1935"/>
<rect x="284" width="141" height="18.5" fill="#FD1935"/>
</svg>
</svg>
</div>`
break
}
return svgHTML
}
function generateHtmlBasedOnBlockNumber(blockNumber) {
const lookDir = getLook(blockNumber)
const lookHtml = generateLookSvg(lookDir)
let catnip = trifibpites(blockNumber) ? displaycatnip() : ""
let cig = dopifites(blockNumber) ? displaycig() : ""
let BTCDiamond = palin(blockNumber) ? displayBTCDiamond() : ""
let halo = quad(blockNumber) ? displayHalo() : ""
let flysLaserEyes = fle(blockNumber) ? displayFlysLaserEyes() : ""
const containsSquare = containsFourDigitSquare(blockNumber)
const eyeDirection = getLaserEyeRange(parseInt(blockNumber.toString().slice(-4)))
const laserEyes = containsSquare ? displayLaserEyes(eyeDirection) : ""
const svgsForDigits = generateSvgForDigits(blockNumber)
const background = `<div style="position: absolute; top: 0px; left: 0px;">
<h1 style="text-align: center; font-size: 15px; color: white;">bitcoindogs</h1>
<svg width="425" height="425" viewBox="0 0 425 425" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="425" height="425" fill="#000000"/>
</svg>
</div>`;
const mouth = `<div style="position: absolute; top: 288px; left: 194px;">
<svg width="113" height="35" viewBox="0 0 113 35" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="0" y="0" width="113" height="35" rx="10" ry="10" fill="#070609"/>
<path d="M30 18C50 38 90 28 110 18" fill="#FFC0CB"/>
</svg>
</div>`
const eyes = `
<div style="position: absolute; top: 195px; left: 126px;">
<svg width="194" height="38" viewBox="0 0 194 38" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="74" y="38" width="74" height="38" rx="0" ry="0" transform="rotate(-180 74 38)" fill="white""/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M121 0H193.469L194 0.53125V37.5391L193.539 38H121V0Z" fill="white" rx="10" ry="10"/>
</svg>
</div>`
const rainbowCollar = `
<div style="position: absolute; top: 365px; left: 105px;">
<svg width="90" height="17" viewBox="0 0 90 18" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="20" height="18" fill="#FF1D38"/>
<rect x="18" width="20" height="18" fill="#C53DF5"/>
<rect x="36" width="20" height="18" fill="#115FF5"/>
<rect x="54" width="20" height="18" fill="#A1FF00"/>
<rect x="72" width="20" height="18" fill="#FFC700"/>
</svg>
</div>`
const loveTail = `
<div style="position: absolute; top: 300px; left: 12px;">
<svg width="27" height="27" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M18 30.375C7.6875 25.125 0 19.125 0 11.25C0 5.0625 5.0625 0 11.25 0C14.8125 0 17.625 1.6875 18 1.875C18.375 1.6875 21.1875 0 24.75 0C30.9375 0 36 5.0625 36 11.25C36 19.125 28.3125 25.125 18 30.375Z" fill="#E75480"/>
</svg>
</div>`
const rainbowHat = `
<div style="position: absolute; top: 120px; left: 68.5px;">
<svg width="287" height="37" viewBox="0 0 287 37" fill="none" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="rainbowGradient" x1="0%" y1="0%" x2="100%" y2="0%">
<stop offset="0%" style="stop-color: #FF0000; stop-opacity:1" />
<stop offset="16.67%" style="stop-color: #FF7F00; stop-opacity:1" />
<stop offset="33.33%" style="stop-color: #FFFF00; stop-opacity:1" />
<stop offset="50%" style="stop-color: #00FF00; stop-opacity:1" />
<stop offset="66.67%" style="stop-color: #0000FF; stop-opacity:1" />
<stop offset="83.33%" style="stop-color: #4B0082; stop-opacity:1" />
<stop offset="100%" style="stop-color: #9400D3; stop-opacity:1" />
</linearGradient>
</defs>
<path fill-rule="evenodd" clip-rule="evenodd" d="M36 17.4999L36 0L252 9.34601e-05L252 17.5L287 17.5V36.5L0 36.4999L8.30517e-06 17.4999L36 17.4999Z" fill="url(#rainbowGradient)"/>
<rect x="0" y="0" width="36" height="17.5" rx="10" ry="10" fill="url(#rainbowGradient)"/>
<rect x="251" y="0" width="36" height="17.5" rx="10" ry="10" fill="url(#rainbowGradient)"/>
</svg>
</div>`
//construction
const htmlContent = background + eyes + lookHtml + mouth + svgsForDigits + cig + laserEyes + BTCDiamond + halo + catnip +rainbowCollar + loveTail + rainbowHat + flysLaserEyes
document.getElementById('bitcoindogs').innerHTML = htmlContent
}
</script>#71,854,705textdmt-mint.natfrog#71,173,752tapdmt-mint.natfrog#71,173,751tapdmt-mint.natfrog#71,173,750tapdmt-mint.natfrog#71,173,749tapdmt-mint.natfrog#71,173,748tapdmt-mint.natfrog#71,173,747tapdmt-mint.natfrog#71,173,746tapdmt-mint.natfrog#71,173,745tapdmt-mint.natfrog#71,173,744tapdmt-mint.natfrog#71,173,743tapdmt-mint.natfrog#71,173,742tapdmt-mint.natfrog#71,173,740tapdmt-mint.natfrogs2#71,163,624tapdmt-mint.natfrogs2#71,163,618tapdmt-mint.natfrogs2#71,163,617tapdmt-mint.natgalaxies#71,123,533tapdmt-mint.natgalaxies#71,123,532tapdmt-mint.natgalaxies#71,123,531tapdmt-mint.natgalaxies#71,123,530tapdmt-mint.natgalaxies#71,123,529tapdmt-mint.natgalaxies#71,123,528tapdmt-mint.natgalaxies#71,123,527tapdmt-mint.natgalaxies#71,123,526tapdmt-mint.natgalaxies#71,123,525tapdmt-mint.natgalaxies#71,123,524tapdmt-mint.natgalaxies#71,123,523tapdmt-mint.natgalaxies#71,123,522tapdmt-mint.natgalaxies#71,119,031tapdmt-mint.natgalaxies#71,119,030tapdmt-mint.natgalaxies#71,119,029tapdmt-mint.natgalaxies#71,119,028tapdmt-mint.natgalaxies#71,119,027tapdmt-mint.natgalaxies#71,119,026tapdmt-mint.natgalaxies#71,119,025tapdmt-mint.natgalaxies#71,119,024tapdmt-mint.natgalaxies#71,119,023tapdmt-mint.natgalaxies#71,119,022tapdmt-mint.natgalaxies#71,119,021tapdmt-mint.natgalaxies#71,119,020tapdmt-mint.natgalaxies#71,119,019tapdmt-mint.natgalaxies#71,118,257tapdmt-mint.natgalaxies#71,118,256tapdmt-mint.natgalaxies#71,118,255tapdmt-mint.natgalaxies#71,118,254tapdmt-mint.natgalaxies#71,118,253tapdmt-mint.natgalaxies#71,118,252tapdmt-mint.natgalaxies#71,118,251tapdmt-mint.natgalaxies#71,118,250tapdmt-mint.natgalaxies#71,118,249tapdmt-mint.natgalaxies#71,118,248tapdmt-mint.natgalaxies#71,118,247tapdmt-mint.natgalaxies#71,118,246tapdmt-mint.natgalaxies#71,118,245tap