1/** 2 * CitrusOS birthday registry â date-keyed party config (extensible per person). 3 */ 4(function (global) { 5 'use strict'; 6 7 var BIRTHDAYS = [ 8 { 9 id: 'cleo', 10 month: 8, 11 day: 26, 12 label: 'Birthday party', 13 assets: { 14 balloon: '/images/birthday/balloon.png', 15 balloonGold: '/images/birthday/balloon_gold.png', 16 cakeSheet: '/images/birthday/cleocake_animated.png' 17 }, 18 balloonColors: [ 19 '#F46607', 20 '#F2DB07', 21 '#218BEE', 22 '#C8A8FF', 23 '#FF6B9D', 24 '#FFC48C' 25 ], 26 balloonDisplayPx: { min: 80, max: 100 }, 27 cakeFrames: { cols: 4, framePx: 640, blownOut: 0, lit: [1, 2, 3] }, 28 copy: { 29 stickyNote: 'birthday party on pupwife.com!', 30 secretThanks: 'thanks for celebrating with pupwife.com today!', 31 micIdle: 'Hit Start Blowing when you are ready. You gotta blow HARD! (heh,. .,,. .,that\s what she said,,,,)', 32 micStartBtn: 'Start Blowing', 33 micBlow: 'Really put some lung into it! Blow hard enough to pass the orange tick.', 34 micFallback: 'Tap the flame if your mic isn\'t working', 35 confettiBtn: 'Make it rain', 36 wishlistLabel: 'Birthday wishlist', 37 biosLines: [ 38 'Party subsystem loading... OK', 39 'Inflating balloon drivers... OK' 40 ] 41 }, 42 links: { 43 wishlist: 'https://www.amazon.com/hz/wishlist/ls/372O1JRK99CC6' 44 } 45 } 46 ]; 47 48 var DEBUG_KEY = 'debugBirthday'; 49 var TRAIL_SAVE_KEY = 'citrusos_birthday_saved_trail'; 50 51 function readDebugId() { 52 try { 53 var raw = global.sessionStorage.getItem(DEBUG_KEY); 54 if (!raw) return null; 55 if (raw === '1' || raw === 'true') return 'cleo'; 56 return raw; 57 } catch (e) { 58 return null; 59 } 60 } 61 62 function getActiveBirthday(now) { 63 var debugId = readDebugId(); 64 if (debugId) { 65 for (var i = 0; i < BIRTHDAYS.length; i++) { 66 if (BIRTHDAYS[i].id === debugId) return BIRTHDAYS[i]; 67 } 68 } 69 now = now || new Date(); 70 var month = now.getMonth(); 71 var day = now.getDate(); 72 for (var j = 0; j < BIRTHDAYS.length; j++) { 73 var entry = BIRTHDAYS[j];
74 if (entry.month === month && entry.day === day) return entry; 75 } 76 return null; 77 } 78 79 function isBirthdayActive(now) { 80 return !!getActiveBirthday(now); 81 } 82 83 function getBootBiosLines() { 84 var entry = getActiveBirthday(); 85 if (!entry || !entry.copy || !entry.copy.biosLines) return null; 86 return [ 87 'CitrusOS BIOS v0.1 â pupwife.com', 88 'Checking citrus modules... OK' 89 ].concat(entry.copy.biosLines, [ 90 'Mounting /home/puppy... OK', 91 'Starting window manager... OK', 92 'Loading music player... OK' 93 ]); 94 } 95 96 global.CitrusBirthdayConfig = { 97 birthdays: BIRTHDAYS, 98 getActiveBirthday: getActiveBirthday, 99 isBirthdayActive: isBirthdayActive, 100 getBootBiosLines: getBootBiosLines, 101 DEBUG_KEY: DEBUG_KEY, 102 TRAIL_SAVE_KEY: TRAIL_SAVE_KEY 103 }; 104})(typeof window !== 'undefined' ? window : this);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.