{ "version": 3, "sources": ["../../page/ac.js"], "sourcesContent": ["\"use strict\";\n\nimport * as App from '../app/app~fv=cw_byBD8.min.js';\nimport * as Lib from '../lib/lib~fv=LNbMt1n5.min.js';\nimport * as Coze from '../pkg/coze_all~fv=-7uCIHNa.min.js';\nimport * as Print from '../page/ac_print~fv=GwikjJ9j.min.js'\nimport '../pkg/urlform~fv=VhWyOSvq.min.js'; // Namespaced as 'URLForm'.\n\n/**\n@typedef {import('../../../pkg/cozejs/typedef.js').Pay} Pay\n@typedef {import('../../../pkg/cozejs/typedef.js').B64} B64\n@typedef {import('../app/image.js').Image} Image\n@typedef {import('./image.js').ImagePage} ImagePage\n@typedef {import('../app/paginate.js').PagRec} PagRec\n */\n\n/**\nKeyDetails is a key:value pair object that holds the details for an AC.\n\nExample:\n{\"key\":key, \"value\":value, \"special\":{}, \"foo\":\"bar\"}\n\n- Key: The key for a field/entry.\n- Value: The value for a 'Key'.\n- Special: True for special fields.\n@typedef {object} KeyDetails\n@property {string} Key \n@property {string} Value\n@property {boolean} Special\n */\n\n/**\nACPage is the main AC object.\n\n- id: ID of the AC.\n- pageUAD: The user's UAD that owns the AC.\n- details: The AC's Details/Meta data.\n- model_parent: The AC's Model ID.\n- reviewRating: The rating for the user on the page submitting the review.\n- comment_pagrec: The AC's comments pagination object.\n- image_pagrec: The AC's images pagination object.\n@typedef {object} ACPage\n@property {B64} id\n@property {B64} pageUAD\n@property {object} details\n@property {B64} [model_parent]\n@property {number} [reviewRating]\n@property {PagRec} [comment_pagrec]\n@property {PagRec} [image_pagrec]\n */\n\n/** @type {ACPage} ACPage */\nvar ACPage = {};\n\n// PrintContainer Mode is for displaying PCPages instead of ACPages.\nvar PCMode = false\n\n// Initialized urlform options.\nvar initedFormOptions;\nvar acHeaderElem; // Main AC Title/Header\nvar modelHeaderElem; // AC Title/Header for pages tied to models.\n\nApp.AddOnload(AnticounterfeitOnload);\n\n// Onload for the Anti-Counterfeit page.\nasync function AnticounterfeitOnload() {\n\tconsole.debug(\"Executing AntiCounterfeitOnload: \", acpage)\n\tconsole.debug(\"pcpage: \", pcpage)\n\n\t// Display PrintContainer view if pcpage is given.\n\tif (!isEmpty(pcpage)) {\n\t\tPCMode = true\n\t\tDisplayCozeDetails(pcpage)\n\t\tShow(\"json_details_card\");\n\t\treturn\n\t}\n\n\tinitedFormOptions = URLForm.Init(App.ACFormOptions);\n\n\tACPage = {\n\t\t...acpage\n\t};\n\n\t// Change top of AC body to show counterfeit when not authentic.\n\tif (ACPage.ctf) {\n\t\tHide(document.querySelector('#Authentic'));\n\t\tShow(document.querySelector('#Counterfeit'));\n\t}\n\n\t// Change top of AC body to show counterfeit when not authentic.\n\tif (ACPage.is_stolen) {\n\t\tHide(document.querySelector('#Authentic'));\n\t\tShow(document.querySelector('#Stolen'));\n\t}\n\n\t// Header hold the page's title.\n\tacHeaderElem = document.querySelector('#acHeader');\n\tmodelHeaderElem = document.querySelector('#acModelHeader');\n\n\t// Adds a page hit for every page load.\n\tApp.Fetch(App.API.Get.PageHit + \"?ac=\" + ACPage.id + \"&uad=\" + App.UAD)\n\n\t// Advanced options.\n\tdocument.getElementById('acAdvancedOptionsBtn').addEventListener('click', (event) => {\n\t\tevent.preventDefault();\n\t\tToggleVisible(document.getElementById('advancedOpts'));\n\t});\n\n\tif (!ACPage.disable_brand_logo && \"brand_logo\" in ACPage) {\n\t\tlet brandLogoElem = document.getElementById('acBrandLogo')\n\t\tbrandLogoElem.querySelector('a').href = App.API.Get.Image + \"/\" + ACPage.brand_logo\n\t\tbrandLogoElem.querySelector('img').src = App.API.Get.Image + \"/\" + ACPage.brand_logo\n\t\tShow(brandLogoElem)\n\t}\n\n\t//////////////////////////////////////\n\t/////////// Owner Options //////////\n\t//////////////////////////////////////\n\t// console.debug(document.getElementById('acOwnerOptions'))\n\tlet acOwnerOptionsBtn = document.getElementById('acOwnerOptionsBtn');\n\tacOwnerOptionsBtn.addEventListener('click', (event) => {\n\t\tevent.preventDefault();\n\t\tToggleVisible(document.getElementById('acOwnerOptions'));\n\t});\n\n\t// TODO Determine process for user who created ac (`uad`) vs user who is\n\t// current owner of ac (`owner`). Maybe both have same permissions?\n\n\t// TODO Admin check \n\n\t// Owner Options\n\tif (App.UAD == acpage.uad) {\n\t\tShow(acOwnerOptionsBtn);\n\n\t\t//// Owner options for just AC\n\t\tif (!ACPage.is_markdown) {\n\t\t\tToggleVisible(document.querySelector('#file_drop_area'));\n\n\t\t\t// Unhides the delete button for the image modal if owner is on the page.\n\t\t\tif (!(\"disable_images\" in ACPage)) {\n\t\t\t\tdocument.querySelector('.modal_delete_image').hidden = false;\n\t\t\t}\n\n\t\t\t// Global image paste\n\t\t\tdocument.onpaste = (event) => App.HandleFiles((event.clipboardData || event.originalEvent.clipboardData).items);\n\t\t}\n\t\t//// Owner options for both AC and Markdown page\n\n\t\t// Setup the options module\n\t\tawait App.InitSubmitOptions(updateInfoCallback);\n\t\tawait App.SetOriginalAC(ACPage);\n\n\t\tApp.InitACOptions(initedFormOptions);\n\n\t} // End Owner Options\n\n\t// AC Options form is composed of various components:\n\t//\n\t// 1.) Optional fields: These are predefined optional fields on an AC, which\n\t// can be populated via sticky form from the OptionsFormParameters.\n\t// 2.) Extra fields: These are optional fields not predefined, that a user can\n\t// enter via the free form Extra Options JSON area. These fields are sticky in\n\t// terms of the current coze, but not from the serialized form. \n\n\t// Calculates the ACNormal from the current pay, and populates the AC Options\n\t// and Extra GUI with the various components.\n\tApp.RecalcOptionGUI(ACPage.coze.pay);\n\n\t// Since unsigned fields are not included in the pay, they are added back\n\t// here, if their corresponding signed fields are present (e.g. 'has_title'\n\t// for 'title') to properly be populated by the sticky form.\n\tlet pc = {\n\t\t...ACPage.coze.pay\n\t};\n\tif (!isEmpty(ACPage.coze.pay.title)) {\n\t\tpc.has_title = true;\n\t}\n\tif (!isEmpty(ACPage.coze.pay.model_parent)) {\n\t\tpc.has_model = true;\n\t}\n\t// Populate sticky options form\n\tURLForm.PopulateFromValues(pc, initedFormOptions);\n\n\tACPage.details = await sanitizeACPage();\n\n\t// Although this data pertains to the owner, it is also necessary for the\n\t// user, because this is how details are set on the page. TODO Make this more\n\t// efficient by making a copy of the latest coze, and sanitizing the copy.\n\t// Javascript was manipulating the original coze, when manipulating the copy.\n\t// let sanitizedDetails = await cloneAndSanitizeDetails(acpage.coze);\n\t// document.getElementById('cyphrInfo').textContent = JSON.stringify(sanitizedDetails.pay, null, 2);\n\n\tlet b37 = await Lib.BASE37Padded(await Lib.B64ToHex(ACPage.id), Lib.AB.Base16, ACPage.coze.pay.alg);\n\n\t// Sets the latest signed raw coze (with spaces) and link with no spaces.\n\tdocument.querySelector('#acpage_link_b64ut').href = \"/ac/\" + ACPage.id;\n\tdocument.querySelector('#acpage_link_BASE37').href = \"/AC/\" + b37;\n\tdocument.querySelector('#acpage_json_link').href = App.API.Get.ACJSON + \"/\" + ACPage.id + \"?pretty\";\n\tsetLatestCoze(ACPage.coze);\n\n\t// Main Rating Stars.\n\tlet acpageRating = (Math.round(ACPage.rating * 10) / 10) // Rounds to nearest tenth\n\tif (acpageRating > 0) {\n\t\tdocument.getElementById('cyphrRating').textContent = acpageRating;\n\t} else {\n\t\tHide(document.querySelector('.ratingAndStars'));\n\t}\n\tApp.SetPageRatingStar(acpageRating);\n\n\tif (ACPage.is_markdown) {\n\t\treturn\n\t}\n\n\t// Images\n\tif (!isEmpty(ACPage.image_pagrec)) {\n\t\t/** @type {ImagePage} ImagePage */\n\t\tvar ImagePage = {};\n\t\tImagePage.id = ACPage.id;\n\t\tImagePage.uad = ACPage.uad;\n\t\t// Set id to the parent if the parent exists.\n\t\tif (!isEmpty(ACPage.model_parent)) {\n\t\t\tImagePage.id = ACPage.model_parent;\n\t\t\tImagePage.child_ac = ACPage.id; // TODO doc on typedef.\n\t\t}\n\t\tif (!isEmpty(ACPage.image_pagrec.rec)) {\n\t\t\tImagePage.images = ACPage.image_pagrec.rec;\n\t\t}\n\t\tImagePage.paginate = ACPage.image_pagrec.pag;\n\t\tif (!isEmpty(ACPage.image_pagrec.pag.has_more)) {\n\t\t\tImagePage.paginate.pivot = ACPage.image_pagrec.pag.pivot;\n\t\t\tImagePage.has_more = true;\n\t\t}\n\t\t// Load the image application module.\n\t\tApp.ImageOnload(ImagePage);\n\t}\n\n\t// Files (non images)\n\tif (!isEmpty(ACPage.file_pagrec)) {\n\t\t/** @type {FilePage} FilePage */ // TODO\n\t\tvar FilePage = {};\n\t\tFilePage.id = ACPage.id;\n\t\tFilePage.uad = ACPage.uad;\n\t\t// Set id to the parent if the parent exists.\n\t\tif (!isEmpty(ACPage.model_parent)) {\n\t\t\tFilePage.id = ACPage.model_parent;\n\t\t\tFilePage.child_ac = ACPage.id; // TODO doc on typedef.\n\t\t}\n\t\tif (!isEmpty(ACPage.file_pagrec.rec)) {\n\t\t\tFilePage.files = ACPage.file_pagrec.rec;\n\t\t}\n\t\tFilePage.paginate = ACPage.file_pagrec.pag;\n\t\tif (!isEmpty(ACPage.file_pagrec.pag.has_more)) {\n\t\t\tFilePage.paginate.pivot = ACPage.file_pagrec.pag.pivot;\n\t\t\tFilePage.has_more = true;\n\t\t}\n\t\t// Load the file application module.\n\t\tApp.FileOnload(FilePage);\n\t}\n\n\t// Comment and reviews.\n\tif (!isEmpty(ACPage.comment_pagrec)) {\n\t\tif (ACPage.lock_comments) {\n\t\t\tACPage.comment_pagrec.pag.lock_comments = ACPage.lock_comments\n\t\t}\n\t\tApp.ToggleReviewForm(ACPage.comment_pagrec.rec)\n\t\tApp.CommentReviewModule(ACPage.comment_pagrec)\n\t}\n\n\t// Re-create the AC's label and display on page.\n\tlet sizeTemplDiv = document.getElementById('ACLabelSizeTemplate').content.cloneNode(true).querySelector('.lblSize');\n\tdocument.getElementById('acLabelArea').append(sizeTemplDiv);\n\tlet labelOpts = {\n\t\t...App.DefaultLabelOptions\n\t};\n\tlabelOpts.acTitle = App.GetStickerTitle(ACPage.coze);\n\tif (isEmpty(labelOpts.acTitle) && !isEmpty(ACPage.parent_ac) && !isEmpty(ACPage.parent_ac.title)) {\n\t\tlabelOpts.acTitle = ACPage.parent_ac.title;\n\t}\n\n\t// Only show labels for non model ACs.\n\tif (!(\"pj_public\" in ACPage)) { // For ACs created before PJ.\n\t\tACPage.pj_public = {\n\t\t\t// Default that converts to human readable in `Print` module.\n\t\t\tac_label_size: '1x2.625'\n\t\t}\n\t}\n\tvar lblSize = \"p_\" + ACPage.pj_public.ac_label_size\n\tif (!ACPage.is_model) {\n\t\tif (ACPage.pj_public.ac_label_size === \"Custom\") {\n\t\t\tACPage.pj_public.print_opts.labelBrandingLevel = ACPage.pj_public.sbl\n\t\t\tACPage.pj_public.print_opts.labelTemplate = ACPage.pj_public.ac_label_size\n\t\t\tlblSize = ACPage.pj_public.ac_label_size\n\t\t\tlabelOpts = ACPage.pj_public.print_opts\n\t\t} else {\n\t\t\tlblSize = Print.HRToLabelTempl(ACPage.pj_public.ac_label_size)\n\t\t}\n\t\tif (\"print_opts\" in ACPage.pj_public && \"labelDescription\" in ACPage.pj_public.print_opts) {\n\t\t\tlabelOpts.acTitle = ACPage.pj_public.print_opts.labelDescription\n\t\t}\n\t\tawait App.CreateACLabel(sizeTemplDiv, App.QRCodeURL + b37, lblSize, labelOpts)\n\t\t// Remove potential spacing from print settings (starting margin).\n\t\tdocument.querySelector(\".printLabel\").classList.add('ms-0')\n\t} else {\n\t\tHide(\"acLabelArea\");\n\t}\n\n\t//// For potential future use with multiple labels on the page:\n\t// let test = document.getElementById('ACLabelSizeTemplate').content.cloneNode(true).querySelector('.lblSize');\n\t// labelArea.append(test)\n\t// App.CreateACLabel(test, \"HTTPS://CYPHR.ME/\" + b37, \"p_1x2\", labelOpts);\n\n\t// Populate any URI query params.\n\tURLForm.Populate(initedFormOptions);\n\n\tShow(\"json_details_card\")\n\tdisplayACPageInfo();\n\n\t// // If the page is a child page, we do not allow images to be uploaded. This\n\t// // must be done on the model page.\n\t// if (!isEmpty(acpage.model_parent)) {\n\t// \tdocument.getElementById('image_drop_area').hidden = true;\n\t// }\n\n\t// // TODO get this many. \n\t// document.querySelector(\".fileUploadInput\").addEventListener('click', function (event) {\n\t// \t// App.Log.Info(\"fileUploadInput\");\n\t// });\n\n\t// TODO support public images to be added to reviews\n\t// Click on the image upload button.\n\t// document.querySelector(\"#reviewUploadImagesBtn\").addEventListener('click', function(event) {\n\t// \tevent.preventDefault();\n\t// \tconsole.log(\"Clicked reviewUploadImagesBtn\");\n\t// \tthis.parentElement.querySelector(\".fileUploadInput\").click();\n\t// });\n\n\t// document.getElementById('reportCounterfeitBtn').addEventListener('click', function (event) {\n\t// \tevent.preventDefault();\n\t// \treportCounterfeit();\n\t// });\n};\n\n\n/**\nsetLatestCoze sets the latest signed Coze in the GUI.\n@param {Coze} coze Latest signed Coze Object for the AC Page.\n@returns {void}\n */\nfunction setLatestCoze(coze) {\n\tdocument.querySelector('#acpage_json pre').textContent = JSON.stringify(coze, null, 1);\n\t// Verify links are set globally by 'setCozeJSONLink'.\n}\n\n/**\nsanitizeACPage returns a populated JSON object with all of the details necessary\nfor the given page.\n\nTODO Deprecate because go should just return the correct zero values\n@returns {object}\n */\nasync function sanitizeACPage() {\n\tlet details = {};\n\tlet meta = {}; // Displayed in the order it is set below.\n\tif (!isEmpty(App.UAD) && ACPage.owner === App.UAD) {\n\t\tmeta.cyphrme_owner = \"You are the owner\";\n\t} else {\n\t\t// TODO AC's owner's uad as a link\n\t\tmeta.cyphrme_owner = ACPage.owner_display_name.link(App.Page.PublicProfile + \"/\" + ACPage.owner);\n\t}\n\tif (!isEmpty(acpage.is_model)) {\n\t\tdetails.cyphrme_model_name = acpage.model_name;\n\t}\n\tif (!isEmpty(acpage.model_parent)) {\n\t\tdetails.cyphrme_model = acpage.model_parent;\n\t}\n\tif (!isEmpty(acpage.display_name)) {\n\t\tmeta.cyphrme_display_name = acpage.display_name;\n\t} else {\n\t\tmeta.cyphrme_display_name = acpage.uad;\n\t}\n\tif (!isEmpty(acpage.counterfeit_sum)) {\n\t\tmeta.cyphrme_counterfeit_reports = acpage.counterfeit_sum;\n\t} else {\n\t\tmeta.cyphrme_counterfeit_reports = 0;\n\t}\n\tif (!isEmpty(acpage.hit) && !isEmpty(acpage.hit_priv)) {\n\t\tmeta.cyphrme_page_hits = (acpage.hit - acpage.hit_priv);\n\t} else {\n\t\tmeta.cyphrme_page_hits = 0;\n\t}\n\tif (App.UAD == acpage.uad) {\n\t\tif (!isEmpty(acpage.hit_priv)) {\n\t\t\tmeta.cyphrme_private_hits = acpage.hit_priv;\n\t\t} else {\n\t\t\tmeta.cyphrme_private_hits = 0;\n\t\t}\n\t}\n\n\n\tdetails.meta = meta;\n\treturn details;\n};\n\n////////////////////////////////////////////////////////////////////////////////\n// GUI Section\n////////////////////////////////////////////////////////////////////////////////\n\n/**\ndisplayACPageInfo is the main 'entry point' function for displaying acpage\ndetails to the page. Displays the details after checking for reserved namespaces\nand then performing actions. This function should be called on page load.\n@returns {void}\n */\nasync function displayACPageInfo() {\n\tif (ACPage.disable_json_details) {\n\t\treturn\n\t}\n\tdocument.getElementById('ac_json_details').textContent = \"\";\n\t// console.debug(acHeaderElem);\n\tif (acHeaderElem != null) {\n\t\tacHeaderElem.innerText = \"\"; // Clear out the title in case it is set.\n\t} else {\n\t\tacHeaderElem = document.createElement('div');\n\t\tacHeaderElem.setAttribute('class', 'acHeader');\n\t\tdocument.querySelector('.markdownBody').append(acHeaderElem);\n\t}\n\n\t// Grabs the text out of the JSON Details area of the owner section.\n\tlet json = document.getElementById('optionsInfo').textContent;\n\tif (isEmpty(json)) {\n\t\tjson = \"{}\";\n\t}\n\tjson = JSON.parse(json);\n\n\t// If there is no information to be displayed, display the page meta, and\n\t// return. \n\tif (Object.entries(json).length == 0) {\n\t\tDisplayCozeDetails(ACPage.details.meta);\n\t\treturn;\n\t}\n\n\t// Must wait for this function to complete before continuing, since it does\n\t// not return, and sets content on the page.\n\tawait DisplayCozeDetails(json);\n\tif (!isEmpty(document.getElementById('ac_json_details').querySelector('.ac_json_keys'))) {\n\t\tappendHR('ac_json_details');\n\t}\n\n\tif (!isEmpty(ACPage.ac_options)) {\n\t\tawait DisplayCozeDetails(ACPage.ac_options);\n\t}\n\t// Parent display\n\t// // If acpage has a model/parent, display the model details as well.\n\t// // NOTE: Need to check for empty object, because isEmpty returns false on\n\t// // empty objects.\n\t// if (!isEmpty(acpage.parent_ac) && !isEmpty(acpage.parent_ac.coze)) {\n\t// \tlet san = await cloneAndSanitizeDetails(acpage.parent_ac.coze);\n\t// \tif (Object.keys(san.pay).length != 0) {\n\t// \t\tawait DisplayCyDetails(san.pay); // await is necessary\n\t// \t\tif (!isEmpty(document.getElementById('coze_json_details').textContent)) {\n\t// \t\t\tappendHR('coze_json_details');\n\t// \t\t}\n\t// \t}\n\t// }\n\n\tDisplayCozeDetails(ACPage.details.meta);\n};\n\n\n////////////////////////////////////////////////////////////////////////////////\n// Anti-Counterfeit Details and JSON Secton\n////////////////////////////////////////////////////////////////////////////////\n\n/**\nappendHR accepts a string, which should be the id of an HTML element (Div),\nand appends a line break to the div.\n@param {string} id Element ID that is wanting a line break appended.\n@returns {void}\n */\nfunction appendHR(id) {\n\tdocument.getElementById(id).append(document.createElement('hr'));\n};\n\n\n/**\nDisplayCozeDetails is a helper function that displays the coze details, in a\nhuman readable format, to the browser. This function relies on helper functions\nto perform special actions on reserved namespaces.\n@param {object} jsonObject Object containing page details.\n@returns {void}\n */\nasync function DisplayCozeDetails(jsonObject) {\n\t// console.debug(jsonObject)\n\tvar detailsRowElem = await document.querySelector('#ACJSONDetailsTemplate').content.cloneNode(true).querySelector('.row');\n\tvar innerTempl = detailsRowElem.querySelector('#DetailsKeysTemplate');\n\n\tfor (var key in jsonObject) {\n\t\tlet value = jsonObject[key];\n\t\tlet prefix = false; // Remove prefix if exists.\n\t\tif (key.substring(0, 8) === 'cyphrme_') {\n\t\t\tkey = key.substring(8, ); // remove prefix\n\t\t\tprefix = true;\n\t\t}\n\n\t\tlet detailKeyElem = await innerTempl.content.cloneNode(true);\n\t\tlet jsonKeysElem = detailKeyElem.querySelector('.ac_json_keys');\n\n\t\tif (PCMode) {\n\t\t\tvar keyDetails = {\n\t\t\t\tkey: key,\n\t\t\t\tvalue: value,\n\t\t\t\tspecial: false\n\t\t\t}\n\t\t} else {\n\t\t\tvar keyDetails = specialReserved(key, value)\n\t\t}\n\t\tif (isEmpty(keyDetails)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// console.debug(keyDetails);\n\t\tkey = keyDetails.key;\n\t\tvalue = keyDetails.value;\n\n\t\tif (typeof value === \"object\") {\n\t\t\tvalue = JSON.stringify(value);\n\t\t}\n\n\t\tif (keyDetails.special || prefix) {\n\t\t\t// Converts to HTML\n\t\t\tkey = key.fontcolor(\"#2b5aa0\");\n\t\t\tvalue = value.toString().fontcolor(\"#2b5aa0\");\n\t\t}\n\n\t\tjsonKeysElem.innerHTML = key;\n\t\tlet jsonValuesElem = detailKeyElem.querySelector('.ac_json_values');\n\t\tjsonValuesElem.innerHTML = value;\n\t\tdetailsRowElem.append(jsonKeysElem);\n\t\tdetailsRowElem.append(jsonValuesElem);\n\t}\n\n\tvar detailsElem = document.getElementById('ac_json_details');\n\tdetailsElem.append(detailsRowElem);\n\tShow(detailsElem);\n};\n\n\n/**\nspecialReserved matches `key` to a reserved name and performs special actions on\nit as appropriate.\n\nIf no modifications are performed, returns null. Returns `[key, value]` if any\nmodifications are made to key or value. \n@param {string} Key Key in the JSON object.\n@param {string} Value Value for the Key in the object.\n@returns {(null|KeyDetails)}\n */\nfunction specialReserved(key, value) {\n\t// console.debug(\"In special reserved\");\n\tif (isEmpty(value)) { // sanitize falsey\n\t\tvalue = \"\";\n\t}\n\t//// Debugging\n\t// console.debug(\"Before: \" + \"Key: \" + key + \"; Value: \" + value);\n\n\tlet special = true;\n\tswitch (key) {\n\t\tcase \"counterfeit\":\n\t\t\tacHeaderElem.classList.add(\"text-danger\");\n\t\t\tacHeaderElem.innerHTML = ' ' + \"This item has been marked as a counterfeit\";\n\t\t\tdocument.querySelector('.verified').hidden = true;\n\t\t\treturn null;\n\t\tcase \"uri\":\n\t\t\tvalue = value.toString();\n\t\t\tvalue = value.link(value);\n\t\t\tbreak;\n\t\tcase \"model_name\":\n\t\t\tif (!isEmpty(acpage.coze.pay.model_name)) {\n\t\t\t\tif (!isEmpty(acHeaderElem.innerText)) {\n\t\t\t\t\tacHeaderElem.innerHTML = \" [ \" + acpage.coze.pay.model_name + \" ] \" + acHeaderElem.innerHTML;\n\t\t\t\t} else {\n\t\t\t\t\tacHeaderElem.innerText = acpage.coze.pay.model_name;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\tcase \"title\":\n\t\t\tif (!isEmpty(acHeaderElem.innerText)) {\n\t\t\t\tmodelHeaderElem.innerHTML = acHeaderElem.innerHTML;\n\t\t\t\tShow(modelHeaderElem);\n\t\t\t\t// acHeaderElem.innerHTML = acHeaderElem.innerHTML + ' : ' + value;\n\t\t\t\tacHeaderElem.innerHTML = value;\n\t\t\t} else {\n\t\t\t\tacHeaderElem.innerText = value;\n\t\t\t}\n\t\t\treturn null;\n\t\tcase \"display_name\":\n\t\t\tvalue = value.toString();\n\t\t\tif (value.length > 10) {\n\t\t\t\tlet v = value.substring(0, 10) + '...';\n\t\t\t\tvalue = v.link(\"/user/id/\" + value);\n\t\t\t} else {\n\t\t\t\tvalue = value.link(\"/user/id/\" + acpage.uad);\n\t\t\t}\n\t\t\tkey = \"Created By\";\n\t\t\tbreak;\n\t\tcase \"page_hits\":\n\t\t\tkey = \"Page Hits\";\n\t\t\tif (isEmpty(value)) {\n\t\t\t\tvalue = 0;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"private_hits\":\n\t\t\tkey = \"Private Hits\";\n\t\t\tif (isEmpty(value)) {\n\t\t\t\tvalue = 0;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"counterfeit_reports\":\n\t\t\tif (isEmpty(value)) {\n\t\t\t\t//value = 0;\n\t\t\t\treturn \"\"; // Don't show on empty. \n\t\t\t}\n\t\t\tkey = \"Counterfeit Reports\";\n\t\t\tbreak;\n\t\tcase \"owner\":\n\t\t\tif (isEmpty(value)) {\n\t\t\t\tvalue = \"You are not the owner.\"; // Sanity check.\n\t\t\t}\n\t\t\tkey = \"Owner\";\n\t\t\tbreak\n\t\tcase \"ac_opt\":\n\t\t\tkey = \"AC's Options\"\n\t\t\tif (isEmpty(value)) {\n\t\t\t\tvalue = \"This AC has no options associated.\" // Sanity check.\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tvalue = value.link(\"/pc/\" + value) // TODO owner check? or is it public\n\t\t\tbreak\n\t\tcase \"serial\":\n\t\t\tkey = \"Serial #\"\n\t\t\tbreak\n\t\t\t//// Do not display\n\t\tcase \"is_model\":\n\t\tcase \"has_model\":\n\t\tcase \"is_markdown\":\n\t\tcase \"markdown_dig\":\n\t\tcase \"is_stolen\":\n\t\tcase \"is_counterfeit\":\n\t\tcase \"short_name\":\n\t\tcase \"batch\":\n\t\tcase \"bundle_type\":\n\t\tcase \"branch_level_sizes\":\n\t\tcase \"determ\":\n\t\tcase \"lock_comments\":\n\t\tcase \"disable_comments\":\n\t\tcase \"disable_authentic\":\n\t\tcase \"disable_files\":\n\t\tcase \"disable_images\":\n\t\tcase \"disable_json_details\":\n\t\tcase \"disable_brand_logo\":\n\t\tcase \"brand_logo\":\n\t\tcase \"disable_cyphrme_logo\":\n\t\t\treturn null;\n\t\tcase \"model_parent\":\n\t\t\tif (isEmpty(acpage.parent_ac) || isEmpty(acpage.parent_ac.title)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tvalue = acpage.parent_ac.title;\n\t\t\tlet adminOwnerLinkElement = document.querySelector('.adminOwnerModelLink');\n\t\t\tlet v2 = acpage.parent_ac.title.link(\"/ac/\" + acpage.model_parent); // Link to model currently only supported for admins/owners.\n\t\t\tif (!isEmpty(acHeaderElem.innerHTML)) {\n\t\t\t\tmodelHeaderElem.innerHTML = \" [ \" + value + \" ] \";\n\t\t\t\t// acHeaderElem.innerHTML = \" [ \" + value + \" ] \" + acHeaderElem.innerHTML;\n\t\t\t\t// acHeaderElem.innerHTML = acHeaderElem.innerHTML;\n\t\t\t\tadminOwnerLinkElement.innerHTML = value + v2;\n\t\t\t\tShow(modelHeaderElem);\n\t\t\t} else {\n\t\t\t\tacHeaderElem.innerHTML = value;\n\t\t\t\tadminOwnerLinkElement.innerHTML = v2;\n\t\t\t}\n\t\t\treturn null;\n\t\tdefault:\n\t\t\tspecial = false;\n\t}\n\n\tif (typeof value == \"object\") {\n\t\tvalue = JSON.stringify(value, null, 2);\n\t}\n\n\tif (isEmpty(value)) {\n\t\tvalue = \"0\";\n\t}\n\n\treturn {\n\t\t\"key\": key,\n\t\t\"value\": value,\n\t\t\"special\": special\n\t};\n}\n\n\n////////////////////////////////////////////////////////////////////////////////\n// AJAX Section\n////////////////////////////////////////////////////////////////////////////////\n\n/**\nUpdates JSON details on an ACPage (coze/acpage details).\n@param {object} parsd Response from server with details.\n@returns {void}\n */\nasync function updateInfoCallback(parsd) {\n\tif (isEmpty(parsd)) {\n\t\treturn\n\t}\n\n\t// Reload if going to or from a markdown page, from a regular AC.\n\tif ((parsd.obj.pay.is_markdown && !ACPage.is_markdown) || (ACPage.is_markdown && !parsd.obj.pay.is_markdown)) {\n\t\twindow.location.reload();\n\t}\n\n\t// Set new AC Coze in latest Coze area with link to Verifier page.\n\tsetLatestCoze({\n\t\tpay: parsd.obj.pay,\n\t\tsig: parsd.obj.sig\n\t});\n\n\t// Calls this function to re-display the page with the new details.\n\tdisplayACPageInfo();\n\tApp.Notification('Successfully updated details', 'success');\n};\n\n\n\n////////////////////////////////////////////////////////////////////////////////\n// Recaptcha\n////////////////////////////////////////////////////////////////////////////////\n\n// // Recaptcha \"v3\" callback\n// function reportCounterfeit() {\n// \tApp.Log.Info(\"reportCounterfeit\");\n\n// \tgrecaptcha.ready(function() {\n// \t\tgrecaptcha.execute(App.RecaptchaPublic, {\n// \t\t\taction: 'reportCounterfeit'\n// \t\t}).then(function(token) {\n// \t\t\treport(token);\n// \t\t});\n// \t});\n// };\n\n// // Recaptcha \"v2\" callback\n// var RecaptchaV2OnloadCallback = function() {\n// \tgrecaptcha.render('counterfeitRecaptchaV2', {\n// \t\t'sitekey': '6Ldn1zYaAAAAAOD8XTJ3w7jd9O5SQcBWggzWnF8o',\n// \t\t'callback': report\n// \t});\n// };\n\n/**\nTODO probably move to old?\nreport submits the counterfeit report to the server.\n// @param {string} recaptchaToken The google recaptcha token to verify user.\n// @returns {void} Returns recaptchaResponse from server and passes to callback.\n// */\n// function report(recaptchaToken) {\n// \tlet formData = new FormData()\n// \tformData.append('acid', ACPage.id)\n// \tformData.append('modelID', ACPage.model_parent)\n// \tformData.append('accountID', App.UAD)\n// \tformData.append('recaptcha', recaptchaToken)\n// \trecaptchaResponse(await App.FetchPost(App.API.Post.ReportCounterfeitUrI, formData))\n// }\n\n// /**\n// recaptchaResponse handles the response from the server with the user's 'score'.\n// @param {object} resp Response body from server.\n// @returns {void} Handles the response and performs actions based on score.\n// */\n// function recaptchaResponse(resp) {\n// \tApp.Log.Info(\"recaptcahResponse\")\n// \tApp.Log.Debug(resp)\n\n// \t// TODO add message notification. \n// }"], "mappings": "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", "names": ["App", "Lib", "Print", "ACPage", "PCMode", "initedFormOptions", "acHeaderElem", "modelHeaderElem", "AnticounterfeitOnload", "DisplayCozeDetails", "event", "brandLogoElem", "acOwnerOptionsBtn", "updateInfoCallback", "pc", "sanitizeACPage", "b37", "setLatestCoze", "acpageRating", "ImagePage", "FilePage", "sizeTemplDiv", "labelOpts", "lblSize", "displayACPageInfo", "coze", "details", "meta", "json", "appendHR", "id", "jsonObject", "detailsRowElem", "innerTempl", "key", "value", "prefix", "detailKeyElem", "jsonKeysElem", "keyDetails", "specialReserved", "jsonValuesElem", "detailsElem", "special", "adminOwnerLinkElement", "v2", "parsd"] }