to be added to the Options section\n * @returns {object} menuDiv\tObject of the
of Cookie Monster in options tab\n */\nexport default function createMenuOptions() {\n const menuDiv = mF.createModMenuSection('cookieMonsterMod', 'Cookie Monster', 'optionsMenu');\n\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers.optionsMenu) {\n Object.keys(ConfigGroups).forEach((group) => {\n if (group === 'Favourite') {\n if (\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.favouriteSettings.length !==\n 0 &&\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.FavouriteSettings > 0\n ) {\n menuDiv.appendChild(\n mF.listings.createOptionsSubHeader('cookieMonsterMod', group, ConfigGroups[group]),\n );\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers[group])\n for (\n let index = 0;\n index <\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.favouriteSettings.length;\n index++\n ) {\n menuDiv.appendChild(\n mF.listings.createOptionsListing(\n 'cookieMonsterMod',\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.favouriteSettings[\n index\n ],\n settings,\n UpdateColours,\n RefreshScale,\n ),\n );\n }\n }\n } else {\n menuDiv.appendChild(\n mF.listings.createOptionsSubHeader('cookieMonsterMod', group, ConfigGroups[group]),\n );\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers[group]) {\n // 0 is show, 1 is collapsed\n // Make sub-sections of Notification section\n if (group === 'Notification') {\n Object.keys(ConfigGroupsNotification).forEach((subGroup) => {\n const subGroupObject = mF.listings.createOptionsSubHeader(\n 'cookieMonsterMod',\n subGroup,\n ConfigGroupsNotification[subGroup],\n );\n subGroupObject.style.fontSize = '15px';\n subGroupObject.style.opacity = '0.5';\n menuDiv.appendChild(subGroupObject);\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers[subGroup]) {\n Object.keys(settings).forEach((option) => {\n if (settings[option].group === subGroup)\n menuDiv.appendChild(\n mF.listings.createOptionsListing(\n 'cookieMonsterMod',\n option,\n settings,\n UpdateColours,\n RefreshScale,\n ),\n );\n });\n }\n });\n } else {\n Object.keys(settings).forEach((option) => {\n if (settings[option].group === group)\n menuDiv.appendChild(\n mF.listings.createOptionsListing(\n 'cookieMonsterMod',\n option,\n settings,\n UpdateColours,\n RefreshScale,\n ),\n );\n });\n }\n }\n }\n });\n }\n return menuDiv;\n}\n","/** Section: Functions related to the creation of basic DOM elements page */\n\nimport { ToggleHeader } from '../../../Config/ToggleSetting';\n\nimport { SimpleTooltipElements } from '../../VariablesAndData';\n\n/**\n * This function creates a header-object for the stats page\n * It is called by CM.Disp.AddMenuStats()\n * @param \t{string}\t\tconfig\tThe name of the Config-group\n * @param \t{string}\t\ttext\tThe to-be displayed name of the header\n * @returns\t{object}\t\tdiv\t\tThe header object\n */\nexport function StatsHeader(text, config) {\n const div = document.createElement('div');\n div.className = 'title';\n div.style.padding = '0px 16px';\n div.style.opacity = '0.7';\n div.style.fontSize = '17px';\n div.style.fontFamily = '\"Kavoon\", Georgia, serif';\n div.appendChild(document.createTextNode(`${text} `));\n const span = document.createElement('span');\n span.style.cursor = 'pointer';\n span.style.display = 'inline-block';\n span.style.height = '14px';\n span.style.width = '14px';\n span.style.borderRadius = '7px';\n span.style.textAlign = 'center';\n span.style.backgroundColor = '#C0C0C0';\n span.style.color = 'black';\n span.style.fontSize = '13px';\n span.style.verticalAlign = 'middle';\n span.textContent = Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers[config]\n ? '-'\n : '+';\n span.onclick = function () {\n ToggleHeader(config);\n Game.UpdateMenu();\n };\n div.appendChild(span);\n return div;\n}\n\n/**\n * This function creates an stats-listing-object for the stats page\n * It is called by CM.Disp.AddMenuStats()\n * @param \t{string}\t\ttype\t\tThe type fo the listing\n * @param \t{string}\t\tname\t\tThe name of the option\n * @param \t{object}\t\ttext\t\tThe text-object of the option\n * @param \t{string}\t\tplaceholder\tThe id of the to-be displayed tooltip if applicable\n * @returns\t{object}\t\tdiv\t\t\tThe option object\n */\nexport function StatsListing(type, name, text, placeholder) {\n const div = document.createElement('div');\n div.className = 'listing';\n\n const listingName = document.createElement('b');\n listingName.textContent = name;\n div.appendChild(listingName);\n if (type === 'withTooltip') {\n div.className = 'listing';\n div.appendChild(document.createTextNode(' '));\n\n const tooltip = document.createElement('span');\n tooltip.onmouseout = function () {\n Game.tooltip.hide();\n };\n tooltip.onmouseover = function () {\n Game.tooltip.draw(this, escape(SimpleTooltipElements[placeholder].innerHTML));\n };\n tooltip.style.cursor = 'default';\n tooltip.style.display = 'inline-block';\n tooltip.style.height = '10px';\n tooltip.style.width = '10px';\n tooltip.style.borderRadius = '5px';\n tooltip.style.textAlign = 'center';\n tooltip.style.backgroundColor = '#C0C0C0';\n tooltip.style.color = 'black';\n tooltip.style.fontSize = '9px';\n tooltip.style.verticalAlign = 'bottom';\n tooltip.textContent = '?';\n div.appendChild(tooltip);\n }\n div.appendChild(document.createTextNode(': '));\n div.appendChild(text);\n return div;\n}\n\n/**\n * This function creates an stats-listing-object for the stats page for missing items displays\n * It is called by CM.Disp.AddMenuStats()\n * @param \t{string}\t\ttype\t\tThe type fo the listing\n * @param \t{string}\t\tname\t\tThe name of the option\n * @param \t{object}\t\ttext\t\tThe text-object of the option\n * @param \t{bool}\t\t current Whether the season of the item is the current season\n * @returns\t{object}\t\tdiv\t\t\tThe option object\n */\nexport function StatsMissDispListing(type, name, text, current) {\n const div = document.createElement('div');\n div.className = 'listing';\n\n const listingName = document.createElement('b');\n listingName.textContent = name;\n if (current === true)\n listingName.style.color =\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.ColourGreen;\n div.appendChild(listingName);\n div.appendChild(document.createTextNode(': '));\n div.appendChild(text);\n return div;\n}\n\n/**\n * This function creates a tooltip containing all missing holiday items contained in the list theMissDisp\n * @param \t{list}\t\t\ttheMissDisp\t\tA list of the missing holiday items\n * @returns\t{object}\t\tfrag\t\t\tThe tooltip object\n */\nexport function StatsMissDisp(theMissDisp) {\n const frag = document.createDocumentFragment();\n frag.appendChild(document.createTextNode(`${theMissDisp.length} `));\n const span = document.createElement('span');\n span.onmouseout = function () {\n Game.tooltip.hide();\n };\n const placeholder = document.createElement('div');\n const missing = document.createElement('div');\n missing.style.minWidth = '140px';\n missing.style.marginBottom = '4px';\n const title = document.createElement('div');\n title.className = 'name';\n title.style.marginBottom = '4px';\n title.style.textAlign = 'center';\n title.textContent = 'Missing';\n missing.appendChild(title);\n Object.keys(theMissDisp).forEach((i) => {\n const div = document.createElement('div');\n div.style.textAlign = 'center';\n div.appendChild(document.createTextNode(theMissDisp[i]));\n missing.appendChild(div);\n });\n placeholder.appendChild(missing);\n span.onmouseover = function () {\n Game.tooltip.draw(this, escape(placeholder.innerHTML));\n };\n span.style.cursor = 'default';\n span.style.display = 'inline-block';\n span.style.height = '10px';\n span.style.width = '10px';\n span.style.borderRadius = '5px';\n span.style.textAlign = 'center';\n span.style.backgroundColor = '#C0C0C0';\n span.style.color = 'black';\n span.style.fontSize = '9px';\n span.style.verticalAlign = 'bottom';\n span.textContent = '?';\n frag.appendChild(span);\n return frag;\n}\n","import { saveAndLoadingFunctions } from '@cookiemonsterteam/cookiemonsterframework/src/index';\n\n/** Functions related to toggling or changing an individual setting */\n\n/** Used to name certain DOM or outside facing elements and refer to them */\nexport const ConfigPrefix = 'CMConfig';\n\n/**\n * This function toggles header options by incrementing them with 1 and handling changes\n * It is called by the onclick event of the +/- next to headers\n * @param \t{string}\tconfig\tThe name of the header\n */\nexport function ToggleHeader(config) {\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers[config] += 1;\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers[config] > 1)\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers[config] = 0;\n saveAndLoadingFunctions.saveFramework();\n}\n","/** Main function to create the sections of Cookie Monster on the Statistics page */\n\nimport { AddMissingUpgrades } from './CreateMissingUpgrades';\nimport * as CreateSections from './CreateStatsSections';\nimport * as CreateElements from './CreateDOMElements';\nimport * as GameData from '../../../Data/Gamedata';\n\nimport {\n CacheAverageClicks,\n CacheAverageCookiesFromClicks,\n CacheObjectsNextAchievement,\n CacheWrinklersFattest,\n CacheWrinklersNormal,\n CacheWrinklersTotal,\n} from '../../../Cache/VariablesAndData';\nimport PopAllNormalWrinklers from '../../HelperFunctions/PopWrinklers';\nimport { ClickTimes, CookieTimes } from '../../VariablesAndData';\nimport GetCPS from '../../HelperFunctions/GetCPS';\nimport Beautify from '../../BeautifyAndFormatting/Beautify';\nimport AddMissingAchievements from './CreateMissingAchievements';\n\n/**\n * This function adds stats created by CookieMonster to the stats page\n * It is called by CM.Disp.AddMenu\n * @param {object} title\tOn object that includes the title of the menu\n */\nexport default function AddMenuStats(title) {\n const stats = document.createElement('div');\n stats.className = 'subsection';\n stats.appendChild(title);\n\n stats.appendChild(CreateElements.StatsHeader('Lucky Cookies', 'Lucky'));\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers.Lucky) {\n stats.appendChild(CreateSections.LuckySection());\n }\n\n stats.appendChild(CreateElements.StatsHeader('Chain Cookies', 'Chain'));\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers.Chain) {\n stats.appendChild(CreateSections.ChainSection());\n }\n\n if (Game.Objects['Wizard tower'].minigameLoaded) {\n stats.appendChild(CreateElements.StatsHeader('Spells', 'Spells'));\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers.Spells) {\n stats.appendChild(CreateSections.SpellsSection());\n }\n }\n\n if (Game.Objects.Farm.minigameLoaded) {\n stats.appendChild(CreateElements.StatsHeader('Garden', 'Garden'));\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers.Garden) {\n stats.appendChild(CreateSections.GardenSection());\n }\n }\n\n stats.appendChild(CreateElements.StatsHeader('Prestige', 'Prestige'));\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers.Prestige) {\n stats.appendChild(CreateSections.PrestigeSection());\n }\n\n if (Game.cpsSucked > 0) {\n stats.appendChild(CreateElements.StatsHeader('Wrinklers', 'Wrink'));\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers.Wrink) {\n const popAllFrag = document.createDocumentFragment();\n popAllFrag.appendChild(\n document.createTextNode(\n `${Beautify(CacheWrinklersTotal)} / ${Beautify(CacheWrinklersNormal)} `,\n ),\n );\n const popAllA = document.createElement('a');\n popAllA.textContent = 'Pop All Normal';\n popAllA.className = 'option';\n popAllA.onclick = function () {\n PopAllNormalWrinklers();\n };\n popAllFrag.appendChild(popAllA);\n stats.appendChild(\n CreateElements.StatsListing('basic', 'Rewards of Popping (All/Normal)', popAllFrag),\n );\n const popFattestFrag = document.createDocumentFragment();\n popFattestFrag.appendChild(document.createTextNode(`${Beautify(CacheWrinklersFattest[0])} `));\n const popFattestA = document.createElement('a');\n popFattestA.textContent = 'Pop Single Fattest';\n popFattestA.className = 'option';\n popFattestA.onclick = function () {\n if (CacheWrinklersFattest[1] !== null) Game.wrinklers[CacheWrinklersFattest[1]].hp = 0;\n };\n popFattestFrag.appendChild(popFattestA);\n stats.appendChild(\n CreateElements.StatsListing(\n 'basic',\n `Rewards of Popping Single Fattest Non-Shiny Wrinkler (id: ${\n CacheWrinklersFattest[1] !== null ? CacheWrinklersFattest[1] : 'None'\n })`,\n popFattestFrag,\n ),\n );\n }\n }\n\n stats.appendChild(CreateSections.SeasonSection());\n\n stats.appendChild(CreateElements.StatsHeader('Achievements', 'Achievs'));\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers.Achievs) {\n Object.keys(Game.Objects).forEach((i) => {\n const ObjectsTillNext = CacheObjectsNextAchievement[i];\n stats.appendChild(\n CreateElements.StatsListing(\n 'basic',\n i,\n ObjectsTillNext.AmountNeeded < 101\n ? document.createTextNode(\n `Next achievement in ${ObjectsTillNext.AmountNeeded}, price: ${Beautify(\n ObjectsTillNext.price,\n )}`,\n )\n : document.createTextNode('No new achievement for next 100 buildings'),\n ),\n );\n });\n }\n\n stats.appendChild(CreateElements.StatsHeader('Miscellaneous', 'Misc'));\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers.Misc) {\n stats.appendChild(\n CreateElements.StatsListing(\n 'basic',\n `Average cookies per second (past ${\n CookieTimes[\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.AvgCPSHist\n ] < 60\n ? `${\n CookieTimes[\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.AvgCPSHist\n ]\n } seconds`\n : CookieTimes[\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.AvgCPSHist\n ] /\n 60 +\n (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.AvgCPSHist === 3\n ? ' minute'\n : ' minutes')\n })`,\n document.createTextNode(Beautify(GetCPS(), 3)),\n ),\n );\n stats.appendChild(\n CreateElements.StatsListing(\n 'basic',\n `Average cookie clicks per second (past ${\n ClickTimes[\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.AvgClicksHist\n ]\n }${\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.AvgClicksHist === 0\n ? ' second'\n : ' seconds'\n })`,\n document.createTextNode(Beautify(CacheAverageClicks, 1)),\n ),\n );\n stats.appendChild(\n CreateElements.StatsListing(\n 'basic',\n `Cookies from clicking (past ${\n ClickTimes[\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.AvgClicksHist\n ]\n }${\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.AvgClicksHist === 0\n ? ' second'\n : ' seconds'\n })`,\n document.createTextNode(\n Beautify(\n CacheAverageCookiesFromClicks.calcSum(\n CacheAverageClicks *\n ClickTimes[\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.AvgClicksHist\n ],\n ),\n ),\n ),\n ),\n );\n if (Game.Has('Fortune cookies')) {\n const fortunes = [];\n Object.keys(GameData.Fortunes).forEach((i) => {\n if (!Game.Has(GameData.Fortunes[i])) {\n fortunes.push(GameData.Fortunes[i]);\n }\n });\n if (fortunes.length !== 0)\n stats.appendChild(\n CreateElements.StatsListing(\n 'basic',\n 'Fortune Upgrades Left to Buy',\n CreateElements.StatsMissDisp(fortunes),\n ),\n );\n }\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.ShowMissedGC) {\n stats.appendChild(\n CreateElements.StatsListing(\n 'basic',\n 'Missed golden cookies',\n document.createTextNode(Beautify(Game.missedGoldenClicks)),\n ),\n );\n }\n if (Game.prefs.autosave) {\n const timer = document.createElement('span');\n timer.id = 'CMStatsAutosaveTimer';\n timer.innerText = Game.sayTime(\n Game.fps * 60 - (Game.OnAscend ? 0 : Game.T % (Game.fps * 60)),\n 4,\n );\n stats.appendChild(CreateElements.StatsListing('basic', 'Time till autosave', timer));\n }\n }\n\n l('menu').insertBefore(stats, l('menu').childNodes[2]);\n\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.MissingUpgrades) {\n AddMissingUpgrades();\n }\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.MissingAchievements) {\n AddMissingAchievements();\n }\n}\n","/** Functions to create the individual sections of the Statistics page */\n\nimport * as GameData from '../../../Data/Gamedata';\nimport { MaxChainCookieReward } from '../../../Cache/Stats/ChainCookies';\nimport {\n CacheAvgCPSWithChoEgg,\n CacheCentEgg,\n CacheChainFrenzyMaxReward,\n CacheChainFrenzyRequired,\n CacheChainFrenzyRequiredNext,\n CacheChainFrenzyWrathRequired,\n CacheChainFrenzyWrathRequiredNext,\n CacheChainMaxReward,\n CacheChainRequired,\n CacheChainRequiredNext,\n CacheChainWrathMaxReward,\n CacheChainWrathRequired,\n CacheChainWrathRequiredNext,\n CacheConjure,\n CacheConjureReward,\n CacheDragonsFortuneMultAdjustment,\n CacheEdifice,\n CacheEdificeBuilding,\n CacheGoldenCookiesMult,\n CacheHCPerSecond,\n CacheLastChoEgg,\n CacheLucky,\n CacheLuckyFrenzy,\n CacheLuckyReward,\n CacheLuckyRewardFrenzy,\n CacheLuckyWrathReward,\n CacheLuckyWrathRewardFrenzy,\n CacheNoGoldSwitchCookiesPS,\n CacheRealCookiesEarned,\n CacheSeaSpec,\n CacheWrathCookiesMult,\n CacheWrinklersTotal,\n} from '../../../Cache/VariablesAndData';\nimport ResetBonus from '../../../Sim/SimulationEvents/ResetAscension';\nimport GetCPS from '../../HelperFunctions/GetCPS';\nimport GetWrinkConfigBank from '../../HelperFunctions/GetWrinkConfigBank';\nimport { ColourGreen, ColourRed, ColourTextPre } from '../../VariablesAndData';\nimport {\n StatsListing,\n StatsHeader,\n StatsMissDisp,\n StatsMissDispListing,\n} from './CreateDOMElements';\nimport Beautify from '../../BeautifyAndFormatting/Beautify';\nimport FormatTime from '../../BeautifyAndFormatting/FormatTime';\n\n/**\n * This function creates the \"Lucky\" section of the stats page\n * @returns\t{object}\tsection\t\tThe object contating the Lucky section\n */\nexport function LuckySection() {\n // This sets which tooltip to display for certain stats\n const goldCookTooltip = Game.auraMult(\"Dragon's Fortune\")\n ? 'GoldCookDragonsFortuneTooltipPlaceholder'\n : 'GoldCookTooltipPlaceholder';\n\n const section = document.createElement('div');\n section.className = 'CMStatsLuckySection';\n\n const luckyColour = Game.cookies + GetWrinkConfigBank() < CacheLucky ? ColourRed : ColourGreen;\n const luckyTime =\n Game.cookies + GetWrinkConfigBank() < CacheLucky\n ? FormatTime((CacheLucky - (Game.cookies + GetWrinkConfigBank())) / GetCPS())\n : '';\n const luckyReqFrag = document.createDocumentFragment();\n const luckyReqSpan = document.createElement('span');\n luckyReqSpan.style.fontWeight = 'bold';\n luckyReqSpan.className = ColourTextPre + luckyColour;\n luckyReqSpan.textContent = Beautify(CacheLucky);\n luckyReqFrag.appendChild(luckyReqSpan);\n if (luckyTime !== '') {\n const luckyReqSmall = document.createElement('small');\n luckyReqSmall.textContent = ` (${luckyTime})`;\n luckyReqFrag.appendChild(luckyReqSmall);\n }\n section.appendChild(\n StatsListing('withTooltip', '\"Lucky!\" cookies required', luckyReqFrag, goldCookTooltip),\n );\n\n const luckyColourFrenzy =\n Game.cookies + GetWrinkConfigBank() < CacheLuckyFrenzy ? ColourRed : ColourGreen;\n const luckyTimeFrenzy =\n Game.cookies + GetWrinkConfigBank() < CacheLuckyFrenzy\n ? FormatTime((CacheLuckyFrenzy - (Game.cookies + GetWrinkConfigBank())) / GetCPS())\n : '';\n const luckyReqFrenFrag = document.createDocumentFragment();\n const luckyReqFrenSpan = document.createElement('span');\n luckyReqFrenSpan.style.fontWeight = 'bold';\n luckyReqFrenSpan.className = ColourTextPre + luckyColourFrenzy;\n luckyReqFrenSpan.textContent = Beautify(CacheLuckyFrenzy);\n luckyReqFrenFrag.appendChild(luckyReqFrenSpan);\n if (luckyTimeFrenzy !== '') {\n const luckyReqFrenSmall = document.createElement('small');\n luckyReqFrenSmall.textContent = ` (${luckyTimeFrenzy})`;\n luckyReqFrenFrag.appendChild(luckyReqFrenSmall);\n }\n section.appendChild(\n StatsListing(\n 'withTooltip',\n '\"Lucky!\" cookies required (frenzy)',\n luckyReqFrenFrag,\n goldCookTooltip,\n ),\n );\n\n const luckySplit = CacheLuckyReward !== CacheLuckyWrathReward;\n\n const luckyRewardMaxSpan = document.createElement('span');\n luckyRewardMaxSpan.style.fontWeight = 'bold';\n luckyRewardMaxSpan.className = ColourTextPre + CacheLuckyReward;\n luckyRewardMaxSpan.textContent =\n Beautify(CacheLuckyReward) + (luckySplit ? ` / ${Beautify(CacheLuckyWrathReward)}` : '');\n section.appendChild(\n StatsListing(\n 'withTooltip',\n `\"Lucky!\" reward (max)${luckySplit ? ' (golden / wrath)' : ''}`,\n luckyRewardMaxSpan,\n goldCookTooltip,\n ),\n );\n\n const luckyRewardFrenzyMaxSpan = document.createElement('span');\n luckyRewardFrenzyMaxSpan.style.fontWeight = 'bold';\n luckyRewardFrenzyMaxSpan.className = ColourTextPre + luckyRewardFrenzyMaxSpan;\n luckyRewardFrenzyMaxSpan.textContent =\n Beautify(CacheLuckyRewardFrenzy) +\n (luckySplit ? ` / ${Beautify(CacheLuckyWrathRewardFrenzy)}` : '');\n section.appendChild(\n StatsListing(\n 'withTooltip',\n `\"Lucky!\" reward (max) (frenzy)${luckySplit ? ' (golden / wrath)' : ''}`,\n luckyRewardFrenzyMaxSpan,\n goldCookTooltip,\n ),\n );\n\n const luckyCurBase =\n Math.min(\n (Game.cookies + GetWrinkConfigBank()) * 0.15,\n CacheNoGoldSwitchCookiesPS * CacheDragonsFortuneMultAdjustment * 60 * 15,\n ) + 13;\n const luckyCurSpan = document.createElement('span');\n luckyCurSpan.style.fontWeight = 'bold';\n luckyCurSpan.className = ColourTextPre + luckyCurSpan;\n luckyCurSpan.textContent =\n Beautify(CacheGoldenCookiesMult * luckyCurBase) +\n (luckySplit ? ` / ${Beautify(CacheWrathCookiesMult * luckyCurBase)}` : '');\n section.appendChild(\n StatsListing(\n 'withTooltip',\n `\"Lucky!\" reward (cur)${luckySplit ? ' (golden / wrath)' : ''}`,\n luckyCurSpan,\n goldCookTooltip,\n ),\n );\n return section;\n}\n\n/**\n * This function creates the \"Chain\" section of the stats page\n * @returns\t{object}\tsection\t\tThe object contating the Chain section\n */\nexport function ChainSection() {\n // This sets which tooltip to display for certain stats\n const goldCookTooltip = Game.auraMult(\"Dragon's Fortune\")\n ? 'GoldCookDragonsFortuneTooltipPlaceholder'\n : 'GoldCookTooltipPlaceholder';\n\n const section = document.createElement('div');\n section.className = 'CMStatsChainSection';\n\n const chainColour =\n Game.cookies + GetWrinkConfigBank() < CacheChainRequired ? ColourRed : ColourGreen;\n const chainTime =\n Game.cookies + GetWrinkConfigBank() < CacheChainRequired\n ? FormatTime((CacheChainRequired - (Game.cookies + GetWrinkConfigBank())) / GetCPS())\n : '';\n const chainReqFrag = document.createDocumentFragment();\n const chainReqSpan = document.createElement('span');\n chainReqSpan.style.fontWeight = 'bold';\n chainReqSpan.className = ColourTextPre + chainColour;\n chainReqSpan.textContent = Beautify(CacheChainRequired);\n chainReqFrag.appendChild(chainReqSpan);\n if (chainTime !== '') {\n const chainReqSmall = document.createElement('small');\n chainReqSmall.textContent = ` (${chainTime})`;\n chainReqFrag.appendChild(chainReqSmall);\n }\n section.appendChild(\n StatsListing('withTooltip', '\"Chain\" cookies required', chainReqFrag, goldCookTooltip),\n );\n\n const chainWrathColour =\n Game.cookies + GetWrinkConfigBank() < CacheChainWrathRequired ? ColourRed : ColourGreen;\n const chainWrathTime =\n Game.cookies + GetWrinkConfigBank() < CacheChainWrathRequired\n ? FormatTime((CacheChainWrathRequired - (Game.cookies + GetWrinkConfigBank())) / GetCPS())\n : '';\n const chainWrathReqFrag = document.createDocumentFragment();\n const chainWrathReqSpan = document.createElement('span');\n chainWrathReqSpan.style.fontWeight = 'bold';\n chainWrathReqSpan.className = ColourTextPre + chainWrathColour;\n chainWrathReqSpan.textContent = Beautify(CacheChainWrathRequired);\n chainWrathReqFrag.appendChild(chainWrathReqSpan);\n if (chainWrathTime !== '') {\n const chainWrathReqSmall = document.createElement('small');\n chainWrathReqSmall.textContent = ` (${chainWrathTime})`;\n chainWrathReqFrag.appendChild(chainWrathReqSmall);\n }\n section.appendChild(\n StatsListing(\n 'withTooltip',\n '\"Chain\" cookies required (Wrath)',\n chainWrathReqFrag,\n goldCookTooltip,\n ),\n );\n\n const chainColourFrenzy =\n Game.cookies + GetWrinkConfigBank() < CacheChainFrenzyRequired ? ColourRed : ColourGreen;\n const chainTimeFrenzy =\n Game.cookies + GetWrinkConfigBank() < CacheChainFrenzyRequired\n ? FormatTime((CacheChainFrenzyRequired - (Game.cookies + GetWrinkConfigBank())) / GetCPS())\n : '';\n const chainReqFrenFrag = document.createDocumentFragment();\n const chainReqFrenSpan = document.createElement('span');\n chainReqFrenSpan.style.fontWeight = 'bold';\n chainReqFrenSpan.className = ColourTextPre + chainColourFrenzy;\n chainReqFrenSpan.textContent = Beautify(CacheChainFrenzyRequired);\n chainReqFrenFrag.appendChild(chainReqFrenSpan);\n if (chainTimeFrenzy !== '') {\n const chainReqFrenSmall = document.createElement('small');\n chainReqFrenSmall.textContent = ` (${chainTimeFrenzy})`;\n chainReqFrenFrag.appendChild(chainReqFrenSmall);\n }\n section.appendChild(\n StatsListing(\n 'withTooltip',\n '\"Chain\" cookies required (Frenzy)',\n chainReqFrenFrag,\n goldCookTooltip,\n ),\n );\n\n const chainWrathColourFrenzy =\n Game.cookies + GetWrinkConfigBank() < CacheChainFrenzyWrathRequired ? ColourRed : ColourGreen;\n const chainWrathTimeFrenzy =\n Game.cookies + GetWrinkConfigBank() < CacheChainFrenzyWrathRequired\n ? FormatTime(\n (CacheChainFrenzyWrathRequired - (Game.cookies + GetWrinkConfigBank())) / GetCPS(),\n )\n : '';\n const chainWrathReqFrenFrag = document.createDocumentFragment();\n const chainWrathReqFrenSpan = document.createElement('span');\n chainWrathReqFrenSpan.style.fontWeight = 'bold';\n chainWrathReqFrenSpan.className = ColourTextPre + chainWrathColourFrenzy;\n chainWrathReqFrenSpan.textContent = Beautify(CacheChainFrenzyWrathRequired);\n chainWrathReqFrenFrag.appendChild(chainWrathReqFrenSpan);\n if (chainWrathTimeFrenzy !== '') {\n const chainWrathReqFrenSmall = document.createElement('small');\n chainWrathReqFrenSmall.textContent = ` (${chainWrathTimeFrenzy})`;\n chainWrathReqFrenFrag.appendChild(chainWrathReqFrenSmall);\n }\n section.appendChild(\n StatsListing(\n 'withTooltip',\n '\"Chain\" cookies required (frenzy) (Wrath)',\n chainWrathReqFrenFrag,\n goldCookTooltip,\n ),\n );\n\n section.appendChild(\n StatsListing(\n 'withTooltip',\n '\"Chain\" reward (max) (golden / wrath)',\n document.createTextNode(\n `${Beautify(CacheChainMaxReward[0])} / ${Beautify(CacheChainWrathMaxReward[0])}`,\n ),\n goldCookTooltip,\n ),\n );\n\n section.appendChild(\n StatsListing(\n 'withTooltip',\n '\"Chain\" reward (max) (frenzy) (golden / wrath)',\n document.createTextNode(\n `${Beautify(CacheChainFrenzyMaxReward[0])} / ${Beautify(CacheChainFrenzyMaxReward[0])}`,\n ),\n goldCookTooltip,\n ),\n );\n\n const chainCurMax = Math.min(\n Game.cookiesPs * 60 * 60 * 6 * CacheDragonsFortuneMultAdjustment,\n Game.cookies * 0.5,\n );\n const chainCur = MaxChainCookieReward(7, chainCurMax, CacheGoldenCookiesMult)[0];\n const chainCurWrath = MaxChainCookieReward(6, chainCurMax, CacheWrathCookiesMult)[0];\n section.appendChild(\n StatsListing(\n 'withTooltip',\n '\"Chain\" reward (cur) (golden / wrath)',\n document.createTextNode(`${Beautify(chainCur)} / ${Beautify(chainCurWrath)}`),\n goldCookTooltip,\n ),\n );\n\n section.appendChild(\n StatsListing(\n 'withTooltip',\n 'CPS needed for next level (g / w)',\n document.createTextNode(\n `${Beautify(CacheChainRequiredNext)} / ${Beautify(CacheChainWrathRequiredNext)}`,\n ),\n 'ChainNextLevelPlaceholder',\n ),\n );\n section.appendChild(\n StatsListing(\n 'withTooltip',\n 'CPS needed for next level (frenzy) (g / w)',\n document.createTextNode(\n `${Beautify(CacheChainFrenzyRequiredNext)} / ${Beautify(\n CacheChainFrenzyWrathRequiredNext,\n )}`,\n ),\n 'ChainNextLevelPlaceholder',\n ),\n );\n return section;\n}\n\n/**\n * This function creates the \"Spells\" section of the stats page\n * @returns\t{object}\tsection\t\tThe object contating the Spells section\n */\nexport function SpellsSection() {\n const section = document.createElement('div');\n section.className = 'CMStatsSpellsSection';\n\n const conjureColour =\n Game.cookies + GetWrinkConfigBank() < CacheConjure ? ColourRed : ColourGreen;\n const conjureTime =\n Game.cookies + GetWrinkConfigBank() < CacheConjure\n ? FormatTime((CacheConjure - (Game.cookies + GetWrinkConfigBank())) / GetCPS())\n : '';\n\n const conjureReqFrag = document.createDocumentFragment();\n const conjureReqSpan = document.createElement('span');\n conjureReqSpan.style.fontWeight = 'bold';\n conjureReqSpan.className = ColourTextPre + conjureColour;\n conjureReqSpan.textContent = Beautify(CacheConjure);\n conjureReqFrag.appendChild(conjureReqSpan);\n if (conjureTime !== '') {\n const conjureReqSmall = document.createElement('small');\n conjureReqSmall.textContent = ` (${conjureTime})`;\n conjureReqFrag.appendChild(conjureReqSmall);\n }\n section.appendChild(\n StatsListing(\n 'withTooltip',\n '\"Conjure Baked Goods\" cookies required',\n conjureReqFrag,\n 'GoldCookTooltipPlaceholder',\n ),\n );\n section.appendChild(\n StatsListing(\n 'withTooltip',\n '\"Conjure Baked Goods\" reward (max)',\n document.createTextNode(Beautify(CacheConjureReward)),\n 'GoldCookTooltipPlaceholder',\n ),\n );\n\n const conjureFrenzyColour =\n Game.cookies + GetWrinkConfigBank() < CacheConjure * 7 ? ColourRed : ColourGreen;\n const conjureFrenzyCur = Math.min(\n (Game.cookies + GetWrinkConfigBank()) * 0.15,\n CacheNoGoldSwitchCookiesPS * 60 * 30,\n );\n const conjureFrenzyTime =\n Game.cookies + GetWrinkConfigBank() < CacheConjure * 7\n ? FormatTime((CacheConjure * 7 - (Game.cookies + GetWrinkConfigBank())) / GetCPS())\n : '';\n\n const conjureFrenzyReqFrag = document.createDocumentFragment();\n const conjureFrenzyReqSpan = document.createElement('span');\n conjureFrenzyReqSpan.style.fontWeight = 'bold';\n conjureFrenzyReqSpan.className = ColourTextPre + conjureFrenzyColour;\n conjureFrenzyReqSpan.textContent = Beautify(CacheConjure * 7);\n conjureFrenzyReqFrag.appendChild(conjureFrenzyReqSpan);\n if (conjureFrenzyTime !== '') {\n const conjureFrenzyReqSmall = document.createElement('small');\n conjureFrenzyReqSmall.textContent = ` (${conjureFrenzyTime})`;\n conjureFrenzyReqFrag.appendChild(conjureFrenzyReqSmall);\n }\n section.appendChild(\n StatsListing(\n 'withTooltip',\n '\"Conjure Baked Goods\" cookies required (frenzy)',\n conjureFrenzyReqFrag,\n 'GoldCookTooltipPlaceholder',\n ),\n );\n section.appendChild(\n StatsListing(\n 'withTooltip',\n '\"Conjure Baked Goods\" reward (max) (frenzy)',\n document.createTextNode(Beautify(CacheConjureReward * 7)),\n 'GoldCookTooltipPlaceholder',\n ),\n );\n section.appendChild(\n StatsListing(\n 'withTooltip',\n '\"Conjure Baked Goods\" reward (cur)',\n document.createTextNode(Beautify(conjureFrenzyCur)),\n 'GoldCookTooltipPlaceholder',\n ),\n );\n if (CacheEdifice) {\n section.appendChild(\n StatsListing(\n 'withTooltip',\n '\"Spontaneous Edifice\" cookies required (most expensive building)',\n document.createTextNode(`${Beautify(CacheEdifice)} (${CacheEdificeBuilding})`),\n 'GoldCookTooltipPlaceholder',\n ),\n );\n }\n return section;\n}\n\n/**\n * This function creates the \"Garden\" section of the stats page\n * @returns\t{object}\tsection\t\tThe object contating the Spells section\n */\nexport function GardenSection() {\n const section = document.createElement('div');\n section.className = 'CMStatsGardenSection';\n\n const bakeberryColour = Game.cookies < Game.cookiesPs * 60 * 10 * 100 ? ColourRed : ColourGreen;\n const bakeberryFrag = document.createElement('span');\n bakeberryFrag.style.fontWeight = 'bold';\n bakeberryFrag.className = ColourTextPre + bakeberryColour;\n bakeberryFrag.textContent = Beautify(Game.cookiesPs * 60 * 10 * 100);\n section.appendChild(\n StatsListing('basic', 'Cookies required for max reward of Bakeberry: ', bakeberryFrag),\n );\n\n const chocorootColour = Game.cookies < Game.cookiesPs * 60 * 100 ? ColourRed : ColourGreen;\n const chocorootFrag = document.createElement('span');\n chocorootFrag.style.fontWeight = 'bold';\n chocorootFrag.className = ColourTextPre + chocorootColour;\n chocorootFrag.textContent = Beautify(Game.cookiesPs * 60 * 100);\n section.appendChild(\n StatsListing('basic', 'Cookies required for max reward of Chocoroot: ', chocorootFrag),\n );\n\n const queenbeetColour = Game.cookies < Game.cookiesPs * 60 * 60 * 25 ? ColourRed : ColourGreen;\n const queenbeetFrag = document.createElement('span');\n queenbeetFrag.style.fontWeight = 'bold';\n queenbeetFrag.className = ColourTextPre + queenbeetColour;\n queenbeetFrag.textContent = Beautify(Game.cookiesPs * 60 * 60 * 25);\n section.appendChild(\n StatsListing('basic', 'Cookies required for max reward of Queenbeet: ', queenbeetFrag),\n );\n\n const duketaterColour = Game.cookies < Game.cookiesPs * 60 * 15 * 100 ? ColourRed : ColourGreen;\n const duketaterFrag = document.createElement('span');\n duketaterFrag.style.fontWeight = 'bold';\n duketaterFrag.className = ColourTextPre + duketaterColour;\n duketaterFrag.textContent = Beautify(Game.cookiesPs * 60 * 15 * 100);\n section.appendChild(\n StatsListing('basic', 'Cookies required for max reward of Duketater: ', duketaterFrag),\n );\n const missingPlantDrops = [];\n Object.keys(GameData.PlantDrops).forEach((i) => {\n if (!Game.HasUnlocked(GameData.PlantDrops[i])) {\n missingPlantDrops.push(GameData.PlantDrops[i]);\n }\n });\n if (missingPlantDrops.length !== 0) {\n section.appendChild(\n StatsListing('basic', 'Rare plant drops left to unlock', StatsMissDisp(missingPlantDrops)),\n );\n }\n return section;\n}\n\n/**\n * This function creates the \"Prestige\" section of the stats page\n * @returns\t{object}\tsection\t\tThe object contating the Prestige section\n */\nexport function PrestigeSection() {\n const section = document.createElement('div');\n section.className = 'CMStatsPrestigeSection';\n\n const possiblePresMax = Math.floor(\n Game.HowMuchPrestige(\n CacheRealCookiesEarned +\n Game.cookiesReset +\n CacheWrinklersTotal +\n (Game.HasUnlocked('Chocolate egg') && !Game.Has('Chocolate egg') ? CacheLastChoEgg : 0),\n ),\n );\n section.appendChild(\n StatsListing(\n 'withTooltip',\n 'Prestige level (cur / max)',\n document.createTextNode(`${Beautify(Game.prestige)} / ${Beautify(possiblePresMax)}`),\n 'PrestMaxTooltipPlaceholder',\n ),\n );\n\n const neededCook = Math.max(\n 0,\n Game.HowManyCookiesReset(possiblePresMax + 1) -\n (CacheRealCookiesEarned +\n Game.cookiesReset +\n CacheWrinklersTotal +\n ((Game.HasUnlocked('Chocolate egg') && !Game.Has('Chocolate egg') ? CacheLastChoEgg : 0)\n ? CacheLastChoEgg\n : 0)),\n );\n const cookiesNextFrag = document.createDocumentFragment();\n cookiesNextFrag.appendChild(document.createTextNode(Beautify(neededCook)));\n const cookiesNextSmall = document.createElement('small');\n cookiesNextSmall.textContent = ` (${FormatTime(neededCook / CacheAvgCPSWithChoEgg, 1)})`;\n cookiesNextFrag.appendChild(cookiesNextSmall);\n section.appendChild(\n StatsListing(\n 'withTooltip',\n 'Cookies to next level',\n cookiesNextFrag,\n 'NextPrestTooltipPlaceholder',\n ),\n );\n\n section.appendChild(\n StatsListing(\n 'withTooltip',\n 'Heavenly chips (cur / max)',\n document.createTextNode(\n `${Beautify(Game.heavenlyChips)} / ${Beautify(\n possiblePresMax - Game.prestige + Game.heavenlyChips,\n )}`,\n ),\n 'HeavenChipMaxTooltipPlaceholder',\n ),\n );\n\n section.appendChild(\n StatsListing(\n 'basic',\n 'Heavenly chips per second (last 5 seconds)',\n document.createTextNode(Beautify(CacheHCPerSecond, 2)),\n ),\n );\n\n const HCTarget = Number(\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.HeavenlyChipsTarget,\n );\n if (!Number.isNaN(HCTarget)) {\n const CookiesTillTarget =\n HCTarget - Math.floor(Game.HowMuchPrestige(Game.cookiesReset + Game.cookiesEarned));\n if (CookiesTillTarget > 0) {\n section.appendChild(\n StatsListing(\n 'basic',\n 'Heavenly chips to target set in settings (cur)',\n document.createTextNode(Beautify(CookiesTillTarget)),\n ),\n );\n section.appendChild(\n StatsListing(\n 'basic',\n 'Time till target (cur, current 5 second average)',\n document.createTextNode(FormatTime(CookiesTillTarget / CacheHCPerSecond)),\n ),\n );\n }\n }\n\n const resetBonus = ResetBonus(possiblePresMax);\n const resetFrag = document.createDocumentFragment();\n resetFrag.appendChild(document.createTextNode(Beautify(resetBonus)));\n const increase = Math.round((resetBonus / Game.cookiesPs) * 10000);\n if (Number.isFinite(increase) && increase !== 0) {\n const resetSmall = document.createElement('small');\n resetSmall.textContent = ` (${increase / 100}% of income)`;\n resetFrag.appendChild(resetSmall);\n }\n section.appendChild(\n StatsListing('withTooltip', 'Reset bonus income', resetFrag, 'ResetTooltipPlaceholder'),\n );\n\n const currentPrestige = Math.floor(Game.HowMuchPrestige(Game.cookiesReset));\n const willHave = Math.floor(Game.HowMuchPrestige(Game.cookiesReset + Game.cookiesEarned));\n const willGet = willHave - currentPrestige;\n if (!Game.Has('Lucky digit')) {\n let delta7 = 7 - (willHave % 10);\n if (delta7 < 0) delta7 += 10;\n const next7Reset = willGet + delta7;\n const next7Total = willHave + delta7;\n const frag7 = document.createDocumentFragment();\n frag7.appendChild(\n document.createTextNode(\n `${next7Total.toLocaleString()} / ${next7Reset.toLocaleString()} (+${delta7})`,\n ),\n );\n section.appendChild(StatsListing('basic', 'Next \"Lucky Digit\" (total / reset)', frag7));\n }\n\n if (!Game.Has('Lucky number')) {\n let delta777 = 777 - (willHave % 1000);\n if (delta777 < 0) delta777 += 1000;\n const next777Reset = willGet + delta777;\n const next777Total = willHave + delta777;\n const frag777 = document.createDocumentFragment();\n frag777.appendChild(\n document.createTextNode(\n `${next777Total.toLocaleString()} / ${next777Reset.toLocaleString()} (+${delta777})`,\n ),\n );\n section.appendChild(StatsListing('basic', 'Next \"Lucky Number\" (total / reset)', frag777));\n }\n\n if (!Game.Has('Lucky payout')) {\n let delta777777 = 777777 - (willHave % 1000000);\n if (delta777777 < 0) delta777777 += 1000000;\n const next777777Reset = willGet + delta777777;\n const next777777Total = willHave + delta777777;\n const frag777777 = document.createDocumentFragment();\n frag777777.appendChild(\n document.createTextNode(\n `${next777777Total.toLocaleString()} / ${next777777Reset.toLocaleString()} (+${delta777777})`,\n ),\n );\n section.appendChild(StatsListing('basic', 'Next \"Lucky Payout\" (total / reset)', frag777777));\n }\n\n return section;\n}\n\n/**\n * This function creates the \"Season Specials\" section of the stats page\n * @returns\t{object}\tsection\t\tThe object contating the Season Specials section\n */\nexport function SeasonSection() {\n const section = document.createElement('div');\n section.className = 'CMStatsSeasonSection';\n\n let specDisp = false;\n const missingHalloweenCookies = [];\n Object.keys(GameData.HalloCookies).forEach((i) => {\n if (!Game.Has(GameData.HalloCookies[i])) {\n missingHalloweenCookies.push(GameData.HalloCookies[i]);\n specDisp = true;\n }\n });\n const missingChristmasCookies = [];\n Object.keys(GameData.ChristCookies).forEach((i) => {\n if (!Game.Has(GameData.ChristCookies[i])) {\n missingChristmasCookies.push(GameData.ChristCookies[i]);\n specDisp = true;\n }\n });\n const missingValentineCookies = [];\n Object.keys(GameData.ValCookies).forEach((i) => {\n if (!Game.Has(GameData.ValCookies[i])) {\n missingValentineCookies.push(GameData.ValCookies[i]);\n specDisp = true;\n }\n });\n const missingNormalEggs = [];\n Object.keys(Game.eggDrops).forEach((i) => {\n if (!Game.HasUnlocked(Game.eggDrops[i])) {\n missingNormalEggs.push(Game.eggDrops[i]);\n specDisp = true;\n }\n });\n const missingRareEggs = [];\n Object.keys(Game.rareEggDrops).forEach((i) => {\n if (!Game.HasUnlocked(Game.rareEggDrops[i])) {\n missingRareEggs.push(Game.rareEggDrops[i]);\n specDisp = true;\n }\n });\n const choEgg = Game.HasUnlocked('Chocolate egg') && !Game.Has('Chocolate egg');\n const centEgg = Game.Has('Century egg');\n\n if (Game.season === 'christmas' || specDisp || choEgg || centEgg) {\n section.appendChild(StatsHeader('Season Specials', 'Sea'));\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers.Sea) {\n if (missingHalloweenCookies.length !== 0) {\n section.appendChild(\n StatsMissDispListing(\n 'basic',\n 'Halloween cookies left to buy',\n StatsMissDisp(missingHalloweenCookies),\n Game.season === 'halloween',\n ),\n );\n let failRateHalloween = 0.95;\n if (Game.HasAchiev('Spooky cookies')) failRateHalloween = 0.8;\n if (Game.Has('Starterror')) failRateHalloween *= 0.9;\n failRateHalloween *= 1 / Game.dropRateMult();\n if (Game.hasGod) {\n const godLvl = Game.hasGod('seasons');\n if (godLvl === 1) failRateHalloween *= 0.9;\n else if (godLvl === 2) failRateHalloween *= 0.95;\n else if (godLvl === 3) failRateHalloween *= 0.97;\n }\n const obtainedCookiesChance = missingHalloweenCookies.length / 7;\n section.appendChild(\n StatsMissDispListing(\n 'basic',\n 'Chance of receiving a cookie from wrinkler/shiny wrinkler',\n document.createTextNode(\n `${Beautify((1 - failRateHalloween) * obtainedCookiesChance * 100)}% / ${Beautify(\n (1 - failRateHalloween * 0.9) * obtainedCookiesChance * 100,\n )}%`,\n ),\n Game.season === 'halloween',\n ),\n );\n }\n if (missingChristmasCookies.length !== 0) {\n section.appendChild(\n StatsMissDispListing(\n 'basic',\n 'Christmas cookies left to buy',\n StatsMissDisp(missingChristmasCookies),\n Game.season === 'christmas',\n ),\n );\n let failRateChristmas = 0.8;\n if (Game.HasAchiev('Let it snow')) failRateChristmas = 0.6;\n failRateChristmas *= 1 / Game.dropRateMult();\n if (Game.Has('Starsnow')) failRateChristmas *= 0.95;\n if (Game.hasGod) {\n const godLvl = Game.hasGod('seasons');\n if (godLvl === 1) failRateChristmas *= 0.9;\n else if (godLvl === 2) failRateChristmas *= 0.95;\n else if (godLvl === 3) failRateChristmas *= 0.97;\n }\n const obtainedCookiesChance = missingChristmasCookies.length / 7;\n section.appendChild(\n StatsMissDispListing(\n 'basic',\n 'Chance of receiving a cookie from reindeer',\n document.createTextNode(\n `${Beautify((1 - failRateChristmas) * obtainedCookiesChance * 100)}%`,\n ),\n Game.season === 'christmas',\n ),\n );\n }\n if (missingValentineCookies.length !== 0) {\n section.appendChild(\n StatsMissDispListing(\n 'basic',\n 'Valentine cookies left to buy',\n StatsMissDisp(missingValentineCookies),\n Game.season === 'valentines',\n ),\n );\n }\n const dropRateEgg = function (StartingFailRate) {\n let failRateEgg = StartingFailRate * (1 / Game.dropRateMult());\n if (Game.HasAchiev('Hide & seek champion')) failRateEgg *= 0.7;\n if (Game.Has('Omelette')) failRateEgg *= 0.9;\n if (Game.Has('Starspawn')) failRateEgg *= 0.9;\n if (Game.hasGod) {\n const godLvl = Game.hasGod('seasons');\n if (godLvl === 1) failRateEgg *= 0.9;\n else if (godLvl === 2) failRateEgg *= 0.95;\n else if (godLvl === 3) failRateEgg *= 0.97;\n }\n // Calculations courtesy of @svschouw, at https://github.com/Aktanusa/CookieMonster/issues/25\n const succesRateEgg = 1 - failRateEgg;\n const obtainedEggs = Game.eggDrops.length - missingNormalEggs.length;\n const obtainedRareEggs = Game.rareEggDrops.length - missingRareEggs.length;\n const pNormal1 = succesRateEgg * 0.9 * (1 - obtainedEggs / Game.eggDrops.length);\n const pRare1 = succesRateEgg * 0.1 * (1 - obtainedRareEggs / Game.rareEggDrops.length);\n const pRedropNormal = succesRateEgg * 0.9 * (obtainedEggs / Game.eggDrops.length);\n const pRedropRare = succesRateEgg * 0.1 * (obtainedRareEggs / Game.rareEggDrops.length);\n const pRedrop = pRedropNormal + pRedropRare;\n const pNormal2 = pRedrop * 0.9 * (1 - obtainedEggs / Game.eggDrops.length);\n const pRare2 = pRedrop * 0.1 * (1 - obtainedRareEggs / Game.rareEggDrops.length);\n return [pNormal1 + pNormal2, pRare1 + pRare2];\n };\n if (missingNormalEggs.length !== 0) {\n section.appendChild(\n StatsMissDispListing(\n 'basic',\n 'Normal easter eggs left to unlock',\n StatsMissDisp(missingNormalEggs),\n Game.season === 'easter',\n ),\n );\n section.appendChild(\n StatsMissDispListing(\n 'basic',\n 'Chance of receiving an egg from wrinkler/golden cookie',\n document.createTextNode(\n `${Beautify(dropRateEgg(0.98)[0] * 100)}% / ${Beautify(dropRateEgg(0.9)[0] * 100)}%`,\n ),\n Game.season === 'easter',\n ),\n );\n }\n if (missingRareEggs.length !== 0) {\n section.appendChild(\n StatsMissDispListing(\n 'basic',\n 'Rare easter eggs left to unlock',\n StatsMissDisp(missingRareEggs),\n Game.season === 'easter',\n ),\n );\n section.appendChild(\n StatsMissDispListing(\n 'basic',\n 'Chance of receiving a rare egg from wrinkler/golden cookie',\n document.createTextNode(\n `${Beautify(dropRateEgg(0.98)[1] * 100)}% / ${Beautify(dropRateEgg(0.9)[1] * 100)}%`,\n ),\n Game.season === 'easter',\n ),\n );\n }\n\n if (Game.season === 'christmas')\n section.appendChild(\n StatsMissDispListing(\n 'basic',\n 'Reindeer reward',\n document.createTextNode(Beautify(CacheSeaSpec)),\n true,\n ),\n );\n if (choEgg) {\n section.appendChild(\n StatsListing(\n 'withTooltip',\n 'Chocolate egg cookies',\n document.createTextNode(Beautify(CacheLastChoEgg)),\n 'ChoEggTooltipPlaceholder',\n ),\n );\n }\n if (centEgg) {\n section.appendChild(\n StatsListing(\n 'basic',\n 'Century egg multiplier',\n document.createTextNode(`${Math.round((CacheCentEgg - 1) * 10000) / 100}%`),\n ),\n );\n }\n }\n }\n return section;\n}\n","import { CacheRealCookiesEarned } from '../../Cache/VariablesAndData';\nimport CalculateGains from '../Calculations/CalculateGains';\nimport CheckOtherAchiev from '../Calculations/CheckOtherAchiev';\nimport CopyData from '../SimulationData/CopyData';\nimport SimWin from '../SimulationData/SimWin';\nimport { SimAchievementsOwned, SimCookiesPs, SimPrestige, SimUpgrades } from '../VariablesAndData'; // eslint-disable-line no-unused-vars\n\n/**\n * This function calculates the cookies per click difference betwene current and after a ascension\n * It is called by CM.Disp.CreateStatsPrestigeSection()\n * @param\t{number}\tnewHeavenlyChips\tThe total heavenly chips after ascension\n * @returns\t{number}\tResetCPS\t\t\tThe CPS difference after reset\n */\nexport default function ResetBonus(newHeavenlyChips) {\n // Calculate CPS with all Heavenly upgrades\n let curCPS = Game.cookiesPs;\n\n CopyData();\n\n if (SimUpgrades['Heavenly key'].bought === 0) {\n SimUpgrades['Heavenly chip secret'].bought = 1;\n SimUpgrades['Heavenly cookie stand'].bought = 1;\n SimUpgrades['Heavenly bakery'].bought = 1;\n SimUpgrades['Heavenly confectionery'].bought = 1;\n SimUpgrades['Heavenly key'].bought = 1;\n\n CalculateGains();\n\n curCPS = SimCookiesPs;\n\n CopyData();\n }\n\n if (CacheRealCookiesEarned >= 1000000) SimWin('Sacrifice');\n if (CacheRealCookiesEarned >= 1000000000) SimWin('Oblivion');\n if (CacheRealCookiesEarned >= 1000000000000) SimWin('From scratch');\n if (CacheRealCookiesEarned >= 1000000000000000) SimWin('Nihilism');\n if (CacheRealCookiesEarned >= 1000000000000000000) SimWin('Dematerialize');\n if (CacheRealCookiesEarned >= 1000000000000000000000) SimWin('Nil zero zilch');\n if (CacheRealCookiesEarned >= 1000000000000000000000000) SimWin('Transcendence');\n if (CacheRealCookiesEarned >= 1000000000000000000000000000) SimWin('Obliterate');\n if (CacheRealCookiesEarned >= 1000000000000000000000000000000) SimWin('Negative void');\n if (CacheRealCookiesEarned >= 1000000000000000000000000000000000) SimWin('To crumbs, you say?');\n if (CacheRealCookiesEarned >= 1000000000000000000000000000000000000) SimWin('You get nothing');\n if (CacheRealCookiesEarned >= 1000000000000000000000000000000000000000)\n SimWin('Humble rebeginnings');\n if (CacheRealCookiesEarned >= 1000000000000000000000000000000000000000000)\n SimWin('The end of the world');\n if (CacheRealCookiesEarned >= 1000000000000000000000000000000000000000000000)\n SimWin(\"Oh, you're back\");\n if (CacheRealCookiesEarned >= 1000000000000000000000000000000000000000000000000)\n SimWin('Lazarus');\n if (CacheRealCookiesEarned >= 1000000000000000000000000000000000000000000000000000)\n SimWin('Smurf account');\n if (CacheRealCookiesEarned >= 1000000000000000000000000000000000000000000000000000000)\n SimWin(\"If at first you don't succeed\");\n\n SimUpgrades['Heavenly chip secret'].bought = 1;\n SimUpgrades['Heavenly cookie stand'].bought = 1;\n SimUpgrades['Heavenly bakery'].bought = 1;\n SimUpgrades['Heavenly confectionery'].bought = 1;\n SimUpgrades['Heavenly key'].bought = 1;\n\n SimPrestige = newHeavenlyChips;\n\n const lastAchievementsOwned = SimAchievementsOwned;\n\n CalculateGains();\n\n CheckOtherAchiev();\n\n if (lastAchievementsOwned !== SimAchievementsOwned) {\n CalculateGains();\n }\n\n const ResetCPS = SimCookiesPs - curCPS;\n\n // Reset Pretige level after calculation as it is used in CM.Sim.CalculateGains() so can't be local\n SimPrestige = Game.prestige;\n\n return ResetCPS;\n}\n","function CrateTooltipLockedAchievements(me) {\n const tags = [];\n if (me.pool === 'shadow') tags.push('Shadow Achievement', '#9700cf');\n else tags.push('Achievement', 0);\n tags.push('Locked', 0);\n\n let neuromancy = 0;\n if (Game.Has('Neuromancy') || (Game.sesame && me.pool === 'debug')) neuromancy = 1;\n if (neuromancy && me.won === 0) tags.push('Click to win!', '#00c462');\n else if (neuromancy && me.won > 0) tags.push('Click to lose!', '#00c462');\n\n let { icon } = me;\n if (me.iconFunction) icon = me.iconFunction();\n\n let { desc } = me;\n if (me.descFunc) desc = me.descFunc('stats');\n\n let tagsStr = '';\n for (let i = 0; i < tags.length; i += 2) {\n if (i % 2 === 0)\n tagsStr += `
[${\n tags[i]\n }]
`;\n }\n tagsStr = tagsStr.substring(1);\n\n return `
\n
\n
${me.name}
\n ${tagsStr}
${desc}
\n ${\n Game.sesame\n ? `
Id : ${me.id} | Order : ${Math.floor(me.order)}${\n me.tier ? ` | Tier : ${me.tier}` : ''\n }
`\n : ''\n }`;\n}\n\n/**\n * This function overwrites the crates of missing achievements\n */\nexport default function AddMissingAchievements() {\n let achievs;\n Object.values(document.querySelectorAll('div.title')).forEach((i) => {\n if (i.textContent.includes('Achievements')) {\n achievs = i.parentElement.querySelectorAll('div.listing.crateBox')[0];\n }\n });\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.MissingAchievements) {\n Object.values(achievs.children).forEach((achievsCrate) => {\n if (!achievsCrate.className.includes('enabled')) {\n const id = achievsCrate.onclick.toString().split(/\\[(.*)\\]/gi)[1];\n const { icon } = Game.AchievementsById[id];\n // eslint-disable-next-line no-param-reassign\n achievsCrate.style.backgroundPosition = `${-icon[0] * 48}px ${-icon[1] * 48}px`;\n // eslint-disable-next-line no-param-reassign\n achievsCrate.onmouseover = function () {\n if (!Game.mouseDown) {\n Game.setOnCrate(this);\n Game.tooltip.dynamic = 1;\n Game.tooltip.draw(\n this,\n () =>\n (function () {\n return CrateTooltipLockedAchievements(Game.AchievementsById[id]);\n })(),\n 'top',\n );\n Game.tooltip.wobble();\n }\n };\n }\n });\n }\n}\n","/**\n * This function fixes Game.mouseY as a result of bars that are added by CookieMonster\n * It is called by Game.UpdateWrinklers(), Game.UpdateSpecial() and the .onmousover of the BigCookie\n * before execution of their actual function\n */\nexport default function FixMouseY(target) {\n if (\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.TimerBar === 1 &&\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.TimerBarPos === 0\n ) {\n const timerBarHeight = parseInt(l('CMTimerBar').style.height, 10);\n Game.mouseY -= timerBarHeight;\n target();\n Game.mouseY += timerBarHeight;\n } else {\n target();\n }\n}\n","import jscolor from '@eastdesire/jscolor';\n\nimport CMBeautify from '../../Disp/BeautifyAndFormatting/Beautify';\nimport FormatTime from '../../Disp/BeautifyAndFormatting/FormatTime';\nimport { AddAuraInfo, AddDragonLevelUpTooltip } from '../../Disp/Dragon/Dragon';\nimport AddMenu from '../../Disp/MenuSections/AddMenus';\nimport UpdateTitle from '../../Disp/TabTitle/TabTitle';\nimport ReplaceAscendTooltip from '../../Disp/Tooltips/AscendButton';\nimport UpdateTooltipLocation from '../../Disp/Tooltips/PositionLocation';\nimport { CMSayTime, Title } from '../../Disp/VariablesAndData'; // eslint-disable-line no-unused-vars\nimport { SimDoSims } from '../../Sim/VariablesAndData'; // eslint-disable-line no-unused-vars\nimport ReplaceTooltipUpgrade from '../ReplaceGameElements/TooltipUpgrades';\nimport {\n BackupFunctions,\n CenturyDateAtBeginLoop, // eslint-disable-line no-unused-vars\n CycliusDateAtBeginLoop, // eslint-disable-line no-unused-vars\n} from '../VariablesAndData';\nimport FixMouseY from './FixMouse';\n\n/**\n * This function replaces certain native (from the base-game) functions\n */\nexport default function ReplaceNative() {\n // eslint-disable-next-line no-undef\n BackupFunctions.Beautify = Beautify;\n // eslint-disable-next-line no-undef\n Beautify = CMBeautify;\n\n BackupFunctions.CalculateGains = Game.CalculateGains;\n Game.CalculateGains = function () {\n BackupFunctions.CalculateGains();\n SimDoSims = 1;\n CycliusDateAtBeginLoop = Date.now();\n CenturyDateAtBeginLoop = Date.now();\n };\n\n BackupFunctions.tooltip = {};\n BackupFunctions.tooltip.draw = Game.tooltip.draw;\n BackupFunctions.tooltip.drawMod = new Function( // eslint-disable-line no-new-func\n `return ${Game.tooltip.draw.toString().split('this').join('Game.tooltip')}`,\n )();\n Game.tooltip.draw = function (from, text, origin) {\n BackupFunctions.tooltip.drawMod(from, text, origin);\n };\n\n BackupFunctions.tooltip.update = Game.tooltip.update;\n BackupFunctions.tooltip.updateMod = new Function( // eslint-disable-line no-new-func\n `return ${Game.tooltip.update.toString().split('this.').join('Game.tooltip.')}`,\n )();\n Game.tooltip.update = function () {\n BackupFunctions.tooltip.updateMod();\n UpdateTooltipLocation();\n };\n\n BackupFunctions.UpdateWrinklers = Game.UpdateWrinklers;\n Game.UpdateWrinklers = function () {\n FixMouseY(BackupFunctions.UpdateWrinklers);\n };\n\n BackupFunctions.UpdateSpecial = Game.UpdateSpecial;\n Game.UpdateSpecial = function () {\n FixMouseY(BackupFunctions.UpdateSpecial);\n };\n\n // Assumes newer browsers\n l('bigCookie').removeEventListener('click', Game.ClickCookie, false);\n l('bigCookie').addEventListener(\n 'click',\n (event) => {\n FixMouseY(() => Game.ClickCookie(event, 0));\n },\n false,\n );\n\n BackupFunctions.RebuildUpgrades = Game.RebuildUpgrades;\n Game.RebuildUpgrades = function () {\n BackupFunctions.RebuildUpgrades();\n ReplaceTooltipUpgrade();\n Game.CalculateGains();\n };\n\n BackupFunctions.ClickProduct = Game.ClickProduct;\n /**\n * This function adds a check to the purchase of a building to allow BulkBuyBlock to work.\n * If the options is 1 (on) bulkPrice is under cookies you can't buy the building.\n */\n Game.ClickProduct = function (what) {\n if (\n !Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.BulkBuyBlock ||\n Game.ObjectsById[what].bulkPrice < Game.cookies ||\n Game.buyMode === -1\n ) {\n BackupFunctions.ClickProduct(what);\n }\n };\n\n BackupFunctions.DescribeDragonAura = Game.DescribeDragonAura;\n /**\n * This function adds the function CM.Disp.AddAuraInfo() to Game.DescribeDragonAura()\n * This adds information about CPS differences and costs to the aura choosing interface\n * @param\t{number}\taura\tThe number of the aura currently selected by the mouse/user\n */\n Game.DescribeDragonAura = function (aura) {\n BackupFunctions.DescribeDragonAura(aura);\n AddAuraInfo(aura);\n };\n\n BackupFunctions.ToggleSpecialMenu = Game.ToggleSpecialMenu;\n /**\n * This function adds the code to display the tooltips for the levelUp button of the dragon\n */\n Game.ToggleSpecialMenu = function (on) {\n BackupFunctions.ToggleSpecialMenu(on);\n AddDragonLevelUpTooltip();\n };\n\n BackupFunctions.UpdateMenu = Game.UpdateMenu;\n Game.UpdateMenu = function () {\n if (typeof jscolor.picker === 'undefined' || typeof jscolor.picker.owner === 'undefined') {\n BackupFunctions.UpdateMenu();\n AddMenu();\n }\n };\n\n BackupFunctions.sayTime = Game.sayTime;\n // eslint-disable-next-line no-unused-vars\n CMSayTime = function (time, detail) {\n if (Number.isNaN(time) || time <= 0) return BackupFunctions.sayTime(time, detail);\n return FormatTime(time / Game.fps, 1);\n };\n\n BackupFunctions.Logic = Game.Logic;\n Game.Logic = function () {\n BackupFunctions.Logic();\n\n // Update tab title\n let title = 'Cookie Clicker';\n if (Game.season === 'fools') title = 'Cookie Baker';\n // eslint-disable-next-line no-unused-vars\n Title = `${Game.OnAscend ? 'Ascending! ' : ''}${CMBeautify(Game.cookies)} ${\n Game.cookies === 1 ? 'cookie' : 'cookies'\n } - ${title}`;\n UpdateTitle();\n\n // Since the Ascend Tooltip is not actually a tooltip we need to add our additional info here...\n ReplaceAscendTooltip();\n };\n}\n","/**\n * This function updates the location of the tooltip\n * It is called by Game.tooltip.update() because of CM.Main.ReplaceNative()\n */\nexport default function UpdateTooltipLocation() {\n if (Game.tooltip.origin === 'store') {\n let warnOffset = 0;\n if (\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.ToolWarnLucky === 1 &&\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.ToolWarnPos === 1 &&\n l('CMDispTooltipWarningParent') !== null\n ) {\n warnOffset = l('CMDispTooltipWarningParent').clientHeight - 4;\n }\n Game.tooltip.tta.style.top = `${Math.min(\n parseInt(Game.tooltip.tta.style.top, 10),\n l('game').clientHeight +\n l('topBar').clientHeight -\n Game.tooltip.tt.clientHeight -\n warnOffset -\n 46,\n )}px`;\n }\n // Kept for future possible use if the code changes again\n /* else if (!Game.onCrate && !Game.OnAscend && CM.Options.TimerBar === 1 && CM.Options.TimerBarPos === 0) {\n\t\tGame.tooltip.tta.style.top = (parseInt(Game.tooltip.tta.style.top) + parseInt(CM.Disp.TimerBar.style.height)) + 'px';\n\t} */\n}\n","import { CreateTooltip } from '../../Disp/Tooltips/Tooltip';\nimport { TooltipUpgradeBackup } from '../VariablesAndData';\n\n/**\n * This function replaces the original .onmouseover functions of upgrades so that it calls CM.Disp.Tooltip()\n * CM.Disp.Tooltip() sets the tooltip type to 'u'\n * It is called by Game.RebuildUpgrades() through CM.Main.ReplaceNative() and is therefore not permanent like the other ReplaceTooltip functions\n */\nexport default function ReplaceTooltipUpgrade() {\n TooltipUpgradeBackup = [];\n Object.keys(Game.UpgradesInStore).forEach((i) => {\n if (l(`upgrade${i}`).onmouseover !== null) {\n TooltipUpgradeBackup[i] = l(`upgrade${i}`).onmouseover;\n l(`upgrade${i}`).onmouseover = function () {\n if (!Game.mouseDown) {\n Game.setOnCrate(this);\n Game.tooltip.dynamic = 1;\n Game.tooltip.draw(this, () => CreateTooltip('u', `${i}`), 'store');\n Game.tooltip.wobble();\n }\n };\n }\n });\n}\n","/** Functions related to the Dragon */\n\nimport CacheDragonCost from '../../Cache/Dragon/Dragon';\nimport { CacheCostDragonUpgrade } from '../../Cache/VariablesAndData';\nimport CalculateChangeAura from '../../Sim/SimulationEvents/AuraChange';\nimport Beautify from '../BeautifyAndFormatting/Beautify';\nimport FormatTime from '../BeautifyAndFormatting/FormatTime';\n\n/**\n * This functions adds the two extra lines about CPS and time to recover to the aura picker infoscreen\n * @param\t{number}\taura\tThe number of the aura currently selected by the mouse/user\n */\nexport function AddAuraInfo(aura) {\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.DragonAuraInfo === 1) {\n const [bonusCPS, priceOfChange] = CalculateChangeAura(aura);\n const timeToRecover = FormatTime(priceOfChange / (bonusCPS + Game.cookiesPs));\n let bonusCPSPercentage;\n if (Game.cookiesPs === 0) bonusCPSPercentage = Beautify(Infinity);\n else bonusCPSPercentage = Beautify((bonusCPS / Game.cookiesPs) * 100);\n\n l('dragonAuraInfo').style.minHeight = '60px';\n l('dragonAuraInfo').style.margin = '8px';\n l('dragonAuraInfo').appendChild(document.createElement('div')).className = 'line';\n const div = document.createElement('div');\n div.style.minWidth = '200px';\n div.style.textAlign = 'center';\n div.textContent = `Picking this aura will change CPS by ${Beautify(\n bonusCPS,\n )} (${bonusCPSPercentage}% of current CPS).`;\n l('dragonAuraInfo').appendChild(div);\n const div2 = document.createElement('div');\n div2.style.minWidth = '200px';\n div2.style.textAlign = 'center';\n div2.textContent = `It will take ${timeToRecover} to recover the cost.`;\n l('dragonAuraInfo').appendChild(div2);\n }\n}\n\n/**\n * This functions adds a tooltip to the level up button displaying the cost of rebuying all\n * It is called by Game.ToggleSpecialMenu() after CM.Main.ReplaceNative()\n */\nexport function AddDragonLevelUpTooltip() {\n // Check if it is the dragon popup that is on screen\n if (\n (l('specialPopup').className.match(/onScreen/) &&\n l('specialPopup').children[0].style.background.match(/dragon/)) !== null\n ) {\n for (let i = 0; i < l('specialPopup').childNodes.length; i++) {\n if (l('specialPopup').childNodes[i].className === 'optionBox') {\n l('specialPopup').children[i].onmouseover = function () {\n CacheDragonCost();\n Game.tooltip.dynamic = 1;\n Game.tooltip.draw(\n l('specialPopup'),\n `
${CacheCostDragonUpgrade}
`,\n 'this',\n );\n Game.tooltip.wobble();\n };\n l('specialPopup').children[i].onmouseout = function () {\n Game.tooltip.shouldHide = 1;\n };\n }\n }\n }\n}\n","import { CacheDragonAura, CacheDragonAura2 } from '../../Cache/VariablesAndData';\nimport CalculateGains from '../Calculations/CalculateGains';\nimport CheckOtherAchiev from '../Calculations/CheckOtherAchiev';\nimport CopyData from '../SimulationData/CopyData';\nimport {\n SimAchievementsOwned,\n SimBuildingsOwned, // eslint-disable-line no-unused-vars\n SimCookiesPs,\n SimDragonAura,\n SimDragonAura2,\n SimObjects,\n} from '../VariablesAndData';\n\n/**\n * This functions calculates the cps and cost of changing a Dragon Aura\n * It is called by CM.Disp.AddAuraInfo()\n * @param\t{number}\t\t\taura\t\t\t\t\t\t\t\t\t\tThe number of the aura currently selected by the mouse/user\n * @returns {[number, number]} \t[CM.Sim.cookiesPs - Game.cookiesPs, price]\tThe bonus cps and the price of the change\n */\nexport default function CalculateChangeAura(aura) {\n CopyData();\n\n // Check if aura being changed is first or second aura\n const auraToBeChanged = l('promptContent').children[0].innerHTML.includes('secondary');\n if (auraToBeChanged) SimDragonAura2 = aura;\n else SimDragonAura = aura;\n\n // Sell highest building but only if aura is different\n let price = 0;\n if (SimDragonAura !== CacheDragonAura || SimDragonAura2 !== CacheDragonAura2) {\n for (let i = Game.ObjectsById.length - 1; i > -1; --i) {\n if (Game.ObjectsById[i].amount > 0) {\n const highestBuilding = SimObjects[Game.ObjectsById[i].name].name;\n SimObjects[highestBuilding].amount -= 1;\n SimBuildingsOwned -= 1;\n price =\n SimObjects[highestBuilding].basePrice *\n Game.priceIncrease **\n Math.max(0, SimObjects[highestBuilding].amount - 1 - SimObjects[highestBuilding].free);\n price = Game.modifyBuildingPrice(SimObjects[highestBuilding], price);\n price = Math.ceil(price);\n break;\n }\n }\n }\n\n const lastAchievementsOwned = SimAchievementsOwned;\n CalculateGains();\n\n CheckOtherAchiev();\n if (lastAchievementsOwned !== SimAchievementsOwned) {\n CalculateGains();\n }\n return [SimCookiesPs - Game.cookiesPs, price];\n}\n","import createMenuOptions from './createMenuOptions';\nimport AddMenuStats from './Statistics/AddStatsPage';\n\n/**\n * This function adds the calll the functions to add extra info to the stats and options pages\n */\nexport default function AddMenu() {\n const title = document.createElement('div');\n title.className = 'title';\n\n if (Game.onMenu === 'stats') {\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.Stats) {\n title.textContent = 'Cookie Monster Statistics';\n AddMenuStats(title);\n }\n } else if (Game.onMenu === 'prefs') {\n // Added because Framework is broken\n l('menu').childNodes[2].insertBefore(\n createMenuOptions(),\n l('menu').childNodes[2].childNodes[l('menu').childNodes[2].childNodes.length - 1],\n );\n }\n}\n","/** Functions related to updating the tab in the browser's tab-bar */\n\nimport { CacheSeasonPopShimmer, CacheSpawnedGoldenShimmer } from '../../Cache/VariablesAndData';\n\nimport { LastSeasonPopupState, LastTickerFortuneState } from '../../Main/VariablesAndData';\nimport { Title } from '../VariablesAndData';\n\n/**\n * This function updates the tab title\n * It is called on every loop by Game.Logic() which also sets CM.Disp.Title to Game.cookies\n */\nexport default function UpdateTitle() {\n if (\n Game.OnAscend ||\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.Title === 0\n ) {\n document.title = Title;\n } else if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.Title === 1) {\n let addFC = false;\n let addSP = false;\n let titleGC;\n let titleFC;\n let titleSP;\n\n if (CacheSpawnedGoldenShimmer) {\n if (CacheSpawnedGoldenShimmer.wrath)\n titleGC = `[W${Math.ceil(CacheSpawnedGoldenShimmer.life / Game.fps)}]`;\n else titleGC = `[G${Math.ceil(CacheSpawnedGoldenShimmer.life / Game.fps)}]`;\n } else if (!Game.Has('Golden switch [off]')) {\n titleGC = `[${Number(l('CMTimerBarGCMinBar').textContent) < 0 ? '!' : ''}${Math.ceil(\n (Game.shimmerTypes.golden.maxTime - Game.shimmerTypes.golden.time) / Game.fps,\n )}]`;\n } else titleGC = '[GS]';\n\n if (LastTickerFortuneState) {\n addFC = true;\n titleFC = '[F]';\n }\n\n if (Game.season === 'christmas') {\n addSP = true;\n if (LastSeasonPopupState) titleSP = `[R${Math.ceil(CacheSeasonPopShimmer.life / Game.fps)}]`;\n else {\n titleSP = `[${Number(l('CMTimerBarRenMinBar').textContent) < 0 ? '!' : ''}${Math.ceil(\n (Game.shimmerTypes.reindeer.maxTime - Game.shimmerTypes.reindeer.time) / Game.fps,\n )}]`;\n }\n }\n\n // Remove previous timers and add current cookies\n let str = Title;\n if (str.charAt(0) === '[') {\n str = str.substring(str.lastIndexOf(']') + 1);\n }\n document.title = `${titleGC + (addFC ? titleFC : '') + (addSP ? titleSP : '')} ${str}`;\n } else if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.Title === 2) {\n let str = '';\n let spawn = false;\n if (CacheSpawnedGoldenShimmer) {\n spawn = true;\n if (CacheSpawnedGoldenShimmer.wrath)\n str += `[W${Math.ceil(CacheSpawnedGoldenShimmer.life / Game.fps)}]`;\n else str += `[G${Math.ceil(CacheSpawnedGoldenShimmer.life / Game.fps)}]`;\n }\n if (LastTickerFortuneState) {\n spawn = true;\n str += '[F]';\n }\n if (Game.season === 'christmas' && LastSeasonPopupState) {\n str += `[R${Math.ceil(CacheSeasonPopShimmer.life / Game.fps)}]`;\n spawn = true;\n }\n if (spawn) str += ' - ';\n let title = 'Cookie Clicker';\n if (Game.season === 'fools') title = 'Cookie Baker';\n str += title;\n document.title = str;\n }\n}\n","import {\n CacheHCPerSecond,\n CacheLastHeavenlyChips,\n CacheTimeTillNextPrestige,\n} from '../../Cache/VariablesAndData';\nimport Beautify from '../BeautifyAndFormatting/Beautify';\n\n/**\n * This function creates a header object for tooltips.\n * @param\t{string}\ttext\tTitle of header\n * @returns {object}\tdiv\t\tAn object containing the stylized header\n */\nexport default function ReplaceAscendTooltip() {\n const cookiesToNext = Math.max(\n 0,\n Game.HowManyCookiesReset(\n Math.floor(Game.HowMuchPrestige(Game.cookiesReset + Game.cookiesEarned)) + 1,\n ) -\n (Game.cookiesEarned + Game.cookiesReset),\n );\n\n const startDate = Game.sayTime(((Date.now() - Game.startDate) / 1000) * Game.fps, -1);\n let str = `You've been on this run for
${\n startDate === '' ? 'not very long' : startDate\n }.
\n
`;\n if (Game.prestige > 0) {\n str += `Your prestige level is currently
${Beautify(Game.prestige)}.
(CpS +${Beautify(\n Game.prestige,\n )}%)\n
`;\n }\n if (CacheLastHeavenlyChips < 1) str += 'Ascending now would grant you no prestige.';\n else if (CacheLastHeavenlyChips < 2)\n str +=\n 'Ascending now would grant you
1 prestige level (+1% CpS)
and
1 heavenly chip to spend.';\n else\n str += `Ascending now would grant you
${Beautify(\n CacheLastHeavenlyChips,\n )} prestige levels (+${Beautify(CacheLastHeavenlyChips)}% CpS)
and
${Beautify(\n CacheLastHeavenlyChips,\n )} heavenly chips to spend.`;\n str += `
\n You need
${Beautify(cookiesToNext)} more cookies for the next level.
\n ${\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.TooltipAscendButton\n ? `
It takes ${CacheTimeTillNextPrestige} to reach the next level and you were making ${Beautify(\n CacheHCPerSecond,\n 2,\n )} chips on average in the last 5 seconds.
`\n : ''\n }`;\n l('ascendTooltip').innerHTML = str;\n}\n","import InitCache from '../Cache/CacheInit';\nimport { CacheStatsCookies } from '../Cache/Stats/Stats';\nimport { VersionMajor, VersionMinor } from '../Data/Moddata';\nimport CreateUpgradeBar from '../Disp/BuildingsUpgrades/UpgradeBar';\nimport { CreateBotBar } from '../Disp/InfoBars/BottomBar';\nimport { CreateTimerBar } from '../Disp/InfoBars/TimerBar';\nimport CreateSectionHideButtons from '../Disp/Initialization/CreateSectionHideButtons';\nimport CreateWrinklerButtons from '../Disp/Initialization/CreateWrinklerButton';\nimport CreateCssArea from '../Disp/Initialization/CssArea';\nimport UpdateBuildingUpgradeStyle from '../Disp/Initialization/UpdateBuildingUpgradeStyle';\nimport { CreateFavicon } from '../Disp/TabTitle/FavIcon';\nimport { CreateSimpleTooltip } from '../Disp/Tooltips/Tooltip';\nimport { CMLastAscendState, TooltipText } from '../Disp/VariablesAndData'; // eslint-disable-line no-unused-vars\nimport InitData from '../Sim/InitializeData/InitData';\nimport ReplaceNativeGrimoire from './ReplaceGameElements/NativeGrimoire';\nimport ReplaceTooltips from './ReplaceGameElements/Tooltips';\nimport ReplaceNative from './ReplaceGameFunctions/ReplaceNative';\nimport { LastModCount } from './VariablesAndData'; // eslint-disable-line no-unused-vars\nimport AddWrinklerAreaDetect from './WrinklerArea/AddDetectArea';\nimport createBuildingLockButtons from '../Disp/buildingTiles/createBuildingLockButtons';\n// import createMenuInfo from '../Disp/MenuSections/createMenuInfo';\nimport createMenuOptions from '../Disp/MenuSections/createMenuOptions';\n\n/**\n * Initialization loop of Cookie Monster\n */\nexport default function InitializeCookieMonster() {\n // Create global data object\n window.CookieMonsterData = {};\n\n // Register listeners in Cookie Monster Mod Framework\n // Commented because Framework is currently broken\n // Game.mods.cookieMonsterFramework.listeners.infoMenu.push(createMenuInfo);\n Game.mods.cookieMonsterFramework.listeners.optionsMenu.push(createMenuOptions);\n\n InitData();\n CacheStatsCookies();\n InitCache();\n\n // Stored to check if we need to re-initiliaze data\n LastModCount = Object.keys(Game.mods).length;\n\n // Creating visual elements\n CreateCssArea();\n CreateBotBar();\n CreateTimerBar();\n CreateUpgradeBar();\n CreateSectionHideButtons();\n CreateFavicon();\n Object.keys(TooltipText).forEach((i) => {\n CreateSimpleTooltip(TooltipText[i][0], TooltipText[i][1], TooltipText[i][2]);\n });\n CreateWrinklerButtons();\n UpdateBuildingUpgradeStyle();\n createBuildingLockButtons();\n\n ReplaceTooltips();\n AddWrinklerAreaDetect();\n\n // Replace native functions\n ReplaceNative();\n ReplaceNativeGrimoire();\n Game.CalculateGains();\n\n CMLastAscendState = Game.OnAscend;\n\n if (Game.prefs.popups)\n Game.Popup(`Cookie Monster version ${VersionMajor}.${VersionMinor} loaded!`);\n else Game.Notify(`Cookie Monster version ${VersionMajor}.${VersionMinor} loaded!`, '', '', 1, 1);\n\n Game.Win('Third-party');\n}\n","import { DispCSS } from '../VariablesAndData';\n\n/**\n * This function creates a CSS style that stores certain standard CSS classes used by CookieMonster\n\n */\nexport default function CreateCssArea() {\n DispCSS = document.createElement('style');\n DispCSS.type = 'text/css';\n DispCSS.id = 'CMCSS';\n\n document.head.appendChild(DispCSS);\n}\n","import {\n ColourBackPre,\n ColourBlue,\n ColourGray,\n ColourGreen,\n ColourOrange,\n ColourPurple,\n ColourRed,\n ColourTextPre,\n ColourYellow,\n} from '../VariablesAndData';\n\n/**\n * This function creates the legend for the upgrade bar\n * @returns\t{object}\tlegend\tThe legend-object to be added\n */\nfunction CreateUpgradeBarLegend() {\n const legend = document.createElement('div');\n legend.style.minWidth = '330px';\n legend.style.marginBottom = '4px';\n const title = document.createElement('div');\n title.className = 'name';\n title.style.marginBottom = '4px';\n title.textContent = 'Legend';\n legend.appendChild(title);\n\n const legendLine = function (colour, text) {\n const div = document.createElement('div');\n div.style.verticalAlign = 'middle';\n const span = document.createElement('span');\n span.className = ColourBackPre + colour;\n span.style.display = 'inline-block';\n span.style.height = '10px';\n span.style.width = '10px';\n span.style.marginRight = '4px';\n div.appendChild(span);\n div.appendChild(document.createTextNode(text));\n return div;\n };\n\n legend.appendChild(legendLine(ColourBlue, 'Better than the best PP of a building option'));\n legend.appendChild(legendLine(ColourGreen, 'Same as the best PP building option'));\n legend.appendChild(legendLine(ColourYellow, 'Within the top 10 of PP for buildings'));\n legend.appendChild(legendLine(ColourOrange, 'Within the top 20 of PP for buildings'));\n legend.appendChild(legendLine(ColourRed, 'Within the top 30 of PP for buildings'));\n legend.appendChild(legendLine(ColourPurple, 'Outside of the top 30 of PP for buildings'));\n legend.appendChild(legendLine(ColourGray, 'Negative or infinity PP'));\n return legend;\n}\n\n/**\n * This function creates the upgrade bar above the upgrade-section in the right section of the screen\n */\nexport default function CreateUpgradeBar() {\n const UpgradeBar = document.createElement('div');\n UpgradeBar.id = 'CMUpgradeBar';\n UpgradeBar.style.width = '100%';\n UpgradeBar.style.backgroundColor = 'black';\n UpgradeBar.style.textAlign = 'center';\n UpgradeBar.style.fontWeight = 'bold';\n UpgradeBar.style.display = 'none';\n UpgradeBar.style.zIndex = '21';\n UpgradeBar.onmouseout = function () {\n Game.tooltip.hide();\n };\n\n const placeholder = document.createElement('div');\n placeholder.appendChild(CreateUpgradeBarLegend());\n UpgradeBar.onmouseover = function () {\n Game.tooltip.draw(this, escape(placeholder.innerHTML), 'store');\n };\n\n const upgradeNumber = function (id, colour) {\n const span = document.createElement('span');\n span.id = id;\n span.className = ColourTextPre + colour;\n span.style.width = '14.28571428571429%';\n span.style.display = 'inline-block';\n span.textContent = '0';\n return span;\n };\n UpgradeBar.appendChild(upgradeNumber('CMUpgradeBarBlue', ColourBlue));\n UpgradeBar.appendChild(upgradeNumber('CMUpgradeBarGreen', ColourGreen));\n UpgradeBar.appendChild(upgradeNumber('CMUpgradeBarYellow', ColourYellow));\n UpgradeBar.appendChild(upgradeNumber('CMUpgradeBarOrange', ColourOrange));\n UpgradeBar.appendChild(upgradeNumber('CMUpgradeBarRed', ColourRed));\n UpgradeBar.appendChild(upgradeNumber('CMUpgradeBarPurple', ColourPurple));\n UpgradeBar.appendChild(upgradeNumber('CMUpgradeBarGray', ColourGray));\n\n l('upgrades').parentNode.insertBefore(UpgradeBar, l('upgrades').parentNode.childNodes[3]);\n}\n","/**\n * This function creates two objects at the top of the right column that allowing hiding the upgrade and building section\n */\nexport default function CreateSectionHideButtons() {\n const div = document.createElement('div');\n div.id = 'CMSectionHidButtons';\n div.style.textAlign = 'center';\n const a = document.createElement('a');\n a.className = 'option';\n a.onclick = function () {\n if (l('upgrades').style.display === 'flex') {\n l('upgrades').style.display = 'none';\n l('toggleUpgrades').style.display = 'none';\n l('techUpgrades').style.display = 'none';\n l('vaultUpgrades').style.display = 'none';\n } else {\n l('upgrades').style.display = 'flex';\n if (l('toggleUpgrades').children.length !== 0) l('toggleUpgrades').style.display = 'block';\n if (l('techUpgrades').children.length !== 0) l('techUpgrades').style.display = 'block';\n if (l('vaultUpgrades').children.length !== 0) l('vaultUpgrades').style.display = 'block';\n }\n };\n a.textContent = 'Hide/Show Upgrades';\n div.appendChild(a);\n const b = document.createElement('a');\n b.className = 'option';\n b.onclick = function () {\n if (l('products').style.display === 'grid') l('products').style.display = 'none';\n else l('products').style.display = 'grid';\n };\n b.textContent = 'Hide/Show Buildings';\n div.appendChild(b);\n l('store').insertBefore(div, l('store').childNodes[2]);\n}\n","import { CacheWrinklersFattest } from '../../Cache/VariablesAndData';\nimport PopAllNormalWrinklers from '../HelperFunctions/PopWrinklers';\nimport { CreateTooltip } from '../Tooltips/Tooltip';\n\n/**\n * This function creates two objects at the bottom of the left column that allowing popping of wrinklers\n */\nexport default function CreateWrinklerButtons() {\n const popAllA = document.createElement('a');\n popAllA.id = 'PopAllNormalWrinklerButton';\n popAllA.textContent = 'Pop All Normal';\n popAllA.className = 'option';\n popAllA.onclick = function () {\n PopAllNormalWrinklers();\n };\n popAllA.onmouseout = function () {\n Game.tooltip.shouldHide = 1;\n };\n popAllA.onmouseover = function () {\n Game.tooltip.dynamic = 1;\n Game.tooltip.draw(this, () => CreateTooltip('wb', 'PopAllNormal'), 'this');\n Game.tooltip.wobble();\n };\n l('sectionLeftExtra').children[0].append(popAllA);\n const popFattestA = document.createElement('a');\n popFattestA.id = 'PopFattestWrinklerButton';\n popFattestA.textContent = 'Pop Single Fattest';\n popFattestA.className = 'option';\n popFattestA.onclick = function () {\n if (CacheWrinklersFattest[1] !== null) Game.wrinklers[CacheWrinklersFattest[1]].hp = 0;\n };\n popFattestA.onmouseout = function () {\n Game.tooltip.shouldHide = 1;\n };\n popFattestA.onmouseover = function () {\n Game.tooltip.dynamic = 1;\n Game.tooltip.draw(this, () => CreateTooltip('wb', 'PopFattest'), 'this');\n Game.tooltip.wobble();\n };\n l('sectionLeftExtra').children[0].append(popFattestA);\n}\n","/**\n * This function updates the style of the building and upgrade sections to make these sortable\n */\nexport default function UpdateBuildingUpgradeStyle() {\n l('products').style.display = 'grid';\n l('storeBulk').style.gridRow = '1/1';\n\n l('upgrades').style.display = 'flex';\n l('upgrades').style['flex-wrap'] = 'wrap';\n}\n","import toggleBuildingLock from './toggleBuildingLock';\n\n/**\n * This function adds a lock button to the \"building view\" in the middle section\n */\nexport default function createBuildingLockButtons() {\n Object.keys(l('rows').children).forEach((index) => {\n const productButtons = l('rows').children[index].children[1];\n const button = document.createElement('div');\n button.id = `productLock${Number(index) + 1}`;\n button.className = 'productButton';\n button.innerHTML = 'Lock';\n button.onclick = function () {\n toggleBuildingLock(Number(index) + 1);\n };\n productButtons.appendChild(button);\n });\n}\n","/**\n * This function toggle the locked state of a building\n * @param\t{number}\tindex\tIndex of the row to change\n */\nexport default function toggleBuildingLock(index) {\n if (l(`productLock${index}`).innerHTML === 'Lock') {\n // Add to storing array\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.lockedMinigames.push(\n index.toString(),\n );\n\n // Update styles\n l(`row${index}`).style.pointerEvents = 'none';\n l(`row${index}`).style.opacity = '0.4';\n l(`productLock${index}`).innerHTML = 'Unlock';\n l(`productLock${index}`).style.pointerEvents = 'auto';\n } else {\n // Remove from storing array\n if (\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.lockedMinigames.includes(\n index.toString(),\n )\n ) {\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.lockedMinigames =\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.lockedMinigames.filter(\n (value) => value !== index.toString(),\n );\n }\n\n // Update styles\n l(`productLock${index}`).innerHTML = 'Lock';\n l(`row${index}`).style.pointerEvents = 'auto';\n l(`row${index}`).style.opacity = '1';\n }\n}\n","/** Functions related to replacing tooltips */\n\nimport { CreateTooltip } from '../../Disp/Tooltips/Tooltip';\nimport { LoadMinigames, TooltipBuildBackup, TooltipLumpBackup } from '../VariablesAndData'; // eslint-disable-line no-unused-vars\nimport ReplaceNativeGrimoire from './NativeGrimoire';\nimport ReplaceTooltipGrimoire from './TooltipGrimoire';\n\n/**\n * This function replaces the original .onmouseover functions of buildings\n */\nfunction ReplaceTooltipBuild() {\n Object.keys(Game.Objects).forEach((i) => {\n const me = Game.Objects[i];\n if (l(`product${me.id}`).onmouseover !== null) {\n TooltipBuildBackup[i] = l(`product${me.id}`).onmouseover;\n l(`product${me.id}`).onmouseover = function () {\n Game.tooltip.dynamic = 1;\n Game.tooltip.draw(this, () => CreateTooltip('b', `${i}`), 'store');\n Game.tooltip.wobble();\n };\n }\n });\n}\n\n/**\n * This function replaces the original .onmouseover functions of sugar lumps\n */\nfunction ReplaceTooltipLump() {\n if (Game.canLumps()) {\n TooltipLumpBackup = l('lumps').onmouseover;\n l('lumps').onmouseover = function () {\n Game.tooltip.dynamic = 1;\n Game.tooltip.draw(this, () => CreateTooltip('s', 'Lump'), 'this');\n Game.tooltip.wobble();\n };\n }\n}\n\n/**\n * This function replaces the original .onmouseover functions of all garden plants\n */\nfunction ReplaceTooltipGarden() {\n if (Game.Objects.Farm.minigameLoaded) {\n l('gardenTool-1').onmouseover = function () {\n Game.tooltip.dynamic = 1;\n Game.tooltip.draw(this, () => CreateTooltip('ha', 'HarvestAllButton'), 'this');\n Game.tooltip.wobble();\n };\n Array.from(l('gardenPlot').children).forEach((child) => {\n const coords = child.id.slice(-3);\n // eslint-disable-next-line no-param-reassign\n child.onmouseover = function () {\n Game.tooltip.dynamic = 1;\n Game.tooltip.draw(this, () => CreateTooltip('p', [`${coords[0]}`, `${coords[2]}`]), 'this');\n Game.tooltip.wobble();\n };\n });\n }\n}\n\nfunction ReplaceTooltipPantheon() {\n if (Game.Objects.Temple.minigameLoaded) {\n for (let i = 0; i < 11; i += 1) {\n l(`templeGod${i}`).onmouseover = function () {\n Game.tooltip.dynamic = 1;\n Game.tooltip.draw(this, () => CreateTooltip('pag', i), 'this');\n Game.tooltip.wobble();\n };\n }\n for (let i = 0; i < 3; i += 1) {\n l(`templeSlot${i}`).onmouseover = function () {\n Game.tooltip.dynamic = 1;\n Game.tooltip.draw(\n this,\n () => CreateTooltip('pas', [i, Game.Objects.Temple.minigame.slot[i]]),\n 'this',\n );\n Game.tooltip.wobble();\n };\n }\n }\n}\n\n/**\n * This function call all functions that replace Game-tooltips with Cookie Monster enhanced tooltips\n */\nexport default function ReplaceTooltips() {\n ReplaceTooltipBuild();\n ReplaceTooltipLump();\n\n // Replace Tooltips of Minigames. Nesting it in LoadMinigames makes sure to replace them even if\n // they were not loaded initially\n // eslint-disable-next-line prefer-destructuring\n LoadMinigames = Game.LoadMinigames;\n Game.LoadMinigames = function () {\n LoadMinigames();\n ReplaceTooltipGarden();\n ReplaceTooltipGrimoire();\n ReplaceTooltipPantheon();\n ReplaceNativeGrimoire();\n };\n Game.LoadMinigames();\n}\n","import { TooltipWrinklerArea, TooltipWrinklerBeingShown } from '../../Disp/VariablesAndData'; // eslint-disable-line no-unused-vars\n\n/**\n * This function creates .onmouseover/out events that determine if the mouse is hovering-over a Wrinkler\n * As wrinklers are not appended to the DOM we us a different system than for other tooltips\n */\nexport default function AddWrinklerAreaDetect() {\n l('backgroundLeftCanvas').onmouseover = function () {\n TooltipWrinklerArea = 1;\n };\n l('backgroundLeftCanvas').onmouseout = function () {\n TooltipWrinklerArea = 0;\n Game.tooltip.hide();\n Object.keys(Game.wrinklers).forEach((i) => {\n TooltipWrinklerBeingShown[i] = 0;\n });\n };\n}\n","import CalculateGains from '../Calculations/CalculateGains';\nimport CheckOtherAchiev from '../Calculations/CheckOtherAchiev';\nimport CopyData from '../SimulationData/CopyData';\nimport { SimAchievementsOwned, SimCookiesPs, SimGod1, SimGod2, SimGod3 } from '../VariablesAndData'; // eslint-disable-line no-unused-vars\n\n/**\n * This functions calculates the cps and cost of changing a Dragon Aura\n * It is called by CM.Disp.AddAuraInfo()\n * @param\t{number}\tgod\t\tThe number of the slot to be swapped in\n * @param\t{number slot\tThe slot the god will go to\n * @returns {number} \tCM.Sim.cookiesPs - Game.cookiesPs The bonus cps and the price of the change\n */\nexport default function CalculateChangeGod(god, slot) {\n if (!Game.Objects.Temple.minigameLoaded) return 0;\n CopyData();\n const { minigame } = Game.Objects.Temple;\n const CurrentSlot = minigame.godsById[god].slot;\n if (CurrentSlot === '0') SimGod1 = minigame.slot[slot];\n else if (CurrentSlot === '1') SimGod2 = minigame.slot[slot];\n else if (CurrentSlot === '2') SimGod3 = minigame.slot[slot];\n /* eslint-disable no-unused-vars */\n if (slot === 0) SimGod1 = god;\n else if (slot === 1) SimGod2 = god;\n else if (slot === 2) SimGod3 = god;\n /* eslint-enable no-unused-vars */\n\n const lastAchievementsOwned = SimAchievementsOwned;\n CalculateGains();\n\n CheckOtherAchiev();\n if (lastAchievementsOwned !== SimAchievementsOwned) {\n CalculateGains();\n }\n return SimCookiesPs - Game.cookiesPs;\n}\n","import InitCache from '../Cache/CacheInit';\nimport LoopCache from '../Cache/CacheLoop';\nimport CacheNoGoldSwitchCPS from '../Cache/CPS/NoGoldSwitchCPS';\nimport CacheSellAllForChoEgg from '../Cache/CPS/SellChoEgg';\nimport CacheDragonCost from '../Cache/Dragon/Dragon';\nimport CachePantheonGods from '../Cache/PantheonGods/CacheGods';\nimport { CacheBuildingsPrices, CacheIncome } from '../Cache/PriceAndIncome/PriceAndIncome';\nimport { CacheChain } from '../Cache/Stats/ChainCookies';\nimport CacheAllMissingUpgrades from '../Cache/Stats/MissingUpgrades';\nimport CacheSeasonSpec from '../Cache/Stats/Reindeer';\nimport { CacheGoldenAndWrathCookiesMults, CacheStatsCookies } from '../Cache/Stats/Stats';\nimport AllAmountTillNextAchievement from '../Cache/TillNextAchievement/AllAmountTillNextAchievement';\nimport { CacheDoRemakeBuildPrices, CacheHadBuildAura } from '../Cache/VariablesAndData';\nimport UpdateAscendState from '../Disp/HelperFunctions/UpdateAscendState';\nimport { LastAscendState } from '../Disp/VariablesAndData';\nimport InitData from '../Sim/InitializeData/InitData';\nimport { SimDoSims } from '../Sim/VariablesAndData';\nimport CheckGardenTick from './CheckStates/Garden';\nimport CheckGoldenCookie from './CheckStates/GoldenCookie';\nimport CheckMagicMeter from './CheckStates/Grimoire';\nimport CheckSeasonPopup from './CheckStates/Season';\nimport CheckTickerFortune from './CheckStates/Ticker';\nimport CheckWrinklerCount from './CheckStates/Wrinkler';\nimport { LastModCount } from './VariablesAndData';\n\n/**\n * Main loop of Cookie Monster\n * CM.init registers it to the \"logic\" hook provided by the modding api\n */\nexport default function CMLoopHook() {\n if (LastAscendState !== Game.OnAscend) {\n LastAscendState = Game.OnAscend;\n UpdateAscendState();\n }\n if (!Game.OnAscend && Game.AscendTimer === 0) {\n // Check if any other mods have been loaded\n if (LastModCount !== Object.keys(Game.mods).length) {\n InitData();\n InitCache();\n LastModCount = Object.keys(Game.mods).length;\n }\n\n // CM.Sim.DoSims is set whenever CPS has changed\n if (SimDoSims) {\n AllAmountTillNextAchievement(true);\n CacheIncome();\n\n CacheNoGoldSwitchCPS(); // Needed first\n CacheGoldenAndWrathCookiesMults();\n CacheStatsCookies();\n CacheAllMissingUpgrades();\n CacheChain();\n CacheDragonCost();\n CachePantheonGods();\n\n CacheSeasonSpec();\n CacheSellAllForChoEgg();\n\n SimDoSims = 0;\n }\n\n // Check for aura change to recalculate buildings prices\n const hasBuildAura = Game.auraMult('Fierce Hoarder') > 0;\n if (!CacheHadBuildAura && hasBuildAura) {\n CacheHadBuildAura = true;\n CacheDoRemakeBuildPrices = 1;\n } else if (CacheHadBuildAura && !hasBuildAura) {\n CacheHadBuildAura = false;\n CacheDoRemakeBuildPrices = 1;\n }\n\n if (CacheDoRemakeBuildPrices) {\n CacheBuildingsPrices();\n CacheDoRemakeBuildPrices = 0;\n }\n\n LoopCache();\n\n // Check all changing minigames and game-states\n CheckTickerFortune();\n CheckSeasonPopup();\n CheckGardenTick();\n CheckMagicMeter();\n CheckWrinklerCount();\n }\n // To remove Timers when ascending\n CheckGoldenCookie();\n}\n","import { ToggleTimerBar } from '../../Config/SpecificToggles';\nimport ToggleBotBar from '../../Config/Toggles/ToggleBotBar';\n\nimport UpdateBackground from './UpdateBackground';\n\n/**\n * This function disables and shows the bars created by CookieMonster when the game is \"ascending\"\n * It is called by CM.Disp.Draw()\n */\nexport default function UpdateAscendState() {\n if (Game.OnAscend) {\n l('game').style.bottom = '0px';\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.BotBar === 1)\n l('CMBotBar').style.display = 'none';\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.TimerBar === 1)\n l('CMTimerBar').style.display = 'none';\n } else {\n ToggleBotBar();\n ToggleTimerBar();\n }\n UpdateBackground();\n}\n","import CalcNoGoldSwitchCPS from '../../Sim/Calculations/NoGoldenSwitchCalc';\nimport FillCMDCache from '../FillCMDCache';\nimport { CacheNoGoldSwitchCookiesPS } from '../VariablesAndData';\n\n/**\n * This function calculates CPS without the Golden Switch as it might be needed in other functions\n * If so it CM.Sim.Win()'s them and the caller function will know to recall CM.Sim.CalculateGains()\n * It is called at the end of any functions that simulates certain behaviour\n */\nexport default function CacheNoGoldSwitchCPS() {\n if (Game.Has('Golden switch [off]')) {\n CacheNoGoldSwitchCookiesPS = CalcNoGoldSwitchCPS();\n } else CacheNoGoldSwitchCookiesPS = Game.cookiesPs;\n\n FillCMDCache({ CacheNoGoldSwitchCookiesPS });\n}\n","import CopyData from '../SimulationData/CopyData';\nimport { SimCookiesPs, SimUpgrades } from '../VariablesAndData';\nimport CalculateGains from './CalculateGains';\n\n/**\n * This function calculates CPS without the Golden Switch\n * It is called by CM.Cache.NoGoldSwitchCPS()\n */\nexport default function CalcNoGoldSwitchCPS() {\n CopyData();\n SimUpgrades['Golden switch [off]'].bought = 0;\n CalculateGains();\n return SimCookiesPs;\n}\n","import CalculateChangeGod from '../../Sim/SimulationEvents/GodChange';\nimport FillCMDCache from '../FillCMDCache';\nimport { CacheGods } from '../VariablesAndData';\n\n/**\n * This functions caches the cps effect of each God in slot 1, 2 or 3\n */\nexport default function CachePantheonGods() {\n for (let god = 0; god < 11; god += 1) {\n for (let slot = 0; slot < 3; slot += 1) {\n CacheGods[god][slot] = CalculateChangeGod(god, slot);\n }\n }\n\n FillCMDCache({ CacheGods });\n}\n","import SellBuildingsForChoEgg from '../../Sim/SimulationEvents/SellBuildingForChoEgg';\nimport FillCMDCache from '../FillCMDCache';\nimport { CacheSellForChoEgg } from '../VariablesAndData';\n\n/**\n * This functions caches the reward for selling the Chocolate egg\n * It is called by CM.Main.Loop()\n * @global\t{number}\tCM.Cache.SellForChoEgg\tTotal cookies to be gained from selling Chocolate egg\n */\nexport default function CacheSellAllForChoEgg() {\n let sellTotal = 0;\n // Compute cookies earned by selling stock market goods\n if (Game.Objects.Bank.minigameLoaded) {\n const marketGoods = Game.Objects.Bank.minigame.goods;\n let goodsVal = 0;\n Object.keys(marketGoods).forEach((i) => {\n const marketGood = marketGoods[i];\n goodsVal += marketGood.stock * marketGood.val;\n });\n sellTotal += goodsVal * Game.cookiesPsRawHighest;\n }\n // Compute cookies earned by selling all buildings with optimal auras (ES + RB)\n sellTotal += SellBuildingsForChoEgg();\n CacheSellForChoEgg = sellTotal;\n\n FillCMDCache({ CacheSellForChoEgg });\n}\n","import CopyData from '../SimulationData/CopyData';\nimport { SimBuildingsOwned, SimDragonAura, SimDragonAura2, SimObjects } from '../VariablesAndData'; // eslint-disable-line no-unused-vars\nimport BuildingSell from './SellBuilding';\n\n/**\n * This function calculates the maximum cookies obtained from selling buildings just before purchasing the chocolate egg\n * It is called by CM.Cache.CacheSellForChoEgg()\n * @returns\t{number}\tsellTotal\tThe maximum cookies to be earned\n */\nexport default function SellBuildingsForChoEgg() {\n let sellTotal = 0;\n\n CopyData();\n\n // Change auras to Earth Shatterer + Reality bending to optimize money made by selling\n let buildingsToSacrifice = 2;\n if (SimDragonAura === 5 || SimDragonAura === 18) {\n buildingsToSacrifice -= 1;\n }\n if (SimDragonAura2 === 5 || SimDragonAura2 === 18) {\n buildingsToSacrifice -= 1;\n }\n SimDragonAura = 5;\n SimDragonAura2 = 18;\n\n // Sacrifice highest buildings for the aura switch\n for (let i = 0; i < buildingsToSacrifice; ++i) {\n let highestBuilding = 'Cursor';\n Object.keys(SimObjects).forEach((j) => {\n if (SimObjects[j].amount > 0) {\n highestBuilding = j;\n }\n });\n SimObjects[highestBuilding].amount -= 1;\n SimBuildingsOwned -= 1;\n }\n\n // Get money made by selling all remaining buildings\n Object.keys(SimObjects).forEach((i) => {\n const me = SimObjects[i];\n sellTotal += BuildingSell(\n Game.Objects[me.name],\n Game.Objects[i].basePrice,\n me.amount,\n Game.Objects[i].free,\n me.amount,\n );\n });\n\n return sellTotal;\n}\n","import FormatTime from '../Disp/BeautifyAndFormatting/FormatTime';\nimport GetCPS from '../Disp/HelperFunctions/GetCPS';\nimport CacheAvgCPS from './CPS/CPS';\nimport CacheCurrWrinklerCPS from './CPS/CurrWrinklerCPS';\nimport CachePP from './PP/PP';\nimport CacheHeavenlyChipsPS from './Stats/HeavenlyChips';\nimport AllAmountTillNextAchievement from './TillNextAchievement/AllAmountTillNextAchievement';\nimport { CacheTimeTillNextPrestige } from './VariablesAndData'; // eslint-disable-line no-unused-vars\nimport CacheWrinklers from './Wrinklers/Wrinklers';\n\n/**\n * This functions caches variables that are needed every loop\n * @global\t{string}\tCM.Cache.TimeTillNextPrestige\tTime requried till next prestige level\n */\nexport default function LoopCache() {\n // Update Wrinkler Bank\n CacheWrinklers();\n\n CachePP();\n AllAmountTillNextAchievement(false);\n CacheCurrWrinklerCPS();\n CacheAvgCPS();\n CacheHeavenlyChipsPS();\n\n const cookiesToNext =\n Game.HowManyCookiesReset(\n Math.floor(Game.HowMuchPrestige(Game.cookiesReset + Game.cookiesEarned)) + 1,\n ) -\n (Game.cookiesEarned + Game.cookiesReset);\n CacheTimeTillNextPrestige = FormatTime(cookiesToNext / GetCPS());\n}\n","import { SimObjects } from '../../Sim/VariablesAndData';\nimport FillCMDCache from '../FillCMDCache';\nimport { CacheCurrWrinklerCount, CacheCurrWrinklerCPSMult } from '../VariablesAndData';\n\n/**\n * This functions caches the current Wrinkler CPS multiplier\n * @global\t{number}\tCM.Cache.CurrWrinklerCount\t\tCurrent number of wrinklers\n * @global\t{number}\tCM.Cache.CurrWrinklerCPSMult\tCurrent multiplier of CPS because of wrinklers (excluding their negative sucking effect)\n */\nexport default function CacheCurrWrinklerCPS() {\n CacheCurrWrinklerCPSMult = 0;\n let count = 0;\n Object.keys(Game.wrinklers).forEach((i) => {\n if (Game.wrinklers[i].phase === 2) count += 1;\n });\n let godMult = 1;\n if (SimObjects.Temple.minigameLoaded) {\n const godLvl = Game.hasGod('scorn');\n if (godLvl === 1) godMult *= 1.15;\n else if (godLvl === 2) godMult *= 1.1;\n else if (godLvl === 3) godMult *= 1.05;\n }\n CacheCurrWrinklerCount = count;\n CacheCurrWrinklerCPSMult =\n count *\n (count * 0.05 * 1.1) *\n (Game.Has('Sacrilegious corruption') * 0.05 + 1) *\n (Game.Has('Wrinklerspawn') * 0.05 + 1) *\n godMult;\n\n FillCMDCache({ CacheCurrWrinklerCount, CacheCurrWrinklerCPSMult });\n}\n","import { notificationsFunctions as nF } from '@cookiemonsterteam/cookiemonsterframework/src/index';\nimport { LastTickerFortuneState } from '../VariablesAndData';\n\n/**\n * This function checks if there is a fortune cookie on the ticker\n * It is called by CM.Main.Loop\n */\nexport default function CheckTickerFortune() {\n if (LastTickerFortuneState !== (Game.TickerEffect && Game.TickerEffect.type === 'fortune')) {\n LastTickerFortuneState = Game.TickerEffect && Game.TickerEffect.type === 'fortune';\n if (LastTickerFortuneState) {\n nF.createFlash('cookieMonsterMod', 3, 'FortuneFlash', false);\n nF.playCMSound(\n 'cookieMonsterMod',\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.FortuneSoundURL,\n 'FortuneSound',\n 'FortuneVolume',\n false,\n );\n nF.createNotification(\n 'cookieMonsterMod',\n 'FortuneNotification',\n 'Fortune Cookie found',\n 'A Fortune Cookie has appeared on the Ticker.',\n );\n }\n }\n}\n","import { notificationsFunctions as nF } from '@cookiemonsterteam/cookiemonsterframework/src/index';\nimport { CacheSeasonPopShimmer } from '../../Cache/VariablesAndData'; // eslint-disable-line no-unused-vars\nimport { LastSeasonPopupState } from '../VariablesAndData';\n\n/**\n * This function checks if there is reindeer that has spawned\n * It is called by CM.Main.Loop\n */\nexport default function CheckSeasonPopup() {\n if (LastSeasonPopupState !== Game.shimmerTypes.reindeer.spawned) {\n LastSeasonPopupState = Game.shimmerTypes.reindeer.spawned;\n Object.keys(Game.shimmers).forEach((i) => {\n if (Game.shimmers[i].spawnLead && Game.shimmers[i].type === 'reindeer') {\n CacheSeasonPopShimmer = Game.shimmers[i];\n }\n });\n nF.createFlash('cookieMonsterMod', 3, 'SeaFlash', false);\n nF.playCMSound(\n 'cookieMonsterMod',\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.SeaSoundURL,\n 'SeaSound',\n 'SeaVolume',\n false,\n );\n nF.createNotification(\n 'cookieMonsterMod',\n 'SeaNotification',\n 'Reindeer sighted!',\n 'A Reindeer has spawned. Click it now!',\n );\n }\n}\n","import { notificationsFunctions as nF } from '@cookiemonsterteam/cookiemonsterframework/src/index';\nimport { LastGardenNextStep } from '../VariablesAndData';\n\n/**\n * This function checks if a garden tick has happened\n */\nexport default function CheckGardenTick() {\n if (\n Game.Objects.Farm.minigameLoaded &&\n LastGardenNextStep !== Game.Objects.Farm.minigame.nextStep\n ) {\n if (LastGardenNextStep !== 0 && LastGardenNextStep < Date.now()) {\n nF.createFlash('cookieMonsterMod', 3, 'GardFlash', false);\n nF.playCMSound(\n 'cookieMonsterMod',\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.GardSoundURL,\n 'GardSound',\n 'GardVolume',\n false,\n );\n }\n LastGardenNextStep = Game.Objects.Farm.minigame.nextStep;\n }\n}\n","import { notificationsFunctions as nF } from '@cookiemonsterteam/cookiemonsterframework/src/index';\nimport { LastMagicBarFull } from '../VariablesAndData';\n\n/**\n * This function checks if the magic meter is full\n * It is called by CM.Main.Loop\n */\nexport default function CheckMagicMeter() {\n if (\n Game.Objects['Wizard tower'].minigameLoaded &&\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.GrimoireBar === 1\n ) {\n const { minigame } = Game.Objects['Wizard tower'];\n if (minigame.magic < minigame.magicM) LastMagicBarFull = false;\n else if (!LastMagicBarFull) {\n LastMagicBarFull = true;\n nF.createFlash('cookieMonsterMod', 3, 'MagicFlash', false);\n nF.playCMSound(\n 'cookieMonsterMod',\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.MagicSoundURL,\n 'MagicSound',\n 'MagicVolume',\n false,\n );\n nF.createNotification(\n 'cookieMonsterMod',\n 'MagicNotification',\n 'Magic Meter full',\n 'Your Magic Meter is full. Cast a spell!',\n );\n }\n }\n}\n","import { notificationsFunctions as nF } from '@cookiemonsterteam/cookiemonsterframework/src/index';\nimport { LastWrinklerCount } from '../VariablesAndData';\n\n/**\n * This function checks if any new Wrinklers have popped up\n * It is called by CM.Main.Loop\n */\nexport default function CheckWrinklerCount() {\n if (Game.elderWrath > 0) {\n let CurrentWrinklers = 0;\n Object.keys(Game.wrinklers).forEach((i) => {\n if (Game.wrinklers[i].phase === 2) CurrentWrinklers += 1;\n });\n if (CurrentWrinklers > LastWrinklerCount) {\n LastWrinklerCount = CurrentWrinklers;\n if (\n CurrentWrinklers === Game.getWrinklersMax() &&\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.WrinklerMaxFlash\n ) {\n nF.createFlash('cookieMonsterMod', 3, 'WrinklerMaxFlash', false);\n } else {\n nF.createFlash('cookieMonsterMod', 3, 'WrinklerFlash', false);\n }\n if (\n CurrentWrinklers === Game.getWrinklersMax() &&\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.WrinklerMaxSound\n ) {\n nF.playCMSound(\n 'cookieMonsterMod',\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.WrinklerMaxSoundURL,\n 'WrinklerMaxSound',\n 'WrinklerMaxVolume',\n false,\n );\n } else {\n nF.playCMSound(\n 'cookieMonsterMod',\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.WrinklerSoundURL,\n 'WrinklerSound',\n 'WrinklerVolume',\n false,\n );\n }\n if (\n CurrentWrinklers === Game.getWrinklersMax() &&\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.WrinklerMaxNotification\n ) {\n nF.createNotification(\n 'cookieMonsterMod',\n 'WrinklerMaxNotification',\n 'Maximum Wrinklers Reached',\n 'You have reached your maximum ammount of wrinklers',\n );\n } else {\n nF.createNotification(\n 'cookieMonsterMod',\n 'WrinklerNotification',\n 'A Wrinkler appeared',\n 'A new wrinkler has appeared',\n );\n }\n } else {\n LastWrinklerCount = CurrentWrinklers;\n }\n }\n}\n","import { notificationsFunctions as nF } from '@cookiemonsterteam/cookiemonsterframework/src/index';\nimport { CacheSpawnedGoldenShimmer, CacheGoldenShimmersByID } from '../../Cache/VariablesAndData'; // eslint-disable-line no-unused-vars\nimport CreateGCTimer from '../../Disp/GoldenCookieTimers/GoldenCookieTimers';\nimport { UpdateFavicon } from '../../Disp/TabTitle/FavIcon';\nimport { GCTimers } from '../../Disp/VariablesAndData';\nimport {\n CurrSpawnedGoldenCookieState,\n LastGoldenCookieState,\n LastSpawnedGoldenCookieState,\n} from '../VariablesAndData';\n\n/**\n * Auxilirary function that finds all currently spawned shimmers.\n * CM.Cache.spawnedGoldenShimmer stores the non-user spawned cookie to later determine data for the favicon and tab-title\n * It is called by CM.CM.Main.CheckGoldenCookie\n */\nfunction FindShimmer() {\n CurrSpawnedGoldenCookieState = 0;\n CacheGoldenShimmersByID = {};\n Object.keys(Game.shimmers).forEach((i) => {\n CacheGoldenShimmersByID[Game.shimmers[i].id] = Game.shimmers[i];\n if (Game.shimmers[i].spawnLead && Game.shimmers[i].type === 'golden') {\n CacheSpawnedGoldenShimmer = Game.shimmers[i];\n CurrSpawnedGoldenCookieState += 1;\n }\n });\n}\n\n/**\n * This function checks for changes in the amount of Golden Cookies\n * It is called by CM.Main.Loop\n */\nexport default function CheckGoldenCookie() {\n FindShimmer();\n Object.keys(GCTimers).forEach((i) => {\n if (typeof CacheGoldenShimmersByID[i] === 'undefined') {\n GCTimers[i].parentNode.removeChild(GCTimers[i]);\n delete GCTimers[i];\n }\n });\n if (LastGoldenCookieState !== Game.shimmerTypes.golden.n) {\n LastGoldenCookieState = Game.shimmerTypes.golden.n;\n if (LastGoldenCookieState) {\n if (LastSpawnedGoldenCookieState < CurrSpawnedGoldenCookieState) {\n nF.createFlash('cookieMonsterMod', 3, 'GCFlash', false);\n nF.playCMSound(\n 'cookieMonsterMod',\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.GCSoundURL,\n 'GCSound',\n 'GCVolume',\n false,\n );\n nF.createNotification(\n 'cookieMonsterMod',\n 'GCNotification',\n 'Golden Cookie Spawned',\n 'A Golden Cookie has spawned. Click it now!',\n );\n }\n\n Object.keys(Game.shimmers).forEach((i) => {\n if (typeof GCTimers[Game.shimmers[i].id] === 'undefined') {\n CreateGCTimer(Game.shimmers[i]);\n }\n });\n }\n UpdateFavicon();\n LastSpawnedGoldenCookieState = CurrSpawnedGoldenCookieState;\n if (CurrSpawnedGoldenCookieState === 0) CacheSpawnedGoldenShimmer = 0;\n } else if (\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.GCTimer === 1 &&\n LastGoldenCookieState\n ) {\n Object.keys(GCTimers).forEach((i) => {\n GCTimers[i].style.opacity = CacheGoldenShimmersByID[i].l.style.opacity;\n GCTimers[i].style.transform = CacheGoldenShimmersByID[i].l.style.transform;\n GCTimers[i].textContent = Math.ceil(CacheGoldenShimmersByID[i].life / Game.fps);\n });\n }\n}\n","/** Section: Functions related to the Golden Cookie Timers */\n\nimport { GCTimers } from '../VariablesAndData';\n\n/**\n * This function creates a new Golden Cookie Timer and appends it CM.Disp.GCTimers based on the id of the cookie\n * @param\t{object}\tcookie\tA Golden Cookie object\n */\nexport default function CreateGCTimer(cookie) {\n const GCTimer = document.createElement('div');\n GCTimer.id = `GCTimer${cookie.id}`;\n GCTimer.style.width = '96px';\n GCTimer.style.height = '96px';\n GCTimer.style.position = 'absolute';\n GCTimer.style.zIndex = '10000000001';\n GCTimer.style.textAlign = 'center';\n GCTimer.style.lineHeight = '96px';\n GCTimer.style.fontFamily = '\"Kavoon\", Georgia, serif';\n GCTimer.style.fontSize = '35px';\n GCTimer.style.cursor = 'pointer';\n GCTimer.style.display = 'block';\n GCTimer.style.pointerEvents = 'none';\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.GCTimer === 0)\n GCTimer.style.display = 'none';\n GCTimer.style.left = cookie.l.style.left;\n GCTimer.style.top = cookie.l.style.top;\n GCTimer.onclick = function () {\n cookie.pop();\n };\n GCTimer.onmouseover = function () {\n cookie.l.style.filter = 'brightness(125%) drop-shadow(0px 0px 3px rgba(255,255,255,1))'; // eslint-disable-line no-param-reassign\n cookie.l.style.webkitFilter = 'brightness(125%) drop-shadow(0px 0px 3px rgba(255,255,255,1))'; // eslint-disable-line no-param-reassign\n };\n GCTimer.onmouseout = function () {\n cookie.l.style.filter = ''; // eslint-disable-line no-param-reassign\n cookie.l.style.webkitFilter = ''; // eslint-disable-line no-param-reassign\n };\n\n GCTimers[cookie.id] = GCTimer;\n l('shimmers').appendChild(GCTimer);\n}\n","/** This includes all headers of Cookie Monster and their relevant data */\nconst headers = {\n Favourite: 1,\n Calculation: 1,\n Notation: 1,\n Colours: 1,\n BarsDisplay: 1,\n Tooltip: 1,\n Statistics: 1,\n Notification: 1,\n NotificationGeneral: 1,\n NotificationGC: 1,\n NotificationFC: 1,\n NotificationSea: 1,\n NotificationGard: 1,\n NotificationMagi: 1,\n NotificationWrink: 1,\n NotificationWrinkMax: 1,\n Miscellaneous: 1,\n Lucky: 1,\n Chain: 1,\n Spells: 1,\n Garden: 1,\n Prestige: 1,\n Wrink: 1,\n Sea: 1,\n Achievs: 1,\n Misc: 1,\n infoMenu: 1,\n optionsMenu: 1,\n};\n\nexport default headers;\n","import { saveAndLoadingFunctions } from '@cookiemonsterteam/cookiemonsterframework/src/index';\n\nimport headers from '../Data/headers';\nimport { VersionMajor, VersionMinor } from '../Data/Moddata';\nimport settings from '../Data/settings';\nimport UpdateColours from '../Disp/HelperFunctions/UpdateColours';\nimport CMLoopHook from '../Main/LoopHook';\nimport InitData from '../Sim/InitializeData/InitData';\n\n/**\n * This creates a load function to the CM object. Per Game code/comments:\n * \"do stuff with the string data you saved previously\"\n */\nexport default function load(str) {\n InitData();\n\n // Load saveData\n saveAndLoadingFunctions.loadMod('cookieMonsterMod', str, settings, headers, CMLoopHook);\n if (\n typeof Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.lockedMinigames ===\n 'undefined'\n ) {\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.lockedMinigames = [];\n }\n\n // Update display with colours and locking of minigames\n UpdateColours();\n for (\n let index = 0;\n index < Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.lockedMinigames.length;\n index++\n ) {\n const buildingIndex =\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.lockedMinigames[index];\n l(`row${buildingIndex}`).style.pointerEvents = 'none';\n l(`row${buildingIndex}`).style.opacity = '0.4';\n l(`productLock${buildingIndex}`).innerHTML = 'Unlock';\n l(`productLock${buildingIndex}`).style.pointerEvents = 'auto';\n }\n\n // Notify of update\n if (\n typeof Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.version !== 'undefined' &&\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.version !==\n `${VersionMajor}.${VersionMinor}`\n ) {\n if (Game.prefs.popups)\n Game.Popup(\n 'A new version of Cookie Monster has been loaded, check out the release notes in the info tab!',\n );\n else\n Game.Notify(\n 'A new version of Cookie Monster has been loaded, check out the release notes in the info tab!',\n '',\n '',\n 0,\n 1,\n );\n }\n}\n","import init from './InitSaveLoad/init';\nimport load from './InitSaveLoad/load';\nimport save from './InitSaveLoad/save';\n\nconst CM = {\n init,\n load,\n save,\n};\n\nif (typeof Steam !== 'undefined') {\n // Need to add a delay for steam\n setTimeout(function () {\n Game.registerMod('CookieMonster', CM);\n\n // Game.registerMod also calls CM.load() which calls the loop hook\n // Thus sounds normally play at start up as Season and Garden states are checked\n window.cookieMonsterFrameworkData.isInitializing = false;\n }, 2000);\n} else {\n Game.registerMod('CookieMonster', CM);\n window.cookieMonsterFrameworkData.isInitializing = false;\n}\n","import { initFunctions } from '@cookiemonsterteam/cookiemonsterframework';\nimport { VersionMajor, VersionMinor } from '../Data/Moddata';\nimport CMDrawHook from '../Disp/DrawHook';\nimport CMClickHook from '../Main/ClickHook';\nimport InitializeCookieMonster from '../Main/Initialization';\nimport CMLoopHook from '../Main/LoopHook';\nimport load from './load';\n\n/**\n * This creates a init function for the CM object. Per Game code/comments:\n * \"this function is called as soon as the mod is registered\n * declare hooks here\"\n * It starts the further initialization of CookieMonster and registers hooks\n */\nexport default function init() {\n let proceed = true;\n\n // Load Cookie Monster Mod Framework and register mod\n initFunctions.initModFramework();\n window.cookieMonsterFrameworkData.isInitializing = true;\n initFunctions.registerMod('cookieMonsterMod');\n\n if (Game.version !== Number(VersionMajor)) {\n // eslint-disable-next-line no-restricted-globals, no-alert\n proceed = confirm(\n `Cookie Monster version ${VersionMajor}.${VersionMinor} is meant for Game version ${VersionMajor}. Loading a different version may cause errors. Do you still want to load Cookie Monster?`,\n );\n }\n if (proceed) {\n InitializeCookieMonster();\n Game.registerHook('click', CMClickHook);\n Game.registerHook('draw', CMDrawHook);\n Game.registerHook('logic', CMLoopHook);\n\n // Load default settings if no previous saveData is found\n if (typeof Game.modSaveData.cookieMonsterMod === 'undefined') {\n load('{}');\n }\n }\n}\n","/** Data related directly to Cookie Monster */\n\nexport const VersionMajor = '2.048';\nexport const VersionMinor = '10';\n\n/** Information about Cookie Monster to be displayed in the info section */\nexport const ModDescription = `
Cookie Monster\n offers a wide range of tools and statistics to enhance your game experience.\n It is not a cheat interface – although it does offer helpers for golden cookies and such, everything can be toggled off at will to only leave how much information you want.\n Progess on new updates and all previous release notes can be found on the GitHub page linked above!\n Please also report any bugs you may find over there!\n `;\n\n/** Latest releasenotes of Cookie Monster to be displayed in the info section */\nexport const LatestReleaseNotes = `This update adds support for some parts of cookie clicker 2.048\n- added support for Dragon Aura 'Supreme Intellect' in the pantheon calculations\n- added support for new tiers of Shimmering veil\n- added support for unshackled upgrades\n- updated some simulator logic to more cloesly match updated cookie clicker logic\n- Bugfix: conjure backed goods tooltip used cached no gold switch raw cps instead of live cps\n- Bugfix: negative calculations due to glucosimium upgrades, kittens, unshackled, and achievements`;\n","import { VersionMajor, VersionMinor } from '../Data/Moddata';\n\n/**\n * This creates a save function to the CM object. Per Game code/comments:\n * \"use this to store persistent data associated with your mod\n * return 'a string to be saved';\"\n */\nexport default function save() {\n const saveObject = Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod;\n saveObject.version = `${VersionMajor}.${VersionMinor}`;\n return JSON.stringify(saveObject);\n}\n"],"names":["global","factory","module","exports","document","win","Error","window","this","BoxShadow","funcName","elm","jsc","jscolor","initialized","instances","readyQueue","register","addEventListener","pub","init","installBySelector","selector","rootNode","node","elms","querySelectorAll","matchClass","RegExp","lookupClass","i","length","dataOpts","m","undefined","type","toLowerCase","isColorAttrSupported","getDataAttr","className","match","targetElm","optsStr","console","warn","docsRef","opts","trim","parseOptionsStr","e","str","JSON","parse","eParse","looseJSON","Function","eEval","getInstances","inst","targetElement","push","createEl","tagName","el","createElement","setData","nodeOrSelector","sel","querySelector","isNode","val","Node","nodeType","nodeName","removeChildren","firstChild","removeChild","isTextInput","isButton","n","indexOf","isButtonEmpty","value","textContent","isPassiveEventSupported","supported","Object","defineProperty","get","removeEventListener","setAttribute","dataProp","obj","arguments","data","hasOwnProperty","prop","map","removeData","getData","setDefault","name","attrName","getAttribute","setDataAttr","_attachedGroupEvents","attachGroupEvent","groupName","evnt","func","detachGroupEvents","evt","preventDefault","returnValue","captureTarget","target","setCapture","_capturedTarget","releaseTarget","releaseCapture","triggerEvent","eventName","bubbles","cancelable","ev","Event","createEvent","initEvent","dispatchEvent","triggerInputEvent","eventKey","keys","code","keyCode","strList","replace","split","hasClass","classList","contains","addClass","classNames","add","removeClass","repl","remove","getCompStyle","getComputedStyle","currentStyle","setStyle","styles","important","reversible","priority","origStyle","setVal","style","setProperty","hexColor","r","g","b","Math","round","toString","substr","toUpperCase","hexaColor","a","rgbColor","rgbaColor","linearGradient","stdName","prefixes","helper","tryFunc","tryVal","background","getFuncName","Array","prototype","join","call","setBorderRadius","setBoxShadow","getElementPos","relativeToViewport","x","y","rect","getBoundingClientRect","left","top","viewPos","getViewPos","getElementSize","offsetWidth","offsetHeight","getAbsPointerPos","changedTouches","clientX","clientY","getRelPointerPos","targetRect","srcElement","doc","documentElement","pageXOffset","scrollLeft","clientLeft","pageYOffset","scrollTop","clientTop","getViewSize","innerWidth","clientWidth","innerHeight","clientHeight","RGB_HSV","min","v","max","h","HSV_RGB","s","u","floor","parseColorString","ret","rgba","format","parseInt","charAt","mR","mG","mB","mA","par","re","parseFloat","parsePaletteValue","mixed","vals","isArray","colors","color","containsTranparentColor","isAlphaFormat","scaleCanvasForHighDPR","canvas","dpr","devicePixelRatio","width","height","getContext","scale","genColorPreviewCanvas","separatorPos","specWidth","scaleForHighDPR","sepW","previewSeparator","sqSize","chessboardSize","sqColor1","chessboardColor1","sqColor2","chessboardColor2","cWidth","cHeight","ctx","fillStyle","fillRect","start","clearRect","lineWidth","beginPath","strokeStyle","moveTo","lineTo","stroke","genColorPreviewGradient","position","params","apply","redrawPosition","picker","owner","tp","vp","thisObj","fixed","c","ts","vs","pd","getPickerDims","ps","borderW","borderH","l","smartPosition","pp","positionValue","contractShadow","_drawPosition","vShadow","shadowBlur","wrap","boxS","shadow","shadowColor","w","controlBorderWidth","sliderSpace","getControlPadding","sliderSize","getSliderChannel","hasAlphaChannel","pal","getPaletteDims","padding","closeButton","buttonHeight","pW","pH","contentW","contentH","paddedW","paddedH","borderWidth","palette","cols","rows","cellW","cellH","sampleCount","_palette","paletteCols","ceil","paletteSpacing","paletteHeight","pointerBorderWidth","pointerThickness","getPadYChannel","mode","triggerCallback","callback","error","triggerGlobal","eventNames","trigger","_pointerMoveEvent","mouse","touch","_pointerEndEvent","_pointerOrigin","onDocumentKeyUp","tryHide","onWindowResize","onWindowScroll","onParentScroll","onDocumentMouseDown","showOnClick","disabled","show","onControlPointerStart","onPickerTouchStart","controlName","pointerType","registerDragEvents","offset","onDocumentPointerMove","onDocumentPointerEnd","parent","frameElement","ofs","abs","rel","channels","fromHSVA","setPad","setSld","setASld","onPaletteSampleClick","currentTarget","_setFormat","getFormat","paletteSetsAlpha","_paletteHasTransparency","fromRGBA","hideOnPaletteClick","hide","ofsX","ofsY","pointerAbs","xVal","yVal","fmt","createPadCanvas","draw","hGrad","createLinearGradient","addColorStop","vGrad","createSliderGradient","color1","color2","grad","createASliderGradient","hShadow","blur","spread","inset","flags","leaveValue","leaveAlpha","leavePreview","enumOpts","previewPosition","alphaChannel","deprecatedOpts","THIS","setOption","option","oldOpt","newOpt","setter","getOption","getter","drawPicker","_processParentElementsInDOM","box","boxB","pad","padB","padM","padCanvas","cross","crossBY","crossBX","crossLY","crossLX","sld","sldB","sldM","sldGrad","sldPtrS","sldPtrIB","sldPtrMB","sldPtrOB","asld","asldB","asldM","asldGrad","asldPtrS","asldPtrIB","asldPtrMB","asldPtrOB","btn","btnT","appendChild","passive","insetColors","outsetColor","p","displaySlider","displayAlphaSlider","pickerDims","crossOuterSize","crossSize","controlPadding","borderRadius","PI","clear","zIndex","border","borderColor","backgroundColor","opacity","controlBorderColor","cursor","instance","control","pointerBorderColor","pointerColor","overflow","display","sliderInnerSpace","innerHTML","chessboard","si","sampleColor","sampleCssColor","sc","sw","backgroundImage","toDataURL","backgroundRepeat","backgroundPosition","bottom","maxWidth","whiteSpace","buttonColor","font","textAlign","onmousedown","lineHeight","createTextNode","closeText","redrawPad","redrawSld","redrawASld","activeClassName","container","body","parentNode","yChannel","rgb1","rgb2","rgb","toHEXString","sldChannel","isPickerOwner","alpha","random","onChange","onInput","valueElement","alphaElement","previewElement","previewSize","previewPadding","required","hash","uppercase","forceStyle","hideOnLeave","minS","maxS","minV","maxV","minA","maxA","redraw","exposeColor","success","opt","channel","res","evs","callbackProp","isNaN","hsv","fromHSV","fromRGB","fromString","setPreviewElementBg","setValueElementValue","randomize","minH","maxH","toHEXAString","toRGBString","toRGBAString","toGrayscale","toCanvas","toBackground","isLight","_currentFormat","processValueInput","processAlphaInput","colorStr","alphaVal","setAlphaElementValue","backgrounds","image","size","repeat","origin","preview","bg","sty","right","_parentElementsProcessed","compStyle","set__palette","options","presetsArr","preset","slice","pres","presets","nonProperties","test","valueElementOrigEvents","oninput","oldVal","initValue","initAlpha","install","shift","ready","triggerNow","installByClassName","JSColor","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","__esModule","d","definition","key","o","enumerable","Setting","constructor","defaultValue","group","cookieMonsterPrompt","content","Game","promptWrapL","promptL","forEach","id","onclick","PlaySound","children","promptAnchorL","darkenL","focus","promptOn","UpdatePrompt","createFlash","modName","configName","forced","mods","cookieMonsterFramework","saveData","settings","cookieMonsterFrameworkData","isInitializing","setTimeout","fps","saveFramework","modSaveString","stringify","cookieClickerSaveString","b64_to_utf8","unescape","localStorage","getItem","pattern","modSave","newSaveString","setItem","escape","utf8_to_b64","toggleHeader","headerName","headers","playCMSound","url","sndConfig","volConfig","sound","Audio","GeneralSound","volume","play","toggleConfigVolume","addMenu","_","observer","disconnect","onMenu","menu","insertBefore","frameworkInfoDiv","titleDiv","buttonSpan","fontSize","verticalAlign","infoMenu","UpdateMenu","descriptionDiv","createFrameworkInfoMenuSection","listeners","addInfoMenuSection","observe","getElementById","attributes","childList","subtree","drawLoop","optionsMenu","loadMod","settingsData","headersData","logicLoop","saveDataObject","modSaveData","settingsObject","headersObject","favouriteSettings","createSaveDataObject","load","MutationObserver","WhiteScreen","pointerEvents","createFlashScreen","registerHook","save","initFunctions","registerMod","menuFunctions","createInfoListing","listingHTML","listingDiv","createOptionsListing","updateColoursFunc","refreshScaleFunc","div","FavouriteSettings","favourites","FavStar","includes","innerText","filter","ele","toggleFavouriteSetting","onmouseover","tooltip","onmouseout","createFavouriteStar","toggle","label","toggleConfig","desc","title","float","percent","slider","step","onchange","span","input","readOnly","inputPrompt","outerHTML","ClosePrompt","innerSpan","displayName","event","saveObject","altKey","ctrlKey","shiftKey","toggleConfigKeycode","createOptionsSubHeader","text","modDisplayName","menuName","modSectionDiv","notificationsFunctions","createNotification","message","visibilityState","Notification","badge","saveAndLoadingFunctions","settingClasses","super","ToggleWrinklerButtons","cookieMonsterMod","WrinklerButtons","elderWrath","CacheAverageCookiesFromClicks","CookiesDiff","WrinkDiff","WrinkFattestDiff","ChoEggDiff","ClicksDiff","HeavenlyChipsDiff","CacheLastCPSCheck","CacheLastCookies","CacheLastWrinkCookies","CacheLastWrinkFattestCookies","CacheLastClicks","CacheAverageGainBank","CacheAverageGainWrink","CacheAverageGainWrinkFattest","CacheAverageGainChoEgg","CacheAverageCPS","CacheLastHeavenlyCheck","CacheLastHeavenlyChips","CacheDoRemakeBuildPrices","CacheHadBuildAura","SimBuildingsOwned","SimUpgradesOwned","SimPledges","SimAchievementsOwned","SimHeavenlyPower","SimPrestige","SimDragonAura","SimDragonAura2","SimGod1","SimGod2","SimGod3","SimDoSims","SimEffs","SimCookiesPs","SimCookiesPsRaw","CacheDragonAura","CacheDragonAura2","CacheLastDragonLevel","CacheCostDragonUpgrade","CacheLucky","CacheLuckyReward","CacheLuckyWrathReward","CacheLuckyFrenzy","CacheLuckyRewardFrenzy","CacheLuckyWrathRewardFrenzy","CacheConjure","CacheConjureReward","CacheEdifice","CacheEdificeBuilding","CacheNoGoldSwitchCookiesPS","CacheDragonsFortuneMultAdjustment","CacheGoldenCookiesMult","CacheWrathCookiesMult","CacheHCPerSecond","CacheCentEgg","CacheSeaSpec","CacheLastChoEgg","CacheObjects1","CacheObjects10","CacheObjects100","CacheObjectsNextAchievement","CacheWrinklersTotal","CacheWrinklersNormal","CacheWrinklersFattest","CacheCurrWrinklerCPSMult","CacheCurrWrinklerCount","CacheUpgrades","CacheAverageClicks","CacheMissingUpgrades","CacheMissingUpgradesPrestige","CacheMissingUpgradesCookies","CacheChainRequired","CacheChainRequiredNext","CacheChainMaxReward","CacheChainWrathRequired","CacheChainWrathRequiredNext","CacheChainWrathMaxReward","CacheChainFrenzyRequired","CacheChainFrenzyRequiredNext","CacheChainFrenzyMaxReward","CacheChainFrenzyWrathRequired","CacheChainFrenzyWrathRequiredNext","CacheChainFrenzyWrathMaxReward","CacheRealCookiesEarned","CacheAvgCPSWithChoEgg","CacheSpawnedGoldenShimmer","CacheSeasonPopShimmer","CacheTimeTillNextPrestige","CacheMinPP","CacheMinPPBulk","CachePPArray","CacheGoldenShimmersByID","CacheSellForChoEgg","CacheGods","SimObjects","SimUpgrades","SimAchievements","SimAuraMult","what","dragonAuras","dragonLevel","dragonAurasBN","SimGetSellMultiplier","giveBack","SimEff","def","SimHas","it","ascensionMode","pool","tier","bought","SimHasAura","SimHasGod","hasGod","Temple","minigame","Objects","god","gods","SimModifyBuildingPrice","building","price","ModifiedPrice","hasBuff","fortune","minigameLoaded","godLvl","BuildingSell","build","basePrice","free","amount","noSim","noSimRes","toChange","startingAmount","moni","buyBulk","priceIncrease","modifyBuildingPrice","getSellMultiplier","metric","shortScale","shortScaleAbbreviated","LastModCount","TooltipLumpBackup","BackupGrimoireLaunch","BackupGrimoireLaunchMod","BackupGrimoireDraw","HasReplaceNativeGrimoireLaunch","HasReplaceNativeGrimoireDraw","LoadMinigames","LastSeasonPopupState","LastTickerFortuneState","LastGardenNextStep","LastGoldenCookieState","LastSpawnedGoldenCookieState","LastMagicBarFull","CurrSpawnedGoldenCookieState","LastWrinklerCount","DispCSS","TooltipBuildBackup","TooltipGrimoireBackup","TooltipUpgradeBackup","BackupFunctions","CycliusDateAtBeginLoop","Date","now","CenturyDateAtBeginLoop","num","floats","decimals","ScaleDecimals","Infinity","Scale","Beautify","Number","isFinite","answer","ScaleCutoff","ScaleSeparator","toLocaleString","toExponential","exponential","AmountOfTenPowerThree","toFixed","log","ColourTextPre","ColourBackPre","ColourBlue","ColourGreen","ColourYellow","ColourOrange","ColourRed","ColourPurple","ColourGray","ColourPink","ColourBrown","ColoursOrdering","TooltipText","SimpleTooltipElements","CMLastAscendState","TooltipWrinklerArea","TooltipWrinkler","TooltipWrinklerBeingShown","CMSayTime","LastTargetBotBar","LastTargetBuildings","LastTargetTooltipBuilding","CookieTimes","ClickTimes","BuffColours","Frenzy","Clot","Dragonflight","TooltipPrice","TooltipBonusIncome","TooltipType","TooltipName","TooltipBonusMouse","LastAscendState","LastNumberOfTimers","GCTimers","Title","UpdateBuildings","arr","buyMode","removeProperty","BuildColour","colour","SortBuildings","k","sort","amountUntilNext","AmountNeeded","priceUntilNext","gridRow","UpdateUpgradeSectionsHeight","values","getElementsByClassName","section","UpgradesNeverCollapse","minHeight","UpdateUpgrades","UpBarColour","blue","green","yellow","orange","red","purple","gray","UpgradesInStore","me","addedColour","j","childNodes","SortUpgrades","nameChecker","arr2","upgrade","findIndex","order","FormatTime","time","longFormat","formattedTime","TimeFormat","GetTimeColour","GetCPS","CPSMode","CalcWrink","cookiesPs","cpsSucked","wrinklers","GetWrinkConfigBank","CreateTimer","bars","timerBar","margin","marginRight","colourBar","borderTopRightRadius","borderBottomRightRadius","timer","marginLeft","CreateBotBarBuildingColumn","buildingName","bonus","header","substring","lastChild","paddingLeft","UpdateBotBar","BotBar","count","PPString","PPDisplayTime","timeColour","bulkPrice","cookies","UpdateBackground","Background","LeftBackground","DrawBackground","UpdateBotTimerBarPosition","TimerBar","TimerBarPos","ToggleTimerBar","CacheDragonAuras","dragonAura","dragonAura2","InitAchievement","achievementName","Achievements","you","SimGetTieredCpsMult","mult","tieredUpgrades","Tiers","special","tierMult","unshackleUpgrade","synergies","syn","buildingTie1","buildingTie2","grandma","Grandma","misfortune","vanilla","InitialBuildingData","cps","magicCpS","ComputeCps","GrandmaSynergies","UpgradesByPool","kitten","Portal","baseCps","baseCPS","InitUpgrade","upgradeName","Upgrades","power","level","pow","CopyData","UpgradesOwned","pledges","AchievementsOwned","heavenlyPower","prestige","totalCookies","slot","won","TooltipCreateHeader","fontWeight","TooltipCreateCalculationSection","income","marginBottom","click","production","ColourOfPP","PPSecondsLowerLimit","PPOnlyConsiderBuyable","GetCPSBuffMult","buffs","multCpS","SimWin","CalculateGains","effs","myEffs","ii","heavenlyMult","SimGetHeavenlyMultiplier","heralds","cookieUpgrades","buildMult","sin","santaLevel","milkProgress","milkMult","catMult","storedCps","eggMult","day","startDate","lumps","rawCookiesPs","CpsAchievements","threshold","shimmerTypes","golden","auraMult","bakeryName","goldenSwitchMult","upgrades","goldenCookieUpgrades","veilMult","runModHookOnValue","Fortunes","HalloCookies","ChristCookies","ValCookies","PlantDrops","SimHasAchiev","CheckOtherAchiev","grandmas","buildingsOwned","mathematician","base10","minAmount","ObjectsById","Cursor","hasAllHalloCook","hasAllChristCook","list","fortunes","BuyBuildingsBonusIncome","tieredAchievs","achievUnlock","lastAchievementsOwned","CalculateGrimoireRefillTime","currentMagic","maxMagic","targetMagic","magic","ToggleToolWarnPos","ToolWarnPos","UpdateTooltips","tooltipBox","paddingBottom","TooltipBuildUpgrade","increase","productionAchievs","HasAchiev","achiev","nextProductionAchiev","ObjectsTillNext","PPOfAmount","PPFrag","Building","getPrice","bonusMouse","previousSibling","chocolate","Upgrade","TooltipLump","lumpType","lumpColour","lumpCurrentType","SugarLump","spellCost","getSpellCost","spellsById","TooltipGrim","magicM","recover","recoverColour","conjure","reward","seperator","loss","Grimoire","Farm","TooltipPlots","plot","mature","plantsById","plantName","GardenPlots","totalGain","mortal","tile","immortal","matureBase","HarvestAll","WrinklerReward","WrinklerButton","TooltipPantheon","GodID","cps1","cps2","cps3","PantheonGods","TooltipWarn","create","boxId","labelTextFront","labelTextBack","deficitId","transition","labelDiv","labelSpan","deficitDiv","deficitSpan","ToolWarnUser","bonusIncomeUsed","ToolWarnBon","limitLucky","bonusNoFren","ToolWarnLucky","ToolWarnLuckyFrenzy","limitLuckyFrenzy","ToolWarnConjure","limitConjure","ToolWarnConjureFrenzy","limitConjureFrenzy","ToolWarnEdifice","Warnings","CMDrawHook","prefs","autosave","drawT","Stats","sayTime","T","maxWidthTwoBar","maxWidthOneBar","numberOfTimers","AutosaveTimerBar","timeTillNextAutosave","OnAscend","TimerBarOverlay","spawned","Has","minTime","maxTime","chanceToSpawn","season","reindeer","BuffTimerBars","classColour","UpdateTimerBar","TooltipWrink","showingTooltip","phase","selected","placeholder","wrinkler","minWidth","CheckWrinklerTooltip","sucked","toSuck","UpdateWrinklerTooltip","UpStats","CMClickHook","addLatest","computedMouseCps","CMAvgQueue","maxLength","queue","newValue","calcAverage","timePeriod","calcSum","reduce","FillCMDCache","caches","CookieMonsterData","Cache","exportName","CacheAvgCPS","currDate","choEggTotal","cookiesEarned","timeDiff","bankDiffAvg","wrinkDiffAvg","wrinkFattestDiffAvg","choEggDiffAvg","clicksDiffAvg","cookieClicks","cpsLength","AvgCPSHist","choEgg","HasUnlocked","AvgClicksHist","BuildingGetPrice","partialPrice","CacheColour","PPRigidelMode","PPExcludeTop","CachePP","indexOfMin","CacheBuildingsPP","Objects1","Objects10","Objects100","entries","BuyUpgradesBonusIncome","unlocked","CountsAsUpgradeOwned","diffMouseCPS","multClick","out","MouseCps","CacheBuildingIncome","result","CacheBuildingsPrices","CacheIncome","bonusIncome","CacheUpgradeIncome","MaxChainCookieReward","digit","maxPayout","totalFromChain","nextMoni","nextRequired","chain","LN10","CacheChain","cpsBuffMult","CacheHeavenlyChipsPS","chipsOwned","HowMuchPrestige","cookiesReset","ascendNowToGet","heavenlyChipsDiffAvg","CacheAllMissingUpgrades","classes","noFrame","crates","icon","iconFunction","getDynamicTooltip","crateMissing","CacheSeasonSpec","CacheStatsCookies","CacheGoldenAndWrathCookiesMults","goldenMult","wrathMult","eff","AllAmountTillNextAchievement","forceRecalc","TotalNeeded","tillNext","AchievementsAtStart","index","lastIndexWithChange","IndividualAmountTillNextAchievement","CacheWrinklers","InitCache","PopAllNormalWrinklers","hp","CreateTooltip","TooltipAmor","buildPrice","amortizeAmount","storedTotalCps","globalCpsMult","crateTooltip","lumpTooltip","spellTooltip","tileTooltip","toolTooltip","godTooltip","slotTooltip","area","UpdateFavicon","Favicon","wrath","href","InitData","ReplaceTooltipGrimoire","dynamic","wobble","ReplaceNativeGrimoireDraw","GrimoireBar","magicBarTextL","magicBarL","ReplaceNativeGrimoire","launch","ReplaceNativeGrimoireLaunch","CacheDragonCost","dragonLevels","buy","objectMatch","replaceAll","cost","ConfigGroups","Favourite","Calculation","Notation","Colours","BarsDisplay","Tooltip","Statistics","Miscellaneous","ConfigGroupsNotification","NotificationGeneral","NotificationGC","NotificationFC","NotificationSea","NotificationGard","NotificationMagi","NotificationWrink","NotificationWrinkMax","ToggleOnOff","checkNotificationPromise","requestPermission","then","RefreshScale","BeautifyAll","RefreshStore","RebuildUpgrades","ToggleBotBar","DetailedTime","UpgradeBarFixedPos","DragonAuraInfo","GCTimer","HideSectionsButtons","TooltipAscendButton","MissingUpgrades","MissingAchievements","HeavenlyChipsTarget","ShowMissedGC","GCNotification","GCFlash","ColourGCFlash","GCSound","GCVolume","GCSoundURL","FortuneNotification","FortuneFlash","ColourFortuneFlash","FortuneSound","FortuneVolume","FortuneSoundURL","SeaNotification","SeaFlash","ColourSeaFlash","SeaSound","SeaVolume","SeaSoundURL","GardFlash","ColourGardFlash","GardSound","GardVolume","GardSoundURL","MagicNotification","MagicFlash","ColourMagicFlash","MagicSound","MagicVolume","MagicSoundURL","WrinklerNotification","WrinklerFlash","ColourWrinklerFlash","WrinklerSound","WrinklerVolume","WrinklerSoundURL","WrinklerMaxNotification","WrinklerMaxFlash","ColourWrinklerMaxFlash","WrinklerMaxSound","WrinklerMaxVolume","WrinklerMaxSoundURL","BulkBuyBlock","UpdateColours","createMenuOptions","menuDiv","subGroup","subGroupObject","StatsHeader","config","fontFamily","ToggleHeader","StatsListing","listingName","StatsMissDispListing","current","StatsMissDisp","theMissDisp","frag","createDocumentFragment","missing","AddMenuStats","stats","Lucky","goldCookTooltip","luckyColour","luckyTime","luckyReqFrag","luckyReqSpan","luckyReqSmall","luckyColourFrenzy","luckyTimeFrenzy","luckyReqFrenFrag","luckyReqFrenSpan","luckyReqFrenSmall","luckySplit","luckyRewardMaxSpan","luckyRewardFrenzyMaxSpan","luckyCurBase","luckyCurSpan","Chain","chainColour","chainTime","chainReqFrag","chainReqSpan","chainReqSmall","chainWrathColour","chainWrathTime","chainWrathReqFrag","chainWrathReqSpan","chainWrathReqSmall","chainColourFrenzy","chainTimeFrenzy","chainReqFrenFrag","chainReqFrenSpan","chainReqFrenSmall","chainWrathColourFrenzy","chainWrathTimeFrenzy","chainWrathReqFrenFrag","chainWrathReqFrenSpan","chainWrathReqFrenSmall","chainCurMax","chainCur","chainCurWrath","Spells","conjureColour","conjureTime","conjureReqFrag","conjureReqSpan","conjureReqSmall","conjureFrenzyColour","conjureFrenzyCur","conjureFrenzyTime","conjureFrenzyReqFrag","conjureFrenzyReqSpan","conjureFrenzyReqSmall","Garden","bakeberryColour","bakeberryFrag","chocorootColour","chocorootFrag","queenbeetColour","queenbeetFrag","duketaterColour","duketaterFrag","missingPlantDrops","Prestige","possiblePresMax","neededCook","HowManyCookiesReset","cookiesNextFrag","cookiesNextSmall","heavenlyChips","HCTarget","CookiesTillTarget","resetBonus","newHeavenlyChips","curCPS","ResetCPS","ResetBonus","resetFrag","resetSmall","currentPrestige","willHave","willGet","delta7","next7Reset","next7Total","frag7","delta777","next777Reset","next777Total","frag777","delta777777","next777777Reset","next777777Total","frag777777","Wrink","popAllFrag","popAllA","popFattestFrag","popFattestA","specDisp","missingHalloweenCookies","missingChristmasCookies","missingValentineCookies","missingNormalEggs","eggDrops","missingRareEggs","rareEggDrops","centEgg","Sea","failRateHalloween","dropRateMult","obtainedCookiesChance","failRateChristmas","dropRateEgg","StartingFailRate","failRateEgg","succesRateEgg","obtainedEggs","obtainedRareEggs","pNormal1","pRare1","pRedrop","Achievs","Misc","missedGoldenClicks","menuSection","prestigeUpgradesMissing","titlefrag","PrestigeUpgrades","normalUpgradesMissing","tech","nextSibling","cookieUpgradesMissing","cookie","achievs","parentElement","achievsCrate","AchievementsById","mouseDown","setOnCrate","tags","neuromancy","sesame","descFunc","tagsStr","CrateTooltipLockedAchievements","AddMissingAchievements","FixMouseY","timerBarHeight","mouseY","ReplaceNative","drawMod","from","update","updateMod","warnOffset","tta","tt","UpdateTooltipLocation","UpdateWrinklers","UpdateSpecial","ClickCookie","ClickProduct","DescribeDragonAura","aura","bonusCPS","priceOfChange","highestBuilding","CalculateChangeAura","timeToRecover","bonusCPSPercentage","div2","AddAuraInfo","ToggleSpecialMenu","on","shouldHide","AddDragonLevelUpTooltip","AddMenu","detail","Logic","titleGC","titleFC","titleSP","addFC","addSP","life","lastIndexOf","spawn","UpdateTitle","cookiesToNext","ReplaceAscendTooltip","InitializeCookieMonster","head","borderTop","textShadow","table","tbody","firstCol","td","CreateBotBar","CMTimerBarAutosave","CMTimerBarGC","CMTimerBarRen","TimerBarBuffTimers","CreateTimerBar","UpgradeBar","legend","legendLine","CreateUpgradeBarLegend","upgradeNumber","CreateUpgradeBar","CreateSectionHideButtons","getElementsByTagName","CreateFavicon","CreateSimpleTooltip","append","CreateWrinklerButtons","productButtons","button","lockedMinigames","toggleBuildingLock","canLumps","child","coords","ReplaceTooltipPantheon","popups","Popup","Notify","Win","CalculateChangeGod","CurrentSlot","godsById","CMLoopHook","AscendTimer","CachePantheonGods","sellTotal","Bank","marketGoods","goods","goodsVal","marketGood","stock","cookiesPsRawHighest","buildingsToSacrifice","SellBuildingsForChoEgg","CacheSellAllForChoEgg","hasBuildAura","godMult","CacheCurrWrinklerCPS","LoopCache","TickerEffect","shimmers","spawnLead","nextStep","CheckMagicMeter","CurrentWrinklers","getWrinklersMax","CheckWrinklerCount","pop","webkitFilter","CreateGCTimer","transform","buildingIndex","version","CM","proceed","confirm","Steam"],"sourceRoot":""}
\ No newline at end of file
diff --git a/dist/CookieMonsterDev.js.map b/dist/CookieMonsterDev.js.map
index 6f165a4e..bd967b33 100644
--- a/dist/CookieMonsterDev.js.map
+++ b/dist/CookieMonsterDev.js.map
@@ -1 +1 @@
-{"version":3,"file":"CookieMonsterDev.js","mappings":"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AEFsU,YAAa,IAAI3f,EACf,EACA,OACA,UACA,CAAC,+CAAgD,+CACjD,2EACA,GAEFqb,YAAa,IAAIrb,EACf,EACA,OACA,UACA,CAAC,kCAAmC,qCACpC,kCACA,GACA,KACEob,QAGJ4B,YAAa,IAAIhd,EACf,EACA,OACA,UACA,CAAC,mCAAoC,mCACrC,6CACA,GAEF+hB,aAAc,IAAI/hB,EAChB,EACA,OACA,UACA,CAAC,uBAAwB,uBACzB,oEACA,GAEFwc,YAAa,IAAIxc,EACf,EACA,OACA,UACA,CAAC,yBAA0B,yBAC3B,4DACA,GAEF0d,aAAc,IAAI1d,EAChB,EACA,OACA,UACA,CAAC,2BAA4B,2BAC7B,yDACA,GAEFwe,gBAAiB,IAAIxe,EACnB,EACA,OACA,UACA,CAAC,uBAAwB,uBACzB,iDACA,GAEFitB,oBAAqB,IAAIjtB,EACvB,EACA,OACA,UACA,CAAC,qCAAsC,qCACvC,+CACA,GAIF2gB,MAAO,IAAI3gB,EACT,EACA,OACA,aACA,CAAC,iBAAkB,iBACnB,oCACA,GAEFktB,gBAAiB,IAAIltB,EACnB,EACA,OACA,aACA,CAAC,uBAAwB,uBACzB,6CACA,GAEFmtB,oBAAqB,IAAIntB,EACvB,EACA,OACA,aACA,CAAC,2BAA4B,kCAC7B,yDACA,GAEF0iB,QAAS,IAAI1iB,EACX,EACA,OACA,aACA,CAAC,mCAAoC,+BACrC,wCACA,GAEFotB,oBAAqB,IAAIptB,EACvB,EACA,WACA,aACA,0BACA,8GACA,EACAqL,EAAAA,GAEFgiB,aAAc,IAAIrtB,EAChB,EACA,OACA,aACA,CAAC,gBAAiB,gBAClB,4FACA,GAIFuO,MAAO,IAAIvO,EACT,EACA,OACA,sBACA,CAAC,YAAa,WAAY,8BAC1B,8LACA,GAEFxG,aAAc,IAAIwG,EAChB,EACA,OACA,sBACA,CAAC,mCAAoC,mCACrC,kLACA,GAEFstB,eAAgB,IAAIttB,EAClB,EACA,OACA,iBACA,CAAC,mBAAoB,mBACrB,mDACA,GACA,KACE,GACExJ,KAAKiB,KAAKC,uBAAuBC,SAASwI,iBAAiBvI,SA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","sources":["webpack:///./node_modules/@eastdesire/jscolor/jscolor.js","webpack:///webpack/bootstrap","webpack:///webpack/runtime/compat get default export","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/options/settingClasses/baseSetting.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/notifications/prompt.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/notifications/flash.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/savingAndLoading/saveFramework.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/menu/toggles/toggleHeader.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/notifications/sound.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/options/toggleConfigVolume.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/frameworkDataObject/menuSections/addMenu.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/frameworkDataObject/menuSections/info/addInfoMenuSection.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/frameworkDataObject/menuSections/info/createFrameworkInfoMenuSection.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/frameworkDataObject/data/modInfo.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/frameworkDataObject/draw/drawLoop.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/frameworkDataObject/data/headers.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/savingAndLoading/loadMod.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/savingAndLoading/createSaveDataObject.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/frameworkDataObject/logic/logicLoop.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/frameworkDataObject/data/settings.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/frameworkDataObject/load.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/frameworkDataObject/cookieMonsterFramework.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/frameworkDataObject/init.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/frameworkDataObject/init/createFlashScreen.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/frameworkDataObject/save.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/index.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/init/initModFramework.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/init/registerMod.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/menu/listings/createInfoListing.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/menu/listings/createOptionListing.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/menu/listings/createOptionsFavouriteStar.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/menu/toggles/toggleFavourite.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/options/toggleConfig.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/options/toggleConfigKeycode.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/menu/listings/createOptionsSubHeader.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/menu/createModMenuSection.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/notifications/notification.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/options/settingClasses/settingColours.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/options/settingClasses/settingInputNumber.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/options/settingClasses/settingStandard.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/options/settingClasses/settingStandardWithFunc.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/options/settingClasses/settingVolume.js","webpack:///./src/Config/Toggles/ToggleWrinklerButtons.js","webpack:///./src/Cache/VariablesAndData.js","webpack:///./src/Sim/VariablesAndData.js","webpack:///./src/Sim/ReplacedGameFunctions/SimAuraMult.js","webpack:///./src/Sim/ReplacedGameFunctions/SimGetSellMultiplier.js","webpack:///./src/Sim/ReplacedGameFunctions/SimEff.js","webpack:///./src/Sim/ReplacedGameFunctions/SimHas.js","webpack:///./src/Sim/ReplacedGameFunctions/SimHasAura.js","webpack:///./src/Sim/ReplacedGameFunctions/SimHasGod.js","webpack:///./src/Sim/ReplacedGameFunctions/SimModifyBuidlingPrice.js","webpack:///./src/Sim/SimulationEvents/SellBuilding.js","webpack:///./src/Data/Scales.js","webpack:///./src/Main/VariablesAndData.js","webpack:///./src/Disp/VariablesAndData.js","webpack:///./src/Disp/BeautifyAndFormatting/Beautify.js","webpack:///./src/Disp/BuildingsUpgrades/Buildings.js","webpack:///./src/Disp/BuildingsUpgrades/UpdateUpgradeSectionsHeight.js","webpack:///./src/Disp/BuildingsUpgrades/Upgrades.js","webpack:///./src/Disp/BeautifyAndFormatting/FormatTime.js","webpack:///./src/Disp/BeautifyAndFormatting/GetTimeColour.js","webpack:///./src/Disp/HelperFunctions/GetCPS.js","webpack:///./src/Disp/HelperFunctions/GetWrinkConfigBank.js","webpack:///./src/Disp/InfoBars/CreateDOMElements.js","webpack:///./src/Disp/InfoBars/BottomBar.js","webpack:///./src/Disp/HelperFunctions/UpdateBackground.js","webpack:///./src/Config/SpecificToggles.js","webpack:///./src/Cache/Dragon/CacheDragonAuras.js","webpack:///./src/Sim/InitializeData/InitAchievement.js","webpack:///./src/Sim/ReplacedGameFunctions/SimGetTieredCpsMult.js","webpack:///./src/Sim/InitializeData/InitialBuildingData.js","webpack:///./src/Sim/InitializeData/InitUpgrade.js","webpack:///./src/Sim/SimulationData/CopyData.js","webpack:///./src/Disp/Tooltips/CreateTooltip.js","webpack:///./src/Cache/PP/ColourOfPP.js","webpack:///./src/Cache/CPS/GetCPSBuffMult.js","webpack:///./src/Sim/SimulationData/SimWin.js","webpack:///./src/Sim/Calculations/CalculateGains.js","webpack:///./src/Sim/ReplacedGameFunctions/SimGetHeavenlyMultiplier.js","webpack:///./src/Data/Gamedata.js","webpack:///./src/Sim/ReplacedGameFunctions/SimHasAchiev.js","webpack:///./src/Sim/Calculations/CheckOtherAchiev.js","webpack:///./src/Sim/SimulationEvents/BuyBuildingBonusIncome.js","webpack:///./src/Disp/HelperFunctions/CalculateGrimoireRefillTime.js","webpack:///./src/Config/Toggles/ToggleToolWarnPos.js","webpack:///./src/Disp/Tooltips/UpdateTooltips.js","webpack:///./src/Disp/Tooltips/TypesOfTooltips/Building.js","webpack:///./src/Disp/Tooltips/TypesOfTooltips/Upgrade.js","webpack:///./src/Disp/Tooltips/TypesOfTooltips/SugarLump.js","webpack:///./src/Disp/HelperFunctions/GetLumpColour.js","webpack:///./src/Disp/Tooltips/TypesOfTooltips/Grimoire.js","webpack:///./src/Disp/Tooltips/TypesOfTooltips/GardenPlots.js","webpack:///./src/Disp/Tooltips/TypesOfTooltips/HarvestAll.js","webpack:///./src/Disp/Tooltips/TypesOfTooltips/WrinklerButton.js","webpack:///./src/Disp/Tooltips/TypesOfTooltips/PantheonGods.js","webpack:///./src/Disp/Tooltips/TypesOfTooltips/Warnings.js","webpack:///./src/Disp/DrawHook.js","webpack:///./src/Disp/InfoBars/TimerBar.js","webpack:///./src/Disp/Tooltips/WrinklerTooltips.js","webpack:///./src/Disp/MenuSections/Refreshmenu.js","webpack:///./src/Main/ClickHook.js","webpack:///./src/Cache/CPS/AverageQueue.js","webpack:///./src/Cache/FillCMDCache.js","webpack:///./src/Cache/CPS/CPS.js","webpack:///./src/Sim/SimulationEvents/BuyBuilding.js","webpack:///./src/Cache/PP/Building.js","webpack:///./src/Cache/PP/PP.js","webpack:///./src/Cache/PP/Upgrade.js","webpack:///./src/Sim/SimulationEvents/BuyUpgrades.js","webpack:///./src/Cache/PriceAndIncome/PriceAndIncome.js","webpack:///./src/Cache/Stats/ChainCookies.js","webpack:///./src/Cache/Stats/HeavenlyChips.js","webpack:///./src/Cache/Stats/MissingUpgrades.js","webpack:///./src/Disp/MenuSections/Statistics/CreateMissingUpgrades.js","webpack:///./src/Cache/Stats/Reindeer.js","webpack:///./src/Cache/Stats/Stats.js","webpack:///./src/Cache/TillNextAchievement/AllAmountTillNextAchievement.js","webpack:///./src/Cache/TillNextAchievement/IndividualAmountTillNextAchievement.js","webpack:///./src/Cache/Wrinklers/Wrinklers.js","webpack:///./src/Cache/CacheInit.js","webpack:///./src/Disp/HelperFunctions/PopWrinklers.js","webpack:///./src/Disp/Tooltips/Tooltip.js","webpack:///./src/Disp/TabTitle/FavIcon.js","webpack:///./src/Sim/InitializeData/InitData.js","webpack:///./src/Main/ReplaceGameElements/TooltipGrimoire.js","webpack:///./src/Main/ReplaceGameElements/NativeGrimoire.js","webpack:///./src/Cache/Dragon/Dragon.js","webpack:///./src/Data/Sectionheaders.js","webpack:///./src/Config/CheckNotificationPermissions.js","webpack:///./src/Disp/HelperFunctions/RefreshScale.js","webpack:///./src/Config/Toggles/ToggleBotBar.js","webpack:///./src/Data/settings.js","webpack:///./src/Config/Toggles/ToggleDetailedTime.js","webpack:///./src/Config/Toggles/ToggleUpgradeBarAndColour.js","webpack:///./src/Config/Toggles/ToggleUpgradeBarFixedPos.js","webpack:///./src/Config/Toggles/ToggleGCTimer.js","webpack:///./src/Config/Toggles/ToggleSectionHideButtons.js","webpack:///./src/Disp/HelperFunctions/UpdateColours.js","webpack:///./src/Disp/MenuSections/createMenuOptions.js","webpack:///./src/Disp/MenuSections/Statistics/CreateDOMElements.js","webpack:///./src/Config/ToggleSetting.js","webpack:///./src/Disp/MenuSections/Statistics/AddStatsPage.js","webpack:///./src/Disp/MenuSections/Statistics/CreateStatsSections.js","webpack:///./src/Sim/SimulationEvents/ResetAscension.js","webpack:///./src/Disp/MenuSections/Statistics/CreateMissingAchievements.js","webpack:///./src/Main/ReplaceGameFunctions/FixMouse.js","webpack:///./src/Main/ReplaceGameFunctions/ReplaceNative.js","webpack:///./src/Disp/Tooltips/PositionLocation.js","webpack:///./src/Main/ReplaceGameElements/TooltipUpgrades.js","webpack:///./src/Disp/Dragon/Dragon.js","webpack:///./src/Sim/SimulationEvents/AuraChange.js","webpack:///./src/Disp/MenuSections/AddMenus.js","webpack:///./src/Disp/TabTitle/TabTitle.js","webpack:///./src/Disp/Tooltips/AscendButton.js","webpack:///./src/Main/Initialization.js","webpack:///./src/Disp/Initialization/CssArea.js","webpack:///./src/Disp/BuildingsUpgrades/UpgradeBar.js","webpack:///./src/Disp/Initialization/CreateSectionHideButtons.js","webpack:///./src/Disp/Initialization/CreateWrinklerButton.js","webpack:///./src/Disp/Initialization/UpdateBuildingUpgradeStyle.js","webpack:///./src/Disp/buildingTiles/createBuildingLockButtons.js","webpack:///./src/Disp/buildingTiles/toggleBuildingLock.js","webpack:///./src/Main/ReplaceGameElements/Tooltips.js","webpack:///./src/Main/WrinklerArea/AddDetectArea.js","webpack:///./src/Sim/SimulationEvents/GodChange.js","webpack:///./src/Main/LoopHook.js","webpack:///./src/Disp/HelperFunctions/UpdateAscendState.js","webpack:///./src/Cache/CPS/NoGoldSwitchCPS.js","webpack:///./src/Sim/Calculations/NoGoldenSwitchCalc.js","webpack:///./src/Cache/PantheonGods/CacheGods.js","webpack:///./src/Cache/CPS/SellChoEgg.js","webpack:///./src/Sim/SimulationEvents/SellBuildingForChoEgg.js","webpack:///./src/Cache/CacheLoop.js","webpack:///./src/Cache/CPS/CurrWrinklerCPS.js","webpack:///./src/Main/CheckStates/Ticker.js","webpack:///./src/Main/CheckStates/Season.js","webpack:///./src/Main/CheckStates/Garden.js","webpack:///./src/Main/CheckStates/Grimoire.js","webpack:///./src/Main/CheckStates/Wrinkler.js","webpack:///./src/Main/CheckStates/GoldenCookie.js","webpack:///./src/Disp/GoldenCookieTimers/GoldenCookieTimers.js","webpack:///./src/Data/headers.js","webpack:///./src/InitSaveLoad/load.js","webpack:///./src/CookieMonster.js","webpack:///./src/InitSaveLoad/init.js","webpack:///./src/Data/Moddata.js","webpack:///./src/InitSaveLoad/save.js"],"sourcesContent":["/**\r\n * jscolor - JavaScript Color Picker\r\n *\r\n * @link http://jscolor.com\r\n * @license For open source use: GPLv3\r\n * For commercial use: JSColor Commercial License\r\n * @author Jan Odvarko - East Desire\r\n *\r\n * See usage examples at http://jscolor.com/examples/\r\n */\r\n\r\n\r\n(function (global, factory) {\r\n\r\n\t'use strict';\r\n\r\n\tif (typeof module === 'object' && typeof module.exports === 'object') {\r\n\t\t// Export jscolor as a module\r\n\t\tmodule.exports = global.document ?\r\n\t\t\tfactory (global) :\r\n\t\t\tfunction (win) {\r\n\t\t\t\tif (!win.document) {\r\n\t\t\t\t\tthrow new Error('jscolor needs a window with document');\r\n\t\t\t\t}\r\n\t\t\t\treturn factory(win);\r\n\t\t\t}\r\n\t\treturn;\r\n\t}\r\n\r\n\t// Default use (no module export)\r\n\tfactory(global);\r\n\r\n})(typeof window !== 'undefined' ? window : this, function (window) { // BEGIN factory\r\n\r\n// BEGIN jscolor code\r\n\r\n\r\n'use strict';\r\n\r\n\r\nvar jscolor = (function () { // BEGIN jscolor\r\n\r\nvar jsc = {\r\n\r\n\r\n\tinitialized : false,\r\n\r\n\tinstances : [], // created instances of jscolor\r\n\r\n\treadyQueue : [], // functions waiting to be called after init\r\n\r\n\r\n\tregister : function () {\r\n\t\tif (typeof window !== 'undefined' && window.document) {\r\n\t\t\twindow.document.addEventListener('DOMContentLoaded', jsc.pub.init, false);\r\n\t\t}\r\n\t},\r\n\r\n\r\n\tinstallBySelector : function (selector, rootNode) {\r\n\t\trootNode = rootNode ? jsc.node(rootNode) : window.document;\r\n\t\tif (!rootNode) {\r\n\t\t\tthrow new Error('Missing root node');\r\n\t\t}\r\n\r\n\t\tvar elms = rootNode.querySelectorAll(selector);\r\n\r\n\t\t// for backward compatibility with DEPRECATED installation/configuration using className\r\n\t\tvar matchClass = new RegExp('(^|\\\\s)(' + jsc.pub.lookupClass + ')(\\\\s*(\\\\{[^}]*\\\\})|\\\\s|$)', 'i');\r\n\r\n\t\tfor (var i = 0; i < elms.length; i += 1) {\r\n\r\n\t\t\tif (elms[i].jscolor && elms[i].jscolor instanceof jsc.pub) {\r\n\t\t\t\tcontinue; // jscolor already installed on this element\r\n\t\t\t}\r\n\r\n\t\t\tif (elms[i].type !== undefined && elms[i].type.toLowerCase() == 'color' && jsc.isColorAttrSupported) {\r\n\t\t\t\tcontinue; // skips inputs of type 'color' if supported by the browser\r\n\t\t\t}\r\n\r\n\t\t\tvar dataOpts, m;\r\n\r\n\t\t\tif (\r\n\t\t\t\t(dataOpts = jsc.getDataAttr(elms[i], 'jscolor')) !== null ||\r\n\t\t\t\t(elms[i].className && (m = elms[i].className.match(matchClass))) // installation using className (DEPRECATED)\r\n\t\t\t) {\r\n\t\t\t\tvar targetElm = elms[i];\r\n\r\n\t\t\t\tvar optsStr = '';\r\n\t\t\t\tif (dataOpts !== null) {\r\n\t\t\t\t\toptsStr = dataOpts;\r\n\r\n\t\t\t\t} else if (m) { // installation using className (DEPRECATED)\r\n\t\t\t\t\tconsole.warn('Installation using class name is DEPRECATED. Use data-jscolor=\"\" attribute instead.' + jsc.docsRef);\r\n\t\t\t\t\tif (m[4]) {\r\n\t\t\t\t\t\toptsStr = m[4];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar opts = null;\r\n\t\t\t\tif (optsStr.trim()) {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\topts = jsc.parseOptionsStr(optsStr);\r\n\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\tconsole.warn(e + '\\n' + optsStr);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttry {\r\n\t\t\t\t\tnew jsc.pub(targetElm, opts);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tconsole.warn(e);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\r\n\tparseOptionsStr : function (str) {\r\n\t\tvar opts = null;\r\n\r\n\t\ttry {\r\n\t\t\topts = JSON.parse(str);\r\n\r\n\t\t} catch (eParse) {\r\n\t\t\tif (!jsc.pub.looseJSON) {\r\n\t\t\t\tthrow new Error('Could not parse jscolor options as JSON: ' + eParse);\r\n\t\t\t} else {\r\n\t\t\t\t// loose JSON syntax is enabled -> try to evaluate the options string as JavaScript object\r\n\t\t\t\ttry {\r\n\t\t\t\t\topts = (new Function ('var opts = (' + str + '); return typeof opts === \"object\" ? opts : {};'))();\r\n\t\t\t\t} catch (eEval) {\r\n\t\t\t\t\tthrow new Error('Could not evaluate jscolor options: ' + eEval);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn opts;\r\n\t},\r\n\r\n\r\n\tgetInstances : function () {\r\n\t\tvar inst = [];\r\n\t\tfor (var i = 0; i < jsc.instances.length; i += 1) {\r\n\t\t\t// if the targetElement still exists, the instance is considered \"alive\"\r\n\t\t\tif (jsc.instances[i] && jsc.instances[i].targetElement) {\r\n\t\t\t\tinst.push(jsc.instances[i]);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn inst;\r\n\t},\r\n\r\n\r\n\tcreateEl : function (tagName) {\r\n\t\tvar el = window.document.createElement(tagName);\r\n\t\tjsc.setData(el, 'gui', true);\r\n\t\treturn el;\r\n\t},\r\n\r\n\r\n\tnode : function (nodeOrSelector) {\r\n\t\tif (!nodeOrSelector) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tif (typeof nodeOrSelector === 'string') {\r\n\t\t\t// query selector\r\n\t\t\tvar sel = nodeOrSelector;\r\n\t\t\tvar el = null;\r\n\t\t\ttry {\r\n\t\t\t\tel = window.document.querySelector(sel);\r\n\t\t\t} catch (e) {\r\n\t\t\t\tconsole.warn(e);\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\tif (!el) {\r\n\t\t\t\tconsole.warn('No element matches the selector: %s', sel);\r\n\t\t\t}\r\n\t\t\treturn el;\r\n\t\t}\r\n\r\n\t\tif (jsc.isNode(nodeOrSelector)) {\r\n\t\t\t// DOM node\r\n\t\t\treturn nodeOrSelector;\r\n\t\t}\r\n\r\n\t\tconsole.warn('Invalid node of type %s: %s', typeof nodeOrSelector, nodeOrSelector);\r\n\t\treturn null;\r\n\t},\r\n\r\n\r\n\t// See https://stackoverflow.com/questions/384286/\r\n\tisNode : function (val) {\r\n\t\tif (typeof Node === 'object') {\r\n\t\t\treturn val instanceof Node;\r\n\t\t}\r\n\t\treturn val && typeof val === 'object' && typeof val.nodeType === 'number' && typeof val.nodeName === 'string';\r\n\t},\r\n\r\n\r\n\tnodeName : function (node) {\r\n\t\tif (node && node.nodeName) {\r\n\t\t\treturn node.nodeName.toLowerCase();\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\r\n\r\n\tremoveChildren : function (node) {\r\n\t\twhile (node.firstChild) {\r\n\t\t\tnode.removeChild(node.firstChild);\r\n\t\t}\r\n\t},\r\n\r\n\r\n\tisTextInput : function (el) {\r\n\t\treturn el && jsc.nodeName(el) === 'input' && el.type.toLowerCase() === 'text';\r\n\t},\r\n\r\n\r\n\tisButton : function (el) {\r\n\t\tif (!el) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tvar n = jsc.nodeName(el);\r\n\t\treturn (\r\n\t\t\t(n === 'button') ||\r\n\t\t\t(n === 'input' && ['button', 'submit', 'reset'].indexOf(el.type.toLowerCase()) > -1)\r\n\t\t);\r\n\t},\r\n\r\n\r\n\tisButtonEmpty : function (el) {\r\n\t\tswitch (jsc.nodeName(el)) {\r\n\t\t\tcase 'input': return (!el.value || el.value.trim() === '');\r\n\t\t\tcase 'button': return (el.textContent.trim() === '');\r\n\t\t}\r\n\t\treturn null; // could not determine element's text\r\n\t},\r\n\r\n\r\n\t// See https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\r\n\tisPassiveEventSupported : (function () {\r\n\t\tvar supported = false;\r\n\r\n\t\ttry {\r\n\t\t\tvar opts = Object.defineProperty({}, 'passive', {\r\n\t\t\t\tget: function () { supported = true; }\r\n\t\t\t});\r\n\t\t\twindow.addEventListener('testPassive', null, opts);\r\n\t\t\twindow.removeEventListener('testPassive', null, opts);\r\n\t\t} catch (e) {}\r\n\r\n\t\treturn supported;\r\n\t})(),\r\n\r\n\r\n\tisColorAttrSupported : (function () {\r\n\t\tvar elm = window.document.createElement('input');\r\n\t\tif (elm.setAttribute) {\r\n\t\t\telm.setAttribute('type', 'color');\r\n\t\t\tif (elm.type.toLowerCase() == 'color') {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t})(),\r\n\r\n\r\n\tdataProp : '_data_jscolor',\r\n\r\n\r\n\t// usage:\r\n\t// setData(obj, prop, value)\r\n\t// setData(obj, {prop:value, ...})\r\n\t//\r\n\tsetData : function () {\r\n\t\tvar obj = arguments[0];\r\n\r\n\t\tif (arguments.length === 3) {\r\n\t\t\t// setting a single property\r\n\t\t\tvar data = obj.hasOwnProperty(jsc.dataProp) ? obj[jsc.dataProp] : (obj[jsc.dataProp] = {});\r\n\t\t\tvar prop = arguments[1];\r\n\t\t\tvar value = arguments[2];\r\n\r\n\t\t\tdata[prop] = value;\r\n\t\t\treturn true;\r\n\r\n\t\t} else if (arguments.length === 2 && typeof arguments[1] === 'object') {\r\n\t\t\t// setting multiple properties\r\n\t\t\tvar data = obj.hasOwnProperty(jsc.dataProp) ? obj[jsc.dataProp] : (obj[jsc.dataProp] = {});\r\n\t\t\tvar map = arguments[1];\r\n\r\n\t\t\tfor (var prop in map) {\r\n\t\t\t\tif (map.hasOwnProperty(prop)) {\r\n\t\t\t\t\tdata[prop] = map[prop];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tthrow new Error('Invalid arguments');\r\n\t},\r\n\r\n\r\n\t// usage:\r\n\t// removeData(obj, prop, [prop...])\r\n\t//\r\n\tremoveData : function () {\r\n\t\tvar obj = arguments[0];\r\n\t\tif (!obj.hasOwnProperty(jsc.dataProp)) {\r\n\t\t\treturn true; // data object does not exist\r\n\t\t}\r\n\t\tfor (var i = 1; i < arguments.length; i += 1) {\r\n\t\t\tvar prop = arguments[i];\r\n\t\t\tdelete obj[jsc.dataProp][prop];\r\n\t\t}\r\n\t\treturn true;\r\n\t},\r\n\r\n\r\n\tgetData : function (obj, prop, setDefault) {\r\n\t\tif (!obj.hasOwnProperty(jsc.dataProp)) {\r\n\t\t\t// data object does not exist\r\n\t\t\tif (setDefault !== undefined) {\r\n\t\t\t\tobj[jsc.dataProp] = {}; // create data object\r\n\t\t\t} else {\r\n\t\t\t\treturn undefined; // no value to return\r\n\t\t\t}\r\n\t\t}\r\n\t\tvar data = obj[jsc.dataProp];\r\n\r\n\t\tif (!data.hasOwnProperty(prop) && setDefault !== undefined) {\r\n\t\t\tdata[prop] = setDefault;\r\n\t\t}\r\n\t\treturn data[prop];\r\n\t},\r\n\r\n\r\n\tgetDataAttr : function (el, name) {\r\n\t\tvar attrName = 'data-' + name;\r\n\t\tvar attrValue = el.getAttribute(attrName);\r\n\t\treturn attrValue;\r\n\t},\r\n\r\n\r\n\tsetDataAttr : function (el, name, value) {\r\n\t\tvar attrName = 'data-' + name;\r\n\t\tel.setAttribute(attrName, value);\r\n\t},\r\n\r\n\r\n\t_attachedGroupEvents : {},\r\n\r\n\r\n\tattachGroupEvent : function (groupName, el, evnt, func) {\r\n\t\tif (!jsc._attachedGroupEvents.hasOwnProperty(groupName)) {\r\n\t\t\tjsc._attachedGroupEvents[groupName] = [];\r\n\t\t}\r\n\t\tjsc._attachedGroupEvents[groupName].push([el, evnt, func]);\r\n\t\tel.addEventListener(evnt, func, false);\r\n\t},\r\n\r\n\r\n\tdetachGroupEvents : function (groupName) {\r\n\t\tif (jsc._attachedGroupEvents.hasOwnProperty(groupName)) {\r\n\t\t\tfor (var i = 0; i < jsc._attachedGroupEvents[groupName].length; i += 1) {\r\n\t\t\t\tvar evt = jsc._attachedGroupEvents[groupName][i];\r\n\t\t\t\tevt[0].removeEventListener(evt[1], evt[2], false);\r\n\t\t\t}\r\n\t\t\tdelete jsc._attachedGroupEvents[groupName];\r\n\t\t}\r\n\t},\r\n\r\n\r\n\tpreventDefault : function (e) {\r\n\t\tif (e.preventDefault) { e.preventDefault(); }\r\n\t\te.returnValue = false;\r\n\t},\r\n\r\n\r\n\tcaptureTarget : function (target) {\r\n\t\t// IE\r\n\t\tif (target.setCapture) {\r\n\t\t\tjsc._capturedTarget = target;\r\n\t\t\tjsc._capturedTarget.setCapture();\r\n\t\t}\r\n\t},\r\n\r\n\r\n\treleaseTarget : function () {\r\n\t\t// IE\r\n\t\tif (jsc._capturedTarget) {\r\n\t\t\tjsc._capturedTarget.releaseCapture();\r\n\t\t\tjsc._capturedTarget = null;\r\n\t\t}\r\n\t},\r\n\r\n\r\n\ttriggerEvent : function (el, eventName, bubbles, cancelable) {\r\n\t\tif (!el) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar ev = null;\r\n\r\n\t\tif (typeof Event === 'function') {\r\n\t\t\tev = new Event(eventName, {\r\n\t\t\t\tbubbles: bubbles,\r\n\t\t\t\tcancelable: cancelable\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\t// IE\r\n\t\t\tev = window.document.createEvent('Event');\r\n\t\t\tev.initEvent(eventName, bubbles, cancelable);\r\n\t\t}\r\n\r\n\t\tif (!ev) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t// so that we know that the event was triggered internally\r\n\t\tjsc.setData(ev, 'internal', true);\r\n\r\n\t\tel.dispatchEvent(ev);\r\n\t\treturn true;\r\n\t},\r\n\r\n\r\n\ttriggerInputEvent : function (el, eventName, bubbles, cancelable) {\r\n\t\tif (!el) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (jsc.isTextInput(el)) {\r\n\t\t\tjsc.triggerEvent(el, eventName, bubbles, cancelable);\r\n\t\t}\r\n\t},\r\n\r\n\r\n\teventKey : function (ev) {\r\n\t\tvar keys = {\r\n\t\t\t9: 'Tab',\r\n\t\t\t13: 'Enter',\r\n\t\t\t27: 'Escape',\r\n\t\t};\r\n\t\tif (typeof ev.code === 'string') {\r\n\t\t\treturn ev.code;\r\n\t\t} else if (ev.keyCode !== undefined && keys.hasOwnProperty(ev.keyCode)) {\r\n\t\t\treturn keys[ev.keyCode];\r\n\t\t}\r\n\t\treturn null;\r\n\t},\r\n\r\n\r\n\tstrList : function (str) {\r\n\t\tif (!str) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\t\treturn str.replace(/^\\s+|\\s+$/g, '').split(/\\s+/);\r\n\t},\r\n\r\n\r\n\t// The className parameter (str) can only contain a single class name\r\n\thasClass : function (elm, className) {\r\n\t\tif (!className) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tif (elm.classList !== undefined) {\r\n\t\t\treturn elm.classList.contains(className);\r\n\t\t}\r\n\t\t// polyfill\r\n\t\treturn -1 != (' ' + elm.className.replace(/\\s+/g, ' ') + ' ').indexOf(' ' + className + ' ');\r\n\t},\r\n\r\n\r\n\t// The className parameter (str) can contain multiple class names separated by whitespace\r\n\taddClass : function (elm, className) {\r\n\t\tvar classNames = jsc.strList(className);\r\n\r\n\t\tif (elm.classList !== undefined) {\r\n\t\t\tfor (var i = 0; i < classNames.length; i += 1) {\r\n\t\t\t\telm.classList.add(classNames[i]);\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t// polyfill\r\n\t\tfor (var i = 0; i < classNames.length; i += 1) {\r\n\t\t\tif (!jsc.hasClass(elm, classNames[i])) {\r\n\t\t\t\telm.className += (elm.className ? ' ' : '') + classNames[i];\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\r\n\t// The className parameter (str) can contain multiple class names separated by whitespace\r\n\tremoveClass : function (elm, className) {\r\n\t\tvar classNames = jsc.strList(className);\r\n\r\n\t\tif (elm.classList !== undefined) {\r\n\t\t\tfor (var i = 0; i < classNames.length; i += 1) {\r\n\t\t\t\telm.classList.remove(classNames[i]);\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t// polyfill\r\n\t\tfor (var i = 0; i < classNames.length; i += 1) {\r\n\t\t\tvar repl = new RegExp(\r\n\t\t\t\t'^\\\\s*' + classNames[i] + '\\\\s*|' +\r\n\t\t\t\t'\\\\s*' + classNames[i] + '\\\\s*$|' +\r\n\t\t\t\t'\\\\s+' + classNames[i] + '(\\\\s+)',\r\n\t\t\t\t'g'\r\n\t\t\t);\r\n\t\t\telm.className = elm.className.replace(repl, '$1');\r\n\t\t}\r\n\t},\r\n\r\n\r\n\tgetCompStyle : function (elm) {\r\n\t\tvar compStyle = window.getComputedStyle ? window.getComputedStyle(elm) : elm.currentStyle;\r\n\r\n\t\t// Note: In Firefox, getComputedStyle returns null in a hidden iframe,\r\n\t\t// that's why we need to check if the returned value is non-empty\r\n\t\tif (!compStyle) {\r\n\t\t\treturn {};\r\n\t\t}\r\n\t\treturn compStyle;\r\n\t},\r\n\r\n\r\n\t// Note:\r\n\t// Setting a property to NULL reverts it to the state before it was first set\r\n\t// with the 'reversible' flag enabled\r\n\t//\r\n\tsetStyle : function (elm, styles, important, reversible) {\r\n\t\t// using '' for standard priority (IE10 apparently doesn't like value undefined)\r\n\t\tvar priority = important ? 'important' : '';\r\n\t\tvar origStyle = null;\r\n\r\n\t\tfor (var prop in styles) {\r\n\t\t\tif (styles.hasOwnProperty(prop)) {\r\n\t\t\t\tvar setVal = null;\r\n\r\n\t\t\t\tif (styles[prop] === null) {\r\n\t\t\t\t\t// reverting a property value\r\n\r\n\t\t\t\t\tif (!origStyle) {\r\n\t\t\t\t\t\t// get the original style object, but dont't try to create it if it doesn't exist\r\n\t\t\t\t\t\torigStyle = jsc.getData(elm, 'origStyle');\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (origStyle && origStyle.hasOwnProperty(prop)) {\r\n\t\t\t\t\t\t// we have property's original value -> use it\r\n\t\t\t\t\t\tsetVal = origStyle[prop];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// setting a property value\r\n\r\n\t\t\t\t\tif (reversible) {\r\n\t\t\t\t\t\tif (!origStyle) {\r\n\t\t\t\t\t\t\t// get the original style object and if it doesn't exist, create it\r\n\t\t\t\t\t\t\torigStyle = jsc.getData(elm, 'origStyle', {});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (!origStyle.hasOwnProperty(prop)) {\r\n\t\t\t\t\t\t\t// original property value not yet stored -> store it\r\n\t\t\t\t\t\t\torigStyle[prop] = elm.style[prop];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tsetVal = styles[prop];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (setVal !== null) {\r\n\t\t\t\t\telm.style.setProperty(prop, setVal, priority);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\r\n\thexColor : function (r, g, b) {\r\n\t\treturn '#' + (\r\n\t\t\t('0' + Math.round(r).toString(16)).substr(-2) +\r\n\t\t\t('0' + Math.round(g).toString(16)).substr(-2) +\r\n\t\t\t('0' + Math.round(b).toString(16)).substr(-2)\r\n\t\t).toUpperCase();\r\n\t},\r\n\r\n\r\n\thexaColor : function (r, g, b, a) {\r\n\t\treturn '#' + (\r\n\t\t\t('0' + Math.round(r).toString(16)).substr(-2) +\r\n\t\t\t('0' + Math.round(g).toString(16)).substr(-2) +\r\n\t\t\t('0' + Math.round(b).toString(16)).substr(-2) +\r\n\t\t\t('0' + Math.round(a * 255).toString(16)).substr(-2)\r\n\t\t).toUpperCase();\r\n\t},\r\n\r\n\r\n\trgbColor : function (r, g, b) {\r\n\t\treturn 'rgb(' +\r\n\t\t\tMath.round(r) + ',' +\r\n\t\t\tMath.round(g) + ',' +\r\n\t\t\tMath.round(b) +\r\n\t\t')';\r\n\t},\r\n\r\n\r\n\trgbaColor : function (r, g, b, a) {\r\n\t\treturn 'rgba(' +\r\n\t\t\tMath.round(r) + ',' +\r\n\t\t\tMath.round(g) + ',' +\r\n\t\t\tMath.round(b) + ',' +\r\n\t\t\t(Math.round((a===undefined || a===null ? 1 : a) * 100) / 100) +\r\n\t\t')';\r\n\t},\r\n\r\n\r\n\tlinearGradient : (function () {\r\n\r\n\t\tfunction getFuncName () {\r\n\t\t\tvar stdName = 'linear-gradient';\r\n\t\t\tvar prefixes = ['', '-webkit-', '-moz-', '-o-', '-ms-'];\r\n\t\t\tvar helper = window.document.createElement('div');\r\n\r\n\t\t\tfor (var i = 0; i < prefixes.length; i += 1) {\r\n\t\t\t\tvar tryFunc = prefixes[i] + stdName;\r\n\t\t\t\tvar tryVal = tryFunc + '(to right, rgba(0,0,0,0), rgba(0,0,0,0))';\r\n\r\n\t\t\t\thelper.style.background = tryVal;\r\n\t\t\t\tif (helper.style.background) { // CSS background successfully set -> function name is supported\r\n\t\t\t\t\treturn tryFunc;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn stdName; // fallback to standard 'linear-gradient' without vendor prefix\r\n\t\t}\r\n\r\n\t\tvar funcName = getFuncName();\r\n\r\n\t\treturn function () {\r\n\t\t\treturn funcName + '(' + Array.prototype.join.call(arguments, ', ') + ')';\r\n\t\t};\r\n\r\n\t})(),\r\n\r\n\r\n\tsetBorderRadius : function (elm, value) {\r\n\t\tjsc.setStyle(elm, {'border-radius' : value || '0'});\r\n\t},\r\n\r\n\r\n\tsetBoxShadow : function (elm, value) {\r\n\t\tjsc.setStyle(elm, {'box-shadow': value || 'none'});\r\n\t},\r\n\r\n\r\n\tgetElementPos : function (e, relativeToViewport) {\r\n\t\tvar x=0, y=0;\r\n\t\tvar rect = e.getBoundingClientRect();\r\n\t\tx = rect.left;\r\n\t\ty = rect.top;\r\n\t\tif (!relativeToViewport) {\r\n\t\t\tvar viewPos = jsc.getViewPos();\r\n\t\t\tx += viewPos[0];\r\n\t\t\ty += viewPos[1];\r\n\t\t}\r\n\t\treturn [x, y];\r\n\t},\r\n\r\n\r\n\tgetElementSize : function (e) {\r\n\t\treturn [e.offsetWidth, e.offsetHeight];\r\n\t},\r\n\r\n\r\n\t// get pointer's X/Y coordinates relative to viewport\r\n\tgetAbsPointerPos : function (e) {\r\n\t\tvar x = 0, y = 0;\r\n\t\tif (typeof e.changedTouches !== 'undefined' && e.changedTouches.length) {\r\n\t\t\t// touch devices\r\n\t\t\tx = e.changedTouches[0].clientX;\r\n\t\t\ty = e.changedTouches[0].clientY;\r\n\t\t} else if (typeof e.clientX === 'number') {\r\n\t\t\tx = e.clientX;\r\n\t\t\ty = e.clientY;\r\n\t\t}\r\n\t\treturn { x: x, y: y };\r\n\t},\r\n\r\n\r\n\t// get pointer's X/Y coordinates relative to target element\r\n\tgetRelPointerPos : function (e) {\r\n\t\tvar target = e.target || e.srcElement;\r\n\t\tvar targetRect = target.getBoundingClientRect();\r\n\r\n\t\tvar x = 0, y = 0;\r\n\r\n\t\tvar clientX = 0, clientY = 0;\r\n\t\tif (typeof e.changedTouches !== 'undefined' && e.changedTouches.length) {\r\n\t\t\t// touch devices\r\n\t\t\tclientX = e.changedTouches[0].clientX;\r\n\t\t\tclientY = e.changedTouches[0].clientY;\r\n\t\t} else if (typeof e.clientX === 'number') {\r\n\t\t\tclientX = e.clientX;\r\n\t\t\tclientY = e.clientY;\r\n\t\t}\r\n\r\n\t\tx = clientX - targetRect.left;\r\n\t\ty = clientY - targetRect.top;\r\n\t\treturn { x: x, y: y };\r\n\t},\r\n\r\n\r\n\tgetViewPos : function () {\r\n\t\tvar doc = window.document.documentElement;\r\n\t\treturn [\r\n\t\t\t(window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0),\r\n\t\t\t(window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0)\r\n\t\t];\r\n\t},\r\n\r\n\r\n\tgetViewSize : function () {\r\n\t\tvar doc = window.document.documentElement;\r\n\t\treturn [\r\n\t\t\t(window.innerWidth || doc.clientWidth),\r\n\t\t\t(window.innerHeight || doc.clientHeight),\r\n\t\t];\r\n\t},\r\n\r\n\r\n\t// r: 0-255\r\n\t// g: 0-255\r\n\t// b: 0-255\r\n\t//\r\n\t// returns: [ 0-360, 0-100, 0-100 ]\r\n\t//\r\n\tRGB_HSV : function (r, g, b) {\r\n\t\tr /= 255;\r\n\t\tg /= 255;\r\n\t\tb /= 255;\r\n\t\tvar n = Math.min(Math.min(r,g),b);\r\n\t\tvar v = Math.max(Math.max(r,g),b);\r\n\t\tvar m = v - n;\r\n\t\tif (m === 0) { return [ null, 0, 100 * v ]; }\r\n\t\tvar h = r===n ? 3+(b-g)/m : (g===n ? 5+(r-b)/m : 1+(g-r)/m);\r\n\t\treturn [\r\n\t\t\t60 * (h===6?0:h),\r\n\t\t\t100 * (m/v),\r\n\t\t\t100 * v\r\n\t\t];\r\n\t},\r\n\r\n\r\n\t// h: 0-360\r\n\t// s: 0-100\r\n\t// v: 0-100\r\n\t//\r\n\t// returns: [ 0-255, 0-255, 0-255 ]\r\n\t//\r\n\tHSV_RGB : function (h, s, v) {\r\n\t\tvar u = 255 * (v / 100);\r\n\r\n\t\tif (h === null) {\r\n\t\t\treturn [ u, u, u ];\r\n\t\t}\r\n\r\n\t\th /= 60;\r\n\t\ts /= 100;\r\n\r\n\t\tvar i = Math.floor(h);\r\n\t\tvar f = i%2 ? h-i : 1-(h-i);\r\n\t\tvar m = u * (1 - s);\r\n\t\tvar n = u * (1 - s * f);\r\n\t\tswitch (i) {\r\n\t\t\tcase 6:\r\n\t\t\tcase 0: return [u,n,m];\r\n\t\t\tcase 1: return [n,u,m];\r\n\t\t\tcase 2: return [m,u,n];\r\n\t\t\tcase 3: return [m,n,u];\r\n\t\t\tcase 4: return [n,m,u];\r\n\t\t\tcase 5: return [u,m,n];\r\n\t\t}\r\n\t},\r\n\r\n\r\n\tparseColorString : function (str) {\r\n\t\tvar ret = {\r\n\t\t\trgba: null,\r\n\t\t\tformat: null // 'hex' | 'hexa' | 'rgb' | 'rgba'\r\n\t\t};\r\n\r\n\t\tvar m;\r\n\r\n\t\tif (m = str.match(/^\\W*([0-9A-F]{3,8})\\W*$/i)) {\r\n\t\t\t// HEX notation\r\n\r\n\t\t\tif (m[1].length === 8) {\r\n\t\t\t\t// 8-char notation (= with alpha)\r\n\t\t\t\tret.format = 'hexa';\r\n\t\t\t\tret.rgba = [\r\n\t\t\t\t\tparseInt(m[1].substr(0,2),16),\r\n\t\t\t\t\tparseInt(m[1].substr(2,2),16),\r\n\t\t\t\t\tparseInt(m[1].substr(4,2),16),\r\n\t\t\t\t\tparseInt(m[1].substr(6,2),16) / 255\r\n\t\t\t\t];\r\n\r\n\t\t\t} else if (m[1].length === 6) {\r\n\t\t\t\t// 6-char notation\r\n\t\t\t\tret.format = 'hex';\r\n\t\t\t\tret.rgba = [\r\n\t\t\t\t\tparseInt(m[1].substr(0,2),16),\r\n\t\t\t\t\tparseInt(m[1].substr(2,2),16),\r\n\t\t\t\t\tparseInt(m[1].substr(4,2),16),\r\n\t\t\t\t\tnull\r\n\t\t\t\t];\r\n\r\n\t\t\t} else if (m[1].length === 3) {\r\n\t\t\t\t// 3-char notation\r\n\t\t\t\tret.format = 'hex';\r\n\t\t\t\tret.rgba = [\r\n\t\t\t\t\tparseInt(m[1].charAt(0) + m[1].charAt(0),16),\r\n\t\t\t\t\tparseInt(m[1].charAt(1) + m[1].charAt(1),16),\r\n\t\t\t\t\tparseInt(m[1].charAt(2) + m[1].charAt(2),16),\r\n\t\t\t\t\tnull\r\n\t\t\t\t];\r\n\r\n\t\t\t} else {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\treturn ret;\r\n\t\t}\r\n\r\n\t\tif (m = str.match(/^\\W*rgba?\\(([^)]*)\\)\\W*$/i)) {\r\n\t\t\t// rgb(...) or rgba(...) notation\r\n\r\n\t\t\tvar par = m[1].split(',');\r\n\t\t\tvar re = /^\\s*(\\d+|\\d*\\.\\d+|\\d+\\.\\d*)\\s*$/;\r\n\t\t\tvar mR, mG, mB, mA;\r\n\t\t\tif (\r\n\t\t\t\tpar.length >= 3 &&\r\n\t\t\t\t(mR = par[0].match(re)) &&\r\n\t\t\t\t(mG = par[1].match(re)) &&\r\n\t\t\t\t(mB = par[2].match(re))\r\n\t\t\t) {\r\n\t\t\t\tret.format = 'rgb';\r\n\t\t\t\tret.rgba = [\r\n\t\t\t\t\tparseFloat(mR[1]) || 0,\r\n\t\t\t\t\tparseFloat(mG[1]) || 0,\r\n\t\t\t\t\tparseFloat(mB[1]) || 0,\r\n\t\t\t\t\tnull\r\n\t\t\t\t];\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\tpar.length >= 4 &&\r\n\t\t\t\t\t(mA = par[3].match(re))\r\n\t\t\t\t) {\r\n\t\t\t\t\tret.format = 'rgba';\r\n\t\t\t\t\tret.rgba[3] = parseFloat(mA[1]) || 0;\r\n\t\t\t\t}\r\n\t\t\t\treturn ret;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t},\r\n\r\n\r\n\tparsePaletteValue : function (mixed) {\r\n\t\tvar vals = [];\r\n\r\n\t\tif (typeof mixed === 'string') { // input is a string of space separated color values\r\n\t\t\t// rgb() and rgba() may contain spaces too, so let's find all color values by regex\r\n\t\t\tmixed.replace(/#[0-9A-F]{3}([0-9A-F]{3})?|rgba?\\(([^)]*)\\)/ig, function (val) {\r\n\t\t\t\tvals.push(val);\r\n\t\t\t});\r\n\t\t} else if (Array.isArray(mixed)) { // input is an array of color values\r\n\t\t\tvals = mixed;\r\n\t\t}\r\n\r\n\t\t// convert all values into uniform color format\r\n\r\n\t\tvar colors = [];\r\n\r\n\t\tfor (var i = 0; i < vals.length; i++) {\r\n\t\t\tvar color = jsc.parseColorString(vals[i]);\r\n\t\t\tif (color) {\r\n\t\t\t\tcolors.push(color);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn colors;\r\n\t},\r\n\r\n\r\n\tcontainsTranparentColor : function (colors) {\r\n\t\tfor (var i = 0; i < colors.length; i++) {\r\n\t\t\tvar a = colors[i].rgba[3];\r\n\t\t\tif (a !== null && a < 1.0) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\r\n\r\n\tisAlphaFormat : function (format) {\r\n\t\tswitch (format.toLowerCase()) {\r\n\t\tcase 'hexa':\r\n\t\tcase 'rgba':\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\r\n\r\n\t// Canvas scaling for retina displays\r\n\t//\r\n\t// adapted from https://www.html5rocks.com/en/tutorials/canvas/hidpi/\r\n\t//\r\n\tscaleCanvasForHighDPR : function (canvas) {\r\n\t\tvar dpr = window.devicePixelRatio || 1;\r\n\t\tcanvas.width *= dpr;\r\n\t\tcanvas.height *= dpr;\r\n\t\tvar ctx = canvas.getContext('2d');\r\n\t\tctx.scale(dpr, dpr);\r\n\t},\r\n\r\n\r\n\tgenColorPreviewCanvas : function (color, separatorPos, specWidth, scaleForHighDPR) {\r\n\r\n\t\tvar sepW = Math.round(jsc.pub.previewSeparator.length);\r\n\t\tvar sqSize = jsc.pub.chessboardSize;\r\n\t\tvar sqColor1 = jsc.pub.chessboardColor1;\r\n\t\tvar sqColor2 = jsc.pub.chessboardColor2;\r\n\r\n\t\tvar cWidth = specWidth ? specWidth : sqSize * 2;\r\n\t\tvar cHeight = sqSize * 2;\r\n\r\n\t\tvar canvas = jsc.createEl('canvas');\r\n\t\tvar ctx = canvas.getContext('2d');\r\n\r\n\t\tcanvas.width = cWidth;\r\n\t\tcanvas.height = cHeight;\r\n\t\tif (scaleForHighDPR) {\r\n\t\t\tjsc.scaleCanvasForHighDPR(canvas);\r\n\t\t}\r\n\r\n\t\t// transparency chessboard - background\r\n\t\tctx.fillStyle = sqColor1;\r\n\t\tctx.fillRect(0, 0, cWidth, cHeight);\r\n\r\n\t\t// transparency chessboard - squares\r\n\t\tctx.fillStyle = sqColor2;\r\n\t\tfor (var x = 0; x < cWidth; x += sqSize * 2) {\r\n\t\t\tctx.fillRect(x, 0, sqSize, sqSize);\r\n\t\t\tctx.fillRect(x + sqSize, sqSize, sqSize, sqSize);\r\n\t\t}\r\n\r\n\t\tif (color) {\r\n\t\t\t// actual color in foreground\r\n\t\t\tctx.fillStyle = color;\r\n\t\t\tctx.fillRect(0, 0, cWidth, cHeight);\r\n\t\t}\r\n\r\n\t\tvar start = null;\r\n\t\tswitch (separatorPos) {\r\n\t\t\tcase 'left':\r\n\t\t\t\tstart = 0;\r\n\t\t\t\tctx.clearRect(0, 0, sepW/2, cHeight);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'right':\r\n\t\t\t\tstart = cWidth - sepW;\r\n\t\t\t\tctx.clearRect(cWidth - (sepW/2), 0, sepW/2, cHeight);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t\tif (start !== null) {\r\n\t\t\tctx.lineWidth = 1;\r\n\t\t\tfor (var i = 0; i < jsc.pub.previewSeparator.length; i += 1) {\r\n\t\t\t\tctx.beginPath();\r\n\t\t\t\tctx.strokeStyle = jsc.pub.previewSeparator[i];\r\n\t\t\t\tctx.moveTo(0.5 + start + i, 0);\r\n\t\t\t\tctx.lineTo(0.5 + start + i, cHeight);\r\n\t\t\t\tctx.stroke();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tcanvas: canvas,\r\n\t\t\twidth: cWidth,\r\n\t\t\theight: cHeight,\r\n\t\t};\r\n\t},\r\n\r\n\r\n\t// if position or width is not set => fill the entire element (0%-100%)\r\n\tgenColorPreviewGradient : function (color, position, width) {\r\n\t\tvar params = [];\r\n\r\n\t\tif (position && width) {\r\n\t\t\tparams = [\r\n\t\t\t\t'to ' + {'left':'right', 'right':'left'}[position],\r\n\t\t\t\tcolor + ' 0%',\r\n\t\t\t\tcolor + ' ' + width + 'px',\r\n\t\t\t\t'rgba(0,0,0,0) ' + (width + 1) + 'px',\r\n\t\t\t\t'rgba(0,0,0,0) 100%',\r\n\t\t\t];\r\n\t\t} else {\r\n\t\t\tparams = [\r\n\t\t\t\t'to right',\r\n\t\t\t\tcolor + ' 0%',\r\n\t\t\t\tcolor + ' 100%',\r\n\t\t\t];\r\n\t\t}\r\n\r\n\t\treturn jsc.linearGradient.apply(this, params);\r\n\t},\r\n\r\n\r\n\tredrawPosition : function () {\r\n\r\n\t\tif (!jsc.picker || !jsc.picker.owner) {\r\n\t\t\treturn; // picker is not shown\r\n\t\t}\r\n\r\n\t\tvar thisObj = jsc.picker.owner;\r\n\r\n\t\tvar tp, vp;\r\n\r\n\t\tif (thisObj.fixed) {\r\n\t\t\t// Fixed elements are positioned relative to viewport,\r\n\t\t\t// therefore we can ignore the scroll offset\r\n\t\t\ttp = jsc.getElementPos(thisObj.targetElement, true); // target pos\r\n\t\t\tvp = [0, 0]; // view pos\r\n\t\t} else {\r\n\t\t\ttp = jsc.getElementPos(thisObj.targetElement); // target pos\r\n\t\t\tvp = jsc.getViewPos(); // view pos\r\n\t\t}\r\n\r\n\t\tvar ts = jsc.getElementSize(thisObj.targetElement); // target size\r\n\t\tvar vs = jsc.getViewSize(); // view size\r\n\t\tvar pd = jsc.getPickerDims(thisObj);\r\n\t\tvar ps = [pd.borderW, pd.borderH]; // picker outer size\r\n\t\tvar a, b, c;\r\n\t\tswitch (thisObj.position.toLowerCase()) {\r\n\t\t\tcase 'left': a=1; b=0; c=-1; break;\r\n\t\t\tcase 'right':a=1; b=0; c=1; break;\r\n\t\t\tcase 'top': a=0; b=1; c=-1; break;\r\n\t\t\tdefault: a=0; b=1; c=1; break;\r\n\t\t}\r\n\t\tvar l = (ts[b]+ps[b])/2;\r\n\r\n\t\t// compute picker position\r\n\t\tif (!thisObj.smartPosition) {\r\n\t\t\tvar pp = [\r\n\t\t\t\ttp[a],\r\n\t\t\t\ttp[b]+ts[b]-l+l*c\r\n\t\t\t];\r\n\t\t} else {\r\n\t\t\tvar pp = [\r\n\t\t\t\t-vp[a]+tp[a]+ps[a] > vs[a] ?\r\n\t\t\t\t\t(-vp[a]+tp[a]+ts[a]/2 > vs[a]/2 && tp[a]+ts[a]-ps[a] >= 0 ? tp[a]+ts[a]-ps[a] : tp[a]) :\r\n\t\t\t\t\ttp[a],\r\n\t\t\t\t-vp[b]+tp[b]+ts[b]+ps[b]-l+l*c > vs[b] ?\r\n\t\t\t\t\t(-vp[b]+tp[b]+ts[b]/2 > vs[b]/2 && tp[b]+ts[b]-l-l*c >= 0 ? tp[b]+ts[b]-l-l*c : tp[b]+ts[b]-l+l*c) :\r\n\t\t\t\t\t(tp[b]+ts[b]-l+l*c >= 0 ? tp[b]+ts[b]-l+l*c : tp[b]+ts[b]-l-l*c)\r\n\t\t\t];\r\n\t\t}\r\n\r\n\t\tvar x = pp[a];\r\n\t\tvar y = pp[b];\r\n\t\tvar positionValue = thisObj.fixed ? 'fixed' : 'absolute';\r\n\t\tvar contractShadow =\r\n\t\t\t(pp[0] + ps[0] > tp[0] || pp[0] < tp[0] + ts[0]) &&\r\n\t\t\t(pp[1] + ps[1] < tp[1] + ts[1]);\r\n\r\n\t\tjsc._drawPosition(thisObj, x, y, positionValue, contractShadow);\r\n\t},\r\n\r\n\r\n\t_drawPosition : function (thisObj, x, y, positionValue, contractShadow) {\r\n\t\tvar vShadow = contractShadow ? 0 : thisObj.shadowBlur; // px\r\n\r\n\t\tjsc.picker.wrap.style.position = positionValue;\r\n\t\tjsc.picker.wrap.style.left = x + 'px';\r\n\t\tjsc.picker.wrap.style.top = y + 'px';\r\n\r\n\t\tjsc.setBoxShadow(\r\n\t\t\tjsc.picker.boxS,\r\n\t\t\tthisObj.shadow ?\r\n\t\t\t\tnew jsc.BoxShadow(0, vShadow, thisObj.shadowBlur, 0, thisObj.shadowColor) :\r\n\t\t\t\tnull);\r\n\t},\r\n\r\n\r\n\tgetPickerDims : function (thisObj) {\r\n\t\tvar w = 2 * thisObj.controlBorderWidth + thisObj.width;\r\n\t\tvar h = 2 * thisObj.controlBorderWidth + thisObj.height;\r\n\r\n\t\tvar sliderSpace = 2 * thisObj.controlBorderWidth + 2 * jsc.getControlPadding(thisObj) + thisObj.sliderSize;\r\n\r\n\t\tif (jsc.getSliderChannel(thisObj)) {\r\n\t\t\tw += sliderSpace;\r\n\t\t}\r\n\t\tif (thisObj.hasAlphaChannel()) {\r\n\t\t\tw += sliderSpace;\r\n\t\t}\r\n\r\n\t\tvar pal = jsc.getPaletteDims(thisObj, w);\r\n\r\n\t\tif (pal.height) {\r\n\t\t\th += pal.height + thisObj.padding;\r\n\t\t}\r\n\t\tif (thisObj.closeButton) {\r\n\t\t\th += 2 * thisObj.controlBorderWidth + thisObj.padding + thisObj.buttonHeight;\r\n\t\t}\r\n\r\n\t\tvar pW = w + (2 * thisObj.padding);\r\n\t\tvar pH = h + (2 * thisObj.padding);\r\n\r\n\t\treturn {\r\n\t\t\tcontentW: w,\r\n\t\t\tcontentH: h,\r\n\t\t\tpaddedW: pW,\r\n\t\t\tpaddedH: pH,\r\n\t\t\tborderW: pW + (2 * thisObj.borderWidth),\r\n\t\t\tborderH: pH + (2 * thisObj.borderWidth),\r\n\t\t\tpalette: pal,\r\n\t\t};\r\n\t},\r\n\r\n\r\n\tgetPaletteDims : function (thisObj, width) {\r\n\t\tvar cols = 0, rows = 0, cellW = 0, cellH = 0, height = 0;\r\n\t\tvar sampleCount = thisObj._palette ? thisObj._palette.length : 0;\r\n\r\n\t\tif (sampleCount) {\r\n\t\t\tcols = thisObj.paletteCols;\r\n\t\t\trows = cols > 0 ? Math.ceil(sampleCount / cols) : 0;\r\n\r\n\t\t\t// color sample's dimensions (includes border)\r\n\t\t\tcellW = Math.max(1, Math.floor((width - ((cols - 1) * thisObj.paletteSpacing)) / cols));\r\n\t\t\tcellH = thisObj.paletteHeight ? Math.min(thisObj.paletteHeight, cellW) : cellW;\r\n\t\t}\r\n\r\n\t\tif (rows) {\r\n\t\t\theight =\r\n\t\t\t\trows * cellH +\r\n\t\t\t\t(rows - 1) * thisObj.paletteSpacing;\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tcols: cols,\r\n\t\t\trows: rows,\r\n\t\t\tcellW: cellW,\r\n\t\t\tcellH: cellH,\r\n\t\t\twidth: width,\r\n\t\t\theight: height,\r\n\t\t};\r\n\t},\r\n\r\n\r\n\tgetControlPadding : function (thisObj) {\r\n\t\treturn Math.max(\r\n\t\t\tthisObj.padding / 2,\r\n\t\t\t(2 * thisObj.pointerBorderWidth + thisObj.pointerThickness) - thisObj.controlBorderWidth\r\n\t\t);\r\n\t},\r\n\r\n\r\n\tgetPadYChannel : function (thisObj) {\r\n\t\tswitch (thisObj.mode.charAt(1).toLowerCase()) {\r\n\t\t\tcase 'v': return 'v'; break;\r\n\t\t}\r\n\t\treturn 's';\r\n\t},\r\n\r\n\r\n\tgetSliderChannel : function (thisObj) {\r\n\t\tif (thisObj.mode.length > 2) {\r\n\t\t\tswitch (thisObj.mode.charAt(2).toLowerCase()) {\r\n\t\t\t\tcase 's': return 's'; break;\r\n\t\t\t\tcase 'v': return 'v'; break;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn null;\r\n\t},\r\n\r\n\r\n\t// calls function specified in picker's property\r\n\ttriggerCallback : function (thisObj, prop) {\r\n\t\tif (!thisObj[prop]) {\r\n\t\t\treturn; // callback func not specified\r\n\t\t}\r\n\t\tvar callback = null;\r\n\r\n\t\tif (typeof thisObj[prop] === 'string') {\r\n\t\t\t// string with code\r\n\t\t\ttry {\r\n\t\t\t\tcallback = new Function (thisObj[prop]);\r\n\t\t\t} catch (e) {\r\n\t\t\t\tconsole.error(e);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\t// function\r\n\t\t\tcallback = thisObj[prop];\r\n\t\t}\r\n\r\n\t\tif (callback) {\r\n\t\t\tcallback.call(thisObj);\r\n\t\t}\r\n\t},\r\n\r\n\r\n\t// Triggers a color change related event(s) on all picker instances.\r\n\t// It is possible to specify multiple events separated with a space.\r\n\ttriggerGlobal : function (eventNames) {\r\n\t\tvar inst = jsc.getInstances();\r\n\t\tfor (var i = 0; i < inst.length; i += 1) {\r\n\t\t\tinst[i].trigger(eventNames);\r\n\t\t}\r\n\t},\r\n\r\n\r\n\t_pointerMoveEvent : {\r\n\t\tmouse: 'mousemove',\r\n\t\ttouch: 'touchmove'\r\n\t},\r\n\t_pointerEndEvent : {\r\n\t\tmouse: 'mouseup',\r\n\t\ttouch: 'touchend'\r\n\t},\r\n\r\n\r\n\t_pointerOrigin : null,\r\n\t_capturedTarget : null,\r\n\r\n\r\n\tonDocumentKeyUp : function (e) {\r\n\t\tif (['Tab', 'Escape'].indexOf(jsc.eventKey(e)) !== -1) {\r\n\t\t\tif (jsc.picker && jsc.picker.owner) {\r\n\t\t\t\tjsc.picker.owner.tryHide();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\r\n\tonWindowResize : function (e) {\r\n\t\tjsc.redrawPosition();\r\n\t},\r\n\r\n\r\n\tonWindowScroll : function (e) {\r\n\t\tjsc.redrawPosition();\r\n\t},\r\n\r\n\r\n\tonParentScroll : function (e) {\r\n\t\t// hide the picker when one of the parent elements is scrolled\r\n\t\tif (jsc.picker && jsc.picker.owner) {\r\n\t\t\tjsc.picker.owner.tryHide();\r\n\t\t}\r\n\t},\r\n\r\n\r\n\tonDocumentMouseDown : function (e) {\r\n\t\tvar target = e.target || e.srcElement;\r\n\r\n\t\tif (target.jscolor && target.jscolor instanceof jsc.pub) { // clicked targetElement -> show picker\r\n\t\t\tif (target.jscolor.showOnClick && !target.disabled) {\r\n\t\t\t\ttarget.jscolor.show();\r\n\t\t\t}\r\n\t\t} else if (jsc.getData(target, 'gui')) { // clicked jscolor's GUI element\r\n\t\t\tvar control = jsc.getData(target, 'control');\r\n\t\t\tif (control) {\r\n\t\t\t\t// jscolor's control\r\n\t\t\t\tjsc.onControlPointerStart(e, target, jsc.getData(target, 'control'), 'mouse');\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\t// mouse is outside the picker's controls -> hide the color picker!\r\n\t\t\tif (jsc.picker && jsc.picker.owner) {\r\n\t\t\t\tjsc.picker.owner.tryHide();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\r\n\tonPickerTouchStart : function (e) {\r\n\t\tvar target = e.target || e.srcElement;\r\n\r\n\t\tif (jsc.getData(target, 'control')) {\r\n\t\t\tjsc.onControlPointerStart(e, target, jsc.getData(target, 'control'), 'touch');\r\n\t\t}\r\n\t},\r\n\r\n\r\n\tonControlPointerStart : function (e, target, controlName, pointerType) {\r\n\t\tvar thisObj = jsc.getData(target, 'instance');\r\n\r\n\t\tjsc.preventDefault(e);\r\n\t\tjsc.captureTarget(target);\r\n\r\n\t\tvar registerDragEvents = function (doc, offset) {\r\n\t\t\tjsc.attachGroupEvent('drag', doc, jsc._pointerMoveEvent[pointerType],\r\n\t\t\t\tjsc.onDocumentPointerMove(e, target, controlName, pointerType, offset));\r\n\t\t\tjsc.attachGroupEvent('drag', doc, jsc._pointerEndEvent[pointerType],\r\n\t\t\t\tjsc.onDocumentPointerEnd(e, target, controlName, pointerType));\r\n\t\t};\r\n\r\n\t\tregisterDragEvents(window.document, [0, 0]);\r\n\r\n\t\tif (window.parent && window.frameElement) {\r\n\t\t\tvar rect = window.frameElement.getBoundingClientRect();\r\n\t\t\tvar ofs = [-rect.left, -rect.top];\r\n\t\t\tregisterDragEvents(window.parent.window.document, ofs);\r\n\t\t}\r\n\r\n\t\tvar abs = jsc.getAbsPointerPos(e);\r\n\t\tvar rel = jsc.getRelPointerPos(e);\r\n\t\tjsc._pointerOrigin = {\r\n\t\t\tx: abs.x - rel.x,\r\n\t\t\ty: abs.y - rel.y\r\n\t\t};\r\n\r\n\t\tswitch (controlName) {\r\n\t\tcase 'pad':\r\n\t\t\t// if the value slider is at the bottom, move it up\r\n\t\t\tif (jsc.getSliderChannel(thisObj) === 'v' && thisObj.channels.v === 0) {\r\n\t\t\t\tthisObj.fromHSVA(null, null, 100, null);\r\n\t\t\t}\r\n\t\t\tjsc.setPad(thisObj, e, 0, 0);\r\n\t\t\tbreak;\r\n\r\n\t\tcase 'sld':\r\n\t\t\tjsc.setSld(thisObj, e, 0);\r\n\t\t\tbreak;\r\n\r\n\t\tcase 'asld':\r\n\t\t\tjsc.setASld(thisObj, e, 0);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tthisObj.trigger('input');\r\n\t},\r\n\r\n\r\n\tonDocumentPointerMove : function (e, target, controlName, pointerType, offset) {\r\n\t\treturn function (e) {\r\n\t\t\tvar thisObj = jsc.getData(target, 'instance');\r\n\t\t\tswitch (controlName) {\r\n\t\t\tcase 'pad':\r\n\t\t\t\tjsc.setPad(thisObj, e, offset[0], offset[1]);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'sld':\r\n\t\t\t\tjsc.setSld(thisObj, e, offset[1]);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'asld':\r\n\t\t\t\tjsc.setASld(thisObj, e, offset[1]);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tthisObj.trigger('input');\r\n\t\t}\r\n\t},\r\n\r\n\r\n\tonDocumentPointerEnd : function (e, target, controlName, pointerType) {\r\n\t\treturn function (e) {\r\n\t\t\tvar thisObj = jsc.getData(target, 'instance');\r\n\t\t\tjsc.detachGroupEvents('drag');\r\n\t\t\tjsc.releaseTarget();\r\n\r\n\t\t\t// Always trigger changes AFTER detaching outstanding mouse handlers,\r\n\t\t\t// in case some color change that occured in user-defined onChange/onInput handler\r\n\t\t\t// intruded into current mouse events\r\n\t\t\tthisObj.trigger('input');\r\n\t\t\tthisObj.trigger('change');\r\n\t\t};\r\n\t},\r\n\r\n\r\n\tonPaletteSampleClick : function (e) {\r\n\t\tvar target = e.currentTarget;\r\n\t\tvar thisObj = jsc.getData(target, 'instance');\r\n\t\tvar color = jsc.getData(target, 'color');\r\n\r\n\t\t// when format is flexible, use the original format of this color sample\r\n\t\tif (thisObj.format.toLowerCase() === 'any') {\r\n\t\t\tthisObj._setFormat(color.format); // adapt format\r\n\t\t\tif (!jsc.isAlphaFormat(thisObj.getFormat())) {\r\n\t\t\t\tcolor.rgba[3] = 1.0; // when switching to a format that doesn't support alpha, set full opacity\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// if this color doesn't specify alpha, use alpha of 1.0 (if applicable)\r\n\t\tif (color.rgba[3] === null) {\r\n\t\t\tif (thisObj.paletteSetsAlpha === true || (thisObj.paletteSetsAlpha === 'auto' && thisObj._paletteHasTransparency)) {\r\n\t\t\t\tcolor.rgba[3] = 1.0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthisObj.fromRGBA.apply(thisObj, color.rgba);\r\n\r\n\t\tthisObj.trigger('input');\r\n\t\tthisObj.trigger('change');\r\n\r\n\t\tif (thisObj.hideOnPaletteClick) {\r\n\t\t\tthisObj.hide();\r\n\t\t}\r\n\t},\r\n\r\n\r\n\tsetPad : function (thisObj, e, ofsX, ofsY) {\r\n\t\tvar pointerAbs = jsc.getAbsPointerPos(e);\r\n\t\tvar x = ofsX + pointerAbs.x - jsc._pointerOrigin.x - thisObj.padding - thisObj.controlBorderWidth;\r\n\t\tvar y = ofsY + pointerAbs.y - jsc._pointerOrigin.y - thisObj.padding - thisObj.controlBorderWidth;\r\n\r\n\t\tvar xVal = x * (360 / (thisObj.width - 1));\r\n\t\tvar yVal = 100 - (y * (100 / (thisObj.height - 1)));\r\n\r\n\t\tswitch (jsc.getPadYChannel(thisObj)) {\r\n\t\tcase 's': thisObj.fromHSVA(xVal, yVal, null, null); break;\r\n\t\tcase 'v': thisObj.fromHSVA(xVal, null, yVal, null); break;\r\n\t\t}\r\n\t},\r\n\r\n\r\n\tsetSld : function (thisObj, e, ofsY) {\r\n\t\tvar pointerAbs = jsc.getAbsPointerPos(e);\r\n\t\tvar y = ofsY + pointerAbs.y - jsc._pointerOrigin.y - thisObj.padding - thisObj.controlBorderWidth;\r\n\t\tvar yVal = 100 - (y * (100 / (thisObj.height - 1)));\r\n\r\n\t\tswitch (jsc.getSliderChannel(thisObj)) {\r\n\t\tcase 's': thisObj.fromHSVA(null, yVal, null, null); break;\r\n\t\tcase 'v': thisObj.fromHSVA(null, null, yVal, null); break;\r\n\t\t}\r\n\t},\r\n\r\n\r\n\tsetASld : function (thisObj, e, ofsY) {\r\n\t\tvar pointerAbs = jsc.getAbsPointerPos(e);\r\n\t\tvar y = ofsY + pointerAbs.y - jsc._pointerOrigin.y - thisObj.padding - thisObj.controlBorderWidth;\r\n\t\tvar yVal = 1.0 - (y * (1.0 / (thisObj.height - 1)));\r\n\r\n\t\tif (yVal < 1.0) {\r\n\t\t\t// if format is flexible and the current format doesn't support alpha, switch to a suitable one\r\n\t\t\tvar fmt = thisObj.getFormat();\r\n\t\t\tif (thisObj.format.toLowerCase() === 'any' && !jsc.isAlphaFormat(fmt)) {\r\n\t\t\t\tthisObj._setFormat(fmt === 'hex' ? 'hexa' : 'rgba');\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthisObj.fromHSVA(null, null, null, yVal);\r\n\t},\r\n\r\n\r\n\tcreatePadCanvas : function () {\r\n\r\n\t\tvar ret = {\r\n\t\t\telm: null,\r\n\t\t\tdraw: null\r\n\t\t};\r\n\r\n\t\tvar canvas = jsc.createEl('canvas');\r\n\t\tvar ctx = canvas.getContext('2d');\r\n\r\n\t\tvar drawFunc = function (width, height, type) {\r\n\t\t\tcanvas.width = width;\r\n\t\t\tcanvas.height = height;\r\n\r\n\t\t\tctx.clearRect(0, 0, canvas.width, canvas.height);\r\n\r\n\t\t\tvar hGrad = ctx.createLinearGradient(0, 0, canvas.width, 0);\r\n\t\t\thGrad.addColorStop(0 / 6, '#F00');\r\n\t\t\thGrad.addColorStop(1 / 6, '#FF0');\r\n\t\t\thGrad.addColorStop(2 / 6, '#0F0');\r\n\t\t\thGrad.addColorStop(3 / 6, '#0FF');\r\n\t\t\thGrad.addColorStop(4 / 6, '#00F');\r\n\t\t\thGrad.addColorStop(5 / 6, '#F0F');\r\n\t\t\thGrad.addColorStop(6 / 6, '#F00');\r\n\r\n\t\t\tctx.fillStyle = hGrad;\r\n\t\t\tctx.fillRect(0, 0, canvas.width, canvas.height);\r\n\r\n\t\t\tvar vGrad = ctx.createLinearGradient(0, 0, 0, canvas.height);\r\n\t\t\tswitch (type.toLowerCase()) {\r\n\t\t\tcase 's':\r\n\t\t\t\tvGrad.addColorStop(0, 'rgba(255,255,255,0)');\r\n\t\t\t\tvGrad.addColorStop(1, 'rgba(255,255,255,1)');\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'v':\r\n\t\t\t\tvGrad.addColorStop(0, 'rgba(0,0,0,0)');\r\n\t\t\t\tvGrad.addColorStop(1, 'rgba(0,0,0,1)');\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tctx.fillStyle = vGrad;\r\n\t\t\tctx.fillRect(0, 0, canvas.width, canvas.height);\r\n\t\t};\r\n\r\n\t\tret.elm = canvas;\r\n\t\tret.draw = drawFunc;\r\n\r\n\t\treturn ret;\r\n\t},\r\n\r\n\r\n\tcreateSliderGradient : function () {\r\n\r\n\t\tvar ret = {\r\n\t\t\telm: null,\r\n\t\t\tdraw: null\r\n\t\t};\r\n\r\n\t\tvar canvas = jsc.createEl('canvas');\r\n\t\tvar ctx = canvas.getContext('2d');\r\n\r\n\t\tvar drawFunc = function (width, height, color1, color2) {\r\n\t\t\tcanvas.width = width;\r\n\t\t\tcanvas.height = height;\r\n\r\n\t\t\tctx.clearRect(0, 0, canvas.width, canvas.height);\r\n\r\n\t\t\tvar grad = ctx.createLinearGradient(0, 0, 0, canvas.height);\r\n\t\t\tgrad.addColorStop(0, color1);\r\n\t\t\tgrad.addColorStop(1, color2);\r\n\r\n\t\t\tctx.fillStyle = grad;\r\n\t\t\tctx.fillRect(0, 0, canvas.width, canvas.height);\r\n\t\t};\r\n\r\n\t\tret.elm = canvas;\r\n\t\tret.draw = drawFunc;\r\n\r\n\t\treturn ret;\r\n\t},\r\n\r\n\r\n\tcreateASliderGradient : function () {\r\n\r\n\t\tvar ret = {\r\n\t\t\telm: null,\r\n\t\t\tdraw: null\r\n\t\t};\r\n\r\n\t\tvar canvas = jsc.createEl('canvas');\r\n\t\tvar ctx = canvas.getContext('2d');\r\n\r\n\t\tvar drawFunc = function (width, height, color) {\r\n\t\t\tcanvas.width = width;\r\n\t\t\tcanvas.height = height;\r\n\r\n\t\t\tctx.clearRect(0, 0, canvas.width, canvas.height);\r\n\r\n\t\t\tvar sqSize = canvas.width / 2;\r\n\t\t\tvar sqColor1 = jsc.pub.chessboardColor1;\r\n\t\t\tvar sqColor2 = jsc.pub.chessboardColor2;\r\n\r\n\t\t\t// dark gray background\r\n\t\t\tctx.fillStyle = sqColor1;\r\n\t\t\tctx.fillRect(0, 0, canvas.width, canvas.height);\r\n\r\n\t\t\tif (sqSize > 0) { // to avoid infinite loop\r\n\t\t\t\tfor (var y = 0; y < canvas.height; y += sqSize * 2) {\r\n\t\t\t\t\t// light gray squares\r\n\t\t\t\t\tctx.fillStyle = sqColor2;\r\n\t\t\t\t\tctx.fillRect(0, y, sqSize, sqSize);\r\n\t\t\t\t\tctx.fillRect(sqSize, y + sqSize, sqSize, sqSize);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar grad = ctx.createLinearGradient(0, 0, 0, canvas.height);\r\n\t\t\tgrad.addColorStop(0, color);\r\n\t\t\tgrad.addColorStop(1, 'rgba(0,0,0,0)');\r\n\r\n\t\t\tctx.fillStyle = grad;\r\n\t\t\tctx.fillRect(0, 0, canvas.width, canvas.height);\r\n\t\t};\r\n\r\n\t\tret.elm = canvas;\r\n\t\tret.draw = drawFunc;\r\n\r\n\t\treturn ret;\r\n\t},\r\n\r\n\r\n\tBoxShadow : (function () {\r\n\t\tvar BoxShadow = function (hShadow, vShadow, blur, spread, color, inset) {\r\n\t\t\tthis.hShadow = hShadow;\r\n\t\t\tthis.vShadow = vShadow;\r\n\t\t\tthis.blur = blur;\r\n\t\t\tthis.spread = spread;\r\n\t\t\tthis.color = color;\r\n\t\t\tthis.inset = !!inset;\r\n\t\t};\r\n\r\n\t\tBoxShadow.prototype.toString = function () {\r\n\t\t\tvar vals = [\r\n\t\t\t\tMath.round(this.hShadow) + 'px',\r\n\t\t\t\tMath.round(this.vShadow) + 'px',\r\n\t\t\t\tMath.round(this.blur) + 'px',\r\n\t\t\t\tMath.round(this.spread) + 'px',\r\n\t\t\t\tthis.color\r\n\t\t\t];\r\n\t\t\tif (this.inset) {\r\n\t\t\t\tvals.push('inset');\r\n\t\t\t}\r\n\t\t\treturn vals.join(' ');\r\n\t\t};\r\n\r\n\t\treturn BoxShadow;\r\n\t})(),\r\n\r\n\r\n\tflags : {\r\n\t\tleaveValue : 1 << 0,\r\n\t\tleaveAlpha : 1 << 1,\r\n\t\tleavePreview : 1 << 2,\r\n\t},\r\n\r\n\r\n\tenumOpts : {\r\n\t\tformat: ['auto', 'any', 'hex', 'hexa', 'rgb', 'rgba'],\r\n\t\tpreviewPosition: ['left', 'right'],\r\n\t\tmode: ['hsv', 'hvs', 'hs', 'hv'],\r\n\t\tposition: ['left', 'right', 'top', 'bottom'],\r\n\t\talphaChannel: ['auto', true, false],\r\n\t\tpaletteSetsAlpha: ['auto', true, false],\r\n\t},\r\n\r\n\r\n\tdeprecatedOpts : {\r\n\t\t//
: ( can be null)\r\n\t\t'styleElement': 'previewElement',\r\n\t\t'onFineChange': 'onInput',\r\n\t\t'overwriteImportant': 'forceStyle',\r\n\t\t'closable': 'closeButton',\r\n\t\t'insetWidth': 'controlBorderWidth',\r\n\t\t'insetColor': 'controlBorderColor',\r\n\t\t'refine': null,\r\n\t},\r\n\r\n\r\n\tdocsRef : ' ' + 'See https://jscolor.com/docs/',\r\n\r\n\r\n\t//\r\n\t// Usage:\r\n\t// var myPicker = new JSColor( [, ])\r\n\t//\r\n\t// (constructor is accessible via both 'jscolor' and 'JSColor' name)\r\n\t//\r\n\r\n\tpub : function (targetElement, opts) {\r\n\r\n\t\tvar THIS = this;\r\n\r\n\t\tif (!opts) {\r\n\t\t\topts = {};\r\n\t\t}\r\n\r\n\t\tthis.channels = {\r\n\t\t\tr: 255, // red [0-255]\r\n\t\t\tg: 255, // green [0-255]\r\n\t\t\tb: 255, // blue [0-255]\r\n\t\t\th: 0, // hue [0-360]\r\n\t\t\ts: 0, // saturation [0-100]\r\n\t\t\tv: 100, // value (brightness) [0-100]\r\n\t\t\ta: 1.0, // alpha (opacity) [0.0 - 1.0]\r\n\t\t};\r\n\r\n\t\t// General options\r\n\t\t//\r\n\t\tthis.format = 'auto'; // 'auto' | 'any' | 'hex' | 'hexa' | 'rgb' | 'rgba' - Format of the input/output value\r\n\t\tthis.value = undefined; // INITIAL color value in any supported format. To change it later, use method fromString(), fromHSVA(), fromRGBA() or channel()\r\n\t\tthis.alpha = undefined; // INITIAL alpha value. To change it later, call method channel('A', )\r\n\t\tthis.random = false; // whether to randomize the initial color. Either true | false, or an array of ranges: [minV, maxV, minS, maxS, minH, maxH, minA, maxA]\r\n\t\tthis.onChange = undefined; // called when color changes. Value can be either a function or a string with JS code.\r\n\t\tthis.onInput = undefined; // called repeatedly as the color is being changed, e.g. while dragging a slider. Value can be either a function or a string with JS code.\r\n\t\tthis.valueElement = undefined; // element that will be used to display and input the color value\r\n\t\tthis.alphaElement = undefined; // element that will be used to display and input the alpha (opacity) value\r\n\t\tthis.previewElement = undefined; // element that will preview the picked color using CSS background\r\n\t\tthis.previewPosition = 'left'; // 'left' | 'right' - position of the color preview in previewElement\r\n\t\tthis.previewSize = 32; // (px) width of the color preview displayed in previewElement\r\n\t\tthis.previewPadding = 8; // (px) space between color preview and content of the previewElement\r\n\t\tthis.required = true; // whether the associated text input must always contain a color value. If false, the input can be left empty.\r\n\t\tthis.hash = true; // whether to prefix the HEX color code with # symbol (only applicable for HEX format)\r\n\t\tthis.uppercase = true; // whether to show the HEX color code in upper case (only applicable for HEX format)\r\n\t\tthis.forceStyle = true; // whether to overwrite CSS style of the previewElement using !important flag\r\n\r\n\t\t// Color Picker options\r\n\t\t//\r\n\t\tthis.width = 181; // width of the color spectrum (in px)\r\n\t\tthis.height = 101; // height of the color spectrum (in px)\r\n\t\tthis.mode = 'HSV'; // 'HSV' | 'HVS' | 'HS' | 'HV' - layout of the color picker controls\r\n\t\tthis.alphaChannel = 'auto'; // 'auto' | true | false - if alpha channel is enabled, the alpha slider will be visible. If 'auto', it will be determined according to color format\r\n\t\tthis.position = 'bottom'; // 'left' | 'right' | 'top' | 'bottom' - position relative to the target element\r\n\t\tthis.smartPosition = true; // automatically change picker position when there is not enough space for it\r\n\t\tthis.showOnClick = true; // whether to show the picker when user clicks its target element\r\n\t\tthis.hideOnLeave = true; // whether to automatically hide the picker when user leaves its target element (e.g. upon clicking the document)\r\n\t\tthis.palette = []; // colors to be displayed in the palette, specified as an array or a string of space separated color values (in any supported format)\r\n\t\tthis.paletteCols = 10; // number of columns in the palette\r\n\t\tthis.paletteSetsAlpha = 'auto'; // 'auto' | true | false - if true, palette colors that don't specify alpha will set alpha to 1.0\r\n\t\tthis.paletteHeight = 16; // maximum height (px) of a row in the palette\r\n\t\tthis.paletteSpacing = 4; // distance (px) between color samples in the palette\r\n\t\tthis.hideOnPaletteClick = false; // when set to true, clicking the palette will also hide the color picker\r\n\t\tthis.sliderSize = 16; // px\r\n\t\tthis.crossSize = 8; // px\r\n\t\tthis.closeButton = false; // whether to display the Close button\r\n\t\tthis.closeText = 'Close';\r\n\t\tthis.buttonColor = 'rgba(0,0,0,1)'; // CSS color\r\n\t\tthis.buttonHeight = 18; // px\r\n\t\tthis.padding = 12; // px\r\n\t\tthis.backgroundColor = 'rgba(255,255,255,1)'; // CSS color\r\n\t\tthis.borderWidth = 1; // px\r\n\t\tthis.borderColor = 'rgba(187,187,187,1)'; // CSS color\r\n\t\tthis.borderRadius = 8; // px\r\n\t\tthis.controlBorderWidth = 1; // px\r\n\t\tthis.controlBorderColor = 'rgba(187,187,187,1)'; // CSS color\r\n\t\tthis.shadow = true; // whether to display a shadow\r\n\t\tthis.shadowBlur = 15; // px\r\n\t\tthis.shadowColor = 'rgba(0,0,0,0.2)'; // CSS color\r\n\t\tthis.pointerColor = 'rgba(76,76,76,1)'; // CSS color\r\n\t\tthis.pointerBorderWidth = 1; // px\r\n\t\tthis.pointerBorderColor = 'rgba(255,255,255,1)'; // CSS color\r\n\t\tthis.pointerThickness = 2; // px\r\n\t\tthis.zIndex = 5000;\r\n\t\tthis.container = undefined; // where to append the color picker (BODY element by default)\r\n\r\n\t\t// Experimental\r\n\t\t//\r\n\t\tthis.minS = 0; // min allowed saturation (0 - 100)\r\n\t\tthis.maxS = 100; // max allowed saturation (0 - 100)\r\n\t\tthis.minV = 0; // min allowed value (brightness) (0 - 100)\r\n\t\tthis.maxV = 100; // max allowed value (brightness) (0 - 100)\r\n\t\tthis.minA = 0.0; // min allowed alpha (opacity) (0.0 - 1.0)\r\n\t\tthis.maxA = 1.0; // max allowed alpha (opacity) (0.0 - 1.0)\r\n\r\n\r\n\t\t// Getter: option(name)\r\n\t\t// Setter: option(name, value)\r\n\t\t// option({name:value, ...})\r\n\t\t//\r\n\t\tthis.option = function () {\r\n\t\t\tif (!arguments.length) {\r\n\t\t\t\tthrow new Error('No option specified');\r\n\t\t\t}\r\n\r\n\t\t\tif (arguments.length === 1 && typeof arguments[0] === 'string') {\r\n\t\t\t\t// getting a single option\r\n\t\t\t\ttry {\r\n\t\t\t\t\treturn getOption(arguments[0]);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tconsole.warn(e);\r\n\t\t\t\t}\r\n\t\t\t\treturn false;\r\n\r\n\t\t\t} else if (arguments.length >= 2 && typeof arguments[0] === 'string') {\r\n\t\t\t\t// setting a single option\r\n\t\t\t\ttry {\r\n\t\t\t\t\tif (!setOption(arguments[0], arguments[1])) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tconsole.warn(e);\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\tthis.redraw(); // immediately redraws the picker, if it's displayed\r\n\t\t\t\tthis.exposeColor(); // in case some preview-related or format-related option was changed\r\n\t\t\t\treturn true;\r\n\r\n\t\t\t} else if (arguments.length === 1 && typeof arguments[0] === 'object') {\r\n\t\t\t\t// setting multiple options\r\n\t\t\t\tvar opts = arguments[0];\r\n\t\t\t\tvar success = true;\r\n\t\t\t\tfor (var opt in opts) {\r\n\t\t\t\t\tif (opts.hasOwnProperty(opt)) {\r\n\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\tif (!setOption(opt, opts[opt])) {\r\n\t\t\t\t\t\t\t\tsuccess = false;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\t\tconsole.warn(e);\r\n\t\t\t\t\t\t\tsuccess = false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthis.redraw(); // immediately redraws the picker, if it's displayed\r\n\t\t\t\tthis.exposeColor(); // in case some preview-related or format-related option was changed\r\n\t\t\t\treturn success;\r\n\t\t\t}\r\n\r\n\t\t\tthrow new Error('Invalid arguments');\r\n\t\t}\r\n\r\n\r\n\t\t// Getter: channel(name)\r\n\t\t// Setter: channel(name, value)\r\n\t\t//\r\n\t\tthis.channel = function (name, value) {\r\n\t\t\tif (typeof name !== 'string') {\r\n\t\t\t\tthrow new Error('Invalid value for channel name: ' + name);\r\n\t\t\t}\r\n\r\n\t\t\tif (value === undefined) {\r\n\t\t\t\t// getting channel value\r\n\t\t\t\tif (!this.channels.hasOwnProperty(name.toLowerCase())) {\r\n\t\t\t\t\tconsole.warn('Getting unknown channel: ' + name);\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\treturn this.channels[name.toLowerCase()];\r\n\r\n\t\t\t} else {\r\n\t\t\t\t// setting channel value\r\n\t\t\t\tvar res = false;\r\n\t\t\t\tswitch (name.toLowerCase()) {\r\n\t\t\t\t\tcase 'r': res = this.fromRGBA(value, null, null, null); break;\r\n\t\t\t\t\tcase 'g': res = this.fromRGBA(null, value, null, null); break;\r\n\t\t\t\t\tcase 'b': res = this.fromRGBA(null, null, value, null); break;\r\n\t\t\t\t\tcase 'h': res = this.fromHSVA(value, null, null, null); break;\r\n\t\t\t\t\tcase 's': res = this.fromHSVA(null, value, null, null); break;\r\n\t\t\t\t\tcase 'v': res = this.fromHSVA(null, null, value, null); break;\r\n\t\t\t\t\tcase 'a': res = this.fromHSVA(null, null, null, value); break;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tconsole.warn('Setting unknown channel: ' + name);\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\tif (res) {\r\n\t\t\t\t\tthis.redraw(); // immediately redraws the picker, if it's displayed\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\r\n\t\t// Triggers given input event(s) by:\r\n\t\t// - executing on callback specified as picker's option\r\n\t\t// - triggering standard DOM event listeners attached to the value element\r\n\t\t//\r\n\t\t// It is possible to specify multiple events separated with a space.\r\n\t\t//\r\n\t\tthis.trigger = function (eventNames) {\r\n\t\t\tvar evs = jsc.strList(eventNames);\r\n\t\t\tfor (var i = 0; i < evs.length; i += 1) {\r\n\t\t\t\tvar ev = evs[i].toLowerCase();\r\n\r\n\t\t\t\t// trigger a callback\r\n\t\t\t\tvar callbackProp = null;\r\n\t\t\t\tswitch (ev) {\r\n\t\t\t\t\tcase 'input': callbackProp = 'onInput'; break;\r\n\t\t\t\t\tcase 'change': callbackProp = 'onChange'; break;\r\n\t\t\t\t}\r\n\t\t\t\tif (callbackProp) {\r\n\t\t\t\t\tjsc.triggerCallback(this, callbackProp);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// trigger standard DOM event listeners on the value element\r\n\t\t\t\tjsc.triggerInputEvent(this.valueElement, ev, true, true);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\r\n\t\t// h: 0-360\r\n\t\t// s: 0-100\r\n\t\t// v: 0-100\r\n\t\t// a: 0.0-1.0\r\n\t\t//\r\n\t\tthis.fromHSVA = function (h, s, v, a, flags) { // null = don't change\r\n\t\t\tif (h === undefined) { h = null; }\r\n\t\t\tif (s === undefined) { s = null; }\r\n\t\t\tif (v === undefined) { v = null; }\r\n\t\t\tif (a === undefined) { a = null; }\r\n\r\n\t\t\tif (h !== null) {\r\n\t\t\t\tif (isNaN(h)) { return false; }\r\n\t\t\t\tthis.channels.h = Math.max(0, Math.min(360, h));\r\n\t\t\t}\r\n\t\t\tif (s !== null) {\r\n\t\t\t\tif (isNaN(s)) { return false; }\r\n\t\t\t\tthis.channels.s = Math.max(0, Math.min(100, this.maxS, s), this.minS);\r\n\t\t\t}\r\n\t\t\tif (v !== null) {\r\n\t\t\t\tif (isNaN(v)) { return false; }\r\n\t\t\t\tthis.channels.v = Math.max(0, Math.min(100, this.maxV, v), this.minV);\r\n\t\t\t}\r\n\t\t\tif (a !== null) {\r\n\t\t\t\tif (isNaN(a)) { return false; }\r\n\t\t\t\tthis.channels.a = this.hasAlphaChannel() ?\r\n\t\t\t\t\tMath.max(0, Math.min(1, this.maxA, a), this.minA) :\r\n\t\t\t\t\t1.0; // if alpha channel is disabled, the color should stay 100% opaque\r\n\t\t\t}\r\n\r\n\t\t\tvar rgb = jsc.HSV_RGB(\r\n\t\t\t\tthis.channels.h,\r\n\t\t\t\tthis.channels.s,\r\n\t\t\t\tthis.channels.v\r\n\t\t\t);\r\n\t\t\tthis.channels.r = rgb[0];\r\n\t\t\tthis.channels.g = rgb[1];\r\n\t\t\tthis.channels.b = rgb[2];\r\n\r\n\t\t\tthis.exposeColor(flags);\r\n\t\t\treturn true;\r\n\t\t};\r\n\r\n\r\n\t\t// r: 0-255\r\n\t\t// g: 0-255\r\n\t\t// b: 0-255\r\n\t\t// a: 0.0-1.0\r\n\t\t//\r\n\t\tthis.fromRGBA = function (r, g, b, a, flags) { // null = don't change\r\n\t\t\tif (r === undefined) { r = null; }\r\n\t\t\tif (g === undefined) { g = null; }\r\n\t\t\tif (b === undefined) { b = null; }\r\n\t\t\tif (a === undefined) { a = null; }\r\n\r\n\t\t\tif (r !== null) {\r\n\t\t\t\tif (isNaN(r)) { return false; }\r\n\t\t\t\tr = Math.max(0, Math.min(255, r));\r\n\t\t\t}\r\n\t\t\tif (g !== null) {\r\n\t\t\t\tif (isNaN(g)) { return false; }\r\n\t\t\t\tg = Math.max(0, Math.min(255, g));\r\n\t\t\t}\r\n\t\t\tif (b !== null) {\r\n\t\t\t\tif (isNaN(b)) { return false; }\r\n\t\t\t\tb = Math.max(0, Math.min(255, b));\r\n\t\t\t}\r\n\t\t\tif (a !== null) {\r\n\t\t\t\tif (isNaN(a)) { return false; }\r\n\t\t\t\tthis.channels.a = this.hasAlphaChannel() ?\r\n\t\t\t\t\tMath.max(0, Math.min(1, this.maxA, a), this.minA) :\r\n\t\t\t\t\t1.0; // if alpha channel is disabled, the color should stay 100% opaque\r\n\t\t\t}\r\n\r\n\t\t\tvar hsv = jsc.RGB_HSV(\r\n\t\t\t\tr===null ? this.channels.r : r,\r\n\t\t\t\tg===null ? this.channels.g : g,\r\n\t\t\t\tb===null ? this.channels.b : b\r\n\t\t\t);\r\n\t\t\tif (hsv[0] !== null) {\r\n\t\t\t\tthis.channels.h = Math.max(0, Math.min(360, hsv[0]));\r\n\t\t\t}\r\n\t\t\tif (hsv[2] !== 0) { // fully black color stays black through entire saturation range, so let's not change saturation\r\n\t\t\t\tthis.channels.s = Math.max(0, this.minS, Math.min(100, this.maxS, hsv[1]));\r\n\t\t\t}\r\n\t\t\tthis.channels.v = Math.max(0, this.minV, Math.min(100, this.maxV, hsv[2]));\r\n\r\n\t\t\t// update RGB according to final HSV, as some values might be trimmed\r\n\t\t\tvar rgb = jsc.HSV_RGB(this.channels.h, this.channels.s, this.channels.v);\r\n\t\t\tthis.channels.r = rgb[0];\r\n\t\t\tthis.channels.g = rgb[1];\r\n\t\t\tthis.channels.b = rgb[2];\r\n\r\n\t\t\tthis.exposeColor(flags);\r\n\t\t\treturn true;\r\n\t\t};\r\n\r\n\r\n\t\t// DEPRECATED. Use .fromHSVA() instead\r\n\t\t//\r\n\t\tthis.fromHSV = function (h, s, v, flags) {\r\n\t\t\tconsole.warn('fromHSV() method is DEPRECATED. Using fromHSVA() instead.' + jsc.docsRef);\r\n\t\t\treturn this.fromHSVA(h, s, v, null, flags);\r\n\t\t};\r\n\r\n\r\n\t\t// DEPRECATED. Use .fromRGBA() instead\r\n\t\t//\r\n\t\tthis.fromRGB = function (r, g, b, flags) {\r\n\t\t\tconsole.warn('fromRGB() method is DEPRECATED. Using fromRGBA() instead.' + jsc.docsRef);\r\n\t\t\treturn this.fromRGBA(r, g, b, null, flags);\r\n\t\t};\r\n\r\n\r\n\t\tthis.fromString = function (str, flags) {\r\n\t\t\tif (!this.required && str.trim() === '') {\r\n\t\t\t\t// setting empty string to an optional color input\r\n\t\t\t\tthis.setPreviewElementBg(null);\r\n\t\t\t\tthis.setValueElementValue('');\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\t\t\tvar color = jsc.parseColorString(str);\r\n\t\t\tif (!color) {\r\n\t\t\t\treturn false; // could not parse\r\n\t\t\t}\r\n\t\t\tif (this.format.toLowerCase() === 'any') {\r\n\t\t\t\tthis._setFormat(color.format); // adapt format\r\n\t\t\t\tif (!jsc.isAlphaFormat(this.getFormat())) {\r\n\t\t\t\t\tcolor.rgba[3] = 1.0; // when switching to a format that doesn't support alpha, set full opacity\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.fromRGBA(\r\n\t\t\t\tcolor.rgba[0],\r\n\t\t\t\tcolor.rgba[1],\r\n\t\t\t\tcolor.rgba[2],\r\n\t\t\t\tcolor.rgba[3],\r\n\t\t\t\tflags\r\n\t\t\t);\r\n\t\t\treturn true;\r\n\t\t};\r\n\r\n\r\n\t\tthis.randomize = function (minV, maxV, minS, maxS, minH, maxH, minA, maxA) {\r\n\t\t\tif (minV === undefined) { minV = 0; }\r\n\t\t\tif (maxV === undefined) { maxV = 100; }\r\n\t\t\tif (minS === undefined) { minS = 0; }\r\n\t\t\tif (maxS === undefined) { maxS = 100; }\r\n\t\t\tif (minH === undefined) { minH = 0; }\r\n\t\t\tif (maxH === undefined) { maxH = 359; }\r\n\t\t\tif (minA === undefined) { minA = 1; }\r\n\t\t\tif (maxA === undefined) { maxA = 1; }\r\n\r\n\t\t\tthis.fromHSVA(\r\n\t\t\t\tminH + Math.floor(Math.random() * (maxH - minH + 1)),\r\n\t\t\t\tminS + Math.floor(Math.random() * (maxS - minS + 1)),\r\n\t\t\t\tminV + Math.floor(Math.random() * (maxV - minV + 1)),\r\n\t\t\t\t((100 * minA) + Math.floor(Math.random() * (100 * (maxA - minA) + 1))) / 100\r\n\t\t\t);\r\n\t\t};\r\n\r\n\r\n\t\tthis.toString = function (format) {\r\n\t\t\tif (format === undefined) {\r\n\t\t\t\tformat = this.getFormat(); // format not specified -> use the current format\r\n\t\t\t}\r\n\t\t\tswitch (format.toLowerCase()) {\r\n\t\t\t\tcase 'hex': return this.toHEXString(); break;\r\n\t\t\t\tcase 'hexa': return this.toHEXAString(); break;\r\n\t\t\t\tcase 'rgb': return this.toRGBString(); break;\r\n\t\t\t\tcase 'rgba': return this.toRGBAString(); break;\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t};\r\n\r\n\r\n\t\tthis.toHEXString = function () {\r\n\t\t\treturn jsc.hexColor(\r\n\t\t\t\tthis.channels.r,\r\n\t\t\t\tthis.channels.g,\r\n\t\t\t\tthis.channels.b\r\n\t\t\t);\r\n\t\t};\r\n\r\n\r\n\t\tthis.toHEXAString = function () {\r\n\t\t\treturn jsc.hexaColor(\r\n\t\t\t\tthis.channels.r,\r\n\t\t\t\tthis.channels.g,\r\n\t\t\t\tthis.channels.b,\r\n\t\t\t\tthis.channels.a\r\n\t\t\t);\r\n\t\t};\r\n\r\n\r\n\t\tthis.toRGBString = function () {\r\n\t\t\treturn jsc.rgbColor(\r\n\t\t\t\tthis.channels.r,\r\n\t\t\t\tthis.channels.g,\r\n\t\t\t\tthis.channels.b\r\n\t\t\t);\r\n\t\t};\r\n\r\n\r\n\t\tthis.toRGBAString = function () {\r\n\t\t\treturn jsc.rgbaColor(\r\n\t\t\t\tthis.channels.r,\r\n\t\t\t\tthis.channels.g,\r\n\t\t\t\tthis.channels.b,\r\n\t\t\t\tthis.channels.a\r\n\t\t\t);\r\n\t\t};\r\n\r\n\r\n\t\tthis.toGrayscale = function () {\r\n\t\t\treturn (\r\n\t\t\t\t0.213 * this.channels.r +\r\n\t\t\t\t0.715 * this.channels.g +\r\n\t\t\t\t0.072 * this.channels.b\r\n\t\t\t);\r\n\t\t};\r\n\r\n\r\n\t\tthis.toCanvas = function () {\r\n\t\t\treturn jsc.genColorPreviewCanvas(this.toRGBAString()).canvas;\r\n\t\t};\r\n\r\n\r\n\t\tthis.toDataURL = function () {\r\n\t\t\treturn this.toCanvas().toDataURL();\r\n\t\t};\r\n\r\n\r\n\t\tthis.toBackground = function () {\r\n\t\t\treturn jsc.pub.background(this.toRGBAString());\r\n\t\t};\r\n\r\n\r\n\t\tthis.isLight = function () {\r\n\t\t\treturn this.toGrayscale() > 255 / 2;\r\n\t\t};\r\n\r\n\r\n\t\tthis.hide = function () {\r\n\t\t\tif (isPickerOwner()) {\r\n\t\t\t\tdetachPicker();\r\n\t\t\t}\r\n\t\t};\r\n\r\n\r\n\t\tthis.show = function () {\r\n\t\t\tdrawPicker();\r\n\t\t};\r\n\r\n\r\n\t\tthis.redraw = function () {\r\n\t\t\tif (isPickerOwner()) {\r\n\t\t\t\tdrawPicker();\r\n\t\t\t}\r\n\t\t};\r\n\r\n\r\n\t\tthis.getFormat = function () {\r\n\t\t\treturn this._currentFormat;\r\n\t\t};\r\n\r\n\r\n\t\tthis._setFormat = function (format) {\r\n\t\t\tthis._currentFormat = format.toLowerCase();\r\n\t\t};\r\n\r\n\r\n\t\tthis.hasAlphaChannel = function () {\r\n\t\t\tif (this.alphaChannel === 'auto') {\r\n\t\t\t\treturn (\r\n\t\t\t\t\tthis.format.toLowerCase() === 'any' || // format can change on the fly (e.g. from hex to rgba), so let's consider the alpha channel enabled\r\n\t\t\t\t\tjsc.isAlphaFormat(this.getFormat()) || // the current format supports alpha channel\r\n\t\t\t\t\tthis.alpha !== undefined || // initial alpha value is set, so we're working with alpha channel\r\n\t\t\t\t\tthis.alphaElement !== undefined // the alpha value is redirected, so we're working with alpha channel\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\treturn this.alphaChannel; // the alpha channel is explicitly set\r\n\t\t};\r\n\r\n\r\n\t\tthis.processValueInput = function (str) {\r\n\t\t\tif (!this.fromString(str)) {\r\n\t\t\t\t// could not parse the color value - let's just expose the current color\r\n\t\t\t\tthis.exposeColor();\r\n\t\t\t}\r\n\t\t};\r\n\r\n\r\n\t\tthis.processAlphaInput = function (str) {\r\n\t\t\tif (!this.fromHSVA(null, null, null, parseFloat(str))) {\r\n\t\t\t\t// could not parse the alpha value - let's just expose the current color\r\n\t\t\t\tthis.exposeColor();\r\n\t\t\t}\r\n\t\t};\r\n\r\n\r\n\t\tthis.exposeColor = function (flags) {\r\n\t\t\tvar colorStr = this.toString();\r\n\t\t\tvar fmt = this.getFormat();\r\n\r\n\t\t\t// reflect current color in data- attribute\r\n\t\t\tjsc.setDataAttr(this.targetElement, 'current-color', colorStr);\r\n\r\n\t\t\tif (!(flags & jsc.flags.leaveValue) && this.valueElement) {\r\n\t\t\t\tif (fmt === 'hex' || fmt === 'hexa') {\r\n\t\t\t\t\tif (!this.uppercase) { colorStr = colorStr.toLowerCase(); }\r\n\t\t\t\t\tif (!this.hash) { colorStr = colorStr.replace(/^#/, ''); }\r\n\t\t\t\t}\r\n\t\t\t\tthis.setValueElementValue(colorStr);\r\n\t\t\t}\r\n\r\n\t\t\tif (!(flags & jsc.flags.leaveAlpha) && this.alphaElement) {\r\n\t\t\t\tvar alphaVal = Math.round(this.channels.a * 100) / 100;\r\n\t\t\t\tthis.setAlphaElementValue(alphaVal);\r\n\t\t\t}\r\n\r\n\t\t\tif (!(flags & jsc.flags.leavePreview) && this.previewElement) {\r\n\t\t\t\tvar previewPos = null; // 'left' | 'right' (null -> fill the entire element)\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\tjsc.isTextInput(this.previewElement) || // text input\r\n\t\t\t\t\t(jsc.isButton(this.previewElement) && !jsc.isButtonEmpty(this.previewElement)) // button with text\r\n\t\t\t\t) {\r\n\t\t\t\t\tpreviewPos = this.previewPosition;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.setPreviewElementBg(this.toRGBAString());\r\n\t\t\t}\r\n\r\n\t\t\tif (isPickerOwner()) {\r\n\t\t\t\tredrawPad();\r\n\t\t\t\tredrawSld();\r\n\t\t\t\tredrawASld();\r\n\t\t\t}\r\n\t\t};\r\n\r\n\r\n\t\tthis.setPreviewElementBg = function (color) {\r\n\t\t\tif (!this.previewElement) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tvar position = null; // color preview position: null | 'left' | 'right'\r\n\t\t\tvar width = null; // color preview width: px | null = fill the entire element\r\n\t\t\tif (\r\n\t\t\t\tjsc.isTextInput(this.previewElement) || // text input\r\n\t\t\t\t(jsc.isButton(this.previewElement) && !jsc.isButtonEmpty(this.previewElement)) // button with text\r\n\t\t\t) {\r\n\t\t\t\tposition = this.previewPosition;\r\n\t\t\t\twidth = this.previewSize;\r\n\t\t\t}\r\n\r\n\t\t\tvar backgrounds = [];\r\n\r\n\t\t\tif (!color) {\r\n\t\t\t\t// there is no color preview to display -> let's remove any previous background image\r\n\t\t\t\tbackgrounds.push({\r\n\t\t\t\t\timage: 'none',\r\n\t\t\t\t\tposition: 'left top',\r\n\t\t\t\t\tsize: 'auto',\r\n\t\t\t\t\trepeat: 'no-repeat',\r\n\t\t\t\t\torigin: 'padding-box',\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\t// CSS gradient for background color preview\r\n\t\t\t\tbackgrounds.push({\r\n\t\t\t\t\timage: jsc.genColorPreviewGradient(\r\n\t\t\t\t\t\tcolor,\r\n\t\t\t\t\t\tposition,\r\n\t\t\t\t\t\twidth ? width - jsc.pub.previewSeparator.length : null\r\n\t\t\t\t\t),\r\n\t\t\t\t\tposition: 'left top',\r\n\t\t\t\t\tsize: 'auto',\r\n\t\t\t\t\trepeat: position ? 'repeat-y' : 'repeat',\r\n\t\t\t\t\torigin: 'padding-box',\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// data URL of generated PNG image with a gray transparency chessboard\r\n\t\t\t\tvar preview = jsc.genColorPreviewCanvas(\r\n\t\t\t\t\t'rgba(0,0,0,0)',\r\n\t\t\t\t\tposition ? {'left':'right', 'right':'left'}[position] : null,\r\n\t\t\t\t\twidth,\r\n\t\t\t\t\ttrue\r\n\t\t\t\t);\r\n\t\t\t\tbackgrounds.push({\r\n\t\t\t\t\timage: 'url(\\'' + preview.canvas.toDataURL() + '\\')',\r\n\t\t\t\t\tposition: (position || 'left') + ' top',\r\n\t\t\t\t\tsize: preview.width + 'px ' + preview.height + 'px',\r\n\t\t\t\t\trepeat: position ? 'repeat-y' : 'repeat',\r\n\t\t\t\t\torigin: 'padding-box',\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tvar bg = {\r\n\t\t\t\timage: [],\r\n\t\t\t\tposition: [],\r\n\t\t\t\tsize: [],\r\n\t\t\t\trepeat: [],\r\n\t\t\t\torigin: [],\r\n\t\t\t};\r\n\t\t\tfor (var i = 0; i < backgrounds.length; i += 1) {\r\n\t\t\t\tbg.image.push(backgrounds[i].image);\r\n\t\t\t\tbg.position.push(backgrounds[i].position);\r\n\t\t\t\tbg.size.push(backgrounds[i].size);\r\n\t\t\t\tbg.repeat.push(backgrounds[i].repeat);\r\n\t\t\t\tbg.origin.push(backgrounds[i].origin);\r\n\t\t\t}\r\n\r\n\t\t\t// set previewElement's background-images\r\n\t\t\tvar sty = {\r\n\t\t\t\t'background-image': bg.image.join(', '),\r\n\t\t\t\t'background-position': bg.position.join(', '),\r\n\t\t\t\t'background-size': bg.size.join(', '),\r\n\t\t\t\t'background-repeat': bg.repeat.join(', '),\r\n\t\t\t\t'background-origin': bg.origin.join(', '),\r\n\t\t\t};\r\n\t\t\tjsc.setStyle(this.previewElement, sty, this.forceStyle);\r\n\r\n\r\n\t\t\t// set/restore previewElement's padding\r\n\t\t\tvar padding = {\r\n\t\t\t\tleft: null,\r\n\t\t\t\tright: null,\r\n\t\t\t};\r\n\t\t\tif (position) {\r\n\t\t\t\tpadding[position] = (this.previewSize + this.previewPadding) + 'px';\r\n\t\t\t}\r\n\r\n\t\t\tvar sty = {\r\n\t\t\t\t'padding-left': padding.left,\r\n\t\t\t\t'padding-right': padding.right,\r\n\t\t\t};\r\n\t\t\tjsc.setStyle(this.previewElement, sty, this.forceStyle, true);\r\n\t\t};\r\n\r\n\r\n\t\tthis.setValueElementValue = function (str) {\r\n\t\t\tif (this.valueElement) {\r\n\t\t\t\tif (jsc.nodeName(this.valueElement) === 'input') {\r\n\t\t\t\t\tthis.valueElement.value = str;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.valueElement.innerHTML = str;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\r\n\t\tthis.setAlphaElementValue = function (str) {\r\n\t\t\tif (this.alphaElement) {\r\n\t\t\t\tif (jsc.nodeName(this.alphaElement) === 'input') {\r\n\t\t\t\t\tthis.alphaElement.value = str;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.alphaElement.innerHTML = str;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\r\n\t\tthis._processParentElementsInDOM = function () {\r\n\t\t\tif (this._parentElementsProcessed) { return; }\r\n\t\t\tthis._parentElementsProcessed = true;\r\n\r\n\t\t\tvar elm = this.targetElement;\r\n\t\t\tdo {\r\n\t\t\t\t// If the target element or one of its parent nodes has fixed position,\r\n\t\t\t\t// then use fixed positioning instead\r\n\t\t\t\tvar compStyle = jsc.getCompStyle(elm);\r\n\t\t\t\tif (compStyle.position && compStyle.position.toLowerCase() === 'fixed') {\r\n\t\t\t\t\tthis.fixed = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (elm !== this.targetElement) {\r\n\t\t\t\t\t// Ensure to attach onParentScroll only once to each parent element\r\n\t\t\t\t\t// (multiple targetElements can share the same parent nodes)\r\n\t\t\t\t\t//\r\n\t\t\t\t\t// Note: It's not just offsetParents that can be scrollable,\r\n\t\t\t\t\t// that's why we loop through all parent nodes\r\n\t\t\t\t\tif (!jsc.getData(elm, 'hasScrollListener')) {\r\n\t\t\t\t\t\telm.addEventListener('scroll', jsc.onParentScroll, false);\r\n\t\t\t\t\t\tjsc.setData(elm, 'hasScrollListener', true);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} while ((elm = elm.parentNode) && jsc.nodeName(elm) !== 'body');\r\n\t\t};\r\n\r\n\r\n\t\tthis.tryHide = function () {\r\n\t\t\tif (this.hideOnLeave) {\r\n\t\t\t\tthis.hide();\r\n\t\t\t}\r\n\t\t};\r\n\r\n\r\n\t\tthis.set__palette = function (val) {\r\n\t\t\tthis.palette = val;\r\n\t\t\tthis._palette = jsc.parsePaletteValue(val);\r\n\t\t\tthis._paletteHasTransparency = jsc.containsTranparentColor(this._palette);\r\n\t\t};\r\n\r\n\r\n\t\tfunction setOption (option, value) {\r\n\t\t\tif (typeof option !== 'string') {\r\n\t\t\t\tthrow new Error('Invalid value for option name: ' + option);\r\n\t\t\t}\r\n\r\n\t\t\t// enum option\r\n\t\t\tif (jsc.enumOpts.hasOwnProperty(option)) {\r\n\t\t\t\tif (typeof value === 'string') { // enum string values are case insensitive\r\n\t\t\t\t\tvalue = value.toLowerCase();\r\n\t\t\t\t}\r\n\t\t\t\tif (jsc.enumOpts[option].indexOf(value) === -1) {\r\n\t\t\t\t\tthrow new Error('Option \\'' + option + '\\' has invalid value: ' + value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// deprecated option\r\n\t\t\tif (jsc.deprecatedOpts.hasOwnProperty(option)) {\r\n\t\t\t\tvar oldOpt = option;\r\n\t\t\t\tvar newOpt = jsc.deprecatedOpts[option];\r\n\t\t\t\tif (newOpt) {\r\n\t\t\t\t\t// if we have a new name for this option, let's log a warning and use the new name\r\n\t\t\t\t\tconsole.warn('Option \\'%s\\' is DEPRECATED, using \\'%s\\' instead.' + jsc.docsRef, oldOpt, newOpt);\r\n\t\t\t\t\toption = newOpt;\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// new name not available for the option\r\n\t\t\t\t\tthrow new Error('Option \\'' + option + '\\' is DEPRECATED');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar setter = 'set__' + option;\r\n\r\n\t\t\tif (typeof THIS[setter] === 'function') { // a setter exists for this option\r\n\t\t\t\tTHIS[setter](value);\r\n\t\t\t\treturn true;\r\n\r\n\t\t\t} else if (option in THIS) { // option exists as a property\r\n\t\t\t\tTHIS[option] = value;\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\t\t\tthrow new Error('Unrecognized configuration option: ' + option);\r\n\t\t}\r\n\r\n\r\n\t\tfunction getOption (option) {\r\n\t\t\tif (typeof option !== 'string') {\r\n\t\t\t\tthrow new Error('Invalid value for option name: ' + option);\r\n\t\t\t}\r\n\r\n\t\t\t// deprecated option\r\n\t\t\tif (jsc.deprecatedOpts.hasOwnProperty(option)) {\r\n\t\t\t\tvar oldOpt = option;\r\n\t\t\t\tvar newOpt = jsc.deprecatedOpts[option];\r\n\t\t\t\tif (newOpt) {\r\n\t\t\t\t\t// if we have a new name for this option, let's log a warning and use the new name\r\n\t\t\t\t\tconsole.warn('Option \\'%s\\' is DEPRECATED, using \\'%s\\' instead.' + jsc.docsRef, oldOpt, newOpt);\r\n\t\t\t\t\toption = newOpt;\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// new name not available for the option\r\n\t\t\t\t\tthrow new Error('Option \\'' + option + '\\' is DEPRECATED');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar getter = 'get__' + option;\r\n\r\n\t\t\tif (typeof THIS[getter] === 'function') { // a getter exists for this option\r\n\t\t\t\treturn THIS[getter](value);\r\n\r\n\t\t\t} else if (option in THIS) { // option exists as a property\r\n\t\t\t\treturn THIS[option];\r\n\t\t\t}\r\n\r\n\t\t\tthrow new Error('Unrecognized configuration option: ' + option);\r\n\t\t}\r\n\r\n\r\n\t\tfunction detachPicker () {\r\n\t\t\tjsc.removeClass(THIS.targetElement, jsc.pub.activeClassName);\r\n\t\t\tjsc.picker.wrap.parentNode.removeChild(jsc.picker.wrap);\r\n\t\t\tdelete jsc.picker.owner;\r\n\t\t}\r\n\r\n\r\n\t\tfunction drawPicker () {\r\n\r\n\t\t\t// At this point, when drawing the picker, we know what the parent elements are\r\n\t\t\t// and we can do all related DOM operations, such as registering events on them\r\n\t\t\t// or checking their positioning\r\n\t\t\tTHIS._processParentElementsInDOM();\r\n\r\n\t\t\tif (!jsc.picker) {\r\n\t\t\t\tjsc.picker = {\r\n\t\t\t\t\towner: null, // owner picker instance\r\n\t\t\t\t\twrap : jsc.createEl('div'),\r\n\t\t\t\t\tbox : jsc.createEl('div'),\r\n\t\t\t\t\tboxS : jsc.createEl('div'), // shadow area\r\n\t\t\t\t\tboxB : jsc.createEl('div'), // border\r\n\t\t\t\t\tpad : jsc.createEl('div'),\r\n\t\t\t\t\tpadB : jsc.createEl('div'), // border\r\n\t\t\t\t\tpadM : jsc.createEl('div'), // mouse/touch area\r\n\t\t\t\t\tpadCanvas : jsc.createPadCanvas(),\r\n\t\t\t\t\tcross : jsc.createEl('div'),\r\n\t\t\t\t\tcrossBY : jsc.createEl('div'), // border Y\r\n\t\t\t\t\tcrossBX : jsc.createEl('div'), // border X\r\n\t\t\t\t\tcrossLY : jsc.createEl('div'), // line Y\r\n\t\t\t\t\tcrossLX : jsc.createEl('div'), // line X\r\n\t\t\t\t\tsld : jsc.createEl('div'), // slider\r\n\t\t\t\t\tsldB : jsc.createEl('div'), // border\r\n\t\t\t\t\tsldM : jsc.createEl('div'), // mouse/touch area\r\n\t\t\t\t\tsldGrad : jsc.createSliderGradient(),\r\n\t\t\t\t\tsldPtrS : jsc.createEl('div'), // slider pointer spacer\r\n\t\t\t\t\tsldPtrIB : jsc.createEl('div'), // slider pointer inner border\r\n\t\t\t\t\tsldPtrMB : jsc.createEl('div'), // slider pointer middle border\r\n\t\t\t\t\tsldPtrOB : jsc.createEl('div'), // slider pointer outer border\r\n\t\t\t\t\tasld : jsc.createEl('div'), // alpha slider\r\n\t\t\t\t\tasldB : jsc.createEl('div'), // border\r\n\t\t\t\t\tasldM : jsc.createEl('div'), // mouse/touch area\r\n\t\t\t\t\tasldGrad : jsc.createASliderGradient(),\r\n\t\t\t\t\tasldPtrS : jsc.createEl('div'), // slider pointer spacer\r\n\t\t\t\t\tasldPtrIB : jsc.createEl('div'), // slider pointer inner border\r\n\t\t\t\t\tasldPtrMB : jsc.createEl('div'), // slider pointer middle border\r\n\t\t\t\t\tasldPtrOB : jsc.createEl('div'), // slider pointer outer border\r\n\t\t\t\t\tpal : jsc.createEl('div'), // palette\r\n\t\t\t\t\tbtn : jsc.createEl('div'),\r\n\t\t\t\t\tbtnT : jsc.createEl('span'), // text\r\n\t\t\t\t};\r\n\r\n\t\t\t\tjsc.picker.pad.appendChild(jsc.picker.padCanvas.elm);\r\n\t\t\t\tjsc.picker.padB.appendChild(jsc.picker.pad);\r\n\t\t\t\tjsc.picker.cross.appendChild(jsc.picker.crossBY);\r\n\t\t\t\tjsc.picker.cross.appendChild(jsc.picker.crossBX);\r\n\t\t\t\tjsc.picker.cross.appendChild(jsc.picker.crossLY);\r\n\t\t\t\tjsc.picker.cross.appendChild(jsc.picker.crossLX);\r\n\t\t\t\tjsc.picker.padB.appendChild(jsc.picker.cross);\r\n\t\t\t\tjsc.picker.box.appendChild(jsc.picker.padB);\r\n\t\t\t\tjsc.picker.box.appendChild(jsc.picker.padM);\r\n\r\n\t\t\t\tjsc.picker.sld.appendChild(jsc.picker.sldGrad.elm);\r\n\t\t\t\tjsc.picker.sldB.appendChild(jsc.picker.sld);\r\n\t\t\t\tjsc.picker.sldB.appendChild(jsc.picker.sldPtrOB);\r\n\t\t\t\tjsc.picker.sldPtrOB.appendChild(jsc.picker.sldPtrMB);\r\n\t\t\t\tjsc.picker.sldPtrMB.appendChild(jsc.picker.sldPtrIB);\r\n\t\t\t\tjsc.picker.sldPtrIB.appendChild(jsc.picker.sldPtrS);\r\n\t\t\t\tjsc.picker.box.appendChild(jsc.picker.sldB);\r\n\t\t\t\tjsc.picker.box.appendChild(jsc.picker.sldM);\r\n\r\n\t\t\t\tjsc.picker.asld.appendChild(jsc.picker.asldGrad.elm);\r\n\t\t\t\tjsc.picker.asldB.appendChild(jsc.picker.asld);\r\n\t\t\t\tjsc.picker.asldB.appendChild(jsc.picker.asldPtrOB);\r\n\t\t\t\tjsc.picker.asldPtrOB.appendChild(jsc.picker.asldPtrMB);\r\n\t\t\t\tjsc.picker.asldPtrMB.appendChild(jsc.picker.asldPtrIB);\r\n\t\t\t\tjsc.picker.asldPtrIB.appendChild(jsc.picker.asldPtrS);\r\n\t\t\t\tjsc.picker.box.appendChild(jsc.picker.asldB);\r\n\t\t\t\tjsc.picker.box.appendChild(jsc.picker.asldM);\r\n\r\n\t\t\t\tjsc.picker.box.appendChild(jsc.picker.pal);\r\n\r\n\t\t\t\tjsc.picker.btn.appendChild(jsc.picker.btnT);\r\n\t\t\t\tjsc.picker.box.appendChild(jsc.picker.btn);\r\n\r\n\t\t\t\tjsc.picker.boxB.appendChild(jsc.picker.box);\r\n\t\t\t\tjsc.picker.wrap.appendChild(jsc.picker.boxS);\r\n\t\t\t\tjsc.picker.wrap.appendChild(jsc.picker.boxB);\r\n\r\n\t\t\t\tjsc.picker.wrap.addEventListener('touchstart', jsc.onPickerTouchStart,\r\n\t\t\t\t\tjsc.isPassiveEventSupported ? {passive: false} : false);\r\n\t\t\t}\r\n\r\n\t\t\tvar p = jsc.picker;\r\n\r\n\t\t\tvar displaySlider = !!jsc.getSliderChannel(THIS);\r\n\t\t\tvar displayAlphaSlider = THIS.hasAlphaChannel();\r\n\t\t\tvar pickerDims = jsc.getPickerDims(THIS);\r\n\t\t\tvar crossOuterSize = (2 * THIS.pointerBorderWidth + THIS.pointerThickness + 2 * THIS.crossSize);\r\n\t\t\tvar controlPadding = jsc.getControlPadding(THIS);\r\n\t\t\tvar borderRadius = Math.min(\r\n\t\t\t\tTHIS.borderRadius,\r\n\t\t\t\tMath.round(THIS.padding * Math.PI)); // px\r\n\t\t\tvar padCursor = 'crosshair';\r\n\r\n\t\t\t// wrap\r\n\t\t\tp.wrap.className = 'jscolor-picker-wrap';\r\n\t\t\tp.wrap.style.clear = 'both';\r\n\t\t\tp.wrap.style.width = pickerDims.borderW + 'px';\r\n\t\t\tp.wrap.style.height = pickerDims.borderH + 'px';\r\n\t\t\tp.wrap.style.zIndex = THIS.zIndex;\r\n\r\n\t\t\t// picker\r\n\t\t\tp.box.className = 'jscolor-picker';\r\n\t\t\tp.box.style.width = pickerDims.paddedW + 'px';\r\n\t\t\tp.box.style.height = pickerDims.paddedH + 'px';\r\n\t\t\tp.box.style.position = 'relative';\r\n\r\n\t\t\t// picker shadow\r\n\t\t\tp.boxS.className = 'jscolor-picker-shadow';\r\n\t\t\tp.boxS.style.position = 'absolute';\r\n\t\t\tp.boxS.style.left = '0';\r\n\t\t\tp.boxS.style.top = '0';\r\n\t\t\tp.boxS.style.width = '100%';\r\n\t\t\tp.boxS.style.height = '100%';\r\n\t\t\tjsc.setBorderRadius(p.boxS, borderRadius + 'px');\r\n\r\n\t\t\t// picker border\r\n\t\t\tp.boxB.className = 'jscolor-picker-border';\r\n\t\t\tp.boxB.style.position = 'relative';\r\n\t\t\tp.boxB.style.border = THIS.borderWidth + 'px solid';\r\n\t\t\tp.boxB.style.borderColor = THIS.borderColor;\r\n\t\t\tp.boxB.style.background = THIS.backgroundColor;\r\n\t\t\tjsc.setBorderRadius(p.boxB, borderRadius + 'px');\r\n\r\n\t\t\t// IE hack:\r\n\t\t\t// If the element is transparent, IE will trigger the event on the elements under it,\r\n\t\t\t// e.g. on Canvas or on elements with border\r\n\t\t\tp.padM.style.background = 'rgba(255,0,0,.2)';\r\n\t\t\tp.sldM.style.background = 'rgba(0,255,0,.2)';\r\n\t\t\tp.asldM.style.background = 'rgba(0,0,255,.2)';\r\n\r\n\t\t\tp.padM.style.opacity =\r\n\t\t\tp.sldM.style.opacity =\r\n\t\t\tp.asldM.style.opacity =\r\n\t\t\t\t'0';\r\n\r\n\t\t\t// pad\r\n\t\t\tp.pad.style.position = 'relative';\r\n\t\t\tp.pad.style.width = THIS.width + 'px';\r\n\t\t\tp.pad.style.height = THIS.height + 'px';\r\n\r\n\t\t\t// pad - color spectrum (HSV and HVS)\r\n\t\t\tp.padCanvas.draw(THIS.width, THIS.height, jsc.getPadYChannel(THIS));\r\n\r\n\t\t\t// pad border\r\n\t\t\tp.padB.style.position = 'absolute';\r\n\t\t\tp.padB.style.left = THIS.padding + 'px';\r\n\t\t\tp.padB.style.top = THIS.padding + 'px';\r\n\t\t\tp.padB.style.border = THIS.controlBorderWidth + 'px solid';\r\n\t\t\tp.padB.style.borderColor = THIS.controlBorderColor;\r\n\r\n\t\t\t// pad mouse area\r\n\t\t\tp.padM.style.position = 'absolute';\r\n\t\t\tp.padM.style.left = 0 + 'px';\r\n\t\t\tp.padM.style.top = 0 + 'px';\r\n\t\t\tp.padM.style.width = (THIS.padding + 2 * THIS.controlBorderWidth + THIS.width + controlPadding) + 'px';\r\n\t\t\tp.padM.style.height = (2 * THIS.controlBorderWidth + 2 * THIS.padding + THIS.height) + 'px';\r\n\t\t\tp.padM.style.cursor = padCursor;\r\n\t\t\tjsc.setData(p.padM, {\r\n\t\t\t\tinstance: THIS,\r\n\t\t\t\tcontrol: 'pad',\r\n\t\t\t})\r\n\r\n\t\t\t// pad cross\r\n\t\t\tp.cross.style.position = 'absolute';\r\n\t\t\tp.cross.style.left =\r\n\t\t\tp.cross.style.top =\r\n\t\t\t\t'0';\r\n\t\t\tp.cross.style.width =\r\n\t\t\tp.cross.style.height =\r\n\t\t\t\tcrossOuterSize + 'px';\r\n\r\n\t\t\t// pad cross border Y and X\r\n\t\t\tp.crossBY.style.position =\r\n\t\t\tp.crossBX.style.position =\r\n\t\t\t\t'absolute';\r\n\t\t\tp.crossBY.style.background =\r\n\t\t\tp.crossBX.style.background =\r\n\t\t\t\tTHIS.pointerBorderColor;\r\n\t\t\tp.crossBY.style.width =\r\n\t\t\tp.crossBX.style.height =\r\n\t\t\t\t(2 * THIS.pointerBorderWidth + THIS.pointerThickness) + 'px';\r\n\t\t\tp.crossBY.style.height =\r\n\t\t\tp.crossBX.style.width =\r\n\t\t\t\tcrossOuterSize + 'px';\r\n\t\t\tp.crossBY.style.left =\r\n\t\t\tp.crossBX.style.top =\r\n\t\t\t\t(Math.floor(crossOuterSize / 2) - Math.floor(THIS.pointerThickness / 2) - THIS.pointerBorderWidth) + 'px';\r\n\t\t\tp.crossBY.style.top =\r\n\t\t\tp.crossBX.style.left =\r\n\t\t\t\t'0';\r\n\r\n\t\t\t// pad cross line Y and X\r\n\t\t\tp.crossLY.style.position =\r\n\t\t\tp.crossLX.style.position =\r\n\t\t\t\t'absolute';\r\n\t\t\tp.crossLY.style.background =\r\n\t\t\tp.crossLX.style.background =\r\n\t\t\t\tTHIS.pointerColor;\r\n\t\t\tp.crossLY.style.height =\r\n\t\t\tp.crossLX.style.width =\r\n\t\t\t\t(crossOuterSize - 2 * THIS.pointerBorderWidth) + 'px';\r\n\t\t\tp.crossLY.style.width =\r\n\t\t\tp.crossLX.style.height =\r\n\t\t\t\tTHIS.pointerThickness + 'px';\r\n\t\t\tp.crossLY.style.left =\r\n\t\t\tp.crossLX.style.top =\r\n\t\t\t\t(Math.floor(crossOuterSize / 2) - Math.floor(THIS.pointerThickness / 2)) + 'px';\r\n\t\t\tp.crossLY.style.top =\r\n\t\t\tp.crossLX.style.left =\r\n\t\t\t\tTHIS.pointerBorderWidth + 'px';\r\n\r\n\r\n\t\t\t// slider\r\n\t\t\tp.sld.style.overflow = 'hidden';\r\n\t\t\tp.sld.style.width = THIS.sliderSize + 'px';\r\n\t\t\tp.sld.style.height = THIS.height + 'px';\r\n\r\n\t\t\t// slider gradient\r\n\t\t\tp.sldGrad.draw(THIS.sliderSize, THIS.height, '#000', '#000');\r\n\r\n\t\t\t// slider border\r\n\t\t\tp.sldB.style.display = displaySlider ? 'block' : 'none';\r\n\t\t\tp.sldB.style.position = 'absolute';\r\n\t\t\tp.sldB.style.left = (THIS.padding + THIS.width + 2 * THIS.controlBorderWidth + 2 * controlPadding) + 'px';\r\n\t\t\tp.sldB.style.top = THIS.padding + 'px';\r\n\t\t\tp.sldB.style.border = THIS.controlBorderWidth + 'px solid';\r\n\t\t\tp.sldB.style.borderColor = THIS.controlBorderColor;\r\n\r\n\t\t\t// slider mouse area\r\n\t\t\tp.sldM.style.display = displaySlider ? 'block' : 'none';\r\n\t\t\tp.sldM.style.position = 'absolute';\r\n\t\t\tp.sldM.style.left = (THIS.padding + THIS.width + 2 * THIS.controlBorderWidth + controlPadding) + 'px';\r\n\t\t\tp.sldM.style.top = 0 + 'px';\r\n\t\t\tp.sldM.style.width = (\r\n\t\t\t\t\t(THIS.sliderSize + 2 * controlPadding + 2 * THIS.controlBorderWidth) +\r\n\t\t\t\t\t(displayAlphaSlider ? 0 : Math.max(0, THIS.padding - controlPadding)) // remaining padding to the right edge\r\n\t\t\t\t) + 'px';\r\n\t\t\tp.sldM.style.height = (2 * THIS.controlBorderWidth + 2 * THIS.padding + THIS.height) + 'px';\r\n\t\t\tp.sldM.style.cursor = 'default';\r\n\t\t\tjsc.setData(p.sldM, {\r\n\t\t\t\tinstance: THIS,\r\n\t\t\t\tcontrol: 'sld',\r\n\t\t\t});\r\n\r\n\t\t\t// slider pointer inner and outer border\r\n\t\t\tp.sldPtrIB.style.border =\r\n\t\t\tp.sldPtrOB.style.border =\r\n\t\t\t\tTHIS.pointerBorderWidth + 'px solid ' + THIS.pointerBorderColor;\r\n\r\n\t\t\t// slider pointer outer border\r\n\t\t\tp.sldPtrOB.style.position = 'absolute';\r\n\t\t\tp.sldPtrOB.style.left = -(2 * THIS.pointerBorderWidth + THIS.pointerThickness) + 'px';\r\n\t\t\tp.sldPtrOB.style.top = '0';\r\n\r\n\t\t\t// slider pointer middle border\r\n\t\t\tp.sldPtrMB.style.border = THIS.pointerThickness + 'px solid ' + THIS.pointerColor;\r\n\r\n\t\t\t// slider pointer spacer\r\n\t\t\tp.sldPtrS.style.width = THIS.sliderSize + 'px';\r\n\t\t\tp.sldPtrS.style.height = jsc.pub.sliderInnerSpace + 'px';\r\n\r\n\r\n\t\t\t// alpha slider\r\n\t\t\tp.asld.style.overflow = 'hidden';\r\n\t\t\tp.asld.style.width = THIS.sliderSize + 'px';\r\n\t\t\tp.asld.style.height = THIS.height + 'px';\r\n\r\n\t\t\t// alpha slider gradient\r\n\t\t\tp.asldGrad.draw(THIS.sliderSize, THIS.height, '#000');\r\n\r\n\t\t\t// alpha slider border\r\n\t\t\tp.asldB.style.display = displayAlphaSlider ? 'block' : 'none';\r\n\t\t\tp.asldB.style.position = 'absolute';\r\n\t\t\tp.asldB.style.left = (\r\n\t\t\t\t\t(THIS.padding + THIS.width + 2 * THIS.controlBorderWidth + controlPadding) +\r\n\t\t\t\t\t(displaySlider ? (THIS.sliderSize + 3 * controlPadding + 2 * THIS.controlBorderWidth) : 0)\r\n\t\t\t\t) + 'px';\r\n\t\t\tp.asldB.style.top = THIS.padding + 'px';\r\n\t\t\tp.asldB.style.border = THIS.controlBorderWidth + 'px solid';\r\n\t\t\tp.asldB.style.borderColor = THIS.controlBorderColor;\r\n\r\n\t\t\t// alpha slider mouse area\r\n\t\t\tp.asldM.style.display = displayAlphaSlider ? 'block' : 'none';\r\n\t\t\tp.asldM.style.position = 'absolute';\r\n\t\t\tp.asldM.style.left = (\r\n\t\t\t\t\t(THIS.padding + THIS.width + 2 * THIS.controlBorderWidth + controlPadding) +\r\n\t\t\t\t\t(displaySlider ? (THIS.sliderSize + 2 * controlPadding + 2 * THIS.controlBorderWidth) : 0)\r\n\t\t\t\t) + 'px';\r\n\t\t\tp.asldM.style.top = 0 + 'px';\r\n\t\t\tp.asldM.style.width = (\r\n\t\t\t\t\t(THIS.sliderSize + 2 * controlPadding + 2 * THIS.controlBorderWidth) +\r\n\t\t\t\t\tMath.max(0, THIS.padding - controlPadding) // remaining padding to the right edge\r\n\t\t\t\t) + 'px';\r\n\t\t\tp.asldM.style.height = (2 * THIS.controlBorderWidth + 2 * THIS.padding + THIS.height) + 'px';\r\n\t\t\tp.asldM.style.cursor = 'default';\r\n\t\t\tjsc.setData(p.asldM, {\r\n\t\t\t\tinstance: THIS,\r\n\t\t\t\tcontrol: 'asld',\r\n\t\t\t})\r\n\r\n\t\t\t// alpha slider pointer inner and outer border\r\n\t\t\tp.asldPtrIB.style.border =\r\n\t\t\tp.asldPtrOB.style.border =\r\n\t\t\t\tTHIS.pointerBorderWidth + 'px solid ' + THIS.pointerBorderColor;\r\n\r\n\t\t\t// alpha slider pointer outer border\r\n\t\t\tp.asldPtrOB.style.position = 'absolute';\r\n\t\t\tp.asldPtrOB.style.left = -(2 * THIS.pointerBorderWidth + THIS.pointerThickness) + 'px';\r\n\t\t\tp.asldPtrOB.style.top = '0';\r\n\r\n\t\t\t// alpha slider pointer middle border\r\n\t\t\tp.asldPtrMB.style.border = THIS.pointerThickness + 'px solid ' + THIS.pointerColor;\r\n\r\n\t\t\t// alpha slider pointer spacer\r\n\t\t\tp.asldPtrS.style.width = THIS.sliderSize + 'px';\r\n\t\t\tp.asldPtrS.style.height = jsc.pub.sliderInnerSpace + 'px';\r\n\r\n\r\n\t\t\t// palette\r\n\t\t\tp.pal.className = 'jscolor-palette';\r\n\t\t\tp.pal.style.display = pickerDims.palette.rows ? 'block' : 'none';\r\n\t\t\tp.pal.style.position = 'absolute';\r\n\t\t\tp.pal.style.left = THIS.padding + 'px';\r\n\t\t\tp.pal.style.top = (2 * THIS.controlBorderWidth + 2 * THIS.padding + THIS.height) + 'px';\r\n\r\n\t\t\t// palette's color samples\r\n\r\n\t\t\tp.pal.innerHTML = '';\r\n\r\n\t\t\tvar chessboard = jsc.genColorPreviewCanvas('rgba(0,0,0,0)');\r\n\r\n\t\t\tvar si = 0; // color sample's index\r\n\t\t\tfor (var r = 0; r < pickerDims.palette.rows; r++) {\r\n\t\t\t\tfor (var c = 0; c < pickerDims.palette.cols && si < THIS._palette.length; c++, si++) {\r\n\t\t\t\t\tvar sampleColor = THIS._palette[si];\r\n\t\t\t\t\tvar sampleCssColor = jsc.rgbaColor.apply(null, sampleColor.rgba);\r\n\r\n\t\t\t\t\tvar sc = jsc.createEl('div'); // color sample's color\r\n\t\t\t\t\tsc.style.width = (pickerDims.palette.cellW - 2 * THIS.controlBorderWidth) + 'px';\r\n\t\t\t\t\tsc.style.height = (pickerDims.palette.cellH - 2 * THIS.controlBorderWidth) + 'px';\r\n\t\t\t\t\tsc.style.backgroundColor = sampleCssColor;\r\n\r\n\t\t\t\t\tvar sw = jsc.createEl('div'); // color sample's wrap\r\n\t\t\t\t\tsw.className = 'jscolor-palette-sample';\r\n\t\t\t\t\tsw.style.display = 'block';\r\n\t\t\t\t\tsw.style.position = 'absolute';\r\n\t\t\t\t\tsw.style.left = (\r\n\t\t\t\t\t\t\tpickerDims.palette.cols <= 1 ? 0 :\r\n\t\t\t\t\t\t\tMath.round(10 * (c * ((pickerDims.contentW - pickerDims.palette.cellW) / (pickerDims.palette.cols - 1)))) / 10\r\n\t\t\t\t\t\t) + 'px';\r\n\t\t\t\t\tsw.style.top = (r * (pickerDims.palette.cellH + THIS.paletteSpacing)) + 'px';\r\n\t\t\t\t\tsw.style.border = THIS.controlBorderWidth + 'px solid';\r\n\t\t\t\t\tsw.style.borderColor = THIS.controlBorderColor;\r\n\t\t\t\t\tsw.style.cursor = 'pointer';\r\n\t\t\t\t\tif (sampleColor.rgba[3] !== null && sampleColor.rgba[3] < 1.0) { // only create chessboard background if the sample has transparency\r\n\t\t\t\t\t\tsw.style.backgroundImage = 'url(\\'' + chessboard.canvas.toDataURL() + '\\')';\r\n\t\t\t\t\t\tsw.style.backgroundRepeat = 'repeat';\r\n\t\t\t\t\t\tsw.style.backgroundPosition = 'center center';\r\n\t\t\t\t\t}\r\n\t\t\t\t\tjsc.setData(sw, {\r\n\t\t\t\t\t\tinstance: THIS,\r\n\t\t\t\t\t\tcontrol: 'palette-sample',\r\n\t\t\t\t\t\tcolor: sampleColor,\r\n\t\t\t\t\t})\r\n\t\t\t\t\tsw.addEventListener('click', jsc.onPaletteSampleClick, false);\r\n\t\t\t\t\tsw.appendChild(sc);\r\n\t\t\t\t\tp.pal.appendChild(sw);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\r\n\t\t\t// the Close button\r\n\t\t\tfunction setBtnBorder () {\r\n\t\t\t\tvar insetColors = THIS.controlBorderColor.split(/\\s+/);\r\n\t\t\t\tvar outsetColor = insetColors.length < 2 ? insetColors[0] : insetColors[1] + ' ' + insetColors[0] + ' ' + insetColors[0] + ' ' + insetColors[1];\r\n\t\t\t\tp.btn.style.borderColor = outsetColor;\r\n\t\t\t}\r\n\t\t\tvar btnPadding = 15; // px\r\n\t\t\tp.btn.className = 'jscolor-btn-close';\r\n\t\t\tp.btn.style.display = THIS.closeButton ? 'block' : 'none';\r\n\t\t\tp.btn.style.position = 'absolute';\r\n\t\t\tp.btn.style.left = THIS.padding + 'px';\r\n\t\t\tp.btn.style.bottom = THIS.padding + 'px';\r\n\t\t\tp.btn.style.padding = '0 ' + btnPadding + 'px';\r\n\t\t\tp.btn.style.maxWidth = (pickerDims.contentW - 2 * THIS.controlBorderWidth - 2 * btnPadding) + 'px';\r\n\t\t\tp.btn.style.overflow = 'hidden';\r\n\t\t\tp.btn.style.height = THIS.buttonHeight + 'px';\r\n\t\t\tp.btn.style.whiteSpace = 'nowrap';\r\n\t\t\tp.btn.style.border = THIS.controlBorderWidth + 'px solid';\r\n\t\t\tsetBtnBorder();\r\n\t\t\tp.btn.style.color = THIS.buttonColor;\r\n\t\t\tp.btn.style.font = '12px sans-serif';\r\n\t\t\tp.btn.style.textAlign = 'center';\r\n\t\t\tp.btn.style.cursor = 'pointer';\r\n\t\t\tp.btn.onmousedown = function () {\r\n\t\t\t\tTHIS.hide();\r\n\t\t\t};\r\n\t\t\tp.btnT.style.lineHeight = THIS.buttonHeight + 'px';\r\n\t\t\tp.btnT.innerHTML = '';\r\n\t\t\tp.btnT.appendChild(window.document.createTextNode(THIS.closeText));\r\n\r\n\t\t\t// reposition the pointers\r\n\t\t\tredrawPad();\r\n\t\t\tredrawSld();\r\n\t\t\tredrawASld();\r\n\r\n\t\t\t// If we are changing the owner without first closing the picker,\r\n\t\t\t// make sure to first deal with the old owner\r\n\t\t\tif (jsc.picker.owner && jsc.picker.owner !== THIS) {\r\n\t\t\t\tjsc.removeClass(jsc.picker.owner.targetElement, jsc.pub.activeClassName);\r\n\t\t\t}\r\n\r\n\t\t\t// Set a new picker owner\r\n\t\t\tjsc.picker.owner = THIS;\r\n\r\n\t\t\t// The redrawPosition() method needs picker.owner to be set, that's why we call it here,\r\n\t\t\t// after setting the owner\r\n\t\t\tif (THIS.container === window.document.body) {\r\n\t\t\t\tjsc.redrawPosition();\r\n\t\t\t} else {\r\n\t\t\t\tjsc._drawPosition(THIS, 0, 0, 'relative', false);\r\n\t\t\t}\r\n\r\n\t\t\tif (p.wrap.parentNode !== THIS.container) {\r\n\t\t\t\tTHIS.container.appendChild(p.wrap);\r\n\t\t\t}\r\n\r\n\t\t\tjsc.addClass(THIS.targetElement, jsc.pub.activeClassName);\r\n\t\t}\r\n\r\n\r\n\t\tfunction redrawPad () {\r\n\t\t\t// redraw the pad pointer\r\n\t\t\tvar yChannel = jsc.getPadYChannel(THIS);\r\n\t\t\tvar x = Math.round((THIS.channels.h / 360) * (THIS.width - 1));\r\n\t\t\tvar y = Math.round((1 - THIS.channels[yChannel] / 100) * (THIS.height - 1));\r\n\t\t\tvar crossOuterSize = (2 * THIS.pointerBorderWidth + THIS.pointerThickness + 2 * THIS.crossSize);\r\n\t\t\tvar ofs = -Math.floor(crossOuterSize / 2);\r\n\t\t\tjsc.picker.cross.style.left = (x + ofs) + 'px';\r\n\t\t\tjsc.picker.cross.style.top = (y + ofs) + 'px';\r\n\r\n\t\t\t// redraw the slider\r\n\t\t\tswitch (jsc.getSliderChannel(THIS)) {\r\n\t\t\tcase 's':\r\n\t\t\t\tvar rgb1 = jsc.HSV_RGB(THIS.channels.h, 100, THIS.channels.v);\r\n\t\t\t\tvar rgb2 = jsc.HSV_RGB(THIS.channels.h, 0, THIS.channels.v);\r\n\t\t\t\tvar color1 = 'rgb(' +\r\n\t\t\t\t\tMath.round(rgb1[0]) + ',' +\r\n\t\t\t\t\tMath.round(rgb1[1]) + ',' +\r\n\t\t\t\t\tMath.round(rgb1[2]) + ')';\r\n\t\t\t\tvar color2 = 'rgb(' +\r\n\t\t\t\t\tMath.round(rgb2[0]) + ',' +\r\n\t\t\t\t\tMath.round(rgb2[1]) + ',' +\r\n\t\t\t\t\tMath.round(rgb2[2]) + ')';\r\n\t\t\t\tjsc.picker.sldGrad.draw(THIS.sliderSize, THIS.height, color1, color2);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'v':\r\n\t\t\t\tvar rgb = jsc.HSV_RGB(THIS.channels.h, THIS.channels.s, 100);\r\n\t\t\t\tvar color1 = 'rgb(' +\r\n\t\t\t\t\tMath.round(rgb[0]) + ',' +\r\n\t\t\t\t\tMath.round(rgb[1]) + ',' +\r\n\t\t\t\t\tMath.round(rgb[2]) + ')';\r\n\t\t\t\tvar color2 = '#000';\r\n\t\t\t\tjsc.picker.sldGrad.draw(THIS.sliderSize, THIS.height, color1, color2);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\t// redraw the alpha slider\r\n\t\t\tjsc.picker.asldGrad.draw(THIS.sliderSize, THIS.height, THIS.toHEXString());\r\n\t\t}\r\n\r\n\r\n\t\tfunction redrawSld () {\r\n\t\t\tvar sldChannel = jsc.getSliderChannel(THIS);\r\n\t\t\tif (sldChannel) {\r\n\t\t\t\t// redraw the slider pointer\r\n\t\t\t\tvar y = Math.round((1 - THIS.channels[sldChannel] / 100) * (THIS.height - 1));\r\n\t\t\t\tjsc.picker.sldPtrOB.style.top = (y - (2 * THIS.pointerBorderWidth + THIS.pointerThickness) - Math.floor(jsc.pub.sliderInnerSpace / 2)) + 'px';\r\n\t\t\t}\r\n\r\n\t\t\t// redraw the alpha slider\r\n\t\t\tjsc.picker.asldGrad.draw(THIS.sliderSize, THIS.height, THIS.toHEXString());\r\n\t\t}\r\n\r\n\r\n\t\tfunction redrawASld () {\r\n\t\t\tvar y = Math.round((1 - THIS.channels.a) * (THIS.height - 1));\r\n\t\t\tjsc.picker.asldPtrOB.style.top = (y - (2 * THIS.pointerBorderWidth + THIS.pointerThickness) - Math.floor(jsc.pub.sliderInnerSpace / 2)) + 'px';\r\n\t\t}\r\n\r\n\r\n\t\tfunction isPickerOwner () {\r\n\t\t\treturn jsc.picker && jsc.picker.owner === THIS;\r\n\t\t}\r\n\r\n\r\n\t\tfunction onValueKeyDown (ev) {\r\n\t\t\tif (jsc.eventKey(ev) === 'Enter') {\r\n\t\t\t\tif (THIS.valueElement) {\r\n\t\t\t\t\tTHIS.processValueInput(THIS.valueElement.value);\r\n\t\t\t\t}\r\n\t\t\t\tTHIS.tryHide();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\tfunction onAlphaKeyDown (ev) {\r\n\t\t\tif (jsc.eventKey(ev) === 'Enter') {\r\n\t\t\t\tif (THIS.alphaElement) {\r\n\t\t\t\t\tTHIS.processAlphaInput(THIS.alphaElement.value);\r\n\t\t\t\t}\r\n\t\t\t\tTHIS.tryHide();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\tfunction onValueChange (ev) {\r\n\t\t\tif (jsc.getData(ev, 'internal')) {\r\n\t\t\t\treturn; // skip if the event was internally triggered by jscolor\r\n\t\t\t}\r\n\r\n\t\t\tvar oldVal = THIS.valueElement.value;\r\n\r\n\t\t\tTHIS.processValueInput(THIS.valueElement.value); // this might change the value\r\n\r\n\t\t\tjsc.triggerCallback(THIS, 'onChange');\r\n\r\n\t\t\tif (THIS.valueElement.value !== oldVal) {\r\n\t\t\t\t// value was additionally changed -> let's trigger the change event again, even though it was natively dispatched\r\n\t\t\t\tjsc.triggerInputEvent(THIS.valueElement, 'change', true, true);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\tfunction onAlphaChange (ev) {\r\n\t\t\tif (jsc.getData(ev, 'internal')) {\r\n\t\t\t\treturn; // skip if the event was internally triggered by jscolor\r\n\t\t\t}\r\n\r\n\t\t\tvar oldVal = THIS.alphaElement.value;\r\n\r\n\t\t\tTHIS.processAlphaInput(THIS.alphaElement.value); // this might change the value\r\n\r\n\t\t\tjsc.triggerCallback(THIS, 'onChange');\r\n\r\n\t\t\t// triggering valueElement's onChange (because changing alpha changes the entire color, e.g. with rgba format)\r\n\t\t\tjsc.triggerInputEvent(THIS.valueElement, 'change', true, true);\r\n\r\n\t\t\tif (THIS.alphaElement.value !== oldVal) {\r\n\t\t\t\t// value was additionally changed -> let's trigger the change event again, even though it was natively dispatched\r\n\t\t\t\tjsc.triggerInputEvent(THIS.alphaElement, 'change', true, true);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\tfunction onValueInput (ev) {\r\n\t\t\tif (jsc.getData(ev, 'internal')) {\r\n\t\t\t\treturn; // skip if the event was internally triggered by jscolor\r\n\t\t\t}\r\n\r\n\t\t\tif (THIS.valueElement) {\r\n\t\t\t\tTHIS.fromString(THIS.valueElement.value, jsc.flags.leaveValue);\r\n\t\t\t}\r\n\r\n\t\t\tjsc.triggerCallback(THIS, 'onInput');\r\n\r\n\t\t\t// triggering valueElement's onInput\r\n\t\t\t// (not needed, it was dispatched normally by the browser)\r\n\t\t}\r\n\r\n\r\n\t\tfunction onAlphaInput (ev) {\r\n\t\t\tif (jsc.getData(ev, 'internal')) {\r\n\t\t\t\treturn; // skip if the event was internally triggered by jscolor\r\n\t\t\t}\r\n\r\n\t\t\tif (THIS.alphaElement) {\r\n\t\t\t\tTHIS.fromHSVA(null, null, null, parseFloat(THIS.alphaElement.value), jsc.flags.leaveAlpha);\r\n\t\t\t}\r\n\r\n\t\t\tjsc.triggerCallback(THIS, 'onInput');\r\n\r\n\t\t\t// triggering valueElement's onInput (because changing alpha changes the entire color, e.g. with rgba format)\r\n\t\t\tjsc.triggerInputEvent(THIS.valueElement, 'input', true, true);\r\n\t\t}\r\n\r\n\r\n\t\t// let's process the DEPRECATED 'options' property (this will be later removed)\r\n\t\tif (jsc.pub.options) {\r\n\t\t\t// let's set custom default options, if specified\r\n\t\t\tfor (var opt in jsc.pub.options) {\r\n\t\t\t\tif (jsc.pub.options.hasOwnProperty(opt)) {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tsetOption(opt, jsc.pub.options[opt]);\r\n\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\tconsole.warn(e);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t// let's apply configuration presets\r\n\t\t//\r\n\t\tvar presetsArr = [];\r\n\r\n\t\tif (opts.preset) {\r\n\t\t\tif (typeof opts.preset === 'string') {\r\n\t\t\t\tpresetsArr = opts.preset.split(/\\s+/);\r\n\t\t\t} else if (Array.isArray(opts.preset)) {\r\n\t\t\t\tpresetsArr = opts.preset.slice(); // slice() to clone\r\n\t\t\t} else {\r\n\t\t\t\tconsole.warn('Unrecognized preset value');\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// always use the 'default' preset. If it's not listed, append it to the end.\r\n\t\tif (presetsArr.indexOf('default') === -1) {\r\n\t\t\tpresetsArr.push('default');\r\n\t\t}\r\n\r\n\t\t// let's apply the presets in reverse order, so that should there be any overlapping options,\r\n\t\t// the formerly listed preset will override the latter\r\n\t\tfor (var i = presetsArr.length - 1; i >= 0; i -= 1) {\r\n\t\t\tvar pres = presetsArr[i];\r\n\t\t\tif (!pres) {\r\n\t\t\t\tcontinue; // preset is empty string\r\n\t\t\t}\r\n\t\t\tif (!jsc.pub.presets.hasOwnProperty(pres)) {\r\n\t\t\t\tconsole.warn('Unknown preset: %s', pres);\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\tfor (var opt in jsc.pub.presets[pres]) {\r\n\t\t\t\tif (jsc.pub.presets[pres].hasOwnProperty(opt)) {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tsetOption(opt, jsc.pub.presets[pres][opt]);\r\n\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\tconsole.warn(e);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t// let's set specific options for this color picker\r\n\t\tvar nonProperties = [\r\n\t\t\t// these options won't be set as instance properties\r\n\t\t\t'preset',\r\n\t\t];\r\n\t\tfor (var opt in opts) {\r\n\t\t\tif (opts.hasOwnProperty(opt)) {\r\n\t\t\t\tif (nonProperties.indexOf(opt) === -1) {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tsetOption(opt, opts[opt]);\r\n\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\tconsole.warn(e);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t//\r\n\t\t// Install the color picker on chosen element(s)\r\n\t\t//\r\n\r\n\r\n\t\t// Determine picker's container element\r\n\t\tif (this.container === undefined) {\r\n\t\t\tthis.container = window.document.body; // default container is BODY element\r\n\r\n\t\t} else { // explicitly set to custom element\r\n\t\t\tthis.container = jsc.node(this.container);\r\n\t\t}\r\n\r\n\t\tif (!this.container) {\r\n\t\t\tthrow new Error('Cannot instantiate color picker without a container element');\r\n\t\t}\r\n\r\n\r\n\t\t// Fetch the target element\r\n\t\tthis.targetElement = jsc.node(targetElement);\r\n\r\n\t\tif (!this.targetElement) {\r\n\t\t\t// temporarily customized error message to help with migrating from versions prior to 2.2\r\n\t\t\tif (typeof targetElement === 'string' && /^[a-zA-Z][\\w:.-]*$/.test(targetElement)) {\r\n\t\t\t\t// targetElement looks like valid ID\r\n\t\t\t\tvar possiblyId = targetElement;\r\n\t\t\t\tthrow new Error('If \\'' + possiblyId + '\\' is supposed to be an ID, please use \\'#' + possiblyId + '\\' or any valid CSS selector.');\r\n\t\t\t}\r\n\r\n\t\t\tthrow new Error('Cannot instantiate color picker without a target element');\r\n\t\t}\r\n\r\n\t\tif (this.targetElement.jscolor && this.targetElement.jscolor instanceof jsc.pub) {\r\n\t\t\tthrow new Error('Color picker already installed on this element');\r\n\t\t}\r\n\r\n\r\n\t\t// link this instance with the target element\r\n\t\tthis.targetElement.jscolor = this;\r\n\t\tjsc.addClass(this.targetElement, jsc.pub.className);\r\n\r\n\t\t// register this instance\r\n\t\tjsc.instances.push(this);\r\n\r\n\r\n\t\t// if target is BUTTON\r\n\t\tif (jsc.isButton(this.targetElement)) {\r\n\r\n\t\t\tif (this.targetElement.type.toLowerCase() !== 'button') {\r\n\t\t\t\t// on buttons, always force type to be 'button', e.g. in situations the target `,\n );\n }\n }\n if (Game.buyMode === -1) {\n /*\n * Fix sell price displayed in the object tooltip.\n *\n * The buildings sell price displayed by the game itself (without any mod) is incorrect.\n * The following line of code fixes this issue, and can be safely removed when the game gets fixed.\n *\n * This issue is extensively detailed here: https://github.com/Aktanusa/CookieMonster/issues/359#issuecomment-735658262\n */\n l('tooltip').innerHTML = l('tooltip')\n .innerHTML.split(Beautify(Game.Objects[name].bulkPrice))\n .join(\n Beautify(\n (Game.Objects[name],\n Game.Objects[name].basePrice,\n Game.Objects[name].amount,\n Game.Objects[name].free,\n Game.buyBulk,\n 1),\n ),\n );\n }\n } else if (type === 'u') {\n // Upgrades\n if (!Game.UpgradesInStore[name]) return '';\n l('tooltip').innerHTML = Game.crateTooltip(Game.UpgradesInStore[name], 'store');\n } else if (type === 's') l('tooltip').innerHTML = Game.lumpTooltip();\n // Sugar Lumps\n else if (type === 'g')\n l('tooltip').innerHTML = Game.Objects['Wizard tower'].minigame.spellTooltip(name)();\n // Grimoire\n else if (type === 'p')\n l('tooltip').innerHTML = Game.ObjectsById[2].minigame.tileTooltip(name[0], name[1])();\n // Harvest all button in garden\n else if (type === 'ha') l('tooltip').innerHTML = Game.ObjectsById[2].minigame.toolTooltip(1)();\n else if (type === 'wb') l('tooltip').innerHTML = '';\n else if (type === 'pag') l('tooltip').innerHTML = Game.Objects.Temple.minigame.godTooltip(name)();\n else if (type === 'pas')\n l('tooltip').innerHTML = Game.Objects.Temple.minigame.slotTooltip(name[0])();\n\n // Adds area for extra tooltip-sections\n if (\n (type === 'b' && Game.buyMode === 1) ||\n type === 'u' ||\n type === 's' ||\n type === 'g' ||\n (type === 'p' && !Game.keys[16]) ||\n type === 'ha' ||\n type === 'wb' ||\n type === 'pag' ||\n (type === 'pas' && name[1] !== -1)\n ) {\n const area = document.createElement('div');\n area.id = 'CMTooltipArea';\n l('tooltip').appendChild(area);\n }\n\n // Sets global variables used by CM.Disp.UpdateTooltip()\n TooltipType = type;\n TooltipName = name;\n\n UpdateTooltips();\n\n return l('tooltip').innerHTML;\n}\n","import { CacheSpawnedGoldenShimmer } from '../../Cache/VariablesAndData';\nimport { LastGoldenCookieState } from '../../Main/VariablesAndData';\n\n/**\n * This function creates the Favicon, it is called by CM.Main.DelayInit()\n */\nexport function CreateFavicon() {\n const Favicon = document.createElement('link');\n Favicon.id = 'CMFavicon';\n Favicon.rel = 'shortcut icon';\n Favicon.href = 'https://orteil.dashnet.org/cookieclicker/favicon.ico';\n document.getElementsByTagName('head')[0].appendChild(Favicon);\n}\n\n/**\n * This function updates the Favicon depending on whether a Golden Cookie has spawned\n * By relying on CM.Cache.spawnedGoldenShimmer it only changes for non-user spawned cookie\n */\nexport function UpdateFavicon() {\n if (\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.Favicon === 1 &&\n LastGoldenCookieState > 0\n ) {\n if (CacheSpawnedGoldenShimmer.wrath)\n l('CMFavicon').href =\n 'https://CookieMonsterTeam.github.io/CookieMonster/favicon/wrathCookie.ico';\n else\n l('CMFavicon').href =\n 'https://CookieMonsterTeam.github.io/CookieMonster/favicon/goldenCookie.ico';\n } else l('CMFavicon').href = 'https://orteil.dashnet.org/cookieclicker/favicon.ico';\n}\n","/** Functions used to create static objects of Buildings, Upgrades and Achievements */\n\nimport CopyData from '../SimulationData/CopyData';\nimport { SimAchievements, SimObjects, SimUpgrades } from '../VariablesAndData';\nimport InitAchievement from './InitAchievement';\nimport InitialBuildingData from './InitialBuildingData';\nimport InitUpgrade from './InitUpgrade';\n\n/**\n * This function creates static objects for Buildings, Upgrades and Achievements\n */\nexport default function InitData() {\n // Buildings\n SimObjects = [];\n Object.keys(Game.Objects).forEach((i) => {\n SimObjects[i] = InitialBuildingData(i);\n });\n\n // Upgrades\n SimUpgrades = [];\n Object.keys(Game.Upgrades).forEach((i) => {\n SimUpgrades[i] = InitUpgrade(i);\n });\n\n // Achievements\n SimAchievements = [];\n Object.keys(Game.Achievements).forEach((i) => {\n SimAchievements[i] = InitAchievement(i);\n });\n CopyData();\n}\n","import { CreateTooltip } from '../../Disp/Tooltips/Tooltip';\nimport { TooltipGrimoireBackup } from '../VariablesAndData';\n\n/**\n * This function replaces the original .onmouseover functions of the Grimoire minigame\n */\nexport default function ReplaceTooltipGrimoire() {\n if (Game.Objects['Wizard tower'].minigameLoaded) {\n Object.keys(Game.Objects['Wizard tower'].minigame.spellsById).forEach((i) => {\n if (l(`grimoireSpell${i}`).onmouseover !== null) {\n TooltipGrimoireBackup[i] = l(`grimoireSpell${i}`).onmouseover;\n l(`grimoireSpell${i}`).onmouseover = function () {\n Game.tooltip.dynamic = 1;\n Game.tooltip.draw(this, () => CreateTooltip('g', `${i}`), 'this');\n Game.tooltip.wobble();\n };\n }\n });\n }\n}\n","import FormatTime from '../../Disp/BeautifyAndFormatting/FormatTime';\nimport CalculateGrimoireRefillTime from '../../Disp/HelperFunctions/CalculateGrimoireRefillTime';\nimport {\n BackupGrimoireDraw,\n BackupGrimoireLaunch, // eslint-disable-line no-unused-vars\n BackupGrimoireLaunchMod,\n HasReplaceNativeGrimoireDraw,\n HasReplaceNativeGrimoireLaunch,\n} from '../VariablesAndData';\nimport ReplaceTooltipGrimoire from './TooltipGrimoire';\n\n/**\n * This function fixes replaces the .draw function of the Grimoire\n */\nfunction ReplaceNativeGrimoireDraw() {\n if (!HasReplaceNativeGrimoireDraw && Game.Objects['Wizard tower'].minigameLoaded) {\n const { minigame } = Game.Objects['Wizard tower'];\n BackupGrimoireDraw = minigame.draw;\n Game.Objects['Wizard tower'].minigame.draw = function () {\n BackupGrimoireDraw();\n if (\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.GrimoireBar === 1 &&\n minigame.magic < minigame.magicM &&\n Game.drawT % 5 === 0\n ) {\n minigame.magicBarTextL.innerHTML += ` (${FormatTime(\n CalculateGrimoireRefillTime(minigame.magic, minigame.magicM, minigame.magicM),\n )})`;\n minigame.magicBarL.style.width = \"75%\" // TODO: Fix this after Orteil pushes fix to main game;\n }\n };\n HasReplaceNativeGrimoireDraw = true;\n }\n}\n\n/**\n * This function fixes replaces the .launch function of the Grimoire\n */\nfunction ReplaceNativeGrimoireLaunch() {\n if (!HasReplaceNativeGrimoireLaunch && Game.Objects['Wizard tower'].minigameLoaded) {\n const { minigame } = Game.Objects['Wizard tower'];\n BackupGrimoireLaunch = minigame.launch;\n BackupGrimoireLaunchMod = new Function( // eslint-disable-line no-new-func\n `return ${minigame.launch\n .toString()\n .split('=this')\n .join(\"= Game.Objects['Wizard tower'].minigame\")}`,\n );\n Game.Objects['Wizard tower'].minigame.launch = function () {\n BackupGrimoireLaunchMod();\n ReplaceTooltipGrimoire();\n HasReplaceNativeGrimoireDraw = false;\n ReplaceNativeGrimoireDraw();\n\n HasReplaceNativeGrimoireLaunch = true;\n };\n }\n}\n\n/**\n * This function fixes replaces the Launch and Draw functions of the Grimoire\n */\nexport default function ReplaceNativeGrimoire() {\n ReplaceNativeGrimoireLaunch();\n ReplaceNativeGrimoireDraw();\n}\n","/** Functions related to the Dragon */\n\nimport Beautify from '../../Disp/BeautifyAndFormatting/Beautify';\nimport CopyData from '../../Sim/SimulationData/CopyData';\nimport { SimDoSims, SimObjects } from '../../Sim/VariablesAndData';\nimport FillCMDCache from '../FillCMDCache';\nimport { CacheCostDragonUpgrade, CacheLastDragonLevel } from '../VariablesAndData'; // eslint-disable-line no-unused-vars\n\n/**\n * This functions caches the current cost of upgrading the dragon level so it can be displayed in the tooltip\n */\nexport default function CacheDragonCost() {\n if (CacheLastDragonLevel !== Game.dragonLevel || SimDoSims) {\n if (\n Game.dragonLevel < 25 &&\n Game.dragonLevels[Game.dragonLevel].buy.toString().includes('sacrifice')\n ) {\n const objectMatch = Game.dragonLevels[Game.dragonLevel].buy.toString().match(/Objects\\[(.*)\\]/);\n let target = objectMatch !== null ? objectMatch[1] : Game.ObjectsById[Game.dragonLevel-5].name;\n const amount = Game.dragonLevels[Game.dragonLevel].buy\n .toString()\n .match(/sacrifice\\((.*?)\\)/)[1];\n if (target !== 'i') {\n target = target.replaceAll(\"'\", '');\n if (Game.Objects[target].amount < amount) {\n CacheCostDragonUpgrade = 'Not enough buildings to sell';\n } else {\n let cost = 0;\n CopyData();\n for (let i = 0; i < amount; i++) {\n let price =\n SimObjects[target].basePrice *\n Game.priceIncrease **\n Math.max(0, SimObjects[target].amount - 1 - SimObjects[target].free);\n price = Game.modifyBuildingPrice(SimObjects[target], price);\n price = Math.ceil(price);\n cost += price;\n SimObjects[target].amount -= 1;\n }\n CacheCostDragonUpgrade = `Cost to rebuy: ${Beautify(cost)}`;\n }\n } else {\n let cost = 0;\n CopyData();\n Object.keys(Game.Objects).forEach((j) => {\n target = j;\n if (Game.Objects[target].amount < amount) {\n CacheCostDragonUpgrade = 'Not enough buildings to sell';\n return;\n }\n for (let i = 0; i < amount; i++) {\n let price =\n SimObjects[target].basePrice *\n Game.priceIncrease **\n Math.max(0, SimObjects[target].amount - 1 - SimObjects[target].free);\n price = Game.modifyBuildingPrice(SimObjects[target], price);\n price = Math.ceil(price);\n cost += price;\n SimObjects[target].amount -= 1;\n }\n CacheCostDragonUpgrade = `Cost to rebuy: ${Beautify(cost)}`;\n });\n }\n }\n CacheLastDragonLevel = Game.dragonLevel;\n }\n\n FillCMDCache({ CacheLastDragonLevel });\n}\n","/** Data related to the display titles of certain sections in menu screens */\n\n/** Display titles of the headers of the Cookie Monster settings section */\nexport const ConfigGroups = {\n Favourite: 'Favourite Settings',\n Calculation: 'Calculation',\n Notation: 'Notation',\n Colours: 'Colours and colour coding',\n BarsDisplay: 'Infobars and visual settings',\n Tooltip: 'Tooltips',\n Statistics: 'Statistics',\n Notification: 'Notifications',\n Miscellaneous: 'Miscellaneous',\n};\n\n/** Display titles of the headers of the notification section of the Cookie Monster settings */\nexport const ConfigGroupsNotification = {\n NotificationGeneral: 'General Notifications',\n NotificationGC: 'Golden Cookie',\n NotificationFC: 'Fortune Cookie',\n NotificationSea: 'Season Special',\n NotificationGard: 'Garden Tick',\n NotificationMagi: 'Full Magic Bar',\n NotificationWrink: 'Wrinkler',\n NotificationWrinkMax: 'Maximum Wrinklers',\n};\n","/**\n * This function checks if the user has given permissions for notifications\n * It is called by a change in any of the notification options\n * Note that most browsers will stop asking if the user has ignored the prompt around 6 times\n * @param \t{number}\tToggleOnOff\t\tA number indicating whether the option has been turned off (0) or on (1)\n */\nfunction CheckNotificationPermissions(ToggleOnOff) {\n if (ToggleOnOff === 1) {\n // Check if browser support Promise version of Notification Permissions\n const checkNotificationPromise = function () {\n try {\n Notification.requestPermission().then();\n } catch (e) {\n return false;\n }\n return true;\n };\n\n // Check if the browser supports notifications and which type\n if (!('Notification' in window)) {\n console.log('This browser does not support notifications.'); // eslint-disable-line no-console\n } else if (checkNotificationPromise()) {\n Notification.requestPermission().then();\n } else {\n Notification.requestPermission();\n }\n }\n}\n\nexport default CheckNotificationPermissions;\n","import UpdateBuildings from '../BuildingsUpgrades/Buildings';\nimport UpdateUpgrades from '../BuildingsUpgrades/Upgrades';\nimport { UpdateBotBar } from '../InfoBars/BottomBar';\n\n/**\n * This function refreshes all numbers after a change in scale-setting\n * It is therefore called by a changes in CM.Options.Scale, CM.Options.ScaleDecimals, CM.Options.ScaleSeparator and CM.Options.ScaleCutoff\n */\nexport default function RefreshScale() {\n BeautifyAll();\n Game.RefreshStore();\n Game.RebuildUpgrades();\n\n UpdateBotBar();\n UpdateBuildings();\n UpdateUpgrades();\n}\n","import { UpdateBotBar } from '../../Disp/InfoBars/BottomBar';\nimport { UpdateBotTimerBarPosition } from '../SpecificToggles';\n\n/**\n * This function toggle the bottom bar\n * It is called by CM.Disp.UpdateAscendState() and a change in Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.BotBar\n */\nexport default function ToggleBotBar() {\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.BotBar === 1) {\n l('CMBotBar').style.display = '';\n UpdateBotBar();\n } else {\n l('CMBotBar').style.display = 'none';\n }\n UpdateBotTimerBarPosition();\n}\n","import { settingClasses } from '@cookiemonsterteam/cookiemonsterframework/src/index';\n\nimport CheckNotificationPermissions from '../Config/CheckNotificationPermissions';\nimport RefreshScale from '../Disp/HelperFunctions/RefreshScale';\nimport { SimDoSims } from '../Sim/VariablesAndData'; // eslint-disable-line no-unused-vars\nimport ToggleBotBar from '../Config/Toggles/ToggleBotBar';\nimport ToggleDetailedTime from '../Config/Toggles/ToggleDetailedTime';\nimport ToggleGCTimer from '../Config/Toggles/ToggleGCTimer';\nimport ToggleSectionHideButtons from '../Config/Toggles/ToggleSectionHideButtons';\nimport ToggleToolWarnPos from '../Config/Toggles/ToggleToolWarnPos';\nimport ToggleUpgradeBarAndColour from '../Config/Toggles/ToggleUpgradeBarAndColour';\nimport ToggleUpgradeBarFixedPos from '../Config/Toggles/ToggleUpgradeBarFixedPos';\nimport ToggleWrinklerButtons from '../Config/Toggles/ToggleWrinklerButtons';\nimport UpdateBuildings from '../Disp/BuildingsUpgrades/Buildings';\nimport { UpdateFavicon } from '../Disp/TabTitle/FavIcon';\nimport UpdateUpgradeSectionsHeight from '../Disp/BuildingsUpgrades/UpdateUpgradeSectionsHeight';\nimport UpdateUpgrades from '../Disp/BuildingsUpgrades/Upgrades';\nimport { ToggleTimerBar, ToggleTimerBarPos } from '../Config/SpecificToggles';\n\n/** This includes all options of CookieMonster and their relevant data */\nconst settings = {\n // Calculation\n CPSMode: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'Calculation',\n ['Current cookies per second', 'Average cookies per second'],\n 'Calculate times using current cookies per second or average cookies per second',\n false,\n ),\n AvgCPSHist: new settingClasses.SettingStandard(\n 3,\n 'bool',\n 'Calculation',\n [\n 'Average CPS in past 10s',\n 'Average CPS in past 15s',\n 'Average CPS in past 30s',\n 'Average CPS in past 1m',\n 'Average CPS in past 5m',\n 'Average CPS in past 10m',\n 'Average CPS in past 15m',\n 'Average CPS in past 30m',\n ],\n 'How much time average Cookies Per Second should consider',\n false,\n ),\n AvgClicksHist: new settingClasses.SettingStandard(\n 0,\n 'bool',\n 'Calculation',\n [\n 'Average clicks in past 1s',\n 'Average clicks in past 5s',\n 'Average clicks in past 10s',\n 'Average clicks in past 15s',\n 'Average clicks in past 30s',\n ],\n 'How much time average Cookie Clicks should consider',\n false,\n ),\n CalcWrink: new settingClasses.SettingStandardWithFunc(\n 0,\n 'bool',\n 'Calculation',\n [\n 'Calculate with wrinklers OFF',\n 'Calculate with wrinklers ON',\n 'Calculate with single fattest wrinkler ON',\n ],\n 'Calculate times and average Cookies Per Second with (only the single non-shiny fattest) wrinklers',\n true,\n () => {\n SimDoSims = true;\n },\n ),\n\n // Notation\n Scale: new settingClasses.SettingStandardWithFunc(\n 2,\n 'bool',\n 'Notation',\n [\n \"Game's setting scale\",\n 'Metric',\n 'Short scale',\n 'Short scale (Abbreviated)',\n 'Scientific notation',\n 'Engineering notation',\n ],\n 'Change how long numbers are formatted',\n false,\n () => {\n RefreshScale();\n },\n ),\n ScaleDecimals: new settingClasses.SettingStandardWithFunc(\n 2,\n 'bool',\n 'Notation',\n ['1 decimals', '2 decimals', '3 decimals'],\n `Set the number of decimals used when applicable. This only works with Cookie Monster scales and not with \"Game's Setting Scale\"`,\n false,\n () => {\n RefreshScale();\n },\n ),\n ScaleSeparator: new settingClasses.SettingStandardWithFunc(\n 0,\n 'bool',\n 'Notation',\n ['. for decimals (standard)', '. for thousands'],\n 'Set the separator used for decimals and thousands',\n false,\n () => {\n RefreshScale();\n },\n ),\n ScaleCutoff: new settingClasses.SettingInputNumber(\n 999999,\n 'numscale',\n 'Notation',\n 'Notation cut-off point: ',\n 'The number from which Cookie Monster will start formatting numbers based on chosen scale. Standard is 999,999. Setting this above 999,999,999 might break certain notations',\n 1,\n 999999999,\n ),\n TimeFormat: new settingClasses.SettingStandard(\n 0,\n 'bool',\n 'Notation',\n ['Time XXd, XXh, XXm, XXs', 'Time XX:XX:XX:XX:XX', 'Time XXx, XXx'],\n 'Change the time format',\n false,\n ),\n DetailedTime: new settingClasses.SettingStandardWithFunc(\n 1,\n 'bool',\n 'Notation',\n ['Detailed time OFF', 'Detailed time ON'],\n 'Change how time is displayed in certain statistics and tooltips',\n true,\n () => {\n ToggleDetailedTime();\n },\n ),\n PPDisplayTime: new settingClasses.SettingStandard(\n 0,\n 'bool',\n 'Notation',\n ['PP as value (standard)', 'PP as time unit'],\n 'Display PP as calculated value or as approximate time unit. Note that PP does not translate directly into a time unit and this is therefore only an approximation.',\n false,\n ),\n\n // Colours\n BuildColour: new settingClasses.SettingStandardWithFunc(\n 1,\n 'bool',\n 'Colours',\n ['Building colours OFF', 'Building colours ON'],\n 'Colour code buildings',\n true,\n () => {\n UpdateBuildings();\n },\n ),\n PPOnlyConsiderBuyable: new settingClasses.SettingStandard(\n 0,\n 'bool',\n 'Colours',\n [\"Don't ignore non-buyable\", 'Ignore non-buyable'],\n \"Makes Cookie Monster label buildings and upgrades you can't buy right now red, useful in those situations where you just want to spend your full bank 'most optimally'\",\n true,\n ),\n PPExcludeTop: new settingClasses.SettingStandard(\n 0,\n 'bool',\n 'Colours',\n [\n \"Don't ignore any\",\n 'Ignore 1st best',\n 'Ignore 1st and 2nd best',\n 'Ignore 1st, 2nd and 3rd best',\n ],\n 'Makes Cookie Monster ignore the 1st, 2nd or 3rd best buildings in labeling and colouring PP values',\n true,\n ),\n PPRigidelMode: new settingClasses.SettingStandard(\n 0,\n 'bool',\n 'Colours',\n ['Rigidel mode OFF', 'Rigidel mode ON'],\n 'Makes Cookie Monster ignore all \"buy 1\" options when colouring PP in order to stay at a total building count ending in 10 for pantheon god Rigidel',\n true,\n ),\n PPSecondsLowerLimit: new settingClasses.SettingInputNumber(\n 0,\n 'numscale',\n 'Colours',\n 'Lower limit for PP (in seconds): ',\n 'If a building or upgrade costs less than the specified seconds of CPS it will also be considered optimal and label it as such (\"PP is less than xx seconds of CPS\"); setting to 0 ignores this option',\n 0,\n Infinity,\n ),\n ColourBlue: new settingClasses.SettingColours(\n '#4bb8f0',\n 'colour',\n 'Colours',\n 'Standard colour is blue. Used to show upgrades better than best PP building, for Click Frenzy bar, and for various labels',\n ),\n ColourGreen: new settingClasses.SettingColours(\n '#00ff00',\n 'colour',\n 'Colours',\n 'Standard colour is green. Used to show best PP building, for Blood Frenzy bar, and for various labels',\n ),\n ColourYellow: new settingClasses.SettingColours(\n '#ffff00',\n 'colour',\n 'Colours',\n 'Standard colour is yellow. Used to show buildings within the top 10 of PP, for Frenzy bar, and for various labels',\n ),\n ColourOrange: new settingClasses.SettingColours(\n '#ff7f00',\n 'colour',\n 'Colours',\n 'Standard colour is orange. Used to show buildings within the top 20 of PP, for Next Reindeer bar, and for various labels',\n ),\n ColourRed: new settingClasses.SettingColours(\n '#ff0000',\n 'colour',\n 'Colours',\n 'Standard colour is Red. Used to show buildings within the top 30 of PP, for Clot bar, and for various labels',\n ),\n ColourPurple: new settingClasses.SettingColours(\n '#ff00ff',\n 'colour',\n 'Colours',\n 'Standard colour is purple. Used to show buildings outside of the top 30 of PP, for Next Cookie bar, and for various labels',\n ),\n ColourGray: new settingClasses.SettingColours(\n '#b3b3b3',\n 'colour',\n 'Colours',\n 'Standard colour is gray. Used to show negative or infinity PP, and for Next Cookie/Next Reindeer bar',\n ),\n ColourPink: new settingClasses.SettingColours(\n '#ff1493',\n 'colour',\n 'Colours',\n 'Standard colour is pink. Used for Dragonflight bar',\n ),\n ColourBrown: new settingClasses.SettingColours(\n '#8b4513',\n 'colour',\n 'Colours',\n 'Standard colour is brown. Used for Dragon Harvest bar',\n ),\n\n // BarsDisplay\n BotBar: new settingClasses.SettingStandardWithFunc(\n 1,\n 'bool',\n 'BarsDisplay',\n ['Bottom bar OFF', 'Bottom bar ON'],\n 'Building information',\n true,\n () => {\n ToggleBotBar();\n },\n ),\n TimerBar: new settingClasses.SettingStandardWithFunc(\n 1,\n 'bool',\n 'BarsDisplay',\n ['Timer bar OFF', 'Timer bar ON'],\n 'Bar with timers for golden cookie, season popup, Frenzy (Normal, Clot, Elder), Click Frenzy',\n true,\n () => {\n ToggleTimerBar();\n },\n ),\n TimerBarPos: new settingClasses.SettingStandardWithFunc(\n 0,\n 'bool',\n 'BarsDisplay',\n ['Timer bar position (top left)', 'Timer bar position (bottom)'],\n 'Placement of the timer bar',\n false,\n () => {\n ToggleTimerBarPos();\n },\n ),\n TimerBarOverlay: new settingClasses.SettingStandard(\n 2,\n 'bool',\n 'BarsDisplay',\n ['Timer bar overlay OFF', 'Timer bar overlay only seconds', 'Timer bar overlay full'],\n 'Overlay on timers displaying seconds and/or percentage left',\n true,\n ),\n AutosaveTimerBar: new settingClasses.SettingStandard(\n 0,\n 'bool',\n 'BarsDisplay',\n ['Autosave timer bar OFF', 'Autosave timer bar ON'],\n 'Show a timer counting down till next autosave in the timer bar',\n true,\n ),\n UpBarColour: new settingClasses.SettingStandardWithFunc(\n 1,\n 'bool',\n 'BarsDisplay',\n ['Upgrade colours/bar OFF', 'Upgrade colours with bar ON', 'Upgrade colours without bar ON'],\n 'Colour code upgrades and optionally add a counter bar',\n false,\n () => {\n ToggleUpgradeBarAndColour();\n },\n ),\n UpgradeBarFixedPos: new settingClasses.SettingStandardWithFunc(\n 1,\n 'bool',\n 'BarsDisplay',\n ['Upgrade bar fixed position OFF', 'Upgrade bar fixed position ON'],\n 'Lock the upgrade bar at top of the screen to prevent it from moving ofscreen when scrolling',\n true,\n () => {\n ToggleUpgradeBarFixedPos();\n },\n ),\n SortBuildings: new settingClasses.SettingStandardWithFunc(\n 0,\n 'bool',\n 'BarsDisplay',\n [\n 'Sort buildings: default',\n 'Sort buildings: PP of x1 purchase',\n 'Sort buildings: PP of selected bulk mode',\n 'Sort buildings: price until next achievement',\n ],\n 'Sort the display of buildings in default order, by PP, or until next achievement',\n false,\n () => {\n UpdateBuildings();\n },\n ),\n SortUpgrades: new settingClasses.SettingStandardWithFunc(\n 0,\n 'bool',\n 'BarsDisplay',\n ['Sort upgrades: default', 'Sort upgrades: PP'],\n 'Sort the display of upgrades in either default order or by PP',\n false,\n () => {\n UpdateUpgrades();\n },\n ),\n UpgradesNeverCollapse: new settingClasses.SettingStandardWithFunc(\n 0,\n 'bool',\n 'BarsDisplay',\n ['Upgrades always expanded OFF', 'Upgrades always expanded ON'],\n 'Toggle to make the upgrades sections always expanded to the size needed to display all upgrades',\n true,\n () => {\n UpdateUpgradeSectionsHeight();\n },\n ),\n DragonAuraInfo: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'BarsDisplay',\n ['Extra dragon aura info OFF', 'Extra dragon aura info ON'],\n 'Shows information about changes in CPS and costs in the dragon aura interface.',\n true,\n ),\n GrimoireBar: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'BarsDisplay',\n ['Grimoire magic meter timer OFF', 'Grimoire magic meter timer ON'],\n 'A timer overlay showing how long till the Grimoire magic meter is full',\n true,\n ),\n GCTimer: new settingClasses.SettingStandardWithFunc(\n 1,\n 'bool',\n 'BarsDisplay',\n ['Golden cookie timer OFF', 'Golden cookie timer ON'],\n 'A timer on the golden cookie when it has been spawned',\n true,\n () => {\n ToggleGCTimer();\n },\n ),\n Favicon: new settingClasses.SettingStandardWithFunc(\n 1,\n 'bool',\n 'BarsDisplay',\n ['Favicon OFF', 'Favicon ON'],\n 'Update favicon with golden/wrath cookie',\n true,\n () => {\n UpdateFavicon();\n },\n ),\n WrinklerButtons: new settingClasses.SettingStandardWithFunc(\n 1,\n 'bool',\n 'BarsDisplay',\n ['Extra wrinkler buttons OFF', 'Extra wrinkler buttons ON'],\n 'Show buttons for popping wrinklers at bottom of cookie section',\n true,\n () => {\n ToggleWrinklerButtons();\n },\n ),\n HideSectionsButtons: new settingClasses.SettingStandardWithFunc(\n 0,\n 'bool',\n 'BarsDisplay',\n ['Hide buildings/upgrades button OFF', 'Hide buildings/upgrades button ON'],\n 'Show buttons for hiding and showing the buildings and upgrades sections in the right column',\n true,\n () => {\n ToggleSectionHideButtons();\n },\n ),\n\n // Tooltip\n TooltipBuildUpgrade: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'Tooltip',\n ['Building/upgrade tooltip information OFF', 'Building/upgrade tooltip information ON'],\n 'Extra information in building/upgrade tooltips',\n true,\n ),\n TooltipAmor: new settingClasses.SettingStandard(\n 0,\n 'bool',\n 'Tooltip',\n [\n 'Buildings tooltip amortization information OFF',\n 'Buildings tooltip amortization information ON',\n ],\n 'Add amortization information to buildings tooltip',\n true,\n ),\n ToolWarnLucky: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'Tooltip',\n ['Tooltip lucky warning OFF', 'Tooltip lucky warning ON'],\n 'A warning when buying if it will put the bank under the amount needed for max \"Lucky!\" rewards',\n true,\n ),\n ToolWarnLuckyFrenzy: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'Tooltip',\n ['Tooltip lucky frenzy warning OFF', 'Tooltip lucky frenzy warning ON'],\n 'A warning when buying if it will put the bank under the amount needed for max \"Lucky!\" (Frenzy) rewards',\n true,\n ),\n ToolWarnConjure: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'Tooltip',\n ['Tooltip conjure warning OFF', 'Tooltip conjure warning ON'],\n 'A warning when buying if it will put the bank under the amount needed for max \"Conjure Baked Goods\" rewards',\n true,\n ),\n ToolWarnConjureFrenzy: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'Tooltip',\n ['Tooltip conjure frenzy warning OFF', 'Tooltip conjure frenzy warning ON'],\n 'A warning when buying if it will put the bank under the amount needed for max \"Conjure Baked Goods\" rewards with Frenzy active',\n true,\n ),\n ToolWarnEdifice: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'Tooltip',\n ['Tooltip edifice warning OFF', 'Tooltip edifice warning ON'],\n 'A warning when buying if it will put the bank under the amount needed for \"Spontaneous Edifice\" to possibly give you your most expensive building',\n true,\n ),\n ToolWarnUser: new settingClasses.SettingInputNumber(\n 0,\n 'numscale',\n 'Tooltip',\n 'Tooltip warning at x times CPS: ',\n 'Use this to show a customized warning if buying it will put the bank under the amount equal to value times cps; setting to 0 disables the function altogether',\n 0,\n Infinity,\n ),\n ToolWarnBon: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'Tooltip',\n ['Calculate tooltip warning with bonus CPS OFF', 'Calculate tooltip warning with bonus CPS ON'],\n 'Calculate the warning with or without the bonus CPS you get from buying',\n true,\n ),\n ToolWarnPos: new settingClasses.SettingStandardWithFunc(\n 1,\n 'bool',\n 'Tooltip',\n ['Tooltip warning position (left)', 'Tooltip warning position (bottom)'],\n 'Placement of the warning boxes',\n false,\n () => {\n ToggleToolWarnPos();\n },\n ),\n TooltipGrim: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'Tooltip',\n ['Grimoire tooltip information OFF', 'Grimoire tooltip information ON'],\n 'Extra information in tooltip for grimoire',\n true,\n ),\n TooltipWrink: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'Tooltip',\n ['Wrinkler tooltip OFF', 'Wrinkler tooltip ON'],\n 'Shows the amount of cookies a wrinkler will give when popping it',\n true,\n ),\n TooltipLump: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'Tooltip',\n ['Sugar lump tooltip OFF', 'Sugar lump tooltip ON'],\n 'Shows the current Sugar Lump type in Sugar lump tooltip.',\n true,\n ),\n TooltipPlots: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'Tooltip',\n ['Garden plots tooltip OFF', 'Garden plots tooltip ON'],\n 'Shows a tooltip for plants that have a cookie reward.',\n true,\n ),\n TooltipPantheon: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'Tooltip',\n ['Pantheon tooltip OFF', 'Pantheon tooltip ON'],\n 'Shows additional info in the pantheon tooltip',\n true,\n ),\n TooltipAscendButton: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'Tooltip',\n ['Show Extra Info Ascend Tooltip OFF', 'Show Extra Info Ascend Tooltip ON'],\n 'Shows additional info in the ascend tooltip',\n true,\n ),\n\n // Statistics\n Stats: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'Statistics',\n ['Statistics OFF', 'Statistics ON'],\n 'Extra Cookie Monster statistics!',\n true,\n ),\n MissingUpgrades: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'Statistics',\n ['Missing upgrades OFF', 'Missing upgrades ON'],\n 'Shows missing upgrades in statistics menu',\n true,\n ),\n MissingAchievements: new settingClasses.SettingStandard(\n 0,\n 'bool',\n 'Statistics',\n ['Missing Achievements OFF', 'Missing Normal Achievements ON'],\n 'Shows missing normal achievements in statistics menu.',\n true,\n ),\n UpStats: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'Statistics',\n ['Statistics update rate (default)', 'Statistics update rate (1s)'],\n 'Default rate is once every 5 seconds',\n false,\n ),\n HeavenlyChipsTarget: new settingClasses.SettingInputNumber(\n 1,\n 'numscale',\n 'Statistics',\n 'Heavenly chips target: ',\n 'Use this to set a heavenly chips target that will be counted towards in the \"prestige\" statsistics sections',\n 1,\n Infinity,\n ),\n ShowMissedGC: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'Statistics',\n ['Missed GC OFF', 'Missed GC ON'],\n 'Show a stat in the statistics screen that counts how many golden cookies you have missed',\n true,\n ),\n\n // Notification\n Title: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'NotificationGeneral',\n ['Title OFF', 'Title ON', 'Title pinned tab highlight'],\n 'Update title with colden cookie/season popup timers; pinned tab highlight only changes the title when a golden cookie/season popup spawns; \"!\" means that golden cookie/reindeer can spawn',\n true,\n ),\n GeneralSound: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'NotificationGeneral',\n ['Consider game volume setting OFF', 'Consider game volume setting ON'],\n 'Turning this toggle to \"off\" makes Cookie Monster no longer consider the volume setting of the base game, allowing mod notifications to play with base game volume turned down',\n true,\n ),\n GCNotification: new settingClasses.SettingStandardWithFunc(\n 0,\n 'bool',\n 'NotificationGC',\n ['Notification OFF', 'Notification ON'],\n 'Create a notification when golden cookie spawns',\n true,\n () => {\n CheckNotificationPermissions(\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.GCNotification,\n );\n },\n ),\n GCFlash: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'NotificationGC',\n ['Flash OFF', 'Flash ON'],\n 'Flash screen on golden cookie',\n true,\n ),\n ColourGCFlash: new settingClasses.SettingColours(\n '#ffffff',\n 'colour',\n 'NotificationGC',\n 'The colour of the GC flash, standard colour is white',\n ),\n GCSound: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'NotificationGC',\n ['Sound OFF', 'Sound ON'],\n 'Play a sound on golden cookie',\n true,\n ),\n GCVolume: new settingClasses.SettingVolume(100, 'vol', 'NotificationGC', [], 'Volume'),\n GCSoundURL: new settingClasses.SettingStandard(\n 'https://freesound.org/data/previews/66/66717_931655-lq.mp3',\n 'url',\n 'NotificationGC',\n 'Sound URL:',\n 'URL of the sound to be played when a golden cookie spawns',\n ),\n FortuneNotification: new settingClasses.SettingStandardWithFunc(\n 0,\n 'bool',\n 'NotificationFC',\n ['Notification OFF', 'Notification ON'],\n 'Create a notification when fortune cookie is on the ticker',\n true,\n () => {\n CheckNotificationPermissions(\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.FortuneNotification,\n );\n },\n ),\n FortuneFlash: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'NotificationFC',\n ['Flash OFF', 'Flash ON'],\n 'Flash screen on fortune cookie spawn',\n true,\n ),\n ColourFortuneFlash: new settingClasses.SettingColours(\n '#ffffff',\n 'colour',\n 'NotificationFC',\n 'The colour of the fortune flash, standard colour is white',\n ),\n FortuneSound: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'NotificationFC',\n ['Sound OFF', 'Sound ON'],\n 'Play a sound on fortune cookie spawn',\n true,\n ),\n FortuneVolume: new settingClasses.SettingVolume(100, 'vol', 'NotificationFC', [], 'Volume'),\n FortuneSoundURL: new settingClasses.SettingStandard(\n 'https://freesound.org/data/previews/174/174027_3242494-lq.mp3',\n 'url',\n 'NotificationFC',\n 'Sound URL:',\n 'URL of the sound to be played when the ticker has a fortune cookie',\n ),\n SeaNotification: new settingClasses.SettingStandardWithFunc(\n 0,\n 'bool',\n 'NotificationSea',\n ['Notification OFF', 'Notification ON'],\n 'Create a notification on season popup',\n true,\n () => {\n CheckNotificationPermissions(\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.SeaNotification,\n );\n },\n ),\n SeaFlash: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'NotificationSea',\n ['Flash OFF', 'Flash ON'],\n 'Flash screen on season popup',\n true,\n ),\n ColourSeaFlash: new settingClasses.SettingColours(\n '#ffffff',\n 'colour',\n 'NotificationSea',\n 'The colour of the season popup flash, standard colour is white',\n ),\n SeaSound: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'NotificationSea',\n ['Sound OFF', 'Sound ON'],\n 'Play a sound on season popup',\n true,\n ),\n SeaVolume: new settingClasses.SettingVolume(100, 'vol', 'NotificationSea', [], 'Volume'),\n SeaSoundURL: new settingClasses.SettingStandard(\n 'https://www.freesound.org/data/previews/121/121099_2193266-lq.mp3',\n 'url',\n 'NotificationSea',\n 'Sound URL:',\n 'URL of the sound to be played when on season popup spawns',\n ),\n GardFlash: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'NotificationGard',\n ['Garden Tick Flash OFF', 'Flash ON'],\n 'Flash screen on garden tick',\n true,\n ),\n ColourGardFlash: new settingClasses.SettingColours(\n '#ffffff',\n 'colour',\n 'NotificationGard',\n 'The colour of the garden flash, standard colour is white',\n ),\n GardSound: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'NotificationGard',\n ['Sound OFF', 'Sound ON'],\n 'Play a sound on garden tick',\n true,\n ),\n GardVolume: new settingClasses.SettingVolume(100, 'vol', 'NotificationGard', [], 'Volume'),\n GardSoundURL: new settingClasses.SettingStandard(\n 'https://freesound.org/data/previews/103/103046_861714-lq.mp3',\n 'url',\n 'NotificationGard',\n 'Garden Tick Sound URL:',\n 'URL of the sound to be played when the garden ticks',\n ),\n MagicNotification: new settingClasses.SettingStandardWithFunc(\n 0,\n 'bool',\n 'NotificationMagi',\n ['Notification OFF', 'Notification ON'],\n 'Create a notification when magic reaches maximum',\n true,\n () => {\n CheckNotificationPermissions(\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.MagicNotification,\n );\n },\n ),\n MagicFlash: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'NotificationMagi',\n ['Flash OFF', 'Flash ON'],\n 'Flash screen when magic reaches maximum',\n true,\n ),\n ColourMagicFlash: new settingClasses.SettingColours(\n '#ffffff',\n 'colour',\n 'NotificationMagi',\n 'The colour of the magic flash, standard colour is white',\n ),\n MagicSound: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'NotificationMagi',\n ['Sound OFF', 'Sound ON'],\n 'Play a sound when magic reaches maximum',\n true,\n ),\n MagicVolume: new settingClasses.SettingVolume(100, 'vol', 'NotificationMagi', [], 'Volume'),\n MagicSoundURL: new settingClasses.SettingStandard(\n 'https://freesound.org/data/previews/221/221683_1015240-lq.mp3',\n 'url',\n 'NotificationMagi',\n 'Sound URL:',\n 'URL of the sound to be played when magic reaches maxium',\n ),\n WrinklerNotification: new settingClasses.SettingStandardWithFunc(\n 0,\n 'bool',\n 'NotificationWrink',\n ['Notification OFF', 'Notification ON'],\n 'Create a notification when a wrinkler appears',\n true,\n () => {\n CheckNotificationPermissions(\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.WrinklerNotification,\n );\n },\n ),\n WrinklerFlash: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'NotificationWrink',\n ['Flash OFF', 'Flash ON'],\n 'Flash screen when a wrinkler appears',\n true,\n ),\n ColourWrinklerFlash: new settingClasses.SettingColours(\n '#ffffff',\n 'colour',\n 'NotificationWrink',\n 'The colour of the wrinkler flash, standard colour is white',\n ),\n WrinklerSound: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'NotificationWrink',\n ['Sound OFF', 'Sound ON'],\n 'Play a sound when a wrinkler appears',\n true,\n ),\n WrinklerVolume: new settingClasses.SettingVolume(100, 'vol', 'NotificationWrink', [], 'Volume'),\n WrinklerSoundURL: new settingClasses.SettingStandard(\n 'https://freesound.org/data/previews/124/124186_8043-lq.mp3',\n 'url',\n 'NotificationWrink',\n 'Sound URL:',\n 'URL of the sound to be played when a wrinkler appears',\n ),\n WrinklerMaxNotification: new settingClasses.SettingStandardWithFunc(\n 0,\n 'bool',\n 'NotificationWrinkMax',\n ['Notification OFF', 'Notification ON'],\n 'Create a notification when the maximum amount of wrinklers has appeared',\n true,\n () => {\n CheckNotificationPermissions(\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.WrinklerMaxNotification,\n );\n },\n ),\n WrinklerMaxFlash: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'NotificationWrinkMax',\n ['Flash OFF', 'Flash ON'],\n 'Flash screen when the maximum amount of Wrinklers has appeared',\n true,\n ),\n ColourWrinklerMaxFlash: new settingClasses.SettingColours(\n '#ffffff',\n 'colour',\n 'NotificationWrinkMax',\n 'The colour of the maximum wrinkler flash, standard colour is white',\n ),\n WrinklerMaxSound: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'NotificationWrinkMax',\n ['Sound OFF', 'Sound ON'],\n 'Play a sound when the maximum amount of wrinklers has appeared',\n true,\n ),\n WrinklerMaxVolume: new settingClasses.SettingVolume(\n 100,\n 'vol',\n 'NotificationWrinkMax',\n [],\n 'Volume',\n ),\n WrinklerMaxSoundURL: new settingClasses.SettingStandard(\n 'https://freesound.org/data/previews/152/152743_15663-lq.mp3',\n 'url',\n 'NotificationWrinkMax',\n 'Sound URL:',\n 'URL of the sound to be played when the maximum amount of wrinklers has appeared',\n ),\n\n // Miscellaneous\n BulkBuyBlock: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'Miscellaneous',\n ['Block bulk buying OFF', 'Block bulk buying ON'],\n \"Block clicking bulk buying when you can't buy all. This prevents buying 7 of a building when you are in buy-10 or buy-100 mode.\",\n true,\n ),\n FavouriteSettings: new settingClasses.SettingStandardWithFunc(\n 1,\n 'bool',\n 'Miscellaneous',\n [\n 'Favourite settings section OFF',\n 'Favourite settings section ON',\n 'Favourite settings section ON (Locked)',\n ],\n \"Show stars before each setting which allows selecting it for a 'favourites' section at the top of the Cookie Monster settings. Setting this to Locked removes the stars but shows the 'favourites' section\",\n true,\n () => {\n Game.UpdateMenu();\n },\n ),\n};\n\nexport default settings;\n","import { CMSayTime } from '../../Disp/VariablesAndData';\nimport { BackupFunctions } from '../../Main/VariablesAndData';\n\n/**\n * This function changes some of the time-displays in the game to be more detailed\n * It is called by a change in CM.Options.DetailedTime\n */\nexport default function ToggleDetailedTime() {\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.DetailedTime === 1)\n Game.sayTime = CMSayTime;\n else Game.sayTime = BackupFunctions.sayTime;\n}\n","import UpdateUpgrades from '../../Disp/BuildingsUpgrades/Upgrades';\n\n/**\n * This function toggles the upgrade bar and the colours of upgrades\n * It is called by a change in CM.Options.UpBarColour\n */\nexport default function ToggleUpgradeBarAndColour() {\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.UpBarColour === 1) {\n // Colours and bar on\n l('CMUpgradeBar').style.display = '';\n UpdateUpgrades();\n } else if (\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.UpBarColour === 2\n ) {\n // Colours on and bar off\n l('CMUpgradeBar').style.display = 'none';\n UpdateUpgrades();\n } else {\n // Colours and bar off\n l('CMUpgradeBar').style.display = 'none';\n Game.RebuildUpgrades();\n }\n}\n","/**\n * This function toggles the position of the upgrade bar from fixed or non-fixed mode\n * It is called by a change in CM.Options.UpgradeBarFixedPos\n */\nexport default function ToggleUpgradeBarFixedPos() {\n if (\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.UpgradeBarFixedPos === 1\n ) {\n // Fix to top of screen when scrolling\n l('CMUpgradeBar').style.position = 'sticky';\n l('CMUpgradeBar').style.top = '0px';\n } else {\n l('CMUpgradeBar').style.position = ''; // Possible to scroll offscreen\n }\n}\n","import { CacheGoldenShimmersByID } from '../../Cache/VariablesAndData';\nimport { GCTimers } from '../../Disp/VariablesAndData';\n\n/**\n * This function toggles GC Timers are visible\n * It is called by a change in CM.Options.GCTimer\n */\nexport default function ToggleGCTimer() {\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.GCTimer === 1) {\n Object.keys(GCTimers).forEach((i) => {\n GCTimers[i].style.display = 'block';\n GCTimers[i].style.left = CacheGoldenShimmersByID[i].l.style.left;\n GCTimers[i].style.top = CacheGoldenShimmersByID[i].l.style.top;\n });\n } else {\n // eslint-disable-next-line no-return-assign\n Object.keys(GCTimers).forEach((i) => (GCTimers[i].style.display = 'none'));\n }\n}\n","/**\n * This function updates the display setting of the two objects created by CM.Disp.CreateWrinklerButtons()\n * It is called by changes in CM.Options.WrinklerButtons\n */\nexport default function ToggleSectionHideButtons() {\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.HideSectionsButtons) {\n l('CMSectionHidButtons').style.display = '';\n } else {\n l('CMSectionHidButtons').style.display = 'none';\n }\n}\n","import UpdateBuildings from '../BuildingsUpgrades/Buildings';\nimport {\n ColourBackPre,\n ColourBorderPre,\n ColoursOrdering,\n ColourTextPre,\n} from '../VariablesAndData';\n\n/**\n * This function changes/refreshes colours if the user has set new standard colours\n * The function is therefore called by a change in CM.Options.Colours\n */\nexport default function UpdateColours() {\n let str = '';\n for (let i = 0; i < ColoursOrdering.length; i++) {\n str += `.${ColourTextPre}${ColoursOrdering[i]} { color: ${\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings[\n `Colour${ColoursOrdering[i]}`\n ]\n }; }\\n`;\n }\n for (let i = 0; i < ColoursOrdering.length; i++) {\n str += `.${ColourBackPre}${ColoursOrdering[i]} { background-color: ${\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings[\n `Colour${ColoursOrdering[i]}`\n ]\n }; }\\n`;\n }\n for (let i = 0; i < ColoursOrdering.length; i++) {\n str += `.${ColourBorderPre}${ColoursOrdering[i]} { border: 1px solid ${\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings[\n `Colour${ColoursOrdering[i]}`\n ]\n }; }\\n`;\n }\n l('CMCSS').textContent = str;\n UpdateBuildings(); // Class has been already set\n}\n","import { menuFunctions as mF } from '@cookiemonsterteam/cookiemonsterframework';\nimport { ConfigGroups, ConfigGroupsNotification } from '../../Data/Sectionheaders';\nimport settings from '../../Data/settings';\nimport UpdateColours from '../HelperFunctions/UpdateColours';\nimport RefreshScale from '../HelperFunctions/RefreshScale';\n\n/**\n * Creates the
to be added to the Options section\n * @returns {object} menuDiv\tObject of the
of Cookie Monster in options tab\n */\nexport default function createMenuOptions() {\n const menuDiv = mF.createModMenuSection('cookieMonsterMod', 'Cookie Monster', 'optionsMenu');\n\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers.optionsMenu) {\n Object.keys(ConfigGroups).forEach((group) => {\n if (group === 'Favourite') {\n if (\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.favouriteSettings.length !==\n 0 &&\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.FavouriteSettings > 0\n ) {\n menuDiv.appendChild(\n mF.listings.createOptionsSubHeader('cookieMonsterMod', group, ConfigGroups[group]),\n );\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers[group])\n for (\n let index = 0;\n index <\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.favouriteSettings.length;\n index++\n ) {\n menuDiv.appendChild(\n mF.listings.createOptionsListing(\n 'cookieMonsterMod',\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.favouriteSettings[\n index\n ],\n settings,\n UpdateColours,\n RefreshScale,\n ),\n );\n }\n }\n } else {\n menuDiv.appendChild(\n mF.listings.createOptionsSubHeader('cookieMonsterMod', group, ConfigGroups[group]),\n );\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers[group]) {\n // 0 is show, 1 is collapsed\n // Make sub-sections of Notification section\n if (group === 'Notification') {\n Object.keys(ConfigGroupsNotification).forEach((subGroup) => {\n const subGroupObject = mF.listings.createOptionsSubHeader(\n 'cookieMonsterMod',\n subGroup,\n ConfigGroupsNotification[subGroup],\n );\n subGroupObject.style.fontSize = '15px';\n subGroupObject.style.opacity = '0.5';\n menuDiv.appendChild(subGroupObject);\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers[subGroup]) {\n Object.keys(settings).forEach((option) => {\n if (settings[option].group === subGroup)\n menuDiv.appendChild(\n mF.listings.createOptionsListing(\n 'cookieMonsterMod',\n option,\n settings,\n UpdateColours,\n RefreshScale,\n ),\n );\n });\n }\n });\n } else {\n Object.keys(settings).forEach((option) => {\n if (settings[option].group === group)\n menuDiv.appendChild(\n mF.listings.createOptionsListing(\n 'cookieMonsterMod',\n option,\n settings,\n UpdateColours,\n RefreshScale,\n ),\n );\n });\n }\n }\n }\n });\n }\n return menuDiv;\n}\n","/** Section: Functions related to the creation of basic DOM elements page */\n\nimport { ToggleHeader } from '../../../Config/ToggleSetting';\n\nimport { SimpleTooltipElements } from '../../VariablesAndData';\n\n/**\n * This function creates a header-object for the stats page\n * It is called by CM.Disp.AddMenuStats()\n * @param \t{string}\t\tconfig\tThe name of the Config-group\n * @param \t{string}\t\ttext\tThe to-be displayed name of the header\n * @returns\t{object}\t\tdiv\t\tThe header object\n */\nexport function StatsHeader(text, config) {\n const div = document.createElement('div');\n div.className = 'title';\n div.style.padding = '0px 16px';\n div.style.opacity = '0.7';\n div.style.fontSize = '17px';\n div.style.fontFamily = '\"Kavoon\", Georgia, serif';\n div.appendChild(document.createTextNode(`${text} `));\n const span = document.createElement('span');\n span.style.cursor = 'pointer';\n span.style.display = 'inline-block';\n span.style.height = '14px';\n span.style.width = '14px';\n span.style.borderRadius = '7px';\n span.style.textAlign = 'center';\n span.style.backgroundColor = '#C0C0C0';\n span.style.color = 'black';\n span.style.fontSize = '13px';\n span.style.verticalAlign = 'middle';\n span.textContent = Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers[config]\n ? '-'\n : '+';\n span.onclick = function () {\n ToggleHeader(config);\n Game.UpdateMenu();\n };\n div.appendChild(span);\n return div;\n}\n\n/**\n * This function creates an stats-listing-object for the stats page\n * It is called by CM.Disp.AddMenuStats()\n * @param \t{string}\t\ttype\t\tThe type fo the listing\n * @param \t{string}\t\tname\t\tThe name of the option\n * @param \t{object}\t\ttext\t\tThe text-object of the option\n * @param \t{string}\t\tplaceholder\tThe id of the to-be displayed tooltip if applicable\n * @returns\t{object}\t\tdiv\t\t\tThe option object\n */\nexport function StatsListing(type, name, text, placeholder) {\n const div = document.createElement('div');\n div.className = 'listing';\n\n const listingName = document.createElement('b');\n listingName.textContent = name;\n div.appendChild(listingName);\n if (type === 'withTooltip') {\n div.className = 'listing';\n div.appendChild(document.createTextNode(' '));\n\n const tooltip = document.createElement('span');\n tooltip.onmouseout = function () {\n Game.tooltip.hide();\n };\n tooltip.onmouseover = function () {\n Game.tooltip.draw(this, escape(SimpleTooltipElements[placeholder].innerHTML));\n };\n tooltip.style.cursor = 'default';\n tooltip.style.display = 'inline-block';\n tooltip.style.height = '10px';\n tooltip.style.width = '10px';\n tooltip.style.borderRadius = '5px';\n tooltip.style.textAlign = 'center';\n tooltip.style.backgroundColor = '#C0C0C0';\n tooltip.style.color = 'black';\n tooltip.style.fontSize = '9px';\n tooltip.style.verticalAlign = 'bottom';\n tooltip.textContent = '?';\n div.appendChild(tooltip);\n }\n div.appendChild(document.createTextNode(': '));\n div.appendChild(text);\n return div;\n}\n\n/**\n * This function creates an stats-listing-object for the stats page for missing items displays\n * It is called by CM.Disp.AddMenuStats()\n * @param \t{string}\t\ttype\t\tThe type fo the listing\n * @param \t{string}\t\tname\t\tThe name of the option\n * @param \t{object}\t\ttext\t\tThe text-object of the option\n * @param \t{bool}\t\t current Whether the season of the item is the current season\n * @returns\t{object}\t\tdiv\t\t\tThe option object\n */\nexport function StatsMissDispListing(type, name, text, current) {\n const div = document.createElement('div');\n div.className = 'listing';\n\n const listingName = document.createElement('b');\n listingName.textContent = name;\n if (current === true)\n listingName.style.color =\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.ColourGreen;\n div.appendChild(listingName);\n div.appendChild(document.createTextNode(': '));\n div.appendChild(text);\n return div;\n}\n\n/**\n * This function creates a tooltip containing all missing holiday items contained in the list theMissDisp\n * @param \t{list}\t\t\ttheMissDisp\t\tA list of the missing holiday items\n * @returns\t{object}\t\tfrag\t\t\tThe tooltip object\n */\nexport function StatsMissDisp(theMissDisp) {\n const frag = document.createDocumentFragment();\n frag.appendChild(document.createTextNode(`${theMissDisp.length} `));\n const span = document.createElement('span');\n span.onmouseout = function () {\n Game.tooltip.hide();\n };\n const placeholder = document.createElement('div');\n const missing = document.createElement('div');\n missing.style.minWidth = '140px';\n missing.style.marginBottom = '4px';\n const title = document.createElement('div');\n title.className = 'name';\n title.style.marginBottom = '4px';\n title.style.textAlign = 'center';\n title.textContent = 'Missing';\n missing.appendChild(title);\n Object.keys(theMissDisp).forEach((i) => {\n const div = document.createElement('div');\n div.style.textAlign = 'center';\n div.appendChild(document.createTextNode(theMissDisp[i]));\n missing.appendChild(div);\n });\n placeholder.appendChild(missing);\n span.onmouseover = function () {\n Game.tooltip.draw(this, escape(placeholder.innerHTML));\n };\n span.style.cursor = 'default';\n span.style.display = 'inline-block';\n span.style.height = '10px';\n span.style.width = '10px';\n span.style.borderRadius = '5px';\n span.style.textAlign = 'center';\n span.style.backgroundColor = '#C0C0C0';\n span.style.color = 'black';\n span.style.fontSize = '9px';\n span.style.verticalAlign = 'bottom';\n span.textContent = '?';\n frag.appendChild(span);\n return frag;\n}\n","import { saveAndLoadingFunctions } from '@cookiemonsterteam/cookiemonsterframework/src/index';\n\n/** Functions related to toggling or changing an individual setting */\n\n/** Used to name certain DOM or outside facing elements and refer to them */\nexport const ConfigPrefix = 'CMConfig';\n\n/**\n * This function toggles header options by incrementing them with 1 and handling changes\n * It is called by the onclick event of the +/- next to headers\n * @param \t{string}\tconfig\tThe name of the header\n */\nexport function ToggleHeader(config) {\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers[config] += 1;\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers[config] > 1)\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers[config] = 0;\n saveAndLoadingFunctions.saveFramework();\n}\n","/** Main function to create the sections of Cookie Monster on the Statistics page */\n\nimport { AddMissingUpgrades } from './CreateMissingUpgrades';\nimport * as CreateSections from './CreateStatsSections';\nimport * as CreateElements from './CreateDOMElements';\nimport * as GameData from '../../../Data/Gamedata';\n\nimport {\n CacheAverageClicks,\n CacheAverageCookiesFromClicks,\n CacheObjectsNextAchievement,\n CacheWrinklersFattest,\n CacheWrinklersNormal,\n CacheWrinklersTotal,\n} from '../../../Cache/VariablesAndData';\nimport PopAllNormalWrinklers from '../../HelperFunctions/PopWrinklers';\nimport { ClickTimes, CookieTimes } from '../../VariablesAndData';\nimport GetCPS from '../../HelperFunctions/GetCPS';\nimport Beautify from '../../BeautifyAndFormatting/Beautify';\nimport AddMissingAchievements from './CreateMissingAchievements';\n\n/**\n * This function adds stats created by CookieMonster to the stats page\n * It is called by CM.Disp.AddMenu\n * @param {object} title\tOn object that includes the title of the menu\n */\nexport default function AddMenuStats(title) {\n const stats = document.createElement('div');\n stats.className = 'subsection';\n stats.appendChild(title);\n\n stats.appendChild(CreateElements.StatsHeader('Lucky Cookies', 'Lucky'));\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers.Lucky) {\n stats.appendChild(CreateSections.LuckySection());\n }\n\n stats.appendChild(CreateElements.StatsHeader('Chain Cookies', 'Chain'));\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers.Chain) {\n stats.appendChild(CreateSections.ChainSection());\n }\n\n if (Game.Objects['Wizard tower'].minigameLoaded) {\n stats.appendChild(CreateElements.StatsHeader('Spells', 'Spells'));\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers.Spells) {\n stats.appendChild(CreateSections.SpellsSection());\n }\n }\n\n if (Game.Objects.Farm.minigameLoaded) {\n stats.appendChild(CreateElements.StatsHeader('Garden', 'Garden'));\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers.Garden) {\n stats.appendChild(CreateSections.GardenSection());\n }\n }\n\n stats.appendChild(CreateElements.StatsHeader('Prestige', 'Prestige'));\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers.Prestige) {\n stats.appendChild(CreateSections.PrestigeSection());\n }\n\n if (Game.cpsSucked > 0) {\n stats.appendChild(CreateElements.StatsHeader('Wrinklers', 'Wrink'));\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers.Wrink) {\n const popAllFrag = document.createDocumentFragment();\n popAllFrag.appendChild(\n document.createTextNode(\n `${Beautify(CacheWrinklersTotal)} / ${Beautify(CacheWrinklersNormal)} `,\n ),\n );\n const popAllA = document.createElement('a');\n popAllA.textContent = 'Pop All Normal';\n popAllA.className = 'option';\n popAllA.onclick = function () {\n PopAllNormalWrinklers();\n };\n popAllFrag.appendChild(popAllA);\n stats.appendChild(\n CreateElements.StatsListing('basic', 'Rewards of Popping (All/Normal)', popAllFrag),\n );\n const popFattestFrag = document.createDocumentFragment();\n popFattestFrag.appendChild(document.createTextNode(`${Beautify(CacheWrinklersFattest[0])} `));\n const popFattestA = document.createElement('a');\n popFattestA.textContent = 'Pop Single Fattest';\n popFattestA.className = 'option';\n popFattestA.onclick = function () {\n if (CacheWrinklersFattest[1] !== null) Game.wrinklers[CacheWrinklersFattest[1]].hp = 0;\n };\n popFattestFrag.appendChild(popFattestA);\n stats.appendChild(\n CreateElements.StatsListing(\n 'basic',\n `Rewards of Popping Single Fattest Non-Shiny Wrinkler (id: ${\n CacheWrinklersFattest[1] !== null ? CacheWrinklersFattest[1] : 'None'\n })`,\n popFattestFrag,\n ),\n );\n }\n }\n\n stats.appendChild(CreateSections.SeasonSection());\n\n stats.appendChild(CreateElements.StatsHeader('Achievements', 'Achievs'));\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers.Achievs) {\n Object.keys(Game.Objects).forEach((i) => {\n const ObjectsTillNext = CacheObjectsNextAchievement[i];\n stats.appendChild(\n CreateElements.StatsListing(\n 'basic',\n i,\n ObjectsTillNext.AmountNeeded < 101\n ? document.createTextNode(\n `Next achievement in ${ObjectsTillNext.AmountNeeded}, price: ${Beautify(\n ObjectsTillNext.price,\n )}`,\n )\n : document.createTextNode('No new achievement for next 100 buildings'),\n ),\n );\n });\n }\n\n stats.appendChild(CreateElements.StatsHeader('Miscellaneous', 'Misc'));\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers.Misc) {\n stats.appendChild(\n CreateElements.StatsListing(\n 'basic',\n `Average cookies per second (past ${\n CookieTimes[\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.AvgCPSHist\n ] < 60\n ? `${\n CookieTimes[\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.AvgCPSHist\n ]\n } seconds`\n : CookieTimes[\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.AvgCPSHist\n ] /\n 60 +\n (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.AvgCPSHist === 3\n ? ' minute'\n : ' minutes')\n })`,\n document.createTextNode(Beautify(GetCPS(), 3)),\n ),\n );\n stats.appendChild(\n CreateElements.StatsListing(\n 'basic',\n `Average cookie clicks per second (past ${\n ClickTimes[\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.AvgClicksHist\n ]\n }${\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.AvgClicksHist === 0\n ? ' second'\n : ' seconds'\n })`,\n document.createTextNode(Beautify(CacheAverageClicks, 1)),\n ),\n );\n stats.appendChild(\n CreateElements.StatsListing(\n 'basic',\n `Cookies from clicking (past ${\n ClickTimes[\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.AvgClicksHist\n ]\n }${\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.AvgClicksHist === 0\n ? ' second'\n : ' seconds'\n })`,\n document.createTextNode(\n Beautify(\n CacheAverageCookiesFromClicks.calcSum(\n CacheAverageClicks *\n ClickTimes[\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.AvgClicksHist\n ],\n ),\n ),\n ),\n ),\n );\n if (Game.Has('Fortune cookies')) {\n const fortunes = [];\n Object.keys(GameData.Fortunes).forEach((i) => {\n if (!Game.Has(GameData.Fortunes[i])) {\n fortunes.push(GameData.Fortunes[i]);\n }\n });\n if (fortunes.length !== 0)\n stats.appendChild(\n CreateElements.StatsListing(\n 'basic',\n 'Fortune Upgrades Left to Buy',\n CreateElements.StatsMissDisp(fortunes),\n ),\n );\n }\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.ShowMissedGC) {\n stats.appendChild(\n CreateElements.StatsListing(\n 'basic',\n 'Missed golden cookies',\n document.createTextNode(Beautify(Game.missedGoldenClicks)),\n ),\n );\n }\n if (Game.prefs.autosave) {\n const timer = document.createElement('span');\n timer.id = 'CMStatsAutosaveTimer';\n timer.innerText = Game.sayTime(\n Game.fps * 60 - (Game.OnAscend ? 0 : Game.T % (Game.fps * 60)),\n 4,\n );\n stats.appendChild(CreateElements.StatsListing('basic', 'Time till autosave', timer));\n }\n }\n\n l('menu').insertBefore(stats, l('menu').childNodes[2]);\n\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.MissingUpgrades) {\n AddMissingUpgrades();\n }\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.MissingAchievements) {\n AddMissingAchievements();\n }\n}\n","/** Functions to create the individual sections of the Statistics page */\n\nimport * as GameData from '../../../Data/Gamedata';\nimport { MaxChainCookieReward } from '../../../Cache/Stats/ChainCookies';\nimport {\n CacheAvgCPSWithChoEgg,\n CacheCentEgg,\n CacheChainFrenzyMaxReward,\n CacheChainFrenzyRequired,\n CacheChainFrenzyRequiredNext,\n CacheChainFrenzyWrathRequired,\n CacheChainFrenzyWrathRequiredNext,\n CacheChainMaxReward,\n CacheChainRequired,\n CacheChainRequiredNext,\n CacheChainWrathMaxReward,\n CacheChainWrathRequired,\n CacheChainWrathRequiredNext,\n CacheConjure,\n CacheConjureReward,\n CacheDragonsFortuneMultAdjustment,\n CacheEdifice,\n CacheEdificeBuilding,\n CacheGoldenCookiesMult,\n CacheHCPerSecond,\n CacheLastChoEgg,\n CacheLucky,\n CacheLuckyFrenzy,\n CacheLuckyReward,\n CacheLuckyRewardFrenzy,\n CacheLuckyWrathReward,\n CacheLuckyWrathRewardFrenzy,\n CacheNoGoldSwitchCookiesPS,\n CacheRealCookiesEarned,\n CacheSeaSpec,\n CacheWrathCookiesMult,\n CacheWrinklersTotal,\n} from '../../../Cache/VariablesAndData';\nimport ResetBonus from '../../../Sim/SimulationEvents/ResetAscension';\nimport GetCPS from '../../HelperFunctions/GetCPS';\nimport GetWrinkConfigBank from '../../HelperFunctions/GetWrinkConfigBank';\nimport { ColourGreen, ColourRed, ColourTextPre } from '../../VariablesAndData';\nimport {\n StatsListing,\n StatsHeader,\n StatsMissDisp,\n StatsMissDispListing,\n} from './CreateDOMElements';\nimport Beautify from '../../BeautifyAndFormatting/Beautify';\nimport FormatTime from '../../BeautifyAndFormatting/FormatTime';\n\n/**\n * This function creates the \"Lucky\" section of the stats page\n * @returns\t{object}\tsection\t\tThe object contating the Lucky section\n */\nexport function LuckySection() {\n // This sets which tooltip to display for certain stats\n const goldCookTooltip = Game.auraMult(\"Dragon's Fortune\")\n ? 'GoldCookDragonsFortuneTooltipPlaceholder'\n : 'GoldCookTooltipPlaceholder';\n\n const section = document.createElement('div');\n section.className = 'CMStatsLuckySection';\n\n const luckyColour = Game.cookies + GetWrinkConfigBank() < CacheLucky ? ColourRed : ColourGreen;\n const luckyTime =\n Game.cookies + GetWrinkConfigBank() < CacheLucky\n ? FormatTime((CacheLucky - (Game.cookies + GetWrinkConfigBank())) / GetCPS())\n : '';\n const luckyReqFrag = document.createDocumentFragment();\n const luckyReqSpan = document.createElement('span');\n luckyReqSpan.style.fontWeight = 'bold';\n luckyReqSpan.className = ColourTextPre + luckyColour;\n luckyReqSpan.textContent = Beautify(CacheLucky);\n luckyReqFrag.appendChild(luckyReqSpan);\n if (luckyTime !== '') {\n const luckyReqSmall = document.createElement('small');\n luckyReqSmall.textContent = ` (${luckyTime})`;\n luckyReqFrag.appendChild(luckyReqSmall);\n }\n section.appendChild(\n StatsListing('withTooltip', '\"Lucky!\" cookies required', luckyReqFrag, goldCookTooltip),\n );\n\n const luckyColourFrenzy =\n Game.cookies + GetWrinkConfigBank() < CacheLuckyFrenzy ? ColourRed : ColourGreen;\n const luckyTimeFrenzy =\n Game.cookies + GetWrinkConfigBank() < CacheLuckyFrenzy\n ? FormatTime((CacheLuckyFrenzy - (Game.cookies + GetWrinkConfigBank())) / GetCPS())\n : '';\n const luckyReqFrenFrag = document.createDocumentFragment();\n const luckyReqFrenSpan = document.createElement('span');\n luckyReqFrenSpan.style.fontWeight = 'bold';\n luckyReqFrenSpan.className = ColourTextPre + luckyColourFrenzy;\n luckyReqFrenSpan.textContent = Beautify(CacheLuckyFrenzy);\n luckyReqFrenFrag.appendChild(luckyReqFrenSpan);\n if (luckyTimeFrenzy !== '') {\n const luckyReqFrenSmall = document.createElement('small');\n luckyReqFrenSmall.textContent = ` (${luckyTimeFrenzy})`;\n luckyReqFrenFrag.appendChild(luckyReqFrenSmall);\n }\n section.appendChild(\n StatsListing(\n 'withTooltip',\n '\"Lucky!\" cookies required (frenzy)',\n luckyReqFrenFrag,\n goldCookTooltip,\n ),\n );\n\n const luckySplit = CacheLuckyReward !== CacheLuckyWrathReward;\n\n const luckyRewardMaxSpan = document.createElement('span');\n luckyRewardMaxSpan.style.fontWeight = 'bold';\n luckyRewardMaxSpan.className = ColourTextPre + CacheLuckyReward;\n luckyRewardMaxSpan.textContent =\n Beautify(CacheLuckyReward) + (luckySplit ? ` / ${Beautify(CacheLuckyWrathReward)}` : '');\n section.appendChild(\n StatsListing(\n 'withTooltip',\n `\"Lucky!\" reward (max)${luckySplit ? ' (golden / wrath)' : ''}`,\n luckyRewardMaxSpan,\n goldCookTooltip,\n ),\n );\n\n const luckyRewardFrenzyMaxSpan = document.createElement('span');\n luckyRewardFrenzyMaxSpan.style.fontWeight = 'bold';\n luckyRewardFrenzyMaxSpan.className = ColourTextPre + luckyRewardFrenzyMaxSpan;\n luckyRewardFrenzyMaxSpan.textContent =\n Beautify(CacheLuckyRewardFrenzy) +\n (luckySplit ? ` / ${Beautify(CacheLuckyWrathRewardFrenzy)}` : '');\n section.appendChild(\n StatsListing(\n 'withTooltip',\n `\"Lucky!\" reward (max) (frenzy)${luckySplit ? ' (golden / wrath)' : ''}`,\n luckyRewardFrenzyMaxSpan,\n goldCookTooltip,\n ),\n );\n\n const luckyCurBase =\n Math.min(\n (Game.cookies + GetWrinkConfigBank()) * 0.15,\n CacheNoGoldSwitchCookiesPS * CacheDragonsFortuneMultAdjustment * 60 * 15,\n ) + 13;\n const luckyCurSpan = document.createElement('span');\n luckyCurSpan.style.fontWeight = 'bold';\n luckyCurSpan.className = ColourTextPre + luckyCurSpan;\n luckyCurSpan.textContent =\n Beautify(CacheGoldenCookiesMult * luckyCurBase) +\n (luckySplit ? ` / ${Beautify(CacheWrathCookiesMult * luckyCurBase)}` : '');\n section.appendChild(\n StatsListing(\n 'withTooltip',\n `\"Lucky!\" reward (cur)${luckySplit ? ' (golden / wrath)' : ''}`,\n luckyCurSpan,\n goldCookTooltip,\n ),\n );\n return section;\n}\n\n/**\n * This function creates the \"Chain\" section of the stats page\n * @returns\t{object}\tsection\t\tThe object contating the Chain section\n */\nexport function ChainSection() {\n // This sets which tooltip to display for certain stats\n const goldCookTooltip = Game.auraMult(\"Dragon's Fortune\")\n ? 'GoldCookDragonsFortuneTooltipPlaceholder'\n : 'GoldCookTooltipPlaceholder';\n\n const section = document.createElement('div');\n section.className = 'CMStatsChainSection';\n\n const chainColour =\n Game.cookies + GetWrinkConfigBank() < CacheChainRequired ? ColourRed : ColourGreen;\n const chainTime =\n Game.cookies + GetWrinkConfigBank() < CacheChainRequired\n ? FormatTime((CacheChainRequired - (Game.cookies + GetWrinkConfigBank())) / GetCPS())\n : '';\n const chainReqFrag = document.createDocumentFragment();\n const chainReqSpan = document.createElement('span');\n chainReqSpan.style.fontWeight = 'bold';\n chainReqSpan.className = ColourTextPre + chainColour;\n chainReqSpan.textContent = Beautify(CacheChainRequired);\n chainReqFrag.appendChild(chainReqSpan);\n if (chainTime !== '') {\n const chainReqSmall = document.createElement('small');\n chainReqSmall.textContent = ` (${chainTime})`;\n chainReqFrag.appendChild(chainReqSmall);\n }\n section.appendChild(\n StatsListing('withTooltip', '\"Chain\" cookies required', chainReqFrag, goldCookTooltip),\n );\n\n const chainWrathColour =\n Game.cookies + GetWrinkConfigBank() < CacheChainWrathRequired ? ColourRed : ColourGreen;\n const chainWrathTime =\n Game.cookies + GetWrinkConfigBank() < CacheChainWrathRequired\n ? FormatTime((CacheChainWrathRequired - (Game.cookies + GetWrinkConfigBank())) / GetCPS())\n : '';\n const chainWrathReqFrag = document.createDocumentFragment();\n const chainWrathReqSpan = document.createElement('span');\n chainWrathReqSpan.style.fontWeight = 'bold';\n chainWrathReqSpan.className = ColourTextPre + chainWrathColour;\n chainWrathReqSpan.textContent = Beautify(CacheChainWrathRequired);\n chainWrathReqFrag.appendChild(chainWrathReqSpan);\n if (chainWrathTime !== '') {\n const chainWrathReqSmall = document.createElement('small');\n chainWrathReqSmall.textContent = ` (${chainWrathTime})`;\n chainWrathReqFrag.appendChild(chainWrathReqSmall);\n }\n section.appendChild(\n StatsListing(\n 'withTooltip',\n '\"Chain\" cookies required (Wrath)',\n chainWrathReqFrag,\n goldCookTooltip,\n ),\n );\n\n const chainColourFrenzy =\n Game.cookies + GetWrinkConfigBank() < CacheChainFrenzyRequired ? ColourRed : ColourGreen;\n const chainTimeFrenzy =\n Game.cookies + GetWrinkConfigBank() < CacheChainFrenzyRequired\n ? FormatTime((CacheChainFrenzyRequired - (Game.cookies + GetWrinkConfigBank())) / GetCPS())\n : '';\n const chainReqFrenFrag = document.createDocumentFragment();\n const chainReqFrenSpan = document.createElement('span');\n chainReqFrenSpan.style.fontWeight = 'bold';\n chainReqFrenSpan.className = ColourTextPre + chainColourFrenzy;\n chainReqFrenSpan.textContent = Beautify(CacheChainFrenzyRequired);\n chainReqFrenFrag.appendChild(chainReqFrenSpan);\n if (chainTimeFrenzy !== '') {\n const chainReqFrenSmall = document.createElement('small');\n chainReqFrenSmall.textContent = ` (${chainTimeFrenzy})`;\n chainReqFrenFrag.appendChild(chainReqFrenSmall);\n }\n section.appendChild(\n StatsListing(\n 'withTooltip',\n '\"Chain\" cookies required (Frenzy)',\n chainReqFrenFrag,\n goldCookTooltip,\n ),\n );\n\n const chainWrathColourFrenzy =\n Game.cookies + GetWrinkConfigBank() < CacheChainFrenzyWrathRequired ? ColourRed : ColourGreen;\n const chainWrathTimeFrenzy =\n Game.cookies + GetWrinkConfigBank() < CacheChainFrenzyWrathRequired\n ? FormatTime(\n (CacheChainFrenzyWrathRequired - (Game.cookies + GetWrinkConfigBank())) / GetCPS(),\n )\n : '';\n const chainWrathReqFrenFrag = document.createDocumentFragment();\n const chainWrathReqFrenSpan = document.createElement('span');\n chainWrathReqFrenSpan.style.fontWeight = 'bold';\n chainWrathReqFrenSpan.className = ColourTextPre + chainWrathColourFrenzy;\n chainWrathReqFrenSpan.textContent = Beautify(CacheChainFrenzyWrathRequired);\n chainWrathReqFrenFrag.appendChild(chainWrathReqFrenSpan);\n if (chainWrathTimeFrenzy !== '') {\n const chainWrathReqFrenSmall = document.createElement('small');\n chainWrathReqFrenSmall.textContent = ` (${chainWrathTimeFrenzy})`;\n chainWrathReqFrenFrag.appendChild(chainWrathReqFrenSmall);\n }\n section.appendChild(\n StatsListing(\n 'withTooltip',\n '\"Chain\" cookies required (frenzy) (Wrath)',\n chainWrathReqFrenFrag,\n goldCookTooltip,\n ),\n );\n\n section.appendChild(\n StatsListing(\n 'withTooltip',\n '\"Chain\" reward (max) (golden / wrath)',\n document.createTextNode(\n `${Beautify(CacheChainMaxReward[0])} / ${Beautify(CacheChainWrathMaxReward[0])}`,\n ),\n goldCookTooltip,\n ),\n );\n\n section.appendChild(\n StatsListing(\n 'withTooltip',\n '\"Chain\" reward (max) (frenzy) (golden / wrath)',\n document.createTextNode(\n `${Beautify(CacheChainFrenzyMaxReward[0])} / ${Beautify(CacheChainFrenzyMaxReward[0])}`,\n ),\n goldCookTooltip,\n ),\n );\n\n const chainCurMax = Math.min(\n Game.cookiesPs * 60 * 60 * 6 * CacheDragonsFortuneMultAdjustment,\n Game.cookies * 0.5,\n );\n const chainCur = MaxChainCookieReward(7, chainCurMax, CacheGoldenCookiesMult)[0];\n const chainCurWrath = MaxChainCookieReward(6, chainCurMax, CacheWrathCookiesMult)[0];\n section.appendChild(\n StatsListing(\n 'withTooltip',\n '\"Chain\" reward (cur) (golden / wrath)',\n document.createTextNode(`${Beautify(chainCur)} / ${Beautify(chainCurWrath)}`),\n goldCookTooltip,\n ),\n );\n\n section.appendChild(\n StatsListing(\n 'withTooltip',\n 'CPS needed for next level (g / w)',\n document.createTextNode(\n `${Beautify(CacheChainRequiredNext)} / ${Beautify(CacheChainWrathRequiredNext)}`,\n ),\n 'ChainNextLevelPlaceholder',\n ),\n );\n section.appendChild(\n StatsListing(\n 'withTooltip',\n 'CPS needed for next level (frenzy) (g / w)',\n document.createTextNode(\n `${Beautify(CacheChainFrenzyRequiredNext)} / ${Beautify(\n CacheChainFrenzyWrathRequiredNext,\n )}`,\n ),\n 'ChainNextLevelPlaceholder',\n ),\n );\n return section;\n}\n\n/**\n * This function creates the \"Spells\" section of the stats page\n * @returns\t{object}\tsection\t\tThe object contating the Spells section\n */\nexport function SpellsSection() {\n const section = document.createElement('div');\n section.className = 'CMStatsSpellsSection';\n\n const conjureColour =\n Game.cookies + GetWrinkConfigBank() < CacheConjure ? ColourRed : ColourGreen;\n const conjureTime =\n Game.cookies + GetWrinkConfigBank() < CacheConjure\n ? FormatTime((CacheConjure - (Game.cookies + GetWrinkConfigBank())) / GetCPS())\n : '';\n\n const conjureReqFrag = document.createDocumentFragment();\n const conjureReqSpan = document.createElement('span');\n conjureReqSpan.style.fontWeight = 'bold';\n conjureReqSpan.className = ColourTextPre + conjureColour;\n conjureReqSpan.textContent = Beautify(CacheConjure);\n conjureReqFrag.appendChild(conjureReqSpan);\n if (conjureTime !== '') {\n const conjureReqSmall = document.createElement('small');\n conjureReqSmall.textContent = ` (${conjureTime})`;\n conjureReqFrag.appendChild(conjureReqSmall);\n }\n section.appendChild(\n StatsListing(\n 'withTooltip',\n '\"Conjure Baked Goods\" cookies required',\n conjureReqFrag,\n 'GoldCookTooltipPlaceholder',\n ),\n );\n section.appendChild(\n StatsListing(\n 'withTooltip',\n '\"Conjure Baked Goods\" reward (max)',\n document.createTextNode(Beautify(CacheConjureReward)),\n 'GoldCookTooltipPlaceholder',\n ),\n );\n\n const conjureFrenzyColour =\n Game.cookies + GetWrinkConfigBank() < CacheConjure * 7 ? ColourRed : ColourGreen;\n const conjureFrenzyCur = Math.min(\n (Game.cookies + GetWrinkConfigBank()) * 0.15,\n CacheNoGoldSwitchCookiesPS * 60 * 30,\n );\n const conjureFrenzyTime =\n Game.cookies + GetWrinkConfigBank() < CacheConjure * 7\n ? FormatTime((CacheConjure * 7 - (Game.cookies + GetWrinkConfigBank())) / GetCPS())\n : '';\n\n const conjureFrenzyReqFrag = document.createDocumentFragment();\n const conjureFrenzyReqSpan = document.createElement('span');\n conjureFrenzyReqSpan.style.fontWeight = 'bold';\n conjureFrenzyReqSpan.className = ColourTextPre + conjureFrenzyColour;\n conjureFrenzyReqSpan.textContent = Beautify(CacheConjure * 7);\n conjureFrenzyReqFrag.appendChild(conjureFrenzyReqSpan);\n if (conjureFrenzyTime !== '') {\n const conjureFrenzyReqSmall = document.createElement('small');\n conjureFrenzyReqSmall.textContent = ` (${conjureFrenzyTime})`;\n conjureFrenzyReqFrag.appendChild(conjureFrenzyReqSmall);\n }\n section.appendChild(\n StatsListing(\n 'withTooltip',\n '\"Conjure Baked Goods\" cookies required (frenzy)',\n conjureFrenzyReqFrag,\n 'GoldCookTooltipPlaceholder',\n ),\n );\n section.appendChild(\n StatsListing(\n 'withTooltip',\n '\"Conjure Baked Goods\" reward (max) (frenzy)',\n document.createTextNode(Beautify(CacheConjureReward * 7)),\n 'GoldCookTooltipPlaceholder',\n ),\n );\n section.appendChild(\n StatsListing(\n 'withTooltip',\n '\"Conjure Baked Goods\" reward (cur)',\n document.createTextNode(Beautify(conjureFrenzyCur)),\n 'GoldCookTooltipPlaceholder',\n ),\n );\n if (CacheEdifice) {\n section.appendChild(\n StatsListing(\n 'withTooltip',\n '\"Spontaneous Edifice\" cookies required (most expensive building)',\n document.createTextNode(`${Beautify(CacheEdifice)} (${CacheEdificeBuilding})`),\n 'GoldCookTooltipPlaceholder',\n ),\n );\n }\n return section;\n}\n\n/**\n * This function creates the \"Garden\" section of the stats page\n * @returns\t{object}\tsection\t\tThe object contating the Spells section\n */\nexport function GardenSection() {\n const section = document.createElement('div');\n section.className = 'CMStatsGardenSection';\n\n const bakeberryColour = Game.cookies < Game.cookiesPs * 60 * 10 * 100 ? ColourRed : ColourGreen;\n const bakeberryFrag = document.createElement('span');\n bakeberryFrag.style.fontWeight = 'bold';\n bakeberryFrag.className = ColourTextPre + bakeberryColour;\n bakeberryFrag.textContent = Beautify(Game.cookiesPs * 60 * 10 * 100);\n section.appendChild(\n StatsListing('basic', 'Cookies required for max reward of Bakeberry: ', bakeberryFrag),\n );\n\n const chocorootColour = Game.cookies < Game.cookiesPs * 60 * 100 ? ColourRed : ColourGreen;\n const chocorootFrag = document.createElement('span');\n chocorootFrag.style.fontWeight = 'bold';\n chocorootFrag.className = ColourTextPre + chocorootColour;\n chocorootFrag.textContent = Beautify(Game.cookiesPs * 60 * 100);\n section.appendChild(\n StatsListing('basic', 'Cookies required for max reward of Chocoroot: ', chocorootFrag),\n );\n\n const queenbeetColour = Game.cookies < Game.cookiesPs * 60 * 60 * 25 ? ColourRed : ColourGreen;\n const queenbeetFrag = document.createElement('span');\n queenbeetFrag.style.fontWeight = 'bold';\n queenbeetFrag.className = ColourTextPre + queenbeetColour;\n queenbeetFrag.textContent = Beautify(Game.cookiesPs * 60 * 60 * 25);\n section.appendChild(\n StatsListing('basic', 'Cookies required for max reward of Queenbeet: ', queenbeetFrag),\n );\n\n const duketaterColour = Game.cookies < Game.cookiesPs * 60 * 15 * 100 ? ColourRed : ColourGreen;\n const duketaterFrag = document.createElement('span');\n duketaterFrag.style.fontWeight = 'bold';\n duketaterFrag.className = ColourTextPre + duketaterColour;\n duketaterFrag.textContent = Beautify(Game.cookiesPs * 60 * 15 * 100);\n section.appendChild(\n StatsListing('basic', 'Cookies required for max reward of Duketater: ', duketaterFrag),\n );\n const missingPlantDrops = [];\n Object.keys(GameData.PlantDrops).forEach((i) => {\n if (!Game.HasUnlocked(GameData.PlantDrops[i])) {\n missingPlantDrops.push(GameData.PlantDrops[i]);\n }\n });\n if (missingPlantDrops.length !== 0) {\n section.appendChild(\n StatsListing('basic', 'Rare plant drops left to unlock', StatsMissDisp(missingPlantDrops)),\n );\n }\n return section;\n}\n\n/**\n * This function creates the \"Prestige\" section of the stats page\n * @returns\t{object}\tsection\t\tThe object contating the Prestige section\n */\nexport function PrestigeSection() {\n const section = document.createElement('div');\n section.className = 'CMStatsPrestigeSection';\n\n const possiblePresMax = Math.floor(\n Game.HowMuchPrestige(\n CacheRealCookiesEarned +\n Game.cookiesReset +\n CacheWrinklersTotal +\n (Game.HasUnlocked('Chocolate egg') && !Game.Has('Chocolate egg') ? CacheLastChoEgg : 0),\n ),\n );\n section.appendChild(\n StatsListing(\n 'withTooltip',\n 'Prestige level (cur / max)',\n document.createTextNode(`${Beautify(Game.prestige)} / ${Beautify(possiblePresMax)}`),\n 'PrestMaxTooltipPlaceholder',\n ),\n );\n\n const neededCook = Math.max(\n 0,\n Game.HowManyCookiesReset(possiblePresMax + 1) -\n (CacheRealCookiesEarned +\n Game.cookiesReset +\n CacheWrinklersTotal +\n ((Game.HasUnlocked('Chocolate egg') && !Game.Has('Chocolate egg') ? CacheLastChoEgg : 0)\n ? CacheLastChoEgg\n : 0)),\n );\n const cookiesNextFrag = document.createDocumentFragment();\n cookiesNextFrag.appendChild(document.createTextNode(Beautify(neededCook)));\n const cookiesNextSmall = document.createElement('small');\n cookiesNextSmall.textContent = ` (${FormatTime(neededCook / CacheAvgCPSWithChoEgg, 1)})`;\n cookiesNextFrag.appendChild(cookiesNextSmall);\n section.appendChild(\n StatsListing(\n 'withTooltip',\n 'Cookies to next level',\n cookiesNextFrag,\n 'NextPrestTooltipPlaceholder',\n ),\n );\n\n section.appendChild(\n StatsListing(\n 'withTooltip',\n 'Heavenly chips (cur / max)',\n document.createTextNode(\n `${Beautify(Game.heavenlyChips)} / ${Beautify(\n possiblePresMax - Game.prestige + Game.heavenlyChips,\n )}`,\n ),\n 'HeavenChipMaxTooltipPlaceholder',\n ),\n );\n\n section.appendChild(\n StatsListing(\n 'basic',\n 'Heavenly chips per second (last 5 seconds)',\n document.createTextNode(Beautify(CacheHCPerSecond, 2)),\n ),\n );\n\n const HCTarget = Number(\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.HeavenlyChipsTarget,\n );\n if (!Number.isNaN(HCTarget)) {\n const CookiesTillTarget =\n HCTarget - Math.floor(Game.HowMuchPrestige(Game.cookiesReset + Game.cookiesEarned));\n if (CookiesTillTarget > 0) {\n section.appendChild(\n StatsListing(\n 'basic',\n 'Heavenly chips to target set in settings (cur)',\n document.createTextNode(Beautify(CookiesTillTarget)),\n ),\n );\n section.appendChild(\n StatsListing(\n 'basic',\n 'Time till target (cur, current 5 second average)',\n document.createTextNode(FormatTime(CookiesTillTarget / CacheHCPerSecond)),\n ),\n );\n }\n }\n\n const resetBonus = ResetBonus(possiblePresMax);\n const resetFrag = document.createDocumentFragment();\n resetFrag.appendChild(document.createTextNode(Beautify(resetBonus)));\n const increase = Math.round((resetBonus / Game.cookiesPs) * 10000);\n if (Number.isFinite(increase) && increase !== 0) {\n const resetSmall = document.createElement('small');\n resetSmall.textContent = ` (${increase / 100}% of income)`;\n resetFrag.appendChild(resetSmall);\n }\n section.appendChild(\n StatsListing('withTooltip', 'Reset bonus income', resetFrag, 'ResetTooltipPlaceholder'),\n );\n\n const currentPrestige = Math.floor(Game.HowMuchPrestige(Game.cookiesReset));\n const willHave = Math.floor(Game.HowMuchPrestige(Game.cookiesReset + Game.cookiesEarned));\n const willGet = willHave - currentPrestige;\n if (!Game.Has('Lucky digit')) {\n let delta7 = 7 - (willHave % 10);\n if (delta7 < 0) delta7 += 10;\n const next7Reset = willGet + delta7;\n const next7Total = willHave + delta7;\n const frag7 = document.createDocumentFragment();\n frag7.appendChild(\n document.createTextNode(\n `${next7Total.toLocaleString()} / ${next7Reset.toLocaleString()} (+${delta7})`,\n ),\n );\n section.appendChild(StatsListing('basic', 'Next \"Lucky Digit\" (total / reset)', frag7));\n }\n\n if (!Game.Has('Lucky number')) {\n let delta777 = 777 - (willHave % 1000);\n if (delta777 < 0) delta777 += 1000;\n const next777Reset = willGet + delta777;\n const next777Total = willHave + delta777;\n const frag777 = document.createDocumentFragment();\n frag777.appendChild(\n document.createTextNode(\n `${next777Total.toLocaleString()} / ${next777Reset.toLocaleString()} (+${delta777})`,\n ),\n );\n section.appendChild(StatsListing('basic', 'Next \"Lucky Number\" (total / reset)', frag777));\n }\n\n if (!Game.Has('Lucky payout')) {\n let delta777777 = 777777 - (willHave % 1000000);\n if (delta777777 < 0) delta777777 += 1000000;\n const next777777Reset = willGet + delta777777;\n const next777777Total = willHave + delta777777;\n const frag777777 = document.createDocumentFragment();\n frag777777.appendChild(\n document.createTextNode(\n `${next777777Total.toLocaleString()} / ${next777777Reset.toLocaleString()} (+${delta777777})`,\n ),\n );\n section.appendChild(StatsListing('basic', 'Next \"Lucky Payout\" (total / reset)', frag777777));\n }\n\n return section;\n}\n\n/**\n * This function creates the \"Season Specials\" section of the stats page\n * @returns\t{object}\tsection\t\tThe object contating the Season Specials section\n */\nexport function SeasonSection() {\n const section = document.createElement('div');\n section.className = 'CMStatsSeasonSection';\n\n let specDisp = false;\n const missingHalloweenCookies = [];\n Object.keys(GameData.HalloCookies).forEach((i) => {\n if (!Game.Has(GameData.HalloCookies[i])) {\n missingHalloweenCookies.push(GameData.HalloCookies[i]);\n specDisp = true;\n }\n });\n const missingChristmasCookies = [];\n Object.keys(GameData.ChristCookies).forEach((i) => {\n if (!Game.Has(GameData.ChristCookies[i])) {\n missingChristmasCookies.push(GameData.ChristCookies[i]);\n specDisp = true;\n }\n });\n const missingValentineCookies = [];\n Object.keys(GameData.ValCookies).forEach((i) => {\n if (!Game.Has(GameData.ValCookies[i])) {\n missingValentineCookies.push(GameData.ValCookies[i]);\n specDisp = true;\n }\n });\n const missingNormalEggs = [];\n Object.keys(Game.eggDrops).forEach((i) => {\n if (!Game.HasUnlocked(Game.eggDrops[i])) {\n missingNormalEggs.push(Game.eggDrops[i]);\n specDisp = true;\n }\n });\n const missingRareEggs = [];\n Object.keys(Game.rareEggDrops).forEach((i) => {\n if (!Game.HasUnlocked(Game.rareEggDrops[i])) {\n missingRareEggs.push(Game.rareEggDrops[i]);\n specDisp = true;\n }\n });\n const choEgg = Game.HasUnlocked('Chocolate egg') && !Game.Has('Chocolate egg');\n const centEgg = Game.Has('Century egg');\n\n if (Game.season === 'christmas' || specDisp || choEgg || centEgg) {\n section.appendChild(StatsHeader('Season Specials', 'Sea'));\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers.Sea) {\n if (missingHalloweenCookies.length !== 0) {\n section.appendChild(\n StatsMissDispListing(\n 'basic',\n 'Halloween cookies left to buy',\n StatsMissDisp(missingHalloweenCookies),\n Game.season === 'halloween',\n ),\n );\n let failRateHalloween = 0.95;\n if (Game.HasAchiev('Spooky cookies')) failRateHalloween = 0.8;\n if (Game.Has('Starterror')) failRateHalloween *= 0.9;\n failRateHalloween *= 1 / Game.dropRateMult();\n if (Game.hasGod) {\n const godLvl = Game.hasGod('seasons');\n if (godLvl === 1) failRateHalloween *= 0.9;\n else if (godLvl === 2) failRateHalloween *= 0.95;\n else if (godLvl === 3) failRateHalloween *= 0.97;\n }\n const obtainedCookiesChance = missingHalloweenCookies.length / 7;\n section.appendChild(\n StatsMissDispListing(\n 'basic',\n 'Chance of receiving a cookie from wrinkler/shiny wrinkler',\n document.createTextNode(\n `${Beautify((1 - failRateHalloween) * obtainedCookiesChance * 100)}% / ${Beautify(\n (1 - failRateHalloween * 0.9) * obtainedCookiesChance * 100,\n )}%`,\n ),\n Game.season === 'halloween',\n ),\n );\n }\n if (missingChristmasCookies.length !== 0) {\n section.appendChild(\n StatsMissDispListing(\n 'basic',\n 'Christmas cookies left to buy',\n StatsMissDisp(missingChristmasCookies),\n Game.season === 'christmas',\n ),\n );\n let failRateChristmas = 0.8;\n if (Game.HasAchiev('Let it snow')) failRateChristmas = 0.6;\n failRateChristmas *= 1 / Game.dropRateMult();\n if (Game.Has('Starsnow')) failRateChristmas *= 0.95;\n if (Game.hasGod) {\n const godLvl = Game.hasGod('seasons');\n if (godLvl === 1) failRateChristmas *= 0.9;\n else if (godLvl === 2) failRateChristmas *= 0.95;\n else if (godLvl === 3) failRateChristmas *= 0.97;\n }\n const obtainedCookiesChance = missingChristmasCookies.length / 7;\n section.appendChild(\n StatsMissDispListing(\n 'basic',\n 'Chance of receiving a cookie from reindeer',\n document.createTextNode(\n `${Beautify((1 - failRateChristmas) * obtainedCookiesChance * 100)}%`,\n ),\n Game.season === 'christmas',\n ),\n );\n }\n if (missingValentineCookies.length !== 0) {\n section.appendChild(\n StatsMissDispListing(\n 'basic',\n 'Valentine cookies left to buy',\n StatsMissDisp(missingValentineCookies),\n Game.season === 'valentines',\n ),\n );\n }\n const dropRateEgg = function (StartingFailRate) {\n let failRateEgg = StartingFailRate * (1 / Game.dropRateMult());\n if (Game.HasAchiev('Hide & seek champion')) failRateEgg *= 0.7;\n if (Game.Has('Omelette')) failRateEgg *= 0.9;\n if (Game.Has('Starspawn')) failRateEgg *= 0.9;\n if (Game.hasGod) {\n const godLvl = Game.hasGod('seasons');\n if (godLvl === 1) failRateEgg *= 0.9;\n else if (godLvl === 2) failRateEgg *= 0.95;\n else if (godLvl === 3) failRateEgg *= 0.97;\n }\n // Calculations courtesy of @svschouw, at https://github.com/Aktanusa/CookieMonster/issues/25\n const succesRateEgg = 1 - failRateEgg;\n const obtainedEggs = Game.eggDrops.length - missingNormalEggs.length;\n const obtainedRareEggs = Game.rareEggDrops.length - missingRareEggs.length;\n const pNormal1 = succesRateEgg * 0.9 * (1 - obtainedEggs / Game.eggDrops.length);\n const pRare1 = succesRateEgg * 0.1 * (1 - obtainedRareEggs / Game.rareEggDrops.length);\n const pRedropNormal = succesRateEgg * 0.9 * (obtainedEggs / Game.eggDrops.length);\n const pRedropRare = succesRateEgg * 0.1 * (obtainedRareEggs / Game.rareEggDrops.length);\n const pRedrop = pRedropNormal + pRedropRare;\n const pNormal2 = pRedrop * 0.9 * (1 - obtainedEggs / Game.eggDrops.length);\n const pRare2 = pRedrop * 0.1 * (1 - obtainedRareEggs / Game.rareEggDrops.length);\n return [pNormal1 + pNormal2, pRare1 + pRare2];\n };\n if (missingNormalEggs.length !== 0) {\n section.appendChild(\n StatsMissDispListing(\n 'basic',\n 'Normal easter eggs left to unlock',\n StatsMissDisp(missingNormalEggs),\n Game.season === 'easter',\n ),\n );\n section.appendChild(\n StatsMissDispListing(\n 'basic',\n 'Chance of receiving an egg from wrinkler/golden cookie',\n document.createTextNode(\n `${Beautify(dropRateEgg(0.98)[0] * 100)}% / ${Beautify(dropRateEgg(0.9)[0] * 100)}%`,\n ),\n Game.season === 'easter',\n ),\n );\n }\n if (missingRareEggs.length !== 0) {\n section.appendChild(\n StatsMissDispListing(\n 'basic',\n 'Rare easter eggs left to unlock',\n StatsMissDisp(missingRareEggs),\n Game.season === 'easter',\n ),\n );\n section.appendChild(\n StatsMissDispListing(\n 'basic',\n 'Chance of receiving a rare egg from wrinkler/golden cookie',\n document.createTextNode(\n `${Beautify(dropRateEgg(0.98)[1] * 100)}% / ${Beautify(dropRateEgg(0.9)[1] * 100)}%`,\n ),\n Game.season === 'easter',\n ),\n );\n }\n\n if (Game.season === 'christmas')\n section.appendChild(\n StatsMissDispListing(\n 'basic',\n 'Reindeer reward',\n document.createTextNode(Beautify(CacheSeaSpec)),\n true,\n ),\n );\n if (choEgg) {\n section.appendChild(\n StatsListing(\n 'withTooltip',\n 'Chocolate egg cookies',\n document.createTextNode(Beautify(CacheLastChoEgg)),\n 'ChoEggTooltipPlaceholder',\n ),\n );\n }\n if (centEgg) {\n section.appendChild(\n StatsListing(\n 'basic',\n 'Century egg multiplier',\n document.createTextNode(`${Math.round((CacheCentEgg - 1) * 10000) / 100}%`),\n ),\n );\n }\n }\n }\n return section;\n}\n","import { CacheRealCookiesEarned } from '../../Cache/VariablesAndData';\nimport CalculateGains from '../Calculations/CalculateGains';\nimport CheckOtherAchiev from '../Calculations/CheckOtherAchiev';\nimport CopyData from '../SimulationData/CopyData';\nimport SimWin from '../SimulationData/SimWin';\nimport { SimAchievementsOwned, SimCookiesPs, SimPrestige, SimUpgrades } from '../VariablesAndData'; // eslint-disable-line no-unused-vars\n\n/**\n * This function calculates the cookies per click difference betwene current and after a ascension\n * It is called by CM.Disp.CreateStatsPrestigeSection()\n * @param\t{number}\tnewHeavenlyChips\tThe total heavenly chips after ascension\n * @returns\t{number}\tResetCPS\t\t\tThe CPS difference after reset\n */\nexport default function ResetBonus(newHeavenlyChips) {\n // Calculate CPS with all Heavenly upgrades\n let curCPS = Game.cookiesPs;\n\n CopyData();\n\n if (SimUpgrades['Heavenly key'].bought === 0) {\n SimUpgrades['Heavenly chip secret'].bought = 1;\n SimUpgrades['Heavenly cookie stand'].bought = 1;\n SimUpgrades['Heavenly bakery'].bought = 1;\n SimUpgrades['Heavenly confectionery'].bought = 1;\n SimUpgrades['Heavenly key'].bought = 1;\n\n CalculateGains();\n\n curCPS = SimCookiesPs;\n\n CopyData();\n }\n\n if (CacheRealCookiesEarned >= 1000000) SimWin('Sacrifice');\n if (CacheRealCookiesEarned >= 1000000000) SimWin('Oblivion');\n if (CacheRealCookiesEarned >= 1000000000000) SimWin('From scratch');\n if (CacheRealCookiesEarned >= 1000000000000000) SimWin('Nihilism');\n if (CacheRealCookiesEarned >= 1000000000000000000) SimWin('Dematerialize');\n if (CacheRealCookiesEarned >= 1000000000000000000000) SimWin('Nil zero zilch');\n if (CacheRealCookiesEarned >= 1000000000000000000000000) SimWin('Transcendence');\n if (CacheRealCookiesEarned >= 1000000000000000000000000000) SimWin('Obliterate');\n if (CacheRealCookiesEarned >= 1000000000000000000000000000000) SimWin('Negative void');\n if (CacheRealCookiesEarned >= 1000000000000000000000000000000000) SimWin('To crumbs, you say?');\n if (CacheRealCookiesEarned >= 1000000000000000000000000000000000000) SimWin('You get nothing');\n if (CacheRealCookiesEarned >= 1000000000000000000000000000000000000000)\n SimWin('Humble rebeginnings');\n if (CacheRealCookiesEarned >= 1000000000000000000000000000000000000000000)\n SimWin('The end of the world');\n if (CacheRealCookiesEarned >= 1000000000000000000000000000000000000000000000)\n SimWin(\"Oh, you're back\");\n if (CacheRealCookiesEarned >= 1000000000000000000000000000000000000000000000000)\n SimWin('Lazarus');\n if (CacheRealCookiesEarned >= 1000000000000000000000000000000000000000000000000000)\n SimWin('Smurf account');\n if (CacheRealCookiesEarned >= 1000000000000000000000000000000000000000000000000000000)\n SimWin(\"If at first you don't succeed\");\n\n SimUpgrades['Heavenly chip secret'].bought = 1;\n SimUpgrades['Heavenly cookie stand'].bought = 1;\n SimUpgrades['Heavenly bakery'].bought = 1;\n SimUpgrades['Heavenly confectionery'].bought = 1;\n SimUpgrades['Heavenly key'].bought = 1;\n\n SimPrestige = newHeavenlyChips;\n\n const lastAchievementsOwned = SimAchievementsOwned;\n\n CalculateGains();\n\n CheckOtherAchiev();\n\n if (lastAchievementsOwned !== SimAchievementsOwned) {\n CalculateGains();\n }\n\n const ResetCPS = SimCookiesPs - curCPS;\n\n // Reset Pretige level after calculation as it is used in CM.Sim.CalculateGains() so can't be local\n SimPrestige = Game.prestige;\n\n return ResetCPS;\n}\n","function CrateTooltipLockedAchievements(me) {\n const tags = [];\n if (me.pool === 'shadow') tags.push('Shadow Achievement', '#9700cf');\n else tags.push('Achievement', 0);\n tags.push('Locked', 0);\n\n let neuromancy = 0;\n if (Game.Has('Neuromancy') || (Game.sesame && me.pool === 'debug')) neuromancy = 1;\n if (neuromancy && me.won === 0) tags.push('Click to win!', '#00c462');\n else if (neuromancy && me.won > 0) tags.push('Click to lose!', '#00c462');\n\n let { icon } = me;\n if (me.iconFunction) icon = me.iconFunction();\n\n let { desc } = me;\n if (me.descFunc) desc = me.descFunc('stats');\n\n let tagsStr = '';\n for (let i = 0; i < tags.length; i += 2) {\n if (i % 2 === 0)\n tagsStr += `
[${\n tags[i]\n }]
`;\n }\n tagsStr = tagsStr.substring(1);\n\n return `
\n
\n
${me.name}
\n ${tagsStr}
${desc}
\n ${\n Game.sesame\n ? `
Id : ${me.id} | Order : ${Math.floor(me.order)}${\n me.tier ? ` | Tier : ${me.tier}` : ''\n }
`\n : ''\n }`;\n}\n\n/**\n * This function overwrites the crates of missing achievements\n */\nexport default function AddMissingAchievements() {\n let achievs;\n Object.values(document.querySelectorAll('div.title')).forEach((i) => {\n if (i.textContent.includes('Achievements')) {\n achievs = i.parentElement.querySelectorAll('div.listing.crateBox')[0];\n }\n });\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.MissingAchievements) {\n Object.values(achievs.children).forEach((achievsCrate) => {\n if (!achievsCrate.className.includes('enabled')) {\n const id = achievsCrate.onclick.toString().split(/\\[(.*)\\]/gi)[1];\n const { icon } = Game.AchievementsById[id];\n // eslint-disable-next-line no-param-reassign\n achievsCrate.style.backgroundPosition = `${-icon[0] * 48}px ${-icon[1] * 48}px`;\n // eslint-disable-next-line no-param-reassign\n achievsCrate.onmouseover = function () {\n if (!Game.mouseDown) {\n Game.setOnCrate(this);\n Game.tooltip.dynamic = 1;\n Game.tooltip.draw(\n this,\n () =>\n (function () {\n return CrateTooltipLockedAchievements(Game.AchievementsById[id]);\n })(),\n 'top',\n );\n Game.tooltip.wobble();\n }\n };\n }\n });\n }\n}\n","/**\n * This function fixes Game.mouseY as a result of bars that are added by CookieMonster\n * It is called by Game.UpdateWrinklers(), Game.UpdateSpecial() and the .onmousover of the BigCookie\n * before execution of their actual function\n */\nexport default function FixMouseY(target) {\n if (\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.TimerBar === 1 &&\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.TimerBarPos === 0\n ) {\n const timerBarHeight = parseInt(l('CMTimerBar').style.height, 10);\n Game.mouseY -= timerBarHeight;\n target();\n Game.mouseY += timerBarHeight;\n } else {\n target();\n }\n}\n","import jscolor from '@eastdesire/jscolor';\n\nimport CMBeautify from '../../Disp/BeautifyAndFormatting/Beautify';\nimport FormatTime from '../../Disp/BeautifyAndFormatting/FormatTime';\nimport { AddAuraInfo, AddDragonLevelUpTooltip } from '../../Disp/Dragon/Dragon';\nimport AddMenu from '../../Disp/MenuSections/AddMenus';\nimport UpdateTitle from '../../Disp/TabTitle/TabTitle';\nimport ReplaceAscendTooltip from '../../Disp/Tooltips/AscendButton';\nimport UpdateTooltipLocation from '../../Disp/Tooltips/PositionLocation';\nimport { CMSayTime, Title } from '../../Disp/VariablesAndData'; // eslint-disable-line no-unused-vars\nimport { SimDoSims } from '../../Sim/VariablesAndData'; // eslint-disable-line no-unused-vars\nimport ReplaceTooltipUpgrade from '../ReplaceGameElements/TooltipUpgrades';\nimport {\n BackupFunctions,\n CenturyDateAtBeginLoop, // eslint-disable-line no-unused-vars\n CycliusDateAtBeginLoop, // eslint-disable-line no-unused-vars\n} from '../VariablesAndData';\nimport FixMouseY from './FixMouse';\n\n/**\n * This function replaces certain native (from the base-game) functions\n */\nexport default function ReplaceNative() {\n // eslint-disable-next-line no-undef\n BackupFunctions.Beautify = Beautify;\n // eslint-disable-next-line no-undef\n Beautify = CMBeautify;\n\n BackupFunctions.CalculateGains = Game.CalculateGains;\n Game.CalculateGains = function () {\n BackupFunctions.CalculateGains();\n SimDoSims = 1;\n CycliusDateAtBeginLoop = Date.now();\n CenturyDateAtBeginLoop = Date.now();\n };\n\n BackupFunctions.tooltip = {};\n BackupFunctions.tooltip.draw = Game.tooltip.draw;\n BackupFunctions.tooltip.drawMod = new Function( // eslint-disable-line no-new-func\n `return ${Game.tooltip.draw.toString().split('this').join('Game.tooltip')}`,\n )();\n Game.tooltip.draw = function (from, text, origin) {\n BackupFunctions.tooltip.drawMod(from, text, origin);\n };\n\n BackupFunctions.tooltip.update = Game.tooltip.update;\n BackupFunctions.tooltip.updateMod = new Function( // eslint-disable-line no-new-func\n `return ${Game.tooltip.update.toString().split('this.').join('Game.tooltip.')}`,\n )();\n Game.tooltip.update = function () {\n BackupFunctions.tooltip.updateMod();\n UpdateTooltipLocation();\n };\n\n BackupFunctions.UpdateWrinklers = Game.UpdateWrinklers;\n Game.UpdateWrinklers = function () {\n FixMouseY(BackupFunctions.UpdateWrinklers);\n };\n\n BackupFunctions.UpdateSpecial = Game.UpdateSpecial;\n Game.UpdateSpecial = function () {\n FixMouseY(BackupFunctions.UpdateSpecial);\n };\n\n // Assumes newer browsers\n l('bigCookie').removeEventListener('click', Game.ClickCookie, false);\n l('bigCookie').addEventListener(\n 'click',\n (event) => {\n FixMouseY(()=> Game.ClickCookie(event,0));\n },\n false,\n );\n\n BackupFunctions.RebuildUpgrades = Game.RebuildUpgrades;\n Game.RebuildUpgrades = function () {\n BackupFunctions.RebuildUpgrades();\n ReplaceTooltipUpgrade();\n Game.CalculateGains();\n };\n\n BackupFunctions.ClickProduct = Game.ClickProduct;\n /**\n * This function adds a check to the purchase of a building to allow BulkBuyBlock to work.\n * If the options is 1 (on) bulkPrice is under cookies you can't buy the building.\n */\n Game.ClickProduct = function (what) {\n if (\n !Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.BulkBuyBlock ||\n Game.ObjectsById[what].bulkPrice < Game.cookies ||\n Game.buyMode === -1\n ) {\n BackupFunctions.ClickProduct(what);\n }\n };\n\n BackupFunctions.DescribeDragonAura = Game.DescribeDragonAura;\n /**\n * This function adds the function CM.Disp.AddAuraInfo() to Game.DescribeDragonAura()\n * This adds information about CPS differences and costs to the aura choosing interface\n * @param\t{number}\taura\tThe number of the aura currently selected by the mouse/user\n */\n Game.DescribeDragonAura = function (aura) {\n BackupFunctions.DescribeDragonAura(aura);\n AddAuraInfo(aura);\n };\n\n BackupFunctions.ToggleSpecialMenu = Game.ToggleSpecialMenu;\n /**\n * This function adds the code to display the tooltips for the levelUp button of the dragon\n */\n Game.ToggleSpecialMenu = function (on) {\n BackupFunctions.ToggleSpecialMenu(on);\n AddDragonLevelUpTooltip();\n };\n\n BackupFunctions.UpdateMenu = Game.UpdateMenu;\n Game.UpdateMenu = function () {\n if (typeof jscolor.picker === 'undefined' || typeof jscolor.picker.owner === 'undefined') {\n BackupFunctions.UpdateMenu();\n AddMenu();\n }\n };\n\n BackupFunctions.sayTime = Game.sayTime;\n // eslint-disable-next-line no-unused-vars\n CMSayTime = function (time, detail) {\n if (Number.isNaN(time) || time <= 0) return BackupFunctions.sayTime(time, detail);\n return FormatTime(time / Game.fps, 1);\n };\n\n BackupFunctions.Logic = Game.Logic;\n Game.Logic = function () {\n BackupFunctions.Logic();\n\n // Update tab title\n let title = 'Cookie Clicker';\n if (Game.season === 'fools') title = 'Cookie Baker';\n // eslint-disable-next-line no-unused-vars\n Title = `${Game.OnAscend ? 'Ascending! ' : ''}${CMBeautify(Game.cookies)} ${\n Game.cookies === 1 ? 'cookie' : 'cookies'\n } - ${title}`;\n UpdateTitle();\n\n // Since the Ascend Tooltip is not actually a tooltip we need to add our additional info here...\n ReplaceAscendTooltip();\n };\n}\n","/**\n * This function updates the location of the tooltip\n * It is called by Game.tooltip.update() because of CM.Main.ReplaceNative()\n */\nexport default function UpdateTooltipLocation() {\n if (Game.tooltip.origin === 'store') {\n let warnOffset = 0;\n if (\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.ToolWarnLucky === 1 &&\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.ToolWarnPos === 1 &&\n l('CMDispTooltipWarningParent') !== null\n ) {\n warnOffset = l('CMDispTooltipWarningParent').clientHeight - 4;\n }\n Game.tooltip.tta.style.top = `${Math.min(\n parseInt(Game.tooltip.tta.style.top, 10),\n l('game').clientHeight +\n l('topBar').clientHeight -\n Game.tooltip.tt.clientHeight -\n warnOffset -\n 46,\n )}px`;\n }\n // Kept for future possible use if the code changes again\n /* else if (!Game.onCrate && !Game.OnAscend && CM.Options.TimerBar === 1 && CM.Options.TimerBarPos === 0) {\n\t\tGame.tooltip.tta.style.top = (parseInt(Game.tooltip.tta.style.top) + parseInt(CM.Disp.TimerBar.style.height)) + 'px';\n\t} */\n}\n","import { CreateTooltip } from '../../Disp/Tooltips/Tooltip';\nimport { TooltipUpgradeBackup } from '../VariablesAndData';\n\n/**\n * This function replaces the original .onmouseover functions of upgrades so that it calls CM.Disp.Tooltip()\n * CM.Disp.Tooltip() sets the tooltip type to 'u'\n * It is called by Game.RebuildUpgrades() through CM.Main.ReplaceNative() and is therefore not permanent like the other ReplaceTooltip functions\n */\nexport default function ReplaceTooltipUpgrade() {\n TooltipUpgradeBackup = [];\n Object.keys(Game.UpgradesInStore).forEach((i) => {\n if (l(`upgrade${i}`).onmouseover !== null) {\n TooltipUpgradeBackup[i] = l(`upgrade${i}`).onmouseover;\n l(`upgrade${i}`).onmouseover = function () {\n if (!Game.mouseDown) {\n Game.setOnCrate(this);\n Game.tooltip.dynamic = 1;\n Game.tooltip.draw(this, () => CreateTooltip('u', `${i}`), 'store');\n Game.tooltip.wobble();\n }\n };\n }\n });\n}\n","/** Functions related to the Dragon */\n\nimport CacheDragonCost from '../../Cache/Dragon/Dragon';\nimport { CacheCostDragonUpgrade } from '../../Cache/VariablesAndData';\nimport CalculateChangeAura from '../../Sim/SimulationEvents/AuraChange';\nimport Beautify from '../BeautifyAndFormatting/Beautify';\nimport FormatTime from '../BeautifyAndFormatting/FormatTime';\n\n/**\n * This functions adds the two extra lines about CPS and time to recover to the aura picker infoscreen\n * @param\t{number}\taura\tThe number of the aura currently selected by the mouse/user\n */\nexport function AddAuraInfo(aura) {\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.DragonAuraInfo === 1) {\n const [bonusCPS, priceOfChange] = CalculateChangeAura(aura);\n const timeToRecover = FormatTime(priceOfChange / (bonusCPS + Game.cookiesPs));\n let bonusCPSPercentage;\n if (Game.cookiesPs === 0) bonusCPSPercentage = Beautify(Infinity);\n else bonusCPSPercentage = Beautify((bonusCPS / Game.cookiesPs) * 100);\n\n l('dragonAuraInfo').style.minHeight = '60px';\n l('dragonAuraInfo').style.margin = '8px';\n l('dragonAuraInfo').appendChild(document.createElement('div')).className = 'line';\n const div = document.createElement('div');\n div.style.minWidth = '200px';\n div.style.textAlign = 'center';\n div.textContent = `Picking this aura will change CPS by ${Beautify(\n bonusCPS,\n )} (${bonusCPSPercentage}% of current CPS).`;\n l('dragonAuraInfo').appendChild(div);\n const div2 = document.createElement('div');\n div2.style.minWidth = '200px';\n div2.style.textAlign = 'center';\n div2.textContent = `It will take ${timeToRecover} to recover the cost.`;\n l('dragonAuraInfo').appendChild(div2);\n }\n}\n\n/**\n * This functions adds a tooltip to the level up button displaying the cost of rebuying all\n * It is called by Game.ToggleSpecialMenu() after CM.Main.ReplaceNative()\n */\nexport function AddDragonLevelUpTooltip() {\n // Check if it is the dragon popup that is on screen\n if (\n (l('specialPopup').className.match(/onScreen/) &&\n l('specialPopup').children[0].style.background.match(/dragon/)) !== null\n ) {\n for (let i = 0; i < l('specialPopup').childNodes.length; i++) {\n if (l('specialPopup').childNodes[i].className === 'optionBox') {\n l('specialPopup').children[i].onmouseover = function () {\n CacheDragonCost();\n Game.tooltip.dynamic = 1;\n Game.tooltip.draw(\n l('specialPopup'),\n `
${CacheCostDragonUpgrade}
`,\n 'this',\n );\n Game.tooltip.wobble();\n };\n l('specialPopup').children[i].onmouseout = function () {\n Game.tooltip.shouldHide = 1;\n };\n }\n }\n }\n}\n","import { CacheDragonAura, CacheDragonAura2 } from '../../Cache/VariablesAndData';\nimport CalculateGains from '../Calculations/CalculateGains';\nimport CheckOtherAchiev from '../Calculations/CheckOtherAchiev';\nimport CopyData from '../SimulationData/CopyData';\nimport {\n SimAchievementsOwned,\n SimBuildingsOwned, // eslint-disable-line no-unused-vars\n SimCookiesPs,\n SimDragonAura,\n SimDragonAura2,\n SimObjects,\n} from '../VariablesAndData';\n\n/**\n * This functions calculates the cps and cost of changing a Dragon Aura\n * It is called by CM.Disp.AddAuraInfo()\n * @param\t{number}\t\t\taura\t\t\t\t\t\t\t\t\t\tThe number of the aura currently selected by the mouse/user\n * @returns {[number, number]} \t[CM.Sim.cookiesPs - Game.cookiesPs, price]\tThe bonus cps and the price of the change\n */\nexport default function CalculateChangeAura(aura) {\n CopyData();\n\n // Check if aura being changed is first or second aura\n const auraToBeChanged = l('promptContent').children[0].innerHTML.includes('secondary');\n if (auraToBeChanged) SimDragonAura2 = aura;\n else SimDragonAura = aura;\n\n // Sell highest building but only if aura is different\n let price = 0;\n if (SimDragonAura !== CacheDragonAura || SimDragonAura2 !== CacheDragonAura2) {\n for (let i = Game.ObjectsById.length - 1; i > -1; --i) {\n if (Game.ObjectsById[i].amount > 0) {\n const highestBuilding = SimObjects[Game.ObjectsById[i].name].name;\n SimObjects[highestBuilding].amount -= 1;\n SimBuildingsOwned -= 1;\n price =\n SimObjects[highestBuilding].basePrice *\n Game.priceIncrease **\n Math.max(0, SimObjects[highestBuilding].amount - 1 - SimObjects[highestBuilding].free);\n price = Game.modifyBuildingPrice(SimObjects[highestBuilding], price);\n price = Math.ceil(price);\n break;\n }\n }\n }\n\n const lastAchievementsOwned = SimAchievementsOwned;\n CalculateGains();\n\n CheckOtherAchiev();\n if (lastAchievementsOwned !== SimAchievementsOwned) {\n CalculateGains();\n }\n return [SimCookiesPs - Game.cookiesPs, price];\n}\n","import createMenuOptions from './createMenuOptions';\nimport AddMenuStats from './Statistics/AddStatsPage';\n\n/**\n * This function adds the calll the functions to add extra info to the stats and options pages\n */\nexport default function AddMenu() {\n const title = document.createElement('div');\n title.className = 'title';\n\n if (Game.onMenu === 'stats') {\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.Stats) {\n title.textContent = 'Cookie Monster Statistics';\n AddMenuStats(title);\n }\n } else if (Game.onMenu === 'prefs') { // Added because Framework is broken\n l('menu').childNodes[2].insertBefore(\n createMenuOptions(),\n l('menu').childNodes[2].childNodes[l('menu').childNodes[2].childNodes.length - 1],\n );\n }\n}\n","/** Functions related to updating the tab in the browser's tab-bar */\n\nimport { CacheSeasonPopShimmer, CacheSpawnedGoldenShimmer } from '../../Cache/VariablesAndData';\n\nimport { LastSeasonPopupState, LastTickerFortuneState } from '../../Main/VariablesAndData';\nimport { Title } from '../VariablesAndData';\n\n/**\n * This function updates the tab title\n * It is called on every loop by Game.Logic() which also sets CM.Disp.Title to Game.cookies\n */\nexport default function UpdateTitle() {\n if (\n Game.OnAscend ||\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.Title === 0\n ) {\n document.title = Title;\n } else if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.Title === 1) {\n let addFC = false;\n let addSP = false;\n let titleGC;\n let titleFC;\n let titleSP;\n\n if (CacheSpawnedGoldenShimmer) {\n if (CacheSpawnedGoldenShimmer.wrath)\n titleGC = `[W${Math.ceil(CacheSpawnedGoldenShimmer.life / Game.fps)}]`;\n else titleGC = `[G${Math.ceil(CacheSpawnedGoldenShimmer.life / Game.fps)}]`;\n } else if (!Game.Has('Golden switch [off]')) {\n titleGC = `[${Number(l('CMTimerBarGCMinBar').textContent) < 0 ? '!' : ''}${Math.ceil(\n (Game.shimmerTypes.golden.maxTime - Game.shimmerTypes.golden.time) / Game.fps,\n )}]`;\n } else titleGC = '[GS]';\n\n if (LastTickerFortuneState) {\n addFC = true;\n titleFC = '[F]';\n }\n\n if (Game.season === 'christmas') {\n addSP = true;\n if (LastSeasonPopupState) titleSP = `[R${Math.ceil(CacheSeasonPopShimmer.life / Game.fps)}]`;\n else {\n titleSP = `[${Number(l('CMTimerBarRenMinBar').textContent) < 0 ? '!' : ''}${Math.ceil(\n (Game.shimmerTypes.reindeer.maxTime - Game.shimmerTypes.reindeer.time) / Game.fps,\n )}]`;\n }\n }\n\n // Remove previous timers and add current cookies\n let str = Title;\n if (str.charAt(0) === '[') {\n str = str.substring(str.lastIndexOf(']') + 1);\n }\n document.title = `${titleGC + (addFC ? titleFC : '') + (addSP ? titleSP : '')} ${str}`;\n } else if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.Title === 2) {\n let str = '';\n let spawn = false;\n if (CacheSpawnedGoldenShimmer) {\n spawn = true;\n if (CacheSpawnedGoldenShimmer.wrath)\n str += `[W${Math.ceil(CacheSpawnedGoldenShimmer.life / Game.fps)}]`;\n else str += `[G${Math.ceil(CacheSpawnedGoldenShimmer.life / Game.fps)}]`;\n }\n if (LastTickerFortuneState) {\n spawn = true;\n str += '[F]';\n }\n if (Game.season === 'christmas' && LastSeasonPopupState) {\n str += `[R${Math.ceil(CacheSeasonPopShimmer.life / Game.fps)}]`;\n spawn = true;\n }\n if (spawn) str += ' - ';\n let title = 'Cookie Clicker';\n if (Game.season === 'fools') title = 'Cookie Baker';\n str += title;\n document.title = str;\n }\n}\n","import {\n CacheHCPerSecond,\n CacheLastHeavenlyChips,\n CacheTimeTillNextPrestige,\n} from '../../Cache/VariablesAndData';\nimport Beautify from '../BeautifyAndFormatting/Beautify';\n\n/**\n * This function creates a header object for tooltips.\n * @param\t{string}\ttext\tTitle of header\n * @returns {object}\tdiv\t\tAn object containing the stylized header\n */\nexport default function ReplaceAscendTooltip() {\n const cookiesToNext = Math.max(\n 0,\n Game.HowManyCookiesReset(\n Math.floor(Game.HowMuchPrestige(Game.cookiesReset + Game.cookiesEarned)) + 1,\n ) -\n (Game.cookiesEarned + Game.cookiesReset),\n );\n\n const startDate = Game.sayTime(((Date.now() - Game.startDate) / 1000) * Game.fps, -1);\n let str = `You've been on this run for
${\n startDate === '' ? 'not very long' : startDate\n }.
\n
`;\n if (Game.prestige > 0) {\n str += `Your prestige level is currently
${Beautify(Game.prestige)}.
(CpS +${Beautify(\n Game.prestige,\n )}%)\n
`;\n }\n if (CacheLastHeavenlyChips < 1) str += 'Ascending now would grant you no prestige.';\n else if (CacheLastHeavenlyChips < 2)\n str +=\n 'Ascending now would grant you
1 prestige level (+1% CpS)
and
1 heavenly chip to spend.';\n else\n str += `Ascending now would grant you
${Beautify(\n CacheLastHeavenlyChips,\n )} prestige levels (+${Beautify(CacheLastHeavenlyChips)}% CpS)
and
${Beautify(\n CacheLastHeavenlyChips,\n )} heavenly chips to spend.`;\n str += `
\n You need
${Beautify(cookiesToNext)} more cookies for the next level.
\n ${\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.TooltipAscendButton\n ? `
It takes ${CacheTimeTillNextPrestige} to reach the next level and you were making ${Beautify(\n CacheHCPerSecond,\n 2,\n )} chips on average in the last 5 seconds.
`\n : ''\n }`;\n l('ascendTooltip').innerHTML = str;\n}\n","import InitCache from '../Cache/CacheInit';\nimport { CacheStatsCookies } from '../Cache/Stats/Stats';\nimport { VersionMajor, VersionMinor } from '../Data/Moddata';\nimport CreateUpgradeBar from '../Disp/BuildingsUpgrades/UpgradeBar';\nimport { CreateBotBar } from '../Disp/InfoBars/BottomBar';\nimport { CreateTimerBar } from '../Disp/InfoBars/TimerBar';\nimport CreateSectionHideButtons from '../Disp/Initialization/CreateSectionHideButtons';\nimport CreateWrinklerButtons from '../Disp/Initialization/CreateWrinklerButton';\nimport CreateCssArea from '../Disp/Initialization/CssArea';\nimport UpdateBuildingUpgradeStyle from '../Disp/Initialization/UpdateBuildingUpgradeStyle';\nimport { CreateFavicon } from '../Disp/TabTitle/FavIcon';\nimport { CreateSimpleTooltip } from '../Disp/Tooltips/Tooltip';\nimport { CMLastAscendState, TooltipText } from '../Disp/VariablesAndData'; // eslint-disable-line no-unused-vars\nimport InitData from '../Sim/InitializeData/InitData';\nimport ReplaceNativeGrimoire from './ReplaceGameElements/NativeGrimoire';\nimport ReplaceTooltips from './ReplaceGameElements/Tooltips';\nimport ReplaceNative from './ReplaceGameFunctions/ReplaceNative';\nimport { LastModCount } from './VariablesAndData'; // eslint-disable-line no-unused-vars\nimport AddWrinklerAreaDetect from './WrinklerArea/AddDetectArea';\nimport createBuildingLockButtons from '../Disp/buildingTiles/createBuildingLockButtons';\n// import createMenuInfo from '../Disp/MenuSections/createMenuInfo';\nimport createMenuOptions from '../Disp/MenuSections/createMenuOptions';\n\n/**\n * Initialization loop of Cookie Monster\n */\nexport default function InitializeCookieMonster() {\n // Create global data object\n window.CookieMonsterData = {};\n\n // Register listeners in Cookie Monster Mod Framework\n // Commented because Framework is currently broken\n // Game.mods.cookieMonsterFramework.listeners.infoMenu.push(createMenuInfo);\n Game.mods.cookieMonsterFramework.listeners.optionsMenu.push(createMenuOptions);\n\n InitData();\n CacheStatsCookies();\n InitCache();\n\n // Stored to check if we need to re-initiliaze data\n LastModCount = Object.keys(Game.mods).length;\n\n // Creating visual elements\n CreateCssArea();\n CreateBotBar();\n CreateTimerBar();\n CreateUpgradeBar();\n CreateSectionHideButtons();\n CreateFavicon();\n Object.keys(TooltipText).forEach((i) => {\n CreateSimpleTooltip(TooltipText[i][0], TooltipText[i][1], TooltipText[i][2]);\n });\n CreateWrinklerButtons();\n UpdateBuildingUpgradeStyle();\n createBuildingLockButtons();\n\n ReplaceTooltips();\n AddWrinklerAreaDetect();\n\n // Replace native functions\n ReplaceNative();\n ReplaceNativeGrimoire();\n Game.CalculateGains();\n\n CMLastAscendState = Game.OnAscend;\n\n if (Game.prefs.popups)\n Game.Popup(`Cookie Monster version ${VersionMajor}.${VersionMinor} loaded!`);\n else Game.Notify(`Cookie Monster version ${VersionMajor}.${VersionMinor} loaded!`, '', '', 1, 1);\n\n Game.Win('Third-party');\n}\n","import { DispCSS } from '../VariablesAndData';\n\n/**\n * This function creates a CSS style that stores certain standard CSS classes used by CookieMonster\n\n */\nexport default function CreateCssArea() {\n DispCSS = document.createElement('style');\n DispCSS.type = 'text/css';\n DispCSS.id = 'CMCSS';\n\n document.head.appendChild(DispCSS);\n}\n","import {\n ColourBackPre,\n ColourBlue,\n ColourGray,\n ColourGreen,\n ColourOrange,\n ColourPurple,\n ColourRed,\n ColourTextPre,\n ColourYellow,\n} from '../VariablesAndData';\n\n/**\n * This function creates the legend for the upgrade bar\n * @returns\t{object}\tlegend\tThe legend-object to be added\n */\nfunction CreateUpgradeBarLegend() {\n const legend = document.createElement('div');\n legend.style.minWidth = '330px';\n legend.style.marginBottom = '4px';\n const title = document.createElement('div');\n title.className = 'name';\n title.style.marginBottom = '4px';\n title.textContent = 'Legend';\n legend.appendChild(title);\n\n const legendLine = function (colour, text) {\n const div = document.createElement('div');\n div.style.verticalAlign = 'middle';\n const span = document.createElement('span');\n span.className = ColourBackPre + colour;\n span.style.display = 'inline-block';\n span.style.height = '10px';\n span.style.width = '10px';\n span.style.marginRight = '4px';\n div.appendChild(span);\n div.appendChild(document.createTextNode(text));\n return div;\n };\n\n legend.appendChild(legendLine(ColourBlue, 'Better than the best PP of a building option'));\n legend.appendChild(legendLine(ColourGreen, 'Same as the best PP building option'));\n legend.appendChild(legendLine(ColourYellow, 'Within the top 10 of PP for buildings'));\n legend.appendChild(legendLine(ColourOrange, 'Within the top 20 of PP for buildings'));\n legend.appendChild(legendLine(ColourRed, 'Within the top 30 of PP for buildings'));\n legend.appendChild(legendLine(ColourPurple, 'Outside of the top 30 of PP for buildings'));\n legend.appendChild(legendLine(ColourGray, 'Negative or infinity PP'));\n return legend;\n}\n\n/**\n * This function creates the upgrade bar above the upgrade-section in the right section of the screen\n */\nexport default function CreateUpgradeBar() {\n const UpgradeBar = document.createElement('div');\n UpgradeBar.id = 'CMUpgradeBar';\n UpgradeBar.style.width = '100%';\n UpgradeBar.style.backgroundColor = 'black';\n UpgradeBar.style.textAlign = 'center';\n UpgradeBar.style.fontWeight = 'bold';\n UpgradeBar.style.display = 'none';\n UpgradeBar.style.zIndex = '21';\n UpgradeBar.onmouseout = function () {\n Game.tooltip.hide();\n };\n\n const placeholder = document.createElement('div');\n placeholder.appendChild(CreateUpgradeBarLegend());\n UpgradeBar.onmouseover = function () {\n Game.tooltip.draw(this, escape(placeholder.innerHTML), 'store');\n };\n\n const upgradeNumber = function (id, colour) {\n const span = document.createElement('span');\n span.id = id;\n span.className = ColourTextPre + colour;\n span.style.width = '14.28571428571429%';\n span.style.display = 'inline-block';\n span.textContent = '0';\n return span;\n };\n UpgradeBar.appendChild(upgradeNumber('CMUpgradeBarBlue', ColourBlue));\n UpgradeBar.appendChild(upgradeNumber('CMUpgradeBarGreen', ColourGreen));\n UpgradeBar.appendChild(upgradeNumber('CMUpgradeBarYellow', ColourYellow));\n UpgradeBar.appendChild(upgradeNumber('CMUpgradeBarOrange', ColourOrange));\n UpgradeBar.appendChild(upgradeNumber('CMUpgradeBarRed', ColourRed));\n UpgradeBar.appendChild(upgradeNumber('CMUpgradeBarPurple', ColourPurple));\n UpgradeBar.appendChild(upgradeNumber('CMUpgradeBarGray', ColourGray));\n\n l('upgrades').parentNode.insertBefore(UpgradeBar, l('upgrades').parentNode.childNodes[3]);\n}\n","/**\n * This function creates two objects at the top of the right column that allowing hiding the upgrade and building section\n */\nexport default function CreateSectionHideButtons() {\n const div = document.createElement('div');\n div.id = 'CMSectionHidButtons';\n div.style.textAlign = 'center';\n const a = document.createElement('a');\n a.className = 'option';\n a.onclick = function () {\n if (l('upgrades').style.display === 'flex') {\n l('upgrades').style.display = 'none';\n l('toggleUpgrades').style.display = 'none';\n l('techUpgrades').style.display = 'none';\n l('vaultUpgrades').style.display = 'none';\n } else {\n l('upgrades').style.display = 'flex';\n if (l('toggleUpgrades').children.length !== 0) l('toggleUpgrades').style.display = 'block';\n if (l('techUpgrades').children.length !== 0) l('techUpgrades').style.display = 'block';\n if (l('vaultUpgrades').children.length !== 0) l('vaultUpgrades').style.display = 'block';\n }\n };\n a.textContent = 'Hide/Show Upgrades';\n div.appendChild(a);\n const b = document.createElement('a');\n b.className = 'option';\n b.onclick = function () {\n if (l('products').style.display === 'grid') l('products').style.display = 'none';\n else l('products').style.display = 'grid';\n };\n b.textContent = 'Hide/Show Buildings';\n div.appendChild(b);\n l('store').insertBefore(div, l('store').childNodes[2]);\n}\n","import { CacheWrinklersFattest } from '../../Cache/VariablesAndData';\nimport PopAllNormalWrinklers from '../HelperFunctions/PopWrinklers';\nimport { CreateTooltip } from '../Tooltips/Tooltip';\n\n/**\n * This function creates two objects at the bottom of the left column that allowing popping of wrinklers\n */\nexport default function CreateWrinklerButtons() {\n const popAllA = document.createElement('a');\n popAllA.id = 'PopAllNormalWrinklerButton';\n popAllA.textContent = 'Pop All Normal';\n popAllA.className = 'option';\n popAllA.onclick = function () {\n PopAllNormalWrinklers();\n };\n popAllA.onmouseout = function () {\n Game.tooltip.shouldHide = 1;\n };\n popAllA.onmouseover = function () {\n Game.tooltip.dynamic = 1;\n Game.tooltip.draw(this, () => CreateTooltip('wb', 'PopAllNormal'), 'this');\n Game.tooltip.wobble();\n };\n l('sectionLeftExtra').children[0].append(popAllA);\n const popFattestA = document.createElement('a');\n popFattestA.id = 'PopFattestWrinklerButton';\n popFattestA.textContent = 'Pop Single Fattest';\n popFattestA.className = 'option';\n popFattestA.onclick = function () {\n if (CacheWrinklersFattest[1] !== null) Game.wrinklers[CacheWrinklersFattest[1]].hp = 0;\n };\n popFattestA.onmouseout = function () {\n Game.tooltip.shouldHide = 1;\n };\n popFattestA.onmouseover = function () {\n Game.tooltip.dynamic = 1;\n Game.tooltip.draw(this, () => CreateTooltip('wb', 'PopFattest'), 'this');\n Game.tooltip.wobble();\n };\n l('sectionLeftExtra').children[0].append(popFattestA);\n}\n","/**\n * This function updates the style of the building and upgrade sections to make these sortable\n */\nexport default function UpdateBuildingUpgradeStyle() {\n l('products').style.display = 'grid';\n l('storeBulk').style.gridRow = '1/1';\n\n l('upgrades').style.display = 'flex';\n l('upgrades').style['flex-wrap'] = 'wrap';\n}\n","import toggleBuildingLock from './toggleBuildingLock';\n\n/**\n * This function adds a lock button to the \"building view\" in the middle section\n */\nexport default function createBuildingLockButtons() {\n Object.keys(l('rows').children).forEach((index) => {\n const productButtons = l('rows').children[index].children[1];\n const button = document.createElement('div');\n button.id = `productLock${Number(index) + 1}`;\n button.className = 'productButton';\n button.innerHTML = 'Lock';\n button.onclick = function () {\n toggleBuildingLock(Number(index) + 1);\n };\n productButtons.appendChild(button);\n });\n}\n","/**\n * This function toggle the locked state of a building\n * @param\t{number}\tindex\tIndex of the row to change\n */\nexport default function toggleBuildingLock(index) {\n if (l(`productLock${index}`).innerHTML === 'Lock') {\n // Add to storing array\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.lockedMinigames.push(\n index.toString(),\n );\n\n // Update styles\n l(`row${index}`).style.pointerEvents = 'none';\n l(`row${index}`).style.opacity = '0.4';\n l(`productLock${index}`).innerHTML = 'Unlock';\n l(`productLock${index}`).style.pointerEvents = 'auto';\n } else {\n // Remove from storing array\n if (\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.lockedMinigames.includes(\n index.toString(),\n )\n ) {\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.lockedMinigames =\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.lockedMinigames.filter(\n (value) => value !== index.toString(),\n );\n }\n\n // Update styles\n l(`productLock${index}`).innerHTML = 'Lock';\n l(`row${index}`).style.pointerEvents = 'auto';\n l(`row${index}`).style.opacity = '1';\n }\n}\n","/** Functions related to replacing tooltips */\n\nimport { CreateTooltip } from '../../Disp/Tooltips/Tooltip';\nimport { LoadMinigames, TooltipBuildBackup, TooltipLumpBackup } from '../VariablesAndData'; // eslint-disable-line no-unused-vars\nimport ReplaceNativeGrimoire from './NativeGrimoire';\nimport ReplaceTooltipGrimoire from './TooltipGrimoire';\n\n/**\n * This function replaces the original .onmouseover functions of buildings\n */\nfunction ReplaceTooltipBuild() {\n Object.keys(Game.Objects).forEach((i) => {\n const me = Game.Objects[i];\n if (l(`product${me.id}`).onmouseover !== null) {\n TooltipBuildBackup[i] = l(`product${me.id}`).onmouseover;\n l(`product${me.id}`).onmouseover = function () {\n Game.tooltip.dynamic = 1;\n Game.tooltip.draw(this, () => CreateTooltip('b', `${i}`), 'store');\n Game.tooltip.wobble();\n };\n }\n });\n}\n\n/**\n * This function replaces the original .onmouseover functions of sugar lumps\n */\nfunction ReplaceTooltipLump() {\n if (Game.canLumps()) {\n TooltipLumpBackup = l('lumps').onmouseover;\n l('lumps').onmouseover = function () {\n Game.tooltip.dynamic = 1;\n Game.tooltip.draw(this, () => CreateTooltip('s', 'Lump'), 'this');\n Game.tooltip.wobble();\n };\n }\n}\n\n/**\n * This function replaces the original .onmouseover functions of all garden plants\n */\nfunction ReplaceTooltipGarden() {\n if (Game.Objects.Farm.minigameLoaded) {\n l('gardenTool-1').onmouseover = function () {\n Game.tooltip.dynamic = 1;\n Game.tooltip.draw(this, () => CreateTooltip('ha', 'HarvestAllButton'), 'this');\n Game.tooltip.wobble();\n };\n Array.from(l('gardenPlot').children).forEach((child) => {\n const coords = child.id.slice(-3);\n // eslint-disable-next-line no-param-reassign\n child.onmouseover = function () {\n Game.tooltip.dynamic = 1;\n Game.tooltip.draw(this, () => CreateTooltip('p', [`${coords[0]}`, `${coords[2]}`]), 'this');\n Game.tooltip.wobble();\n };\n });\n }\n}\n\nfunction ReplaceTooltipPantheon() {\n if (Game.Objects.Temple.minigameLoaded) {\n for (let i = 0; i < 11; i += 1) {\n l(`templeGod${i}`).onmouseover = function () {\n Game.tooltip.dynamic = 1;\n Game.tooltip.draw(this, () => CreateTooltip('pag', i), 'this');\n Game.tooltip.wobble();\n };\n }\n for (let i = 0; i < 3; i += 1) {\n l(`templeSlot${i}`).onmouseover = function () {\n Game.tooltip.dynamic = 1;\n Game.tooltip.draw(\n this,\n () => CreateTooltip('pas', [i, Game.Objects.Temple.minigame.slot[i]]),\n 'this',\n );\n Game.tooltip.wobble();\n };\n }\n }\n}\n\n/**\n * This function call all functions that replace Game-tooltips with Cookie Monster enhanced tooltips\n */\nexport default function ReplaceTooltips() {\n ReplaceTooltipBuild();\n ReplaceTooltipLump();\n\n // Replace Tooltips of Minigames. Nesting it in LoadMinigames makes sure to replace them even if\n // they were not loaded initially\n // eslint-disable-next-line prefer-destructuring\n LoadMinigames = Game.LoadMinigames;\n Game.LoadMinigames = function () {\n LoadMinigames();\n ReplaceTooltipGarden();\n ReplaceTooltipGrimoire();\n ReplaceTooltipPantheon();\n ReplaceNativeGrimoire();\n };\n Game.LoadMinigames();\n}\n","import { TooltipWrinklerArea, TooltipWrinklerBeingShown } from '../../Disp/VariablesAndData'; // eslint-disable-line no-unused-vars\n\n/**\n * This function creates .onmouseover/out events that determine if the mouse is hovering-over a Wrinkler\n * As wrinklers are not appended to the DOM we us a different system than for other tooltips\n */\nexport default function AddWrinklerAreaDetect() {\n l('backgroundLeftCanvas').onmouseover = function () {\n TooltipWrinklerArea = 1;\n };\n l('backgroundLeftCanvas').onmouseout = function () {\n TooltipWrinklerArea = 0;\n Game.tooltip.hide();\n Object.keys(Game.wrinklers).forEach((i) => {\n TooltipWrinklerBeingShown[i] = 0;\n });\n };\n}\n","import CalculateGains from '../Calculations/CalculateGains';\nimport CheckOtherAchiev from '../Calculations/CheckOtherAchiev';\nimport CopyData from '../SimulationData/CopyData';\nimport { SimAchievementsOwned, SimCookiesPs, SimGod1, SimGod2, SimGod3 } from '../VariablesAndData'; // eslint-disable-line no-unused-vars\n\n/**\n * This functions calculates the cps and cost of changing a Dragon Aura\n * It is called by CM.Disp.AddAuraInfo()\n * @param\t{number}\tgod\t\tThe number of the slot to be swapped in\n * @param\t{number slot\tThe slot the god will go to\n * @returns {number} \tCM.Sim.cookiesPs - Game.cookiesPs The bonus cps and the price of the change\n */\nexport default function CalculateChangeGod(god, slot) {\n if (!Game.Objects.Temple.minigameLoaded) return 0;\n CopyData();\n const { minigame } = Game.Objects.Temple;\n const CurrentSlot = minigame.godsById[god].slot;\n if (CurrentSlot === '0') SimGod1 = minigame.slot[slot];\n else if (CurrentSlot === '1') SimGod2 = minigame.slot[slot];\n else if (CurrentSlot === '2') SimGod3 = minigame.slot[slot];\n /* eslint-disable no-unused-vars */\n if (slot === 0) SimGod1 = god;\n else if (slot === 1) SimGod2 = god;\n else if (slot === 2) SimGod3 = god;\n /* eslint-enable no-unused-vars */\n\n const lastAchievementsOwned = SimAchievementsOwned;\n CalculateGains();\n\n CheckOtherAchiev();\n if (lastAchievementsOwned !== SimAchievementsOwned) {\n CalculateGains();\n }\n return SimCookiesPs - Game.cookiesPs;\n}\n","import InitCache from '../Cache/CacheInit';\nimport LoopCache from '../Cache/CacheLoop';\nimport CacheNoGoldSwitchCPS from '../Cache/CPS/NoGoldSwitchCPS';\nimport CacheSellAllForChoEgg from '../Cache/CPS/SellChoEgg';\nimport CacheDragonCost from '../Cache/Dragon/Dragon';\nimport CachePantheonGods from '../Cache/PantheonGods/CacheGods';\nimport { CacheBuildingsPrices, CacheIncome } from '../Cache/PriceAndIncome/PriceAndIncome';\nimport { CacheChain } from '../Cache/Stats/ChainCookies';\nimport CacheAllMissingUpgrades from '../Cache/Stats/MissingUpgrades';\nimport CacheSeasonSpec from '../Cache/Stats/Reindeer';\nimport { CacheGoldenAndWrathCookiesMults, CacheStatsCookies } from '../Cache/Stats/Stats';\nimport AllAmountTillNextAchievement from '../Cache/TillNextAchievement/AllAmountTillNextAchievement';\nimport { CacheDoRemakeBuildPrices, CacheHadBuildAura } from '../Cache/VariablesAndData';\nimport UpdateAscendState from '../Disp/HelperFunctions/UpdateAscendState';\nimport { LastAscendState } from '../Disp/VariablesAndData';\nimport InitData from '../Sim/InitializeData/InitData';\nimport { SimDoSims } from '../Sim/VariablesAndData';\nimport CheckGardenTick from './CheckStates/Garden';\nimport CheckGoldenCookie from './CheckStates/GoldenCookie';\nimport CheckMagicMeter from './CheckStates/Grimoire';\nimport CheckSeasonPopup from './CheckStates/Season';\nimport CheckTickerFortune from './CheckStates/Ticker';\nimport CheckWrinklerCount from './CheckStates/Wrinkler';\nimport { LastModCount } from './VariablesAndData';\n\n/**\n * Main loop of Cookie Monster\n * CM.init registers it to the \"logic\" hook provided by the modding api\n */\nexport default function CMLoopHook() {\n if (LastAscendState !== Game.OnAscend) {\n LastAscendState = Game.OnAscend;\n UpdateAscendState();\n }\n if (!Game.OnAscend && Game.AscendTimer === 0) {\n // Check if any other mods have been loaded\n if (LastModCount !== Object.keys(Game.mods).length) {\n InitData();\n InitCache();\n LastModCount = Object.keys(Game.mods).length;\n }\n\n // CM.Sim.DoSims is set whenever CPS has changed\n if (SimDoSims) {\n AllAmountTillNextAchievement(true);\n CacheIncome();\n\n CacheNoGoldSwitchCPS(); // Needed first\n CacheGoldenAndWrathCookiesMults();\n CacheStatsCookies();\n CacheAllMissingUpgrades();\n CacheChain();\n CacheDragonCost();\n CachePantheonGods();\n\n CacheSeasonSpec();\n CacheSellAllForChoEgg();\n\n SimDoSims = 0;\n }\n\n // Check for aura change to recalculate buildings prices\n const hasBuildAura = Game.auraMult('Fierce Hoarder') > 0;\n if (!CacheHadBuildAura && hasBuildAura) {\n CacheHadBuildAura = true;\n CacheDoRemakeBuildPrices = 1;\n } else if (CacheHadBuildAura && !hasBuildAura) {\n CacheHadBuildAura = false;\n CacheDoRemakeBuildPrices = 1;\n }\n\n if (CacheDoRemakeBuildPrices) {\n CacheBuildingsPrices();\n CacheDoRemakeBuildPrices = 0;\n }\n\n LoopCache();\n\n // Check all changing minigames and game-states\n CheckTickerFortune();\n CheckSeasonPopup();\n CheckGardenTick();\n CheckMagicMeter();\n CheckWrinklerCount();\n }\n // To remove Timers when ascending\n CheckGoldenCookie();\n}\n","import { ToggleTimerBar } from '../../Config/SpecificToggles';\nimport ToggleBotBar from '../../Config/Toggles/ToggleBotBar';\n\nimport UpdateBackground from './UpdateBackground';\n\n/**\n * This function disables and shows the bars created by CookieMonster when the game is \"ascending\"\n * It is called by CM.Disp.Draw()\n */\nexport default function UpdateAscendState() {\n if (Game.OnAscend) {\n l('game').style.bottom = '0px';\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.BotBar === 1)\n l('CMBotBar').style.display = 'none';\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.TimerBar === 1)\n l('CMTimerBar').style.display = 'none';\n } else {\n ToggleBotBar();\n ToggleTimerBar();\n }\n UpdateBackground();\n}\n","import CalcNoGoldSwitchCPS from '../../Sim/Calculations/NoGoldenSwitchCalc';\nimport FillCMDCache from '../FillCMDCache';\nimport { CacheNoGoldSwitchCookiesPS } from '../VariablesAndData';\n\n/**\n * This function calculates CPS without the Golden Switch as it might be needed in other functions\n * If so it CM.Sim.Win()'s them and the caller function will know to recall CM.Sim.CalculateGains()\n * It is called at the end of any functions that simulates certain behaviour\n */\nexport default function CacheNoGoldSwitchCPS() {\n if (Game.Has('Golden switch [off]')) {\n CacheNoGoldSwitchCookiesPS = CalcNoGoldSwitchCPS();\n } else CacheNoGoldSwitchCookiesPS = Game.cookiesPs;\n\n FillCMDCache({ CacheNoGoldSwitchCookiesPS });\n}\n","import CopyData from '../SimulationData/CopyData';\nimport { SimCookiesPs, SimUpgrades } from '../VariablesAndData';\nimport CalculateGains from './CalculateGains';\n\n/**\n * This function calculates CPS without the Golden Switch\n * It is called by CM.Cache.NoGoldSwitchCPS()\n */\nexport default function CalcNoGoldSwitchCPS() {\n CopyData();\n SimUpgrades['Golden switch [off]'].bought = 0;\n CalculateGains();\n return SimCookiesPs;\n}\n","import CalculateChangeGod from '../../Sim/SimulationEvents/GodChange';\nimport FillCMDCache from '../FillCMDCache';\nimport { CacheGods } from '../VariablesAndData';\n\n/**\n * This functions caches the cps effect of each God in slot 1, 2 or 3\n */\nexport default function CachePantheonGods() {\n for (let god = 0; god < 11; god += 1) {\n for (let slot = 0; slot < 3; slot += 1) {\n CacheGods[god][slot] = CalculateChangeGod(god, slot);\n }\n }\n\n FillCMDCache({ CacheGods });\n}\n","import SellBuildingsForChoEgg from '../../Sim/SimulationEvents/SellBuildingForChoEgg';\nimport FillCMDCache from '../FillCMDCache';\nimport { CacheSellForChoEgg } from '../VariablesAndData';\n\n/**\n * This functions caches the reward for selling the Chocolate egg\n * It is called by CM.Main.Loop()\n * @global\t{number}\tCM.Cache.SellForChoEgg\tTotal cookies to be gained from selling Chocolate egg\n */\nexport default function CacheSellAllForChoEgg() {\n let sellTotal = 0;\n // Compute cookies earned by selling stock market goods\n if (Game.Objects.Bank.minigameLoaded) {\n const marketGoods = Game.Objects.Bank.minigame.goods;\n let goodsVal = 0;\n Object.keys(marketGoods).forEach((i) => {\n const marketGood = marketGoods[i];\n goodsVal += marketGood.stock * marketGood.val;\n });\n sellTotal += goodsVal * Game.cookiesPsRawHighest;\n }\n // Compute cookies earned by selling all buildings with optimal auras (ES + RB)\n sellTotal += SellBuildingsForChoEgg();\n CacheSellForChoEgg = sellTotal;\n\n FillCMDCache({ CacheSellForChoEgg });\n}\n","import CopyData from '../SimulationData/CopyData';\nimport { SimBuildingsOwned, SimDragonAura, SimDragonAura2, SimObjects } from '../VariablesAndData'; // eslint-disable-line no-unused-vars\nimport BuildingSell from './SellBuilding';\n\n/**\n * This function calculates the maximum cookies obtained from selling buildings just before purchasing the chocolate egg\n * It is called by CM.Cache.CacheSellForChoEgg()\n * @returns\t{number}\tsellTotal\tThe maximum cookies to be earned\n */\nexport default function SellBuildingsForChoEgg() {\n let sellTotal = 0;\n\n CopyData();\n\n // Change auras to Earth Shatterer + Reality bending to optimize money made by selling\n let buildingsToSacrifice = 2;\n if (SimDragonAura === 5 || SimDragonAura === 18) {\n buildingsToSacrifice -= 1;\n }\n if (SimDragonAura2 === 5 || SimDragonAura2 === 18) {\n buildingsToSacrifice -= 1;\n }\n SimDragonAura = 5;\n SimDragonAura2 = 18;\n\n // Sacrifice highest buildings for the aura switch\n for (let i = 0; i < buildingsToSacrifice; ++i) {\n let highestBuilding = 'Cursor';\n Object.keys(SimObjects).forEach((j) => {\n if (SimObjects[j].amount > 0) {\n highestBuilding = j;\n }\n });\n SimObjects[highestBuilding].amount -= 1;\n SimBuildingsOwned -= 1;\n }\n\n // Get money made by selling all remaining buildings\n Object.keys(SimObjects).forEach((i) => {\n const me = SimObjects[i];\n sellTotal += BuildingSell(\n Game.Objects[me.name],\n Game.Objects[i].basePrice,\n me.amount,\n Game.Objects[i].free,\n me.amount,\n );\n });\n\n return sellTotal;\n}\n","import FormatTime from '../Disp/BeautifyAndFormatting/FormatTime';\nimport GetCPS from '../Disp/HelperFunctions/GetCPS';\nimport CacheAvgCPS from './CPS/CPS';\nimport CacheCurrWrinklerCPS from './CPS/CurrWrinklerCPS';\nimport CachePP from './PP/PP';\nimport CacheHeavenlyChipsPS from './Stats/HeavenlyChips';\nimport AllAmountTillNextAchievement from './TillNextAchievement/AllAmountTillNextAchievement';\nimport { CacheTimeTillNextPrestige } from './VariablesAndData'; // eslint-disable-line no-unused-vars\nimport CacheWrinklers from './Wrinklers/Wrinklers';\n\n/**\n * This functions caches variables that are needed every loop\n * @global\t{string}\tCM.Cache.TimeTillNextPrestige\tTime requried till next prestige level\n */\nexport default function LoopCache() {\n // Update Wrinkler Bank\n CacheWrinklers();\n\n CachePP();\n AllAmountTillNextAchievement(false);\n CacheCurrWrinklerCPS();\n CacheAvgCPS();\n CacheHeavenlyChipsPS();\n\n const cookiesToNext =\n Game.HowManyCookiesReset(\n Math.floor(Game.HowMuchPrestige(Game.cookiesReset + Game.cookiesEarned)) + 1,\n ) -\n (Game.cookiesEarned + Game.cookiesReset);\n CacheTimeTillNextPrestige = FormatTime(cookiesToNext / GetCPS());\n}\n","import { SimObjects } from '../../Sim/VariablesAndData';\nimport FillCMDCache from '../FillCMDCache';\nimport { CacheCurrWrinklerCount, CacheCurrWrinklerCPSMult } from '../VariablesAndData';\n\n/**\n * This functions caches the current Wrinkler CPS multiplier\n * @global\t{number}\tCM.Cache.CurrWrinklerCount\t\tCurrent number of wrinklers\n * @global\t{number}\tCM.Cache.CurrWrinklerCPSMult\tCurrent multiplier of CPS because of wrinklers (excluding their negative sucking effect)\n */\nexport default function CacheCurrWrinklerCPS() {\n CacheCurrWrinklerCPSMult = 0;\n let count = 0;\n Object.keys(Game.wrinklers).forEach((i) => {\n if (Game.wrinklers[i].phase === 2) count += 1;\n });\n let godMult = 1;\n if (SimObjects.Temple.minigameLoaded) {\n const godLvl = Game.hasGod('scorn');\n if (godLvl === 1) godMult *= 1.15;\n else if (godLvl === 2) godMult *= 1.1;\n else if (godLvl === 3) godMult *= 1.05;\n }\n CacheCurrWrinklerCount = count;\n CacheCurrWrinklerCPSMult =\n count *\n (count * 0.05 * 1.1) *\n (Game.Has('Sacrilegious corruption') * 0.05 + 1) *\n (Game.Has('Wrinklerspawn') * 0.05 + 1) *\n godMult;\n\n FillCMDCache({ CacheCurrWrinklerCount, CacheCurrWrinklerCPSMult });\n}\n","import { notificationsFunctions as nF } from '@cookiemonsterteam/cookiemonsterframework/src/index';\nimport { LastTickerFortuneState } from '../VariablesAndData';\n\n/**\n * This function checks if there is a fortune cookie on the ticker\n * It is called by CM.Main.Loop\n */\nexport default function CheckTickerFortune() {\n if (LastTickerFortuneState !== (Game.TickerEffect && Game.TickerEffect.type === 'fortune')) {\n LastTickerFortuneState = Game.TickerEffect && Game.TickerEffect.type === 'fortune';\n if (LastTickerFortuneState) {\n nF.createFlash('cookieMonsterMod', 3, 'FortuneFlash', false);\n nF.playCMSound(\n 'cookieMonsterMod',\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.FortuneSoundURL,\n 'FortuneSound',\n 'FortuneVolume',\n false,\n );\n nF.createNotification(\n 'cookieMonsterMod',\n 'FortuneNotification',\n 'Fortune Cookie found',\n 'A Fortune Cookie has appeared on the Ticker.',\n );\n }\n }\n}\n","import { notificationsFunctions as nF } from '@cookiemonsterteam/cookiemonsterframework/src/index';\nimport { CacheSeasonPopShimmer } from '../../Cache/VariablesAndData'; // eslint-disable-line no-unused-vars\nimport { LastSeasonPopupState } from '../VariablesAndData';\n\n/**\n * This function checks if there is reindeer that has spawned\n * It is called by CM.Main.Loop\n */\nexport default function CheckSeasonPopup() {\n if (LastSeasonPopupState !== Game.shimmerTypes.reindeer.spawned) {\n LastSeasonPopupState = Game.shimmerTypes.reindeer.spawned;\n Object.keys(Game.shimmers).forEach((i) => {\n if (Game.shimmers[i].spawnLead && Game.shimmers[i].type === 'reindeer') {\n CacheSeasonPopShimmer = Game.shimmers[i];\n }\n });\n nF.createFlash('cookieMonsterMod', 3, 'SeaFlash', false);\n nF.playCMSound(\n 'cookieMonsterMod',\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.SeaSoundURL,\n 'SeaSound',\n 'SeaVolume',\n false,\n );\n nF.createNotification(\n 'cookieMonsterMod',\n 'SeaNotification',\n 'Reindeer sighted!',\n 'A Reindeer has spawned. Click it now!',\n );\n }\n}\n","import { notificationsFunctions as nF } from '@cookiemonsterteam/cookiemonsterframework/src/index';\nimport { LastGardenNextStep } from '../VariablesAndData';\n\n/**\n * This function checks if a garden tick has happened\n */\nexport default function CheckGardenTick() {\n if (\n Game.Objects.Farm.minigameLoaded &&\n LastGardenNextStep !== Game.Objects.Farm.minigame.nextStep\n ) {\n if (LastGardenNextStep !== 0 && LastGardenNextStep < Date.now()) {\n nF.createFlash('cookieMonsterMod', 3, 'GardFlash', false);\n nF.playCMSound(\n 'cookieMonsterMod',\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.GardSoundURL,\n 'GardSound',\n 'GardVolume',\n false,\n );\n }\n LastGardenNextStep = Game.Objects.Farm.minigame.nextStep;\n }\n}\n","import { notificationsFunctions as nF } from '@cookiemonsterteam/cookiemonsterframework/src/index';\nimport { LastMagicBarFull } from '../VariablesAndData';\n\n/**\n * This function checks if the magic meter is full\n * It is called by CM.Main.Loop\n */\nexport default function CheckMagicMeter() {\n if (\n Game.Objects['Wizard tower'].minigameLoaded &&\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.GrimoireBar === 1\n ) {\n const { minigame } = Game.Objects['Wizard tower'];\n if (minigame.magic < minigame.magicM) LastMagicBarFull = false;\n else if (!LastMagicBarFull) {\n LastMagicBarFull = true;\n nF.createFlash('cookieMonsterMod', 3, 'MagicFlash', false);\n nF.playCMSound(\n 'cookieMonsterMod',\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.MagicSoundURL,\n 'MagicSound',\n 'MagicVolume',\n false,\n );\n nF.createNotification(\n 'cookieMonsterMod',\n 'MagicNotification',\n 'Magic Meter full',\n 'Your Magic Meter is full. Cast a spell!',\n );\n }\n }\n}\n","import { notificationsFunctions as nF } from '@cookiemonsterteam/cookiemonsterframework/src/index';\nimport { LastWrinklerCount } from '../VariablesAndData';\n\n/**\n * This function checks if any new Wrinklers have popped up\n * It is called by CM.Main.Loop\n */\nexport default function CheckWrinklerCount() {\n if (Game.elderWrath > 0) {\n let CurrentWrinklers = 0;\n Object.keys(Game.wrinklers).forEach((i) => {\n if (Game.wrinklers[i].phase === 2) CurrentWrinklers += 1;\n });\n if (CurrentWrinklers > LastWrinklerCount) {\n LastWrinklerCount = CurrentWrinklers;\n if (\n CurrentWrinklers === Game.getWrinklersMax() &&\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.WrinklerMaxFlash\n ) {\n nF.createFlash('cookieMonsterMod', 3, 'WrinklerMaxFlash', false);\n } else {\n nF.createFlash('cookieMonsterMod', 3, 'WrinklerFlash', false);\n }\n if (\n CurrentWrinklers === Game.getWrinklersMax() &&\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.WrinklerMaxSound\n ) {\n nF.playCMSound(\n 'cookieMonsterMod',\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.WrinklerMaxSoundURL,\n 'WrinklerMaxSound',\n 'WrinklerMaxVolume',\n false,\n );\n } else {\n nF.playCMSound(\n 'cookieMonsterMod',\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.WrinklerSoundURL,\n 'WrinklerSound',\n 'WrinklerVolume',\n false,\n );\n }\n if (\n CurrentWrinklers === Game.getWrinklersMax() &&\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.WrinklerMaxNotification\n ) {\n nF.createNotification(\n 'cookieMonsterMod',\n 'WrinklerMaxNotification',\n 'Maximum Wrinklers Reached',\n 'You have reached your maximum ammount of wrinklers',\n );\n } else {\n nF.createNotification(\n 'cookieMonsterMod',\n 'WrinklerNotification',\n 'A Wrinkler appeared',\n 'A new wrinkler has appeared',\n );\n }\n } else {\n LastWrinklerCount = CurrentWrinklers;\n }\n }\n}\n","import { notificationsFunctions as nF } from '@cookiemonsterteam/cookiemonsterframework/src/index';\nimport { CacheSpawnedGoldenShimmer, CacheGoldenShimmersByID } from '../../Cache/VariablesAndData'; // eslint-disable-line no-unused-vars\nimport CreateGCTimer from '../../Disp/GoldenCookieTimers/GoldenCookieTimers';\nimport { UpdateFavicon } from '../../Disp/TabTitle/FavIcon';\nimport { GCTimers } from '../../Disp/VariablesAndData';\nimport {\n CurrSpawnedGoldenCookieState,\n LastGoldenCookieState,\n LastSpawnedGoldenCookieState,\n} from '../VariablesAndData';\n\n/**\n * Auxilirary function that finds all currently spawned shimmers.\n * CM.Cache.spawnedGoldenShimmer stores the non-user spawned cookie to later determine data for the favicon and tab-title\n * It is called by CM.CM.Main.CheckGoldenCookie\n */\nfunction FindShimmer() {\n CurrSpawnedGoldenCookieState = 0;\n CacheGoldenShimmersByID = {};\n Object.keys(Game.shimmers).forEach((i) => {\n CacheGoldenShimmersByID[Game.shimmers[i].id] = Game.shimmers[i];\n if (Game.shimmers[i].spawnLead && Game.shimmers[i].type === 'golden') {\n CacheSpawnedGoldenShimmer = Game.shimmers[i];\n CurrSpawnedGoldenCookieState += 1;\n }\n });\n}\n\n/**\n * This function checks for changes in the amount of Golden Cookies\n * It is called by CM.Main.Loop\n */\nexport default function CheckGoldenCookie() {\n FindShimmer();\n Object.keys(GCTimers).forEach((i) => {\n if (typeof CacheGoldenShimmersByID[i] === 'undefined') {\n GCTimers[i].parentNode.removeChild(GCTimers[i]);\n delete GCTimers[i];\n }\n });\n if (LastGoldenCookieState !== Game.shimmerTypes.golden.n) {\n LastGoldenCookieState = Game.shimmerTypes.golden.n;\n if (LastGoldenCookieState) {\n if (LastSpawnedGoldenCookieState < CurrSpawnedGoldenCookieState) {\n nF.createFlash('cookieMonsterMod', 3, 'GCFlash', false);\n nF.playCMSound(\n 'cookieMonsterMod',\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.GCSoundURL,\n 'GCSound',\n 'GCVolume',\n false,\n );\n nF.createNotification(\n 'cookieMonsterMod',\n 'GCNotification',\n 'Golden Cookie Spawned',\n 'A Golden Cookie has spawned. Click it now!',\n );\n }\n\n Object.keys(Game.shimmers).forEach((i) => {\n if (typeof GCTimers[Game.shimmers[i].id] === 'undefined') {\n CreateGCTimer(Game.shimmers[i]);\n }\n });\n }\n UpdateFavicon();\n LastSpawnedGoldenCookieState = CurrSpawnedGoldenCookieState;\n if (CurrSpawnedGoldenCookieState === 0) CacheSpawnedGoldenShimmer = 0;\n } else if (\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.GCTimer === 1 &&\n LastGoldenCookieState\n ) {\n Object.keys(GCTimers).forEach((i) => {\n GCTimers[i].style.opacity = CacheGoldenShimmersByID[i].l.style.opacity;\n GCTimers[i].style.transform = CacheGoldenShimmersByID[i].l.style.transform;\n GCTimers[i].textContent = Math.ceil(CacheGoldenShimmersByID[i].life / Game.fps);\n });\n }\n}\n","/** Section: Functions related to the Golden Cookie Timers */\n\nimport { GCTimers } from '../VariablesAndData';\n\n/**\n * This function creates a new Golden Cookie Timer and appends it CM.Disp.GCTimers based on the id of the cookie\n * @param\t{object}\tcookie\tA Golden Cookie object\n */\nexport default function CreateGCTimer(cookie) {\n const GCTimer = document.createElement('div');\n GCTimer.id = `GCTimer${cookie.id}`;\n GCTimer.style.width = '96px';\n GCTimer.style.height = '96px';\n GCTimer.style.position = 'absolute';\n GCTimer.style.zIndex = '10000000001';\n GCTimer.style.textAlign = 'center';\n GCTimer.style.lineHeight = '96px';\n GCTimer.style.fontFamily = '\"Kavoon\", Georgia, serif';\n GCTimer.style.fontSize = '35px';\n GCTimer.style.cursor = 'pointer';\n GCTimer.style.display = 'block';\n GCTimer.style.pointerEvents = 'none';\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.GCTimer === 0)\n GCTimer.style.display = 'none';\n GCTimer.style.left = cookie.l.style.left;\n GCTimer.style.top = cookie.l.style.top;\n GCTimer.onclick = function () {\n cookie.pop();\n };\n GCTimer.onmouseover = function () {\n cookie.l.style.filter = 'brightness(125%) drop-shadow(0px 0px 3px rgba(255,255,255,1))'; // eslint-disable-line no-param-reassign\n cookie.l.style.webkitFilter = 'brightness(125%) drop-shadow(0px 0px 3px rgba(255,255,255,1))'; // eslint-disable-line no-param-reassign\n };\n GCTimer.onmouseout = function () {\n cookie.l.style.filter = ''; // eslint-disable-line no-param-reassign\n cookie.l.style.webkitFilter = ''; // eslint-disable-line no-param-reassign\n };\n\n GCTimers[cookie.id] = GCTimer;\n l('shimmers').appendChild(GCTimer);\n}\n","/** This includes all headers of Cookie Monster and their relevant data */\nconst headers = {\n Favourite: 1,\n Calculation: 1,\n Notation: 1,\n Colours: 1,\n BarsDisplay: 1,\n Tooltip: 1,\n Statistics: 1,\n Notification: 1,\n NotificationGeneral: 1,\n NotificationGC: 1,\n NotificationFC: 1,\n NotificationSea: 1,\n NotificationGard: 1,\n NotificationMagi: 1,\n NotificationWrink: 1,\n NotificationWrinkMax: 1,\n Miscellaneous: 1,\n Lucky: 1,\n Chain: 1,\n Spells: 1,\n Garden: 1,\n Prestige: 1,\n Wrink: 1,\n Sea: 1,\n Achievs: 1,\n Misc: 1,\n infoMenu: 1,\n optionsMenu: 1,\n};\n\nexport default headers;\n","import { saveAndLoadingFunctions } from '@cookiemonsterteam/cookiemonsterframework/src/index';\n\nimport headers from '../Data/headers';\nimport { VersionMajor, VersionMinor } from '../Data/Moddata';\nimport settings from '../Data/settings';\nimport UpdateColours from '../Disp/HelperFunctions/UpdateColours';\nimport CMLoopHook from '../Main/LoopHook';\nimport InitData from '../Sim/InitializeData/InitData';\n\n/**\n * This creates a load function to the CM object. Per Game code/comments:\n * \"do stuff with the string data you saved previously\"\n */\nexport default function load(str) {\n InitData();\n\n // Load saveData\n saveAndLoadingFunctions.loadMod('cookieMonsterMod', str, settings, headers, CMLoopHook);\n if (\n typeof Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.lockedMinigames ===\n 'undefined'\n ) {\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.lockedMinigames = [];\n }\n\n // Update display with colours and locking of minigames\n UpdateColours();\n for (\n let index = 0;\n index < Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.lockedMinigames.length;\n index++\n ) {\n const buildingIndex =\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.lockedMinigames[index];\n l(`row${buildingIndex}`).style.pointerEvents = 'none';\n l(`row${buildingIndex}`).style.opacity = '0.4';\n l(`productLock${buildingIndex}`).innerHTML = 'Unlock';\n l(`productLock${buildingIndex}`).style.pointerEvents = 'auto';\n }\n\n // Notify of update\n if (\n typeof Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.version !== 'undefined' &&\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.version !==\n `${VersionMajor}.${VersionMinor}`\n ) {\n if (Game.prefs.popups)\n Game.Popup(\n 'A new version of Cookie Monster has been loaded, check out the release notes in the info tab!',\n );\n else\n Game.Notify(\n 'A new version of Cookie Monster has been loaded, check out the release notes in the info tab!',\n '',\n '',\n 0,\n 1,\n );\n }\n}\n","import init from './InitSaveLoad/init';\nimport load from './InitSaveLoad/load';\nimport save from './InitSaveLoad/save';\n\nconst CM = {\n init,\n load,\n save,\n};\n\nif (typeof Steam !== 'undefined') {\n // Need to add a delay for steam\n setTimeout(function () {\n Game.registerMod('CookieMonster', CM);\n\n // Game.registerMod also calls CM.load() which calls the loop hook\n // Thus sounds normally play at start up as Season and Garden states are checked\n window.cookieMonsterFrameworkData.isInitializing = false;\n }, 2000);\n} else {\n Game.registerMod('CookieMonster', CM);\n window.cookieMonsterFrameworkData.isInitializing = false;\n}\n","import { initFunctions } from '@cookiemonsterteam/cookiemonsterframework';\nimport { VersionMajor, VersionMinor } from '../Data/Moddata';\nimport CMDrawHook from '../Disp/DrawHook';\nimport CMClickHook from '../Main/ClickHook';\nimport InitializeCookieMonster from '../Main/Initialization';\nimport CMLoopHook from '../Main/LoopHook';\nimport load from './load';\n\n/**\n * This creates a init function for the CM object. Per Game code/comments:\n * \"this function is called as soon as the mod is registered\n * declare hooks here\"\n * It starts the further initialization of CookieMonster and registers hooks\n */\nexport default function init() {\n let proceed = true;\n\n // Load Cookie Monster Mod Framework and register mod\n initFunctions.initModFramework();\n window.cookieMonsterFrameworkData.isInitializing = true;\n initFunctions.registerMod('cookieMonsterMod');\n\n if (Game.version !== Number(VersionMajor)) {\n // eslint-disable-next-line no-restricted-globals, no-alert\n proceed = confirm(\n `Cookie Monster version ${VersionMajor}.${VersionMinor} is meant for Game version ${VersionMajor}. Loading a different version may cause errors. Do you still want to load Cookie Monster?`,\n );\n }\n if (proceed) {\n InitializeCookieMonster();\n Game.registerHook('click', CMClickHook);\n Game.registerHook('draw', CMDrawHook);\n Game.registerHook('logic', CMLoopHook);\n\n // Load default settings if no previous saveData is found\n if (typeof Game.modSaveData.cookieMonsterMod === 'undefined') {\n load('{}');\n }\n }\n}\n","/** Data related directly to Cookie Monster */\n\nexport const VersionMajor = '2.048';\nexport const VersionMinor = '10';\n\n/** Information about Cookie Monster to be displayed in the info section */\nexport const ModDescription = `
Cookie Monster\n offers a wide range of tools and statistics to enhance your game experience.\n It is not a cheat interface – although it does offer helpers for golden cookies and such, everything can be toggled off at will to only leave how much information you want.\n Progess on new updates and all previous release notes can be found on the GitHub page linked above!\n Please also report any bugs you may find over there!\n `;\n\n/** Latest releasenotes of Cookie Monster to be displayed in the info section */\nexport const LatestReleaseNotes = `This update adds support for some parts of cookie clicker 2.048\n- added support for Dragon Aura 'Supreme Intellect' in the pantheon calculations\n- added support for new tiers of Shimmering veil\n- added support for unshackled upgrades\n- updated some simulator logic to more cloesly match updated cookie clicker logic\n- Bugfix: conjure backed goods tooltip used cached no gold switch raw cps instead of live cps\n- Bugfix: negative calculations due to glucosimium upgrades, kittens, unshackled, and achievements`;\n","import { VersionMajor, VersionMinor } from '../Data/Moddata';\n\n/**\n * This creates a save function to the CM object. Per Game code/comments:\n * \"use this to store persistent data associated with your mod\n * return 'a string to be saved';\"\n */\nexport default function save() {\n const saveObject = Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod;\n saveObject.version = `${VersionMajor}.${VersionMinor}`;\n return JSON.stringify(saveObject);\n}\n"],"names":["global","factory","module","exports","document","win","Error","window","this","BoxShadow","funcName","elm","jsc","jscolor","initialized","instances","readyQueue","register","addEventListener","pub","init","installBySelector","selector","rootNode","node","elms","querySelectorAll","matchClass","RegExp","lookupClass","i","length","dataOpts","m","undefined","type","toLowerCase","isColorAttrSupported","getDataAttr","className","match","targetElm","optsStr","console","warn","docsRef","opts","trim","parseOptionsStr","e","str","JSON","parse","eParse","looseJSON","Function","eEval","getInstances","inst","targetElement","push","createEl","tagName","el","createElement","setData","nodeOrSelector","sel","querySelector","isNode","val","Node","nodeType","nodeName","removeChildren","firstChild","removeChild","isTextInput","isButton","n","indexOf","isButtonEmpty","value","textContent","isPassiveEventSupported","supported","Object","defineProperty","get","removeEventListener","setAttribute","dataProp","obj","arguments","data","hasOwnProperty","prop","map","removeData","getData","setDefault","name","attrName","getAttribute","setDataAttr","_attachedGroupEvents","attachGroupEvent","groupName","evnt","func","detachGroupEvents","evt","preventDefault","returnValue","captureTarget","target","setCapture","_capturedTarget","releaseTarget","releaseCapture","triggerEvent","eventName","bubbles","cancelable","ev","Event","createEvent","initEvent","dispatchEvent","triggerInputEvent","eventKey","keys","code","keyCode","strList","replace","split","hasClass","classList","contains","addClass","classNames","add","removeClass","repl","remove","getCompStyle","getComputedStyle","currentStyle","setStyle","styles","important","reversible","priority","origStyle","setVal","style","setProperty","hexColor","r","g","b","Math","round","toString","substr","toUpperCase","hexaColor","a","rgbColor","rgbaColor","linearGradient","stdName","prefixes","helper","tryFunc","tryVal","background","getFuncName","Array","prototype","join","call","setBorderRadius","setBoxShadow","getElementPos","relativeToViewport","x","y","rect","getBoundingClientRect","left","top","viewPos","getViewPos","getElementSize","offsetWidth","offsetHeight","getAbsPointerPos","changedTouches","clientX","clientY","getRelPointerPos","targetRect","srcElement","doc","documentElement","pageXOffset","scrollLeft","clientLeft","pageYOffset","scrollTop","clientTop","getViewSize","innerWidth","clientWidth","innerHeight","clientHeight","RGB_HSV","min","v","max","h","HSV_RGB","s","u","floor","parseColorString","ret","rgba","format","parseInt","charAt","mR","mG","mB","mA","par","re","parseFloat","parsePaletteValue","mixed","vals","isArray","colors","color","containsTranparentColor","isAlphaFormat","scaleCanvasForHighDPR","canvas","dpr","devicePixelRatio","width","height","getContext","scale","genColorPreviewCanvas","separatorPos","specWidth","scaleForHighDPR","sepW","previewSeparator","sqSize","chessboardSize","sqColor1","chessboardColor1","sqColor2","chessboardColor2","cWidth","cHeight","ctx","fillStyle","fillRect","start","clearRect","lineWidth","beginPath","strokeStyle","moveTo","lineTo","stroke","genColorPreviewGradient","position","params","apply","redrawPosition","picker","owner","tp","vp","thisObj","fixed","c","ts","vs","pd","getPickerDims","ps","borderW","borderH","l","smartPosition","pp","positionValue","contractShadow","_drawPosition","vShadow","shadowBlur","wrap","boxS","shadow","shadowColor","w","controlBorderWidth","sliderSpace","getControlPadding","sliderSize","getSliderChannel","hasAlphaChannel","pal","getPaletteDims","padding","closeButton","buttonHeight","pW","pH","contentW","contentH","paddedW","paddedH","borderWidth","palette","cols","rows","cellW","cellH","sampleCount","_palette","paletteCols","ceil","paletteSpacing","paletteHeight","pointerBorderWidth","pointerThickness","getPadYChannel","mode","triggerCallback","callback","error","triggerGlobal","eventNames","trigger","_pointerMoveEvent","mouse","touch","_pointerEndEvent","_pointerOrigin","onDocumentKeyUp","tryHide","onWindowResize","onWindowScroll","onParentScroll","onDocumentMouseDown","showOnClick","disabled","show","onControlPointerStart","onPickerTouchStart","controlName","pointerType","registerDragEvents","offset","onDocumentPointerMove","onDocumentPointerEnd","parent","frameElement","ofs","abs","rel","channels","fromHSVA","setPad","setSld","setASld","onPaletteSampleClick","currentTarget","_setFormat","getFormat","paletteSetsAlpha","_paletteHasTransparency","fromRGBA","hideOnPaletteClick","hide","ofsX","ofsY","pointerAbs","xVal","yVal","fmt","createPadCanvas","draw","hGrad","createLinearGradient","addColorStop","vGrad","createSliderGradient","color1","color2","grad","createASliderGradient","hShadow","blur","spread","inset","flags","leaveValue","leaveAlpha","leavePreview","enumOpts","previewPosition","alphaChannel","deprecatedOpts","THIS","setOption","option","oldOpt","newOpt","setter","getOption","getter","drawPicker","_processParentElementsInDOM","box","boxB","pad","padB","padM","padCanvas","cross","crossBY","crossBX","crossLY","crossLX","sld","sldB","sldM","sldGrad","sldPtrS","sldPtrIB","sldPtrMB","sldPtrOB","asld","asldB","asldM","asldGrad","asldPtrS","asldPtrIB","asldPtrMB","asldPtrOB","btn","btnT","appendChild","passive","insetColors","outsetColor","p","displaySlider","displayAlphaSlider","pickerDims","crossOuterSize","crossSize","controlPadding","borderRadius","PI","clear","zIndex","border","borderColor","backgroundColor","opacity","controlBorderColor","cursor","instance","control","pointerBorderColor","pointerColor","overflow","display","sliderInnerSpace","innerHTML","chessboard","si","sampleColor","sampleCssColor","sc","sw","backgroundImage","toDataURL","backgroundRepeat","backgroundPosition","bottom","maxWidth","whiteSpace","buttonColor","font","textAlign","onmousedown","lineHeight","createTextNode","closeText","redrawPad","redrawSld","redrawASld","activeClassName","container","body","parentNode","yChannel","rgb1","rgb2","rgb","toHEXString","sldChannel","isPickerOwner","alpha","random","onChange","onInput","valueElement","alphaElement","previewElement","previewSize","previewPadding","required","hash","uppercase","forceStyle","hideOnLeave","minS","maxS","minV","maxV","minA","maxA","redraw","exposeColor","success","opt","channel","res","evs","callbackProp","isNaN","hsv","fromHSV","fromRGB","fromString","setPreviewElementBg","setValueElementValue","randomize","minH","maxH","toHEXAString","toRGBString","toRGBAString","toGrayscale","toCanvas","toBackground","isLight","_currentFormat","processValueInput","processAlphaInput","colorStr","alphaVal","setAlphaElementValue","backgrounds","image","size","repeat","origin","preview","bg","sty","right","_parentElementsProcessed","compStyle","set__palette","options","presetsArr","preset","slice","pres","presets","nonProperties","test","valueElementOrigEvents","oninput","oldVal","initValue","initAlpha","install","shift","ready","triggerNow","installByClassName","JSColor","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","__esModule","d","definition","key","o","enumerable","Setting","constructor","defaultValue","group","cookieMonsterPrompt","content","Game","promptWrapL","promptL","forEach","id","onclick","PlaySound","children","promptAnchorL","darkenL","focus","promptOn","UpdatePrompt","createFlash","modName","configName","forced","mods","cookieMonsterFramework","saveData","settings","cookieMonsterFrameworkData","isInitializing","setTimeout","fps","saveFramework","modSaveString","stringify","cookieClickerSaveString","b64_to_utf8","unescape","localStorage","getItem","pattern","modSave","newSaveString","setItem","escape","utf8_to_b64","toggleHeader","headerName","headers","playCMSound","url","sndConfig","volConfig","sound","Audio","GeneralSound","volume","play","toggleConfigVolume","addMenu","_","observer","disconnect","onMenu","menu","insertBefore","frameworkInfoDiv","titleDiv","buttonSpan","fontSize","verticalAlign","infoMenu","UpdateMenu","descriptionDiv","createFrameworkInfoMenuSection","listeners","addInfoMenuSection","observe","getElementById","attributes","childList","subtree","drawLoop","optionsMenu","loadMod","settingsData","headersData","logicLoop","saveDataObject","modSaveData","settingsObject","headersObject","favouriteSettings","createSaveDataObject","load","MutationObserver","WhiteScreen","pointerEvents","createFlashScreen","registerHook","save","initFunctions","registerMod","menuFunctions","createInfoListing","listingHTML","listingDiv","createOptionsListing","updateColoursFunc","refreshScaleFunc","div","FavouriteSettings","favourites","FavStar","includes","innerText","filter","ele","toggleFavouriteSetting","onmouseover","tooltip","onmouseout","createFavouriteStar","toggle","label","toggleConfig","desc","title","float","percent","slider","step","onchange","span","input","readOnly","inputPrompt","outerHTML","ClosePrompt","innerSpan","displayName","event","saveObject","altKey","ctrlKey","shiftKey","toggleConfigKeycode","createOptionsSubHeader","text","modDisplayName","menuName","modSectionDiv","notificationsFunctions","createNotification","message","visibilityState","Notification","badge","saveAndLoadingFunctions","settingClasses","super","ToggleWrinklerButtons","cookieMonsterMod","WrinklerButtons","elderWrath","CacheAverageCookiesFromClicks","CookiesDiff","WrinkDiff","WrinkFattestDiff","ChoEggDiff","ClicksDiff","HeavenlyChipsDiff","CacheLastCPSCheck","CacheLastCookies","CacheLastWrinkCookies","CacheLastWrinkFattestCookies","CacheLastClicks","CacheAverageGainBank","CacheAverageGainWrink","CacheAverageGainWrinkFattest","CacheAverageGainChoEgg","CacheAverageCPS","CacheLastHeavenlyCheck","CacheLastHeavenlyChips","CacheDoRemakeBuildPrices","CacheHadBuildAura","SimBuildingsOwned","SimUpgradesOwned","SimPledges","SimAchievementsOwned","SimHeavenlyPower","SimPrestige","SimDragonAura","SimDragonAura2","SimGod1","SimGod2","SimGod3","SimDoSims","SimEffs","SimCookiesPs","SimCookiesPsRaw","CacheDragonAura","CacheDragonAura2","CacheLastDragonLevel","CacheCostDragonUpgrade","CacheLucky","CacheLuckyReward","CacheLuckyWrathReward","CacheLuckyFrenzy","CacheLuckyRewardFrenzy","CacheLuckyWrathRewardFrenzy","CacheConjure","CacheConjureReward","CacheEdifice","CacheEdificeBuilding","CacheNoGoldSwitchCookiesPS","CacheDragonsFortuneMultAdjustment","CacheGoldenCookiesMult","CacheWrathCookiesMult","CacheHCPerSecond","CacheCentEgg","CacheSeaSpec","CacheLastChoEgg","CacheObjects1","CacheObjects10","CacheObjects100","CacheObjectsNextAchievement","CacheWrinklersTotal","CacheWrinklersNormal","CacheWrinklersFattest","CacheCurrWrinklerCPSMult","CacheCurrWrinklerCount","CacheUpgrades","CacheAverageClicks","CacheMissingUpgrades","CacheMissingUpgradesPrestige","CacheMissingUpgradesCookies","CacheChainRequired","CacheChainRequiredNext","CacheChainMaxReward","CacheChainWrathRequired","CacheChainWrathRequiredNext","CacheChainWrathMaxReward","CacheChainFrenzyRequired","CacheChainFrenzyRequiredNext","CacheChainFrenzyMaxReward","CacheChainFrenzyWrathRequired","CacheChainFrenzyWrathRequiredNext","CacheChainFrenzyWrathMaxReward","CacheRealCookiesEarned","CacheAvgCPSWithChoEgg","CacheSpawnedGoldenShimmer","CacheSeasonPopShimmer","CacheTimeTillNextPrestige","CacheMinPP","CacheMinPPBulk","CachePPArray","CacheGoldenShimmersByID","CacheSellForChoEgg","CacheGods","SimObjects","SimUpgrades","SimAchievements","SimAuraMult","what","dragonAuras","dragonLevel","dragonAurasBN","SimGetSellMultiplier","giveBack","SimEff","def","SimHas","it","ascensionMode","pool","tier","bought","SimHasAura","SimHasGod","hasGod","Temple","minigame","Objects","god","gods","SimModifyBuildingPrice","building","price","ModifiedPrice","hasBuff","fortune","minigameLoaded","godLvl","BuildingSell","build","basePrice","free","amount","noSim","noSimRes","toChange","startingAmount","moni","buyBulk","priceIncrease","modifyBuildingPrice","getSellMultiplier","metric","shortScale","shortScaleAbbreviated","LastModCount","TooltipLumpBackup","BackupGrimoireLaunch","BackupGrimoireLaunchMod","BackupGrimoireDraw","HasReplaceNativeGrimoireLaunch","HasReplaceNativeGrimoireDraw","LoadMinigames","LastSeasonPopupState","LastTickerFortuneState","LastGardenNextStep","LastGoldenCookieState","LastSpawnedGoldenCookieState","LastMagicBarFull","CurrSpawnedGoldenCookieState","LastWrinklerCount","DispCSS","TooltipBuildBackup","TooltipGrimoireBackup","TooltipUpgradeBackup","BackupFunctions","CycliusDateAtBeginLoop","Date","now","CenturyDateAtBeginLoop","num","floats","decimals","ScaleDecimals","Infinity","Scale","Beautify","Number","isFinite","answer","ScaleCutoff","ScaleSeparator","toLocaleString","toExponential","exponential","AmountOfTenPowerThree","toFixed","log","ColourTextPre","ColourBackPre","ColourBlue","ColourGreen","ColourYellow","ColourOrange","ColourRed","ColourPurple","ColourGray","ColourPink","ColourBrown","ColoursOrdering","TooltipText","SimpleTooltipElements","CMLastAscendState","TooltipWrinklerArea","TooltipWrinkler","TooltipWrinklerBeingShown","CMSayTime","LastTargetBotBar","LastTargetBuildings","LastTargetTooltipBuilding","CookieTimes","ClickTimes","BuffColours","Frenzy","Clot","Dragonflight","TooltipPrice","TooltipBonusIncome","TooltipType","TooltipName","TooltipBonusMouse","LastAscendState","LastNumberOfTimers","GCTimers","Title","UpdateBuildings","arr","buyMode","removeProperty","BuildColour","colour","SortBuildings","k","sort","amountUntilNext","AmountNeeded","priceUntilNext","gridRow","UpdateUpgradeSectionsHeight","values","getElementsByClassName","section","UpgradesNeverCollapse","minHeight","UpdateUpgrades","UpBarColour","blue","green","yellow","orange","red","purple","gray","UpgradesInStore","me","addedColour","j","childNodes","SortUpgrades","nameChecker","arr2","upgrade","findIndex","order","FormatTime","time","longFormat","formattedTime","TimeFormat","GetTimeColour","GetCPS","CPSMode","CalcWrink","cookiesPs","cpsSucked","wrinklers","GetWrinkConfigBank","CreateTimer","bars","timerBar","margin","marginRight","colourBar","borderTopRightRadius","borderBottomRightRadius","timer","marginLeft","CreateBotBarBuildingColumn","buildingName","bonus","header","substring","lastChild","paddingLeft","UpdateBotBar","BotBar","count","PPString","PPDisplayTime","timeColour","bulkPrice","cookies","UpdateBackground","Background","LeftBackground","DrawBackground","UpdateBotTimerBarPosition","TimerBar","TimerBarPos","ToggleTimerBar","CacheDragonAuras","dragonAura","dragonAura2","InitAchievement","achievementName","Achievements","you","SimGetTieredCpsMult","mult","tieredUpgrades","Tiers","special","tierMult","unshackleUpgrade","synergies","syn","buildingTie1","buildingTie2","grandma","Grandma","misfortune","vanilla","InitialBuildingData","cps","magicCpS","ComputeCps","GrandmaSynergies","UpgradesByPool","kitten","Portal","baseCps","baseCPS","InitUpgrade","upgradeName","Upgrades","power","level","pow","CopyData","UpgradesOwned","pledges","AchievementsOwned","heavenlyPower","prestige","totalCookies","slot","won","TooltipCreateHeader","fontWeight","TooltipCreateCalculationSection","income","marginBottom","click","production","ColourOfPP","PPSecondsLowerLimit","PPOnlyConsiderBuyable","GetCPSBuffMult","buffs","multCpS","SimWin","CalculateGains","effs","myEffs","ii","heavenlyMult","SimGetHeavenlyMultiplier","heralds","cookieUpgrades","buildMult","sin","santaLevel","milkProgress","milkMult","catMult","storedCps","eggMult","day","startDate","lumps","rawCookiesPs","CpsAchievements","threshold","shimmerTypes","golden","auraMult","bakeryName","goldenSwitchMult","upgrades","goldenCookieUpgrades","veilMult","runModHookOnValue","Fortunes","HalloCookies","ChristCookies","ValCookies","PlantDrops","SimHasAchiev","CheckOtherAchiev","grandmas","buildingsOwned","mathematician","base10","minAmount","ObjectsById","Cursor","hasAllHalloCook","hasAllChristCook","list","fortunes","BuyBuildingsBonusIncome","tieredAchievs","achievUnlock","lastAchievementsOwned","CalculateGrimoireRefillTime","currentMagic","maxMagic","targetMagic","magic","ToggleToolWarnPos","ToolWarnPos","UpdateTooltips","tooltipBox","paddingBottom","TooltipBuildUpgrade","increase","productionAchievs","HasAchiev","achiev","nextProductionAchiev","ObjectsTillNext","PPOfAmount","PPFrag","Building","getPrice","bonusMouse","previousSibling","chocolate","Upgrade","TooltipLump","lumpType","lumpColour","lumpCurrentType","SugarLump","spellCost","getSpellCost","spellsById","TooltipGrim","magicM","recover","recoverColour","conjure","reward","seperator","loss","Grimoire","Farm","TooltipPlots","plot","mature","plantsById","plantName","GardenPlots","totalGain","mortal","tile","immortal","matureBase","HarvestAll","WrinklerReward","WrinklerButton","TooltipPantheon","GodID","cps1","cps2","cps3","PantheonGods","TooltipWarn","create","boxId","labelTextFront","labelTextBack","deficitId","transition","labelDiv","labelSpan","deficitDiv","deficitSpan","ToolWarnUser","bonusIncomeUsed","ToolWarnBon","limitLucky","bonusNoFren","ToolWarnLucky","ToolWarnLuckyFrenzy","limitLuckyFrenzy","ToolWarnConjure","limitConjure","ToolWarnConjureFrenzy","limitConjureFrenzy","ToolWarnEdifice","Warnings","CMDrawHook","prefs","autosave","drawT","Stats","sayTime","T","maxWidthTwoBar","maxWidthOneBar","numberOfTimers","AutosaveTimerBar","timeTillNextAutosave","OnAscend","TimerBarOverlay","spawned","Has","minTime","maxTime","chanceToSpawn","season","reindeer","BuffTimerBars","classColour","UpdateTimerBar","TooltipWrink","showingTooltip","phase","selected","placeholder","wrinkler","minWidth","CheckWrinklerTooltip","sucked","toSuck","UpdateWrinklerTooltip","UpStats","CMClickHook","addLatest","computedMouseCps","CMAvgQueue","maxLength","queue","newValue","calcAverage","timePeriod","calcSum","reduce","FillCMDCache","caches","CookieMonsterData","Cache","exportName","CacheAvgCPS","currDate","choEggTotal","cookiesEarned","timeDiff","bankDiffAvg","wrinkDiffAvg","wrinkFattestDiffAvg","choEggDiffAvg","clicksDiffAvg","cookieClicks","cpsLength","AvgCPSHist","choEgg","HasUnlocked","AvgClicksHist","BuildingGetPrice","partialPrice","CacheColour","PPRigidelMode","PPExcludeTop","CachePP","indexOfMin","CacheBuildingsPP","Objects1","Objects10","Objects100","entries","BuyUpgradesBonusIncome","unlocked","CountsAsUpgradeOwned","diffMouseCPS","multClick","out","MouseCps","CacheBuildingIncome","result","CacheBuildingsPrices","CacheIncome","bonusIncome","CacheUpgradeIncome","MaxChainCookieReward","digit","maxPayout","totalFromChain","nextMoni","nextRequired","chain","LN10","CacheChain","cpsBuffMult","CacheHeavenlyChipsPS","chipsOwned","HowMuchPrestige","cookiesReset","ascendNowToGet","heavenlyChipsDiffAvg","CacheAllMissingUpgrades","classes","noFrame","crates","icon","iconFunction","getDynamicTooltip","crateMissing","CacheSeasonSpec","CacheStatsCookies","CacheGoldenAndWrathCookiesMults","goldenMult","wrathMult","eff","AllAmountTillNextAchievement","forceRecalc","TotalNeeded","tillNext","AchievementsAtStart","index","lastIndexWithChange","IndividualAmountTillNextAchievement","CacheWrinklers","InitCache","PopAllNormalWrinklers","hp","CreateTooltip","TooltipAmor","buildPrice","amortizeAmount","storedTotalCps","globalCpsMult","crateTooltip","lumpTooltip","spellTooltip","tileTooltip","toolTooltip","godTooltip","slotTooltip","area","UpdateFavicon","Favicon","wrath","href","InitData","ReplaceTooltipGrimoire","dynamic","wobble","ReplaceNativeGrimoireDraw","GrimoireBar","magicBarTextL","magicBarL","ReplaceNativeGrimoire","launch","ReplaceNativeGrimoireLaunch","CacheDragonCost","dragonLevels","buy","objectMatch","replaceAll","cost","ConfigGroups","Favourite","Calculation","Notation","Colours","BarsDisplay","Tooltip","Statistics","Miscellaneous","ConfigGroupsNotification","NotificationGeneral","NotificationGC","NotificationFC","NotificationSea","NotificationGard","NotificationMagi","NotificationWrink","NotificationWrinkMax","ToggleOnOff","checkNotificationPromise","requestPermission","then","RefreshScale","BeautifyAll","RefreshStore","RebuildUpgrades","ToggleBotBar","DetailedTime","UpgradeBarFixedPos","DragonAuraInfo","GCTimer","HideSectionsButtons","TooltipAscendButton","MissingUpgrades","MissingAchievements","HeavenlyChipsTarget","ShowMissedGC","GCNotification","GCFlash","ColourGCFlash","GCSound","GCVolume","GCSoundURL","FortuneNotification","FortuneFlash","ColourFortuneFlash","FortuneSound","FortuneVolume","FortuneSoundURL","SeaNotification","SeaFlash","ColourSeaFlash","SeaSound","SeaVolume","SeaSoundURL","GardFlash","ColourGardFlash","GardSound","GardVolume","GardSoundURL","MagicNotification","MagicFlash","ColourMagicFlash","MagicSound","MagicVolume","MagicSoundURL","WrinklerNotification","WrinklerFlash","ColourWrinklerFlash","WrinklerSound","WrinklerVolume","WrinklerSoundURL","WrinklerMaxNotification","WrinklerMaxFlash","ColourWrinklerMaxFlash","WrinklerMaxSound","WrinklerMaxVolume","WrinklerMaxSoundURL","BulkBuyBlock","UpdateColours","createMenuOptions","menuDiv","subGroup","subGroupObject","StatsHeader","config","fontFamily","ToggleHeader","StatsListing","listingName","StatsMissDispListing","current","StatsMissDisp","theMissDisp","frag","createDocumentFragment","missing","AddMenuStats","stats","Lucky","goldCookTooltip","luckyColour","luckyTime","luckyReqFrag","luckyReqSpan","luckyReqSmall","luckyColourFrenzy","luckyTimeFrenzy","luckyReqFrenFrag","luckyReqFrenSpan","luckyReqFrenSmall","luckySplit","luckyRewardMaxSpan","luckyRewardFrenzyMaxSpan","luckyCurBase","luckyCurSpan","Chain","chainColour","chainTime","chainReqFrag","chainReqSpan","chainReqSmall","chainWrathColour","chainWrathTime","chainWrathReqFrag","chainWrathReqSpan","chainWrathReqSmall","chainColourFrenzy","chainTimeFrenzy","chainReqFrenFrag","chainReqFrenSpan","chainReqFrenSmall","chainWrathColourFrenzy","chainWrathTimeFrenzy","chainWrathReqFrenFrag","chainWrathReqFrenSpan","chainWrathReqFrenSmall","chainCurMax","chainCur","chainCurWrath","Spells","conjureColour","conjureTime","conjureReqFrag","conjureReqSpan","conjureReqSmall","conjureFrenzyColour","conjureFrenzyCur","conjureFrenzyTime","conjureFrenzyReqFrag","conjureFrenzyReqSpan","conjureFrenzyReqSmall","Garden","bakeberryColour","bakeberryFrag","chocorootColour","chocorootFrag","queenbeetColour","queenbeetFrag","duketaterColour","duketaterFrag","missingPlantDrops","Prestige","possiblePresMax","neededCook","HowManyCookiesReset","cookiesNextFrag","cookiesNextSmall","heavenlyChips","HCTarget","CookiesTillTarget","resetBonus","newHeavenlyChips","curCPS","ResetCPS","ResetBonus","resetFrag","resetSmall","currentPrestige","willHave","willGet","delta7","next7Reset","next7Total","frag7","delta777","next777Reset","next777Total","frag777","delta777777","next777777Reset","next777777Total","frag777777","Wrink","popAllFrag","popAllA","popFattestFrag","popFattestA","specDisp","missingHalloweenCookies","missingChristmasCookies","missingValentineCookies","missingNormalEggs","eggDrops","missingRareEggs","rareEggDrops","centEgg","Sea","failRateHalloween","dropRateMult","obtainedCookiesChance","failRateChristmas","dropRateEgg","StartingFailRate","failRateEgg","succesRateEgg","obtainedEggs","obtainedRareEggs","pNormal1","pRare1","pRedrop","Achievs","Misc","missedGoldenClicks","menuSection","prestigeUpgradesMissing","titlefrag","PrestigeUpgrades","normalUpgradesMissing","tech","nextSibling","cookieUpgradesMissing","cookie","achievs","parentElement","achievsCrate","AchievementsById","mouseDown","setOnCrate","tags","neuromancy","sesame","descFunc","tagsStr","CrateTooltipLockedAchievements","AddMissingAchievements","FixMouseY","timerBarHeight","mouseY","ReplaceNative","drawMod","from","update","updateMod","warnOffset","tta","tt","UpdateTooltipLocation","UpdateWrinklers","UpdateSpecial","ClickCookie","ClickProduct","DescribeDragonAura","aura","bonusCPS","priceOfChange","highestBuilding","CalculateChangeAura","timeToRecover","bonusCPSPercentage","div2","AddAuraInfo","ToggleSpecialMenu","on","shouldHide","AddDragonLevelUpTooltip","AddMenu","detail","Logic","titleGC","titleFC","titleSP","addFC","addSP","life","lastIndexOf","spawn","UpdateTitle","cookiesToNext","ReplaceAscendTooltip","InitializeCookieMonster","head","borderTop","textShadow","table","tbody","firstCol","td","CreateBotBar","CMTimerBarAutosave","CMTimerBarGC","CMTimerBarRen","TimerBarBuffTimers","CreateTimerBar","UpgradeBar","legend","legendLine","CreateUpgradeBarLegend","upgradeNumber","CreateUpgradeBar","CreateSectionHideButtons","getElementsByTagName","CreateFavicon","CreateSimpleTooltip","append","CreateWrinklerButtons","productButtons","button","lockedMinigames","toggleBuildingLock","canLumps","child","coords","ReplaceTooltipPantheon","popups","Popup","Notify","Win","CalculateChangeGod","CurrentSlot","godsById","CMLoopHook","AscendTimer","CachePantheonGods","sellTotal","Bank","marketGoods","goods","goodsVal","marketGood","stock","cookiesPsRawHighest","buildingsToSacrifice","SellBuildingsForChoEgg","CacheSellAllForChoEgg","hasBuildAura","godMult","CacheCurrWrinklerCPS","LoopCache","TickerEffect","shimmers","spawnLead","nextStep","CheckMagicMeter","CurrentWrinklers","getWrinklersMax","CheckWrinklerCount","pop","webkitFilter","CreateGCTimer","transform","buildingIndex","version","CM","proceed","confirm","Steam"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"file":"CookieMonsterDev.js","mappings":"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A,GAEFsU,YAAa,IAAI3f,EACf,EACA,OACA,UACA,CAAC,+CAAgD,+CACjD,2EACA,GAEFqb,YAAa,IAAIrb,EACf,EACA,OACA,UACA,CAAC,kCAAmC,qCACpC,kCACA,GACA,KACEob,QAGJ4B,YAAa,IAAIhd,EACf,EACA,OACA,UACA,CAAC,mCAAoC,mCACrC,6CACA,GAEF+hB,aAAc,IAAI/hB,EAChB,EACA,OACA,UACA,CAAC,uBAAwB,uBACzB,oEACA,GAEFwc,YAAa,IAAIxc,EACf,EACA,OACA,UACA,CAAC,yBAA0B,yBAC3B,4DACA,GAEF0d,aAAc,IAAI1d,EAChB,EACA,OACA,UACA,CAAC,2BAA4B,2BAC7B,yDACA,GAEFwe,gBAAiB,IAAIxe,EACnB,EACA,OACA,UACA,CAAC,uBAAwB,uBACzB,iDACA,GAEFitB,oBAAqB,IAAIjtB,EACvB,EACA,OACA,UACA,CAAC,qCAAsC,qCACvC,+CACA,GAIF2gB,MAAO,IAAI3gB,EACT,EACA,OACA,aACA,CAAC,iBAAkB,iBACnB,oCACA,GAEFktB,gBAAiB,IAAIltB,EACnB,EACA,OACA,aACA,CAAC,uBAAwB,uBACzB,6CACA,GAEFmtB,oBAAqB,IAAIntB,EACvB,EACA,OACA,aACA,CAAC,2BAA4B,kCAC7B,yDACA,GAEF0iB,QAAS,IAAI1iB,EACX,EACA,OACA,aACA,CAAC,mCAAoC,+BACrC,wCACA,GAEFotB,oBAAqB,IAAIptB,EACvB,EACA,WACA,aACA,0BACA,8GACA,EACAqL,EAAAA,GAEFgiB,aAAc,IAAIrtB,EAChB,EACA,OACA,aACA,CAAC,gBAAiB,gBAClB,4FACA,GAIFuO,MAAO,IAAIvO,EACT,EACA,OACA,sBACA,CAAC,YAAa,WAAY,8BAC1B,8LACA,GAEFxG,aAAc,IAAIwG,EAChB,EACA,OACA,sBACA,CAAC,mCAAoC,mCACrC,kLACA,GAEFstB,eAAgB,IAAIttB,EAClB,EACA,OACA,iBACA,CAAC,mBAAoB,mBACrB,mDACA,GACA,KACE,GACExJ,KAAKiB,KAAKC,uBAAuBC,SAASwI,iBAAiBvI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","sources":["webpack:///./node_modules/@eastdesire/jscolor/jscolor.js","webpack:///webpack/bootstrap","webpack:///webpack/runtime/compat get default export","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/options/settingClasses/baseSetting.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/notifications/prompt.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/notifications/flash.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/savingAndLoading/saveFramework.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/menu/toggles/toggleHeader.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/notifications/sound.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/options/toggleConfigVolume.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/frameworkDataObject/menuSections/addMenu.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/frameworkDataObject/menuSections/info/addInfoMenuSection.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/frameworkDataObject/menuSections/info/createFrameworkInfoMenuSection.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/frameworkDataObject/data/modInfo.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/frameworkDataObject/draw/drawLoop.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/frameworkDataObject/data/headers.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/savingAndLoading/loadMod.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/savingAndLoading/createSaveDataObject.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/frameworkDataObject/logic/logicLoop.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/frameworkDataObject/data/settings.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/frameworkDataObject/load.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/frameworkDataObject/cookieMonsterFramework.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/frameworkDataObject/init.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/frameworkDataObject/init/createFlashScreen.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/frameworkDataObject/save.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/index.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/init/initModFramework.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/init/registerMod.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/menu/listings/createInfoListing.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/menu/listings/createOptionListing.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/menu/listings/createOptionsFavouriteStar.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/menu/toggles/toggleFavourite.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/options/toggleConfig.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/options/toggleConfigKeycode.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/menu/listings/createOptionsSubHeader.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/menu/createModMenuSection.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/notifications/notification.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/options/settingClasses/settingColours.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/options/settingClasses/settingInputNumber.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/options/settingClasses/settingStandard.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/options/settingClasses/settingStandardWithFunc.js","webpack:///./node_modules/@cookiemonsterteam/cookiemonsterframework/src/options/settingClasses/settingVolume.js","webpack:///./src/Config/Toggles/ToggleWrinklerButtons.js","webpack:///./src/Cache/VariablesAndData.js","webpack:///./src/Sim/VariablesAndData.js","webpack:///./src/Sim/ReplacedGameFunctions/SimAuraMult.js","webpack:///./src/Sim/ReplacedGameFunctions/SimGetSellMultiplier.js","webpack:///./src/Sim/ReplacedGameFunctions/SimEff.js","webpack:///./src/Sim/ReplacedGameFunctions/SimHas.js","webpack:///./src/Sim/ReplacedGameFunctions/SimHasAura.js","webpack:///./src/Sim/ReplacedGameFunctions/SimHasGod.js","webpack:///./src/Sim/ReplacedGameFunctions/SimModifyBuidlingPrice.js","webpack:///./src/Sim/SimulationEvents/SellBuilding.js","webpack:///./src/Data/Scales.js","webpack:///./src/Main/VariablesAndData.js","webpack:///./src/Disp/VariablesAndData.js","webpack:///./src/Disp/BeautifyAndFormatting/Beautify.js","webpack:///./src/Disp/BuildingsUpgrades/Buildings.js","webpack:///./src/Disp/BuildingsUpgrades/UpdateUpgradeSectionsHeight.js","webpack:///./src/Disp/BuildingsUpgrades/Upgrades.js","webpack:///./src/Disp/BeautifyAndFormatting/FormatTime.js","webpack:///./src/Disp/BeautifyAndFormatting/GetTimeColour.js","webpack:///./src/Disp/HelperFunctions/GetCPS.js","webpack:///./src/Disp/HelperFunctions/GetWrinkConfigBank.js","webpack:///./src/Disp/InfoBars/CreateDOMElements.js","webpack:///./src/Disp/InfoBars/BottomBar.js","webpack:///./src/Disp/HelperFunctions/UpdateBackground.js","webpack:///./src/Config/SpecificToggles.js","webpack:///./src/Cache/Dragon/CacheDragonAuras.js","webpack:///./src/Sim/InitializeData/InitAchievement.js","webpack:///./src/Sim/ReplacedGameFunctions/SimGetTieredCpsMult.js","webpack:///./src/Sim/InitializeData/InitialBuildingData.js","webpack:///./src/Sim/InitializeData/InitUpgrade.js","webpack:///./src/Sim/SimulationData/CopyData.js","webpack:///./src/Disp/Tooltips/CreateTooltip.js","webpack:///./src/Cache/PP/ColourOfPP.js","webpack:///./src/Cache/CPS/GetCPSBuffMult.js","webpack:///./src/Sim/SimulationData/SimWin.js","webpack:///./src/Sim/Calculations/CalculateGains.js","webpack:///./src/Sim/ReplacedGameFunctions/SimGetHeavenlyMultiplier.js","webpack:///./src/Data/Gamedata.js","webpack:///./src/Sim/ReplacedGameFunctions/SimHasAchiev.js","webpack:///./src/Sim/Calculations/CheckOtherAchiev.js","webpack:///./src/Sim/SimulationEvents/BuyBuildingBonusIncome.js","webpack:///./src/Disp/HelperFunctions/CalculateGrimoireRefillTime.js","webpack:///./src/Config/Toggles/ToggleToolWarnPos.js","webpack:///./src/Disp/Tooltips/UpdateTooltips.js","webpack:///./src/Disp/Tooltips/TypesOfTooltips/Building.js","webpack:///./src/Disp/Tooltips/TypesOfTooltips/Upgrade.js","webpack:///./src/Disp/Tooltips/TypesOfTooltips/SugarLump.js","webpack:///./src/Disp/HelperFunctions/GetLumpColour.js","webpack:///./src/Disp/Tooltips/TypesOfTooltips/Grimoire.js","webpack:///./src/Disp/Tooltips/TypesOfTooltips/GardenPlots.js","webpack:///./src/Disp/Tooltips/TypesOfTooltips/HarvestAll.js","webpack:///./src/Disp/Tooltips/TypesOfTooltips/WrinklerButton.js","webpack:///./src/Disp/Tooltips/TypesOfTooltips/PantheonGods.js","webpack:///./src/Disp/Tooltips/TypesOfTooltips/Warnings.js","webpack:///./src/Disp/DrawHook.js","webpack:///./src/Disp/InfoBars/TimerBar.js","webpack:///./src/Disp/Tooltips/WrinklerTooltips.js","webpack:///./src/Disp/MenuSections/Refreshmenu.js","webpack:///./src/Main/ClickHook.js","webpack:///./src/Cache/CPS/AverageQueue.js","webpack:///./src/Cache/FillCMDCache.js","webpack:///./src/Cache/CPS/CPS.js","webpack:///./src/Sim/SimulationEvents/BuyBuilding.js","webpack:///./src/Cache/PP/Building.js","webpack:///./src/Cache/PP/PP.js","webpack:///./src/Cache/PP/Upgrade.js","webpack:///./src/Sim/SimulationEvents/BuyUpgrades.js","webpack:///./src/Cache/PriceAndIncome/PriceAndIncome.js","webpack:///./src/Cache/Stats/ChainCookies.js","webpack:///./src/Cache/Stats/HeavenlyChips.js","webpack:///./src/Cache/Stats/MissingUpgrades.js","webpack:///./src/Disp/MenuSections/Statistics/CreateMissingUpgrades.js","webpack:///./src/Cache/Stats/Reindeer.js","webpack:///./src/Cache/Stats/Stats.js","webpack:///./src/Cache/TillNextAchievement/AllAmountTillNextAchievement.js","webpack:///./src/Cache/TillNextAchievement/IndividualAmountTillNextAchievement.js","webpack:///./src/Cache/Wrinklers/Wrinklers.js","webpack:///./src/Cache/CacheInit.js","webpack:///./src/Disp/HelperFunctions/PopWrinklers.js","webpack:///./src/Disp/Tooltips/Tooltip.js","webpack:///./src/Disp/TabTitle/FavIcon.js","webpack:///./src/Sim/InitializeData/InitData.js","webpack:///./src/Main/ReplaceGameElements/TooltipGrimoire.js","webpack:///./src/Main/ReplaceGameElements/NativeGrimoire.js","webpack:///./src/Cache/Dragon/Dragon.js","webpack:///./src/Data/Sectionheaders.js","webpack:///./src/Config/CheckNotificationPermissions.js","webpack:///./src/Disp/HelperFunctions/RefreshScale.js","webpack:///./src/Config/Toggles/ToggleBotBar.js","webpack:///./src/Data/settings.js","webpack:///./src/Config/Toggles/ToggleDetailedTime.js","webpack:///./src/Config/Toggles/ToggleUpgradeBarAndColour.js","webpack:///./src/Config/Toggles/ToggleUpgradeBarFixedPos.js","webpack:///./src/Config/Toggles/ToggleGCTimer.js","webpack:///./src/Config/Toggles/ToggleSectionHideButtons.js","webpack:///./src/Disp/HelperFunctions/UpdateColours.js","webpack:///./src/Disp/MenuSections/createMenuOptions.js","webpack:///./src/Disp/MenuSections/Statistics/CreateDOMElements.js","webpack:///./src/Config/ToggleSetting.js","webpack:///./src/Disp/MenuSections/Statistics/AddStatsPage.js","webpack:///./src/Disp/MenuSections/Statistics/CreateStatsSections.js","webpack:///./src/Sim/SimulationEvents/ResetAscension.js","webpack:///./src/Disp/MenuSections/Statistics/CreateMissingAchievements.js","webpack:///./src/Main/ReplaceGameFunctions/FixMouse.js","webpack:///./src/Main/ReplaceGameFunctions/ReplaceNative.js","webpack:///./src/Disp/Tooltips/PositionLocation.js","webpack:///./src/Main/ReplaceGameElements/TooltipUpgrades.js","webpack:///./src/Disp/Dragon/Dragon.js","webpack:///./src/Sim/SimulationEvents/AuraChange.js","webpack:///./src/Disp/MenuSections/AddMenus.js","webpack:///./src/Disp/TabTitle/TabTitle.js","webpack:///./src/Disp/Tooltips/AscendButton.js","webpack:///./src/Main/Initialization.js","webpack:///./src/Disp/Initialization/CssArea.js","webpack:///./src/Disp/BuildingsUpgrades/UpgradeBar.js","webpack:///./src/Disp/Initialization/CreateSectionHideButtons.js","webpack:///./src/Disp/Initialization/CreateWrinklerButton.js","webpack:///./src/Disp/Initialization/UpdateBuildingUpgradeStyle.js","webpack:///./src/Disp/buildingTiles/createBuildingLockButtons.js","webpack:///./src/Disp/buildingTiles/toggleBuildingLock.js","webpack:///./src/Main/ReplaceGameElements/Tooltips.js","webpack:///./src/Main/WrinklerArea/AddDetectArea.js","webpack:///./src/Sim/SimulationEvents/GodChange.js","webpack:///./src/Main/LoopHook.js","webpack:///./src/Disp/HelperFunctions/UpdateAscendState.js","webpack:///./src/Cache/CPS/NoGoldSwitchCPS.js","webpack:///./src/Sim/Calculations/NoGoldenSwitchCalc.js","webpack:///./src/Cache/PantheonGods/CacheGods.js","webpack:///./src/Cache/CPS/SellChoEgg.js","webpack:///./src/Sim/SimulationEvents/SellBuildingForChoEgg.js","webpack:///./src/Cache/CacheLoop.js","webpack:///./src/Cache/CPS/CurrWrinklerCPS.js","webpack:///./src/Main/CheckStates/Ticker.js","webpack:///./src/Main/CheckStates/Season.js","webpack:///./src/Main/CheckStates/Garden.js","webpack:///./src/Main/CheckStates/Grimoire.js","webpack:///./src/Main/CheckStates/Wrinkler.js","webpack:///./src/Main/CheckStates/GoldenCookie.js","webpack:///./src/Disp/GoldenCookieTimers/GoldenCookieTimers.js","webpack:///./src/Data/headers.js","webpack:///./src/InitSaveLoad/load.js","webpack:///./src/CookieMonster.js","webpack:///./src/InitSaveLoad/init.js","webpack:///./src/Data/Moddata.js","webpack:///./src/InitSaveLoad/save.js"],"sourcesContent":["/**\r\n * jscolor - JavaScript Color Picker\r\n *\r\n * @link http://jscolor.com\r\n * @license For open source use: GPLv3\r\n * For commercial use: JSColor Commercial License\r\n * @author Jan Odvarko - East Desire\r\n *\r\n * See usage examples at http://jscolor.com/examples/\r\n */\r\n\r\n\r\n(function (global, factory) {\r\n\r\n\t'use strict';\r\n\r\n\tif (typeof module === 'object' && typeof module.exports === 'object') {\r\n\t\t// Export jscolor as a module\r\n\t\tmodule.exports = global.document ?\r\n\t\t\tfactory (global) :\r\n\t\t\tfunction (win) {\r\n\t\t\t\tif (!win.document) {\r\n\t\t\t\t\tthrow new Error('jscolor needs a window with document');\r\n\t\t\t\t}\r\n\t\t\t\treturn factory(win);\r\n\t\t\t}\r\n\t\treturn;\r\n\t}\r\n\r\n\t// Default use (no module export)\r\n\tfactory(global);\r\n\r\n})(typeof window !== 'undefined' ? window : this, function (window) { // BEGIN factory\r\n\r\n// BEGIN jscolor code\r\n\r\n\r\n'use strict';\r\n\r\n\r\nvar jscolor = (function () { // BEGIN jscolor\r\n\r\nvar jsc = {\r\n\r\n\r\n\tinitialized : false,\r\n\r\n\tinstances : [], // created instances of jscolor\r\n\r\n\treadyQueue : [], // functions waiting to be called after init\r\n\r\n\r\n\tregister : function () {\r\n\t\tif (typeof window !== 'undefined' && window.document) {\r\n\t\t\twindow.document.addEventListener('DOMContentLoaded', jsc.pub.init, false);\r\n\t\t}\r\n\t},\r\n\r\n\r\n\tinstallBySelector : function (selector, rootNode) {\r\n\t\trootNode = rootNode ? jsc.node(rootNode) : window.document;\r\n\t\tif (!rootNode) {\r\n\t\t\tthrow new Error('Missing root node');\r\n\t\t}\r\n\r\n\t\tvar elms = rootNode.querySelectorAll(selector);\r\n\r\n\t\t// for backward compatibility with DEPRECATED installation/configuration using className\r\n\t\tvar matchClass = new RegExp('(^|\\\\s)(' + jsc.pub.lookupClass + ')(\\\\s*(\\\\{[^}]*\\\\})|\\\\s|$)', 'i');\r\n\r\n\t\tfor (var i = 0; i < elms.length; i += 1) {\r\n\r\n\t\t\tif (elms[i].jscolor && elms[i].jscolor instanceof jsc.pub) {\r\n\t\t\t\tcontinue; // jscolor already installed on this element\r\n\t\t\t}\r\n\r\n\t\t\tif (elms[i].type !== undefined && elms[i].type.toLowerCase() == 'color' && jsc.isColorAttrSupported) {\r\n\t\t\t\tcontinue; // skips inputs of type 'color' if supported by the browser\r\n\t\t\t}\r\n\r\n\t\t\tvar dataOpts, m;\r\n\r\n\t\t\tif (\r\n\t\t\t\t(dataOpts = jsc.getDataAttr(elms[i], 'jscolor')) !== null ||\r\n\t\t\t\t(elms[i].className && (m = elms[i].className.match(matchClass))) // installation using className (DEPRECATED)\r\n\t\t\t) {\r\n\t\t\t\tvar targetElm = elms[i];\r\n\r\n\t\t\t\tvar optsStr = '';\r\n\t\t\t\tif (dataOpts !== null) {\r\n\t\t\t\t\toptsStr = dataOpts;\r\n\r\n\t\t\t\t} else if (m) { // installation using className (DEPRECATED)\r\n\t\t\t\t\tconsole.warn('Installation using class name is DEPRECATED. Use data-jscolor=\"\" attribute instead.' + jsc.docsRef);\r\n\t\t\t\t\tif (m[4]) {\r\n\t\t\t\t\t\toptsStr = m[4];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar opts = null;\r\n\t\t\t\tif (optsStr.trim()) {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\topts = jsc.parseOptionsStr(optsStr);\r\n\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\tconsole.warn(e + '\\n' + optsStr);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttry {\r\n\t\t\t\t\tnew jsc.pub(targetElm, opts);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tconsole.warn(e);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\r\n\tparseOptionsStr : function (str) {\r\n\t\tvar opts = null;\r\n\r\n\t\ttry {\r\n\t\t\topts = JSON.parse(str);\r\n\r\n\t\t} catch (eParse) {\r\n\t\t\tif (!jsc.pub.looseJSON) {\r\n\t\t\t\tthrow new Error('Could not parse jscolor options as JSON: ' + eParse);\r\n\t\t\t} else {\r\n\t\t\t\t// loose JSON syntax is enabled -> try to evaluate the options string as JavaScript object\r\n\t\t\t\ttry {\r\n\t\t\t\t\topts = (new Function ('var opts = (' + str + '); return typeof opts === \"object\" ? opts : {};'))();\r\n\t\t\t\t} catch (eEval) {\r\n\t\t\t\t\tthrow new Error('Could not evaluate jscolor options: ' + eEval);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn opts;\r\n\t},\r\n\r\n\r\n\tgetInstances : function () {\r\n\t\tvar inst = [];\r\n\t\tfor (var i = 0; i < jsc.instances.length; i += 1) {\r\n\t\t\t// if the targetElement still exists, the instance is considered \"alive\"\r\n\t\t\tif (jsc.instances[i] && jsc.instances[i].targetElement) {\r\n\t\t\t\tinst.push(jsc.instances[i]);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn inst;\r\n\t},\r\n\r\n\r\n\tcreateEl : function (tagName) {\r\n\t\tvar el = window.document.createElement(tagName);\r\n\t\tjsc.setData(el, 'gui', true);\r\n\t\treturn el;\r\n\t},\r\n\r\n\r\n\tnode : function (nodeOrSelector) {\r\n\t\tif (!nodeOrSelector) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tif (typeof nodeOrSelector === 'string') {\r\n\t\t\t// query selector\r\n\t\t\tvar sel = nodeOrSelector;\r\n\t\t\tvar el = null;\r\n\t\t\ttry {\r\n\t\t\t\tel = window.document.querySelector(sel);\r\n\t\t\t} catch (e) {\r\n\t\t\t\tconsole.warn(e);\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\tif (!el) {\r\n\t\t\t\tconsole.warn('No element matches the selector: %s', sel);\r\n\t\t\t}\r\n\t\t\treturn el;\r\n\t\t}\r\n\r\n\t\tif (jsc.isNode(nodeOrSelector)) {\r\n\t\t\t// DOM node\r\n\t\t\treturn nodeOrSelector;\r\n\t\t}\r\n\r\n\t\tconsole.warn('Invalid node of type %s: %s', typeof nodeOrSelector, nodeOrSelector);\r\n\t\treturn null;\r\n\t},\r\n\r\n\r\n\t// See https://stackoverflow.com/questions/384286/\r\n\tisNode : function (val) {\r\n\t\tif (typeof Node === 'object') {\r\n\t\t\treturn val instanceof Node;\r\n\t\t}\r\n\t\treturn val && typeof val === 'object' && typeof val.nodeType === 'number' && typeof val.nodeName === 'string';\r\n\t},\r\n\r\n\r\n\tnodeName : function (node) {\r\n\t\tif (node && node.nodeName) {\r\n\t\t\treturn node.nodeName.toLowerCase();\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\r\n\r\n\tremoveChildren : function (node) {\r\n\t\twhile (node.firstChild) {\r\n\t\t\tnode.removeChild(node.firstChild);\r\n\t\t}\r\n\t},\r\n\r\n\r\n\tisTextInput : function (el) {\r\n\t\treturn el && jsc.nodeName(el) === 'input' && el.type.toLowerCase() === 'text';\r\n\t},\r\n\r\n\r\n\tisButton : function (el) {\r\n\t\tif (!el) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tvar n = jsc.nodeName(el);\r\n\t\treturn (\r\n\t\t\t(n === 'button') ||\r\n\t\t\t(n === 'input' && ['button', 'submit', 'reset'].indexOf(el.type.toLowerCase()) > -1)\r\n\t\t);\r\n\t},\r\n\r\n\r\n\tisButtonEmpty : function (el) {\r\n\t\tswitch (jsc.nodeName(el)) {\r\n\t\t\tcase 'input': return (!el.value || el.value.trim() === '');\r\n\t\t\tcase 'button': return (el.textContent.trim() === '');\r\n\t\t}\r\n\t\treturn null; // could not determine element's text\r\n\t},\r\n\r\n\r\n\t// See https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\r\n\tisPassiveEventSupported : (function () {\r\n\t\tvar supported = false;\r\n\r\n\t\ttry {\r\n\t\t\tvar opts = Object.defineProperty({}, 'passive', {\r\n\t\t\t\tget: function () { supported = true; }\r\n\t\t\t});\r\n\t\t\twindow.addEventListener('testPassive', null, opts);\r\n\t\t\twindow.removeEventListener('testPassive', null, opts);\r\n\t\t} catch (e) {}\r\n\r\n\t\treturn supported;\r\n\t})(),\r\n\r\n\r\n\tisColorAttrSupported : (function () {\r\n\t\tvar elm = window.document.createElement('input');\r\n\t\tif (elm.setAttribute) {\r\n\t\t\telm.setAttribute('type', 'color');\r\n\t\t\tif (elm.type.toLowerCase() == 'color') {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t})(),\r\n\r\n\r\n\tdataProp : '_data_jscolor',\r\n\r\n\r\n\t// usage:\r\n\t// setData(obj, prop, value)\r\n\t// setData(obj, {prop:value, ...})\r\n\t//\r\n\tsetData : function () {\r\n\t\tvar obj = arguments[0];\r\n\r\n\t\tif (arguments.length === 3) {\r\n\t\t\t// setting a single property\r\n\t\t\tvar data = obj.hasOwnProperty(jsc.dataProp) ? obj[jsc.dataProp] : (obj[jsc.dataProp] = {});\r\n\t\t\tvar prop = arguments[1];\r\n\t\t\tvar value = arguments[2];\r\n\r\n\t\t\tdata[prop] = value;\r\n\t\t\treturn true;\r\n\r\n\t\t} else if (arguments.length === 2 && typeof arguments[1] === 'object') {\r\n\t\t\t// setting multiple properties\r\n\t\t\tvar data = obj.hasOwnProperty(jsc.dataProp) ? obj[jsc.dataProp] : (obj[jsc.dataProp] = {});\r\n\t\t\tvar map = arguments[1];\r\n\r\n\t\t\tfor (var prop in map) {\r\n\t\t\t\tif (map.hasOwnProperty(prop)) {\r\n\t\t\t\t\tdata[prop] = map[prop];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tthrow new Error('Invalid arguments');\r\n\t},\r\n\r\n\r\n\t// usage:\r\n\t// removeData(obj, prop, [prop...])\r\n\t//\r\n\tremoveData : function () {\r\n\t\tvar obj = arguments[0];\r\n\t\tif (!obj.hasOwnProperty(jsc.dataProp)) {\r\n\t\t\treturn true; // data object does not exist\r\n\t\t}\r\n\t\tfor (var i = 1; i < arguments.length; i += 1) {\r\n\t\t\tvar prop = arguments[i];\r\n\t\t\tdelete obj[jsc.dataProp][prop];\r\n\t\t}\r\n\t\treturn true;\r\n\t},\r\n\r\n\r\n\tgetData : function (obj, prop, setDefault) {\r\n\t\tif (!obj.hasOwnProperty(jsc.dataProp)) {\r\n\t\t\t// data object does not exist\r\n\t\t\tif (setDefault !== undefined) {\r\n\t\t\t\tobj[jsc.dataProp] = {}; // create data object\r\n\t\t\t} else {\r\n\t\t\t\treturn undefined; // no value to return\r\n\t\t\t}\r\n\t\t}\r\n\t\tvar data = obj[jsc.dataProp];\r\n\r\n\t\tif (!data.hasOwnProperty(prop) && setDefault !== undefined) {\r\n\t\t\tdata[prop] = setDefault;\r\n\t\t}\r\n\t\treturn data[prop];\r\n\t},\r\n\r\n\r\n\tgetDataAttr : function (el, name) {\r\n\t\tvar attrName = 'data-' + name;\r\n\t\tvar attrValue = el.getAttribute(attrName);\r\n\t\treturn attrValue;\r\n\t},\r\n\r\n\r\n\tsetDataAttr : function (el, name, value) {\r\n\t\tvar attrName = 'data-' + name;\r\n\t\tel.setAttribute(attrName, value);\r\n\t},\r\n\r\n\r\n\t_attachedGroupEvents : {},\r\n\r\n\r\n\tattachGroupEvent : function (groupName, el, evnt, func) {\r\n\t\tif (!jsc._attachedGroupEvents.hasOwnProperty(groupName)) {\r\n\t\t\tjsc._attachedGroupEvents[groupName] = [];\r\n\t\t}\r\n\t\tjsc._attachedGroupEvents[groupName].push([el, evnt, func]);\r\n\t\tel.addEventListener(evnt, func, false);\r\n\t},\r\n\r\n\r\n\tdetachGroupEvents : function (groupName) {\r\n\t\tif (jsc._attachedGroupEvents.hasOwnProperty(groupName)) {\r\n\t\t\tfor (var i = 0; i < jsc._attachedGroupEvents[groupName].length; i += 1) {\r\n\t\t\t\tvar evt = jsc._attachedGroupEvents[groupName][i];\r\n\t\t\t\tevt[0].removeEventListener(evt[1], evt[2], false);\r\n\t\t\t}\r\n\t\t\tdelete jsc._attachedGroupEvents[groupName];\r\n\t\t}\r\n\t},\r\n\r\n\r\n\tpreventDefault : function (e) {\r\n\t\tif (e.preventDefault) { e.preventDefault(); }\r\n\t\te.returnValue = false;\r\n\t},\r\n\r\n\r\n\tcaptureTarget : function (target) {\r\n\t\t// IE\r\n\t\tif (target.setCapture) {\r\n\t\t\tjsc._capturedTarget = target;\r\n\t\t\tjsc._capturedTarget.setCapture();\r\n\t\t}\r\n\t},\r\n\r\n\r\n\treleaseTarget : function () {\r\n\t\t// IE\r\n\t\tif (jsc._capturedTarget) {\r\n\t\t\tjsc._capturedTarget.releaseCapture();\r\n\t\t\tjsc._capturedTarget = null;\r\n\t\t}\r\n\t},\r\n\r\n\r\n\ttriggerEvent : function (el, eventName, bubbles, cancelable) {\r\n\t\tif (!el) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar ev = null;\r\n\r\n\t\tif (typeof Event === 'function') {\r\n\t\t\tev = new Event(eventName, {\r\n\t\t\t\tbubbles: bubbles,\r\n\t\t\t\tcancelable: cancelable\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\t// IE\r\n\t\t\tev = window.document.createEvent('Event');\r\n\t\t\tev.initEvent(eventName, bubbles, cancelable);\r\n\t\t}\r\n\r\n\t\tif (!ev) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t// so that we know that the event was triggered internally\r\n\t\tjsc.setData(ev, 'internal', true);\r\n\r\n\t\tel.dispatchEvent(ev);\r\n\t\treturn true;\r\n\t},\r\n\r\n\r\n\ttriggerInputEvent : function (el, eventName, bubbles, cancelable) {\r\n\t\tif (!el) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (jsc.isTextInput(el)) {\r\n\t\t\tjsc.triggerEvent(el, eventName, bubbles, cancelable);\r\n\t\t}\r\n\t},\r\n\r\n\r\n\teventKey : function (ev) {\r\n\t\tvar keys = {\r\n\t\t\t9: 'Tab',\r\n\t\t\t13: 'Enter',\r\n\t\t\t27: 'Escape',\r\n\t\t};\r\n\t\tif (typeof ev.code === 'string') {\r\n\t\t\treturn ev.code;\r\n\t\t} else if (ev.keyCode !== undefined && keys.hasOwnProperty(ev.keyCode)) {\r\n\t\t\treturn keys[ev.keyCode];\r\n\t\t}\r\n\t\treturn null;\r\n\t},\r\n\r\n\r\n\tstrList : function (str) {\r\n\t\tif (!str) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\t\treturn str.replace(/^\\s+|\\s+$/g, '').split(/\\s+/);\r\n\t},\r\n\r\n\r\n\t// The className parameter (str) can only contain a single class name\r\n\thasClass : function (elm, className) {\r\n\t\tif (!className) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tif (elm.classList !== undefined) {\r\n\t\t\treturn elm.classList.contains(className);\r\n\t\t}\r\n\t\t// polyfill\r\n\t\treturn -1 != (' ' + elm.className.replace(/\\s+/g, ' ') + ' ').indexOf(' ' + className + ' ');\r\n\t},\r\n\r\n\r\n\t// The className parameter (str) can contain multiple class names separated by whitespace\r\n\taddClass : function (elm, className) {\r\n\t\tvar classNames = jsc.strList(className);\r\n\r\n\t\tif (elm.classList !== undefined) {\r\n\t\t\tfor (var i = 0; i < classNames.length; i += 1) {\r\n\t\t\t\telm.classList.add(classNames[i]);\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t// polyfill\r\n\t\tfor (var i = 0; i < classNames.length; i += 1) {\r\n\t\t\tif (!jsc.hasClass(elm, classNames[i])) {\r\n\t\t\t\telm.className += (elm.className ? ' ' : '') + classNames[i];\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\r\n\t// The className parameter (str) can contain multiple class names separated by whitespace\r\n\tremoveClass : function (elm, className) {\r\n\t\tvar classNames = jsc.strList(className);\r\n\r\n\t\tif (elm.classList !== undefined) {\r\n\t\t\tfor (var i = 0; i < classNames.length; i += 1) {\r\n\t\t\t\telm.classList.remove(classNames[i]);\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t// polyfill\r\n\t\tfor (var i = 0; i < classNames.length; i += 1) {\r\n\t\t\tvar repl = new RegExp(\r\n\t\t\t\t'^\\\\s*' + classNames[i] + '\\\\s*|' +\r\n\t\t\t\t'\\\\s*' + classNames[i] + '\\\\s*$|' +\r\n\t\t\t\t'\\\\s+' + classNames[i] + '(\\\\s+)',\r\n\t\t\t\t'g'\r\n\t\t\t);\r\n\t\t\telm.className = elm.className.replace(repl, '$1');\r\n\t\t}\r\n\t},\r\n\r\n\r\n\tgetCompStyle : function (elm) {\r\n\t\tvar compStyle = window.getComputedStyle ? window.getComputedStyle(elm) : elm.currentStyle;\r\n\r\n\t\t// Note: In Firefox, getComputedStyle returns null in a hidden iframe,\r\n\t\t// that's why we need to check if the returned value is non-empty\r\n\t\tif (!compStyle) {\r\n\t\t\treturn {};\r\n\t\t}\r\n\t\treturn compStyle;\r\n\t},\r\n\r\n\r\n\t// Note:\r\n\t// Setting a property to NULL reverts it to the state before it was first set\r\n\t// with the 'reversible' flag enabled\r\n\t//\r\n\tsetStyle : function (elm, styles, important, reversible) {\r\n\t\t// using '' for standard priority (IE10 apparently doesn't like value undefined)\r\n\t\tvar priority = important ? 'important' : '';\r\n\t\tvar origStyle = null;\r\n\r\n\t\tfor (var prop in styles) {\r\n\t\t\tif (styles.hasOwnProperty(prop)) {\r\n\t\t\t\tvar setVal = null;\r\n\r\n\t\t\t\tif (styles[prop] === null) {\r\n\t\t\t\t\t// reverting a property value\r\n\r\n\t\t\t\t\tif (!origStyle) {\r\n\t\t\t\t\t\t// get the original style object, but dont't try to create it if it doesn't exist\r\n\t\t\t\t\t\torigStyle = jsc.getData(elm, 'origStyle');\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (origStyle && origStyle.hasOwnProperty(prop)) {\r\n\t\t\t\t\t\t// we have property's original value -> use it\r\n\t\t\t\t\t\tsetVal = origStyle[prop];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// setting a property value\r\n\r\n\t\t\t\t\tif (reversible) {\r\n\t\t\t\t\t\tif (!origStyle) {\r\n\t\t\t\t\t\t\t// get the original style object and if it doesn't exist, create it\r\n\t\t\t\t\t\t\torigStyle = jsc.getData(elm, 'origStyle', {});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (!origStyle.hasOwnProperty(prop)) {\r\n\t\t\t\t\t\t\t// original property value not yet stored -> store it\r\n\t\t\t\t\t\t\torigStyle[prop] = elm.style[prop];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tsetVal = styles[prop];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (setVal !== null) {\r\n\t\t\t\t\telm.style.setProperty(prop, setVal, priority);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\r\n\thexColor : function (r, g, b) {\r\n\t\treturn '#' + (\r\n\t\t\t('0' + Math.round(r).toString(16)).substr(-2) +\r\n\t\t\t('0' + Math.round(g).toString(16)).substr(-2) +\r\n\t\t\t('0' + Math.round(b).toString(16)).substr(-2)\r\n\t\t).toUpperCase();\r\n\t},\r\n\r\n\r\n\thexaColor : function (r, g, b, a) {\r\n\t\treturn '#' + (\r\n\t\t\t('0' + Math.round(r).toString(16)).substr(-2) +\r\n\t\t\t('0' + Math.round(g).toString(16)).substr(-2) +\r\n\t\t\t('0' + Math.round(b).toString(16)).substr(-2) +\r\n\t\t\t('0' + Math.round(a * 255).toString(16)).substr(-2)\r\n\t\t).toUpperCase();\r\n\t},\r\n\r\n\r\n\trgbColor : function (r, g, b) {\r\n\t\treturn 'rgb(' +\r\n\t\t\tMath.round(r) + ',' +\r\n\t\t\tMath.round(g) + ',' +\r\n\t\t\tMath.round(b) +\r\n\t\t')';\r\n\t},\r\n\r\n\r\n\trgbaColor : function (r, g, b, a) {\r\n\t\treturn 'rgba(' +\r\n\t\t\tMath.round(r) + ',' +\r\n\t\t\tMath.round(g) + ',' +\r\n\t\t\tMath.round(b) + ',' +\r\n\t\t\t(Math.round((a===undefined || a===null ? 1 : a) * 100) / 100) +\r\n\t\t')';\r\n\t},\r\n\r\n\r\n\tlinearGradient : (function () {\r\n\r\n\t\tfunction getFuncName () {\r\n\t\t\tvar stdName = 'linear-gradient';\r\n\t\t\tvar prefixes = ['', '-webkit-', '-moz-', '-o-', '-ms-'];\r\n\t\t\tvar helper = window.document.createElement('div');\r\n\r\n\t\t\tfor (var i = 0; i < prefixes.length; i += 1) {\r\n\t\t\t\tvar tryFunc = prefixes[i] + stdName;\r\n\t\t\t\tvar tryVal = tryFunc + '(to right, rgba(0,0,0,0), rgba(0,0,0,0))';\r\n\r\n\t\t\t\thelper.style.background = tryVal;\r\n\t\t\t\tif (helper.style.background) { // CSS background successfully set -> function name is supported\r\n\t\t\t\t\treturn tryFunc;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn stdName; // fallback to standard 'linear-gradient' without vendor prefix\r\n\t\t}\r\n\r\n\t\tvar funcName = getFuncName();\r\n\r\n\t\treturn function () {\r\n\t\t\treturn funcName + '(' + Array.prototype.join.call(arguments, ', ') + ')';\r\n\t\t};\r\n\r\n\t})(),\r\n\r\n\r\n\tsetBorderRadius : function (elm, value) {\r\n\t\tjsc.setStyle(elm, {'border-radius' : value || '0'});\r\n\t},\r\n\r\n\r\n\tsetBoxShadow : function (elm, value) {\r\n\t\tjsc.setStyle(elm, {'box-shadow': value || 'none'});\r\n\t},\r\n\r\n\r\n\tgetElementPos : function (e, relativeToViewport) {\r\n\t\tvar x=0, y=0;\r\n\t\tvar rect = e.getBoundingClientRect();\r\n\t\tx = rect.left;\r\n\t\ty = rect.top;\r\n\t\tif (!relativeToViewport) {\r\n\t\t\tvar viewPos = jsc.getViewPos();\r\n\t\t\tx += viewPos[0];\r\n\t\t\ty += viewPos[1];\r\n\t\t}\r\n\t\treturn [x, y];\r\n\t},\r\n\r\n\r\n\tgetElementSize : function (e) {\r\n\t\treturn [e.offsetWidth, e.offsetHeight];\r\n\t},\r\n\r\n\r\n\t// get pointer's X/Y coordinates relative to viewport\r\n\tgetAbsPointerPos : function (e) {\r\n\t\tvar x = 0, y = 0;\r\n\t\tif (typeof e.changedTouches !== 'undefined' && e.changedTouches.length) {\r\n\t\t\t// touch devices\r\n\t\t\tx = e.changedTouches[0].clientX;\r\n\t\t\ty = e.changedTouches[0].clientY;\r\n\t\t} else if (typeof e.clientX === 'number') {\r\n\t\t\tx = e.clientX;\r\n\t\t\ty = e.clientY;\r\n\t\t}\r\n\t\treturn { x: x, y: y };\r\n\t},\r\n\r\n\r\n\t// get pointer's X/Y coordinates relative to target element\r\n\tgetRelPointerPos : function (e) {\r\n\t\tvar target = e.target || e.srcElement;\r\n\t\tvar targetRect = target.getBoundingClientRect();\r\n\r\n\t\tvar x = 0, y = 0;\r\n\r\n\t\tvar clientX = 0, clientY = 0;\r\n\t\tif (typeof e.changedTouches !== 'undefined' && e.changedTouches.length) {\r\n\t\t\t// touch devices\r\n\t\t\tclientX = e.changedTouches[0].clientX;\r\n\t\t\tclientY = e.changedTouches[0].clientY;\r\n\t\t} else if (typeof e.clientX === 'number') {\r\n\t\t\tclientX = e.clientX;\r\n\t\t\tclientY = e.clientY;\r\n\t\t}\r\n\r\n\t\tx = clientX - targetRect.left;\r\n\t\ty = clientY - targetRect.top;\r\n\t\treturn { x: x, y: y };\r\n\t},\r\n\r\n\r\n\tgetViewPos : function () {\r\n\t\tvar doc = window.document.documentElement;\r\n\t\treturn [\r\n\t\t\t(window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0),\r\n\t\t\t(window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0)\r\n\t\t];\r\n\t},\r\n\r\n\r\n\tgetViewSize : function () {\r\n\t\tvar doc = window.document.documentElement;\r\n\t\treturn [\r\n\t\t\t(window.innerWidth || doc.clientWidth),\r\n\t\t\t(window.innerHeight || doc.clientHeight),\r\n\t\t];\r\n\t},\r\n\r\n\r\n\t// r: 0-255\r\n\t// g: 0-255\r\n\t// b: 0-255\r\n\t//\r\n\t// returns: [ 0-360, 0-100, 0-100 ]\r\n\t//\r\n\tRGB_HSV : function (r, g, b) {\r\n\t\tr /= 255;\r\n\t\tg /= 255;\r\n\t\tb /= 255;\r\n\t\tvar n = Math.min(Math.min(r,g),b);\r\n\t\tvar v = Math.max(Math.max(r,g),b);\r\n\t\tvar m = v - n;\r\n\t\tif (m === 0) { return [ null, 0, 100 * v ]; }\r\n\t\tvar h = r===n ? 3+(b-g)/m : (g===n ? 5+(r-b)/m : 1+(g-r)/m);\r\n\t\treturn [\r\n\t\t\t60 * (h===6?0:h),\r\n\t\t\t100 * (m/v),\r\n\t\t\t100 * v\r\n\t\t];\r\n\t},\r\n\r\n\r\n\t// h: 0-360\r\n\t// s: 0-100\r\n\t// v: 0-100\r\n\t//\r\n\t// returns: [ 0-255, 0-255, 0-255 ]\r\n\t//\r\n\tHSV_RGB : function (h, s, v) {\r\n\t\tvar u = 255 * (v / 100);\r\n\r\n\t\tif (h === null) {\r\n\t\t\treturn [ u, u, u ];\r\n\t\t}\r\n\r\n\t\th /= 60;\r\n\t\ts /= 100;\r\n\r\n\t\tvar i = Math.floor(h);\r\n\t\tvar f = i%2 ? h-i : 1-(h-i);\r\n\t\tvar m = u * (1 - s);\r\n\t\tvar n = u * (1 - s * f);\r\n\t\tswitch (i) {\r\n\t\t\tcase 6:\r\n\t\t\tcase 0: return [u,n,m];\r\n\t\t\tcase 1: return [n,u,m];\r\n\t\t\tcase 2: return [m,u,n];\r\n\t\t\tcase 3: return [m,n,u];\r\n\t\t\tcase 4: return [n,m,u];\r\n\t\t\tcase 5: return [u,m,n];\r\n\t\t}\r\n\t},\r\n\r\n\r\n\tparseColorString : function (str) {\r\n\t\tvar ret = {\r\n\t\t\trgba: null,\r\n\t\t\tformat: null // 'hex' | 'hexa' | 'rgb' | 'rgba'\r\n\t\t};\r\n\r\n\t\tvar m;\r\n\r\n\t\tif (m = str.match(/^\\W*([0-9A-F]{3,8})\\W*$/i)) {\r\n\t\t\t// HEX notation\r\n\r\n\t\t\tif (m[1].length === 8) {\r\n\t\t\t\t// 8-char notation (= with alpha)\r\n\t\t\t\tret.format = 'hexa';\r\n\t\t\t\tret.rgba = [\r\n\t\t\t\t\tparseInt(m[1].substr(0,2),16),\r\n\t\t\t\t\tparseInt(m[1].substr(2,2),16),\r\n\t\t\t\t\tparseInt(m[1].substr(4,2),16),\r\n\t\t\t\t\tparseInt(m[1].substr(6,2),16) / 255\r\n\t\t\t\t];\r\n\r\n\t\t\t} else if (m[1].length === 6) {\r\n\t\t\t\t// 6-char notation\r\n\t\t\t\tret.format = 'hex';\r\n\t\t\t\tret.rgba = [\r\n\t\t\t\t\tparseInt(m[1].substr(0,2),16),\r\n\t\t\t\t\tparseInt(m[1].substr(2,2),16),\r\n\t\t\t\t\tparseInt(m[1].substr(4,2),16),\r\n\t\t\t\t\tnull\r\n\t\t\t\t];\r\n\r\n\t\t\t} else if (m[1].length === 3) {\r\n\t\t\t\t// 3-char notation\r\n\t\t\t\tret.format = 'hex';\r\n\t\t\t\tret.rgba = [\r\n\t\t\t\t\tparseInt(m[1].charAt(0) + m[1].charAt(0),16),\r\n\t\t\t\t\tparseInt(m[1].charAt(1) + m[1].charAt(1),16),\r\n\t\t\t\t\tparseInt(m[1].charAt(2) + m[1].charAt(2),16),\r\n\t\t\t\t\tnull\r\n\t\t\t\t];\r\n\r\n\t\t\t} else {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\treturn ret;\r\n\t\t}\r\n\r\n\t\tif (m = str.match(/^\\W*rgba?\\(([^)]*)\\)\\W*$/i)) {\r\n\t\t\t// rgb(...) or rgba(...) notation\r\n\r\n\t\t\tvar par = m[1].split(',');\r\n\t\t\tvar re = /^\\s*(\\d+|\\d*\\.\\d+|\\d+\\.\\d*)\\s*$/;\r\n\t\t\tvar mR, mG, mB, mA;\r\n\t\t\tif (\r\n\t\t\t\tpar.length >= 3 &&\r\n\t\t\t\t(mR = par[0].match(re)) &&\r\n\t\t\t\t(mG = par[1].match(re)) &&\r\n\t\t\t\t(mB = par[2].match(re))\r\n\t\t\t) {\r\n\t\t\t\tret.format = 'rgb';\r\n\t\t\t\tret.rgba = [\r\n\t\t\t\t\tparseFloat(mR[1]) || 0,\r\n\t\t\t\t\tparseFloat(mG[1]) || 0,\r\n\t\t\t\t\tparseFloat(mB[1]) || 0,\r\n\t\t\t\t\tnull\r\n\t\t\t\t];\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\tpar.length >= 4 &&\r\n\t\t\t\t\t(mA = par[3].match(re))\r\n\t\t\t\t) {\r\n\t\t\t\t\tret.format = 'rgba';\r\n\t\t\t\t\tret.rgba[3] = parseFloat(mA[1]) || 0;\r\n\t\t\t\t}\r\n\t\t\t\treturn ret;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t},\r\n\r\n\r\n\tparsePaletteValue : function (mixed) {\r\n\t\tvar vals = [];\r\n\r\n\t\tif (typeof mixed === 'string') { // input is a string of space separated color values\r\n\t\t\t// rgb() and rgba() may contain spaces too, so let's find all color values by regex\r\n\t\t\tmixed.replace(/#[0-9A-F]{3}([0-9A-F]{3})?|rgba?\\(([^)]*)\\)/ig, function (val) {\r\n\t\t\t\tvals.push(val);\r\n\t\t\t});\r\n\t\t} else if (Array.isArray(mixed)) { // input is an array of color values\r\n\t\t\tvals = mixed;\r\n\t\t}\r\n\r\n\t\t// convert all values into uniform color format\r\n\r\n\t\tvar colors = [];\r\n\r\n\t\tfor (var i = 0; i < vals.length; i++) {\r\n\t\t\tvar color = jsc.parseColorString(vals[i]);\r\n\t\t\tif (color) {\r\n\t\t\t\tcolors.push(color);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn colors;\r\n\t},\r\n\r\n\r\n\tcontainsTranparentColor : function (colors) {\r\n\t\tfor (var i = 0; i < colors.length; i++) {\r\n\t\t\tvar a = colors[i].rgba[3];\r\n\t\t\tif (a !== null && a < 1.0) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\r\n\r\n\tisAlphaFormat : function (format) {\r\n\t\tswitch (format.toLowerCase()) {\r\n\t\tcase 'hexa':\r\n\t\tcase 'rgba':\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\r\n\r\n\t// Canvas scaling for retina displays\r\n\t//\r\n\t// adapted from https://www.html5rocks.com/en/tutorials/canvas/hidpi/\r\n\t//\r\n\tscaleCanvasForHighDPR : function (canvas) {\r\n\t\tvar dpr = window.devicePixelRatio || 1;\r\n\t\tcanvas.width *= dpr;\r\n\t\tcanvas.height *= dpr;\r\n\t\tvar ctx = canvas.getContext('2d');\r\n\t\tctx.scale(dpr, dpr);\r\n\t},\r\n\r\n\r\n\tgenColorPreviewCanvas : function (color, separatorPos, specWidth, scaleForHighDPR) {\r\n\r\n\t\tvar sepW = Math.round(jsc.pub.previewSeparator.length);\r\n\t\tvar sqSize = jsc.pub.chessboardSize;\r\n\t\tvar sqColor1 = jsc.pub.chessboardColor1;\r\n\t\tvar sqColor2 = jsc.pub.chessboardColor2;\r\n\r\n\t\tvar cWidth = specWidth ? specWidth : sqSize * 2;\r\n\t\tvar cHeight = sqSize * 2;\r\n\r\n\t\tvar canvas = jsc.createEl('canvas');\r\n\t\tvar ctx = canvas.getContext('2d');\r\n\r\n\t\tcanvas.width = cWidth;\r\n\t\tcanvas.height = cHeight;\r\n\t\tif (scaleForHighDPR) {\r\n\t\t\tjsc.scaleCanvasForHighDPR(canvas);\r\n\t\t}\r\n\r\n\t\t// transparency chessboard - background\r\n\t\tctx.fillStyle = sqColor1;\r\n\t\tctx.fillRect(0, 0, cWidth, cHeight);\r\n\r\n\t\t// transparency chessboard - squares\r\n\t\tctx.fillStyle = sqColor2;\r\n\t\tfor (var x = 0; x < cWidth; x += sqSize * 2) {\r\n\t\t\tctx.fillRect(x, 0, sqSize, sqSize);\r\n\t\t\tctx.fillRect(x + sqSize, sqSize, sqSize, sqSize);\r\n\t\t}\r\n\r\n\t\tif (color) {\r\n\t\t\t// actual color in foreground\r\n\t\t\tctx.fillStyle = color;\r\n\t\t\tctx.fillRect(0, 0, cWidth, cHeight);\r\n\t\t}\r\n\r\n\t\tvar start = null;\r\n\t\tswitch (separatorPos) {\r\n\t\t\tcase 'left':\r\n\t\t\t\tstart = 0;\r\n\t\t\t\tctx.clearRect(0, 0, sepW/2, cHeight);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'right':\r\n\t\t\t\tstart = cWidth - sepW;\r\n\t\t\t\tctx.clearRect(cWidth - (sepW/2), 0, sepW/2, cHeight);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t\tif (start !== null) {\r\n\t\t\tctx.lineWidth = 1;\r\n\t\t\tfor (var i = 0; i < jsc.pub.previewSeparator.length; i += 1) {\r\n\t\t\t\tctx.beginPath();\r\n\t\t\t\tctx.strokeStyle = jsc.pub.previewSeparator[i];\r\n\t\t\t\tctx.moveTo(0.5 + start + i, 0);\r\n\t\t\t\tctx.lineTo(0.5 + start + i, cHeight);\r\n\t\t\t\tctx.stroke();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tcanvas: canvas,\r\n\t\t\twidth: cWidth,\r\n\t\t\theight: cHeight,\r\n\t\t};\r\n\t},\r\n\r\n\r\n\t// if position or width is not set => fill the entire element (0%-100%)\r\n\tgenColorPreviewGradient : function (color, position, width) {\r\n\t\tvar params = [];\r\n\r\n\t\tif (position && width) {\r\n\t\t\tparams = [\r\n\t\t\t\t'to ' + {'left':'right', 'right':'left'}[position],\r\n\t\t\t\tcolor + ' 0%',\r\n\t\t\t\tcolor + ' ' + width + 'px',\r\n\t\t\t\t'rgba(0,0,0,0) ' + (width + 1) + 'px',\r\n\t\t\t\t'rgba(0,0,0,0) 100%',\r\n\t\t\t];\r\n\t\t} else {\r\n\t\t\tparams = [\r\n\t\t\t\t'to right',\r\n\t\t\t\tcolor + ' 0%',\r\n\t\t\t\tcolor + ' 100%',\r\n\t\t\t];\r\n\t\t}\r\n\r\n\t\treturn jsc.linearGradient.apply(this, params);\r\n\t},\r\n\r\n\r\n\tredrawPosition : function () {\r\n\r\n\t\tif (!jsc.picker || !jsc.picker.owner) {\r\n\t\t\treturn; // picker is not shown\r\n\t\t}\r\n\r\n\t\tvar thisObj = jsc.picker.owner;\r\n\r\n\t\tvar tp, vp;\r\n\r\n\t\tif (thisObj.fixed) {\r\n\t\t\t// Fixed elements are positioned relative to viewport,\r\n\t\t\t// therefore we can ignore the scroll offset\r\n\t\t\ttp = jsc.getElementPos(thisObj.targetElement, true); // target pos\r\n\t\t\tvp = [0, 0]; // view pos\r\n\t\t} else {\r\n\t\t\ttp = jsc.getElementPos(thisObj.targetElement); // target pos\r\n\t\t\tvp = jsc.getViewPos(); // view pos\r\n\t\t}\r\n\r\n\t\tvar ts = jsc.getElementSize(thisObj.targetElement); // target size\r\n\t\tvar vs = jsc.getViewSize(); // view size\r\n\t\tvar pd = jsc.getPickerDims(thisObj);\r\n\t\tvar ps = [pd.borderW, pd.borderH]; // picker outer size\r\n\t\tvar a, b, c;\r\n\t\tswitch (thisObj.position.toLowerCase()) {\r\n\t\t\tcase 'left': a=1; b=0; c=-1; break;\r\n\t\t\tcase 'right':a=1; b=0; c=1; break;\r\n\t\t\tcase 'top': a=0; b=1; c=-1; break;\r\n\t\t\tdefault: a=0; b=1; c=1; break;\r\n\t\t}\r\n\t\tvar l = (ts[b]+ps[b])/2;\r\n\r\n\t\t// compute picker position\r\n\t\tif (!thisObj.smartPosition) {\r\n\t\t\tvar pp = [\r\n\t\t\t\ttp[a],\r\n\t\t\t\ttp[b]+ts[b]-l+l*c\r\n\t\t\t];\r\n\t\t} else {\r\n\t\t\tvar pp = [\r\n\t\t\t\t-vp[a]+tp[a]+ps[a] > vs[a] ?\r\n\t\t\t\t\t(-vp[a]+tp[a]+ts[a]/2 > vs[a]/2 && tp[a]+ts[a]-ps[a] >= 0 ? tp[a]+ts[a]-ps[a] : tp[a]) :\r\n\t\t\t\t\ttp[a],\r\n\t\t\t\t-vp[b]+tp[b]+ts[b]+ps[b]-l+l*c > vs[b] ?\r\n\t\t\t\t\t(-vp[b]+tp[b]+ts[b]/2 > vs[b]/2 && tp[b]+ts[b]-l-l*c >= 0 ? tp[b]+ts[b]-l-l*c : tp[b]+ts[b]-l+l*c) :\r\n\t\t\t\t\t(tp[b]+ts[b]-l+l*c >= 0 ? tp[b]+ts[b]-l+l*c : tp[b]+ts[b]-l-l*c)\r\n\t\t\t];\r\n\t\t}\r\n\r\n\t\tvar x = pp[a];\r\n\t\tvar y = pp[b];\r\n\t\tvar positionValue = thisObj.fixed ? 'fixed' : 'absolute';\r\n\t\tvar contractShadow =\r\n\t\t\t(pp[0] + ps[0] > tp[0] || pp[0] < tp[0] + ts[0]) &&\r\n\t\t\t(pp[1] + ps[1] < tp[1] + ts[1]);\r\n\r\n\t\tjsc._drawPosition(thisObj, x, y, positionValue, contractShadow);\r\n\t},\r\n\r\n\r\n\t_drawPosition : function (thisObj, x, y, positionValue, contractShadow) {\r\n\t\tvar vShadow = contractShadow ? 0 : thisObj.shadowBlur; // px\r\n\r\n\t\tjsc.picker.wrap.style.position = positionValue;\r\n\t\tjsc.picker.wrap.style.left = x + 'px';\r\n\t\tjsc.picker.wrap.style.top = y + 'px';\r\n\r\n\t\tjsc.setBoxShadow(\r\n\t\t\tjsc.picker.boxS,\r\n\t\t\tthisObj.shadow ?\r\n\t\t\t\tnew jsc.BoxShadow(0, vShadow, thisObj.shadowBlur, 0, thisObj.shadowColor) :\r\n\t\t\t\tnull);\r\n\t},\r\n\r\n\r\n\tgetPickerDims : function (thisObj) {\r\n\t\tvar w = 2 * thisObj.controlBorderWidth + thisObj.width;\r\n\t\tvar h = 2 * thisObj.controlBorderWidth + thisObj.height;\r\n\r\n\t\tvar sliderSpace = 2 * thisObj.controlBorderWidth + 2 * jsc.getControlPadding(thisObj) + thisObj.sliderSize;\r\n\r\n\t\tif (jsc.getSliderChannel(thisObj)) {\r\n\t\t\tw += sliderSpace;\r\n\t\t}\r\n\t\tif (thisObj.hasAlphaChannel()) {\r\n\t\t\tw += sliderSpace;\r\n\t\t}\r\n\r\n\t\tvar pal = jsc.getPaletteDims(thisObj, w);\r\n\r\n\t\tif (pal.height) {\r\n\t\t\th += pal.height + thisObj.padding;\r\n\t\t}\r\n\t\tif (thisObj.closeButton) {\r\n\t\t\th += 2 * thisObj.controlBorderWidth + thisObj.padding + thisObj.buttonHeight;\r\n\t\t}\r\n\r\n\t\tvar pW = w + (2 * thisObj.padding);\r\n\t\tvar pH = h + (2 * thisObj.padding);\r\n\r\n\t\treturn {\r\n\t\t\tcontentW: w,\r\n\t\t\tcontentH: h,\r\n\t\t\tpaddedW: pW,\r\n\t\t\tpaddedH: pH,\r\n\t\t\tborderW: pW + (2 * thisObj.borderWidth),\r\n\t\t\tborderH: pH + (2 * thisObj.borderWidth),\r\n\t\t\tpalette: pal,\r\n\t\t};\r\n\t},\r\n\r\n\r\n\tgetPaletteDims : function (thisObj, width) {\r\n\t\tvar cols = 0, rows = 0, cellW = 0, cellH = 0, height = 0;\r\n\t\tvar sampleCount = thisObj._palette ? thisObj._palette.length : 0;\r\n\r\n\t\tif (sampleCount) {\r\n\t\t\tcols = thisObj.paletteCols;\r\n\t\t\trows = cols > 0 ? Math.ceil(sampleCount / cols) : 0;\r\n\r\n\t\t\t// color sample's dimensions (includes border)\r\n\t\t\tcellW = Math.max(1, Math.floor((width - ((cols - 1) * thisObj.paletteSpacing)) / cols));\r\n\t\t\tcellH = thisObj.paletteHeight ? Math.min(thisObj.paletteHeight, cellW) : cellW;\r\n\t\t}\r\n\r\n\t\tif (rows) {\r\n\t\t\theight =\r\n\t\t\t\trows * cellH +\r\n\t\t\t\t(rows - 1) * thisObj.paletteSpacing;\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tcols: cols,\r\n\t\t\trows: rows,\r\n\t\t\tcellW: cellW,\r\n\t\t\tcellH: cellH,\r\n\t\t\twidth: width,\r\n\t\t\theight: height,\r\n\t\t};\r\n\t},\r\n\r\n\r\n\tgetControlPadding : function (thisObj) {\r\n\t\treturn Math.max(\r\n\t\t\tthisObj.padding / 2,\r\n\t\t\t(2 * thisObj.pointerBorderWidth + thisObj.pointerThickness) - thisObj.controlBorderWidth\r\n\t\t);\r\n\t},\r\n\r\n\r\n\tgetPadYChannel : function (thisObj) {\r\n\t\tswitch (thisObj.mode.charAt(1).toLowerCase()) {\r\n\t\t\tcase 'v': return 'v'; break;\r\n\t\t}\r\n\t\treturn 's';\r\n\t},\r\n\r\n\r\n\tgetSliderChannel : function (thisObj) {\r\n\t\tif (thisObj.mode.length > 2) {\r\n\t\t\tswitch (thisObj.mode.charAt(2).toLowerCase()) {\r\n\t\t\t\tcase 's': return 's'; break;\r\n\t\t\t\tcase 'v': return 'v'; break;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn null;\r\n\t},\r\n\r\n\r\n\t// calls function specified in picker's property\r\n\ttriggerCallback : function (thisObj, prop) {\r\n\t\tif (!thisObj[prop]) {\r\n\t\t\treturn; // callback func not specified\r\n\t\t}\r\n\t\tvar callback = null;\r\n\r\n\t\tif (typeof thisObj[prop] === 'string') {\r\n\t\t\t// string with code\r\n\t\t\ttry {\r\n\t\t\t\tcallback = new Function (thisObj[prop]);\r\n\t\t\t} catch (e) {\r\n\t\t\t\tconsole.error(e);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\t// function\r\n\t\t\tcallback = thisObj[prop];\r\n\t\t}\r\n\r\n\t\tif (callback) {\r\n\t\t\tcallback.call(thisObj);\r\n\t\t}\r\n\t},\r\n\r\n\r\n\t// Triggers a color change related event(s) on all picker instances.\r\n\t// It is possible to specify multiple events separated with a space.\r\n\ttriggerGlobal : function (eventNames) {\r\n\t\tvar inst = jsc.getInstances();\r\n\t\tfor (var i = 0; i < inst.length; i += 1) {\r\n\t\t\tinst[i].trigger(eventNames);\r\n\t\t}\r\n\t},\r\n\r\n\r\n\t_pointerMoveEvent : {\r\n\t\tmouse: 'mousemove',\r\n\t\ttouch: 'touchmove'\r\n\t},\r\n\t_pointerEndEvent : {\r\n\t\tmouse: 'mouseup',\r\n\t\ttouch: 'touchend'\r\n\t},\r\n\r\n\r\n\t_pointerOrigin : null,\r\n\t_capturedTarget : null,\r\n\r\n\r\n\tonDocumentKeyUp : function (e) {\r\n\t\tif (['Tab', 'Escape'].indexOf(jsc.eventKey(e)) !== -1) {\r\n\t\t\tif (jsc.picker && jsc.picker.owner) {\r\n\t\t\t\tjsc.picker.owner.tryHide();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\r\n\tonWindowResize : function (e) {\r\n\t\tjsc.redrawPosition();\r\n\t},\r\n\r\n\r\n\tonWindowScroll : function (e) {\r\n\t\tjsc.redrawPosition();\r\n\t},\r\n\r\n\r\n\tonParentScroll : function (e) {\r\n\t\t// hide the picker when one of the parent elements is scrolled\r\n\t\tif (jsc.picker && jsc.picker.owner) {\r\n\t\t\tjsc.picker.owner.tryHide();\r\n\t\t}\r\n\t},\r\n\r\n\r\n\tonDocumentMouseDown : function (e) {\r\n\t\tvar target = e.target || e.srcElement;\r\n\r\n\t\tif (target.jscolor && target.jscolor instanceof jsc.pub) { // clicked targetElement -> show picker\r\n\t\t\tif (target.jscolor.showOnClick && !target.disabled) {\r\n\t\t\t\ttarget.jscolor.show();\r\n\t\t\t}\r\n\t\t} else if (jsc.getData(target, 'gui')) { // clicked jscolor's GUI element\r\n\t\t\tvar control = jsc.getData(target, 'control');\r\n\t\t\tif (control) {\r\n\t\t\t\t// jscolor's control\r\n\t\t\t\tjsc.onControlPointerStart(e, target, jsc.getData(target, 'control'), 'mouse');\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\t// mouse is outside the picker's controls -> hide the color picker!\r\n\t\t\tif (jsc.picker && jsc.picker.owner) {\r\n\t\t\t\tjsc.picker.owner.tryHide();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\r\n\tonPickerTouchStart : function (e) {\r\n\t\tvar target = e.target || e.srcElement;\r\n\r\n\t\tif (jsc.getData(target, 'control')) {\r\n\t\t\tjsc.onControlPointerStart(e, target, jsc.getData(target, 'control'), 'touch');\r\n\t\t}\r\n\t},\r\n\r\n\r\n\tonControlPointerStart : function (e, target, controlName, pointerType) {\r\n\t\tvar thisObj = jsc.getData(target, 'instance');\r\n\r\n\t\tjsc.preventDefault(e);\r\n\t\tjsc.captureTarget(target);\r\n\r\n\t\tvar registerDragEvents = function (doc, offset) {\r\n\t\t\tjsc.attachGroupEvent('drag', doc, jsc._pointerMoveEvent[pointerType],\r\n\t\t\t\tjsc.onDocumentPointerMove(e, target, controlName, pointerType, offset));\r\n\t\t\tjsc.attachGroupEvent('drag', doc, jsc._pointerEndEvent[pointerType],\r\n\t\t\t\tjsc.onDocumentPointerEnd(e, target, controlName, pointerType));\r\n\t\t};\r\n\r\n\t\tregisterDragEvents(window.document, [0, 0]);\r\n\r\n\t\tif (window.parent && window.frameElement) {\r\n\t\t\tvar rect = window.frameElement.getBoundingClientRect();\r\n\t\t\tvar ofs = [-rect.left, -rect.top];\r\n\t\t\tregisterDragEvents(window.parent.window.document, ofs);\r\n\t\t}\r\n\r\n\t\tvar abs = jsc.getAbsPointerPos(e);\r\n\t\tvar rel = jsc.getRelPointerPos(e);\r\n\t\tjsc._pointerOrigin = {\r\n\t\t\tx: abs.x - rel.x,\r\n\t\t\ty: abs.y - rel.y\r\n\t\t};\r\n\r\n\t\tswitch (controlName) {\r\n\t\tcase 'pad':\r\n\t\t\t// if the value slider is at the bottom, move it up\r\n\t\t\tif (jsc.getSliderChannel(thisObj) === 'v' && thisObj.channels.v === 0) {\r\n\t\t\t\tthisObj.fromHSVA(null, null, 100, null);\r\n\t\t\t}\r\n\t\t\tjsc.setPad(thisObj, e, 0, 0);\r\n\t\t\tbreak;\r\n\r\n\t\tcase 'sld':\r\n\t\t\tjsc.setSld(thisObj, e, 0);\r\n\t\t\tbreak;\r\n\r\n\t\tcase 'asld':\r\n\t\t\tjsc.setASld(thisObj, e, 0);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tthisObj.trigger('input');\r\n\t},\r\n\r\n\r\n\tonDocumentPointerMove : function (e, target, controlName, pointerType, offset) {\r\n\t\treturn function (e) {\r\n\t\t\tvar thisObj = jsc.getData(target, 'instance');\r\n\t\t\tswitch (controlName) {\r\n\t\t\tcase 'pad':\r\n\t\t\t\tjsc.setPad(thisObj, e, offset[0], offset[1]);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'sld':\r\n\t\t\t\tjsc.setSld(thisObj, e, offset[1]);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'asld':\r\n\t\t\t\tjsc.setASld(thisObj, e, offset[1]);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tthisObj.trigger('input');\r\n\t\t}\r\n\t},\r\n\r\n\r\n\tonDocumentPointerEnd : function (e, target, controlName, pointerType) {\r\n\t\treturn function (e) {\r\n\t\t\tvar thisObj = jsc.getData(target, 'instance');\r\n\t\t\tjsc.detachGroupEvents('drag');\r\n\t\t\tjsc.releaseTarget();\r\n\r\n\t\t\t// Always trigger changes AFTER detaching outstanding mouse handlers,\r\n\t\t\t// in case some color change that occured in user-defined onChange/onInput handler\r\n\t\t\t// intruded into current mouse events\r\n\t\t\tthisObj.trigger('input');\r\n\t\t\tthisObj.trigger('change');\r\n\t\t};\r\n\t},\r\n\r\n\r\n\tonPaletteSampleClick : function (e) {\r\n\t\tvar target = e.currentTarget;\r\n\t\tvar thisObj = jsc.getData(target, 'instance');\r\n\t\tvar color = jsc.getData(target, 'color');\r\n\r\n\t\t// when format is flexible, use the original format of this color sample\r\n\t\tif (thisObj.format.toLowerCase() === 'any') {\r\n\t\t\tthisObj._setFormat(color.format); // adapt format\r\n\t\t\tif (!jsc.isAlphaFormat(thisObj.getFormat())) {\r\n\t\t\t\tcolor.rgba[3] = 1.0; // when switching to a format that doesn't support alpha, set full opacity\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// if this color doesn't specify alpha, use alpha of 1.0 (if applicable)\r\n\t\tif (color.rgba[3] === null) {\r\n\t\t\tif (thisObj.paletteSetsAlpha === true || (thisObj.paletteSetsAlpha === 'auto' && thisObj._paletteHasTransparency)) {\r\n\t\t\t\tcolor.rgba[3] = 1.0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthisObj.fromRGBA.apply(thisObj, color.rgba);\r\n\r\n\t\tthisObj.trigger('input');\r\n\t\tthisObj.trigger('change');\r\n\r\n\t\tif (thisObj.hideOnPaletteClick) {\r\n\t\t\tthisObj.hide();\r\n\t\t}\r\n\t},\r\n\r\n\r\n\tsetPad : function (thisObj, e, ofsX, ofsY) {\r\n\t\tvar pointerAbs = jsc.getAbsPointerPos(e);\r\n\t\tvar x = ofsX + pointerAbs.x - jsc._pointerOrigin.x - thisObj.padding - thisObj.controlBorderWidth;\r\n\t\tvar y = ofsY + pointerAbs.y - jsc._pointerOrigin.y - thisObj.padding - thisObj.controlBorderWidth;\r\n\r\n\t\tvar xVal = x * (360 / (thisObj.width - 1));\r\n\t\tvar yVal = 100 - (y * (100 / (thisObj.height - 1)));\r\n\r\n\t\tswitch (jsc.getPadYChannel(thisObj)) {\r\n\t\tcase 's': thisObj.fromHSVA(xVal, yVal, null, null); break;\r\n\t\tcase 'v': thisObj.fromHSVA(xVal, null, yVal, null); break;\r\n\t\t}\r\n\t},\r\n\r\n\r\n\tsetSld : function (thisObj, e, ofsY) {\r\n\t\tvar pointerAbs = jsc.getAbsPointerPos(e);\r\n\t\tvar y = ofsY + pointerAbs.y - jsc._pointerOrigin.y - thisObj.padding - thisObj.controlBorderWidth;\r\n\t\tvar yVal = 100 - (y * (100 / (thisObj.height - 1)));\r\n\r\n\t\tswitch (jsc.getSliderChannel(thisObj)) {\r\n\t\tcase 's': thisObj.fromHSVA(null, yVal, null, null); break;\r\n\t\tcase 'v': thisObj.fromHSVA(null, null, yVal, null); break;\r\n\t\t}\r\n\t},\r\n\r\n\r\n\tsetASld : function (thisObj, e, ofsY) {\r\n\t\tvar pointerAbs = jsc.getAbsPointerPos(e);\r\n\t\tvar y = ofsY + pointerAbs.y - jsc._pointerOrigin.y - thisObj.padding - thisObj.controlBorderWidth;\r\n\t\tvar yVal = 1.0 - (y * (1.0 / (thisObj.height - 1)));\r\n\r\n\t\tif (yVal < 1.0) {\r\n\t\t\t// if format is flexible and the current format doesn't support alpha, switch to a suitable one\r\n\t\t\tvar fmt = thisObj.getFormat();\r\n\t\t\tif (thisObj.format.toLowerCase() === 'any' && !jsc.isAlphaFormat(fmt)) {\r\n\t\t\t\tthisObj._setFormat(fmt === 'hex' ? 'hexa' : 'rgba');\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthisObj.fromHSVA(null, null, null, yVal);\r\n\t},\r\n\r\n\r\n\tcreatePadCanvas : function () {\r\n\r\n\t\tvar ret = {\r\n\t\t\telm: null,\r\n\t\t\tdraw: null\r\n\t\t};\r\n\r\n\t\tvar canvas = jsc.createEl('canvas');\r\n\t\tvar ctx = canvas.getContext('2d');\r\n\r\n\t\tvar drawFunc = function (width, height, type) {\r\n\t\t\tcanvas.width = width;\r\n\t\t\tcanvas.height = height;\r\n\r\n\t\t\tctx.clearRect(0, 0, canvas.width, canvas.height);\r\n\r\n\t\t\tvar hGrad = ctx.createLinearGradient(0, 0, canvas.width, 0);\r\n\t\t\thGrad.addColorStop(0 / 6, '#F00');\r\n\t\t\thGrad.addColorStop(1 / 6, '#FF0');\r\n\t\t\thGrad.addColorStop(2 / 6, '#0F0');\r\n\t\t\thGrad.addColorStop(3 / 6, '#0FF');\r\n\t\t\thGrad.addColorStop(4 / 6, '#00F');\r\n\t\t\thGrad.addColorStop(5 / 6, '#F0F');\r\n\t\t\thGrad.addColorStop(6 / 6, '#F00');\r\n\r\n\t\t\tctx.fillStyle = hGrad;\r\n\t\t\tctx.fillRect(0, 0, canvas.width, canvas.height);\r\n\r\n\t\t\tvar vGrad = ctx.createLinearGradient(0, 0, 0, canvas.height);\r\n\t\t\tswitch (type.toLowerCase()) {\r\n\t\t\tcase 's':\r\n\t\t\t\tvGrad.addColorStop(0, 'rgba(255,255,255,0)');\r\n\t\t\t\tvGrad.addColorStop(1, 'rgba(255,255,255,1)');\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'v':\r\n\t\t\t\tvGrad.addColorStop(0, 'rgba(0,0,0,0)');\r\n\t\t\t\tvGrad.addColorStop(1, 'rgba(0,0,0,1)');\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tctx.fillStyle = vGrad;\r\n\t\t\tctx.fillRect(0, 0, canvas.width, canvas.height);\r\n\t\t};\r\n\r\n\t\tret.elm = canvas;\r\n\t\tret.draw = drawFunc;\r\n\r\n\t\treturn ret;\r\n\t},\r\n\r\n\r\n\tcreateSliderGradient : function () {\r\n\r\n\t\tvar ret = {\r\n\t\t\telm: null,\r\n\t\t\tdraw: null\r\n\t\t};\r\n\r\n\t\tvar canvas = jsc.createEl('canvas');\r\n\t\tvar ctx = canvas.getContext('2d');\r\n\r\n\t\tvar drawFunc = function (width, height, color1, color2) {\r\n\t\t\tcanvas.width = width;\r\n\t\t\tcanvas.height = height;\r\n\r\n\t\t\tctx.clearRect(0, 0, canvas.width, canvas.height);\r\n\r\n\t\t\tvar grad = ctx.createLinearGradient(0, 0, 0, canvas.height);\r\n\t\t\tgrad.addColorStop(0, color1);\r\n\t\t\tgrad.addColorStop(1, color2);\r\n\r\n\t\t\tctx.fillStyle = grad;\r\n\t\t\tctx.fillRect(0, 0, canvas.width, canvas.height);\r\n\t\t};\r\n\r\n\t\tret.elm = canvas;\r\n\t\tret.draw = drawFunc;\r\n\r\n\t\treturn ret;\r\n\t},\r\n\r\n\r\n\tcreateASliderGradient : function () {\r\n\r\n\t\tvar ret = {\r\n\t\t\telm: null,\r\n\t\t\tdraw: null\r\n\t\t};\r\n\r\n\t\tvar canvas = jsc.createEl('canvas');\r\n\t\tvar ctx = canvas.getContext('2d');\r\n\r\n\t\tvar drawFunc = function (width, height, color) {\r\n\t\t\tcanvas.width = width;\r\n\t\t\tcanvas.height = height;\r\n\r\n\t\t\tctx.clearRect(0, 0, canvas.width, canvas.height);\r\n\r\n\t\t\tvar sqSize = canvas.width / 2;\r\n\t\t\tvar sqColor1 = jsc.pub.chessboardColor1;\r\n\t\t\tvar sqColor2 = jsc.pub.chessboardColor2;\r\n\r\n\t\t\t// dark gray background\r\n\t\t\tctx.fillStyle = sqColor1;\r\n\t\t\tctx.fillRect(0, 0, canvas.width, canvas.height);\r\n\r\n\t\t\tif (sqSize > 0) { // to avoid infinite loop\r\n\t\t\t\tfor (var y = 0; y < canvas.height; y += sqSize * 2) {\r\n\t\t\t\t\t// light gray squares\r\n\t\t\t\t\tctx.fillStyle = sqColor2;\r\n\t\t\t\t\tctx.fillRect(0, y, sqSize, sqSize);\r\n\t\t\t\t\tctx.fillRect(sqSize, y + sqSize, sqSize, sqSize);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar grad = ctx.createLinearGradient(0, 0, 0, canvas.height);\r\n\t\t\tgrad.addColorStop(0, color);\r\n\t\t\tgrad.addColorStop(1, 'rgba(0,0,0,0)');\r\n\r\n\t\t\tctx.fillStyle = grad;\r\n\t\t\tctx.fillRect(0, 0, canvas.width, canvas.height);\r\n\t\t};\r\n\r\n\t\tret.elm = canvas;\r\n\t\tret.draw = drawFunc;\r\n\r\n\t\treturn ret;\r\n\t},\r\n\r\n\r\n\tBoxShadow : (function () {\r\n\t\tvar BoxShadow = function (hShadow, vShadow, blur, spread, color, inset) {\r\n\t\t\tthis.hShadow = hShadow;\r\n\t\t\tthis.vShadow = vShadow;\r\n\t\t\tthis.blur = blur;\r\n\t\t\tthis.spread = spread;\r\n\t\t\tthis.color = color;\r\n\t\t\tthis.inset = !!inset;\r\n\t\t};\r\n\r\n\t\tBoxShadow.prototype.toString = function () {\r\n\t\t\tvar vals = [\r\n\t\t\t\tMath.round(this.hShadow) + 'px',\r\n\t\t\t\tMath.round(this.vShadow) + 'px',\r\n\t\t\t\tMath.round(this.blur) + 'px',\r\n\t\t\t\tMath.round(this.spread) + 'px',\r\n\t\t\t\tthis.color\r\n\t\t\t];\r\n\t\t\tif (this.inset) {\r\n\t\t\t\tvals.push('inset');\r\n\t\t\t}\r\n\t\t\treturn vals.join(' ');\r\n\t\t};\r\n\r\n\t\treturn BoxShadow;\r\n\t})(),\r\n\r\n\r\n\tflags : {\r\n\t\tleaveValue : 1 << 0,\r\n\t\tleaveAlpha : 1 << 1,\r\n\t\tleavePreview : 1 << 2,\r\n\t},\r\n\r\n\r\n\tenumOpts : {\r\n\t\tformat: ['auto', 'any', 'hex', 'hexa', 'rgb', 'rgba'],\r\n\t\tpreviewPosition: ['left', 'right'],\r\n\t\tmode: ['hsv', 'hvs', 'hs', 'hv'],\r\n\t\tposition: ['left', 'right', 'top', 'bottom'],\r\n\t\talphaChannel: ['auto', true, false],\r\n\t\tpaletteSetsAlpha: ['auto', true, false],\r\n\t},\r\n\r\n\r\n\tdeprecatedOpts : {\r\n\t\t//
: ( can be null)\r\n\t\t'styleElement': 'previewElement',\r\n\t\t'onFineChange': 'onInput',\r\n\t\t'overwriteImportant': 'forceStyle',\r\n\t\t'closable': 'closeButton',\r\n\t\t'insetWidth': 'controlBorderWidth',\r\n\t\t'insetColor': 'controlBorderColor',\r\n\t\t'refine': null,\r\n\t},\r\n\r\n\r\n\tdocsRef : ' ' + 'See https://jscolor.com/docs/',\r\n\r\n\r\n\t//\r\n\t// Usage:\r\n\t// var myPicker = new JSColor( [, ])\r\n\t//\r\n\t// (constructor is accessible via both 'jscolor' and 'JSColor' name)\r\n\t//\r\n\r\n\tpub : function (targetElement, opts) {\r\n\r\n\t\tvar THIS = this;\r\n\r\n\t\tif (!opts) {\r\n\t\t\topts = {};\r\n\t\t}\r\n\r\n\t\tthis.channels = {\r\n\t\t\tr: 255, // red [0-255]\r\n\t\t\tg: 255, // green [0-255]\r\n\t\t\tb: 255, // blue [0-255]\r\n\t\t\th: 0, // hue [0-360]\r\n\t\t\ts: 0, // saturation [0-100]\r\n\t\t\tv: 100, // value (brightness) [0-100]\r\n\t\t\ta: 1.0, // alpha (opacity) [0.0 - 1.0]\r\n\t\t};\r\n\r\n\t\t// General options\r\n\t\t//\r\n\t\tthis.format = 'auto'; // 'auto' | 'any' | 'hex' | 'hexa' | 'rgb' | 'rgba' - Format of the input/output value\r\n\t\tthis.value = undefined; // INITIAL color value in any supported format. To change it later, use method fromString(), fromHSVA(), fromRGBA() or channel()\r\n\t\tthis.alpha = undefined; // INITIAL alpha value. To change it later, call method channel('A', )\r\n\t\tthis.random = false; // whether to randomize the initial color. Either true | false, or an array of ranges: [minV, maxV, minS, maxS, minH, maxH, minA, maxA]\r\n\t\tthis.onChange = undefined; // called when color changes. Value can be either a function or a string with JS code.\r\n\t\tthis.onInput = undefined; // called repeatedly as the color is being changed, e.g. while dragging a slider. Value can be either a function or a string with JS code.\r\n\t\tthis.valueElement = undefined; // element that will be used to display and input the color value\r\n\t\tthis.alphaElement = undefined; // element that will be used to display and input the alpha (opacity) value\r\n\t\tthis.previewElement = undefined; // element that will preview the picked color using CSS background\r\n\t\tthis.previewPosition = 'left'; // 'left' | 'right' - position of the color preview in previewElement\r\n\t\tthis.previewSize = 32; // (px) width of the color preview displayed in previewElement\r\n\t\tthis.previewPadding = 8; // (px) space between color preview and content of the previewElement\r\n\t\tthis.required = true; // whether the associated text input must always contain a color value. If false, the input can be left empty.\r\n\t\tthis.hash = true; // whether to prefix the HEX color code with # symbol (only applicable for HEX format)\r\n\t\tthis.uppercase = true; // whether to show the HEX color code in upper case (only applicable for HEX format)\r\n\t\tthis.forceStyle = true; // whether to overwrite CSS style of the previewElement using !important flag\r\n\r\n\t\t// Color Picker options\r\n\t\t//\r\n\t\tthis.width = 181; // width of the color spectrum (in px)\r\n\t\tthis.height = 101; // height of the color spectrum (in px)\r\n\t\tthis.mode = 'HSV'; // 'HSV' | 'HVS' | 'HS' | 'HV' - layout of the color picker controls\r\n\t\tthis.alphaChannel = 'auto'; // 'auto' | true | false - if alpha channel is enabled, the alpha slider will be visible. If 'auto', it will be determined according to color format\r\n\t\tthis.position = 'bottom'; // 'left' | 'right' | 'top' | 'bottom' - position relative to the target element\r\n\t\tthis.smartPosition = true; // automatically change picker position when there is not enough space for it\r\n\t\tthis.showOnClick = true; // whether to show the picker when user clicks its target element\r\n\t\tthis.hideOnLeave = true; // whether to automatically hide the picker when user leaves its target element (e.g. upon clicking the document)\r\n\t\tthis.palette = []; // colors to be displayed in the palette, specified as an array or a string of space separated color values (in any supported format)\r\n\t\tthis.paletteCols = 10; // number of columns in the palette\r\n\t\tthis.paletteSetsAlpha = 'auto'; // 'auto' | true | false - if true, palette colors that don't specify alpha will set alpha to 1.0\r\n\t\tthis.paletteHeight = 16; // maximum height (px) of a row in the palette\r\n\t\tthis.paletteSpacing = 4; // distance (px) between color samples in the palette\r\n\t\tthis.hideOnPaletteClick = false; // when set to true, clicking the palette will also hide the color picker\r\n\t\tthis.sliderSize = 16; // px\r\n\t\tthis.crossSize = 8; // px\r\n\t\tthis.closeButton = false; // whether to display the Close button\r\n\t\tthis.closeText = 'Close';\r\n\t\tthis.buttonColor = 'rgba(0,0,0,1)'; // CSS color\r\n\t\tthis.buttonHeight = 18; // px\r\n\t\tthis.padding = 12; // px\r\n\t\tthis.backgroundColor = 'rgba(255,255,255,1)'; // CSS color\r\n\t\tthis.borderWidth = 1; // px\r\n\t\tthis.borderColor = 'rgba(187,187,187,1)'; // CSS color\r\n\t\tthis.borderRadius = 8; // px\r\n\t\tthis.controlBorderWidth = 1; // px\r\n\t\tthis.controlBorderColor = 'rgba(187,187,187,1)'; // CSS color\r\n\t\tthis.shadow = true; // whether to display a shadow\r\n\t\tthis.shadowBlur = 15; // px\r\n\t\tthis.shadowColor = 'rgba(0,0,0,0.2)'; // CSS color\r\n\t\tthis.pointerColor = 'rgba(76,76,76,1)'; // CSS color\r\n\t\tthis.pointerBorderWidth = 1; // px\r\n\t\tthis.pointerBorderColor = 'rgba(255,255,255,1)'; // CSS color\r\n\t\tthis.pointerThickness = 2; // px\r\n\t\tthis.zIndex = 5000;\r\n\t\tthis.container = undefined; // where to append the color picker (BODY element by default)\r\n\r\n\t\t// Experimental\r\n\t\t//\r\n\t\tthis.minS = 0; // min allowed saturation (0 - 100)\r\n\t\tthis.maxS = 100; // max allowed saturation (0 - 100)\r\n\t\tthis.minV = 0; // min allowed value (brightness) (0 - 100)\r\n\t\tthis.maxV = 100; // max allowed value (brightness) (0 - 100)\r\n\t\tthis.minA = 0.0; // min allowed alpha (opacity) (0.0 - 1.0)\r\n\t\tthis.maxA = 1.0; // max allowed alpha (opacity) (0.0 - 1.0)\r\n\r\n\r\n\t\t// Getter: option(name)\r\n\t\t// Setter: option(name, value)\r\n\t\t// option({name:value, ...})\r\n\t\t//\r\n\t\tthis.option = function () {\r\n\t\t\tif (!arguments.length) {\r\n\t\t\t\tthrow new Error('No option specified');\r\n\t\t\t}\r\n\r\n\t\t\tif (arguments.length === 1 && typeof arguments[0] === 'string') {\r\n\t\t\t\t// getting a single option\r\n\t\t\t\ttry {\r\n\t\t\t\t\treturn getOption(arguments[0]);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tconsole.warn(e);\r\n\t\t\t\t}\r\n\t\t\t\treturn false;\r\n\r\n\t\t\t} else if (arguments.length >= 2 && typeof arguments[0] === 'string') {\r\n\t\t\t\t// setting a single option\r\n\t\t\t\ttry {\r\n\t\t\t\t\tif (!setOption(arguments[0], arguments[1])) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tconsole.warn(e);\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\tthis.redraw(); // immediately redraws the picker, if it's displayed\r\n\t\t\t\tthis.exposeColor(); // in case some preview-related or format-related option was changed\r\n\t\t\t\treturn true;\r\n\r\n\t\t\t} else if (arguments.length === 1 && typeof arguments[0] === 'object') {\r\n\t\t\t\t// setting multiple options\r\n\t\t\t\tvar opts = arguments[0];\r\n\t\t\t\tvar success = true;\r\n\t\t\t\tfor (var opt in opts) {\r\n\t\t\t\t\tif (opts.hasOwnProperty(opt)) {\r\n\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\tif (!setOption(opt, opts[opt])) {\r\n\t\t\t\t\t\t\t\tsuccess = false;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\t\tconsole.warn(e);\r\n\t\t\t\t\t\t\tsuccess = false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthis.redraw(); // immediately redraws the picker, if it's displayed\r\n\t\t\t\tthis.exposeColor(); // in case some preview-related or format-related option was changed\r\n\t\t\t\treturn success;\r\n\t\t\t}\r\n\r\n\t\t\tthrow new Error('Invalid arguments');\r\n\t\t}\r\n\r\n\r\n\t\t// Getter: channel(name)\r\n\t\t// Setter: channel(name, value)\r\n\t\t//\r\n\t\tthis.channel = function (name, value) {\r\n\t\t\tif (typeof name !== 'string') {\r\n\t\t\t\tthrow new Error('Invalid value for channel name: ' + name);\r\n\t\t\t}\r\n\r\n\t\t\tif (value === undefined) {\r\n\t\t\t\t// getting channel value\r\n\t\t\t\tif (!this.channels.hasOwnProperty(name.toLowerCase())) {\r\n\t\t\t\t\tconsole.warn('Getting unknown channel: ' + name);\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\treturn this.channels[name.toLowerCase()];\r\n\r\n\t\t\t} else {\r\n\t\t\t\t// setting channel value\r\n\t\t\t\tvar res = false;\r\n\t\t\t\tswitch (name.toLowerCase()) {\r\n\t\t\t\t\tcase 'r': res = this.fromRGBA(value, null, null, null); break;\r\n\t\t\t\t\tcase 'g': res = this.fromRGBA(null, value, null, null); break;\r\n\t\t\t\t\tcase 'b': res = this.fromRGBA(null, null, value, null); break;\r\n\t\t\t\t\tcase 'h': res = this.fromHSVA(value, null, null, null); break;\r\n\t\t\t\t\tcase 's': res = this.fromHSVA(null, value, null, null); break;\r\n\t\t\t\t\tcase 'v': res = this.fromHSVA(null, null, value, null); break;\r\n\t\t\t\t\tcase 'a': res = this.fromHSVA(null, null, null, value); break;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tconsole.warn('Setting unknown channel: ' + name);\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\tif (res) {\r\n\t\t\t\t\tthis.redraw(); // immediately redraws the picker, if it's displayed\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\r\n\t\t// Triggers given input event(s) by:\r\n\t\t// - executing on callback specified as picker's option\r\n\t\t// - triggering standard DOM event listeners attached to the value element\r\n\t\t//\r\n\t\t// It is possible to specify multiple events separated with a space.\r\n\t\t//\r\n\t\tthis.trigger = function (eventNames) {\r\n\t\t\tvar evs = jsc.strList(eventNames);\r\n\t\t\tfor (var i = 0; i < evs.length; i += 1) {\r\n\t\t\t\tvar ev = evs[i].toLowerCase();\r\n\r\n\t\t\t\t// trigger a callback\r\n\t\t\t\tvar callbackProp = null;\r\n\t\t\t\tswitch (ev) {\r\n\t\t\t\t\tcase 'input': callbackProp = 'onInput'; break;\r\n\t\t\t\t\tcase 'change': callbackProp = 'onChange'; break;\r\n\t\t\t\t}\r\n\t\t\t\tif (callbackProp) {\r\n\t\t\t\t\tjsc.triggerCallback(this, callbackProp);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// trigger standard DOM event listeners on the value element\r\n\t\t\t\tjsc.triggerInputEvent(this.valueElement, ev, true, true);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\r\n\t\t// h: 0-360\r\n\t\t// s: 0-100\r\n\t\t// v: 0-100\r\n\t\t// a: 0.0-1.0\r\n\t\t//\r\n\t\tthis.fromHSVA = function (h, s, v, a, flags) { // null = don't change\r\n\t\t\tif (h === undefined) { h = null; }\r\n\t\t\tif (s === undefined) { s = null; }\r\n\t\t\tif (v === undefined) { v = null; }\r\n\t\t\tif (a === undefined) { a = null; }\r\n\r\n\t\t\tif (h !== null) {\r\n\t\t\t\tif (isNaN(h)) { return false; }\r\n\t\t\t\tthis.channels.h = Math.max(0, Math.min(360, h));\r\n\t\t\t}\r\n\t\t\tif (s !== null) {\r\n\t\t\t\tif (isNaN(s)) { return false; }\r\n\t\t\t\tthis.channels.s = Math.max(0, Math.min(100, this.maxS, s), this.minS);\r\n\t\t\t}\r\n\t\t\tif (v !== null) {\r\n\t\t\t\tif (isNaN(v)) { return false; }\r\n\t\t\t\tthis.channels.v = Math.max(0, Math.min(100, this.maxV, v), this.minV);\r\n\t\t\t}\r\n\t\t\tif (a !== null) {\r\n\t\t\t\tif (isNaN(a)) { return false; }\r\n\t\t\t\tthis.channels.a = this.hasAlphaChannel() ?\r\n\t\t\t\t\tMath.max(0, Math.min(1, this.maxA, a), this.minA) :\r\n\t\t\t\t\t1.0; // if alpha channel is disabled, the color should stay 100% opaque\r\n\t\t\t}\r\n\r\n\t\t\tvar rgb = jsc.HSV_RGB(\r\n\t\t\t\tthis.channels.h,\r\n\t\t\t\tthis.channels.s,\r\n\t\t\t\tthis.channels.v\r\n\t\t\t);\r\n\t\t\tthis.channels.r = rgb[0];\r\n\t\t\tthis.channels.g = rgb[1];\r\n\t\t\tthis.channels.b = rgb[2];\r\n\r\n\t\t\tthis.exposeColor(flags);\r\n\t\t\treturn true;\r\n\t\t};\r\n\r\n\r\n\t\t// r: 0-255\r\n\t\t// g: 0-255\r\n\t\t// b: 0-255\r\n\t\t// a: 0.0-1.0\r\n\t\t//\r\n\t\tthis.fromRGBA = function (r, g, b, a, flags) { // null = don't change\r\n\t\t\tif (r === undefined) { r = null; }\r\n\t\t\tif (g === undefined) { g = null; }\r\n\t\t\tif (b === undefined) { b = null; }\r\n\t\t\tif (a === undefined) { a = null; }\r\n\r\n\t\t\tif (r !== null) {\r\n\t\t\t\tif (isNaN(r)) { return false; }\r\n\t\t\t\tr = Math.max(0, Math.min(255, r));\r\n\t\t\t}\r\n\t\t\tif (g !== null) {\r\n\t\t\t\tif (isNaN(g)) { return false; }\r\n\t\t\t\tg = Math.max(0, Math.min(255, g));\r\n\t\t\t}\r\n\t\t\tif (b !== null) {\r\n\t\t\t\tif (isNaN(b)) { return false; }\r\n\t\t\t\tb = Math.max(0, Math.min(255, b));\r\n\t\t\t}\r\n\t\t\tif (a !== null) {\r\n\t\t\t\tif (isNaN(a)) { return false; }\r\n\t\t\t\tthis.channels.a = this.hasAlphaChannel() ?\r\n\t\t\t\t\tMath.max(0, Math.min(1, this.maxA, a), this.minA) :\r\n\t\t\t\t\t1.0; // if alpha channel is disabled, the color should stay 100% opaque\r\n\t\t\t}\r\n\r\n\t\t\tvar hsv = jsc.RGB_HSV(\r\n\t\t\t\tr===null ? this.channels.r : r,\r\n\t\t\t\tg===null ? this.channels.g : g,\r\n\t\t\t\tb===null ? this.channels.b : b\r\n\t\t\t);\r\n\t\t\tif (hsv[0] !== null) {\r\n\t\t\t\tthis.channels.h = Math.max(0, Math.min(360, hsv[0]));\r\n\t\t\t}\r\n\t\t\tif (hsv[2] !== 0) { // fully black color stays black through entire saturation range, so let's not change saturation\r\n\t\t\t\tthis.channels.s = Math.max(0, this.minS, Math.min(100, this.maxS, hsv[1]));\r\n\t\t\t}\r\n\t\t\tthis.channels.v = Math.max(0, this.minV, Math.min(100, this.maxV, hsv[2]));\r\n\r\n\t\t\t// update RGB according to final HSV, as some values might be trimmed\r\n\t\t\tvar rgb = jsc.HSV_RGB(this.channels.h, this.channels.s, this.channels.v);\r\n\t\t\tthis.channels.r = rgb[0];\r\n\t\t\tthis.channels.g = rgb[1];\r\n\t\t\tthis.channels.b = rgb[2];\r\n\r\n\t\t\tthis.exposeColor(flags);\r\n\t\t\treturn true;\r\n\t\t};\r\n\r\n\r\n\t\t// DEPRECATED. Use .fromHSVA() instead\r\n\t\t//\r\n\t\tthis.fromHSV = function (h, s, v, flags) {\r\n\t\t\tconsole.warn('fromHSV() method is DEPRECATED. Using fromHSVA() instead.' + jsc.docsRef);\r\n\t\t\treturn this.fromHSVA(h, s, v, null, flags);\r\n\t\t};\r\n\r\n\r\n\t\t// DEPRECATED. Use .fromRGBA() instead\r\n\t\t//\r\n\t\tthis.fromRGB = function (r, g, b, flags) {\r\n\t\t\tconsole.warn('fromRGB() method is DEPRECATED. Using fromRGBA() instead.' + jsc.docsRef);\r\n\t\t\treturn this.fromRGBA(r, g, b, null, flags);\r\n\t\t};\r\n\r\n\r\n\t\tthis.fromString = function (str, flags) {\r\n\t\t\tif (!this.required && str.trim() === '') {\r\n\t\t\t\t// setting empty string to an optional color input\r\n\t\t\t\tthis.setPreviewElementBg(null);\r\n\t\t\t\tthis.setValueElementValue('');\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\t\t\tvar color = jsc.parseColorString(str);\r\n\t\t\tif (!color) {\r\n\t\t\t\treturn false; // could not parse\r\n\t\t\t}\r\n\t\t\tif (this.format.toLowerCase() === 'any') {\r\n\t\t\t\tthis._setFormat(color.format); // adapt format\r\n\t\t\t\tif (!jsc.isAlphaFormat(this.getFormat())) {\r\n\t\t\t\t\tcolor.rgba[3] = 1.0; // when switching to a format that doesn't support alpha, set full opacity\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.fromRGBA(\r\n\t\t\t\tcolor.rgba[0],\r\n\t\t\t\tcolor.rgba[1],\r\n\t\t\t\tcolor.rgba[2],\r\n\t\t\t\tcolor.rgba[3],\r\n\t\t\t\tflags\r\n\t\t\t);\r\n\t\t\treturn true;\r\n\t\t};\r\n\r\n\r\n\t\tthis.randomize = function (minV, maxV, minS, maxS, minH, maxH, minA, maxA) {\r\n\t\t\tif (minV === undefined) { minV = 0; }\r\n\t\t\tif (maxV === undefined) { maxV = 100; }\r\n\t\t\tif (minS === undefined) { minS = 0; }\r\n\t\t\tif (maxS === undefined) { maxS = 100; }\r\n\t\t\tif (minH === undefined) { minH = 0; }\r\n\t\t\tif (maxH === undefined) { maxH = 359; }\r\n\t\t\tif (minA === undefined) { minA = 1; }\r\n\t\t\tif (maxA === undefined) { maxA = 1; }\r\n\r\n\t\t\tthis.fromHSVA(\r\n\t\t\t\tminH + Math.floor(Math.random() * (maxH - minH + 1)),\r\n\t\t\t\tminS + Math.floor(Math.random() * (maxS - minS + 1)),\r\n\t\t\t\tminV + Math.floor(Math.random() * (maxV - minV + 1)),\r\n\t\t\t\t((100 * minA) + Math.floor(Math.random() * (100 * (maxA - minA) + 1))) / 100\r\n\t\t\t);\r\n\t\t};\r\n\r\n\r\n\t\tthis.toString = function (format) {\r\n\t\t\tif (format === undefined) {\r\n\t\t\t\tformat = this.getFormat(); // format not specified -> use the current format\r\n\t\t\t}\r\n\t\t\tswitch (format.toLowerCase()) {\r\n\t\t\t\tcase 'hex': return this.toHEXString(); break;\r\n\t\t\t\tcase 'hexa': return this.toHEXAString(); break;\r\n\t\t\t\tcase 'rgb': return this.toRGBString(); break;\r\n\t\t\t\tcase 'rgba': return this.toRGBAString(); break;\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t};\r\n\r\n\r\n\t\tthis.toHEXString = function () {\r\n\t\t\treturn jsc.hexColor(\r\n\t\t\t\tthis.channels.r,\r\n\t\t\t\tthis.channels.g,\r\n\t\t\t\tthis.channels.b\r\n\t\t\t);\r\n\t\t};\r\n\r\n\r\n\t\tthis.toHEXAString = function () {\r\n\t\t\treturn jsc.hexaColor(\r\n\t\t\t\tthis.channels.r,\r\n\t\t\t\tthis.channels.g,\r\n\t\t\t\tthis.channels.b,\r\n\t\t\t\tthis.channels.a\r\n\t\t\t);\r\n\t\t};\r\n\r\n\r\n\t\tthis.toRGBString = function () {\r\n\t\t\treturn jsc.rgbColor(\r\n\t\t\t\tthis.channels.r,\r\n\t\t\t\tthis.channels.g,\r\n\t\t\t\tthis.channels.b\r\n\t\t\t);\r\n\t\t};\r\n\r\n\r\n\t\tthis.toRGBAString = function () {\r\n\t\t\treturn jsc.rgbaColor(\r\n\t\t\t\tthis.channels.r,\r\n\t\t\t\tthis.channels.g,\r\n\t\t\t\tthis.channels.b,\r\n\t\t\t\tthis.channels.a\r\n\t\t\t);\r\n\t\t};\r\n\r\n\r\n\t\tthis.toGrayscale = function () {\r\n\t\t\treturn (\r\n\t\t\t\t0.213 * this.channels.r +\r\n\t\t\t\t0.715 * this.channels.g +\r\n\t\t\t\t0.072 * this.channels.b\r\n\t\t\t);\r\n\t\t};\r\n\r\n\r\n\t\tthis.toCanvas = function () {\r\n\t\t\treturn jsc.genColorPreviewCanvas(this.toRGBAString()).canvas;\r\n\t\t};\r\n\r\n\r\n\t\tthis.toDataURL = function () {\r\n\t\t\treturn this.toCanvas().toDataURL();\r\n\t\t};\r\n\r\n\r\n\t\tthis.toBackground = function () {\r\n\t\t\treturn jsc.pub.background(this.toRGBAString());\r\n\t\t};\r\n\r\n\r\n\t\tthis.isLight = function () {\r\n\t\t\treturn this.toGrayscale() > 255 / 2;\r\n\t\t};\r\n\r\n\r\n\t\tthis.hide = function () {\r\n\t\t\tif (isPickerOwner()) {\r\n\t\t\t\tdetachPicker();\r\n\t\t\t}\r\n\t\t};\r\n\r\n\r\n\t\tthis.show = function () {\r\n\t\t\tdrawPicker();\r\n\t\t};\r\n\r\n\r\n\t\tthis.redraw = function () {\r\n\t\t\tif (isPickerOwner()) {\r\n\t\t\t\tdrawPicker();\r\n\t\t\t}\r\n\t\t};\r\n\r\n\r\n\t\tthis.getFormat = function () {\r\n\t\t\treturn this._currentFormat;\r\n\t\t};\r\n\r\n\r\n\t\tthis._setFormat = function (format) {\r\n\t\t\tthis._currentFormat = format.toLowerCase();\r\n\t\t};\r\n\r\n\r\n\t\tthis.hasAlphaChannel = function () {\r\n\t\t\tif (this.alphaChannel === 'auto') {\r\n\t\t\t\treturn (\r\n\t\t\t\t\tthis.format.toLowerCase() === 'any' || // format can change on the fly (e.g. from hex to rgba), so let's consider the alpha channel enabled\r\n\t\t\t\t\tjsc.isAlphaFormat(this.getFormat()) || // the current format supports alpha channel\r\n\t\t\t\t\tthis.alpha !== undefined || // initial alpha value is set, so we're working with alpha channel\r\n\t\t\t\t\tthis.alphaElement !== undefined // the alpha value is redirected, so we're working with alpha channel\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\treturn this.alphaChannel; // the alpha channel is explicitly set\r\n\t\t};\r\n\r\n\r\n\t\tthis.processValueInput = function (str) {\r\n\t\t\tif (!this.fromString(str)) {\r\n\t\t\t\t// could not parse the color value - let's just expose the current color\r\n\t\t\t\tthis.exposeColor();\r\n\t\t\t}\r\n\t\t};\r\n\r\n\r\n\t\tthis.processAlphaInput = function (str) {\r\n\t\t\tif (!this.fromHSVA(null, null, null, parseFloat(str))) {\r\n\t\t\t\t// could not parse the alpha value - let's just expose the current color\r\n\t\t\t\tthis.exposeColor();\r\n\t\t\t}\r\n\t\t};\r\n\r\n\r\n\t\tthis.exposeColor = function (flags) {\r\n\t\t\tvar colorStr = this.toString();\r\n\t\t\tvar fmt = this.getFormat();\r\n\r\n\t\t\t// reflect current color in data- attribute\r\n\t\t\tjsc.setDataAttr(this.targetElement, 'current-color', colorStr);\r\n\r\n\t\t\tif (!(flags & jsc.flags.leaveValue) && this.valueElement) {\r\n\t\t\t\tif (fmt === 'hex' || fmt === 'hexa') {\r\n\t\t\t\t\tif (!this.uppercase) { colorStr = colorStr.toLowerCase(); }\r\n\t\t\t\t\tif (!this.hash) { colorStr = colorStr.replace(/^#/, ''); }\r\n\t\t\t\t}\r\n\t\t\t\tthis.setValueElementValue(colorStr);\r\n\t\t\t}\r\n\r\n\t\t\tif (!(flags & jsc.flags.leaveAlpha) && this.alphaElement) {\r\n\t\t\t\tvar alphaVal = Math.round(this.channels.a * 100) / 100;\r\n\t\t\t\tthis.setAlphaElementValue(alphaVal);\r\n\t\t\t}\r\n\r\n\t\t\tif (!(flags & jsc.flags.leavePreview) && this.previewElement) {\r\n\t\t\t\tvar previewPos = null; // 'left' | 'right' (null -> fill the entire element)\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\tjsc.isTextInput(this.previewElement) || // text input\r\n\t\t\t\t\t(jsc.isButton(this.previewElement) && !jsc.isButtonEmpty(this.previewElement)) // button with text\r\n\t\t\t\t) {\r\n\t\t\t\t\tpreviewPos = this.previewPosition;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.setPreviewElementBg(this.toRGBAString());\r\n\t\t\t}\r\n\r\n\t\t\tif (isPickerOwner()) {\r\n\t\t\t\tredrawPad();\r\n\t\t\t\tredrawSld();\r\n\t\t\t\tredrawASld();\r\n\t\t\t}\r\n\t\t};\r\n\r\n\r\n\t\tthis.setPreviewElementBg = function (color) {\r\n\t\t\tif (!this.previewElement) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tvar position = null; // color preview position: null | 'left' | 'right'\r\n\t\t\tvar width = null; // color preview width: px | null = fill the entire element\r\n\t\t\tif (\r\n\t\t\t\tjsc.isTextInput(this.previewElement) || // text input\r\n\t\t\t\t(jsc.isButton(this.previewElement) && !jsc.isButtonEmpty(this.previewElement)) // button with text\r\n\t\t\t) {\r\n\t\t\t\tposition = this.previewPosition;\r\n\t\t\t\twidth = this.previewSize;\r\n\t\t\t}\r\n\r\n\t\t\tvar backgrounds = [];\r\n\r\n\t\t\tif (!color) {\r\n\t\t\t\t// there is no color preview to display -> let's remove any previous background image\r\n\t\t\t\tbackgrounds.push({\r\n\t\t\t\t\timage: 'none',\r\n\t\t\t\t\tposition: 'left top',\r\n\t\t\t\t\tsize: 'auto',\r\n\t\t\t\t\trepeat: 'no-repeat',\r\n\t\t\t\t\torigin: 'padding-box',\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\t// CSS gradient for background color preview\r\n\t\t\t\tbackgrounds.push({\r\n\t\t\t\t\timage: jsc.genColorPreviewGradient(\r\n\t\t\t\t\t\tcolor,\r\n\t\t\t\t\t\tposition,\r\n\t\t\t\t\t\twidth ? width - jsc.pub.previewSeparator.length : null\r\n\t\t\t\t\t),\r\n\t\t\t\t\tposition: 'left top',\r\n\t\t\t\t\tsize: 'auto',\r\n\t\t\t\t\trepeat: position ? 'repeat-y' : 'repeat',\r\n\t\t\t\t\torigin: 'padding-box',\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// data URL of generated PNG image with a gray transparency chessboard\r\n\t\t\t\tvar preview = jsc.genColorPreviewCanvas(\r\n\t\t\t\t\t'rgba(0,0,0,0)',\r\n\t\t\t\t\tposition ? {'left':'right', 'right':'left'}[position] : null,\r\n\t\t\t\t\twidth,\r\n\t\t\t\t\ttrue\r\n\t\t\t\t);\r\n\t\t\t\tbackgrounds.push({\r\n\t\t\t\t\timage: 'url(\\'' + preview.canvas.toDataURL() + '\\')',\r\n\t\t\t\t\tposition: (position || 'left') + ' top',\r\n\t\t\t\t\tsize: preview.width + 'px ' + preview.height + 'px',\r\n\t\t\t\t\trepeat: position ? 'repeat-y' : 'repeat',\r\n\t\t\t\t\torigin: 'padding-box',\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tvar bg = {\r\n\t\t\t\timage: [],\r\n\t\t\t\tposition: [],\r\n\t\t\t\tsize: [],\r\n\t\t\t\trepeat: [],\r\n\t\t\t\torigin: [],\r\n\t\t\t};\r\n\t\t\tfor (var i = 0; i < backgrounds.length; i += 1) {\r\n\t\t\t\tbg.image.push(backgrounds[i].image);\r\n\t\t\t\tbg.position.push(backgrounds[i].position);\r\n\t\t\t\tbg.size.push(backgrounds[i].size);\r\n\t\t\t\tbg.repeat.push(backgrounds[i].repeat);\r\n\t\t\t\tbg.origin.push(backgrounds[i].origin);\r\n\t\t\t}\r\n\r\n\t\t\t// set previewElement's background-images\r\n\t\t\tvar sty = {\r\n\t\t\t\t'background-image': bg.image.join(', '),\r\n\t\t\t\t'background-position': bg.position.join(', '),\r\n\t\t\t\t'background-size': bg.size.join(', '),\r\n\t\t\t\t'background-repeat': bg.repeat.join(', '),\r\n\t\t\t\t'background-origin': bg.origin.join(', '),\r\n\t\t\t};\r\n\t\t\tjsc.setStyle(this.previewElement, sty, this.forceStyle);\r\n\r\n\r\n\t\t\t// set/restore previewElement's padding\r\n\t\t\tvar padding = {\r\n\t\t\t\tleft: null,\r\n\t\t\t\tright: null,\r\n\t\t\t};\r\n\t\t\tif (position) {\r\n\t\t\t\tpadding[position] = (this.previewSize + this.previewPadding) + 'px';\r\n\t\t\t}\r\n\r\n\t\t\tvar sty = {\r\n\t\t\t\t'padding-left': padding.left,\r\n\t\t\t\t'padding-right': padding.right,\r\n\t\t\t};\r\n\t\t\tjsc.setStyle(this.previewElement, sty, this.forceStyle, true);\r\n\t\t};\r\n\r\n\r\n\t\tthis.setValueElementValue = function (str) {\r\n\t\t\tif (this.valueElement) {\r\n\t\t\t\tif (jsc.nodeName(this.valueElement) === 'input') {\r\n\t\t\t\t\tthis.valueElement.value = str;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.valueElement.innerHTML = str;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\r\n\t\tthis.setAlphaElementValue = function (str) {\r\n\t\t\tif (this.alphaElement) {\r\n\t\t\t\tif (jsc.nodeName(this.alphaElement) === 'input') {\r\n\t\t\t\t\tthis.alphaElement.value = str;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.alphaElement.innerHTML = str;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\r\n\t\tthis._processParentElementsInDOM = function () {\r\n\t\t\tif (this._parentElementsProcessed) { return; }\r\n\t\t\tthis._parentElementsProcessed = true;\r\n\r\n\t\t\tvar elm = this.targetElement;\r\n\t\t\tdo {\r\n\t\t\t\t// If the target element or one of its parent nodes has fixed position,\r\n\t\t\t\t// then use fixed positioning instead\r\n\t\t\t\tvar compStyle = jsc.getCompStyle(elm);\r\n\t\t\t\tif (compStyle.position && compStyle.position.toLowerCase() === 'fixed') {\r\n\t\t\t\t\tthis.fixed = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (elm !== this.targetElement) {\r\n\t\t\t\t\t// Ensure to attach onParentScroll only once to each parent element\r\n\t\t\t\t\t// (multiple targetElements can share the same parent nodes)\r\n\t\t\t\t\t//\r\n\t\t\t\t\t// Note: It's not just offsetParents that can be scrollable,\r\n\t\t\t\t\t// that's why we loop through all parent nodes\r\n\t\t\t\t\tif (!jsc.getData(elm, 'hasScrollListener')) {\r\n\t\t\t\t\t\telm.addEventListener('scroll', jsc.onParentScroll, false);\r\n\t\t\t\t\t\tjsc.setData(elm, 'hasScrollListener', true);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} while ((elm = elm.parentNode) && jsc.nodeName(elm) !== 'body');\r\n\t\t};\r\n\r\n\r\n\t\tthis.tryHide = function () {\r\n\t\t\tif (this.hideOnLeave) {\r\n\t\t\t\tthis.hide();\r\n\t\t\t}\r\n\t\t};\r\n\r\n\r\n\t\tthis.set__palette = function (val) {\r\n\t\t\tthis.palette = val;\r\n\t\t\tthis._palette = jsc.parsePaletteValue(val);\r\n\t\t\tthis._paletteHasTransparency = jsc.containsTranparentColor(this._palette);\r\n\t\t};\r\n\r\n\r\n\t\tfunction setOption (option, value) {\r\n\t\t\tif (typeof option !== 'string') {\r\n\t\t\t\tthrow new Error('Invalid value for option name: ' + option);\r\n\t\t\t}\r\n\r\n\t\t\t// enum option\r\n\t\t\tif (jsc.enumOpts.hasOwnProperty(option)) {\r\n\t\t\t\tif (typeof value === 'string') { // enum string values are case insensitive\r\n\t\t\t\t\tvalue = value.toLowerCase();\r\n\t\t\t\t}\r\n\t\t\t\tif (jsc.enumOpts[option].indexOf(value) === -1) {\r\n\t\t\t\t\tthrow new Error('Option \\'' + option + '\\' has invalid value: ' + value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// deprecated option\r\n\t\t\tif (jsc.deprecatedOpts.hasOwnProperty(option)) {\r\n\t\t\t\tvar oldOpt = option;\r\n\t\t\t\tvar newOpt = jsc.deprecatedOpts[option];\r\n\t\t\t\tif (newOpt) {\r\n\t\t\t\t\t// if we have a new name for this option, let's log a warning and use the new name\r\n\t\t\t\t\tconsole.warn('Option \\'%s\\' is DEPRECATED, using \\'%s\\' instead.' + jsc.docsRef, oldOpt, newOpt);\r\n\t\t\t\t\toption = newOpt;\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// new name not available for the option\r\n\t\t\t\t\tthrow new Error('Option \\'' + option + '\\' is DEPRECATED');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar setter = 'set__' + option;\r\n\r\n\t\t\tif (typeof THIS[setter] === 'function') { // a setter exists for this option\r\n\t\t\t\tTHIS[setter](value);\r\n\t\t\t\treturn true;\r\n\r\n\t\t\t} else if (option in THIS) { // option exists as a property\r\n\t\t\t\tTHIS[option] = value;\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\t\t\tthrow new Error('Unrecognized configuration option: ' + option);\r\n\t\t}\r\n\r\n\r\n\t\tfunction getOption (option) {\r\n\t\t\tif (typeof option !== 'string') {\r\n\t\t\t\tthrow new Error('Invalid value for option name: ' + option);\r\n\t\t\t}\r\n\r\n\t\t\t// deprecated option\r\n\t\t\tif (jsc.deprecatedOpts.hasOwnProperty(option)) {\r\n\t\t\t\tvar oldOpt = option;\r\n\t\t\t\tvar newOpt = jsc.deprecatedOpts[option];\r\n\t\t\t\tif (newOpt) {\r\n\t\t\t\t\t// if we have a new name for this option, let's log a warning and use the new name\r\n\t\t\t\t\tconsole.warn('Option \\'%s\\' is DEPRECATED, using \\'%s\\' instead.' + jsc.docsRef, oldOpt, newOpt);\r\n\t\t\t\t\toption = newOpt;\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// new name not available for the option\r\n\t\t\t\t\tthrow new Error('Option \\'' + option + '\\' is DEPRECATED');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar getter = 'get__' + option;\r\n\r\n\t\t\tif (typeof THIS[getter] === 'function') { // a getter exists for this option\r\n\t\t\t\treturn THIS[getter](value);\r\n\r\n\t\t\t} else if (option in THIS) { // option exists as a property\r\n\t\t\t\treturn THIS[option];\r\n\t\t\t}\r\n\r\n\t\t\tthrow new Error('Unrecognized configuration option: ' + option);\r\n\t\t}\r\n\r\n\r\n\t\tfunction detachPicker () {\r\n\t\t\tjsc.removeClass(THIS.targetElement, jsc.pub.activeClassName);\r\n\t\t\tjsc.picker.wrap.parentNode.removeChild(jsc.picker.wrap);\r\n\t\t\tdelete jsc.picker.owner;\r\n\t\t}\r\n\r\n\r\n\t\tfunction drawPicker () {\r\n\r\n\t\t\t// At this point, when drawing the picker, we know what the parent elements are\r\n\t\t\t// and we can do all related DOM operations, such as registering events on them\r\n\t\t\t// or checking their positioning\r\n\t\t\tTHIS._processParentElementsInDOM();\r\n\r\n\t\t\tif (!jsc.picker) {\r\n\t\t\t\tjsc.picker = {\r\n\t\t\t\t\towner: null, // owner picker instance\r\n\t\t\t\t\twrap : jsc.createEl('div'),\r\n\t\t\t\t\tbox : jsc.createEl('div'),\r\n\t\t\t\t\tboxS : jsc.createEl('div'), // shadow area\r\n\t\t\t\t\tboxB : jsc.createEl('div'), // border\r\n\t\t\t\t\tpad : jsc.createEl('div'),\r\n\t\t\t\t\tpadB : jsc.createEl('div'), // border\r\n\t\t\t\t\tpadM : jsc.createEl('div'), // mouse/touch area\r\n\t\t\t\t\tpadCanvas : jsc.createPadCanvas(),\r\n\t\t\t\t\tcross : jsc.createEl('div'),\r\n\t\t\t\t\tcrossBY : jsc.createEl('div'), // border Y\r\n\t\t\t\t\tcrossBX : jsc.createEl('div'), // border X\r\n\t\t\t\t\tcrossLY : jsc.createEl('div'), // line Y\r\n\t\t\t\t\tcrossLX : jsc.createEl('div'), // line X\r\n\t\t\t\t\tsld : jsc.createEl('div'), // slider\r\n\t\t\t\t\tsldB : jsc.createEl('div'), // border\r\n\t\t\t\t\tsldM : jsc.createEl('div'), // mouse/touch area\r\n\t\t\t\t\tsldGrad : jsc.createSliderGradient(),\r\n\t\t\t\t\tsldPtrS : jsc.createEl('div'), // slider pointer spacer\r\n\t\t\t\t\tsldPtrIB : jsc.createEl('div'), // slider pointer inner border\r\n\t\t\t\t\tsldPtrMB : jsc.createEl('div'), // slider pointer middle border\r\n\t\t\t\t\tsldPtrOB : jsc.createEl('div'), // slider pointer outer border\r\n\t\t\t\t\tasld : jsc.createEl('div'), // alpha slider\r\n\t\t\t\t\tasldB : jsc.createEl('div'), // border\r\n\t\t\t\t\tasldM : jsc.createEl('div'), // mouse/touch area\r\n\t\t\t\t\tasldGrad : jsc.createASliderGradient(),\r\n\t\t\t\t\tasldPtrS : jsc.createEl('div'), // slider pointer spacer\r\n\t\t\t\t\tasldPtrIB : jsc.createEl('div'), // slider pointer inner border\r\n\t\t\t\t\tasldPtrMB : jsc.createEl('div'), // slider pointer middle border\r\n\t\t\t\t\tasldPtrOB : jsc.createEl('div'), // slider pointer outer border\r\n\t\t\t\t\tpal : jsc.createEl('div'), // palette\r\n\t\t\t\t\tbtn : jsc.createEl('div'),\r\n\t\t\t\t\tbtnT : jsc.createEl('span'), // text\r\n\t\t\t\t};\r\n\r\n\t\t\t\tjsc.picker.pad.appendChild(jsc.picker.padCanvas.elm);\r\n\t\t\t\tjsc.picker.padB.appendChild(jsc.picker.pad);\r\n\t\t\t\tjsc.picker.cross.appendChild(jsc.picker.crossBY);\r\n\t\t\t\tjsc.picker.cross.appendChild(jsc.picker.crossBX);\r\n\t\t\t\tjsc.picker.cross.appendChild(jsc.picker.crossLY);\r\n\t\t\t\tjsc.picker.cross.appendChild(jsc.picker.crossLX);\r\n\t\t\t\tjsc.picker.padB.appendChild(jsc.picker.cross);\r\n\t\t\t\tjsc.picker.box.appendChild(jsc.picker.padB);\r\n\t\t\t\tjsc.picker.box.appendChild(jsc.picker.padM);\r\n\r\n\t\t\t\tjsc.picker.sld.appendChild(jsc.picker.sldGrad.elm);\r\n\t\t\t\tjsc.picker.sldB.appendChild(jsc.picker.sld);\r\n\t\t\t\tjsc.picker.sldB.appendChild(jsc.picker.sldPtrOB);\r\n\t\t\t\tjsc.picker.sldPtrOB.appendChild(jsc.picker.sldPtrMB);\r\n\t\t\t\tjsc.picker.sldPtrMB.appendChild(jsc.picker.sldPtrIB);\r\n\t\t\t\tjsc.picker.sldPtrIB.appendChild(jsc.picker.sldPtrS);\r\n\t\t\t\tjsc.picker.box.appendChild(jsc.picker.sldB);\r\n\t\t\t\tjsc.picker.box.appendChild(jsc.picker.sldM);\r\n\r\n\t\t\t\tjsc.picker.asld.appendChild(jsc.picker.asldGrad.elm);\r\n\t\t\t\tjsc.picker.asldB.appendChild(jsc.picker.asld);\r\n\t\t\t\tjsc.picker.asldB.appendChild(jsc.picker.asldPtrOB);\r\n\t\t\t\tjsc.picker.asldPtrOB.appendChild(jsc.picker.asldPtrMB);\r\n\t\t\t\tjsc.picker.asldPtrMB.appendChild(jsc.picker.asldPtrIB);\r\n\t\t\t\tjsc.picker.asldPtrIB.appendChild(jsc.picker.asldPtrS);\r\n\t\t\t\tjsc.picker.box.appendChild(jsc.picker.asldB);\r\n\t\t\t\tjsc.picker.box.appendChild(jsc.picker.asldM);\r\n\r\n\t\t\t\tjsc.picker.box.appendChild(jsc.picker.pal);\r\n\r\n\t\t\t\tjsc.picker.btn.appendChild(jsc.picker.btnT);\r\n\t\t\t\tjsc.picker.box.appendChild(jsc.picker.btn);\r\n\r\n\t\t\t\tjsc.picker.boxB.appendChild(jsc.picker.box);\r\n\t\t\t\tjsc.picker.wrap.appendChild(jsc.picker.boxS);\r\n\t\t\t\tjsc.picker.wrap.appendChild(jsc.picker.boxB);\r\n\r\n\t\t\t\tjsc.picker.wrap.addEventListener('touchstart', jsc.onPickerTouchStart,\r\n\t\t\t\t\tjsc.isPassiveEventSupported ? {passive: false} : false);\r\n\t\t\t}\r\n\r\n\t\t\tvar p = jsc.picker;\r\n\r\n\t\t\tvar displaySlider = !!jsc.getSliderChannel(THIS);\r\n\t\t\tvar displayAlphaSlider = THIS.hasAlphaChannel();\r\n\t\t\tvar pickerDims = jsc.getPickerDims(THIS);\r\n\t\t\tvar crossOuterSize = (2 * THIS.pointerBorderWidth + THIS.pointerThickness + 2 * THIS.crossSize);\r\n\t\t\tvar controlPadding = jsc.getControlPadding(THIS);\r\n\t\t\tvar borderRadius = Math.min(\r\n\t\t\t\tTHIS.borderRadius,\r\n\t\t\t\tMath.round(THIS.padding * Math.PI)); // px\r\n\t\t\tvar padCursor = 'crosshair';\r\n\r\n\t\t\t// wrap\r\n\t\t\tp.wrap.className = 'jscolor-picker-wrap';\r\n\t\t\tp.wrap.style.clear = 'both';\r\n\t\t\tp.wrap.style.width = pickerDims.borderW + 'px';\r\n\t\t\tp.wrap.style.height = pickerDims.borderH + 'px';\r\n\t\t\tp.wrap.style.zIndex = THIS.zIndex;\r\n\r\n\t\t\t// picker\r\n\t\t\tp.box.className = 'jscolor-picker';\r\n\t\t\tp.box.style.width = pickerDims.paddedW + 'px';\r\n\t\t\tp.box.style.height = pickerDims.paddedH + 'px';\r\n\t\t\tp.box.style.position = 'relative';\r\n\r\n\t\t\t// picker shadow\r\n\t\t\tp.boxS.className = 'jscolor-picker-shadow';\r\n\t\t\tp.boxS.style.position = 'absolute';\r\n\t\t\tp.boxS.style.left = '0';\r\n\t\t\tp.boxS.style.top = '0';\r\n\t\t\tp.boxS.style.width = '100%';\r\n\t\t\tp.boxS.style.height = '100%';\r\n\t\t\tjsc.setBorderRadius(p.boxS, borderRadius + 'px');\r\n\r\n\t\t\t// picker border\r\n\t\t\tp.boxB.className = 'jscolor-picker-border';\r\n\t\t\tp.boxB.style.position = 'relative';\r\n\t\t\tp.boxB.style.border = THIS.borderWidth + 'px solid';\r\n\t\t\tp.boxB.style.borderColor = THIS.borderColor;\r\n\t\t\tp.boxB.style.background = THIS.backgroundColor;\r\n\t\t\tjsc.setBorderRadius(p.boxB, borderRadius + 'px');\r\n\r\n\t\t\t// IE hack:\r\n\t\t\t// If the element is transparent, IE will trigger the event on the elements under it,\r\n\t\t\t// e.g. on Canvas or on elements with border\r\n\t\t\tp.padM.style.background = 'rgba(255,0,0,.2)';\r\n\t\t\tp.sldM.style.background = 'rgba(0,255,0,.2)';\r\n\t\t\tp.asldM.style.background = 'rgba(0,0,255,.2)';\r\n\r\n\t\t\tp.padM.style.opacity =\r\n\t\t\tp.sldM.style.opacity =\r\n\t\t\tp.asldM.style.opacity =\r\n\t\t\t\t'0';\r\n\r\n\t\t\t// pad\r\n\t\t\tp.pad.style.position = 'relative';\r\n\t\t\tp.pad.style.width = THIS.width + 'px';\r\n\t\t\tp.pad.style.height = THIS.height + 'px';\r\n\r\n\t\t\t// pad - color spectrum (HSV and HVS)\r\n\t\t\tp.padCanvas.draw(THIS.width, THIS.height, jsc.getPadYChannel(THIS));\r\n\r\n\t\t\t// pad border\r\n\t\t\tp.padB.style.position = 'absolute';\r\n\t\t\tp.padB.style.left = THIS.padding + 'px';\r\n\t\t\tp.padB.style.top = THIS.padding + 'px';\r\n\t\t\tp.padB.style.border = THIS.controlBorderWidth + 'px solid';\r\n\t\t\tp.padB.style.borderColor = THIS.controlBorderColor;\r\n\r\n\t\t\t// pad mouse area\r\n\t\t\tp.padM.style.position = 'absolute';\r\n\t\t\tp.padM.style.left = 0 + 'px';\r\n\t\t\tp.padM.style.top = 0 + 'px';\r\n\t\t\tp.padM.style.width = (THIS.padding + 2 * THIS.controlBorderWidth + THIS.width + controlPadding) + 'px';\r\n\t\t\tp.padM.style.height = (2 * THIS.controlBorderWidth + 2 * THIS.padding + THIS.height) + 'px';\r\n\t\t\tp.padM.style.cursor = padCursor;\r\n\t\t\tjsc.setData(p.padM, {\r\n\t\t\t\tinstance: THIS,\r\n\t\t\t\tcontrol: 'pad',\r\n\t\t\t})\r\n\r\n\t\t\t// pad cross\r\n\t\t\tp.cross.style.position = 'absolute';\r\n\t\t\tp.cross.style.left =\r\n\t\t\tp.cross.style.top =\r\n\t\t\t\t'0';\r\n\t\t\tp.cross.style.width =\r\n\t\t\tp.cross.style.height =\r\n\t\t\t\tcrossOuterSize + 'px';\r\n\r\n\t\t\t// pad cross border Y and X\r\n\t\t\tp.crossBY.style.position =\r\n\t\t\tp.crossBX.style.position =\r\n\t\t\t\t'absolute';\r\n\t\t\tp.crossBY.style.background =\r\n\t\t\tp.crossBX.style.background =\r\n\t\t\t\tTHIS.pointerBorderColor;\r\n\t\t\tp.crossBY.style.width =\r\n\t\t\tp.crossBX.style.height =\r\n\t\t\t\t(2 * THIS.pointerBorderWidth + THIS.pointerThickness) + 'px';\r\n\t\t\tp.crossBY.style.height =\r\n\t\t\tp.crossBX.style.width =\r\n\t\t\t\tcrossOuterSize + 'px';\r\n\t\t\tp.crossBY.style.left =\r\n\t\t\tp.crossBX.style.top =\r\n\t\t\t\t(Math.floor(crossOuterSize / 2) - Math.floor(THIS.pointerThickness / 2) - THIS.pointerBorderWidth) + 'px';\r\n\t\t\tp.crossBY.style.top =\r\n\t\t\tp.crossBX.style.left =\r\n\t\t\t\t'0';\r\n\r\n\t\t\t// pad cross line Y and X\r\n\t\t\tp.crossLY.style.position =\r\n\t\t\tp.crossLX.style.position =\r\n\t\t\t\t'absolute';\r\n\t\t\tp.crossLY.style.background =\r\n\t\t\tp.crossLX.style.background =\r\n\t\t\t\tTHIS.pointerColor;\r\n\t\t\tp.crossLY.style.height =\r\n\t\t\tp.crossLX.style.width =\r\n\t\t\t\t(crossOuterSize - 2 * THIS.pointerBorderWidth) + 'px';\r\n\t\t\tp.crossLY.style.width =\r\n\t\t\tp.crossLX.style.height =\r\n\t\t\t\tTHIS.pointerThickness + 'px';\r\n\t\t\tp.crossLY.style.left =\r\n\t\t\tp.crossLX.style.top =\r\n\t\t\t\t(Math.floor(crossOuterSize / 2) - Math.floor(THIS.pointerThickness / 2)) + 'px';\r\n\t\t\tp.crossLY.style.top =\r\n\t\t\tp.crossLX.style.left =\r\n\t\t\t\tTHIS.pointerBorderWidth + 'px';\r\n\r\n\r\n\t\t\t// slider\r\n\t\t\tp.sld.style.overflow = 'hidden';\r\n\t\t\tp.sld.style.width = THIS.sliderSize + 'px';\r\n\t\t\tp.sld.style.height = THIS.height + 'px';\r\n\r\n\t\t\t// slider gradient\r\n\t\t\tp.sldGrad.draw(THIS.sliderSize, THIS.height, '#000', '#000');\r\n\r\n\t\t\t// slider border\r\n\t\t\tp.sldB.style.display = displaySlider ? 'block' : 'none';\r\n\t\t\tp.sldB.style.position = 'absolute';\r\n\t\t\tp.sldB.style.left = (THIS.padding + THIS.width + 2 * THIS.controlBorderWidth + 2 * controlPadding) + 'px';\r\n\t\t\tp.sldB.style.top = THIS.padding + 'px';\r\n\t\t\tp.sldB.style.border = THIS.controlBorderWidth + 'px solid';\r\n\t\t\tp.sldB.style.borderColor = THIS.controlBorderColor;\r\n\r\n\t\t\t// slider mouse area\r\n\t\t\tp.sldM.style.display = displaySlider ? 'block' : 'none';\r\n\t\t\tp.sldM.style.position = 'absolute';\r\n\t\t\tp.sldM.style.left = (THIS.padding + THIS.width + 2 * THIS.controlBorderWidth + controlPadding) + 'px';\r\n\t\t\tp.sldM.style.top = 0 + 'px';\r\n\t\t\tp.sldM.style.width = (\r\n\t\t\t\t\t(THIS.sliderSize + 2 * controlPadding + 2 * THIS.controlBorderWidth) +\r\n\t\t\t\t\t(displayAlphaSlider ? 0 : Math.max(0, THIS.padding - controlPadding)) // remaining padding to the right edge\r\n\t\t\t\t) + 'px';\r\n\t\t\tp.sldM.style.height = (2 * THIS.controlBorderWidth + 2 * THIS.padding + THIS.height) + 'px';\r\n\t\t\tp.sldM.style.cursor = 'default';\r\n\t\t\tjsc.setData(p.sldM, {\r\n\t\t\t\tinstance: THIS,\r\n\t\t\t\tcontrol: 'sld',\r\n\t\t\t});\r\n\r\n\t\t\t// slider pointer inner and outer border\r\n\t\t\tp.sldPtrIB.style.border =\r\n\t\t\tp.sldPtrOB.style.border =\r\n\t\t\t\tTHIS.pointerBorderWidth + 'px solid ' + THIS.pointerBorderColor;\r\n\r\n\t\t\t// slider pointer outer border\r\n\t\t\tp.sldPtrOB.style.position = 'absolute';\r\n\t\t\tp.sldPtrOB.style.left = -(2 * THIS.pointerBorderWidth + THIS.pointerThickness) + 'px';\r\n\t\t\tp.sldPtrOB.style.top = '0';\r\n\r\n\t\t\t// slider pointer middle border\r\n\t\t\tp.sldPtrMB.style.border = THIS.pointerThickness + 'px solid ' + THIS.pointerColor;\r\n\r\n\t\t\t// slider pointer spacer\r\n\t\t\tp.sldPtrS.style.width = THIS.sliderSize + 'px';\r\n\t\t\tp.sldPtrS.style.height = jsc.pub.sliderInnerSpace + 'px';\r\n\r\n\r\n\t\t\t// alpha slider\r\n\t\t\tp.asld.style.overflow = 'hidden';\r\n\t\t\tp.asld.style.width = THIS.sliderSize + 'px';\r\n\t\t\tp.asld.style.height = THIS.height + 'px';\r\n\r\n\t\t\t// alpha slider gradient\r\n\t\t\tp.asldGrad.draw(THIS.sliderSize, THIS.height, '#000');\r\n\r\n\t\t\t// alpha slider border\r\n\t\t\tp.asldB.style.display = displayAlphaSlider ? 'block' : 'none';\r\n\t\t\tp.asldB.style.position = 'absolute';\r\n\t\t\tp.asldB.style.left = (\r\n\t\t\t\t\t(THIS.padding + THIS.width + 2 * THIS.controlBorderWidth + controlPadding) +\r\n\t\t\t\t\t(displaySlider ? (THIS.sliderSize + 3 * controlPadding + 2 * THIS.controlBorderWidth) : 0)\r\n\t\t\t\t) + 'px';\r\n\t\t\tp.asldB.style.top = THIS.padding + 'px';\r\n\t\t\tp.asldB.style.border = THIS.controlBorderWidth + 'px solid';\r\n\t\t\tp.asldB.style.borderColor = THIS.controlBorderColor;\r\n\r\n\t\t\t// alpha slider mouse area\r\n\t\t\tp.asldM.style.display = displayAlphaSlider ? 'block' : 'none';\r\n\t\t\tp.asldM.style.position = 'absolute';\r\n\t\t\tp.asldM.style.left = (\r\n\t\t\t\t\t(THIS.padding + THIS.width + 2 * THIS.controlBorderWidth + controlPadding) +\r\n\t\t\t\t\t(displaySlider ? (THIS.sliderSize + 2 * controlPadding + 2 * THIS.controlBorderWidth) : 0)\r\n\t\t\t\t) + 'px';\r\n\t\t\tp.asldM.style.top = 0 + 'px';\r\n\t\t\tp.asldM.style.width = (\r\n\t\t\t\t\t(THIS.sliderSize + 2 * controlPadding + 2 * THIS.controlBorderWidth) +\r\n\t\t\t\t\tMath.max(0, THIS.padding - controlPadding) // remaining padding to the right edge\r\n\t\t\t\t) + 'px';\r\n\t\t\tp.asldM.style.height = (2 * THIS.controlBorderWidth + 2 * THIS.padding + THIS.height) + 'px';\r\n\t\t\tp.asldM.style.cursor = 'default';\r\n\t\t\tjsc.setData(p.asldM, {\r\n\t\t\t\tinstance: THIS,\r\n\t\t\t\tcontrol: 'asld',\r\n\t\t\t})\r\n\r\n\t\t\t// alpha slider pointer inner and outer border\r\n\t\t\tp.asldPtrIB.style.border =\r\n\t\t\tp.asldPtrOB.style.border =\r\n\t\t\t\tTHIS.pointerBorderWidth + 'px solid ' + THIS.pointerBorderColor;\r\n\r\n\t\t\t// alpha slider pointer outer border\r\n\t\t\tp.asldPtrOB.style.position = 'absolute';\r\n\t\t\tp.asldPtrOB.style.left = -(2 * THIS.pointerBorderWidth + THIS.pointerThickness) + 'px';\r\n\t\t\tp.asldPtrOB.style.top = '0';\r\n\r\n\t\t\t// alpha slider pointer middle border\r\n\t\t\tp.asldPtrMB.style.border = THIS.pointerThickness + 'px solid ' + THIS.pointerColor;\r\n\r\n\t\t\t// alpha slider pointer spacer\r\n\t\t\tp.asldPtrS.style.width = THIS.sliderSize + 'px';\r\n\t\t\tp.asldPtrS.style.height = jsc.pub.sliderInnerSpace + 'px';\r\n\r\n\r\n\t\t\t// palette\r\n\t\t\tp.pal.className = 'jscolor-palette';\r\n\t\t\tp.pal.style.display = pickerDims.palette.rows ? 'block' : 'none';\r\n\t\t\tp.pal.style.position = 'absolute';\r\n\t\t\tp.pal.style.left = THIS.padding + 'px';\r\n\t\t\tp.pal.style.top = (2 * THIS.controlBorderWidth + 2 * THIS.padding + THIS.height) + 'px';\r\n\r\n\t\t\t// palette's color samples\r\n\r\n\t\t\tp.pal.innerHTML = '';\r\n\r\n\t\t\tvar chessboard = jsc.genColorPreviewCanvas('rgba(0,0,0,0)');\r\n\r\n\t\t\tvar si = 0; // color sample's index\r\n\t\t\tfor (var r = 0; r < pickerDims.palette.rows; r++) {\r\n\t\t\t\tfor (var c = 0; c < pickerDims.palette.cols && si < THIS._palette.length; c++, si++) {\r\n\t\t\t\t\tvar sampleColor = THIS._palette[si];\r\n\t\t\t\t\tvar sampleCssColor = jsc.rgbaColor.apply(null, sampleColor.rgba);\r\n\r\n\t\t\t\t\tvar sc = jsc.createEl('div'); // color sample's color\r\n\t\t\t\t\tsc.style.width = (pickerDims.palette.cellW - 2 * THIS.controlBorderWidth) + 'px';\r\n\t\t\t\t\tsc.style.height = (pickerDims.palette.cellH - 2 * THIS.controlBorderWidth) + 'px';\r\n\t\t\t\t\tsc.style.backgroundColor = sampleCssColor;\r\n\r\n\t\t\t\t\tvar sw = jsc.createEl('div'); // color sample's wrap\r\n\t\t\t\t\tsw.className = 'jscolor-palette-sample';\r\n\t\t\t\t\tsw.style.display = 'block';\r\n\t\t\t\t\tsw.style.position = 'absolute';\r\n\t\t\t\t\tsw.style.left = (\r\n\t\t\t\t\t\t\tpickerDims.palette.cols <= 1 ? 0 :\r\n\t\t\t\t\t\t\tMath.round(10 * (c * ((pickerDims.contentW - pickerDims.palette.cellW) / (pickerDims.palette.cols - 1)))) / 10\r\n\t\t\t\t\t\t) + 'px';\r\n\t\t\t\t\tsw.style.top = (r * (pickerDims.palette.cellH + THIS.paletteSpacing)) + 'px';\r\n\t\t\t\t\tsw.style.border = THIS.controlBorderWidth + 'px solid';\r\n\t\t\t\t\tsw.style.borderColor = THIS.controlBorderColor;\r\n\t\t\t\t\tsw.style.cursor = 'pointer';\r\n\t\t\t\t\tif (sampleColor.rgba[3] !== null && sampleColor.rgba[3] < 1.0) { // only create chessboard background if the sample has transparency\r\n\t\t\t\t\t\tsw.style.backgroundImage = 'url(\\'' + chessboard.canvas.toDataURL() + '\\')';\r\n\t\t\t\t\t\tsw.style.backgroundRepeat = 'repeat';\r\n\t\t\t\t\t\tsw.style.backgroundPosition = 'center center';\r\n\t\t\t\t\t}\r\n\t\t\t\t\tjsc.setData(sw, {\r\n\t\t\t\t\t\tinstance: THIS,\r\n\t\t\t\t\t\tcontrol: 'palette-sample',\r\n\t\t\t\t\t\tcolor: sampleColor,\r\n\t\t\t\t\t})\r\n\t\t\t\t\tsw.addEventListener('click', jsc.onPaletteSampleClick, false);\r\n\t\t\t\t\tsw.appendChild(sc);\r\n\t\t\t\t\tp.pal.appendChild(sw);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\r\n\t\t\t// the Close button\r\n\t\t\tfunction setBtnBorder () {\r\n\t\t\t\tvar insetColors = THIS.controlBorderColor.split(/\\s+/);\r\n\t\t\t\tvar outsetColor = insetColors.length < 2 ? insetColors[0] : insetColors[1] + ' ' + insetColors[0] + ' ' + insetColors[0] + ' ' + insetColors[1];\r\n\t\t\t\tp.btn.style.borderColor = outsetColor;\r\n\t\t\t}\r\n\t\t\tvar btnPadding = 15; // px\r\n\t\t\tp.btn.className = 'jscolor-btn-close';\r\n\t\t\tp.btn.style.display = THIS.closeButton ? 'block' : 'none';\r\n\t\t\tp.btn.style.position = 'absolute';\r\n\t\t\tp.btn.style.left = THIS.padding + 'px';\r\n\t\t\tp.btn.style.bottom = THIS.padding + 'px';\r\n\t\t\tp.btn.style.padding = '0 ' + btnPadding + 'px';\r\n\t\t\tp.btn.style.maxWidth = (pickerDims.contentW - 2 * THIS.controlBorderWidth - 2 * btnPadding) + 'px';\r\n\t\t\tp.btn.style.overflow = 'hidden';\r\n\t\t\tp.btn.style.height = THIS.buttonHeight + 'px';\r\n\t\t\tp.btn.style.whiteSpace = 'nowrap';\r\n\t\t\tp.btn.style.border = THIS.controlBorderWidth + 'px solid';\r\n\t\t\tsetBtnBorder();\r\n\t\t\tp.btn.style.color = THIS.buttonColor;\r\n\t\t\tp.btn.style.font = '12px sans-serif';\r\n\t\t\tp.btn.style.textAlign = 'center';\r\n\t\t\tp.btn.style.cursor = 'pointer';\r\n\t\t\tp.btn.onmousedown = function () {\r\n\t\t\t\tTHIS.hide();\r\n\t\t\t};\r\n\t\t\tp.btnT.style.lineHeight = THIS.buttonHeight + 'px';\r\n\t\t\tp.btnT.innerHTML = '';\r\n\t\t\tp.btnT.appendChild(window.document.createTextNode(THIS.closeText));\r\n\r\n\t\t\t// reposition the pointers\r\n\t\t\tredrawPad();\r\n\t\t\tredrawSld();\r\n\t\t\tredrawASld();\r\n\r\n\t\t\t// If we are changing the owner without first closing the picker,\r\n\t\t\t// make sure to first deal with the old owner\r\n\t\t\tif (jsc.picker.owner && jsc.picker.owner !== THIS) {\r\n\t\t\t\tjsc.removeClass(jsc.picker.owner.targetElement, jsc.pub.activeClassName);\r\n\t\t\t}\r\n\r\n\t\t\t// Set a new picker owner\r\n\t\t\tjsc.picker.owner = THIS;\r\n\r\n\t\t\t// The redrawPosition() method needs picker.owner to be set, that's why we call it here,\r\n\t\t\t// after setting the owner\r\n\t\t\tif (THIS.container === window.document.body) {\r\n\t\t\t\tjsc.redrawPosition();\r\n\t\t\t} else {\r\n\t\t\t\tjsc._drawPosition(THIS, 0, 0, 'relative', false);\r\n\t\t\t}\r\n\r\n\t\t\tif (p.wrap.parentNode !== THIS.container) {\r\n\t\t\t\tTHIS.container.appendChild(p.wrap);\r\n\t\t\t}\r\n\r\n\t\t\tjsc.addClass(THIS.targetElement, jsc.pub.activeClassName);\r\n\t\t}\r\n\r\n\r\n\t\tfunction redrawPad () {\r\n\t\t\t// redraw the pad pointer\r\n\t\t\tvar yChannel = jsc.getPadYChannel(THIS);\r\n\t\t\tvar x = Math.round((THIS.channels.h / 360) * (THIS.width - 1));\r\n\t\t\tvar y = Math.round((1 - THIS.channels[yChannel] / 100) * (THIS.height - 1));\r\n\t\t\tvar crossOuterSize = (2 * THIS.pointerBorderWidth + THIS.pointerThickness + 2 * THIS.crossSize);\r\n\t\t\tvar ofs = -Math.floor(crossOuterSize / 2);\r\n\t\t\tjsc.picker.cross.style.left = (x + ofs) + 'px';\r\n\t\t\tjsc.picker.cross.style.top = (y + ofs) + 'px';\r\n\r\n\t\t\t// redraw the slider\r\n\t\t\tswitch (jsc.getSliderChannel(THIS)) {\r\n\t\t\tcase 's':\r\n\t\t\t\tvar rgb1 = jsc.HSV_RGB(THIS.channels.h, 100, THIS.channels.v);\r\n\t\t\t\tvar rgb2 = jsc.HSV_RGB(THIS.channels.h, 0, THIS.channels.v);\r\n\t\t\t\tvar color1 = 'rgb(' +\r\n\t\t\t\t\tMath.round(rgb1[0]) + ',' +\r\n\t\t\t\t\tMath.round(rgb1[1]) + ',' +\r\n\t\t\t\t\tMath.round(rgb1[2]) + ')';\r\n\t\t\t\tvar color2 = 'rgb(' +\r\n\t\t\t\t\tMath.round(rgb2[0]) + ',' +\r\n\t\t\t\t\tMath.round(rgb2[1]) + ',' +\r\n\t\t\t\t\tMath.round(rgb2[2]) + ')';\r\n\t\t\t\tjsc.picker.sldGrad.draw(THIS.sliderSize, THIS.height, color1, color2);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'v':\r\n\t\t\t\tvar rgb = jsc.HSV_RGB(THIS.channels.h, THIS.channels.s, 100);\r\n\t\t\t\tvar color1 = 'rgb(' +\r\n\t\t\t\t\tMath.round(rgb[0]) + ',' +\r\n\t\t\t\t\tMath.round(rgb[1]) + ',' +\r\n\t\t\t\t\tMath.round(rgb[2]) + ')';\r\n\t\t\t\tvar color2 = '#000';\r\n\t\t\t\tjsc.picker.sldGrad.draw(THIS.sliderSize, THIS.height, color1, color2);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\t// redraw the alpha slider\r\n\t\t\tjsc.picker.asldGrad.draw(THIS.sliderSize, THIS.height, THIS.toHEXString());\r\n\t\t}\r\n\r\n\r\n\t\tfunction redrawSld () {\r\n\t\t\tvar sldChannel = jsc.getSliderChannel(THIS);\r\n\t\t\tif (sldChannel) {\r\n\t\t\t\t// redraw the slider pointer\r\n\t\t\t\tvar y = Math.round((1 - THIS.channels[sldChannel] / 100) * (THIS.height - 1));\r\n\t\t\t\tjsc.picker.sldPtrOB.style.top = (y - (2 * THIS.pointerBorderWidth + THIS.pointerThickness) - Math.floor(jsc.pub.sliderInnerSpace / 2)) + 'px';\r\n\t\t\t}\r\n\r\n\t\t\t// redraw the alpha slider\r\n\t\t\tjsc.picker.asldGrad.draw(THIS.sliderSize, THIS.height, THIS.toHEXString());\r\n\t\t}\r\n\r\n\r\n\t\tfunction redrawASld () {\r\n\t\t\tvar y = Math.round((1 - THIS.channels.a) * (THIS.height - 1));\r\n\t\t\tjsc.picker.asldPtrOB.style.top = (y - (2 * THIS.pointerBorderWidth + THIS.pointerThickness) - Math.floor(jsc.pub.sliderInnerSpace / 2)) + 'px';\r\n\t\t}\r\n\r\n\r\n\t\tfunction isPickerOwner () {\r\n\t\t\treturn jsc.picker && jsc.picker.owner === THIS;\r\n\t\t}\r\n\r\n\r\n\t\tfunction onValueKeyDown (ev) {\r\n\t\t\tif (jsc.eventKey(ev) === 'Enter') {\r\n\t\t\t\tif (THIS.valueElement) {\r\n\t\t\t\t\tTHIS.processValueInput(THIS.valueElement.value);\r\n\t\t\t\t}\r\n\t\t\t\tTHIS.tryHide();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\tfunction onAlphaKeyDown (ev) {\r\n\t\t\tif (jsc.eventKey(ev) === 'Enter') {\r\n\t\t\t\tif (THIS.alphaElement) {\r\n\t\t\t\t\tTHIS.processAlphaInput(THIS.alphaElement.value);\r\n\t\t\t\t}\r\n\t\t\t\tTHIS.tryHide();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\tfunction onValueChange (ev) {\r\n\t\t\tif (jsc.getData(ev, 'internal')) {\r\n\t\t\t\treturn; // skip if the event was internally triggered by jscolor\r\n\t\t\t}\r\n\r\n\t\t\tvar oldVal = THIS.valueElement.value;\r\n\r\n\t\t\tTHIS.processValueInput(THIS.valueElement.value); // this might change the value\r\n\r\n\t\t\tjsc.triggerCallback(THIS, 'onChange');\r\n\r\n\t\t\tif (THIS.valueElement.value !== oldVal) {\r\n\t\t\t\t// value was additionally changed -> let's trigger the change event again, even though it was natively dispatched\r\n\t\t\t\tjsc.triggerInputEvent(THIS.valueElement, 'change', true, true);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\tfunction onAlphaChange (ev) {\r\n\t\t\tif (jsc.getData(ev, 'internal')) {\r\n\t\t\t\treturn; // skip if the event was internally triggered by jscolor\r\n\t\t\t}\r\n\r\n\t\t\tvar oldVal = THIS.alphaElement.value;\r\n\r\n\t\t\tTHIS.processAlphaInput(THIS.alphaElement.value); // this might change the value\r\n\r\n\t\t\tjsc.triggerCallback(THIS, 'onChange');\r\n\r\n\t\t\t// triggering valueElement's onChange (because changing alpha changes the entire color, e.g. with rgba format)\r\n\t\t\tjsc.triggerInputEvent(THIS.valueElement, 'change', true, true);\r\n\r\n\t\t\tif (THIS.alphaElement.value !== oldVal) {\r\n\t\t\t\t// value was additionally changed -> let's trigger the change event again, even though it was natively dispatched\r\n\t\t\t\tjsc.triggerInputEvent(THIS.alphaElement, 'change', true, true);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\tfunction onValueInput (ev) {\r\n\t\t\tif (jsc.getData(ev, 'internal')) {\r\n\t\t\t\treturn; // skip if the event was internally triggered by jscolor\r\n\t\t\t}\r\n\r\n\t\t\tif (THIS.valueElement) {\r\n\t\t\t\tTHIS.fromString(THIS.valueElement.value, jsc.flags.leaveValue);\r\n\t\t\t}\r\n\r\n\t\t\tjsc.triggerCallback(THIS, 'onInput');\r\n\r\n\t\t\t// triggering valueElement's onInput\r\n\t\t\t// (not needed, it was dispatched normally by the browser)\r\n\t\t}\r\n\r\n\r\n\t\tfunction onAlphaInput (ev) {\r\n\t\t\tif (jsc.getData(ev, 'internal')) {\r\n\t\t\t\treturn; // skip if the event was internally triggered by jscolor\r\n\t\t\t}\r\n\r\n\t\t\tif (THIS.alphaElement) {\r\n\t\t\t\tTHIS.fromHSVA(null, null, null, parseFloat(THIS.alphaElement.value), jsc.flags.leaveAlpha);\r\n\t\t\t}\r\n\r\n\t\t\tjsc.triggerCallback(THIS, 'onInput');\r\n\r\n\t\t\t// triggering valueElement's onInput (because changing alpha changes the entire color, e.g. with rgba format)\r\n\t\t\tjsc.triggerInputEvent(THIS.valueElement, 'input', true, true);\r\n\t\t}\r\n\r\n\r\n\t\t// let's process the DEPRECATED 'options' property (this will be later removed)\r\n\t\tif (jsc.pub.options) {\r\n\t\t\t// let's set custom default options, if specified\r\n\t\t\tfor (var opt in jsc.pub.options) {\r\n\t\t\t\tif (jsc.pub.options.hasOwnProperty(opt)) {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tsetOption(opt, jsc.pub.options[opt]);\r\n\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\tconsole.warn(e);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t// let's apply configuration presets\r\n\t\t//\r\n\t\tvar presetsArr = [];\r\n\r\n\t\tif (opts.preset) {\r\n\t\t\tif (typeof opts.preset === 'string') {\r\n\t\t\t\tpresetsArr = opts.preset.split(/\\s+/);\r\n\t\t\t} else if (Array.isArray(opts.preset)) {\r\n\t\t\t\tpresetsArr = opts.preset.slice(); // slice() to clone\r\n\t\t\t} else {\r\n\t\t\t\tconsole.warn('Unrecognized preset value');\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// always use the 'default' preset. If it's not listed, append it to the end.\r\n\t\tif (presetsArr.indexOf('default') === -1) {\r\n\t\t\tpresetsArr.push('default');\r\n\t\t}\r\n\r\n\t\t// let's apply the presets in reverse order, so that should there be any overlapping options,\r\n\t\t// the formerly listed preset will override the latter\r\n\t\tfor (var i = presetsArr.length - 1; i >= 0; i -= 1) {\r\n\t\t\tvar pres = presetsArr[i];\r\n\t\t\tif (!pres) {\r\n\t\t\t\tcontinue; // preset is empty string\r\n\t\t\t}\r\n\t\t\tif (!jsc.pub.presets.hasOwnProperty(pres)) {\r\n\t\t\t\tconsole.warn('Unknown preset: %s', pres);\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\tfor (var opt in jsc.pub.presets[pres]) {\r\n\t\t\t\tif (jsc.pub.presets[pres].hasOwnProperty(opt)) {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tsetOption(opt, jsc.pub.presets[pres][opt]);\r\n\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\tconsole.warn(e);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t// let's set specific options for this color picker\r\n\t\tvar nonProperties = [\r\n\t\t\t// these options won't be set as instance properties\r\n\t\t\t'preset',\r\n\t\t];\r\n\t\tfor (var opt in opts) {\r\n\t\t\tif (opts.hasOwnProperty(opt)) {\r\n\t\t\t\tif (nonProperties.indexOf(opt) === -1) {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tsetOption(opt, opts[opt]);\r\n\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\tconsole.warn(e);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t//\r\n\t\t// Install the color picker on chosen element(s)\r\n\t\t//\r\n\r\n\r\n\t\t// Determine picker's container element\r\n\t\tif (this.container === undefined) {\r\n\t\t\tthis.container = window.document.body; // default container is BODY element\r\n\r\n\t\t} else { // explicitly set to custom element\r\n\t\t\tthis.container = jsc.node(this.container);\r\n\t\t}\r\n\r\n\t\tif (!this.container) {\r\n\t\t\tthrow new Error('Cannot instantiate color picker without a container element');\r\n\t\t}\r\n\r\n\r\n\t\t// Fetch the target element\r\n\t\tthis.targetElement = jsc.node(targetElement);\r\n\r\n\t\tif (!this.targetElement) {\r\n\t\t\t// temporarily customized error message to help with migrating from versions prior to 2.2\r\n\t\t\tif (typeof targetElement === 'string' && /^[a-zA-Z][\\w:.-]*$/.test(targetElement)) {\r\n\t\t\t\t// targetElement looks like valid ID\r\n\t\t\t\tvar possiblyId = targetElement;\r\n\t\t\t\tthrow new Error('If \\'' + possiblyId + '\\' is supposed to be an ID, please use \\'#' + possiblyId + '\\' or any valid CSS selector.');\r\n\t\t\t}\r\n\r\n\t\t\tthrow new Error('Cannot instantiate color picker without a target element');\r\n\t\t}\r\n\r\n\t\tif (this.targetElement.jscolor && this.targetElement.jscolor instanceof jsc.pub) {\r\n\t\t\tthrow new Error('Color picker already installed on this element');\r\n\t\t}\r\n\r\n\r\n\t\t// link this instance with the target element\r\n\t\tthis.targetElement.jscolor = this;\r\n\t\tjsc.addClass(this.targetElement, jsc.pub.className);\r\n\r\n\t\t// register this instance\r\n\t\tjsc.instances.push(this);\r\n\r\n\r\n\t\t// if target is BUTTON\r\n\t\tif (jsc.isButton(this.targetElement)) {\r\n\r\n\t\t\tif (this.targetElement.type.toLowerCase() !== 'button') {\r\n\t\t\t\t// on buttons, always force type to be 'button', e.g. in situations the target `,\n );\n }\n }\n if (Game.buyMode === -1) {\n /*\n * Fix sell price displayed in the object tooltip.\n *\n * The buildings sell price displayed by the game itself (without any mod) is incorrect.\n * The following line of code fixes this issue, and can be safely removed when the game gets fixed.\n *\n * This issue is extensively detailed here: https://github.com/Aktanusa/CookieMonster/issues/359#issuecomment-735658262\n */\n l('tooltip').innerHTML = l('tooltip')\n .innerHTML.split(Beautify(Game.Objects[name].bulkPrice))\n .join(\n Beautify(\n (Game.Objects[name],\n Game.Objects[name].basePrice,\n Game.Objects[name].amount,\n Game.Objects[name].free,\n Game.buyBulk,\n 1),\n ),\n );\n }\n } else if (type === 'u') {\n // Upgrades\n if (!Game.UpgradesInStore[name]) return '';\n l('tooltip').innerHTML = Game.crateTooltip(Game.UpgradesInStore[name], 'store');\n } else if (type === 's') l('tooltip').innerHTML = Game.lumpTooltip();\n // Sugar Lumps\n else if (type === 'g')\n l('tooltip').innerHTML = Game.Objects['Wizard tower'].minigame.spellTooltip(name)();\n // Grimoire\n else if (type === 'p')\n l('tooltip').innerHTML = Game.ObjectsById[2].minigame.tileTooltip(name[0], name[1])();\n // Harvest all button in garden\n else if (type === 'ha') l('tooltip').innerHTML = Game.ObjectsById[2].minigame.toolTooltip(1)();\n else if (type === 'wb') l('tooltip').innerHTML = '';\n else if (type === 'pag') l('tooltip').innerHTML = Game.Objects.Temple.minigame.godTooltip(name)();\n else if (type === 'pas')\n l('tooltip').innerHTML = Game.Objects.Temple.minigame.slotTooltip(name[0])();\n\n // Adds area for extra tooltip-sections\n if (\n (type === 'b' && Game.buyMode === 1) ||\n type === 'u' ||\n type === 's' ||\n type === 'g' ||\n (type === 'p' && !Game.keys[16]) ||\n type === 'ha' ||\n type === 'wb' ||\n type === 'pag' ||\n (type === 'pas' && name[1] !== -1)\n ) {\n const area = document.createElement('div');\n area.id = 'CMTooltipArea';\n l('tooltip').appendChild(area);\n }\n\n // Sets global variables used by CM.Disp.UpdateTooltip()\n TooltipType = type;\n TooltipName = name;\n\n UpdateTooltips();\n\n return l('tooltip').innerHTML;\n}\n","import { CacheSpawnedGoldenShimmer } from '../../Cache/VariablesAndData';\nimport { LastGoldenCookieState } from '../../Main/VariablesAndData';\n\n/**\n * This function creates the Favicon, it is called by CM.Main.DelayInit()\n */\nexport function CreateFavicon() {\n const Favicon = document.createElement('link');\n Favicon.id = 'CMFavicon';\n Favicon.rel = 'shortcut icon';\n Favicon.href = 'https://orteil.dashnet.org/cookieclicker/favicon.ico';\n document.getElementsByTagName('head')[0].appendChild(Favicon);\n}\n\n/**\n * This function updates the Favicon depending on whether a Golden Cookie has spawned\n * By relying on CM.Cache.spawnedGoldenShimmer it only changes for non-user spawned cookie\n */\nexport function UpdateFavicon() {\n if (\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.Favicon === 1 &&\n LastGoldenCookieState > 0\n ) {\n if (CacheSpawnedGoldenShimmer.wrath)\n l('CMFavicon').href =\n 'https://CookieMonsterTeam.github.io/CookieMonster/favicon/wrathCookie.ico';\n else\n l('CMFavicon').href =\n 'https://CookieMonsterTeam.github.io/CookieMonster/favicon/goldenCookie.ico';\n } else l('CMFavicon').href = 'https://orteil.dashnet.org/cookieclicker/favicon.ico';\n}\n","/** Functions used to create static objects of Buildings, Upgrades and Achievements */\n\nimport CopyData from '../SimulationData/CopyData';\nimport { SimAchievements, SimObjects, SimUpgrades } from '../VariablesAndData';\nimport InitAchievement from './InitAchievement';\nimport InitialBuildingData from './InitialBuildingData';\nimport InitUpgrade from './InitUpgrade';\n\n/**\n * This function creates static objects for Buildings, Upgrades and Achievements\n */\nexport default function InitData() {\n // Buildings\n SimObjects = [];\n Object.keys(Game.Objects).forEach((i) => {\n SimObjects[i] = InitialBuildingData(i);\n });\n\n // Upgrades\n SimUpgrades = [];\n Object.keys(Game.Upgrades).forEach((i) => {\n SimUpgrades[i] = InitUpgrade(i);\n });\n\n // Achievements\n SimAchievements = [];\n Object.keys(Game.Achievements).forEach((i) => {\n SimAchievements[i] = InitAchievement(i);\n });\n CopyData();\n}\n","import { CreateTooltip } from '../../Disp/Tooltips/Tooltip';\nimport { TooltipGrimoireBackup } from '../VariablesAndData';\n\n/**\n * This function replaces the original .onmouseover functions of the Grimoire minigame\n */\nexport default function ReplaceTooltipGrimoire() {\n if (Game.Objects['Wizard tower'].minigameLoaded) {\n Object.keys(Game.Objects['Wizard tower'].minigame.spellsById).forEach((i) => {\n if (l(`grimoireSpell${i}`).onmouseover !== null) {\n TooltipGrimoireBackup[i] = l(`grimoireSpell${i}`).onmouseover;\n l(`grimoireSpell${i}`).onmouseover = function () {\n Game.tooltip.dynamic = 1;\n Game.tooltip.draw(this, () => CreateTooltip('g', `${i}`), 'this');\n Game.tooltip.wobble();\n };\n }\n });\n }\n}\n","import FormatTime from '../../Disp/BeautifyAndFormatting/FormatTime';\nimport CalculateGrimoireRefillTime from '../../Disp/HelperFunctions/CalculateGrimoireRefillTime';\nimport {\n BackupGrimoireDraw,\n BackupGrimoireLaunch, // eslint-disable-line no-unused-vars\n BackupGrimoireLaunchMod,\n HasReplaceNativeGrimoireDraw,\n HasReplaceNativeGrimoireLaunch,\n} from '../VariablesAndData';\nimport ReplaceTooltipGrimoire from './TooltipGrimoire';\n\n/**\n * This function fixes replaces the .draw function of the Grimoire\n */\nfunction ReplaceNativeGrimoireDraw() {\n if (!HasReplaceNativeGrimoireDraw && Game.Objects['Wizard tower'].minigameLoaded) {\n const { minigame } = Game.Objects['Wizard tower'];\n BackupGrimoireDraw = minigame.draw;\n Game.Objects['Wizard tower'].minigame.draw = function () {\n BackupGrimoireDraw();\n if (\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.GrimoireBar === 1 &&\n minigame.magic < minigame.magicM &&\n Game.drawT % 5 === 0\n ) {\n minigame.magicBarTextL.innerHTML += ` (${FormatTime(\n CalculateGrimoireRefillTime(minigame.magic, minigame.magicM, minigame.magicM),\n )})`;\n minigame.magicBarL.style.width = '75%'; // TODO: Fix this after Orteil pushes fix to main game;\n }\n };\n HasReplaceNativeGrimoireDraw = true;\n }\n}\n\n/**\n * This function fixes replaces the .launch function of the Grimoire\n */\nfunction ReplaceNativeGrimoireLaunch() {\n if (!HasReplaceNativeGrimoireLaunch && Game.Objects['Wizard tower'].minigameLoaded) {\n const { minigame } = Game.Objects['Wizard tower'];\n BackupGrimoireLaunch = minigame.launch;\n BackupGrimoireLaunchMod = new Function( // eslint-disable-line no-new-func\n `return ${minigame.launch\n .toString()\n .split('=this')\n .join(\"= Game.Objects['Wizard tower'].minigame\")}`,\n );\n Game.Objects['Wizard tower'].minigame.launch = function () {\n BackupGrimoireLaunchMod();\n ReplaceTooltipGrimoire();\n HasReplaceNativeGrimoireDraw = false;\n ReplaceNativeGrimoireDraw();\n\n HasReplaceNativeGrimoireLaunch = true;\n };\n }\n}\n\n/**\n * This function fixes replaces the Launch and Draw functions of the Grimoire\n */\nexport default function ReplaceNativeGrimoire() {\n ReplaceNativeGrimoireLaunch();\n ReplaceNativeGrimoireDraw();\n}\n","/** Functions related to the Dragon */\n\nimport Beautify from '../../Disp/BeautifyAndFormatting/Beautify';\nimport CopyData from '../../Sim/SimulationData/CopyData';\nimport { SimDoSims, SimObjects } from '../../Sim/VariablesAndData';\nimport FillCMDCache from '../FillCMDCache';\nimport { CacheCostDragonUpgrade, CacheLastDragonLevel } from '../VariablesAndData'; // eslint-disable-line no-unused-vars\n\n/**\n * This functions caches the current cost of upgrading the dragon level so it can be displayed in the tooltip\n */\nexport default function CacheDragonCost() {\n if (CacheLastDragonLevel !== Game.dragonLevel || SimDoSims) {\n if (\n Game.dragonLevel < 25 &&\n Game.dragonLevels[Game.dragonLevel].buy.toString().includes('sacrifice')\n ) {\n const objectMatch = Game.dragonLevels[Game.dragonLevel].buy\n .toString()\n .match(/Objects\\[(.*)\\]/);\n let target =\n objectMatch !== null ? objectMatch[1] : Game.ObjectsById[Game.dragonLevel - 5].name;\n const amount = Game.dragonLevels[Game.dragonLevel].buy\n .toString()\n .match(/sacrifice\\((.*?)\\)/)[1];\n if (target !== 'i') {\n target = target.replaceAll(\"'\", '');\n if (Game.Objects[target].amount < amount) {\n CacheCostDragonUpgrade = 'Not enough buildings to sell';\n } else {\n let cost = 0;\n CopyData();\n for (let i = 0; i < amount; i++) {\n let price =\n SimObjects[target].basePrice *\n Game.priceIncrease **\n Math.max(0, SimObjects[target].amount - 1 - SimObjects[target].free);\n price = Game.modifyBuildingPrice(SimObjects[target], price);\n price = Math.ceil(price);\n cost += price;\n SimObjects[target].amount -= 1;\n }\n CacheCostDragonUpgrade = `Cost to rebuy: ${Beautify(cost)}`;\n }\n } else {\n let cost = 0;\n CopyData();\n Object.keys(Game.Objects).forEach((j) => {\n target = j;\n if (Game.Objects[target].amount < amount) {\n CacheCostDragonUpgrade = 'Not enough buildings to sell';\n return;\n }\n for (let i = 0; i < amount; i++) {\n let price =\n SimObjects[target].basePrice *\n Game.priceIncrease **\n Math.max(0, SimObjects[target].amount - 1 - SimObjects[target].free);\n price = Game.modifyBuildingPrice(SimObjects[target], price);\n price = Math.ceil(price);\n cost += price;\n SimObjects[target].amount -= 1;\n }\n CacheCostDragonUpgrade = `Cost to rebuy: ${Beautify(cost)}`;\n });\n }\n }\n CacheLastDragonLevel = Game.dragonLevel;\n }\n\n FillCMDCache({ CacheLastDragonLevel });\n}\n","/** Data related to the display titles of certain sections in menu screens */\n\n/** Display titles of the headers of the Cookie Monster settings section */\nexport const ConfigGroups = {\n Favourite: 'Favourite Settings',\n Calculation: 'Calculation',\n Notation: 'Notation',\n Colours: 'Colours and colour coding',\n BarsDisplay: 'Infobars and visual settings',\n Tooltip: 'Tooltips',\n Statistics: 'Statistics',\n Notification: 'Notifications',\n Miscellaneous: 'Miscellaneous',\n};\n\n/** Display titles of the headers of the notification section of the Cookie Monster settings */\nexport const ConfigGroupsNotification = {\n NotificationGeneral: 'General Notifications',\n NotificationGC: 'Golden Cookie',\n NotificationFC: 'Fortune Cookie',\n NotificationSea: 'Season Special',\n NotificationGard: 'Garden Tick',\n NotificationMagi: 'Full Magic Bar',\n NotificationWrink: 'Wrinkler',\n NotificationWrinkMax: 'Maximum Wrinklers',\n};\n","/**\n * This function checks if the user has given permissions for notifications\n * It is called by a change in any of the notification options\n * Note that most browsers will stop asking if the user has ignored the prompt around 6 times\n * @param \t{number}\tToggleOnOff\t\tA number indicating whether the option has been turned off (0) or on (1)\n */\nfunction CheckNotificationPermissions(ToggleOnOff) {\n if (ToggleOnOff === 1) {\n // Check if browser support Promise version of Notification Permissions\n const checkNotificationPromise = function () {\n try {\n Notification.requestPermission().then();\n } catch (e) {\n return false;\n }\n return true;\n };\n\n // Check if the browser supports notifications and which type\n if (!('Notification' in window)) {\n console.log('This browser does not support notifications.'); // eslint-disable-line no-console\n } else if (checkNotificationPromise()) {\n Notification.requestPermission().then();\n } else {\n Notification.requestPermission();\n }\n }\n}\n\nexport default CheckNotificationPermissions;\n","import UpdateBuildings from '../BuildingsUpgrades/Buildings';\nimport UpdateUpgrades from '../BuildingsUpgrades/Upgrades';\nimport { UpdateBotBar } from '../InfoBars/BottomBar';\n\n/**\n * This function refreshes all numbers after a change in scale-setting\n * It is therefore called by a changes in CM.Options.Scale, CM.Options.ScaleDecimals, CM.Options.ScaleSeparator and CM.Options.ScaleCutoff\n */\nexport default function RefreshScale() {\n BeautifyAll();\n Game.RefreshStore();\n Game.RebuildUpgrades();\n\n UpdateBotBar();\n UpdateBuildings();\n UpdateUpgrades();\n}\n","import { UpdateBotBar } from '../../Disp/InfoBars/BottomBar';\nimport { UpdateBotTimerBarPosition } from '../SpecificToggles';\n\n/**\n * This function toggle the bottom bar\n * It is called by CM.Disp.UpdateAscendState() and a change in Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.BotBar\n */\nexport default function ToggleBotBar() {\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.BotBar === 1) {\n l('CMBotBar').style.display = '';\n UpdateBotBar();\n } else {\n l('CMBotBar').style.display = 'none';\n }\n UpdateBotTimerBarPosition();\n}\n","import { settingClasses } from '@cookiemonsterteam/cookiemonsterframework/src/index';\n\nimport CheckNotificationPermissions from '../Config/CheckNotificationPermissions';\nimport RefreshScale from '../Disp/HelperFunctions/RefreshScale';\nimport { SimDoSims } from '../Sim/VariablesAndData'; // eslint-disable-line no-unused-vars\nimport ToggleBotBar from '../Config/Toggles/ToggleBotBar';\nimport ToggleDetailedTime from '../Config/Toggles/ToggleDetailedTime';\nimport ToggleGCTimer from '../Config/Toggles/ToggleGCTimer';\nimport ToggleSectionHideButtons from '../Config/Toggles/ToggleSectionHideButtons';\nimport ToggleToolWarnPos from '../Config/Toggles/ToggleToolWarnPos';\nimport ToggleUpgradeBarAndColour from '../Config/Toggles/ToggleUpgradeBarAndColour';\nimport ToggleUpgradeBarFixedPos from '../Config/Toggles/ToggleUpgradeBarFixedPos';\nimport ToggleWrinklerButtons from '../Config/Toggles/ToggleWrinklerButtons';\nimport UpdateBuildings from '../Disp/BuildingsUpgrades/Buildings';\nimport { UpdateFavicon } from '../Disp/TabTitle/FavIcon';\nimport UpdateUpgradeSectionsHeight from '../Disp/BuildingsUpgrades/UpdateUpgradeSectionsHeight';\nimport UpdateUpgrades from '../Disp/BuildingsUpgrades/Upgrades';\nimport { ToggleTimerBar, ToggleTimerBarPos } from '../Config/SpecificToggles';\n\n/** This includes all options of CookieMonster and their relevant data */\nconst settings = {\n // Calculation\n CPSMode: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'Calculation',\n ['Current cookies per second', 'Average cookies per second'],\n 'Calculate times using current cookies per second or average cookies per second',\n false,\n ),\n AvgCPSHist: new settingClasses.SettingStandard(\n 3,\n 'bool',\n 'Calculation',\n [\n 'Average CPS in past 10s',\n 'Average CPS in past 15s',\n 'Average CPS in past 30s',\n 'Average CPS in past 1m',\n 'Average CPS in past 5m',\n 'Average CPS in past 10m',\n 'Average CPS in past 15m',\n 'Average CPS in past 30m',\n ],\n 'How much time average Cookies Per Second should consider',\n false,\n ),\n AvgClicksHist: new settingClasses.SettingStandard(\n 0,\n 'bool',\n 'Calculation',\n [\n 'Average clicks in past 1s',\n 'Average clicks in past 5s',\n 'Average clicks in past 10s',\n 'Average clicks in past 15s',\n 'Average clicks in past 30s',\n ],\n 'How much time average Cookie Clicks should consider',\n false,\n ),\n CalcWrink: new settingClasses.SettingStandardWithFunc(\n 0,\n 'bool',\n 'Calculation',\n [\n 'Calculate with wrinklers OFF',\n 'Calculate with wrinklers ON',\n 'Calculate with single fattest wrinkler ON',\n ],\n 'Calculate times and average Cookies Per Second with (only the single non-shiny fattest) wrinklers',\n true,\n () => {\n SimDoSims = true;\n },\n ),\n\n // Notation\n Scale: new settingClasses.SettingStandardWithFunc(\n 2,\n 'bool',\n 'Notation',\n [\n \"Game's setting scale\",\n 'Metric',\n 'Short scale',\n 'Short scale (Abbreviated)',\n 'Scientific notation',\n 'Engineering notation',\n ],\n 'Change how long numbers are formatted',\n false,\n () => {\n RefreshScale();\n },\n ),\n ScaleDecimals: new settingClasses.SettingStandardWithFunc(\n 2,\n 'bool',\n 'Notation',\n ['1 decimals', '2 decimals', '3 decimals'],\n `Set the number of decimals used when applicable. This only works with Cookie Monster scales and not with \"Game's Setting Scale\"`,\n false,\n () => {\n RefreshScale();\n },\n ),\n ScaleSeparator: new settingClasses.SettingStandardWithFunc(\n 0,\n 'bool',\n 'Notation',\n ['. for decimals (standard)', '. for thousands'],\n 'Set the separator used for decimals and thousands',\n false,\n () => {\n RefreshScale();\n },\n ),\n ScaleCutoff: new settingClasses.SettingInputNumber(\n 999999,\n 'numscale',\n 'Notation',\n 'Notation cut-off point: ',\n 'The number from which Cookie Monster will start formatting numbers based on chosen scale. Standard is 999,999. Setting this above 999,999,999 might break certain notations',\n 1,\n 999999999,\n ),\n TimeFormat: new settingClasses.SettingStandard(\n 0,\n 'bool',\n 'Notation',\n ['Time XXd, XXh, XXm, XXs', 'Time XX:XX:XX:XX:XX', 'Time XXx, XXx'],\n 'Change the time format',\n false,\n ),\n DetailedTime: new settingClasses.SettingStandardWithFunc(\n 1,\n 'bool',\n 'Notation',\n ['Detailed time OFF', 'Detailed time ON'],\n 'Change how time is displayed in certain statistics and tooltips',\n true,\n () => {\n ToggleDetailedTime();\n },\n ),\n PPDisplayTime: new settingClasses.SettingStandard(\n 0,\n 'bool',\n 'Notation',\n ['PP as value (standard)', 'PP as time unit'],\n 'Display PP as calculated value or as approximate time unit. Note that PP does not translate directly into a time unit and this is therefore only an approximation.',\n false,\n ),\n\n // Colours\n BuildColour: new settingClasses.SettingStandardWithFunc(\n 1,\n 'bool',\n 'Colours',\n ['Building colours OFF', 'Building colours ON'],\n 'Colour code buildings',\n true,\n () => {\n UpdateBuildings();\n },\n ),\n PPOnlyConsiderBuyable: new settingClasses.SettingStandard(\n 0,\n 'bool',\n 'Colours',\n [\"Don't ignore non-buyable\", 'Ignore non-buyable'],\n \"Makes Cookie Monster label buildings and upgrades you can't buy right now red, useful in those situations where you just want to spend your full bank 'most optimally'\",\n true,\n ),\n PPExcludeTop: new settingClasses.SettingStandard(\n 0,\n 'bool',\n 'Colours',\n [\n \"Don't ignore any\",\n 'Ignore 1st best',\n 'Ignore 1st and 2nd best',\n 'Ignore 1st, 2nd and 3rd best',\n ],\n 'Makes Cookie Monster ignore the 1st, 2nd or 3rd best buildings in labeling and colouring PP values',\n true,\n ),\n PPRigidelMode: new settingClasses.SettingStandard(\n 0,\n 'bool',\n 'Colours',\n ['Rigidel mode OFF', 'Rigidel mode ON'],\n 'Makes Cookie Monster ignore all \"buy 1\" options when colouring PP in order to stay at a total building count ending in 10 for pantheon god Rigidel',\n true,\n ),\n PPSecondsLowerLimit: new settingClasses.SettingInputNumber(\n 0,\n 'numscale',\n 'Colours',\n 'Lower limit for PP (in seconds): ',\n 'If a building or upgrade costs less than the specified seconds of CPS it will also be considered optimal and label it as such (\"PP is less than xx seconds of CPS\"); setting to 0 ignores this option',\n 0,\n Infinity,\n ),\n ColourBlue: new settingClasses.SettingColours(\n '#4bb8f0',\n 'colour',\n 'Colours',\n 'Standard colour is blue. Used to show upgrades better than best PP building, for Click Frenzy bar, and for various labels',\n ),\n ColourGreen: new settingClasses.SettingColours(\n '#00ff00',\n 'colour',\n 'Colours',\n 'Standard colour is green. Used to show best PP building, for Blood Frenzy bar, and for various labels',\n ),\n ColourYellow: new settingClasses.SettingColours(\n '#ffff00',\n 'colour',\n 'Colours',\n 'Standard colour is yellow. Used to show buildings within the top 10 of PP, for Frenzy bar, and for various labels',\n ),\n ColourOrange: new settingClasses.SettingColours(\n '#ff7f00',\n 'colour',\n 'Colours',\n 'Standard colour is orange. Used to show buildings within the top 20 of PP, for Next Reindeer bar, and for various labels',\n ),\n ColourRed: new settingClasses.SettingColours(\n '#ff0000',\n 'colour',\n 'Colours',\n 'Standard colour is Red. Used to show buildings within the top 30 of PP, for Clot bar, and for various labels',\n ),\n ColourPurple: new settingClasses.SettingColours(\n '#ff00ff',\n 'colour',\n 'Colours',\n 'Standard colour is purple. Used to show buildings outside of the top 30 of PP, for Next Cookie bar, and for various labels',\n ),\n ColourGray: new settingClasses.SettingColours(\n '#b3b3b3',\n 'colour',\n 'Colours',\n 'Standard colour is gray. Used to show negative or infinity PP, and for Next Cookie/Next Reindeer bar',\n ),\n ColourPink: new settingClasses.SettingColours(\n '#ff1493',\n 'colour',\n 'Colours',\n 'Standard colour is pink. Used for Dragonflight bar',\n ),\n ColourBrown: new settingClasses.SettingColours(\n '#8b4513',\n 'colour',\n 'Colours',\n 'Standard colour is brown. Used for Dragon Harvest bar',\n ),\n\n // BarsDisplay\n BotBar: new settingClasses.SettingStandardWithFunc(\n 1,\n 'bool',\n 'BarsDisplay',\n ['Bottom bar OFF', 'Bottom bar ON'],\n 'Building information',\n true,\n () => {\n ToggleBotBar();\n },\n ),\n TimerBar: new settingClasses.SettingStandardWithFunc(\n 1,\n 'bool',\n 'BarsDisplay',\n ['Timer bar OFF', 'Timer bar ON'],\n 'Bar with timers for golden cookie, season popup, Frenzy (Normal, Clot, Elder), Click Frenzy',\n true,\n () => {\n ToggleTimerBar();\n },\n ),\n TimerBarPos: new settingClasses.SettingStandardWithFunc(\n 0,\n 'bool',\n 'BarsDisplay',\n ['Timer bar position (top left)', 'Timer bar position (bottom)'],\n 'Placement of the timer bar',\n false,\n () => {\n ToggleTimerBarPos();\n },\n ),\n TimerBarOverlay: new settingClasses.SettingStandard(\n 2,\n 'bool',\n 'BarsDisplay',\n ['Timer bar overlay OFF', 'Timer bar overlay only seconds', 'Timer bar overlay full'],\n 'Overlay on timers displaying seconds and/or percentage left',\n true,\n ),\n AutosaveTimerBar: new settingClasses.SettingStandard(\n 0,\n 'bool',\n 'BarsDisplay',\n ['Autosave timer bar OFF', 'Autosave timer bar ON'],\n 'Show a timer counting down till next autosave in the timer bar',\n true,\n ),\n UpBarColour: new settingClasses.SettingStandardWithFunc(\n 1,\n 'bool',\n 'BarsDisplay',\n ['Upgrade colours/bar OFF', 'Upgrade colours with bar ON', 'Upgrade colours without bar ON'],\n 'Colour code upgrades and optionally add a counter bar',\n false,\n () => {\n ToggleUpgradeBarAndColour();\n },\n ),\n UpgradeBarFixedPos: new settingClasses.SettingStandardWithFunc(\n 1,\n 'bool',\n 'BarsDisplay',\n ['Upgrade bar fixed position OFF', 'Upgrade bar fixed position ON'],\n 'Lock the upgrade bar at top of the screen to prevent it from moving ofscreen when scrolling',\n true,\n () => {\n ToggleUpgradeBarFixedPos();\n },\n ),\n SortBuildings: new settingClasses.SettingStandardWithFunc(\n 0,\n 'bool',\n 'BarsDisplay',\n [\n 'Sort buildings: default',\n 'Sort buildings: PP of x1 purchase',\n 'Sort buildings: PP of selected bulk mode',\n 'Sort buildings: price until next achievement',\n ],\n 'Sort the display of buildings in default order, by PP, or until next achievement',\n false,\n () => {\n UpdateBuildings();\n },\n ),\n SortUpgrades: new settingClasses.SettingStandardWithFunc(\n 0,\n 'bool',\n 'BarsDisplay',\n ['Sort upgrades: default', 'Sort upgrades: PP'],\n 'Sort the display of upgrades in either default order or by PP',\n false,\n () => {\n UpdateUpgrades();\n },\n ),\n UpgradesNeverCollapse: new settingClasses.SettingStandardWithFunc(\n 0,\n 'bool',\n 'BarsDisplay',\n ['Upgrades always expanded OFF', 'Upgrades always expanded ON'],\n 'Toggle to make the upgrades sections always expanded to the size needed to display all upgrades',\n true,\n () => {\n UpdateUpgradeSectionsHeight();\n },\n ),\n DragonAuraInfo: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'BarsDisplay',\n ['Extra dragon aura info OFF', 'Extra dragon aura info ON'],\n 'Shows information about changes in CPS and costs in the dragon aura interface.',\n true,\n ),\n GrimoireBar: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'BarsDisplay',\n ['Grimoire magic meter timer OFF', 'Grimoire magic meter timer ON'],\n 'A timer overlay showing how long till the Grimoire magic meter is full',\n true,\n ),\n GCTimer: new settingClasses.SettingStandardWithFunc(\n 1,\n 'bool',\n 'BarsDisplay',\n ['Golden cookie timer OFF', 'Golden cookie timer ON'],\n 'A timer on the golden cookie when it has been spawned',\n true,\n () => {\n ToggleGCTimer();\n },\n ),\n Favicon: new settingClasses.SettingStandardWithFunc(\n 1,\n 'bool',\n 'BarsDisplay',\n ['Favicon OFF', 'Favicon ON'],\n 'Update favicon with golden/wrath cookie',\n true,\n () => {\n UpdateFavicon();\n },\n ),\n WrinklerButtons: new settingClasses.SettingStandardWithFunc(\n 1,\n 'bool',\n 'BarsDisplay',\n ['Extra wrinkler buttons OFF', 'Extra wrinkler buttons ON'],\n 'Show buttons for popping wrinklers at bottom of cookie section',\n true,\n () => {\n ToggleWrinklerButtons();\n },\n ),\n HideSectionsButtons: new settingClasses.SettingStandardWithFunc(\n 0,\n 'bool',\n 'BarsDisplay',\n ['Hide buildings/upgrades button OFF', 'Hide buildings/upgrades button ON'],\n 'Show buttons for hiding and showing the buildings and upgrades sections in the right column',\n true,\n () => {\n ToggleSectionHideButtons();\n },\n ),\n\n // Tooltip\n TooltipBuildUpgrade: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'Tooltip',\n ['Building/upgrade tooltip information OFF', 'Building/upgrade tooltip information ON'],\n 'Extra information in building/upgrade tooltips',\n true,\n ),\n TooltipAmor: new settingClasses.SettingStandard(\n 0,\n 'bool',\n 'Tooltip',\n [\n 'Buildings tooltip amortization information OFF',\n 'Buildings tooltip amortization information ON',\n ],\n 'Add amortization information to buildings tooltip',\n true,\n ),\n ToolWarnLucky: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'Tooltip',\n ['Tooltip lucky warning OFF', 'Tooltip lucky warning ON'],\n 'A warning when buying if it will put the bank under the amount needed for max \"Lucky!\" rewards',\n true,\n ),\n ToolWarnLuckyFrenzy: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'Tooltip',\n ['Tooltip lucky frenzy warning OFF', 'Tooltip lucky frenzy warning ON'],\n 'A warning when buying if it will put the bank under the amount needed for max \"Lucky!\" (Frenzy) rewards',\n true,\n ),\n ToolWarnConjure: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'Tooltip',\n ['Tooltip conjure warning OFF', 'Tooltip conjure warning ON'],\n 'A warning when buying if it will put the bank under the amount needed for max \"Conjure Baked Goods\" rewards',\n true,\n ),\n ToolWarnConjureFrenzy: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'Tooltip',\n ['Tooltip conjure frenzy warning OFF', 'Tooltip conjure frenzy warning ON'],\n 'A warning when buying if it will put the bank under the amount needed for max \"Conjure Baked Goods\" rewards with Frenzy active',\n true,\n ),\n ToolWarnEdifice: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'Tooltip',\n ['Tooltip edifice warning OFF', 'Tooltip edifice warning ON'],\n 'A warning when buying if it will put the bank under the amount needed for \"Spontaneous Edifice\" to possibly give you your most expensive building',\n true,\n ),\n ToolWarnUser: new settingClasses.SettingInputNumber(\n 0,\n 'numscale',\n 'Tooltip',\n 'Tooltip warning at x times CPS: ',\n 'Use this to show a customized warning if buying it will put the bank under the amount equal to value times cps; setting to 0 disables the function altogether',\n 0,\n Infinity,\n ),\n ToolWarnBon: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'Tooltip',\n ['Calculate tooltip warning with bonus CPS OFF', 'Calculate tooltip warning with bonus CPS ON'],\n 'Calculate the warning with or without the bonus CPS you get from buying',\n true,\n ),\n ToolWarnPos: new settingClasses.SettingStandardWithFunc(\n 1,\n 'bool',\n 'Tooltip',\n ['Tooltip warning position (left)', 'Tooltip warning position (bottom)'],\n 'Placement of the warning boxes',\n false,\n () => {\n ToggleToolWarnPos();\n },\n ),\n TooltipGrim: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'Tooltip',\n ['Grimoire tooltip information OFF', 'Grimoire tooltip information ON'],\n 'Extra information in tooltip for grimoire',\n true,\n ),\n TooltipWrink: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'Tooltip',\n ['Wrinkler tooltip OFF', 'Wrinkler tooltip ON'],\n 'Shows the amount of cookies a wrinkler will give when popping it',\n true,\n ),\n TooltipLump: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'Tooltip',\n ['Sugar lump tooltip OFF', 'Sugar lump tooltip ON'],\n 'Shows the current Sugar Lump type in Sugar lump tooltip.',\n true,\n ),\n TooltipPlots: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'Tooltip',\n ['Garden plots tooltip OFF', 'Garden plots tooltip ON'],\n 'Shows a tooltip for plants that have a cookie reward.',\n true,\n ),\n TooltipPantheon: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'Tooltip',\n ['Pantheon tooltip OFF', 'Pantheon tooltip ON'],\n 'Shows additional info in the pantheon tooltip',\n true,\n ),\n TooltipAscendButton: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'Tooltip',\n ['Show Extra Info Ascend Tooltip OFF', 'Show Extra Info Ascend Tooltip ON'],\n 'Shows additional info in the ascend tooltip',\n true,\n ),\n\n // Statistics\n Stats: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'Statistics',\n ['Statistics OFF', 'Statistics ON'],\n 'Extra Cookie Monster statistics!',\n true,\n ),\n MissingUpgrades: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'Statistics',\n ['Missing upgrades OFF', 'Missing upgrades ON'],\n 'Shows missing upgrades in statistics menu',\n true,\n ),\n MissingAchievements: new settingClasses.SettingStandard(\n 0,\n 'bool',\n 'Statistics',\n ['Missing Achievements OFF', 'Missing Normal Achievements ON'],\n 'Shows missing normal achievements in statistics menu.',\n true,\n ),\n UpStats: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'Statistics',\n ['Statistics update rate (default)', 'Statistics update rate (1s)'],\n 'Default rate is once every 5 seconds',\n false,\n ),\n HeavenlyChipsTarget: new settingClasses.SettingInputNumber(\n 1,\n 'numscale',\n 'Statistics',\n 'Heavenly chips target: ',\n 'Use this to set a heavenly chips target that will be counted towards in the \"prestige\" statsistics sections',\n 1,\n Infinity,\n ),\n ShowMissedGC: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'Statistics',\n ['Missed GC OFF', 'Missed GC ON'],\n 'Show a stat in the statistics screen that counts how many golden cookies you have missed',\n true,\n ),\n\n // Notification\n Title: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'NotificationGeneral',\n ['Title OFF', 'Title ON', 'Title pinned tab highlight'],\n 'Update title with colden cookie/season popup timers; pinned tab highlight only changes the title when a golden cookie/season popup spawns; \"!\" means that golden cookie/reindeer can spawn',\n true,\n ),\n GeneralSound: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'NotificationGeneral',\n ['Consider game volume setting OFF', 'Consider game volume setting ON'],\n 'Turning this toggle to \"off\" makes Cookie Monster no longer consider the volume setting of the base game, allowing mod notifications to play with base game volume turned down',\n true,\n ),\n GCNotification: new settingClasses.SettingStandardWithFunc(\n 0,\n 'bool',\n 'NotificationGC',\n ['Notification OFF', 'Notification ON'],\n 'Create a notification when golden cookie spawns',\n true,\n () => {\n CheckNotificationPermissions(\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.GCNotification,\n );\n },\n ),\n GCFlash: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'NotificationGC',\n ['Flash OFF', 'Flash ON'],\n 'Flash screen on golden cookie',\n true,\n ),\n ColourGCFlash: new settingClasses.SettingColours(\n '#ffffff',\n 'colour',\n 'NotificationGC',\n 'The colour of the GC flash, standard colour is white',\n ),\n GCSound: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'NotificationGC',\n ['Sound OFF', 'Sound ON'],\n 'Play a sound on golden cookie',\n true,\n ),\n GCVolume: new settingClasses.SettingVolume(100, 'vol', 'NotificationGC', [], 'Volume'),\n GCSoundURL: new settingClasses.SettingStandard(\n 'https://freesound.org/data/previews/66/66717_931655-lq.mp3',\n 'url',\n 'NotificationGC',\n 'Sound URL:',\n 'URL of the sound to be played when a golden cookie spawns',\n ),\n FortuneNotification: new settingClasses.SettingStandardWithFunc(\n 0,\n 'bool',\n 'NotificationFC',\n ['Notification OFF', 'Notification ON'],\n 'Create a notification when fortune cookie is on the ticker',\n true,\n () => {\n CheckNotificationPermissions(\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.FortuneNotification,\n );\n },\n ),\n FortuneFlash: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'NotificationFC',\n ['Flash OFF', 'Flash ON'],\n 'Flash screen on fortune cookie spawn',\n true,\n ),\n ColourFortuneFlash: new settingClasses.SettingColours(\n '#ffffff',\n 'colour',\n 'NotificationFC',\n 'The colour of the fortune flash, standard colour is white',\n ),\n FortuneSound: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'NotificationFC',\n ['Sound OFF', 'Sound ON'],\n 'Play a sound on fortune cookie spawn',\n true,\n ),\n FortuneVolume: new settingClasses.SettingVolume(100, 'vol', 'NotificationFC', [], 'Volume'),\n FortuneSoundURL: new settingClasses.SettingStandard(\n 'https://freesound.org/data/previews/174/174027_3242494-lq.mp3',\n 'url',\n 'NotificationFC',\n 'Sound URL:',\n 'URL of the sound to be played when the ticker has a fortune cookie',\n ),\n SeaNotification: new settingClasses.SettingStandardWithFunc(\n 0,\n 'bool',\n 'NotificationSea',\n ['Notification OFF', 'Notification ON'],\n 'Create a notification on season popup',\n true,\n () => {\n CheckNotificationPermissions(\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.SeaNotification,\n );\n },\n ),\n SeaFlash: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'NotificationSea',\n ['Flash OFF', 'Flash ON'],\n 'Flash screen on season popup',\n true,\n ),\n ColourSeaFlash: new settingClasses.SettingColours(\n '#ffffff',\n 'colour',\n 'NotificationSea',\n 'The colour of the season popup flash, standard colour is white',\n ),\n SeaSound: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'NotificationSea',\n ['Sound OFF', 'Sound ON'],\n 'Play a sound on season popup',\n true,\n ),\n SeaVolume: new settingClasses.SettingVolume(100, 'vol', 'NotificationSea', [], 'Volume'),\n SeaSoundURL: new settingClasses.SettingStandard(\n 'https://www.freesound.org/data/previews/121/121099_2193266-lq.mp3',\n 'url',\n 'NotificationSea',\n 'Sound URL:',\n 'URL of the sound to be played when on season popup spawns',\n ),\n GardFlash: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'NotificationGard',\n ['Garden Tick Flash OFF', 'Flash ON'],\n 'Flash screen on garden tick',\n true,\n ),\n ColourGardFlash: new settingClasses.SettingColours(\n '#ffffff',\n 'colour',\n 'NotificationGard',\n 'The colour of the garden flash, standard colour is white',\n ),\n GardSound: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'NotificationGard',\n ['Sound OFF', 'Sound ON'],\n 'Play a sound on garden tick',\n true,\n ),\n GardVolume: new settingClasses.SettingVolume(100, 'vol', 'NotificationGard', [], 'Volume'),\n GardSoundURL: new settingClasses.SettingStandard(\n 'https://freesound.org/data/previews/103/103046_861714-lq.mp3',\n 'url',\n 'NotificationGard',\n 'Garden Tick Sound URL:',\n 'URL of the sound to be played when the garden ticks',\n ),\n MagicNotification: new settingClasses.SettingStandardWithFunc(\n 0,\n 'bool',\n 'NotificationMagi',\n ['Notification OFF', 'Notification ON'],\n 'Create a notification when magic reaches maximum',\n true,\n () => {\n CheckNotificationPermissions(\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.MagicNotification,\n );\n },\n ),\n MagicFlash: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'NotificationMagi',\n ['Flash OFF', 'Flash ON'],\n 'Flash screen when magic reaches maximum',\n true,\n ),\n ColourMagicFlash: new settingClasses.SettingColours(\n '#ffffff',\n 'colour',\n 'NotificationMagi',\n 'The colour of the magic flash, standard colour is white',\n ),\n MagicSound: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'NotificationMagi',\n ['Sound OFF', 'Sound ON'],\n 'Play a sound when magic reaches maximum',\n true,\n ),\n MagicVolume: new settingClasses.SettingVolume(100, 'vol', 'NotificationMagi', [], 'Volume'),\n MagicSoundURL: new settingClasses.SettingStandard(\n 'https://freesound.org/data/previews/221/221683_1015240-lq.mp3',\n 'url',\n 'NotificationMagi',\n 'Sound URL:',\n 'URL of the sound to be played when magic reaches maxium',\n ),\n WrinklerNotification: new settingClasses.SettingStandardWithFunc(\n 0,\n 'bool',\n 'NotificationWrink',\n ['Notification OFF', 'Notification ON'],\n 'Create a notification when a wrinkler appears',\n true,\n () => {\n CheckNotificationPermissions(\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.WrinklerNotification,\n );\n },\n ),\n WrinklerFlash: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'NotificationWrink',\n ['Flash OFF', 'Flash ON'],\n 'Flash screen when a wrinkler appears',\n true,\n ),\n ColourWrinklerFlash: new settingClasses.SettingColours(\n '#ffffff',\n 'colour',\n 'NotificationWrink',\n 'The colour of the wrinkler flash, standard colour is white',\n ),\n WrinklerSound: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'NotificationWrink',\n ['Sound OFF', 'Sound ON'],\n 'Play a sound when a wrinkler appears',\n true,\n ),\n WrinklerVolume: new settingClasses.SettingVolume(100, 'vol', 'NotificationWrink', [], 'Volume'),\n WrinklerSoundURL: new settingClasses.SettingStandard(\n 'https://freesound.org/data/previews/124/124186_8043-lq.mp3',\n 'url',\n 'NotificationWrink',\n 'Sound URL:',\n 'URL of the sound to be played when a wrinkler appears',\n ),\n WrinklerMaxNotification: new settingClasses.SettingStandardWithFunc(\n 0,\n 'bool',\n 'NotificationWrinkMax',\n ['Notification OFF', 'Notification ON'],\n 'Create a notification when the maximum amount of wrinklers has appeared',\n true,\n () => {\n CheckNotificationPermissions(\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.WrinklerMaxNotification,\n );\n },\n ),\n WrinklerMaxFlash: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'NotificationWrinkMax',\n ['Flash OFF', 'Flash ON'],\n 'Flash screen when the maximum amount of Wrinklers has appeared',\n true,\n ),\n ColourWrinklerMaxFlash: new settingClasses.SettingColours(\n '#ffffff',\n 'colour',\n 'NotificationWrinkMax',\n 'The colour of the maximum wrinkler flash, standard colour is white',\n ),\n WrinklerMaxSound: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'NotificationWrinkMax',\n ['Sound OFF', 'Sound ON'],\n 'Play a sound when the maximum amount of wrinklers has appeared',\n true,\n ),\n WrinklerMaxVolume: new settingClasses.SettingVolume(\n 100,\n 'vol',\n 'NotificationWrinkMax',\n [],\n 'Volume',\n ),\n WrinklerMaxSoundURL: new settingClasses.SettingStandard(\n 'https://freesound.org/data/previews/152/152743_15663-lq.mp3',\n 'url',\n 'NotificationWrinkMax',\n 'Sound URL:',\n 'URL of the sound to be played when the maximum amount of wrinklers has appeared',\n ),\n\n // Miscellaneous\n BulkBuyBlock: new settingClasses.SettingStandard(\n 1,\n 'bool',\n 'Miscellaneous',\n ['Block bulk buying OFF', 'Block bulk buying ON'],\n \"Block clicking bulk buying when you can't buy all. This prevents buying 7 of a building when you are in buy-10 or buy-100 mode.\",\n true,\n ),\n FavouriteSettings: new settingClasses.SettingStandardWithFunc(\n 1,\n 'bool',\n 'Miscellaneous',\n [\n 'Favourite settings section OFF',\n 'Favourite settings section ON',\n 'Favourite settings section ON (Locked)',\n ],\n \"Show stars before each setting which allows selecting it for a 'favourites' section at the top of the Cookie Monster settings. Setting this to Locked removes the stars but shows the 'favourites' section\",\n true,\n () => {\n Game.UpdateMenu();\n },\n ),\n};\n\nexport default settings;\n","import { CMSayTime } from '../../Disp/VariablesAndData';\nimport { BackupFunctions } from '../../Main/VariablesAndData';\n\n/**\n * This function changes some of the time-displays in the game to be more detailed\n * It is called by a change in CM.Options.DetailedTime\n */\nexport default function ToggleDetailedTime() {\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.DetailedTime === 1)\n Game.sayTime = CMSayTime;\n else Game.sayTime = BackupFunctions.sayTime;\n}\n","import UpdateUpgrades from '../../Disp/BuildingsUpgrades/Upgrades';\n\n/**\n * This function toggles the upgrade bar and the colours of upgrades\n * It is called by a change in CM.Options.UpBarColour\n */\nexport default function ToggleUpgradeBarAndColour() {\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.UpBarColour === 1) {\n // Colours and bar on\n l('CMUpgradeBar').style.display = '';\n UpdateUpgrades();\n } else if (\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.UpBarColour === 2\n ) {\n // Colours on and bar off\n l('CMUpgradeBar').style.display = 'none';\n UpdateUpgrades();\n } else {\n // Colours and bar off\n l('CMUpgradeBar').style.display = 'none';\n Game.RebuildUpgrades();\n }\n}\n","/**\n * This function toggles the position of the upgrade bar from fixed or non-fixed mode\n * It is called by a change in CM.Options.UpgradeBarFixedPos\n */\nexport default function ToggleUpgradeBarFixedPos() {\n if (\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.UpgradeBarFixedPos === 1\n ) {\n // Fix to top of screen when scrolling\n l('CMUpgradeBar').style.position = 'sticky';\n l('CMUpgradeBar').style.top = '0px';\n } else {\n l('CMUpgradeBar').style.position = ''; // Possible to scroll offscreen\n }\n}\n","import { CacheGoldenShimmersByID } from '../../Cache/VariablesAndData';\nimport { GCTimers } from '../../Disp/VariablesAndData';\n\n/**\n * This function toggles GC Timers are visible\n * It is called by a change in CM.Options.GCTimer\n */\nexport default function ToggleGCTimer() {\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.GCTimer === 1) {\n Object.keys(GCTimers).forEach((i) => {\n GCTimers[i].style.display = 'block';\n GCTimers[i].style.left = CacheGoldenShimmersByID[i].l.style.left;\n GCTimers[i].style.top = CacheGoldenShimmersByID[i].l.style.top;\n });\n } else {\n // eslint-disable-next-line no-return-assign\n Object.keys(GCTimers).forEach((i) => (GCTimers[i].style.display = 'none'));\n }\n}\n","/**\n * This function updates the display setting of the two objects created by CM.Disp.CreateWrinklerButtons()\n * It is called by changes in CM.Options.WrinklerButtons\n */\nexport default function ToggleSectionHideButtons() {\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.HideSectionsButtons) {\n l('CMSectionHidButtons').style.display = '';\n } else {\n l('CMSectionHidButtons').style.display = 'none';\n }\n}\n","import UpdateBuildings from '../BuildingsUpgrades/Buildings';\nimport {\n ColourBackPre,\n ColourBorderPre,\n ColoursOrdering,\n ColourTextPre,\n} from '../VariablesAndData';\n\n/**\n * This function changes/refreshes colours if the user has set new standard colours\n * The function is therefore called by a change in CM.Options.Colours\n */\nexport default function UpdateColours() {\n let str = '';\n for (let i = 0; i < ColoursOrdering.length; i++) {\n str += `.${ColourTextPre}${ColoursOrdering[i]} { color: ${\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings[\n `Colour${ColoursOrdering[i]}`\n ]\n }; }\\n`;\n }\n for (let i = 0; i < ColoursOrdering.length; i++) {\n str += `.${ColourBackPre}${ColoursOrdering[i]} { background-color: ${\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings[\n `Colour${ColoursOrdering[i]}`\n ]\n }; }\\n`;\n }\n for (let i = 0; i < ColoursOrdering.length; i++) {\n str += `.${ColourBorderPre}${ColoursOrdering[i]} { border: 1px solid ${\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings[\n `Colour${ColoursOrdering[i]}`\n ]\n }; }\\n`;\n }\n l('CMCSS').textContent = str;\n UpdateBuildings(); // Class has been already set\n}\n","import { menuFunctions as mF } from '@cookiemonsterteam/cookiemonsterframework';\nimport { ConfigGroups, ConfigGroupsNotification } from '../../Data/Sectionheaders';\nimport settings from '../../Data/settings';\nimport UpdateColours from '../HelperFunctions/UpdateColours';\nimport RefreshScale from '../HelperFunctions/RefreshScale';\n\n/**\n * Creates the
to be added to the Options section\n * @returns {object} menuDiv\tObject of the
of Cookie Monster in options tab\n */\nexport default function createMenuOptions() {\n const menuDiv = mF.createModMenuSection('cookieMonsterMod', 'Cookie Monster', 'optionsMenu');\n\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers.optionsMenu) {\n Object.keys(ConfigGroups).forEach((group) => {\n if (group === 'Favourite') {\n if (\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.favouriteSettings.length !==\n 0 &&\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.FavouriteSettings > 0\n ) {\n menuDiv.appendChild(\n mF.listings.createOptionsSubHeader('cookieMonsterMod', group, ConfigGroups[group]),\n );\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers[group])\n for (\n let index = 0;\n index <\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.favouriteSettings.length;\n index++\n ) {\n menuDiv.appendChild(\n mF.listings.createOptionsListing(\n 'cookieMonsterMod',\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.favouriteSettings[\n index\n ],\n settings,\n UpdateColours,\n RefreshScale,\n ),\n );\n }\n }\n } else {\n menuDiv.appendChild(\n mF.listings.createOptionsSubHeader('cookieMonsterMod', group, ConfigGroups[group]),\n );\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers[group]) {\n // 0 is show, 1 is collapsed\n // Make sub-sections of Notification section\n if (group === 'Notification') {\n Object.keys(ConfigGroupsNotification).forEach((subGroup) => {\n const subGroupObject = mF.listings.createOptionsSubHeader(\n 'cookieMonsterMod',\n subGroup,\n ConfigGroupsNotification[subGroup],\n );\n subGroupObject.style.fontSize = '15px';\n subGroupObject.style.opacity = '0.5';\n menuDiv.appendChild(subGroupObject);\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers[subGroup]) {\n Object.keys(settings).forEach((option) => {\n if (settings[option].group === subGroup)\n menuDiv.appendChild(\n mF.listings.createOptionsListing(\n 'cookieMonsterMod',\n option,\n settings,\n UpdateColours,\n RefreshScale,\n ),\n );\n });\n }\n });\n } else {\n Object.keys(settings).forEach((option) => {\n if (settings[option].group === group)\n menuDiv.appendChild(\n mF.listings.createOptionsListing(\n 'cookieMonsterMod',\n option,\n settings,\n UpdateColours,\n RefreshScale,\n ),\n );\n });\n }\n }\n }\n });\n }\n return menuDiv;\n}\n","/** Section: Functions related to the creation of basic DOM elements page */\n\nimport { ToggleHeader } from '../../../Config/ToggleSetting';\n\nimport { SimpleTooltipElements } from '../../VariablesAndData';\n\n/**\n * This function creates a header-object for the stats page\n * It is called by CM.Disp.AddMenuStats()\n * @param \t{string}\t\tconfig\tThe name of the Config-group\n * @param \t{string}\t\ttext\tThe to-be displayed name of the header\n * @returns\t{object}\t\tdiv\t\tThe header object\n */\nexport function StatsHeader(text, config) {\n const div = document.createElement('div');\n div.className = 'title';\n div.style.padding = '0px 16px';\n div.style.opacity = '0.7';\n div.style.fontSize = '17px';\n div.style.fontFamily = '\"Kavoon\", Georgia, serif';\n div.appendChild(document.createTextNode(`${text} `));\n const span = document.createElement('span');\n span.style.cursor = 'pointer';\n span.style.display = 'inline-block';\n span.style.height = '14px';\n span.style.width = '14px';\n span.style.borderRadius = '7px';\n span.style.textAlign = 'center';\n span.style.backgroundColor = '#C0C0C0';\n span.style.color = 'black';\n span.style.fontSize = '13px';\n span.style.verticalAlign = 'middle';\n span.textContent = Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers[config]\n ? '-'\n : '+';\n span.onclick = function () {\n ToggleHeader(config);\n Game.UpdateMenu();\n };\n div.appendChild(span);\n return div;\n}\n\n/**\n * This function creates an stats-listing-object for the stats page\n * It is called by CM.Disp.AddMenuStats()\n * @param \t{string}\t\ttype\t\tThe type fo the listing\n * @param \t{string}\t\tname\t\tThe name of the option\n * @param \t{object}\t\ttext\t\tThe text-object of the option\n * @param \t{string}\t\tplaceholder\tThe id of the to-be displayed tooltip if applicable\n * @returns\t{object}\t\tdiv\t\t\tThe option object\n */\nexport function StatsListing(type, name, text, placeholder) {\n const div = document.createElement('div');\n div.className = 'listing';\n\n const listingName = document.createElement('b');\n listingName.textContent = name;\n div.appendChild(listingName);\n if (type === 'withTooltip') {\n div.className = 'listing';\n div.appendChild(document.createTextNode(' '));\n\n const tooltip = document.createElement('span');\n tooltip.onmouseout = function () {\n Game.tooltip.hide();\n };\n tooltip.onmouseover = function () {\n Game.tooltip.draw(this, escape(SimpleTooltipElements[placeholder].innerHTML));\n };\n tooltip.style.cursor = 'default';\n tooltip.style.display = 'inline-block';\n tooltip.style.height = '10px';\n tooltip.style.width = '10px';\n tooltip.style.borderRadius = '5px';\n tooltip.style.textAlign = 'center';\n tooltip.style.backgroundColor = '#C0C0C0';\n tooltip.style.color = 'black';\n tooltip.style.fontSize = '9px';\n tooltip.style.verticalAlign = 'bottom';\n tooltip.textContent = '?';\n div.appendChild(tooltip);\n }\n div.appendChild(document.createTextNode(': '));\n div.appendChild(text);\n return div;\n}\n\n/**\n * This function creates an stats-listing-object for the stats page for missing items displays\n * It is called by CM.Disp.AddMenuStats()\n * @param \t{string}\t\ttype\t\tThe type fo the listing\n * @param \t{string}\t\tname\t\tThe name of the option\n * @param \t{object}\t\ttext\t\tThe text-object of the option\n * @param \t{bool}\t\t current Whether the season of the item is the current season\n * @returns\t{object}\t\tdiv\t\t\tThe option object\n */\nexport function StatsMissDispListing(type, name, text, current) {\n const div = document.createElement('div');\n div.className = 'listing';\n\n const listingName = document.createElement('b');\n listingName.textContent = name;\n if (current === true)\n listingName.style.color =\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.ColourGreen;\n div.appendChild(listingName);\n div.appendChild(document.createTextNode(': '));\n div.appendChild(text);\n return div;\n}\n\n/**\n * This function creates a tooltip containing all missing holiday items contained in the list theMissDisp\n * @param \t{list}\t\t\ttheMissDisp\t\tA list of the missing holiday items\n * @returns\t{object}\t\tfrag\t\t\tThe tooltip object\n */\nexport function StatsMissDisp(theMissDisp) {\n const frag = document.createDocumentFragment();\n frag.appendChild(document.createTextNode(`${theMissDisp.length} `));\n const span = document.createElement('span');\n span.onmouseout = function () {\n Game.tooltip.hide();\n };\n const placeholder = document.createElement('div');\n const missing = document.createElement('div');\n missing.style.minWidth = '140px';\n missing.style.marginBottom = '4px';\n const title = document.createElement('div');\n title.className = 'name';\n title.style.marginBottom = '4px';\n title.style.textAlign = 'center';\n title.textContent = 'Missing';\n missing.appendChild(title);\n Object.keys(theMissDisp).forEach((i) => {\n const div = document.createElement('div');\n div.style.textAlign = 'center';\n div.appendChild(document.createTextNode(theMissDisp[i]));\n missing.appendChild(div);\n });\n placeholder.appendChild(missing);\n span.onmouseover = function () {\n Game.tooltip.draw(this, escape(placeholder.innerHTML));\n };\n span.style.cursor = 'default';\n span.style.display = 'inline-block';\n span.style.height = '10px';\n span.style.width = '10px';\n span.style.borderRadius = '5px';\n span.style.textAlign = 'center';\n span.style.backgroundColor = '#C0C0C0';\n span.style.color = 'black';\n span.style.fontSize = '9px';\n span.style.verticalAlign = 'bottom';\n span.textContent = '?';\n frag.appendChild(span);\n return frag;\n}\n","import { saveAndLoadingFunctions } from '@cookiemonsterteam/cookiemonsterframework/src/index';\n\n/** Functions related to toggling or changing an individual setting */\n\n/** Used to name certain DOM or outside facing elements and refer to them */\nexport const ConfigPrefix = 'CMConfig';\n\n/**\n * This function toggles header options by incrementing them with 1 and handling changes\n * It is called by the onclick event of the +/- next to headers\n * @param \t{string}\tconfig\tThe name of the header\n */\nexport function ToggleHeader(config) {\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers[config] += 1;\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers[config] > 1)\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers[config] = 0;\n saveAndLoadingFunctions.saveFramework();\n}\n","/** Main function to create the sections of Cookie Monster on the Statistics page */\n\nimport { AddMissingUpgrades } from './CreateMissingUpgrades';\nimport * as CreateSections from './CreateStatsSections';\nimport * as CreateElements from './CreateDOMElements';\nimport * as GameData from '../../../Data/Gamedata';\n\nimport {\n CacheAverageClicks,\n CacheAverageCookiesFromClicks,\n CacheObjectsNextAchievement,\n CacheWrinklersFattest,\n CacheWrinklersNormal,\n CacheWrinklersTotal,\n} from '../../../Cache/VariablesAndData';\nimport PopAllNormalWrinklers from '../../HelperFunctions/PopWrinklers';\nimport { ClickTimes, CookieTimes } from '../../VariablesAndData';\nimport GetCPS from '../../HelperFunctions/GetCPS';\nimport Beautify from '../../BeautifyAndFormatting/Beautify';\nimport AddMissingAchievements from './CreateMissingAchievements';\n\n/**\n * This function adds stats created by CookieMonster to the stats page\n * It is called by CM.Disp.AddMenu\n * @param {object} title\tOn object that includes the title of the menu\n */\nexport default function AddMenuStats(title) {\n const stats = document.createElement('div');\n stats.className = 'subsection';\n stats.appendChild(title);\n\n stats.appendChild(CreateElements.StatsHeader('Lucky Cookies', 'Lucky'));\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers.Lucky) {\n stats.appendChild(CreateSections.LuckySection());\n }\n\n stats.appendChild(CreateElements.StatsHeader('Chain Cookies', 'Chain'));\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers.Chain) {\n stats.appendChild(CreateSections.ChainSection());\n }\n\n if (Game.Objects['Wizard tower'].minigameLoaded) {\n stats.appendChild(CreateElements.StatsHeader('Spells', 'Spells'));\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers.Spells) {\n stats.appendChild(CreateSections.SpellsSection());\n }\n }\n\n if (Game.Objects.Farm.minigameLoaded) {\n stats.appendChild(CreateElements.StatsHeader('Garden', 'Garden'));\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers.Garden) {\n stats.appendChild(CreateSections.GardenSection());\n }\n }\n\n stats.appendChild(CreateElements.StatsHeader('Prestige', 'Prestige'));\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers.Prestige) {\n stats.appendChild(CreateSections.PrestigeSection());\n }\n\n if (Game.cpsSucked > 0) {\n stats.appendChild(CreateElements.StatsHeader('Wrinklers', 'Wrink'));\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers.Wrink) {\n const popAllFrag = document.createDocumentFragment();\n popAllFrag.appendChild(\n document.createTextNode(\n `${Beautify(CacheWrinklersTotal)} / ${Beautify(CacheWrinklersNormal)} `,\n ),\n );\n const popAllA = document.createElement('a');\n popAllA.textContent = 'Pop All Normal';\n popAllA.className = 'option';\n popAllA.onclick = function () {\n PopAllNormalWrinklers();\n };\n popAllFrag.appendChild(popAllA);\n stats.appendChild(\n CreateElements.StatsListing('basic', 'Rewards of Popping (All/Normal)', popAllFrag),\n );\n const popFattestFrag = document.createDocumentFragment();\n popFattestFrag.appendChild(document.createTextNode(`${Beautify(CacheWrinklersFattest[0])} `));\n const popFattestA = document.createElement('a');\n popFattestA.textContent = 'Pop Single Fattest';\n popFattestA.className = 'option';\n popFattestA.onclick = function () {\n if (CacheWrinklersFattest[1] !== null) Game.wrinklers[CacheWrinklersFattest[1]].hp = 0;\n };\n popFattestFrag.appendChild(popFattestA);\n stats.appendChild(\n CreateElements.StatsListing(\n 'basic',\n `Rewards of Popping Single Fattest Non-Shiny Wrinkler (id: ${\n CacheWrinklersFattest[1] !== null ? CacheWrinklersFattest[1] : 'None'\n })`,\n popFattestFrag,\n ),\n );\n }\n }\n\n stats.appendChild(CreateSections.SeasonSection());\n\n stats.appendChild(CreateElements.StatsHeader('Achievements', 'Achievs'));\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers.Achievs) {\n Object.keys(Game.Objects).forEach((i) => {\n const ObjectsTillNext = CacheObjectsNextAchievement[i];\n stats.appendChild(\n CreateElements.StatsListing(\n 'basic',\n i,\n ObjectsTillNext.AmountNeeded < 101\n ? document.createTextNode(\n `Next achievement in ${ObjectsTillNext.AmountNeeded}, price: ${Beautify(\n ObjectsTillNext.price,\n )}`,\n )\n : document.createTextNode('No new achievement for next 100 buildings'),\n ),\n );\n });\n }\n\n stats.appendChild(CreateElements.StatsHeader('Miscellaneous', 'Misc'));\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers.Misc) {\n stats.appendChild(\n CreateElements.StatsListing(\n 'basic',\n `Average cookies per second (past ${\n CookieTimes[\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.AvgCPSHist\n ] < 60\n ? `${\n CookieTimes[\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.AvgCPSHist\n ]\n } seconds`\n : CookieTimes[\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.AvgCPSHist\n ] /\n 60 +\n (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.AvgCPSHist === 3\n ? ' minute'\n : ' minutes')\n })`,\n document.createTextNode(Beautify(GetCPS(), 3)),\n ),\n );\n stats.appendChild(\n CreateElements.StatsListing(\n 'basic',\n `Average cookie clicks per second (past ${\n ClickTimes[\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.AvgClicksHist\n ]\n }${\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.AvgClicksHist === 0\n ? ' second'\n : ' seconds'\n })`,\n document.createTextNode(Beautify(CacheAverageClicks, 1)),\n ),\n );\n stats.appendChild(\n CreateElements.StatsListing(\n 'basic',\n `Cookies from clicking (past ${\n ClickTimes[\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.AvgClicksHist\n ]\n }${\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.AvgClicksHist === 0\n ? ' second'\n : ' seconds'\n })`,\n document.createTextNode(\n Beautify(\n CacheAverageCookiesFromClicks.calcSum(\n CacheAverageClicks *\n ClickTimes[\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.AvgClicksHist\n ],\n ),\n ),\n ),\n ),\n );\n if (Game.Has('Fortune cookies')) {\n const fortunes = [];\n Object.keys(GameData.Fortunes).forEach((i) => {\n if (!Game.Has(GameData.Fortunes[i])) {\n fortunes.push(GameData.Fortunes[i]);\n }\n });\n if (fortunes.length !== 0)\n stats.appendChild(\n CreateElements.StatsListing(\n 'basic',\n 'Fortune Upgrades Left to Buy',\n CreateElements.StatsMissDisp(fortunes),\n ),\n );\n }\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.ShowMissedGC) {\n stats.appendChild(\n CreateElements.StatsListing(\n 'basic',\n 'Missed golden cookies',\n document.createTextNode(Beautify(Game.missedGoldenClicks)),\n ),\n );\n }\n if (Game.prefs.autosave) {\n const timer = document.createElement('span');\n timer.id = 'CMStatsAutosaveTimer';\n timer.innerText = Game.sayTime(\n Game.fps * 60 - (Game.OnAscend ? 0 : Game.T % (Game.fps * 60)),\n 4,\n );\n stats.appendChild(CreateElements.StatsListing('basic', 'Time till autosave', timer));\n }\n }\n\n l('menu').insertBefore(stats, l('menu').childNodes[2]);\n\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.MissingUpgrades) {\n AddMissingUpgrades();\n }\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.MissingAchievements) {\n AddMissingAchievements();\n }\n}\n","/** Functions to create the individual sections of the Statistics page */\n\nimport * as GameData from '../../../Data/Gamedata';\nimport { MaxChainCookieReward } from '../../../Cache/Stats/ChainCookies';\nimport {\n CacheAvgCPSWithChoEgg,\n CacheCentEgg,\n CacheChainFrenzyMaxReward,\n CacheChainFrenzyRequired,\n CacheChainFrenzyRequiredNext,\n CacheChainFrenzyWrathRequired,\n CacheChainFrenzyWrathRequiredNext,\n CacheChainMaxReward,\n CacheChainRequired,\n CacheChainRequiredNext,\n CacheChainWrathMaxReward,\n CacheChainWrathRequired,\n CacheChainWrathRequiredNext,\n CacheConjure,\n CacheConjureReward,\n CacheDragonsFortuneMultAdjustment,\n CacheEdifice,\n CacheEdificeBuilding,\n CacheGoldenCookiesMult,\n CacheHCPerSecond,\n CacheLastChoEgg,\n CacheLucky,\n CacheLuckyFrenzy,\n CacheLuckyReward,\n CacheLuckyRewardFrenzy,\n CacheLuckyWrathReward,\n CacheLuckyWrathRewardFrenzy,\n CacheNoGoldSwitchCookiesPS,\n CacheRealCookiesEarned,\n CacheSeaSpec,\n CacheWrathCookiesMult,\n CacheWrinklersTotal,\n} from '../../../Cache/VariablesAndData';\nimport ResetBonus from '../../../Sim/SimulationEvents/ResetAscension';\nimport GetCPS from '../../HelperFunctions/GetCPS';\nimport GetWrinkConfigBank from '../../HelperFunctions/GetWrinkConfigBank';\nimport { ColourGreen, ColourRed, ColourTextPre } from '../../VariablesAndData';\nimport {\n StatsListing,\n StatsHeader,\n StatsMissDisp,\n StatsMissDispListing,\n} from './CreateDOMElements';\nimport Beautify from '../../BeautifyAndFormatting/Beautify';\nimport FormatTime from '../../BeautifyAndFormatting/FormatTime';\n\n/**\n * This function creates the \"Lucky\" section of the stats page\n * @returns\t{object}\tsection\t\tThe object contating the Lucky section\n */\nexport function LuckySection() {\n // This sets which tooltip to display for certain stats\n const goldCookTooltip = Game.auraMult(\"Dragon's Fortune\")\n ? 'GoldCookDragonsFortuneTooltipPlaceholder'\n : 'GoldCookTooltipPlaceholder';\n\n const section = document.createElement('div');\n section.className = 'CMStatsLuckySection';\n\n const luckyColour = Game.cookies + GetWrinkConfigBank() < CacheLucky ? ColourRed : ColourGreen;\n const luckyTime =\n Game.cookies + GetWrinkConfigBank() < CacheLucky\n ? FormatTime((CacheLucky - (Game.cookies + GetWrinkConfigBank())) / GetCPS())\n : '';\n const luckyReqFrag = document.createDocumentFragment();\n const luckyReqSpan = document.createElement('span');\n luckyReqSpan.style.fontWeight = 'bold';\n luckyReqSpan.className = ColourTextPre + luckyColour;\n luckyReqSpan.textContent = Beautify(CacheLucky);\n luckyReqFrag.appendChild(luckyReqSpan);\n if (luckyTime !== '') {\n const luckyReqSmall = document.createElement('small');\n luckyReqSmall.textContent = ` (${luckyTime})`;\n luckyReqFrag.appendChild(luckyReqSmall);\n }\n section.appendChild(\n StatsListing('withTooltip', '\"Lucky!\" cookies required', luckyReqFrag, goldCookTooltip),\n );\n\n const luckyColourFrenzy =\n Game.cookies + GetWrinkConfigBank() < CacheLuckyFrenzy ? ColourRed : ColourGreen;\n const luckyTimeFrenzy =\n Game.cookies + GetWrinkConfigBank() < CacheLuckyFrenzy\n ? FormatTime((CacheLuckyFrenzy - (Game.cookies + GetWrinkConfigBank())) / GetCPS())\n : '';\n const luckyReqFrenFrag = document.createDocumentFragment();\n const luckyReqFrenSpan = document.createElement('span');\n luckyReqFrenSpan.style.fontWeight = 'bold';\n luckyReqFrenSpan.className = ColourTextPre + luckyColourFrenzy;\n luckyReqFrenSpan.textContent = Beautify(CacheLuckyFrenzy);\n luckyReqFrenFrag.appendChild(luckyReqFrenSpan);\n if (luckyTimeFrenzy !== '') {\n const luckyReqFrenSmall = document.createElement('small');\n luckyReqFrenSmall.textContent = ` (${luckyTimeFrenzy})`;\n luckyReqFrenFrag.appendChild(luckyReqFrenSmall);\n }\n section.appendChild(\n StatsListing(\n 'withTooltip',\n '\"Lucky!\" cookies required (frenzy)',\n luckyReqFrenFrag,\n goldCookTooltip,\n ),\n );\n\n const luckySplit = CacheLuckyReward !== CacheLuckyWrathReward;\n\n const luckyRewardMaxSpan = document.createElement('span');\n luckyRewardMaxSpan.style.fontWeight = 'bold';\n luckyRewardMaxSpan.className = ColourTextPre + CacheLuckyReward;\n luckyRewardMaxSpan.textContent =\n Beautify(CacheLuckyReward) + (luckySplit ? ` / ${Beautify(CacheLuckyWrathReward)}` : '');\n section.appendChild(\n StatsListing(\n 'withTooltip',\n `\"Lucky!\" reward (max)${luckySplit ? ' (golden / wrath)' : ''}`,\n luckyRewardMaxSpan,\n goldCookTooltip,\n ),\n );\n\n const luckyRewardFrenzyMaxSpan = document.createElement('span');\n luckyRewardFrenzyMaxSpan.style.fontWeight = 'bold';\n luckyRewardFrenzyMaxSpan.className = ColourTextPre + luckyRewardFrenzyMaxSpan;\n luckyRewardFrenzyMaxSpan.textContent =\n Beautify(CacheLuckyRewardFrenzy) +\n (luckySplit ? ` / ${Beautify(CacheLuckyWrathRewardFrenzy)}` : '');\n section.appendChild(\n StatsListing(\n 'withTooltip',\n `\"Lucky!\" reward (max) (frenzy)${luckySplit ? ' (golden / wrath)' : ''}`,\n luckyRewardFrenzyMaxSpan,\n goldCookTooltip,\n ),\n );\n\n const luckyCurBase =\n Math.min(\n (Game.cookies + GetWrinkConfigBank()) * 0.15,\n CacheNoGoldSwitchCookiesPS * CacheDragonsFortuneMultAdjustment * 60 * 15,\n ) + 13;\n const luckyCurSpan = document.createElement('span');\n luckyCurSpan.style.fontWeight = 'bold';\n luckyCurSpan.className = ColourTextPre + luckyCurSpan;\n luckyCurSpan.textContent =\n Beautify(CacheGoldenCookiesMult * luckyCurBase) +\n (luckySplit ? ` / ${Beautify(CacheWrathCookiesMult * luckyCurBase)}` : '');\n section.appendChild(\n StatsListing(\n 'withTooltip',\n `\"Lucky!\" reward (cur)${luckySplit ? ' (golden / wrath)' : ''}`,\n luckyCurSpan,\n goldCookTooltip,\n ),\n );\n return section;\n}\n\n/**\n * This function creates the \"Chain\" section of the stats page\n * @returns\t{object}\tsection\t\tThe object contating the Chain section\n */\nexport function ChainSection() {\n // This sets which tooltip to display for certain stats\n const goldCookTooltip = Game.auraMult(\"Dragon's Fortune\")\n ? 'GoldCookDragonsFortuneTooltipPlaceholder'\n : 'GoldCookTooltipPlaceholder';\n\n const section = document.createElement('div');\n section.className = 'CMStatsChainSection';\n\n const chainColour =\n Game.cookies + GetWrinkConfigBank() < CacheChainRequired ? ColourRed : ColourGreen;\n const chainTime =\n Game.cookies + GetWrinkConfigBank() < CacheChainRequired\n ? FormatTime((CacheChainRequired - (Game.cookies + GetWrinkConfigBank())) / GetCPS())\n : '';\n const chainReqFrag = document.createDocumentFragment();\n const chainReqSpan = document.createElement('span');\n chainReqSpan.style.fontWeight = 'bold';\n chainReqSpan.className = ColourTextPre + chainColour;\n chainReqSpan.textContent = Beautify(CacheChainRequired);\n chainReqFrag.appendChild(chainReqSpan);\n if (chainTime !== '') {\n const chainReqSmall = document.createElement('small');\n chainReqSmall.textContent = ` (${chainTime})`;\n chainReqFrag.appendChild(chainReqSmall);\n }\n section.appendChild(\n StatsListing('withTooltip', '\"Chain\" cookies required', chainReqFrag, goldCookTooltip),\n );\n\n const chainWrathColour =\n Game.cookies + GetWrinkConfigBank() < CacheChainWrathRequired ? ColourRed : ColourGreen;\n const chainWrathTime =\n Game.cookies + GetWrinkConfigBank() < CacheChainWrathRequired\n ? FormatTime((CacheChainWrathRequired - (Game.cookies + GetWrinkConfigBank())) / GetCPS())\n : '';\n const chainWrathReqFrag = document.createDocumentFragment();\n const chainWrathReqSpan = document.createElement('span');\n chainWrathReqSpan.style.fontWeight = 'bold';\n chainWrathReqSpan.className = ColourTextPre + chainWrathColour;\n chainWrathReqSpan.textContent = Beautify(CacheChainWrathRequired);\n chainWrathReqFrag.appendChild(chainWrathReqSpan);\n if (chainWrathTime !== '') {\n const chainWrathReqSmall = document.createElement('small');\n chainWrathReqSmall.textContent = ` (${chainWrathTime})`;\n chainWrathReqFrag.appendChild(chainWrathReqSmall);\n }\n section.appendChild(\n StatsListing(\n 'withTooltip',\n '\"Chain\" cookies required (Wrath)',\n chainWrathReqFrag,\n goldCookTooltip,\n ),\n );\n\n const chainColourFrenzy =\n Game.cookies + GetWrinkConfigBank() < CacheChainFrenzyRequired ? ColourRed : ColourGreen;\n const chainTimeFrenzy =\n Game.cookies + GetWrinkConfigBank() < CacheChainFrenzyRequired\n ? FormatTime((CacheChainFrenzyRequired - (Game.cookies + GetWrinkConfigBank())) / GetCPS())\n : '';\n const chainReqFrenFrag = document.createDocumentFragment();\n const chainReqFrenSpan = document.createElement('span');\n chainReqFrenSpan.style.fontWeight = 'bold';\n chainReqFrenSpan.className = ColourTextPre + chainColourFrenzy;\n chainReqFrenSpan.textContent = Beautify(CacheChainFrenzyRequired);\n chainReqFrenFrag.appendChild(chainReqFrenSpan);\n if (chainTimeFrenzy !== '') {\n const chainReqFrenSmall = document.createElement('small');\n chainReqFrenSmall.textContent = ` (${chainTimeFrenzy})`;\n chainReqFrenFrag.appendChild(chainReqFrenSmall);\n }\n section.appendChild(\n StatsListing(\n 'withTooltip',\n '\"Chain\" cookies required (Frenzy)',\n chainReqFrenFrag,\n goldCookTooltip,\n ),\n );\n\n const chainWrathColourFrenzy =\n Game.cookies + GetWrinkConfigBank() < CacheChainFrenzyWrathRequired ? ColourRed : ColourGreen;\n const chainWrathTimeFrenzy =\n Game.cookies + GetWrinkConfigBank() < CacheChainFrenzyWrathRequired\n ? FormatTime(\n (CacheChainFrenzyWrathRequired - (Game.cookies + GetWrinkConfigBank())) / GetCPS(),\n )\n : '';\n const chainWrathReqFrenFrag = document.createDocumentFragment();\n const chainWrathReqFrenSpan = document.createElement('span');\n chainWrathReqFrenSpan.style.fontWeight = 'bold';\n chainWrathReqFrenSpan.className = ColourTextPre + chainWrathColourFrenzy;\n chainWrathReqFrenSpan.textContent = Beautify(CacheChainFrenzyWrathRequired);\n chainWrathReqFrenFrag.appendChild(chainWrathReqFrenSpan);\n if (chainWrathTimeFrenzy !== '') {\n const chainWrathReqFrenSmall = document.createElement('small');\n chainWrathReqFrenSmall.textContent = ` (${chainWrathTimeFrenzy})`;\n chainWrathReqFrenFrag.appendChild(chainWrathReqFrenSmall);\n }\n section.appendChild(\n StatsListing(\n 'withTooltip',\n '\"Chain\" cookies required (frenzy) (Wrath)',\n chainWrathReqFrenFrag,\n goldCookTooltip,\n ),\n );\n\n section.appendChild(\n StatsListing(\n 'withTooltip',\n '\"Chain\" reward (max) (golden / wrath)',\n document.createTextNode(\n `${Beautify(CacheChainMaxReward[0])} / ${Beautify(CacheChainWrathMaxReward[0])}`,\n ),\n goldCookTooltip,\n ),\n );\n\n section.appendChild(\n StatsListing(\n 'withTooltip',\n '\"Chain\" reward (max) (frenzy) (golden / wrath)',\n document.createTextNode(\n `${Beautify(CacheChainFrenzyMaxReward[0])} / ${Beautify(CacheChainFrenzyMaxReward[0])}`,\n ),\n goldCookTooltip,\n ),\n );\n\n const chainCurMax = Math.min(\n Game.cookiesPs * 60 * 60 * 6 * CacheDragonsFortuneMultAdjustment,\n Game.cookies * 0.5,\n );\n const chainCur = MaxChainCookieReward(7, chainCurMax, CacheGoldenCookiesMult)[0];\n const chainCurWrath = MaxChainCookieReward(6, chainCurMax, CacheWrathCookiesMult)[0];\n section.appendChild(\n StatsListing(\n 'withTooltip',\n '\"Chain\" reward (cur) (golden / wrath)',\n document.createTextNode(`${Beautify(chainCur)} / ${Beautify(chainCurWrath)}`),\n goldCookTooltip,\n ),\n );\n\n section.appendChild(\n StatsListing(\n 'withTooltip',\n 'CPS needed for next level (g / w)',\n document.createTextNode(\n `${Beautify(CacheChainRequiredNext)} / ${Beautify(CacheChainWrathRequiredNext)}`,\n ),\n 'ChainNextLevelPlaceholder',\n ),\n );\n section.appendChild(\n StatsListing(\n 'withTooltip',\n 'CPS needed for next level (frenzy) (g / w)',\n document.createTextNode(\n `${Beautify(CacheChainFrenzyRequiredNext)} / ${Beautify(\n CacheChainFrenzyWrathRequiredNext,\n )}`,\n ),\n 'ChainNextLevelPlaceholder',\n ),\n );\n return section;\n}\n\n/**\n * This function creates the \"Spells\" section of the stats page\n * @returns\t{object}\tsection\t\tThe object contating the Spells section\n */\nexport function SpellsSection() {\n const section = document.createElement('div');\n section.className = 'CMStatsSpellsSection';\n\n const conjureColour =\n Game.cookies + GetWrinkConfigBank() < CacheConjure ? ColourRed : ColourGreen;\n const conjureTime =\n Game.cookies + GetWrinkConfigBank() < CacheConjure\n ? FormatTime((CacheConjure - (Game.cookies + GetWrinkConfigBank())) / GetCPS())\n : '';\n\n const conjureReqFrag = document.createDocumentFragment();\n const conjureReqSpan = document.createElement('span');\n conjureReqSpan.style.fontWeight = 'bold';\n conjureReqSpan.className = ColourTextPre + conjureColour;\n conjureReqSpan.textContent = Beautify(CacheConjure);\n conjureReqFrag.appendChild(conjureReqSpan);\n if (conjureTime !== '') {\n const conjureReqSmall = document.createElement('small');\n conjureReqSmall.textContent = ` (${conjureTime})`;\n conjureReqFrag.appendChild(conjureReqSmall);\n }\n section.appendChild(\n StatsListing(\n 'withTooltip',\n '\"Conjure Baked Goods\" cookies required',\n conjureReqFrag,\n 'GoldCookTooltipPlaceholder',\n ),\n );\n section.appendChild(\n StatsListing(\n 'withTooltip',\n '\"Conjure Baked Goods\" reward (max)',\n document.createTextNode(Beautify(CacheConjureReward)),\n 'GoldCookTooltipPlaceholder',\n ),\n );\n\n const conjureFrenzyColour =\n Game.cookies + GetWrinkConfigBank() < CacheConjure * 7 ? ColourRed : ColourGreen;\n const conjureFrenzyCur = Math.min(\n (Game.cookies + GetWrinkConfigBank()) * 0.15,\n CacheNoGoldSwitchCookiesPS * 60 * 30,\n );\n const conjureFrenzyTime =\n Game.cookies + GetWrinkConfigBank() < CacheConjure * 7\n ? FormatTime((CacheConjure * 7 - (Game.cookies + GetWrinkConfigBank())) / GetCPS())\n : '';\n\n const conjureFrenzyReqFrag = document.createDocumentFragment();\n const conjureFrenzyReqSpan = document.createElement('span');\n conjureFrenzyReqSpan.style.fontWeight = 'bold';\n conjureFrenzyReqSpan.className = ColourTextPre + conjureFrenzyColour;\n conjureFrenzyReqSpan.textContent = Beautify(CacheConjure * 7);\n conjureFrenzyReqFrag.appendChild(conjureFrenzyReqSpan);\n if (conjureFrenzyTime !== '') {\n const conjureFrenzyReqSmall = document.createElement('small');\n conjureFrenzyReqSmall.textContent = ` (${conjureFrenzyTime})`;\n conjureFrenzyReqFrag.appendChild(conjureFrenzyReqSmall);\n }\n section.appendChild(\n StatsListing(\n 'withTooltip',\n '\"Conjure Baked Goods\" cookies required (frenzy)',\n conjureFrenzyReqFrag,\n 'GoldCookTooltipPlaceholder',\n ),\n );\n section.appendChild(\n StatsListing(\n 'withTooltip',\n '\"Conjure Baked Goods\" reward (max) (frenzy)',\n document.createTextNode(Beautify(CacheConjureReward * 7)),\n 'GoldCookTooltipPlaceholder',\n ),\n );\n section.appendChild(\n StatsListing(\n 'withTooltip',\n '\"Conjure Baked Goods\" reward (cur)',\n document.createTextNode(Beautify(conjureFrenzyCur)),\n 'GoldCookTooltipPlaceholder',\n ),\n );\n if (CacheEdifice) {\n section.appendChild(\n StatsListing(\n 'withTooltip',\n '\"Spontaneous Edifice\" cookies required (most expensive building)',\n document.createTextNode(`${Beautify(CacheEdifice)} (${CacheEdificeBuilding})`),\n 'GoldCookTooltipPlaceholder',\n ),\n );\n }\n return section;\n}\n\n/**\n * This function creates the \"Garden\" section of the stats page\n * @returns\t{object}\tsection\t\tThe object contating the Spells section\n */\nexport function GardenSection() {\n const section = document.createElement('div');\n section.className = 'CMStatsGardenSection';\n\n const bakeberryColour = Game.cookies < Game.cookiesPs * 60 * 10 * 100 ? ColourRed : ColourGreen;\n const bakeberryFrag = document.createElement('span');\n bakeberryFrag.style.fontWeight = 'bold';\n bakeberryFrag.className = ColourTextPre + bakeberryColour;\n bakeberryFrag.textContent = Beautify(Game.cookiesPs * 60 * 10 * 100);\n section.appendChild(\n StatsListing('basic', 'Cookies required for max reward of Bakeberry: ', bakeberryFrag),\n );\n\n const chocorootColour = Game.cookies < Game.cookiesPs * 60 * 100 ? ColourRed : ColourGreen;\n const chocorootFrag = document.createElement('span');\n chocorootFrag.style.fontWeight = 'bold';\n chocorootFrag.className = ColourTextPre + chocorootColour;\n chocorootFrag.textContent = Beautify(Game.cookiesPs * 60 * 100);\n section.appendChild(\n StatsListing('basic', 'Cookies required for max reward of Chocoroot: ', chocorootFrag),\n );\n\n const queenbeetColour = Game.cookies < Game.cookiesPs * 60 * 60 * 25 ? ColourRed : ColourGreen;\n const queenbeetFrag = document.createElement('span');\n queenbeetFrag.style.fontWeight = 'bold';\n queenbeetFrag.className = ColourTextPre + queenbeetColour;\n queenbeetFrag.textContent = Beautify(Game.cookiesPs * 60 * 60 * 25);\n section.appendChild(\n StatsListing('basic', 'Cookies required for max reward of Queenbeet: ', queenbeetFrag),\n );\n\n const duketaterColour = Game.cookies < Game.cookiesPs * 60 * 15 * 100 ? ColourRed : ColourGreen;\n const duketaterFrag = document.createElement('span');\n duketaterFrag.style.fontWeight = 'bold';\n duketaterFrag.className = ColourTextPre + duketaterColour;\n duketaterFrag.textContent = Beautify(Game.cookiesPs * 60 * 15 * 100);\n section.appendChild(\n StatsListing('basic', 'Cookies required for max reward of Duketater: ', duketaterFrag),\n );\n const missingPlantDrops = [];\n Object.keys(GameData.PlantDrops).forEach((i) => {\n if (!Game.HasUnlocked(GameData.PlantDrops[i])) {\n missingPlantDrops.push(GameData.PlantDrops[i]);\n }\n });\n if (missingPlantDrops.length !== 0) {\n section.appendChild(\n StatsListing('basic', 'Rare plant drops left to unlock', StatsMissDisp(missingPlantDrops)),\n );\n }\n return section;\n}\n\n/**\n * This function creates the \"Prestige\" section of the stats page\n * @returns\t{object}\tsection\t\tThe object contating the Prestige section\n */\nexport function PrestigeSection() {\n const section = document.createElement('div');\n section.className = 'CMStatsPrestigeSection';\n\n const possiblePresMax = Math.floor(\n Game.HowMuchPrestige(\n CacheRealCookiesEarned +\n Game.cookiesReset +\n CacheWrinklersTotal +\n (Game.HasUnlocked('Chocolate egg') && !Game.Has('Chocolate egg') ? CacheLastChoEgg : 0),\n ),\n );\n section.appendChild(\n StatsListing(\n 'withTooltip',\n 'Prestige level (cur / max)',\n document.createTextNode(`${Beautify(Game.prestige)} / ${Beautify(possiblePresMax)}`),\n 'PrestMaxTooltipPlaceholder',\n ),\n );\n\n const neededCook = Math.max(\n 0,\n Game.HowManyCookiesReset(possiblePresMax + 1) -\n (CacheRealCookiesEarned +\n Game.cookiesReset +\n CacheWrinklersTotal +\n ((Game.HasUnlocked('Chocolate egg') && !Game.Has('Chocolate egg') ? CacheLastChoEgg : 0)\n ? CacheLastChoEgg\n : 0)),\n );\n const cookiesNextFrag = document.createDocumentFragment();\n cookiesNextFrag.appendChild(document.createTextNode(Beautify(neededCook)));\n const cookiesNextSmall = document.createElement('small');\n cookiesNextSmall.textContent = ` (${FormatTime(neededCook / CacheAvgCPSWithChoEgg, 1)})`;\n cookiesNextFrag.appendChild(cookiesNextSmall);\n section.appendChild(\n StatsListing(\n 'withTooltip',\n 'Cookies to next level',\n cookiesNextFrag,\n 'NextPrestTooltipPlaceholder',\n ),\n );\n\n section.appendChild(\n StatsListing(\n 'withTooltip',\n 'Heavenly chips (cur / max)',\n document.createTextNode(\n `${Beautify(Game.heavenlyChips)} / ${Beautify(\n possiblePresMax - Game.prestige + Game.heavenlyChips,\n )}`,\n ),\n 'HeavenChipMaxTooltipPlaceholder',\n ),\n );\n\n section.appendChild(\n StatsListing(\n 'basic',\n 'Heavenly chips per second (last 5 seconds)',\n document.createTextNode(Beautify(CacheHCPerSecond, 2)),\n ),\n );\n\n const HCTarget = Number(\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.HeavenlyChipsTarget,\n );\n if (!Number.isNaN(HCTarget)) {\n const CookiesTillTarget =\n HCTarget - Math.floor(Game.HowMuchPrestige(Game.cookiesReset + Game.cookiesEarned));\n if (CookiesTillTarget > 0) {\n section.appendChild(\n StatsListing(\n 'basic',\n 'Heavenly chips to target set in settings (cur)',\n document.createTextNode(Beautify(CookiesTillTarget)),\n ),\n );\n section.appendChild(\n StatsListing(\n 'basic',\n 'Time till target (cur, current 5 second average)',\n document.createTextNode(FormatTime(CookiesTillTarget / CacheHCPerSecond)),\n ),\n );\n }\n }\n\n const resetBonus = ResetBonus(possiblePresMax);\n const resetFrag = document.createDocumentFragment();\n resetFrag.appendChild(document.createTextNode(Beautify(resetBonus)));\n const increase = Math.round((resetBonus / Game.cookiesPs) * 10000);\n if (Number.isFinite(increase) && increase !== 0) {\n const resetSmall = document.createElement('small');\n resetSmall.textContent = ` (${increase / 100}% of income)`;\n resetFrag.appendChild(resetSmall);\n }\n section.appendChild(\n StatsListing('withTooltip', 'Reset bonus income', resetFrag, 'ResetTooltipPlaceholder'),\n );\n\n const currentPrestige = Math.floor(Game.HowMuchPrestige(Game.cookiesReset));\n const willHave = Math.floor(Game.HowMuchPrestige(Game.cookiesReset + Game.cookiesEarned));\n const willGet = willHave - currentPrestige;\n if (!Game.Has('Lucky digit')) {\n let delta7 = 7 - (willHave % 10);\n if (delta7 < 0) delta7 += 10;\n const next7Reset = willGet + delta7;\n const next7Total = willHave + delta7;\n const frag7 = document.createDocumentFragment();\n frag7.appendChild(\n document.createTextNode(\n `${next7Total.toLocaleString()} / ${next7Reset.toLocaleString()} (+${delta7})`,\n ),\n );\n section.appendChild(StatsListing('basic', 'Next \"Lucky Digit\" (total / reset)', frag7));\n }\n\n if (!Game.Has('Lucky number')) {\n let delta777 = 777 - (willHave % 1000);\n if (delta777 < 0) delta777 += 1000;\n const next777Reset = willGet + delta777;\n const next777Total = willHave + delta777;\n const frag777 = document.createDocumentFragment();\n frag777.appendChild(\n document.createTextNode(\n `${next777Total.toLocaleString()} / ${next777Reset.toLocaleString()} (+${delta777})`,\n ),\n );\n section.appendChild(StatsListing('basic', 'Next \"Lucky Number\" (total / reset)', frag777));\n }\n\n if (!Game.Has('Lucky payout')) {\n let delta777777 = 777777 - (willHave % 1000000);\n if (delta777777 < 0) delta777777 += 1000000;\n const next777777Reset = willGet + delta777777;\n const next777777Total = willHave + delta777777;\n const frag777777 = document.createDocumentFragment();\n frag777777.appendChild(\n document.createTextNode(\n `${next777777Total.toLocaleString()} / ${next777777Reset.toLocaleString()} (+${delta777777})`,\n ),\n );\n section.appendChild(StatsListing('basic', 'Next \"Lucky Payout\" (total / reset)', frag777777));\n }\n\n return section;\n}\n\n/**\n * This function creates the \"Season Specials\" section of the stats page\n * @returns\t{object}\tsection\t\tThe object contating the Season Specials section\n */\nexport function SeasonSection() {\n const section = document.createElement('div');\n section.className = 'CMStatsSeasonSection';\n\n let specDisp = false;\n const missingHalloweenCookies = [];\n Object.keys(GameData.HalloCookies).forEach((i) => {\n if (!Game.Has(GameData.HalloCookies[i])) {\n missingHalloweenCookies.push(GameData.HalloCookies[i]);\n specDisp = true;\n }\n });\n const missingChristmasCookies = [];\n Object.keys(GameData.ChristCookies).forEach((i) => {\n if (!Game.Has(GameData.ChristCookies[i])) {\n missingChristmasCookies.push(GameData.ChristCookies[i]);\n specDisp = true;\n }\n });\n const missingValentineCookies = [];\n Object.keys(GameData.ValCookies).forEach((i) => {\n if (!Game.Has(GameData.ValCookies[i])) {\n missingValentineCookies.push(GameData.ValCookies[i]);\n specDisp = true;\n }\n });\n const missingNormalEggs = [];\n Object.keys(Game.eggDrops).forEach((i) => {\n if (!Game.HasUnlocked(Game.eggDrops[i])) {\n missingNormalEggs.push(Game.eggDrops[i]);\n specDisp = true;\n }\n });\n const missingRareEggs = [];\n Object.keys(Game.rareEggDrops).forEach((i) => {\n if (!Game.HasUnlocked(Game.rareEggDrops[i])) {\n missingRareEggs.push(Game.rareEggDrops[i]);\n specDisp = true;\n }\n });\n const choEgg = Game.HasUnlocked('Chocolate egg') && !Game.Has('Chocolate egg');\n const centEgg = Game.Has('Century egg');\n\n if (Game.season === 'christmas' || specDisp || choEgg || centEgg) {\n section.appendChild(StatsHeader('Season Specials', 'Sea'));\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers.Sea) {\n if (missingHalloweenCookies.length !== 0) {\n section.appendChild(\n StatsMissDispListing(\n 'basic',\n 'Halloween cookies left to buy',\n StatsMissDisp(missingHalloweenCookies),\n Game.season === 'halloween',\n ),\n );\n let failRateHalloween = 0.95;\n if (Game.HasAchiev('Spooky cookies')) failRateHalloween = 0.8;\n if (Game.Has('Starterror')) failRateHalloween *= 0.9;\n failRateHalloween *= 1 / Game.dropRateMult();\n if (Game.hasGod) {\n const godLvl = Game.hasGod('seasons');\n if (godLvl === 1) failRateHalloween *= 0.9;\n else if (godLvl === 2) failRateHalloween *= 0.95;\n else if (godLvl === 3) failRateHalloween *= 0.97;\n }\n const obtainedCookiesChance = missingHalloweenCookies.length / 7;\n section.appendChild(\n StatsMissDispListing(\n 'basic',\n 'Chance of receiving a cookie from wrinkler/shiny wrinkler',\n document.createTextNode(\n `${Beautify((1 - failRateHalloween) * obtainedCookiesChance * 100)}% / ${Beautify(\n (1 - failRateHalloween * 0.9) * obtainedCookiesChance * 100,\n )}%`,\n ),\n Game.season === 'halloween',\n ),\n );\n }\n if (missingChristmasCookies.length !== 0) {\n section.appendChild(\n StatsMissDispListing(\n 'basic',\n 'Christmas cookies left to buy',\n StatsMissDisp(missingChristmasCookies),\n Game.season === 'christmas',\n ),\n );\n let failRateChristmas = 0.8;\n if (Game.HasAchiev('Let it snow')) failRateChristmas = 0.6;\n failRateChristmas *= 1 / Game.dropRateMult();\n if (Game.Has('Starsnow')) failRateChristmas *= 0.95;\n if (Game.hasGod) {\n const godLvl = Game.hasGod('seasons');\n if (godLvl === 1) failRateChristmas *= 0.9;\n else if (godLvl === 2) failRateChristmas *= 0.95;\n else if (godLvl === 3) failRateChristmas *= 0.97;\n }\n const obtainedCookiesChance = missingChristmasCookies.length / 7;\n section.appendChild(\n StatsMissDispListing(\n 'basic',\n 'Chance of receiving a cookie from reindeer',\n document.createTextNode(\n `${Beautify((1 - failRateChristmas) * obtainedCookiesChance * 100)}%`,\n ),\n Game.season === 'christmas',\n ),\n );\n }\n if (missingValentineCookies.length !== 0) {\n section.appendChild(\n StatsMissDispListing(\n 'basic',\n 'Valentine cookies left to buy',\n StatsMissDisp(missingValentineCookies),\n Game.season === 'valentines',\n ),\n );\n }\n const dropRateEgg = function (StartingFailRate) {\n let failRateEgg = StartingFailRate * (1 / Game.dropRateMult());\n if (Game.HasAchiev('Hide & seek champion')) failRateEgg *= 0.7;\n if (Game.Has('Omelette')) failRateEgg *= 0.9;\n if (Game.Has('Starspawn')) failRateEgg *= 0.9;\n if (Game.hasGod) {\n const godLvl = Game.hasGod('seasons');\n if (godLvl === 1) failRateEgg *= 0.9;\n else if (godLvl === 2) failRateEgg *= 0.95;\n else if (godLvl === 3) failRateEgg *= 0.97;\n }\n // Calculations courtesy of @svschouw, at https://github.com/Aktanusa/CookieMonster/issues/25\n const succesRateEgg = 1 - failRateEgg;\n const obtainedEggs = Game.eggDrops.length - missingNormalEggs.length;\n const obtainedRareEggs = Game.rareEggDrops.length - missingRareEggs.length;\n const pNormal1 = succesRateEgg * 0.9 * (1 - obtainedEggs / Game.eggDrops.length);\n const pRare1 = succesRateEgg * 0.1 * (1 - obtainedRareEggs / Game.rareEggDrops.length);\n const pRedropNormal = succesRateEgg * 0.9 * (obtainedEggs / Game.eggDrops.length);\n const pRedropRare = succesRateEgg * 0.1 * (obtainedRareEggs / Game.rareEggDrops.length);\n const pRedrop = pRedropNormal + pRedropRare;\n const pNormal2 = pRedrop * 0.9 * (1 - obtainedEggs / Game.eggDrops.length);\n const pRare2 = pRedrop * 0.1 * (1 - obtainedRareEggs / Game.rareEggDrops.length);\n return [pNormal1 + pNormal2, pRare1 + pRare2];\n };\n if (missingNormalEggs.length !== 0) {\n section.appendChild(\n StatsMissDispListing(\n 'basic',\n 'Normal easter eggs left to unlock',\n StatsMissDisp(missingNormalEggs),\n Game.season === 'easter',\n ),\n );\n section.appendChild(\n StatsMissDispListing(\n 'basic',\n 'Chance of receiving an egg from wrinkler/golden cookie',\n document.createTextNode(\n `${Beautify(dropRateEgg(0.98)[0] * 100)}% / ${Beautify(dropRateEgg(0.9)[0] * 100)}%`,\n ),\n Game.season === 'easter',\n ),\n );\n }\n if (missingRareEggs.length !== 0) {\n section.appendChild(\n StatsMissDispListing(\n 'basic',\n 'Rare easter eggs left to unlock',\n StatsMissDisp(missingRareEggs),\n Game.season === 'easter',\n ),\n );\n section.appendChild(\n StatsMissDispListing(\n 'basic',\n 'Chance of receiving a rare egg from wrinkler/golden cookie',\n document.createTextNode(\n `${Beautify(dropRateEgg(0.98)[1] * 100)}% / ${Beautify(dropRateEgg(0.9)[1] * 100)}%`,\n ),\n Game.season === 'easter',\n ),\n );\n }\n\n if (Game.season === 'christmas')\n section.appendChild(\n StatsMissDispListing(\n 'basic',\n 'Reindeer reward',\n document.createTextNode(Beautify(CacheSeaSpec)),\n true,\n ),\n );\n if (choEgg) {\n section.appendChild(\n StatsListing(\n 'withTooltip',\n 'Chocolate egg cookies',\n document.createTextNode(Beautify(CacheLastChoEgg)),\n 'ChoEggTooltipPlaceholder',\n ),\n );\n }\n if (centEgg) {\n section.appendChild(\n StatsListing(\n 'basic',\n 'Century egg multiplier',\n document.createTextNode(`${Math.round((CacheCentEgg - 1) * 10000) / 100}%`),\n ),\n );\n }\n }\n }\n return section;\n}\n","import { CacheRealCookiesEarned } from '../../Cache/VariablesAndData';\nimport CalculateGains from '../Calculations/CalculateGains';\nimport CheckOtherAchiev from '../Calculations/CheckOtherAchiev';\nimport CopyData from '../SimulationData/CopyData';\nimport SimWin from '../SimulationData/SimWin';\nimport { SimAchievementsOwned, SimCookiesPs, SimPrestige, SimUpgrades } from '../VariablesAndData'; // eslint-disable-line no-unused-vars\n\n/**\n * This function calculates the cookies per click difference betwene current and after a ascension\n * It is called by CM.Disp.CreateStatsPrestigeSection()\n * @param\t{number}\tnewHeavenlyChips\tThe total heavenly chips after ascension\n * @returns\t{number}\tResetCPS\t\t\tThe CPS difference after reset\n */\nexport default function ResetBonus(newHeavenlyChips) {\n // Calculate CPS with all Heavenly upgrades\n let curCPS = Game.cookiesPs;\n\n CopyData();\n\n if (SimUpgrades['Heavenly key'].bought === 0) {\n SimUpgrades['Heavenly chip secret'].bought = 1;\n SimUpgrades['Heavenly cookie stand'].bought = 1;\n SimUpgrades['Heavenly bakery'].bought = 1;\n SimUpgrades['Heavenly confectionery'].bought = 1;\n SimUpgrades['Heavenly key'].bought = 1;\n\n CalculateGains();\n\n curCPS = SimCookiesPs;\n\n CopyData();\n }\n\n if (CacheRealCookiesEarned >= 1000000) SimWin('Sacrifice');\n if (CacheRealCookiesEarned >= 1000000000) SimWin('Oblivion');\n if (CacheRealCookiesEarned >= 1000000000000) SimWin('From scratch');\n if (CacheRealCookiesEarned >= 1000000000000000) SimWin('Nihilism');\n if (CacheRealCookiesEarned >= 1000000000000000000) SimWin('Dematerialize');\n if (CacheRealCookiesEarned >= 1000000000000000000000) SimWin('Nil zero zilch');\n if (CacheRealCookiesEarned >= 1000000000000000000000000) SimWin('Transcendence');\n if (CacheRealCookiesEarned >= 1000000000000000000000000000) SimWin('Obliterate');\n if (CacheRealCookiesEarned >= 1000000000000000000000000000000) SimWin('Negative void');\n if (CacheRealCookiesEarned >= 1000000000000000000000000000000000) SimWin('To crumbs, you say?');\n if (CacheRealCookiesEarned >= 1000000000000000000000000000000000000) SimWin('You get nothing');\n if (CacheRealCookiesEarned >= 1000000000000000000000000000000000000000)\n SimWin('Humble rebeginnings');\n if (CacheRealCookiesEarned >= 1000000000000000000000000000000000000000000)\n SimWin('The end of the world');\n if (CacheRealCookiesEarned >= 1000000000000000000000000000000000000000000000)\n SimWin(\"Oh, you're back\");\n if (CacheRealCookiesEarned >= 1000000000000000000000000000000000000000000000000)\n SimWin('Lazarus');\n if (CacheRealCookiesEarned >= 1000000000000000000000000000000000000000000000000000)\n SimWin('Smurf account');\n if (CacheRealCookiesEarned >= 1000000000000000000000000000000000000000000000000000000)\n SimWin(\"If at first you don't succeed\");\n\n SimUpgrades['Heavenly chip secret'].bought = 1;\n SimUpgrades['Heavenly cookie stand'].bought = 1;\n SimUpgrades['Heavenly bakery'].bought = 1;\n SimUpgrades['Heavenly confectionery'].bought = 1;\n SimUpgrades['Heavenly key'].bought = 1;\n\n SimPrestige = newHeavenlyChips;\n\n const lastAchievementsOwned = SimAchievementsOwned;\n\n CalculateGains();\n\n CheckOtherAchiev();\n\n if (lastAchievementsOwned !== SimAchievementsOwned) {\n CalculateGains();\n }\n\n const ResetCPS = SimCookiesPs - curCPS;\n\n // Reset Pretige level after calculation as it is used in CM.Sim.CalculateGains() so can't be local\n SimPrestige = Game.prestige;\n\n return ResetCPS;\n}\n","function CrateTooltipLockedAchievements(me) {\n const tags = [];\n if (me.pool === 'shadow') tags.push('Shadow Achievement', '#9700cf');\n else tags.push('Achievement', 0);\n tags.push('Locked', 0);\n\n let neuromancy = 0;\n if (Game.Has('Neuromancy') || (Game.sesame && me.pool === 'debug')) neuromancy = 1;\n if (neuromancy && me.won === 0) tags.push('Click to win!', '#00c462');\n else if (neuromancy && me.won > 0) tags.push('Click to lose!', '#00c462');\n\n let { icon } = me;\n if (me.iconFunction) icon = me.iconFunction();\n\n let { desc } = me;\n if (me.descFunc) desc = me.descFunc('stats');\n\n let tagsStr = '';\n for (let i = 0; i < tags.length; i += 2) {\n if (i % 2 === 0)\n tagsStr += `
[${\n tags[i]\n }]
`;\n }\n tagsStr = tagsStr.substring(1);\n\n return `
\n
\n
${me.name}
\n ${tagsStr}
${desc}
\n ${\n Game.sesame\n ? `
Id : ${me.id} | Order : ${Math.floor(me.order)}${\n me.tier ? ` | Tier : ${me.tier}` : ''\n }
`\n : ''\n }`;\n}\n\n/**\n * This function overwrites the crates of missing achievements\n */\nexport default function AddMissingAchievements() {\n let achievs;\n Object.values(document.querySelectorAll('div.title')).forEach((i) => {\n if (i.textContent.includes('Achievements')) {\n achievs = i.parentElement.querySelectorAll('div.listing.crateBox')[0];\n }\n });\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.MissingAchievements) {\n Object.values(achievs.children).forEach((achievsCrate) => {\n if (!achievsCrate.className.includes('enabled')) {\n const id = achievsCrate.onclick.toString().split(/\\[(.*)\\]/gi)[1];\n const { icon } = Game.AchievementsById[id];\n // eslint-disable-next-line no-param-reassign\n achievsCrate.style.backgroundPosition = `${-icon[0] * 48}px ${-icon[1] * 48}px`;\n // eslint-disable-next-line no-param-reassign\n achievsCrate.onmouseover = function () {\n if (!Game.mouseDown) {\n Game.setOnCrate(this);\n Game.tooltip.dynamic = 1;\n Game.tooltip.draw(\n this,\n () =>\n (function () {\n return CrateTooltipLockedAchievements(Game.AchievementsById[id]);\n })(),\n 'top',\n );\n Game.tooltip.wobble();\n }\n };\n }\n });\n }\n}\n","/**\n * This function fixes Game.mouseY as a result of bars that are added by CookieMonster\n * It is called by Game.UpdateWrinklers(), Game.UpdateSpecial() and the .onmousover of the BigCookie\n * before execution of their actual function\n */\nexport default function FixMouseY(target) {\n if (\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.TimerBar === 1 &&\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.TimerBarPos === 0\n ) {\n const timerBarHeight = parseInt(l('CMTimerBar').style.height, 10);\n Game.mouseY -= timerBarHeight;\n target();\n Game.mouseY += timerBarHeight;\n } else {\n target();\n }\n}\n","import jscolor from '@eastdesire/jscolor';\n\nimport CMBeautify from '../../Disp/BeautifyAndFormatting/Beautify';\nimport FormatTime from '../../Disp/BeautifyAndFormatting/FormatTime';\nimport { AddAuraInfo, AddDragonLevelUpTooltip } from '../../Disp/Dragon/Dragon';\nimport AddMenu from '../../Disp/MenuSections/AddMenus';\nimport UpdateTitle from '../../Disp/TabTitle/TabTitle';\nimport ReplaceAscendTooltip from '../../Disp/Tooltips/AscendButton';\nimport UpdateTooltipLocation from '../../Disp/Tooltips/PositionLocation';\nimport { CMSayTime, Title } from '../../Disp/VariablesAndData'; // eslint-disable-line no-unused-vars\nimport { SimDoSims } from '../../Sim/VariablesAndData'; // eslint-disable-line no-unused-vars\nimport ReplaceTooltipUpgrade from '../ReplaceGameElements/TooltipUpgrades';\nimport {\n BackupFunctions,\n CenturyDateAtBeginLoop, // eslint-disable-line no-unused-vars\n CycliusDateAtBeginLoop, // eslint-disable-line no-unused-vars\n} from '../VariablesAndData';\nimport FixMouseY from './FixMouse';\n\n/**\n * This function replaces certain native (from the base-game) functions\n */\nexport default function ReplaceNative() {\n // eslint-disable-next-line no-undef\n BackupFunctions.Beautify = Beautify;\n // eslint-disable-next-line no-undef\n Beautify = CMBeautify;\n\n BackupFunctions.CalculateGains = Game.CalculateGains;\n Game.CalculateGains = function () {\n BackupFunctions.CalculateGains();\n SimDoSims = 1;\n CycliusDateAtBeginLoop = Date.now();\n CenturyDateAtBeginLoop = Date.now();\n };\n\n BackupFunctions.tooltip = {};\n BackupFunctions.tooltip.draw = Game.tooltip.draw;\n BackupFunctions.tooltip.drawMod = new Function( // eslint-disable-line no-new-func\n `return ${Game.tooltip.draw.toString().split('this').join('Game.tooltip')}`,\n )();\n Game.tooltip.draw = function (from, text, origin) {\n BackupFunctions.tooltip.drawMod(from, text, origin);\n };\n\n BackupFunctions.tooltip.update = Game.tooltip.update;\n BackupFunctions.tooltip.updateMod = new Function( // eslint-disable-line no-new-func\n `return ${Game.tooltip.update.toString().split('this.').join('Game.tooltip.')}`,\n )();\n Game.tooltip.update = function () {\n BackupFunctions.tooltip.updateMod();\n UpdateTooltipLocation();\n };\n\n BackupFunctions.UpdateWrinklers = Game.UpdateWrinklers;\n Game.UpdateWrinklers = function () {\n FixMouseY(BackupFunctions.UpdateWrinklers);\n };\n\n BackupFunctions.UpdateSpecial = Game.UpdateSpecial;\n Game.UpdateSpecial = function () {\n FixMouseY(BackupFunctions.UpdateSpecial);\n };\n\n // Assumes newer browsers\n l('bigCookie').removeEventListener('click', Game.ClickCookie, false);\n l('bigCookie').addEventListener(\n 'click',\n (event) => {\n FixMouseY(() => Game.ClickCookie(event, 0));\n },\n false,\n );\n\n BackupFunctions.RebuildUpgrades = Game.RebuildUpgrades;\n Game.RebuildUpgrades = function () {\n BackupFunctions.RebuildUpgrades();\n ReplaceTooltipUpgrade();\n Game.CalculateGains();\n };\n\n BackupFunctions.ClickProduct = Game.ClickProduct;\n /**\n * This function adds a check to the purchase of a building to allow BulkBuyBlock to work.\n * If the options is 1 (on) bulkPrice is under cookies you can't buy the building.\n */\n Game.ClickProduct = function (what) {\n if (\n !Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.BulkBuyBlock ||\n Game.ObjectsById[what].bulkPrice < Game.cookies ||\n Game.buyMode === -1\n ) {\n BackupFunctions.ClickProduct(what);\n }\n };\n\n BackupFunctions.DescribeDragonAura = Game.DescribeDragonAura;\n /**\n * This function adds the function CM.Disp.AddAuraInfo() to Game.DescribeDragonAura()\n * This adds information about CPS differences and costs to the aura choosing interface\n * @param\t{number}\taura\tThe number of the aura currently selected by the mouse/user\n */\n Game.DescribeDragonAura = function (aura) {\n BackupFunctions.DescribeDragonAura(aura);\n AddAuraInfo(aura);\n };\n\n BackupFunctions.ToggleSpecialMenu = Game.ToggleSpecialMenu;\n /**\n * This function adds the code to display the tooltips for the levelUp button of the dragon\n */\n Game.ToggleSpecialMenu = function (on) {\n BackupFunctions.ToggleSpecialMenu(on);\n AddDragonLevelUpTooltip();\n };\n\n BackupFunctions.UpdateMenu = Game.UpdateMenu;\n Game.UpdateMenu = function () {\n if (typeof jscolor.picker === 'undefined' || typeof jscolor.picker.owner === 'undefined') {\n BackupFunctions.UpdateMenu();\n AddMenu();\n }\n };\n\n BackupFunctions.sayTime = Game.sayTime;\n // eslint-disable-next-line no-unused-vars\n CMSayTime = function (time, detail) {\n if (Number.isNaN(time) || time <= 0) return BackupFunctions.sayTime(time, detail);\n return FormatTime(time / Game.fps, 1);\n };\n\n BackupFunctions.Logic = Game.Logic;\n Game.Logic = function () {\n BackupFunctions.Logic();\n\n // Update tab title\n let title = 'Cookie Clicker';\n if (Game.season === 'fools') title = 'Cookie Baker';\n // eslint-disable-next-line no-unused-vars\n Title = `${Game.OnAscend ? 'Ascending! ' : ''}${CMBeautify(Game.cookies)} ${\n Game.cookies === 1 ? 'cookie' : 'cookies'\n } - ${title}`;\n UpdateTitle();\n\n // Since the Ascend Tooltip is not actually a tooltip we need to add our additional info here...\n ReplaceAscendTooltip();\n };\n}\n","/**\n * This function updates the location of the tooltip\n * It is called by Game.tooltip.update() because of CM.Main.ReplaceNative()\n */\nexport default function UpdateTooltipLocation() {\n if (Game.tooltip.origin === 'store') {\n let warnOffset = 0;\n if (\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.ToolWarnLucky === 1 &&\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.ToolWarnPos === 1 &&\n l('CMDispTooltipWarningParent') !== null\n ) {\n warnOffset = l('CMDispTooltipWarningParent').clientHeight - 4;\n }\n Game.tooltip.tta.style.top = `${Math.min(\n parseInt(Game.tooltip.tta.style.top, 10),\n l('game').clientHeight +\n l('topBar').clientHeight -\n Game.tooltip.tt.clientHeight -\n warnOffset -\n 46,\n )}px`;\n }\n // Kept for future possible use if the code changes again\n /* else if (!Game.onCrate && !Game.OnAscend && CM.Options.TimerBar === 1 && CM.Options.TimerBarPos === 0) {\n\t\tGame.tooltip.tta.style.top = (parseInt(Game.tooltip.tta.style.top) + parseInt(CM.Disp.TimerBar.style.height)) + 'px';\n\t} */\n}\n","import { CreateTooltip } from '../../Disp/Tooltips/Tooltip';\nimport { TooltipUpgradeBackup } from '../VariablesAndData';\n\n/**\n * This function replaces the original .onmouseover functions of upgrades so that it calls CM.Disp.Tooltip()\n * CM.Disp.Tooltip() sets the tooltip type to 'u'\n * It is called by Game.RebuildUpgrades() through CM.Main.ReplaceNative() and is therefore not permanent like the other ReplaceTooltip functions\n */\nexport default function ReplaceTooltipUpgrade() {\n TooltipUpgradeBackup = [];\n Object.keys(Game.UpgradesInStore).forEach((i) => {\n if (l(`upgrade${i}`).onmouseover !== null) {\n TooltipUpgradeBackup[i] = l(`upgrade${i}`).onmouseover;\n l(`upgrade${i}`).onmouseover = function () {\n if (!Game.mouseDown) {\n Game.setOnCrate(this);\n Game.tooltip.dynamic = 1;\n Game.tooltip.draw(this, () => CreateTooltip('u', `${i}`), 'store');\n Game.tooltip.wobble();\n }\n };\n }\n });\n}\n","/** Functions related to the Dragon */\n\nimport CacheDragonCost from '../../Cache/Dragon/Dragon';\nimport { CacheCostDragonUpgrade } from '../../Cache/VariablesAndData';\nimport CalculateChangeAura from '../../Sim/SimulationEvents/AuraChange';\nimport Beautify from '../BeautifyAndFormatting/Beautify';\nimport FormatTime from '../BeautifyAndFormatting/FormatTime';\n\n/**\n * This functions adds the two extra lines about CPS and time to recover to the aura picker infoscreen\n * @param\t{number}\taura\tThe number of the aura currently selected by the mouse/user\n */\nexport function AddAuraInfo(aura) {\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.DragonAuraInfo === 1) {\n const [bonusCPS, priceOfChange] = CalculateChangeAura(aura);\n const timeToRecover = FormatTime(priceOfChange / (bonusCPS + Game.cookiesPs));\n let bonusCPSPercentage;\n if (Game.cookiesPs === 0) bonusCPSPercentage = Beautify(Infinity);\n else bonusCPSPercentage = Beautify((bonusCPS / Game.cookiesPs) * 100);\n\n l('dragonAuraInfo').style.minHeight = '60px';\n l('dragonAuraInfo').style.margin = '8px';\n l('dragonAuraInfo').appendChild(document.createElement('div')).className = 'line';\n const div = document.createElement('div');\n div.style.minWidth = '200px';\n div.style.textAlign = 'center';\n div.textContent = `Picking this aura will change CPS by ${Beautify(\n bonusCPS,\n )} (${bonusCPSPercentage}% of current CPS).`;\n l('dragonAuraInfo').appendChild(div);\n const div2 = document.createElement('div');\n div2.style.minWidth = '200px';\n div2.style.textAlign = 'center';\n div2.textContent = `It will take ${timeToRecover} to recover the cost.`;\n l('dragonAuraInfo').appendChild(div2);\n }\n}\n\n/**\n * This functions adds a tooltip to the level up button displaying the cost of rebuying all\n * It is called by Game.ToggleSpecialMenu() after CM.Main.ReplaceNative()\n */\nexport function AddDragonLevelUpTooltip() {\n // Check if it is the dragon popup that is on screen\n if (\n (l('specialPopup').className.match(/onScreen/) &&\n l('specialPopup').children[0].style.background.match(/dragon/)) !== null\n ) {\n for (let i = 0; i < l('specialPopup').childNodes.length; i++) {\n if (l('specialPopup').childNodes[i].className === 'optionBox') {\n l('specialPopup').children[i].onmouseover = function () {\n CacheDragonCost();\n Game.tooltip.dynamic = 1;\n Game.tooltip.draw(\n l('specialPopup'),\n `
${CacheCostDragonUpgrade}
`,\n 'this',\n );\n Game.tooltip.wobble();\n };\n l('specialPopup').children[i].onmouseout = function () {\n Game.tooltip.shouldHide = 1;\n };\n }\n }\n }\n}\n","import { CacheDragonAura, CacheDragonAura2 } from '../../Cache/VariablesAndData';\nimport CalculateGains from '../Calculations/CalculateGains';\nimport CheckOtherAchiev from '../Calculations/CheckOtherAchiev';\nimport CopyData from '../SimulationData/CopyData';\nimport {\n SimAchievementsOwned,\n SimBuildingsOwned, // eslint-disable-line no-unused-vars\n SimCookiesPs,\n SimDragonAura,\n SimDragonAura2,\n SimObjects,\n} from '../VariablesAndData';\n\n/**\n * This functions calculates the cps and cost of changing a Dragon Aura\n * It is called by CM.Disp.AddAuraInfo()\n * @param\t{number}\t\t\taura\t\t\t\t\t\t\t\t\t\tThe number of the aura currently selected by the mouse/user\n * @returns {[number, number]} \t[CM.Sim.cookiesPs - Game.cookiesPs, price]\tThe bonus cps and the price of the change\n */\nexport default function CalculateChangeAura(aura) {\n CopyData();\n\n // Check if aura being changed is first or second aura\n const auraToBeChanged = l('promptContent').children[0].innerHTML.includes('secondary');\n if (auraToBeChanged) SimDragonAura2 = aura;\n else SimDragonAura = aura;\n\n // Sell highest building but only if aura is different\n let price = 0;\n if (SimDragonAura !== CacheDragonAura || SimDragonAura2 !== CacheDragonAura2) {\n for (let i = Game.ObjectsById.length - 1; i > -1; --i) {\n if (Game.ObjectsById[i].amount > 0) {\n const highestBuilding = SimObjects[Game.ObjectsById[i].name].name;\n SimObjects[highestBuilding].amount -= 1;\n SimBuildingsOwned -= 1;\n price =\n SimObjects[highestBuilding].basePrice *\n Game.priceIncrease **\n Math.max(0, SimObjects[highestBuilding].amount - 1 - SimObjects[highestBuilding].free);\n price = Game.modifyBuildingPrice(SimObjects[highestBuilding], price);\n price = Math.ceil(price);\n break;\n }\n }\n }\n\n const lastAchievementsOwned = SimAchievementsOwned;\n CalculateGains();\n\n CheckOtherAchiev();\n if (lastAchievementsOwned !== SimAchievementsOwned) {\n CalculateGains();\n }\n return [SimCookiesPs - Game.cookiesPs, price];\n}\n","import createMenuOptions from './createMenuOptions';\nimport AddMenuStats from './Statistics/AddStatsPage';\n\n/**\n * This function adds the calll the functions to add extra info to the stats and options pages\n */\nexport default function AddMenu() {\n const title = document.createElement('div');\n title.className = 'title';\n\n if (Game.onMenu === 'stats') {\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.Stats) {\n title.textContent = 'Cookie Monster Statistics';\n AddMenuStats(title);\n }\n } else if (Game.onMenu === 'prefs') {\n // Added because Framework is broken\n l('menu').childNodes[2].insertBefore(\n createMenuOptions(),\n l('menu').childNodes[2].childNodes[l('menu').childNodes[2].childNodes.length - 1],\n );\n }\n}\n","/** Functions related to updating the tab in the browser's tab-bar */\n\nimport { CacheSeasonPopShimmer, CacheSpawnedGoldenShimmer } from '../../Cache/VariablesAndData';\n\nimport { LastSeasonPopupState, LastTickerFortuneState } from '../../Main/VariablesAndData';\nimport { Title } from '../VariablesAndData';\n\n/**\n * This function updates the tab title\n * It is called on every loop by Game.Logic() which also sets CM.Disp.Title to Game.cookies\n */\nexport default function UpdateTitle() {\n if (\n Game.OnAscend ||\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.Title === 0\n ) {\n document.title = Title;\n } else if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.Title === 1) {\n let addFC = false;\n let addSP = false;\n let titleGC;\n let titleFC;\n let titleSP;\n\n if (CacheSpawnedGoldenShimmer) {\n if (CacheSpawnedGoldenShimmer.wrath)\n titleGC = `[W${Math.ceil(CacheSpawnedGoldenShimmer.life / Game.fps)}]`;\n else titleGC = `[G${Math.ceil(CacheSpawnedGoldenShimmer.life / Game.fps)}]`;\n } else if (!Game.Has('Golden switch [off]')) {\n titleGC = `[${Number(l('CMTimerBarGCMinBar').textContent) < 0 ? '!' : ''}${Math.ceil(\n (Game.shimmerTypes.golden.maxTime - Game.shimmerTypes.golden.time) / Game.fps,\n )}]`;\n } else titleGC = '[GS]';\n\n if (LastTickerFortuneState) {\n addFC = true;\n titleFC = '[F]';\n }\n\n if (Game.season === 'christmas') {\n addSP = true;\n if (LastSeasonPopupState) titleSP = `[R${Math.ceil(CacheSeasonPopShimmer.life / Game.fps)}]`;\n else {\n titleSP = `[${Number(l('CMTimerBarRenMinBar').textContent) < 0 ? '!' : ''}${Math.ceil(\n (Game.shimmerTypes.reindeer.maxTime - Game.shimmerTypes.reindeer.time) / Game.fps,\n )}]`;\n }\n }\n\n // Remove previous timers and add current cookies\n let str = Title;\n if (str.charAt(0) === '[') {\n str = str.substring(str.lastIndexOf(']') + 1);\n }\n document.title = `${titleGC + (addFC ? titleFC : '') + (addSP ? titleSP : '')} ${str}`;\n } else if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.Title === 2) {\n let str = '';\n let spawn = false;\n if (CacheSpawnedGoldenShimmer) {\n spawn = true;\n if (CacheSpawnedGoldenShimmer.wrath)\n str += `[W${Math.ceil(CacheSpawnedGoldenShimmer.life / Game.fps)}]`;\n else str += `[G${Math.ceil(CacheSpawnedGoldenShimmer.life / Game.fps)}]`;\n }\n if (LastTickerFortuneState) {\n spawn = true;\n str += '[F]';\n }\n if (Game.season === 'christmas' && LastSeasonPopupState) {\n str += `[R${Math.ceil(CacheSeasonPopShimmer.life / Game.fps)}]`;\n spawn = true;\n }\n if (spawn) str += ' - ';\n let title = 'Cookie Clicker';\n if (Game.season === 'fools') title = 'Cookie Baker';\n str += title;\n document.title = str;\n }\n}\n","import {\n CacheHCPerSecond,\n CacheLastHeavenlyChips,\n CacheTimeTillNextPrestige,\n} from '../../Cache/VariablesAndData';\nimport Beautify from '../BeautifyAndFormatting/Beautify';\n\n/**\n * This function creates a header object for tooltips.\n * @param\t{string}\ttext\tTitle of header\n * @returns {object}\tdiv\t\tAn object containing the stylized header\n */\nexport default function ReplaceAscendTooltip() {\n const cookiesToNext = Math.max(\n 0,\n Game.HowManyCookiesReset(\n Math.floor(Game.HowMuchPrestige(Game.cookiesReset + Game.cookiesEarned)) + 1,\n ) -\n (Game.cookiesEarned + Game.cookiesReset),\n );\n\n const startDate = Game.sayTime(((Date.now() - Game.startDate) / 1000) * Game.fps, -1);\n let str = `You've been on this run for
${\n startDate === '' ? 'not very long' : startDate\n }.
\n
`;\n if (Game.prestige > 0) {\n str += `Your prestige level is currently
${Beautify(Game.prestige)}.
(CpS +${Beautify(\n Game.prestige,\n )}%)\n
`;\n }\n if (CacheLastHeavenlyChips < 1) str += 'Ascending now would grant you no prestige.';\n else if (CacheLastHeavenlyChips < 2)\n str +=\n 'Ascending now would grant you
1 prestige level (+1% CpS)
and
1 heavenly chip to spend.';\n else\n str += `Ascending now would grant you
${Beautify(\n CacheLastHeavenlyChips,\n )} prestige levels (+${Beautify(CacheLastHeavenlyChips)}% CpS)
and
${Beautify(\n CacheLastHeavenlyChips,\n )} heavenly chips to spend.`;\n str += `
\n You need
${Beautify(cookiesToNext)} more cookies for the next level.
\n ${\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.TooltipAscendButton\n ? `
It takes ${CacheTimeTillNextPrestige} to reach the next level and you were making ${Beautify(\n CacheHCPerSecond,\n 2,\n )} chips on average in the last 5 seconds.
`\n : ''\n }`;\n l('ascendTooltip').innerHTML = str;\n}\n","import InitCache from '../Cache/CacheInit';\nimport { CacheStatsCookies } from '../Cache/Stats/Stats';\nimport { VersionMajor, VersionMinor } from '../Data/Moddata';\nimport CreateUpgradeBar from '../Disp/BuildingsUpgrades/UpgradeBar';\nimport { CreateBotBar } from '../Disp/InfoBars/BottomBar';\nimport { CreateTimerBar } from '../Disp/InfoBars/TimerBar';\nimport CreateSectionHideButtons from '../Disp/Initialization/CreateSectionHideButtons';\nimport CreateWrinklerButtons from '../Disp/Initialization/CreateWrinklerButton';\nimport CreateCssArea from '../Disp/Initialization/CssArea';\nimport UpdateBuildingUpgradeStyle from '../Disp/Initialization/UpdateBuildingUpgradeStyle';\nimport { CreateFavicon } from '../Disp/TabTitle/FavIcon';\nimport { CreateSimpleTooltip } from '../Disp/Tooltips/Tooltip';\nimport { CMLastAscendState, TooltipText } from '../Disp/VariablesAndData'; // eslint-disable-line no-unused-vars\nimport InitData from '../Sim/InitializeData/InitData';\nimport ReplaceNativeGrimoire from './ReplaceGameElements/NativeGrimoire';\nimport ReplaceTooltips from './ReplaceGameElements/Tooltips';\nimport ReplaceNative from './ReplaceGameFunctions/ReplaceNative';\nimport { LastModCount } from './VariablesAndData'; // eslint-disable-line no-unused-vars\nimport AddWrinklerAreaDetect from './WrinklerArea/AddDetectArea';\nimport createBuildingLockButtons from '../Disp/buildingTiles/createBuildingLockButtons';\n// import createMenuInfo from '../Disp/MenuSections/createMenuInfo';\nimport createMenuOptions from '../Disp/MenuSections/createMenuOptions';\n\n/**\n * Initialization loop of Cookie Monster\n */\nexport default function InitializeCookieMonster() {\n // Create global data object\n window.CookieMonsterData = {};\n\n // Register listeners in Cookie Monster Mod Framework\n // Commented because Framework is currently broken\n // Game.mods.cookieMonsterFramework.listeners.infoMenu.push(createMenuInfo);\n Game.mods.cookieMonsterFramework.listeners.optionsMenu.push(createMenuOptions);\n\n InitData();\n CacheStatsCookies();\n InitCache();\n\n // Stored to check if we need to re-initiliaze data\n LastModCount = Object.keys(Game.mods).length;\n\n // Creating visual elements\n CreateCssArea();\n CreateBotBar();\n CreateTimerBar();\n CreateUpgradeBar();\n CreateSectionHideButtons();\n CreateFavicon();\n Object.keys(TooltipText).forEach((i) => {\n CreateSimpleTooltip(TooltipText[i][0], TooltipText[i][1], TooltipText[i][2]);\n });\n CreateWrinklerButtons();\n UpdateBuildingUpgradeStyle();\n createBuildingLockButtons();\n\n ReplaceTooltips();\n AddWrinklerAreaDetect();\n\n // Replace native functions\n ReplaceNative();\n ReplaceNativeGrimoire();\n Game.CalculateGains();\n\n CMLastAscendState = Game.OnAscend;\n\n if (Game.prefs.popups)\n Game.Popup(`Cookie Monster version ${VersionMajor}.${VersionMinor} loaded!`);\n else Game.Notify(`Cookie Monster version ${VersionMajor}.${VersionMinor} loaded!`, '', '', 1, 1);\n\n Game.Win('Third-party');\n}\n","import { DispCSS } from '../VariablesAndData';\n\n/**\n * This function creates a CSS style that stores certain standard CSS classes used by CookieMonster\n\n */\nexport default function CreateCssArea() {\n DispCSS = document.createElement('style');\n DispCSS.type = 'text/css';\n DispCSS.id = 'CMCSS';\n\n document.head.appendChild(DispCSS);\n}\n","import {\n ColourBackPre,\n ColourBlue,\n ColourGray,\n ColourGreen,\n ColourOrange,\n ColourPurple,\n ColourRed,\n ColourTextPre,\n ColourYellow,\n} from '../VariablesAndData';\n\n/**\n * This function creates the legend for the upgrade bar\n * @returns\t{object}\tlegend\tThe legend-object to be added\n */\nfunction CreateUpgradeBarLegend() {\n const legend = document.createElement('div');\n legend.style.minWidth = '330px';\n legend.style.marginBottom = '4px';\n const title = document.createElement('div');\n title.className = 'name';\n title.style.marginBottom = '4px';\n title.textContent = 'Legend';\n legend.appendChild(title);\n\n const legendLine = function (colour, text) {\n const div = document.createElement('div');\n div.style.verticalAlign = 'middle';\n const span = document.createElement('span');\n span.className = ColourBackPre + colour;\n span.style.display = 'inline-block';\n span.style.height = '10px';\n span.style.width = '10px';\n span.style.marginRight = '4px';\n div.appendChild(span);\n div.appendChild(document.createTextNode(text));\n return div;\n };\n\n legend.appendChild(legendLine(ColourBlue, 'Better than the best PP of a building option'));\n legend.appendChild(legendLine(ColourGreen, 'Same as the best PP building option'));\n legend.appendChild(legendLine(ColourYellow, 'Within the top 10 of PP for buildings'));\n legend.appendChild(legendLine(ColourOrange, 'Within the top 20 of PP for buildings'));\n legend.appendChild(legendLine(ColourRed, 'Within the top 30 of PP for buildings'));\n legend.appendChild(legendLine(ColourPurple, 'Outside of the top 30 of PP for buildings'));\n legend.appendChild(legendLine(ColourGray, 'Negative or infinity PP'));\n return legend;\n}\n\n/**\n * This function creates the upgrade bar above the upgrade-section in the right section of the screen\n */\nexport default function CreateUpgradeBar() {\n const UpgradeBar = document.createElement('div');\n UpgradeBar.id = 'CMUpgradeBar';\n UpgradeBar.style.width = '100%';\n UpgradeBar.style.backgroundColor = 'black';\n UpgradeBar.style.textAlign = 'center';\n UpgradeBar.style.fontWeight = 'bold';\n UpgradeBar.style.display = 'none';\n UpgradeBar.style.zIndex = '21';\n UpgradeBar.onmouseout = function () {\n Game.tooltip.hide();\n };\n\n const placeholder = document.createElement('div');\n placeholder.appendChild(CreateUpgradeBarLegend());\n UpgradeBar.onmouseover = function () {\n Game.tooltip.draw(this, escape(placeholder.innerHTML), 'store');\n };\n\n const upgradeNumber = function (id, colour) {\n const span = document.createElement('span');\n span.id = id;\n span.className = ColourTextPre + colour;\n span.style.width = '14.28571428571429%';\n span.style.display = 'inline-block';\n span.textContent = '0';\n return span;\n };\n UpgradeBar.appendChild(upgradeNumber('CMUpgradeBarBlue', ColourBlue));\n UpgradeBar.appendChild(upgradeNumber('CMUpgradeBarGreen', ColourGreen));\n UpgradeBar.appendChild(upgradeNumber('CMUpgradeBarYellow', ColourYellow));\n UpgradeBar.appendChild(upgradeNumber('CMUpgradeBarOrange', ColourOrange));\n UpgradeBar.appendChild(upgradeNumber('CMUpgradeBarRed', ColourRed));\n UpgradeBar.appendChild(upgradeNumber('CMUpgradeBarPurple', ColourPurple));\n UpgradeBar.appendChild(upgradeNumber('CMUpgradeBarGray', ColourGray));\n\n l('upgrades').parentNode.insertBefore(UpgradeBar, l('upgrades').parentNode.childNodes[3]);\n}\n","/**\n * This function creates two objects at the top of the right column that allowing hiding the upgrade and building section\n */\nexport default function CreateSectionHideButtons() {\n const div = document.createElement('div');\n div.id = 'CMSectionHidButtons';\n div.style.textAlign = 'center';\n const a = document.createElement('a');\n a.className = 'option';\n a.onclick = function () {\n if (l('upgrades').style.display === 'flex') {\n l('upgrades').style.display = 'none';\n l('toggleUpgrades').style.display = 'none';\n l('techUpgrades').style.display = 'none';\n l('vaultUpgrades').style.display = 'none';\n } else {\n l('upgrades').style.display = 'flex';\n if (l('toggleUpgrades').children.length !== 0) l('toggleUpgrades').style.display = 'block';\n if (l('techUpgrades').children.length !== 0) l('techUpgrades').style.display = 'block';\n if (l('vaultUpgrades').children.length !== 0) l('vaultUpgrades').style.display = 'block';\n }\n };\n a.textContent = 'Hide/Show Upgrades';\n div.appendChild(a);\n const b = document.createElement('a');\n b.className = 'option';\n b.onclick = function () {\n if (l('products').style.display === 'grid') l('products').style.display = 'none';\n else l('products').style.display = 'grid';\n };\n b.textContent = 'Hide/Show Buildings';\n div.appendChild(b);\n l('store').insertBefore(div, l('store').childNodes[2]);\n}\n","import { CacheWrinklersFattest } from '../../Cache/VariablesAndData';\nimport PopAllNormalWrinklers from '../HelperFunctions/PopWrinklers';\nimport { CreateTooltip } from '../Tooltips/Tooltip';\n\n/**\n * This function creates two objects at the bottom of the left column that allowing popping of wrinklers\n */\nexport default function CreateWrinklerButtons() {\n const popAllA = document.createElement('a');\n popAllA.id = 'PopAllNormalWrinklerButton';\n popAllA.textContent = 'Pop All Normal';\n popAllA.className = 'option';\n popAllA.onclick = function () {\n PopAllNormalWrinklers();\n };\n popAllA.onmouseout = function () {\n Game.tooltip.shouldHide = 1;\n };\n popAllA.onmouseover = function () {\n Game.tooltip.dynamic = 1;\n Game.tooltip.draw(this, () => CreateTooltip('wb', 'PopAllNormal'), 'this');\n Game.tooltip.wobble();\n };\n l('sectionLeftExtra').children[0].append(popAllA);\n const popFattestA = document.createElement('a');\n popFattestA.id = 'PopFattestWrinklerButton';\n popFattestA.textContent = 'Pop Single Fattest';\n popFattestA.className = 'option';\n popFattestA.onclick = function () {\n if (CacheWrinklersFattest[1] !== null) Game.wrinklers[CacheWrinklersFattest[1]].hp = 0;\n };\n popFattestA.onmouseout = function () {\n Game.tooltip.shouldHide = 1;\n };\n popFattestA.onmouseover = function () {\n Game.tooltip.dynamic = 1;\n Game.tooltip.draw(this, () => CreateTooltip('wb', 'PopFattest'), 'this');\n Game.tooltip.wobble();\n };\n l('sectionLeftExtra').children[0].append(popFattestA);\n}\n","/**\n * This function updates the style of the building and upgrade sections to make these sortable\n */\nexport default function UpdateBuildingUpgradeStyle() {\n l('products').style.display = 'grid';\n l('storeBulk').style.gridRow = '1/1';\n\n l('upgrades').style.display = 'flex';\n l('upgrades').style['flex-wrap'] = 'wrap';\n}\n","import toggleBuildingLock from './toggleBuildingLock';\n\n/**\n * This function adds a lock button to the \"building view\" in the middle section\n */\nexport default function createBuildingLockButtons() {\n Object.keys(l('rows').children).forEach((index) => {\n const productButtons = l('rows').children[index].children[1];\n const button = document.createElement('div');\n button.id = `productLock${Number(index) + 1}`;\n button.className = 'productButton';\n button.innerHTML = 'Lock';\n button.onclick = function () {\n toggleBuildingLock(Number(index) + 1);\n };\n productButtons.appendChild(button);\n });\n}\n","/**\n * This function toggle the locked state of a building\n * @param\t{number}\tindex\tIndex of the row to change\n */\nexport default function toggleBuildingLock(index) {\n if (l(`productLock${index}`).innerHTML === 'Lock') {\n // Add to storing array\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.lockedMinigames.push(\n index.toString(),\n );\n\n // Update styles\n l(`row${index}`).style.pointerEvents = 'none';\n l(`row${index}`).style.opacity = '0.4';\n l(`productLock${index}`).innerHTML = 'Unlock';\n l(`productLock${index}`).style.pointerEvents = 'auto';\n } else {\n // Remove from storing array\n if (\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.lockedMinigames.includes(\n index.toString(),\n )\n ) {\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.lockedMinigames =\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.lockedMinigames.filter(\n (value) => value !== index.toString(),\n );\n }\n\n // Update styles\n l(`productLock${index}`).innerHTML = 'Lock';\n l(`row${index}`).style.pointerEvents = 'auto';\n l(`row${index}`).style.opacity = '1';\n }\n}\n","/** Functions related to replacing tooltips */\n\nimport { CreateTooltip } from '../../Disp/Tooltips/Tooltip';\nimport { LoadMinigames, TooltipBuildBackup, TooltipLumpBackup } from '../VariablesAndData'; // eslint-disable-line no-unused-vars\nimport ReplaceNativeGrimoire from './NativeGrimoire';\nimport ReplaceTooltipGrimoire from './TooltipGrimoire';\n\n/**\n * This function replaces the original .onmouseover functions of buildings\n */\nfunction ReplaceTooltipBuild() {\n Object.keys(Game.Objects).forEach((i) => {\n const me = Game.Objects[i];\n if (l(`product${me.id}`).onmouseover !== null) {\n TooltipBuildBackup[i] = l(`product${me.id}`).onmouseover;\n l(`product${me.id}`).onmouseover = function () {\n Game.tooltip.dynamic = 1;\n Game.tooltip.draw(this, () => CreateTooltip('b', `${i}`), 'store');\n Game.tooltip.wobble();\n };\n }\n });\n}\n\n/**\n * This function replaces the original .onmouseover functions of sugar lumps\n */\nfunction ReplaceTooltipLump() {\n if (Game.canLumps()) {\n TooltipLumpBackup = l('lumps').onmouseover;\n l('lumps').onmouseover = function () {\n Game.tooltip.dynamic = 1;\n Game.tooltip.draw(this, () => CreateTooltip('s', 'Lump'), 'this');\n Game.tooltip.wobble();\n };\n }\n}\n\n/**\n * This function replaces the original .onmouseover functions of all garden plants\n */\nfunction ReplaceTooltipGarden() {\n if (Game.Objects.Farm.minigameLoaded) {\n l('gardenTool-1').onmouseover = function () {\n Game.tooltip.dynamic = 1;\n Game.tooltip.draw(this, () => CreateTooltip('ha', 'HarvestAllButton'), 'this');\n Game.tooltip.wobble();\n };\n Array.from(l('gardenPlot').children).forEach((child) => {\n const coords = child.id.slice(-3);\n // eslint-disable-next-line no-param-reassign\n child.onmouseover = function () {\n Game.tooltip.dynamic = 1;\n Game.tooltip.draw(this, () => CreateTooltip('p', [`${coords[0]}`, `${coords[2]}`]), 'this');\n Game.tooltip.wobble();\n };\n });\n }\n}\n\nfunction ReplaceTooltipPantheon() {\n if (Game.Objects.Temple.minigameLoaded) {\n for (let i = 0; i < 11; i += 1) {\n l(`templeGod${i}`).onmouseover = function () {\n Game.tooltip.dynamic = 1;\n Game.tooltip.draw(this, () => CreateTooltip('pag', i), 'this');\n Game.tooltip.wobble();\n };\n }\n for (let i = 0; i < 3; i += 1) {\n l(`templeSlot${i}`).onmouseover = function () {\n Game.tooltip.dynamic = 1;\n Game.tooltip.draw(\n this,\n () => CreateTooltip('pas', [i, Game.Objects.Temple.minigame.slot[i]]),\n 'this',\n );\n Game.tooltip.wobble();\n };\n }\n }\n}\n\n/**\n * This function call all functions that replace Game-tooltips with Cookie Monster enhanced tooltips\n */\nexport default function ReplaceTooltips() {\n ReplaceTooltipBuild();\n ReplaceTooltipLump();\n\n // Replace Tooltips of Minigames. Nesting it in LoadMinigames makes sure to replace them even if\n // they were not loaded initially\n // eslint-disable-next-line prefer-destructuring\n LoadMinigames = Game.LoadMinigames;\n Game.LoadMinigames = function () {\n LoadMinigames();\n ReplaceTooltipGarden();\n ReplaceTooltipGrimoire();\n ReplaceTooltipPantheon();\n ReplaceNativeGrimoire();\n };\n Game.LoadMinigames();\n}\n","import { TooltipWrinklerArea, TooltipWrinklerBeingShown } from '../../Disp/VariablesAndData'; // eslint-disable-line no-unused-vars\n\n/**\n * This function creates .onmouseover/out events that determine if the mouse is hovering-over a Wrinkler\n * As wrinklers are not appended to the DOM we us a different system than for other tooltips\n */\nexport default function AddWrinklerAreaDetect() {\n l('backgroundLeftCanvas').onmouseover = function () {\n TooltipWrinklerArea = 1;\n };\n l('backgroundLeftCanvas').onmouseout = function () {\n TooltipWrinklerArea = 0;\n Game.tooltip.hide();\n Object.keys(Game.wrinklers).forEach((i) => {\n TooltipWrinklerBeingShown[i] = 0;\n });\n };\n}\n","import CalculateGains from '../Calculations/CalculateGains';\nimport CheckOtherAchiev from '../Calculations/CheckOtherAchiev';\nimport CopyData from '../SimulationData/CopyData';\nimport { SimAchievementsOwned, SimCookiesPs, SimGod1, SimGod2, SimGod3 } from '../VariablesAndData'; // eslint-disable-line no-unused-vars\n\n/**\n * This functions calculates the cps and cost of changing a Dragon Aura\n * It is called by CM.Disp.AddAuraInfo()\n * @param\t{number}\tgod\t\tThe number of the slot to be swapped in\n * @param\t{number slot\tThe slot the god will go to\n * @returns {number} \tCM.Sim.cookiesPs - Game.cookiesPs The bonus cps and the price of the change\n */\nexport default function CalculateChangeGod(god, slot) {\n if (!Game.Objects.Temple.minigameLoaded) return 0;\n CopyData();\n const { minigame } = Game.Objects.Temple;\n const CurrentSlot = minigame.godsById[god].slot;\n if (CurrentSlot === '0') SimGod1 = minigame.slot[slot];\n else if (CurrentSlot === '1') SimGod2 = minigame.slot[slot];\n else if (CurrentSlot === '2') SimGod3 = minigame.slot[slot];\n /* eslint-disable no-unused-vars */\n if (slot === 0) SimGod1 = god;\n else if (slot === 1) SimGod2 = god;\n else if (slot === 2) SimGod3 = god;\n /* eslint-enable no-unused-vars */\n\n const lastAchievementsOwned = SimAchievementsOwned;\n CalculateGains();\n\n CheckOtherAchiev();\n if (lastAchievementsOwned !== SimAchievementsOwned) {\n CalculateGains();\n }\n return SimCookiesPs - Game.cookiesPs;\n}\n","import InitCache from '../Cache/CacheInit';\nimport LoopCache from '../Cache/CacheLoop';\nimport CacheNoGoldSwitchCPS from '../Cache/CPS/NoGoldSwitchCPS';\nimport CacheSellAllForChoEgg from '../Cache/CPS/SellChoEgg';\nimport CacheDragonCost from '../Cache/Dragon/Dragon';\nimport CachePantheonGods from '../Cache/PantheonGods/CacheGods';\nimport { CacheBuildingsPrices, CacheIncome } from '../Cache/PriceAndIncome/PriceAndIncome';\nimport { CacheChain } from '../Cache/Stats/ChainCookies';\nimport CacheAllMissingUpgrades from '../Cache/Stats/MissingUpgrades';\nimport CacheSeasonSpec from '../Cache/Stats/Reindeer';\nimport { CacheGoldenAndWrathCookiesMults, CacheStatsCookies } from '../Cache/Stats/Stats';\nimport AllAmountTillNextAchievement from '../Cache/TillNextAchievement/AllAmountTillNextAchievement';\nimport { CacheDoRemakeBuildPrices, CacheHadBuildAura } from '../Cache/VariablesAndData';\nimport UpdateAscendState from '../Disp/HelperFunctions/UpdateAscendState';\nimport { LastAscendState } from '../Disp/VariablesAndData';\nimport InitData from '../Sim/InitializeData/InitData';\nimport { SimDoSims } from '../Sim/VariablesAndData';\nimport CheckGardenTick from './CheckStates/Garden';\nimport CheckGoldenCookie from './CheckStates/GoldenCookie';\nimport CheckMagicMeter from './CheckStates/Grimoire';\nimport CheckSeasonPopup from './CheckStates/Season';\nimport CheckTickerFortune from './CheckStates/Ticker';\nimport CheckWrinklerCount from './CheckStates/Wrinkler';\nimport { LastModCount } from './VariablesAndData';\n\n/**\n * Main loop of Cookie Monster\n * CM.init registers it to the \"logic\" hook provided by the modding api\n */\nexport default function CMLoopHook() {\n if (LastAscendState !== Game.OnAscend) {\n LastAscendState = Game.OnAscend;\n UpdateAscendState();\n }\n if (!Game.OnAscend && Game.AscendTimer === 0) {\n // Check if any other mods have been loaded\n if (LastModCount !== Object.keys(Game.mods).length) {\n InitData();\n InitCache();\n LastModCount = Object.keys(Game.mods).length;\n }\n\n // CM.Sim.DoSims is set whenever CPS has changed\n if (SimDoSims) {\n AllAmountTillNextAchievement(true);\n CacheIncome();\n\n CacheNoGoldSwitchCPS(); // Needed first\n CacheGoldenAndWrathCookiesMults();\n CacheStatsCookies();\n CacheAllMissingUpgrades();\n CacheChain();\n CacheDragonCost();\n CachePantheonGods();\n\n CacheSeasonSpec();\n CacheSellAllForChoEgg();\n\n SimDoSims = 0;\n }\n\n // Check for aura change to recalculate buildings prices\n const hasBuildAura = Game.auraMult('Fierce Hoarder') > 0;\n if (!CacheHadBuildAura && hasBuildAura) {\n CacheHadBuildAura = true;\n CacheDoRemakeBuildPrices = 1;\n } else if (CacheHadBuildAura && !hasBuildAura) {\n CacheHadBuildAura = false;\n CacheDoRemakeBuildPrices = 1;\n }\n\n if (CacheDoRemakeBuildPrices) {\n CacheBuildingsPrices();\n CacheDoRemakeBuildPrices = 0;\n }\n\n LoopCache();\n\n // Check all changing minigames and game-states\n CheckTickerFortune();\n CheckSeasonPopup();\n CheckGardenTick();\n CheckMagicMeter();\n CheckWrinklerCount();\n }\n // To remove Timers when ascending\n CheckGoldenCookie();\n}\n","import { ToggleTimerBar } from '../../Config/SpecificToggles';\nimport ToggleBotBar from '../../Config/Toggles/ToggleBotBar';\n\nimport UpdateBackground from './UpdateBackground';\n\n/**\n * This function disables and shows the bars created by CookieMonster when the game is \"ascending\"\n * It is called by CM.Disp.Draw()\n */\nexport default function UpdateAscendState() {\n if (Game.OnAscend) {\n l('game').style.bottom = '0px';\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.BotBar === 1)\n l('CMBotBar').style.display = 'none';\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.TimerBar === 1)\n l('CMTimerBar').style.display = 'none';\n } else {\n ToggleBotBar();\n ToggleTimerBar();\n }\n UpdateBackground();\n}\n","import CalcNoGoldSwitchCPS from '../../Sim/Calculations/NoGoldenSwitchCalc';\nimport FillCMDCache from '../FillCMDCache';\nimport { CacheNoGoldSwitchCookiesPS } from '../VariablesAndData';\n\n/**\n * This function calculates CPS without the Golden Switch as it might be needed in other functions\n * If so it CM.Sim.Win()'s them and the caller function will know to recall CM.Sim.CalculateGains()\n * It is called at the end of any functions that simulates certain behaviour\n */\nexport default function CacheNoGoldSwitchCPS() {\n if (Game.Has('Golden switch [off]')) {\n CacheNoGoldSwitchCookiesPS = CalcNoGoldSwitchCPS();\n } else CacheNoGoldSwitchCookiesPS = Game.cookiesPs;\n\n FillCMDCache({ CacheNoGoldSwitchCookiesPS });\n}\n","import CopyData from '../SimulationData/CopyData';\nimport { SimCookiesPs, SimUpgrades } from '../VariablesAndData';\nimport CalculateGains from './CalculateGains';\n\n/**\n * This function calculates CPS without the Golden Switch\n * It is called by CM.Cache.NoGoldSwitchCPS()\n */\nexport default function CalcNoGoldSwitchCPS() {\n CopyData();\n SimUpgrades['Golden switch [off]'].bought = 0;\n CalculateGains();\n return SimCookiesPs;\n}\n","import CalculateChangeGod from '../../Sim/SimulationEvents/GodChange';\nimport FillCMDCache from '../FillCMDCache';\nimport { CacheGods } from '../VariablesAndData';\n\n/**\n * This functions caches the cps effect of each God in slot 1, 2 or 3\n */\nexport default function CachePantheonGods() {\n for (let god = 0; god < 11; god += 1) {\n for (let slot = 0; slot < 3; slot += 1) {\n CacheGods[god][slot] = CalculateChangeGod(god, slot);\n }\n }\n\n FillCMDCache({ CacheGods });\n}\n","import SellBuildingsForChoEgg from '../../Sim/SimulationEvents/SellBuildingForChoEgg';\nimport FillCMDCache from '../FillCMDCache';\nimport { CacheSellForChoEgg } from '../VariablesAndData';\n\n/**\n * This functions caches the reward for selling the Chocolate egg\n * It is called by CM.Main.Loop()\n * @global\t{number}\tCM.Cache.SellForChoEgg\tTotal cookies to be gained from selling Chocolate egg\n */\nexport default function CacheSellAllForChoEgg() {\n let sellTotal = 0;\n // Compute cookies earned by selling stock market goods\n if (Game.Objects.Bank.minigameLoaded) {\n const marketGoods = Game.Objects.Bank.minigame.goods;\n let goodsVal = 0;\n Object.keys(marketGoods).forEach((i) => {\n const marketGood = marketGoods[i];\n goodsVal += marketGood.stock * marketGood.val;\n });\n sellTotal += goodsVal * Game.cookiesPsRawHighest;\n }\n // Compute cookies earned by selling all buildings with optimal auras (ES + RB)\n sellTotal += SellBuildingsForChoEgg();\n CacheSellForChoEgg = sellTotal;\n\n FillCMDCache({ CacheSellForChoEgg });\n}\n","import CopyData from '../SimulationData/CopyData';\nimport { SimBuildingsOwned, SimDragonAura, SimDragonAura2, SimObjects } from '../VariablesAndData'; // eslint-disable-line no-unused-vars\nimport BuildingSell from './SellBuilding';\n\n/**\n * This function calculates the maximum cookies obtained from selling buildings just before purchasing the chocolate egg\n * It is called by CM.Cache.CacheSellForChoEgg()\n * @returns\t{number}\tsellTotal\tThe maximum cookies to be earned\n */\nexport default function SellBuildingsForChoEgg() {\n let sellTotal = 0;\n\n CopyData();\n\n // Change auras to Earth Shatterer + Reality bending to optimize money made by selling\n let buildingsToSacrifice = 2;\n if (SimDragonAura === 5 || SimDragonAura === 18) {\n buildingsToSacrifice -= 1;\n }\n if (SimDragonAura2 === 5 || SimDragonAura2 === 18) {\n buildingsToSacrifice -= 1;\n }\n SimDragonAura = 5;\n SimDragonAura2 = 18;\n\n // Sacrifice highest buildings for the aura switch\n for (let i = 0; i < buildingsToSacrifice; ++i) {\n let highestBuilding = 'Cursor';\n Object.keys(SimObjects).forEach((j) => {\n if (SimObjects[j].amount > 0) {\n highestBuilding = j;\n }\n });\n SimObjects[highestBuilding].amount -= 1;\n SimBuildingsOwned -= 1;\n }\n\n // Get money made by selling all remaining buildings\n Object.keys(SimObjects).forEach((i) => {\n const me = SimObjects[i];\n sellTotal += BuildingSell(\n Game.Objects[me.name],\n Game.Objects[i].basePrice,\n me.amount,\n Game.Objects[i].free,\n me.amount,\n );\n });\n\n return sellTotal;\n}\n","import FormatTime from '../Disp/BeautifyAndFormatting/FormatTime';\nimport GetCPS from '../Disp/HelperFunctions/GetCPS';\nimport CacheAvgCPS from './CPS/CPS';\nimport CacheCurrWrinklerCPS from './CPS/CurrWrinklerCPS';\nimport CachePP from './PP/PP';\nimport CacheHeavenlyChipsPS from './Stats/HeavenlyChips';\nimport AllAmountTillNextAchievement from './TillNextAchievement/AllAmountTillNextAchievement';\nimport { CacheTimeTillNextPrestige } from './VariablesAndData'; // eslint-disable-line no-unused-vars\nimport CacheWrinklers from './Wrinklers/Wrinklers';\n\n/**\n * This functions caches variables that are needed every loop\n * @global\t{string}\tCM.Cache.TimeTillNextPrestige\tTime requried till next prestige level\n */\nexport default function LoopCache() {\n // Update Wrinkler Bank\n CacheWrinklers();\n\n CachePP();\n AllAmountTillNextAchievement(false);\n CacheCurrWrinklerCPS();\n CacheAvgCPS();\n CacheHeavenlyChipsPS();\n\n const cookiesToNext =\n Game.HowManyCookiesReset(\n Math.floor(Game.HowMuchPrestige(Game.cookiesReset + Game.cookiesEarned)) + 1,\n ) -\n (Game.cookiesEarned + Game.cookiesReset);\n CacheTimeTillNextPrestige = FormatTime(cookiesToNext / GetCPS());\n}\n","import { SimObjects } from '../../Sim/VariablesAndData';\nimport FillCMDCache from '../FillCMDCache';\nimport { CacheCurrWrinklerCount, CacheCurrWrinklerCPSMult } from '../VariablesAndData';\n\n/**\n * This functions caches the current Wrinkler CPS multiplier\n * @global\t{number}\tCM.Cache.CurrWrinklerCount\t\tCurrent number of wrinklers\n * @global\t{number}\tCM.Cache.CurrWrinklerCPSMult\tCurrent multiplier of CPS because of wrinklers (excluding their negative sucking effect)\n */\nexport default function CacheCurrWrinklerCPS() {\n CacheCurrWrinklerCPSMult = 0;\n let count = 0;\n Object.keys(Game.wrinklers).forEach((i) => {\n if (Game.wrinklers[i].phase === 2) count += 1;\n });\n let godMult = 1;\n if (SimObjects.Temple.minigameLoaded) {\n const godLvl = Game.hasGod('scorn');\n if (godLvl === 1) godMult *= 1.15;\n else if (godLvl === 2) godMult *= 1.1;\n else if (godLvl === 3) godMult *= 1.05;\n }\n CacheCurrWrinklerCount = count;\n CacheCurrWrinklerCPSMult =\n count *\n (count * 0.05 * 1.1) *\n (Game.Has('Sacrilegious corruption') * 0.05 + 1) *\n (Game.Has('Wrinklerspawn') * 0.05 + 1) *\n godMult;\n\n FillCMDCache({ CacheCurrWrinklerCount, CacheCurrWrinklerCPSMult });\n}\n","import { notificationsFunctions as nF } from '@cookiemonsterteam/cookiemonsterframework/src/index';\nimport { LastTickerFortuneState } from '../VariablesAndData';\n\n/**\n * This function checks if there is a fortune cookie on the ticker\n * It is called by CM.Main.Loop\n */\nexport default function CheckTickerFortune() {\n if (LastTickerFortuneState !== (Game.TickerEffect && Game.TickerEffect.type === 'fortune')) {\n LastTickerFortuneState = Game.TickerEffect && Game.TickerEffect.type === 'fortune';\n if (LastTickerFortuneState) {\n nF.createFlash('cookieMonsterMod', 3, 'FortuneFlash', false);\n nF.playCMSound(\n 'cookieMonsterMod',\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.FortuneSoundURL,\n 'FortuneSound',\n 'FortuneVolume',\n false,\n );\n nF.createNotification(\n 'cookieMonsterMod',\n 'FortuneNotification',\n 'Fortune Cookie found',\n 'A Fortune Cookie has appeared on the Ticker.',\n );\n }\n }\n}\n","import { notificationsFunctions as nF } from '@cookiemonsterteam/cookiemonsterframework/src/index';\nimport { CacheSeasonPopShimmer } from '../../Cache/VariablesAndData'; // eslint-disable-line no-unused-vars\nimport { LastSeasonPopupState } from '../VariablesAndData';\n\n/**\n * This function checks if there is reindeer that has spawned\n * It is called by CM.Main.Loop\n */\nexport default function CheckSeasonPopup() {\n if (LastSeasonPopupState !== Game.shimmerTypes.reindeer.spawned) {\n LastSeasonPopupState = Game.shimmerTypes.reindeer.spawned;\n Object.keys(Game.shimmers).forEach((i) => {\n if (Game.shimmers[i].spawnLead && Game.shimmers[i].type === 'reindeer') {\n CacheSeasonPopShimmer = Game.shimmers[i];\n }\n });\n nF.createFlash('cookieMonsterMod', 3, 'SeaFlash', false);\n nF.playCMSound(\n 'cookieMonsterMod',\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.SeaSoundURL,\n 'SeaSound',\n 'SeaVolume',\n false,\n );\n nF.createNotification(\n 'cookieMonsterMod',\n 'SeaNotification',\n 'Reindeer sighted!',\n 'A Reindeer has spawned. Click it now!',\n );\n }\n}\n","import { notificationsFunctions as nF } from '@cookiemonsterteam/cookiemonsterframework/src/index';\nimport { LastGardenNextStep } from '../VariablesAndData';\n\n/**\n * This function checks if a garden tick has happened\n */\nexport default function CheckGardenTick() {\n if (\n Game.Objects.Farm.minigameLoaded &&\n LastGardenNextStep !== Game.Objects.Farm.minigame.nextStep\n ) {\n if (LastGardenNextStep !== 0 && LastGardenNextStep < Date.now()) {\n nF.createFlash('cookieMonsterMod', 3, 'GardFlash', false);\n nF.playCMSound(\n 'cookieMonsterMod',\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.GardSoundURL,\n 'GardSound',\n 'GardVolume',\n false,\n );\n }\n LastGardenNextStep = Game.Objects.Farm.minigame.nextStep;\n }\n}\n","import { notificationsFunctions as nF } from '@cookiemonsterteam/cookiemonsterframework/src/index';\nimport { LastMagicBarFull } from '../VariablesAndData';\n\n/**\n * This function checks if the magic meter is full\n * It is called by CM.Main.Loop\n */\nexport default function CheckMagicMeter() {\n if (\n Game.Objects['Wizard tower'].minigameLoaded &&\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.GrimoireBar === 1\n ) {\n const { minigame } = Game.Objects['Wizard tower'];\n if (minigame.magic < minigame.magicM) LastMagicBarFull = false;\n else if (!LastMagicBarFull) {\n LastMagicBarFull = true;\n nF.createFlash('cookieMonsterMod', 3, 'MagicFlash', false);\n nF.playCMSound(\n 'cookieMonsterMod',\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.MagicSoundURL,\n 'MagicSound',\n 'MagicVolume',\n false,\n );\n nF.createNotification(\n 'cookieMonsterMod',\n 'MagicNotification',\n 'Magic Meter full',\n 'Your Magic Meter is full. Cast a spell!',\n );\n }\n }\n}\n","import { notificationsFunctions as nF } from '@cookiemonsterteam/cookiemonsterframework/src/index';\nimport { LastWrinklerCount } from '../VariablesAndData';\n\n/**\n * This function checks if any new Wrinklers have popped up\n * It is called by CM.Main.Loop\n */\nexport default function CheckWrinklerCount() {\n if (Game.elderWrath > 0) {\n let CurrentWrinklers = 0;\n Object.keys(Game.wrinklers).forEach((i) => {\n if (Game.wrinklers[i].phase === 2) CurrentWrinklers += 1;\n });\n if (CurrentWrinklers > LastWrinklerCount) {\n LastWrinklerCount = CurrentWrinklers;\n if (\n CurrentWrinklers === Game.getWrinklersMax() &&\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.WrinklerMaxFlash\n ) {\n nF.createFlash('cookieMonsterMod', 3, 'WrinklerMaxFlash', false);\n } else {\n nF.createFlash('cookieMonsterMod', 3, 'WrinklerFlash', false);\n }\n if (\n CurrentWrinklers === Game.getWrinklersMax() &&\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.WrinklerMaxSound\n ) {\n nF.playCMSound(\n 'cookieMonsterMod',\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.WrinklerMaxSoundURL,\n 'WrinklerMaxSound',\n 'WrinklerMaxVolume',\n false,\n );\n } else {\n nF.playCMSound(\n 'cookieMonsterMod',\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.WrinklerSoundURL,\n 'WrinklerSound',\n 'WrinklerVolume',\n false,\n );\n }\n if (\n CurrentWrinklers === Game.getWrinklersMax() &&\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.WrinklerMaxNotification\n ) {\n nF.createNotification(\n 'cookieMonsterMod',\n 'WrinklerMaxNotification',\n 'Maximum Wrinklers Reached',\n 'You have reached your maximum ammount of wrinklers',\n );\n } else {\n nF.createNotification(\n 'cookieMonsterMod',\n 'WrinklerNotification',\n 'A Wrinkler appeared',\n 'A new wrinkler has appeared',\n );\n }\n } else {\n LastWrinklerCount = CurrentWrinklers;\n }\n }\n}\n","import { notificationsFunctions as nF } from '@cookiemonsterteam/cookiemonsterframework/src/index';\nimport { CacheSpawnedGoldenShimmer, CacheGoldenShimmersByID } from '../../Cache/VariablesAndData'; // eslint-disable-line no-unused-vars\nimport CreateGCTimer from '../../Disp/GoldenCookieTimers/GoldenCookieTimers';\nimport { UpdateFavicon } from '../../Disp/TabTitle/FavIcon';\nimport { GCTimers } from '../../Disp/VariablesAndData';\nimport {\n CurrSpawnedGoldenCookieState,\n LastGoldenCookieState,\n LastSpawnedGoldenCookieState,\n} from '../VariablesAndData';\n\n/**\n * Auxilirary function that finds all currently spawned shimmers.\n * CM.Cache.spawnedGoldenShimmer stores the non-user spawned cookie to later determine data for the favicon and tab-title\n * It is called by CM.CM.Main.CheckGoldenCookie\n */\nfunction FindShimmer() {\n CurrSpawnedGoldenCookieState = 0;\n CacheGoldenShimmersByID = {};\n Object.keys(Game.shimmers).forEach((i) => {\n CacheGoldenShimmersByID[Game.shimmers[i].id] = Game.shimmers[i];\n if (Game.shimmers[i].spawnLead && Game.shimmers[i].type === 'golden') {\n CacheSpawnedGoldenShimmer = Game.shimmers[i];\n CurrSpawnedGoldenCookieState += 1;\n }\n });\n}\n\n/**\n * This function checks for changes in the amount of Golden Cookies\n * It is called by CM.Main.Loop\n */\nexport default function CheckGoldenCookie() {\n FindShimmer();\n Object.keys(GCTimers).forEach((i) => {\n if (typeof CacheGoldenShimmersByID[i] === 'undefined') {\n GCTimers[i].parentNode.removeChild(GCTimers[i]);\n delete GCTimers[i];\n }\n });\n if (LastGoldenCookieState !== Game.shimmerTypes.golden.n) {\n LastGoldenCookieState = Game.shimmerTypes.golden.n;\n if (LastGoldenCookieState) {\n if (LastSpawnedGoldenCookieState < CurrSpawnedGoldenCookieState) {\n nF.createFlash('cookieMonsterMod', 3, 'GCFlash', false);\n nF.playCMSound(\n 'cookieMonsterMod',\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.GCSoundURL,\n 'GCSound',\n 'GCVolume',\n false,\n );\n nF.createNotification(\n 'cookieMonsterMod',\n 'GCNotification',\n 'Golden Cookie Spawned',\n 'A Golden Cookie has spawned. Click it now!',\n );\n }\n\n Object.keys(Game.shimmers).forEach((i) => {\n if (typeof GCTimers[Game.shimmers[i].id] === 'undefined') {\n CreateGCTimer(Game.shimmers[i]);\n }\n });\n }\n UpdateFavicon();\n LastSpawnedGoldenCookieState = CurrSpawnedGoldenCookieState;\n if (CurrSpawnedGoldenCookieState === 0) CacheSpawnedGoldenShimmer = 0;\n } else if (\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.GCTimer === 1 &&\n LastGoldenCookieState\n ) {\n Object.keys(GCTimers).forEach((i) => {\n GCTimers[i].style.opacity = CacheGoldenShimmersByID[i].l.style.opacity;\n GCTimers[i].style.transform = CacheGoldenShimmersByID[i].l.style.transform;\n GCTimers[i].textContent = Math.ceil(CacheGoldenShimmersByID[i].life / Game.fps);\n });\n }\n}\n","/** Section: Functions related to the Golden Cookie Timers */\n\nimport { GCTimers } from '../VariablesAndData';\n\n/**\n * This function creates a new Golden Cookie Timer and appends it CM.Disp.GCTimers based on the id of the cookie\n * @param\t{object}\tcookie\tA Golden Cookie object\n */\nexport default function CreateGCTimer(cookie) {\n const GCTimer = document.createElement('div');\n GCTimer.id = `GCTimer${cookie.id}`;\n GCTimer.style.width = '96px';\n GCTimer.style.height = '96px';\n GCTimer.style.position = 'absolute';\n GCTimer.style.zIndex = '10000000001';\n GCTimer.style.textAlign = 'center';\n GCTimer.style.lineHeight = '96px';\n GCTimer.style.fontFamily = '\"Kavoon\", Georgia, serif';\n GCTimer.style.fontSize = '35px';\n GCTimer.style.cursor = 'pointer';\n GCTimer.style.display = 'block';\n GCTimer.style.pointerEvents = 'none';\n if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.GCTimer === 0)\n GCTimer.style.display = 'none';\n GCTimer.style.left = cookie.l.style.left;\n GCTimer.style.top = cookie.l.style.top;\n GCTimer.onclick = function () {\n cookie.pop();\n };\n GCTimer.onmouseover = function () {\n cookie.l.style.filter = 'brightness(125%) drop-shadow(0px 0px 3px rgba(255,255,255,1))'; // eslint-disable-line no-param-reassign\n cookie.l.style.webkitFilter = 'brightness(125%) drop-shadow(0px 0px 3px rgba(255,255,255,1))'; // eslint-disable-line no-param-reassign\n };\n GCTimer.onmouseout = function () {\n cookie.l.style.filter = ''; // eslint-disable-line no-param-reassign\n cookie.l.style.webkitFilter = ''; // eslint-disable-line no-param-reassign\n };\n\n GCTimers[cookie.id] = GCTimer;\n l('shimmers').appendChild(GCTimer);\n}\n","/** This includes all headers of Cookie Monster and their relevant data */\nconst headers = {\n Favourite: 1,\n Calculation: 1,\n Notation: 1,\n Colours: 1,\n BarsDisplay: 1,\n Tooltip: 1,\n Statistics: 1,\n Notification: 1,\n NotificationGeneral: 1,\n NotificationGC: 1,\n NotificationFC: 1,\n NotificationSea: 1,\n NotificationGard: 1,\n NotificationMagi: 1,\n NotificationWrink: 1,\n NotificationWrinkMax: 1,\n Miscellaneous: 1,\n Lucky: 1,\n Chain: 1,\n Spells: 1,\n Garden: 1,\n Prestige: 1,\n Wrink: 1,\n Sea: 1,\n Achievs: 1,\n Misc: 1,\n infoMenu: 1,\n optionsMenu: 1,\n};\n\nexport default headers;\n","import { saveAndLoadingFunctions } from '@cookiemonsterteam/cookiemonsterframework/src/index';\n\nimport headers from '../Data/headers';\nimport { VersionMajor, VersionMinor } from '../Data/Moddata';\nimport settings from '../Data/settings';\nimport UpdateColours from '../Disp/HelperFunctions/UpdateColours';\nimport CMLoopHook from '../Main/LoopHook';\nimport InitData from '../Sim/InitializeData/InitData';\n\n/**\n * This creates a load function to the CM object. Per Game code/comments:\n * \"do stuff with the string data you saved previously\"\n */\nexport default function load(str) {\n InitData();\n\n // Load saveData\n saveAndLoadingFunctions.loadMod('cookieMonsterMod', str, settings, headers, CMLoopHook);\n if (\n typeof Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.lockedMinigames ===\n 'undefined'\n ) {\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.lockedMinigames = [];\n }\n\n // Update display with colours and locking of minigames\n UpdateColours();\n for (\n let index = 0;\n index < Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.lockedMinigames.length;\n index++\n ) {\n const buildingIndex =\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.lockedMinigames[index];\n l(`row${buildingIndex}`).style.pointerEvents = 'none';\n l(`row${buildingIndex}`).style.opacity = '0.4';\n l(`productLock${buildingIndex}`).innerHTML = 'Unlock';\n l(`productLock${buildingIndex}`).style.pointerEvents = 'auto';\n }\n\n // Notify of update\n if (\n typeof Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.version !== 'undefined' &&\n Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.version !==\n `${VersionMajor}.${VersionMinor}`\n ) {\n if (Game.prefs.popups)\n Game.Popup(\n 'A new version of Cookie Monster has been loaded, check out the release notes in the info tab!',\n );\n else\n Game.Notify(\n 'A new version of Cookie Monster has been loaded, check out the release notes in the info tab!',\n '',\n '',\n 0,\n 1,\n );\n }\n}\n","import init from './InitSaveLoad/init';\nimport load from './InitSaveLoad/load';\nimport save from './InitSaveLoad/save';\n\nconst CM = {\n init,\n load,\n save,\n};\n\nif (typeof Steam !== 'undefined') {\n // Need to add a delay for steam\n setTimeout(function () {\n Game.registerMod('CookieMonster', CM);\n\n // Game.registerMod also calls CM.load() which calls the loop hook\n // Thus sounds normally play at start up as Season and Garden states are checked\n window.cookieMonsterFrameworkData.isInitializing = false;\n }, 2000);\n} else {\n Game.registerMod('CookieMonster', CM);\n window.cookieMonsterFrameworkData.isInitializing = false;\n}\n","import { initFunctions } from '@cookiemonsterteam/cookiemonsterframework';\nimport { VersionMajor, VersionMinor } from '../Data/Moddata';\nimport CMDrawHook from '../Disp/DrawHook';\nimport CMClickHook from '../Main/ClickHook';\nimport InitializeCookieMonster from '../Main/Initialization';\nimport CMLoopHook from '../Main/LoopHook';\nimport load from './load';\n\n/**\n * This creates a init function for the CM object. Per Game code/comments:\n * \"this function is called as soon as the mod is registered\n * declare hooks here\"\n * It starts the further initialization of CookieMonster and registers hooks\n */\nexport default function init() {\n let proceed = true;\n\n // Load Cookie Monster Mod Framework and register mod\n initFunctions.initModFramework();\n window.cookieMonsterFrameworkData.isInitializing = true;\n initFunctions.registerMod('cookieMonsterMod');\n\n if (Game.version !== Number(VersionMajor)) {\n // eslint-disable-next-line no-restricted-globals, no-alert\n proceed = confirm(\n `Cookie Monster version ${VersionMajor}.${VersionMinor} is meant for Game version ${VersionMajor}. Loading a different version may cause errors. Do you still want to load Cookie Monster?`,\n );\n }\n if (proceed) {\n InitializeCookieMonster();\n Game.registerHook('click', CMClickHook);\n Game.registerHook('draw', CMDrawHook);\n Game.registerHook('logic', CMLoopHook);\n\n // Load default settings if no previous saveData is found\n if (typeof Game.modSaveData.cookieMonsterMod === 'undefined') {\n load('{}');\n }\n }\n}\n","/** Data related directly to Cookie Monster */\n\nexport const VersionMajor = '2.048';\nexport const VersionMinor = '10';\n\n/** Information about Cookie Monster to be displayed in the info section */\nexport const ModDescription = `
Cookie Monster\n offers a wide range of tools and statistics to enhance your game experience.\n It is not a cheat interface – although it does offer helpers for golden cookies and such, everything can be toggled off at will to only leave how much information you want.\n Progess on new updates and all previous release notes can be found on the GitHub page linked above!\n Please also report any bugs you may find over there!\n `;\n\n/** Latest releasenotes of Cookie Monster to be displayed in the info section */\nexport const LatestReleaseNotes = `This update adds support for some parts of cookie clicker 2.048\n- added support for Dragon Aura 'Supreme Intellect' in the pantheon calculations\n- added support for new tiers of Shimmering veil\n- added support for unshackled upgrades\n- updated some simulator logic to more cloesly match updated cookie clicker logic\n- Bugfix: conjure backed goods tooltip used cached no gold switch raw cps instead of live cps\n- Bugfix: negative calculations due to glucosimium upgrades, kittens, unshackled, and achievements`;\n","import { VersionMajor, VersionMinor } from '../Data/Moddata';\n\n/**\n * This creates a save function to the CM object. Per Game code/comments:\n * \"use this to store persistent data associated with your mod\n * return 'a string to be saved';\"\n */\nexport default function save() {\n const saveObject = Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod;\n saveObject.version = `${VersionMajor}.${VersionMinor}`;\n return JSON.stringify(saveObject);\n}\n"],"names":["global","factory","module","exports","document","win","Error","window","this","BoxShadow","funcName","elm","jsc","jscolor","initialized","instances","readyQueue","register","addEventListener","pub","init","installBySelector","selector","rootNode","node","elms","querySelectorAll","matchClass","RegExp","lookupClass","i","length","dataOpts","m","undefined","type","toLowerCase","isColorAttrSupported","getDataAttr","className","match","targetElm","optsStr","console","warn","docsRef","opts","trim","parseOptionsStr","e","str","JSON","parse","eParse","looseJSON","Function","eEval","getInstances","inst","targetElement","push","createEl","tagName","el","createElement","setData","nodeOrSelector","sel","querySelector","isNode","val","Node","nodeType","nodeName","removeChildren","firstChild","removeChild","isTextInput","isButton","n","indexOf","isButtonEmpty","value","textContent","isPassiveEventSupported","supported","Object","defineProperty","get","removeEventListener","setAttribute","dataProp","obj","arguments","data","hasOwnProperty","prop","map","removeData","getData","setDefault","name","attrName","getAttribute","setDataAttr","_attachedGroupEvents","attachGroupEvent","groupName","evnt","func","detachGroupEvents","evt","preventDefault","returnValue","captureTarget","target","setCapture","_capturedTarget","releaseTarget","releaseCapture","triggerEvent","eventName","bubbles","cancelable","ev","Event","createEvent","initEvent","dispatchEvent","triggerInputEvent","eventKey","keys","code","keyCode","strList","replace","split","hasClass","classList","contains","addClass","classNames","add","removeClass","repl","remove","getCompStyle","getComputedStyle","currentStyle","setStyle","styles","important","reversible","priority","origStyle","setVal","style","setProperty","hexColor","r","g","b","Math","round","toString","substr","toUpperCase","hexaColor","a","rgbColor","rgbaColor","linearGradient","stdName","prefixes","helper","tryFunc","tryVal","background","getFuncName","Array","prototype","join","call","setBorderRadius","setBoxShadow","getElementPos","relativeToViewport","x","y","rect","getBoundingClientRect","left","top","viewPos","getViewPos","getElementSize","offsetWidth","offsetHeight","getAbsPointerPos","changedTouches","clientX","clientY","getRelPointerPos","targetRect","srcElement","doc","documentElement","pageXOffset","scrollLeft","clientLeft","pageYOffset","scrollTop","clientTop","getViewSize","innerWidth","clientWidth","innerHeight","clientHeight","RGB_HSV","min","v","max","h","HSV_RGB","s","u","floor","parseColorString","ret","rgba","format","parseInt","charAt","mR","mG","mB","mA","par","re","parseFloat","parsePaletteValue","mixed","vals","isArray","colors","color","containsTranparentColor","isAlphaFormat","scaleCanvasForHighDPR","canvas","dpr","devicePixelRatio","width","height","getContext","scale","genColorPreviewCanvas","separatorPos","specWidth","scaleForHighDPR","sepW","previewSeparator","sqSize","chessboardSize","sqColor1","chessboardColor1","sqColor2","chessboardColor2","cWidth","cHeight","ctx","fillStyle","fillRect","start","clearRect","lineWidth","beginPath","strokeStyle","moveTo","lineTo","stroke","genColorPreviewGradient","position","params","apply","redrawPosition","picker","owner","tp","vp","thisObj","fixed","c","ts","vs","pd","getPickerDims","ps","borderW","borderH","l","smartPosition","pp","positionValue","contractShadow","_drawPosition","vShadow","shadowBlur","wrap","boxS","shadow","shadowColor","w","controlBorderWidth","sliderSpace","getControlPadding","sliderSize","getSliderChannel","hasAlphaChannel","pal","getPaletteDims","padding","closeButton","buttonHeight","pW","pH","contentW","contentH","paddedW","paddedH","borderWidth","palette","cols","rows","cellW","cellH","sampleCount","_palette","paletteCols","ceil","paletteSpacing","paletteHeight","pointerBorderWidth","pointerThickness","getPadYChannel","mode","triggerCallback","callback","error","triggerGlobal","eventNames","trigger","_pointerMoveEvent","mouse","touch","_pointerEndEvent","_pointerOrigin","onDocumentKeyUp","tryHide","onWindowResize","onWindowScroll","onParentScroll","onDocumentMouseDown","showOnClick","disabled","show","onControlPointerStart","onPickerTouchStart","controlName","pointerType","registerDragEvents","offset","onDocumentPointerMove","onDocumentPointerEnd","parent","frameElement","ofs","abs","rel","channels","fromHSVA","setPad","setSld","setASld","onPaletteSampleClick","currentTarget","_setFormat","getFormat","paletteSetsAlpha","_paletteHasTransparency","fromRGBA","hideOnPaletteClick","hide","ofsX","ofsY","pointerAbs","xVal","yVal","fmt","createPadCanvas","draw","hGrad","createLinearGradient","addColorStop","vGrad","createSliderGradient","color1","color2","grad","createASliderGradient","hShadow","blur","spread","inset","flags","leaveValue","leaveAlpha","leavePreview","enumOpts","previewPosition","alphaChannel","deprecatedOpts","THIS","setOption","option","oldOpt","newOpt","setter","getOption","getter","drawPicker","_processParentElementsInDOM","box","boxB","pad","padB","padM","padCanvas","cross","crossBY","crossBX","crossLY","crossLX","sld","sldB","sldM","sldGrad","sldPtrS","sldPtrIB","sldPtrMB","sldPtrOB","asld","asldB","asldM","asldGrad","asldPtrS","asldPtrIB","asldPtrMB","asldPtrOB","btn","btnT","appendChild","passive","insetColors","outsetColor","p","displaySlider","displayAlphaSlider","pickerDims","crossOuterSize","crossSize","controlPadding","borderRadius","PI","clear","zIndex","border","borderColor","backgroundColor","opacity","controlBorderColor","cursor","instance","control","pointerBorderColor","pointerColor","overflow","display","sliderInnerSpace","innerHTML","chessboard","si","sampleColor","sampleCssColor","sc","sw","backgroundImage","toDataURL","backgroundRepeat","backgroundPosition","bottom","maxWidth","whiteSpace","buttonColor","font","textAlign","onmousedown","lineHeight","createTextNode","closeText","redrawPad","redrawSld","redrawASld","activeClassName","container","body","parentNode","yChannel","rgb1","rgb2","rgb","toHEXString","sldChannel","isPickerOwner","alpha","random","onChange","onInput","valueElement","alphaElement","previewElement","previewSize","previewPadding","required","hash","uppercase","forceStyle","hideOnLeave","minS","maxS","minV","maxV","minA","maxA","redraw","exposeColor","success","opt","channel","res","evs","callbackProp","isNaN","hsv","fromHSV","fromRGB","fromString","setPreviewElementBg","setValueElementValue","randomize","minH","maxH","toHEXAString","toRGBString","toRGBAString","toGrayscale","toCanvas","toBackground","isLight","_currentFormat","processValueInput","processAlphaInput","colorStr","alphaVal","setAlphaElementValue","backgrounds","image","size","repeat","origin","preview","bg","sty","right","_parentElementsProcessed","compStyle","set__palette","options","presetsArr","preset","slice","pres","presets","nonProperties","test","valueElementOrigEvents","oninput","oldVal","initValue","initAlpha","install","shift","ready","triggerNow","installByClassName","JSColor","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","__esModule","d","definition","key","o","enumerable","Setting","constructor","defaultValue","group","cookieMonsterPrompt","content","Game","promptWrapL","promptL","forEach","id","onclick","PlaySound","children","promptAnchorL","darkenL","focus","promptOn","UpdatePrompt","createFlash","modName","configName","forced","mods","cookieMonsterFramework","saveData","settings","cookieMonsterFrameworkData","isInitializing","setTimeout","fps","saveFramework","modSaveString","stringify","cookieClickerSaveString","b64_to_utf8","unescape","localStorage","getItem","pattern","modSave","newSaveString","setItem","escape","utf8_to_b64","toggleHeader","headerName","headers","playCMSound","url","sndConfig","volConfig","sound","Audio","GeneralSound","volume","play","toggleConfigVolume","addMenu","_","observer","disconnect","onMenu","menu","insertBefore","frameworkInfoDiv","titleDiv","buttonSpan","fontSize","verticalAlign","infoMenu","UpdateMenu","descriptionDiv","createFrameworkInfoMenuSection","listeners","addInfoMenuSection","observe","getElementById","attributes","childList","subtree","drawLoop","optionsMenu","loadMod","settingsData","headersData","logicLoop","saveDataObject","modSaveData","settingsObject","headersObject","favouriteSettings","createSaveDataObject","load","MutationObserver","WhiteScreen","pointerEvents","createFlashScreen","registerHook","save","initFunctions","registerMod","menuFunctions","createInfoListing","listingHTML","listingDiv","createOptionsListing","updateColoursFunc","refreshScaleFunc","div","FavouriteSettings","favourites","FavStar","includes","innerText","filter","ele","toggleFavouriteSetting","onmouseover","tooltip","onmouseout","createFavouriteStar","toggle","label","toggleConfig","desc","title","float","percent","slider","step","onchange","span","input","readOnly","inputPrompt","outerHTML","ClosePrompt","innerSpan","displayName","event","saveObject","altKey","ctrlKey","shiftKey","toggleConfigKeycode","createOptionsSubHeader","text","modDisplayName","menuName","modSectionDiv","notificationsFunctions","createNotification","message","visibilityState","Notification","badge","saveAndLoadingFunctions","settingClasses","super","ToggleWrinklerButtons","cookieMonsterMod","WrinklerButtons","elderWrath","CacheAverageCookiesFromClicks","CookiesDiff","WrinkDiff","WrinkFattestDiff","ChoEggDiff","ClicksDiff","HeavenlyChipsDiff","CacheLastCPSCheck","CacheLastCookies","CacheLastWrinkCookies","CacheLastWrinkFattestCookies","CacheLastClicks","CacheAverageGainBank","CacheAverageGainWrink","CacheAverageGainWrinkFattest","CacheAverageGainChoEgg","CacheAverageCPS","CacheLastHeavenlyCheck","CacheLastHeavenlyChips","CacheDoRemakeBuildPrices","CacheHadBuildAura","SimBuildingsOwned","SimUpgradesOwned","SimPledges","SimAchievementsOwned","SimHeavenlyPower","SimPrestige","SimDragonAura","SimDragonAura2","SimGod1","SimGod2","SimGod3","SimDoSims","SimEffs","SimCookiesPs","SimCookiesPsRaw","CacheDragonAura","CacheDragonAura2","CacheLastDragonLevel","CacheCostDragonUpgrade","CacheLucky","CacheLuckyReward","CacheLuckyWrathReward","CacheLuckyFrenzy","CacheLuckyRewardFrenzy","CacheLuckyWrathRewardFrenzy","CacheConjure","CacheConjureReward","CacheEdifice","CacheEdificeBuilding","CacheNoGoldSwitchCookiesPS","CacheDragonsFortuneMultAdjustment","CacheGoldenCookiesMult","CacheWrathCookiesMult","CacheHCPerSecond","CacheCentEgg","CacheSeaSpec","CacheLastChoEgg","CacheObjects1","CacheObjects10","CacheObjects100","CacheObjectsNextAchievement","CacheWrinklersTotal","CacheWrinklersNormal","CacheWrinklersFattest","CacheCurrWrinklerCPSMult","CacheCurrWrinklerCount","CacheUpgrades","CacheAverageClicks","CacheMissingUpgrades","CacheMissingUpgradesPrestige","CacheMissingUpgradesCookies","CacheChainRequired","CacheChainRequiredNext","CacheChainMaxReward","CacheChainWrathRequired","CacheChainWrathRequiredNext","CacheChainWrathMaxReward","CacheChainFrenzyRequired","CacheChainFrenzyRequiredNext","CacheChainFrenzyMaxReward","CacheChainFrenzyWrathRequired","CacheChainFrenzyWrathRequiredNext","CacheChainFrenzyWrathMaxReward","CacheRealCookiesEarned","CacheAvgCPSWithChoEgg","CacheSpawnedGoldenShimmer","CacheSeasonPopShimmer","CacheTimeTillNextPrestige","CacheMinPP","CacheMinPPBulk","CachePPArray","CacheGoldenShimmersByID","CacheSellForChoEgg","CacheGods","SimObjects","SimUpgrades","SimAchievements","SimAuraMult","what","dragonAuras","dragonLevel","dragonAurasBN","SimGetSellMultiplier","giveBack","SimEff","def","SimHas","it","ascensionMode","pool","tier","bought","SimHasAura","SimHasGod","hasGod","Temple","minigame","Objects","god","gods","SimModifyBuildingPrice","building","price","ModifiedPrice","hasBuff","fortune","minigameLoaded","godLvl","BuildingSell","build","basePrice","free","amount","noSim","noSimRes","toChange","startingAmount","moni","buyBulk","priceIncrease","modifyBuildingPrice","getSellMultiplier","metric","shortScale","shortScaleAbbreviated","LastModCount","TooltipLumpBackup","BackupGrimoireLaunch","BackupGrimoireLaunchMod","BackupGrimoireDraw","HasReplaceNativeGrimoireLaunch","HasReplaceNativeGrimoireDraw","LoadMinigames","LastSeasonPopupState","LastTickerFortuneState","LastGardenNextStep","LastGoldenCookieState","LastSpawnedGoldenCookieState","LastMagicBarFull","CurrSpawnedGoldenCookieState","LastWrinklerCount","DispCSS","TooltipBuildBackup","TooltipGrimoireBackup","TooltipUpgradeBackup","BackupFunctions","CycliusDateAtBeginLoop","Date","now","CenturyDateAtBeginLoop","num","floats","decimals","ScaleDecimals","Infinity","Scale","Beautify","Number","isFinite","answer","ScaleCutoff","ScaleSeparator","toLocaleString","toExponential","exponential","AmountOfTenPowerThree","toFixed","log","ColourTextPre","ColourBackPre","ColourBlue","ColourGreen","ColourYellow","ColourOrange","ColourRed","ColourPurple","ColourGray","ColourPink","ColourBrown","ColoursOrdering","TooltipText","SimpleTooltipElements","CMLastAscendState","TooltipWrinklerArea","TooltipWrinkler","TooltipWrinklerBeingShown","CMSayTime","LastTargetBotBar","LastTargetBuildings","LastTargetTooltipBuilding","CookieTimes","ClickTimes","BuffColours","Frenzy","Clot","Dragonflight","TooltipPrice","TooltipBonusIncome","TooltipType","TooltipName","TooltipBonusMouse","LastAscendState","LastNumberOfTimers","GCTimers","Title","UpdateBuildings","arr","buyMode","removeProperty","BuildColour","colour","SortBuildings","k","sort","amountUntilNext","AmountNeeded","priceUntilNext","gridRow","UpdateUpgradeSectionsHeight","values","getElementsByClassName","section","UpgradesNeverCollapse","minHeight","UpdateUpgrades","UpBarColour","blue","green","yellow","orange","red","purple","gray","UpgradesInStore","me","addedColour","j","childNodes","SortUpgrades","nameChecker","arr2","upgrade","findIndex","order","FormatTime","time","longFormat","formattedTime","TimeFormat","GetTimeColour","GetCPS","CPSMode","CalcWrink","cookiesPs","cpsSucked","wrinklers","GetWrinkConfigBank","CreateTimer","bars","timerBar","margin","marginRight","colourBar","borderTopRightRadius","borderBottomRightRadius","timer","marginLeft","CreateBotBarBuildingColumn","buildingName","bonus","header","substring","lastChild","paddingLeft","UpdateBotBar","BotBar","count","PPString","PPDisplayTime","timeColour","bulkPrice","cookies","UpdateBackground","Background","LeftBackground","DrawBackground","UpdateBotTimerBarPosition","TimerBar","TimerBarPos","ToggleTimerBar","CacheDragonAuras","dragonAura","dragonAura2","InitAchievement","achievementName","Achievements","you","SimGetTieredCpsMult","mult","tieredUpgrades","Tiers","special","tierMult","unshackleUpgrade","synergies","syn","buildingTie1","buildingTie2","grandma","Grandma","misfortune","vanilla","InitialBuildingData","cps","magicCpS","ComputeCps","GrandmaSynergies","UpgradesByPool","kitten","Portal","baseCps","baseCPS","InitUpgrade","upgradeName","Upgrades","power","level","pow","CopyData","UpgradesOwned","pledges","AchievementsOwned","heavenlyPower","prestige","totalCookies","slot","won","TooltipCreateHeader","fontWeight","TooltipCreateCalculationSection","income","marginBottom","click","production","ColourOfPP","PPSecondsLowerLimit","PPOnlyConsiderBuyable","GetCPSBuffMult","buffs","multCpS","SimWin","CalculateGains","effs","myEffs","ii","heavenlyMult","SimGetHeavenlyMultiplier","heralds","cookieUpgrades","buildMult","sin","santaLevel","milkProgress","milkMult","catMult","storedCps","eggMult","day","startDate","lumps","rawCookiesPs","CpsAchievements","threshold","shimmerTypes","golden","auraMult","bakeryName","goldenSwitchMult","upgrades","goldenCookieUpgrades","veilMult","runModHookOnValue","Fortunes","HalloCookies","ChristCookies","ValCookies","PlantDrops","SimHasAchiev","CheckOtherAchiev","grandmas","buildingsOwned","mathematician","base10","minAmount","ObjectsById","Cursor","hasAllHalloCook","hasAllChristCook","list","fortunes","BuyBuildingsBonusIncome","tieredAchievs","achievUnlock","lastAchievementsOwned","CalculateGrimoireRefillTime","currentMagic","maxMagic","targetMagic","magic","ToggleToolWarnPos","ToolWarnPos","UpdateTooltips","tooltipBox","paddingBottom","TooltipBuildUpgrade","increase","productionAchievs","HasAchiev","achiev","nextProductionAchiev","ObjectsTillNext","PPOfAmount","PPFrag","Building","getPrice","bonusMouse","previousSibling","chocolate","Upgrade","TooltipLump","lumpType","lumpColour","lumpCurrentType","SugarLump","spellCost","getSpellCost","spellsById","TooltipGrim","magicM","recover","recoverColour","conjure","reward","seperator","loss","Grimoire","Farm","TooltipPlots","plot","mature","plantsById","plantName","GardenPlots","totalGain","mortal","tile","immortal","matureBase","HarvestAll","WrinklerReward","WrinklerButton","TooltipPantheon","GodID","cps1","cps2","cps3","PantheonGods","TooltipWarn","create","boxId","labelTextFront","labelTextBack","deficitId","transition","labelDiv","labelSpan","deficitDiv","deficitSpan","ToolWarnUser","bonusIncomeUsed","ToolWarnBon","limitLucky","bonusNoFren","ToolWarnLucky","ToolWarnLuckyFrenzy","limitLuckyFrenzy","ToolWarnConjure","limitConjure","ToolWarnConjureFrenzy","limitConjureFrenzy","ToolWarnEdifice","Warnings","CMDrawHook","prefs","autosave","drawT","Stats","sayTime","T","maxWidthTwoBar","maxWidthOneBar","numberOfTimers","AutosaveTimerBar","timeTillNextAutosave","OnAscend","TimerBarOverlay","spawned","Has","minTime","maxTime","chanceToSpawn","season","reindeer","BuffTimerBars","classColour","UpdateTimerBar","TooltipWrink","showingTooltip","phase","selected","placeholder","wrinkler","minWidth","CheckWrinklerTooltip","sucked","toSuck","UpdateWrinklerTooltip","UpStats","CMClickHook","addLatest","computedMouseCps","CMAvgQueue","maxLength","queue","newValue","calcAverage","timePeriod","calcSum","reduce","FillCMDCache","caches","CookieMonsterData","Cache","exportName","CacheAvgCPS","currDate","choEggTotal","cookiesEarned","timeDiff","bankDiffAvg","wrinkDiffAvg","wrinkFattestDiffAvg","choEggDiffAvg","clicksDiffAvg","cookieClicks","cpsLength","AvgCPSHist","choEgg","HasUnlocked","AvgClicksHist","BuildingGetPrice","partialPrice","CacheColour","PPRigidelMode","PPExcludeTop","CachePP","indexOfMin","CacheBuildingsPP","Objects1","Objects10","Objects100","entries","BuyUpgradesBonusIncome","unlocked","CountsAsUpgradeOwned","diffMouseCPS","multClick","out","MouseCps","CacheBuildingIncome","result","CacheBuildingsPrices","CacheIncome","bonusIncome","CacheUpgradeIncome","MaxChainCookieReward","digit","maxPayout","totalFromChain","nextMoni","nextRequired","chain","LN10","CacheChain","cpsBuffMult","CacheHeavenlyChipsPS","chipsOwned","HowMuchPrestige","cookiesReset","ascendNowToGet","heavenlyChipsDiffAvg","CacheAllMissingUpgrades","classes","noFrame","crates","icon","iconFunction","getDynamicTooltip","crateMissing","CacheSeasonSpec","CacheStatsCookies","CacheGoldenAndWrathCookiesMults","goldenMult","wrathMult","eff","AllAmountTillNextAchievement","forceRecalc","TotalNeeded","tillNext","AchievementsAtStart","index","lastIndexWithChange","IndividualAmountTillNextAchievement","CacheWrinklers","InitCache","PopAllNormalWrinklers","hp","CreateTooltip","TooltipAmor","buildPrice","amortizeAmount","storedTotalCps","globalCpsMult","crateTooltip","lumpTooltip","spellTooltip","tileTooltip","toolTooltip","godTooltip","slotTooltip","area","UpdateFavicon","Favicon","wrath","href","InitData","ReplaceTooltipGrimoire","dynamic","wobble","ReplaceNativeGrimoireDraw","GrimoireBar","magicBarTextL","magicBarL","ReplaceNativeGrimoire","launch","ReplaceNativeGrimoireLaunch","CacheDragonCost","dragonLevels","buy","objectMatch","replaceAll","cost","ConfigGroups","Favourite","Calculation","Notation","Colours","BarsDisplay","Tooltip","Statistics","Miscellaneous","ConfigGroupsNotification","NotificationGeneral","NotificationGC","NotificationFC","NotificationSea","NotificationGard","NotificationMagi","NotificationWrink","NotificationWrinkMax","ToggleOnOff","checkNotificationPromise","requestPermission","then","RefreshScale","BeautifyAll","RefreshStore","RebuildUpgrades","ToggleBotBar","DetailedTime","UpgradeBarFixedPos","DragonAuraInfo","GCTimer","HideSectionsButtons","TooltipAscendButton","MissingUpgrades","MissingAchievements","HeavenlyChipsTarget","ShowMissedGC","GCNotification","GCFlash","ColourGCFlash","GCSound","GCVolume","GCSoundURL","FortuneNotification","FortuneFlash","ColourFortuneFlash","FortuneSound","FortuneVolume","FortuneSoundURL","SeaNotification","SeaFlash","ColourSeaFlash","SeaSound","SeaVolume","SeaSoundURL","GardFlash","ColourGardFlash","GardSound","GardVolume","GardSoundURL","MagicNotification","MagicFlash","ColourMagicFlash","MagicSound","MagicVolume","MagicSoundURL","WrinklerNotification","WrinklerFlash","ColourWrinklerFlash","WrinklerSound","WrinklerVolume","WrinklerSoundURL","WrinklerMaxNotification","WrinklerMaxFlash","ColourWrinklerMaxFlash","WrinklerMaxSound","WrinklerMaxVolume","WrinklerMaxSoundURL","BulkBuyBlock","UpdateColours","createMenuOptions","menuDiv","subGroup","subGroupObject","StatsHeader","config","fontFamily","ToggleHeader","StatsListing","listingName","StatsMissDispListing","current","StatsMissDisp","theMissDisp","frag","createDocumentFragment","missing","AddMenuStats","stats","Lucky","goldCookTooltip","luckyColour","luckyTime","luckyReqFrag","luckyReqSpan","luckyReqSmall","luckyColourFrenzy","luckyTimeFrenzy","luckyReqFrenFrag","luckyReqFrenSpan","luckyReqFrenSmall","luckySplit","luckyRewardMaxSpan","luckyRewardFrenzyMaxSpan","luckyCurBase","luckyCurSpan","Chain","chainColour","chainTime","chainReqFrag","chainReqSpan","chainReqSmall","chainWrathColour","chainWrathTime","chainWrathReqFrag","chainWrathReqSpan","chainWrathReqSmall","chainColourFrenzy","chainTimeFrenzy","chainReqFrenFrag","chainReqFrenSpan","chainReqFrenSmall","chainWrathColourFrenzy","chainWrathTimeFrenzy","chainWrathReqFrenFrag","chainWrathReqFrenSpan","chainWrathReqFrenSmall","chainCurMax","chainCur","chainCurWrath","Spells","conjureColour","conjureTime","conjureReqFrag","conjureReqSpan","conjureReqSmall","conjureFrenzyColour","conjureFrenzyCur","conjureFrenzyTime","conjureFrenzyReqFrag","conjureFrenzyReqSpan","conjureFrenzyReqSmall","Garden","bakeberryColour","bakeberryFrag","chocorootColour","chocorootFrag","queenbeetColour","queenbeetFrag","duketaterColour","duketaterFrag","missingPlantDrops","Prestige","possiblePresMax","neededCook","HowManyCookiesReset","cookiesNextFrag","cookiesNextSmall","heavenlyChips","HCTarget","CookiesTillTarget","resetBonus","newHeavenlyChips","curCPS","ResetCPS","ResetBonus","resetFrag","resetSmall","currentPrestige","willHave","willGet","delta7","next7Reset","next7Total","frag7","delta777","next777Reset","next777Total","frag777","delta777777","next777777Reset","next777777Total","frag777777","Wrink","popAllFrag","popAllA","popFattestFrag","popFattestA","specDisp","missingHalloweenCookies","missingChristmasCookies","missingValentineCookies","missingNormalEggs","eggDrops","missingRareEggs","rareEggDrops","centEgg","Sea","failRateHalloween","dropRateMult","obtainedCookiesChance","failRateChristmas","dropRateEgg","StartingFailRate","failRateEgg","succesRateEgg","obtainedEggs","obtainedRareEggs","pNormal1","pRare1","pRedrop","Achievs","Misc","missedGoldenClicks","menuSection","prestigeUpgradesMissing","titlefrag","PrestigeUpgrades","normalUpgradesMissing","tech","nextSibling","cookieUpgradesMissing","cookie","achievs","parentElement","achievsCrate","AchievementsById","mouseDown","setOnCrate","tags","neuromancy","sesame","descFunc","tagsStr","CrateTooltipLockedAchievements","AddMissingAchievements","FixMouseY","timerBarHeight","mouseY","ReplaceNative","drawMod","from","update","updateMod","warnOffset","tta","tt","UpdateTooltipLocation","UpdateWrinklers","UpdateSpecial","ClickCookie","ClickProduct","DescribeDragonAura","aura","bonusCPS","priceOfChange","highestBuilding","CalculateChangeAura","timeToRecover","bonusCPSPercentage","div2","AddAuraInfo","ToggleSpecialMenu","on","shouldHide","AddDragonLevelUpTooltip","AddMenu","detail","Logic","titleGC","titleFC","titleSP","addFC","addSP","life","lastIndexOf","spawn","UpdateTitle","cookiesToNext","ReplaceAscendTooltip","InitializeCookieMonster","head","borderTop","textShadow","table","tbody","firstCol","td","CreateBotBar","CMTimerBarAutosave","CMTimerBarGC","CMTimerBarRen","TimerBarBuffTimers","CreateTimerBar","UpgradeBar","legend","legendLine","CreateUpgradeBarLegend","upgradeNumber","CreateUpgradeBar","CreateSectionHideButtons","getElementsByTagName","CreateFavicon","CreateSimpleTooltip","append","CreateWrinklerButtons","productButtons","button","lockedMinigames","toggleBuildingLock","canLumps","child","coords","ReplaceTooltipPantheon","popups","Popup","Notify","Win","CalculateChangeGod","CurrentSlot","godsById","CMLoopHook","AscendTimer","CachePantheonGods","sellTotal","Bank","marketGoods","goods","goodsVal","marketGood","stock","cookiesPsRawHighest","buildingsToSacrifice","SellBuildingsForChoEgg","CacheSellAllForChoEgg","hasBuildAura","godMult","CacheCurrWrinklerCPS","LoopCache","TickerEffect","shimmers","spawnLead","nextStep","CheckMagicMeter","CurrentWrinklers","getWrinklersMax","CheckWrinklerCount","pop","webkitFilter","CreateGCTimer","transform","buildingIndex","version","CM","proceed","confirm","Steam"],"sourceRoot":""}
\ No newline at end of file
diff --git a/src/Cache/Dragon/Dragon.js b/src/Cache/Dragon/Dragon.js
index eae7c412..e09505b4 100644
--- a/src/Cache/Dragon/Dragon.js
+++ b/src/Cache/Dragon/Dragon.js
@@ -15,8 +15,11 @@ export default function CacheDragonCost() {
Game.dragonLevel < 25 &&
Game.dragonLevels[Game.dragonLevel].buy.toString().includes('sacrifice')
) {
- const objectMatch = Game.dragonLevels[Game.dragonLevel].buy.toString().match(/Objects\[(.*)\]/);
- let target = objectMatch !== null ? objectMatch[1] : Game.ObjectsById[Game.dragonLevel-5].name;
+ const objectMatch = Game.dragonLevels[Game.dragonLevel].buy
+ .toString()
+ .match(/Objects\[(.*)\]/);
+ let target =
+ objectMatch !== null ? objectMatch[1] : Game.ObjectsById[Game.dragonLevel - 5].name;
const amount = Game.dragonLevels[Game.dragonLevel].buy
.toString()
.match(/sacrifice\((.*?)\)/)[1];
diff --git a/src/Disp/BeautifyAndFormatting/FormatTime.js b/src/Disp/BeautifyAndFormatting/FormatTime.js
index b7754462..a8b43403 100644
--- a/src/Disp/BeautifyAndFormatting/FormatTime.js
+++ b/src/Disp/BeautifyAndFormatting/FormatTime.js
@@ -19,10 +19,7 @@ export default function FormatTime(time, longFormat) {
if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.TimeFormat === 0) {
if (formattedTime > 777600000) return longFormat ? 'Over 9000 days!' : '>9000d';
- str +=
- y > 0
- ? `${y + (longFormat ? (y === 1 ? ' year' : ' years') : 'y')}, `
- : '';
+ str += y > 0 ? `${y + (longFormat ? (y === 1 ? ' year' : ' years') : 'y')}, ` : '';
if (str.length > 0 || d > 0)
str += `${d + (longFormat ? (d === 1 ? ' day' : ' days') : 'd')}, `;
if (str.length > 0 || h > 0)
diff --git a/src/Disp/MenuSections/AddMenus.js b/src/Disp/MenuSections/AddMenus.js
index b183237c..8b6eecbc 100644
--- a/src/Disp/MenuSections/AddMenus.js
+++ b/src/Disp/MenuSections/AddMenus.js
@@ -13,7 +13,8 @@ export default function AddMenu() {
title.textContent = 'Cookie Monster Statistics';
AddMenuStats(title);
}
- } else if (Game.onMenu === 'prefs') { // Added because Framework is broken
+ } else if (Game.onMenu === 'prefs') {
+ // Added because Framework is broken
l('menu').childNodes[2].insertBefore(
createMenuOptions(),
l('menu').childNodes[2].childNodes[l('menu').childNodes[2].childNodes.length - 1],
diff --git a/src/Disp/Tooltips/TypesOfTooltips/Grimoire.js b/src/Disp/Tooltips/TypesOfTooltips/Grimoire.js
index 45b7d853..40a426cf 100644
--- a/src/Disp/Tooltips/TypesOfTooltips/Grimoire.js
+++ b/src/Disp/Tooltips/TypesOfTooltips/Grimoire.js
@@ -1,4 +1,3 @@
-
import Beautify from '../../BeautifyAndFormatting/Beautify';
import GetTimeColour from '../../BeautifyAndFormatting/GetTimeColour';
import CalculateGrimoireRefillTime from '../../HelperFunctions/CalculateGrimoireRefillTime';
@@ -56,13 +55,7 @@ export default function Grimoire() {
const reward = document.createElement('span');
reward.style.color = '#33FF00';
reward.textContent = Beautify(
- Math.max(
- Math.min(
- Game.cookies * 0.15,
- Game.cookiesPs * 60 * 30
- ),
- 7
- ),
+ Math.max(Math.min(Game.cookies * 0.15, Game.cookiesPs * 60 * 30), 7),
2,
);
conjure.appendChild(reward);
@@ -72,14 +65,8 @@ export default function Grimoire() {
const loss = document.createElement('span');
loss.style.color = 'red';
loss.textContent = Beautify(
- Math.min(
- Game.cookies,
- Math.min(
- Game.cookies * 0.15,
- Game.cookiesPs * 60 * 15
- ) + 13
- ),
- 2
+ Math.min(Game.cookies, Math.min(Game.cookies * 0.15, Game.cookiesPs * 60 * 15) + 13),
+ 2,
);
conjure.appendChild(loss);
}
diff --git a/src/Main/ReplaceGameElements/NativeGrimoire.js b/src/Main/ReplaceGameElements/NativeGrimoire.js
index d21f165c..54fa37f8 100644
--- a/src/Main/ReplaceGameElements/NativeGrimoire.js
+++ b/src/Main/ReplaceGameElements/NativeGrimoire.js
@@ -26,7 +26,7 @@ function ReplaceNativeGrimoireDraw() {
minigame.magicBarTextL.innerHTML += ` (${FormatTime(
CalculateGrimoireRefillTime(minigame.magic, minigame.magicM, minigame.magicM),
)})`;
- minigame.magicBarL.style.width = "75%" // TODO: Fix this after Orteil pushes fix to main game;
+ minigame.magicBarL.style.width = '75%'; // TODO: Fix this after Orteil pushes fix to main game;
}
};
HasReplaceNativeGrimoireDraw = true;
diff --git a/src/Main/ReplaceGameFunctions/ReplaceNative.js b/src/Main/ReplaceGameFunctions/ReplaceNative.js
index 8022477b..efdf6de7 100644
--- a/src/Main/ReplaceGameFunctions/ReplaceNative.js
+++ b/src/Main/ReplaceGameFunctions/ReplaceNative.js
@@ -67,7 +67,7 @@ export default function ReplaceNative() {
l('bigCookie').addEventListener(
'click',
(event) => {
- FixMouseY(()=> Game.ClickCookie(event,0));
+ FixMouseY(() => Game.ClickCookie(event, 0));
},
false,
);
diff --git a/src/Sim/Calculations/CalculateGains.js b/src/Sim/Calculations/CalculateGains.js
index cbed91c4..5b019d62 100644
--- a/src/Sim/Calculations/CalculateGains.js
+++ b/src/Sim/Calculations/CalculateGains.js
@@ -134,7 +134,8 @@ export default function CalculateGains() {
if (SimHas('Kitten specialists')) catMult *= 1 + milkProgress * 0.2 * milkMult;
if (SimHas('Kitten experts')) catMult *= 1 + milkProgress * 0.2 * milkMult;
if (SimHas('Kitten consultants')) catMult *= 1 + milkProgress * 0.2 * milkMult;
- if (SimHas('Kitten assistants to the regional manager')) catMult *= 1 + milkProgress * 0.175 * milkMult;
+ if (SimHas('Kitten assistants to the regional manager'))
+ catMult *= 1 + milkProgress * 0.175 * milkMult;
if (SimHas('Kitten marketeers')) catMult *= 1 + milkProgress * 0.15 * milkMult;
if (SimHas('Kitten analysts')) catMult *= 1 + milkProgress * 0.125 * milkMult;
if (SimHas('Kitten executives')) catMult *= 1 + milkProgress * 0.115 * milkMult;
diff --git a/src/Sim/ReplacedGameFunctions/SimAuraMult.js b/src/Sim/ReplacedGameFunctions/SimAuraMult.js
index 6a9ec05b..5fefb41a 100644
--- a/src/Sim/ReplacedGameFunctions/SimAuraMult.js
+++ b/src/Sim/ReplacedGameFunctions/SimAuraMult.js
@@ -12,8 +12,8 @@ export default function SimAuraMult(what) {
n = 1;
if (
Game.dragonAuras[SimDragonAura].name === 'Reality Bending' ||
- Game.dragonAuras[SimDragonAura2].name === 'Reality Bending' &&
- Game.dragonLevel >= Game.dragonAurasBN[what].id + 4
+ (Game.dragonAuras[SimDragonAura2].name === 'Reality Bending' &&
+ Game.dragonLevel >= Game.dragonAurasBN[what].id + 4)
)
n += 0.1;
return n;
diff --git a/src/Sim/ReplacedGameFunctions/SimGetTieredCpsMult.js b/src/Sim/ReplacedGameFunctions/SimGetTieredCpsMult.js
index 91a785ea..2a4b9a08 100644
--- a/src/Sim/ReplacedGameFunctions/SimGetTieredCpsMult.js
+++ b/src/Sim/ReplacedGameFunctions/SimGetTieredCpsMult.js
@@ -5,15 +5,19 @@ import SimHas from './SimHas';
* This functions creates functions similarly to Game.GetTieredCpsMult but checks Sim Data instead of Game Data
*/
export default function SimGetTieredCpsMult(me) {
-
let mult = 1;
Object.keys(me.tieredUpgrades).forEach((i) => {
- if (!Game.Tiers[me.tieredUpgrades[i].tier].special && SimHas(me.tieredUpgrades[i].name)){
- let tierMult=2;
- // unshackled multipliers
- if (Game.ascensionMode!==1 && SimHas(me.unshackleUpgrade) && SimHas(Game.Tiers[me.tieredUpgrades[i].tier].unshackleUpgrade)) tierMult+=me.id===1?0.5:(20-me.id)*0.1;
- mult*=tierMult;
- };
+ if (!Game.Tiers[me.tieredUpgrades[i].tier].special && SimHas(me.tieredUpgrades[i].name)) {
+ let tierMult = 2;
+ // unshackled multipliers
+ if (
+ Game.ascensionMode !== 1 &&
+ SimHas(me.unshackleUpgrade) &&
+ SimHas(Game.Tiers[me.tieredUpgrades[i].tier].unshackleUpgrade)
+ )
+ tierMult += me.id === 1 ? 0.5 : (20 - me.id) * 0.1;
+ mult *= tierMult;
+ }
});
Object.keys(me.synergies).forEach((i) => {
if (SimHas(me.synergies[i].name)) {
diff --git a/src/Sim/ReplacedGameFunctions/SimHasGod.js b/src/Sim/ReplacedGameFunctions/SimHasGod.js
index 0bea619f..192714db 100644
--- a/src/Sim/ReplacedGameFunctions/SimHasGod.js
+++ b/src/Sim/ReplacedGameFunctions/SimHasGod.js
@@ -1,5 +1,5 @@
import { SimGod1, SimGod2, SimGod3, SimObjects } from '../VariablesAndData';
-import SimHasAura from './SimHasAura'
+import SimHasAura from './SimHasAura';
/**
* This function checks for the current God level in the sim data
@@ -16,13 +16,13 @@ export default function SimHasGod(what) {
return 1;
}
if (SimGod2 === god.id) {
- if (SimHasAura('Supreme Intellect')){
+ if (SimHasAura('Supreme Intellect')) {
return 1;
}
return 2;
}
if (SimGod3 === god.id) {
- if (SimHasAura('Supreme Intellect')){
+ if (SimHasAura('Supreme Intellect')) {
return 2;
}
return 3;
diff --git a/src/Sim/SimulationEvents/BuyUpgrades.js b/src/Sim/SimulationEvents/BuyUpgrades.js
index ba39b4d3..b35af357 100644
--- a/src/Sim/SimulationEvents/BuyUpgrades.js
+++ b/src/Sim/SimulationEvents/BuyUpgrades.js
@@ -33,7 +33,7 @@ function MouseCps() {
if (SimHas('Octillion fingers')) add *= 20;
if (SimHas('Nonillion fingers')) add *= 20;
if (SimHas('Decillion fingers')) add *= 20;
- if (SimHas('Unshackled cursors')) add*= 25;
+ if (SimHas('Unshackled cursors')) add *= 25;
let num = 0;
Object.keys(SimObjects).forEach((i) => {
num += SimObjects[i].amount;