UNPKG

paml

Version:

Perfectly Awesome Markup Language

1,091 lines 34.1 kB
const generateVariables = () => { const variables = {}; const variablesEl = document.querySelectorAll("set"); for (let i = 0; i < variablesEl.length; i++) { const variable = variablesEl[i]; const variableName = variable.getAttribute("name"); const variableContent = variable.innerHTML; for (let i = 0; i < bannedChars.length; i++) { if (variableName.includes(bannedChars[i])) return pamlErr(`Variable name ${variableName} uses banned character (${bannedChars[i]}).`); } variables[variableName] = variableContent; variable.remove(); const variableRegex = RegExp(`(?<!<if exists="){{${variableName}}}`, "g"); document.body.innerHTML = document.body.innerHTML.replace(variableRegex, variableContent); } }; const bannedChars = ["{", "}", "."]; const pamlErr = (text, type = "error") => { let prefix = "[PAML]"; if (type === "error" || type === "err") console.error(`${prefix} ${text}`); else if (type === "warn" || type === "warning") console.warn(`${prefix} ${text}`); else pamlErr(`Type "${type}" was not found.`); }; const iso639_1 = { "aa": "Afar", "ab": "Abkhazian", "ae": "Avestan", "af": "Afrikaans", "ak": "Akan", "am": "Amharic", "an": "Aragonese", "ar": "Arabic", "as": "Assamese", "av": "Avaric", "ay": "Aymara", "az": "Azerbaijani", "ba": "Bashkir", "be": "Belarusian", "bg": "Bulgarian", "bh": "Bihari languages", "bi": "Bislama", "bm": "Bambara", "bn": "Bengali", "bo": "Tibetan", "br": "Breton", "bs": "Bosnian", "ca": "Catalan", "ce": "Chechen", "ch": "Chamorro", "co": "Corsican", "cr": "Cree", "cs": "Czech", "cu": "Church Slavic", "cv": "Chuvash", "cy": "Welsh", "da": "Danish", "de": "German", "dv": "Maldivian", "dz": "Dzongkha", "ee": "Ewe", "el": "Greek", "en": "English", "eo": "Esperanto", "es": "Spanish", "et": "Estonian", "eu": "Basque", "fa": "Persian", "ff": "Fulah", "fi": "Finnish", "fj": "Fijian", "fo": "Faroese", "fr": "French", "fy": "West Frisian", "ga": "Irish", "gd": "Scottish Gaelic", "gl": "Galician", "gn": "Guarani", "gu": "Gujarati", "gv": "Manx", "ha": "Hausa", "he": "Hebrew", "hi": "Hindi", "ho": "Hiri Motu", "hr": "Croatian", "ht": "Haitian Creole", "hu": "Hungarian", "hy": "Armenian", "hz": "Herero", "ia": "Interlingua", "id": "Indonesian", "ie": "Interlingue", "ig": "Igbo", "ii": "Sichuan Yi", "ik": "Inupiaq", "io": "Ido", "is": "Icelandic", "it": "Italian", "iu": "Inuktitut", "ja": "Japanese", "jv": "Javanese", "ka": "Georgian", "kg": "Kongo", "ki": "Kikuyu", "kj": "Kwanyama", "kk": "Kazakh", "kl": "Greenlandic", "km": "Central Khmer", "kn": "Kannada", "ko": "Korean", "kr": "Kanuri", "ks": "Kashmiri", "ku": "Kurdish", "kv": "Komi", "kw": "Cornish", "ky": "Kyrgyz", "la": "Latin", "lb": "Luxembourgish", "lg": "Ganda", "li": "Limburgish", "ln": "Lingala", "lo": "Lao", "lt": "Lithuanian", "lu": "Luba-Katanga", "lv": "Latvian", "mg": "Malagasy", "mh": "Marshallese", "mi": "Maori", "mk": "Macedonian", "ml": "Malayalam", "mn": "Mongolian", "mr": "Marathi", "ms": "Malay", "mt": "Maltese", "my": "Burmese", "na": "Nauru", "nb": "Norwegian Bokmål", "nd": "North Ndebele", "ne": "Nepali", "ng": "Ndonga", "nl": "Dutch", "nn": "Norwegian Nynorsk", "no": "Norwegian", "nr": "South Ndebele", "nv": "Navajo", "ny": "Chichewa", "oc": "Occitan", "oj": "Ojibwa", "om": "Oromo", "or": "Oriya", "os": "Ossetian", "pa": "Punjabi", "pi": "Pali", "pl": "Polish", "ps": "Pashto", "pt": "Portuguese", "qu": "Quechua", "rm": "Romansh", "rn": "Rundi", "ro": "Romanian", "ru": "Russian", "rw": "Kinyarwanda", "sa": "Sanskrit", "sc": "Sardinian", "sd": "Sindhi", "se": "Northern Sami", "sg": "Sango", "si": "Sinhala", "sk": "Slovak", "sl": "Slovenian", "sm": "Samoan", "sn": "Shona", "so": "Somali", "sq": "Albanian", "sr": "Serbian", "ss": "Swati", "st": "Southern Sotho", "su": "Sundanese", "sv": "Swedish", "sw": "Swahili", "ta": "Tamil", "te": "Telugu", "tg": "Tajik", "th": "Thai", "ti": "Tigrinya", "tk": "Turkmen", "tl": "Tagalog", "tn": "Tswana", "to": "Tongan", "tr": "Turkish", "ts": "Tsonga", "tt": "Tatar", "tw": "Twi", "ty": "Tahitian", "ug": "Uyghur", "uk": "Ukrainian", "ur": "Urdu", "uz": "Uzbek", "ve": "Venda", "vi": "Vietnamese", "vo": "Volapük", "wa": "Walloon", "wo": "Wolof", "xh": "Xhosa", "yi": "Yiddish", "yo": "Yoruba", "za": "Zhuang", "zh": "Chinese", "zu": "Zulu" }; const iso639_2 = { "aar": "Afar", "abk": "Abkhazian", "ace": "Achinese", "ach": "Acoli", "ada": "Adangme", "ady": "Adyghe", "afh": "Afrihili", "afr": "Afrikaans", "ain": "Ainu", "aka": "Akan", "akk": "Akkadian", "ale": "Aleut", "alt": "Southern Altai", "amh": "Amharic", "ang": "Old English", "anp": "Angika", "ara": "Arabic", "arc": "Imperial Aramaic", "arg": "Aragonese", "arn": "Mapuche", "arp": "Arapaho", "arw": "Arawak", "asm": "Assamese", "ast": "Asturian", "ava": "Avaric", "ave": "Avestan", "awa": "Awadhi", "aym": "Aymara", "aze": "Azerbaijani", "bak": "Bashkir", "bal": "Baluchi", "bam": "Bambara", "ban": "Balinese", "bas": "Basa", "bej": "Beja", "bel": "Belarusian", "bem": "Bemba", "ben": "Bengali", "bho": "Bhojpuri", "bik": "Bikol", "bin": "Edo", "bis": "Bislama", "bla": "Siksika", "bod": "Tibetan", "bos": "Bosnian", "bra": "Braj", "bre": "Breton", "bua": "Buriat", "bug": "Buginese", "bul": "Bulgarian", "byn": "Bilen", "cad": "Caddo", "car": "Galibi Carib", "cat": "Catalan", "ceb": "Cebuano", "ces": "Czech", "cha": "Chamorro", "chb": "Chibcha", "che": "Chechen", "chg": "Chagatai", "chk": "Chuukese", "chm": "Mari", "chn": "Chinook Jargon", "cho": "Choctaw", "chp": "Chipewyan", "chr": "Cherokee", "chu": "Church Slavic", "chv": "Chuvash", "chy": "Cheyenne", "cnr": "Montenegrin", "cop": "Coptic", "cor": "Cornish", "cos": "Corsican", "cre": "Cree", "crh": "Crimean Tatar", "csb": "Kashubian", "cym": "Welsh", "dak": "Dakota", "dan": "Danish", "dar": "Dargwa", "del": "Delaware", "den": "Slave (Athapascan)", "deu": "German", "dgr": "Dogrib", "din": "Dinka", "div": "Maldivian", "doi": "Dogri", "dsb": "Lower Sorbian", "dua": "Duala", "dum": "Middle Dutch", "dyu": "Dyula", "dzo": "Dzongkha", "efi": "Efik", "egy": "Egyptian (Ancient)", "eka": "Ekajuk", "ell": "Greek", "elx": "Elamite", "eng": "English", "enm": "Middle English", "epo": "Esperanto", "est": "Estonian", "eus": "Basque", "ewe": "Ewe", "ewo": "Ewondo", "fan": "Fang", "fao": "Faroese", "fas": "Persian", "fat": "Fanti", "fij": "Fijian", "fil": "Filipino", "fin": "Finnish", "fon": "Fon", "fra": "French", "frm": "Middle French", "fro": "Old French", "frr": "Northern Frisian", "frs": "Eastern Frisian", "fry": "Western Frisian", "ful": "Fulah", "fur": "Friulian", "gaa": "Ga", "gay": "Gayo", "gba": "Gbaya", "gez": "Geez", "gil": "Gilbertese", "gla": "Scottish Gaelic", "gle": "Irish", "glg": "Galician", "glv": "Manx", "gmh": "Middle High German", "goh": "Old High German", "gon": "Gondi", "gor": "Gorontalo", "got": "Gothic", "grb": "Grebo", "grc": "Ancient Greek", "grn": "Guarani", "gsw": "Swiss German", "guj": "Gujarati", "gwi": "Gwich'in", "hai": "Haida", "hat": "Haitian Creole", "hau": "Hausa", "haw": "Hawaiian", "heb": "Hebrew", "her": "Herero", "hil": "Hiligaynon", "hin": "Hindi", "hit": "Hittite", "hmn": "Hmong", "hmo": "Hiri Motu", "hrv": "Croatian", "hsb": "Upper Sorbian", "hun": "Hungarian", "hup": "Hupa", "hye": "Armenian", "iba": "Iban", "ibo": "Igbo", "ido": "Ido", "iii": "Sichuan Yi", "iku": "Inuktitut", "ile": "Interlingue", "ilo": "Iloko", "ina": "Interlingua", "ind": "Indonesian", "inh": "Ingush", "ipk": "Inupiaq", "isl": "Icelandic", "ita": "Italian", "jav": "Javanese", "jbo": "Lojban", "jpn": "Japanese", "jpr": "Judeo-Persian", "jrb": "Judeo-Arabic", "kaa": "Kara-Kalpak", "kab": "Kabyle", "kac": "Jingpho", "kal": "Greenlandic", "kam": "Kamba", "kan": "Kannada", "kas": "Kashmiri", "kat": "Georgian", "kau": "Kanuri", "kaw": "Kawi", "kaz": "Kazakh", "kbd": "Kabardian", "kha": "Khasi", "khm": "Central Khmer", "kho": "Saka", "kik": "Kikuyu", "kin": "Kinyarwanda", "kir": "Kyrgyz", "kmb": "Kimbundu", "kok": "Konkani", "kom": "Komi", "kon": "Kongo", "kor": "Korean", "kos": "Kosraean", "kpe": "Kpelle", "krc": "Karachay-Balkar", "krl": "Karelian", "kru": "Kurukh", "kua": "Kwanyama", "kum": "Kumyk", "kur": "Kurdish", "kut": "Kutenai", "lad": "Ladino", "lah": "Lahnda", "lam": "Lamba", "lao": "Lao", "lat": "Latin", "lav": "Latvian", "lez": "Lezghian", "lim": "Limburgish", "lin": "Lingala", "lit": "Lithuanian", "lol": "Mongo", "loz": "Lozi", "ltz": "Luxembourgish", "lua": "Luba-Lulua", "lub": "Luba-Katanga", "lug": "Ganda", "lui": "Luiseno", "lun": "Lunda", "luo": "Luo", "lus": "Lushai", "mad": "Madurese", "mag": "Magahi", "mah": "Marshallese", "mai": "Maithili", "mak": "Makasar", "mal": "Malayalam", "man": "Mandingo", "mar": "Marathi", "mas": "Masai", "mdf": "Moksha", "mdr": "Mandar", "men": "Mende", "mga": "Middle Irish", "mic": "Mi'kmaq", "min": "Minangkabau", "mkd": "Macedonian", "mlg": "Malagasy", "mlt": "Maltese", "mnc": "Manchu", "mni": "Manipuri", "moh": "Mohawk", "mon": "Mongolian", "mos": "Mossi", "mri": "Maori", "msa": "Malay", "mus": "Creek", "mwl": "Mirandese", "mwr": "Marwari", "mya": "Burmese", "myv": "Erzya", "nap": "Neapolitan", "nau": "Nauru", "nav": "Navajo", "nbl": "South Ndebele", "nde": "North Ndebele", "ndo": "Ndonga", "nds": "Low German", "nep": "Nepali", "new": "Newari", "nia": "Nias", "niu": "Niuean", "nld": "Dutch", "nno": "Norwegian Nynorsk", "nob": "Norwegian Bokmål", "nog": "Nogai", "non": "Old Norse", "nor": "Norwegian", "nqo": "N'Ko", "nso": "Northern Sotho", "nwc": "Classical Newari", "nya": "Chichewa", "nym": "Nyamwezi", "nyn": "Nyankole", "nyo": "Nyoro", "nzi": "Nzima", "oci": "Occitan", "oji": "Ojibwa", "ori": "Oriya", "orm": "Oromo", "osa": "Osage", "oss": "Ossetian", "ota": "Ottoman Turkish", "pag": "Pangasinan", "pal": "Pahlavi", "pam": "Pampanga", "pan": "Punjabi", "pap": "Papiamento", "pau": "Palauan", "peo": "Old Persian", "phn": "Phoenician", "pli": "Pali", "pol": "Polish", "pon": "Pohnpeian", "por": "Portuguese", "pro": "Old Provençal", "pus": "Pashto", "que": "Quechua", "raj": "Rajasthani", "rap": "Rapanui", "rar": "Cook Islands Maori", "roh": "Romansh", "rom": "Romany", "ron": "Romanian", "run": "Rundi", "rup": "Aromanian", "rus": "Russian", "sad": "Sandawe", "sag": "Sango", "sah": "Yakut", "sam": "Samaritan Aramaic", "san": "Sanskrit", "sas": "Sasak", "sat": "Santali", "scn": "Sicilian", "sco": "Scots", "sel": "Selkup", "sga": "Old Irish", "shn": "Shan", "sid": "Sidamo", "sin": "Sinhala", "slk": "Slovak", "slv": "Slovenian", "sma": "Southern Sami", "sme": "Northern Sami", "smj": "Lule Sami", "smn": "Inari Sami", "smo": "Samoan", "sms": "Skolt Sami", "sna": "Shona", "snd": "Sindhi", "snk": "Soninke", "sog": "Sogdian", "som": "Somali", "sot": "Southern Sotho", "spa": "Spanish", "sqi": "Albanian", "srd": "Sardinian", "srn": "Sranan Tongo", "srp": "Serbian", "srr": "Serer", "ssw": "Swati", "suk": "Sukuma", "sun": "Sundanese", "sus": "Susu", "sux": "Sumerian", "swa": "Swahili", "swe": "Swedish", "syc": "Classical Syriac", "syr": "Syriac", "tah": "Tahitian", "tam": "Tamil", "tat": "Tatar", "tel": "Telugu", "tem": "Timne", "ter": "Tereno", "tet": "Tetum", "tgk": "Tajik", "tgl": "Tagalog", "tha": "Thai", "tig": "Tigre", "tir": "Tigrinya", "tiv": "Tiv", "tkl": "Tokelau", "tlh": "Klingon", "tli": "Tlingit", "tmh": "Tamashek", "tog": "Tonga (Nyasa)", "ton": "Tongan", "tpi": "Tok Pisin", "tsi": "Tsimshian", "tsn": "Tswana", "tso": "Tsonga", "tuk": "Turkmen", "tum": "Tumbuka", "tur": "Turkish", "tvl": "Tuvalu", "twi": "Twi", "tyv": "Tuvinian", "udm": "Udmurt", "uga": "Ugaritic", "uig": "Uyghur", "ukr": "Ukrainian", "umb": "Umbundu", "und": "Undetermined", "urd": "Urdu", "uzb": "Uzbek", "vai": "Vai", "ven": "Venda", "vie": "Vietnamese", "vol": "Volapük", "vot": "Votic", "wal": "Wolaitta", "war": "Waray", "was": "Washo", "wln": "Walloon", "wol": "Wolof", "xal": "Kalmyk", "xho": "Xhosa", "yao": "Yao", "yap": "Yapese", "yid": "Yiddish", "yor": "Yoruba", "zap": "Zapotec", "zbl": "Blissymbols", "zen": "Zenaga", "zgh": "Standard Moroccan Tamazight", "zha": "Zhuang", "zho": "Chinese", "zul": "Zulu", "zun": "Zuni", "zza": "Zaza" }; const generateDate = () => { const getFormat = (format, d) => { const hasZero = (num) => { if (num < 10) return `0${num}`; else return num; }; const monthArr1 = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; const monthArr2 = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; const dayArr1 = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]; const dayArr2 = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]; const month = d.getMonth() + 1; const day = d.getDate(); const year = d.getFullYear(); const dayOfWeek = d.getDay(); const hour = d.getHours(); const min = d.getMinutes(); const seconds = d.getSeconds(); const milliseconds = d.getMilliseconds(); const timezone = d.getTimezoneOffset() == 0 ? d.getTimezoneOffset() : d.getTimezoneOffset() / 60 > 0 ? `-${d.getTimezoneOffset() / 60}` : `+${d.getTimezoneOffset() / 60}`; format = format.replace(/\byyyy\b/g, () => year); format = format.replace(/\byy\b/g, () => String(year).replace(/^../, "")); format = format.replace(/\bmmmm\b/g, () => monthArr2[month - 1]); format = format.replace(/\bmmm\b/g, () => monthArr1[month - 1]); format = format.replace(/\bmm\b/g, () => hasZero(month)); format = format.replace(/\bm\b/g, () => month); format = format.replace(/\bdddd\b/g, () => dayArr2[dayOfWeek]); format = format.replace(/\bddd\b/g, () => dayArr1[dayOfWeek]); format = format.replace(/\bdd\b/g, () => hasZero(day)); format = format.replace(/\bd\b/g, () => day); format = format.replace(/\bhour\b/g, () => hasZero(hour)); format = format.replace(/\bmin\b/g, () => hasZero(min)); format = format.replace(/\bsec\b/g, () => hasZero(seconds)); format = format.replace(/\bms\b/g, () => hasZero(milliseconds)); format = format.replace(/\btz\b/g, () => timezone); return format; }; const dateTags = document.querySelectorAll("date"); for (let i = 0; i < dateTags.length; i++) { const date = dateTags[i]; const liveDate = date.getAttribute("live") !== null ? true : false; const format = date.getAttribute("format"); const a = () => { if (format) { const d = new Date(); return getFormat(format, d); } else { const d = new Date(); return d; } }; if (liveDate === true) { const b = () => { date.innerHTML = String(a()); setTimeout(b, 10); }; b(); } else if (liveDate === false) { date.innerHTML = String(a()); } } }; const generateFors = () => { const forTags = document.querySelectorAll("for"); for (let i = 0; i < forTags.length; i++) { const forTag = forTags[i]; let forTagEach; if (forTag.getAttribute("each") !== null) forTagEach = forTag.getAttribute("each"); else pamlErr("For tag is missing \"each\" attribute."); let forTagIn; if (forTag.getAttribute("in") !== null) forTagIn = forTag.getAttribute("in"); else pamlErr("For tag is missing \"in\" attribute."); const forTagVarName = forTag.getAttribute("varName"); const forContent = forTag.innerHTML; if (forTagVarName === "i") pamlErr("Variable name \"i\" is reserved."); let forTagInEl; if (forTagIn !== undefined) forTagInEl = document.querySelector(forTagIn); let forTagEachEl; if (forTagInEl !== undefined) forTagEachEl = forTagInEl.querySelectorAll(forTagEach); forTag.innerHTML = ""; if (forTagEachEl !== undefined) { for (let a = 0; a < forTagEachEl.length; a++) { const aa = forTagEachEl[a]; let ab = forContent; let ac = RegExp(`{{${forTagVarName}}}`, "g"); ab = ab.replace(/{{i}}/g, a.toString()); ab = ab.replace(ac, aa.innerHTML); forTag.innerHTML += ab; } } } }; const generateIfs = () => { const getCase = (el) => { if (el.getAttribute("exists") || el.getAttribute("exist")) return "exists"; else if (el.getAttribute("not-exists") || el.getAttribute("notexists") || el.getAttribute("not-exist") || el.getAttribute("notexist")) return "not-exists"; else if (el.getAttribute("equals") || el.getAttribute("is")) return "equals"; else if (el.getAttribute("has-class") || el.getAttribute("hasclass")) return "has-class"; else if (el.getAttribute("item")) return "item"; }; const ifTags = document.querySelectorAll("if"); for (let i = 0; i < ifTags.length; i++) { const ifTag = ifTags[i]; const ifCase = getCase(ifTag); const ifAttr = ifTag.getAttribute(ifCase); const elseTag = ifTag.nextSibling.nodeName === "ELSE" ? ifTag.nextSibling : ""; if (ifCase === "exists") { if (ifAttr.startsWith("{{") && ifAttr.endsWith("}}")) { let variableExists = false; const variableName = ifAttr.replace(/^{{/, "").replace(/}}$/, ""); const variableElements = document.querySelectorAll("set"); for (let i = 0; i < variableElements.length; i++) { const variableEl = variableElements[i]; if (variableName === variableEl.getAttribute("name")) variableExists = true; } if (variableExists === true) { if (elseTag !== "") elseTag.remove(); const content = ifTag.innerHTML; ifTag.after(content); ifTag.remove(); } else { ifTag.remove(); if (elseTag !== "") { const content = elseTag.innerHTML; elseTag.after(content); elseTag.remove(); } } } else { const selector = document.querySelector(ifAttr); if (selector) { if (elseTag !== "") elseTag.remove(); const content = ifTag.innerHTML; ifTag.after(content); ifTag.remove(); } else { ifTag.remove(); if (elseTag !== "") { const content = elseTag.innerHTML; elseTag.after(content); elseTag.remove(); } } } } else if (ifCase === "not-exists") { if (ifAttr.startsWith("{{") && ifAttr.endsWith("}}")) { let variableExists = false; const variableName = ifAttr.replace(/^{{/, "").replace(/}}$/, ""); const variableElements = document.querySelectorAll("set"); for (let i = 0; i < variableElements.length; i++) { const variableEl = variableElements[i]; if (variableName !== variableEl.getAttribute("name")) { if (elseTag === variableEl.getAttribute("name")) variableExists = true; } } if (variableExists === false) { if (elseTag !== "") elseTag.remove(); const content = ifTag.innerHTML; ifTag.after(content); ifTag.remove(); } else { ifTag.remove(); if (elseTag !== "") { const content = elseTag.innerHTML; elseTag.after(content); elseTag.remove(); } } } else { const selector = document.querySelector(ifAttr); if (!selector) { if (elseTag !== "") elseTag.remove(); const content = ifTag.innerHTML; ifTag.after(content); ifTag.remove(); } else { ifTag.remove(); if (elseTag !== "") { const content = elseTag.innerHTML; elseTag.after(content); elseTag.remove(); } } } } else if (ifCase === "equals") { const item = document.querySelector(ifTag.getAttribute("item")); if (item.innerHTML === ifTag.getAttribute("equals")) { if (elseTag !== "") elseTag.remove(); const content = ifTag.innerHTML; ifTag.after(content); ifTag.remove(); } else { ifTag.remove(); if (elseTag !== "") { const content = elseTag.innerHTML; elseTag.after(content); elseTag.remove(); } } } else if (ifCase === "has-class") { const item = document.querySelector(ifTag.getAttribute("item")); const classes = item.classList; let classNameExists = false; for (let i = 0; i < classes.length; i++) { const className = classes[i]; if (className === ifTag.getAttribute("has-class")) { classNameExists = true; break; } } if (classNameExists === true) { if (elseTag !== "") elseTag.remove(); const content = ifTag.innerHTML; ifTag.after(content); ifTag.remove(); } else { ifTag.remove(); if (elseTag !== "") { const content = elseTag.innerHTML; elseTag.after(content); elseTag.remove(); } } } else if (ifCase === "item") { const item = document.querySelector(ifTag.getAttribute("item")); } } }; const getAttributes = () => { const allTags = document.querySelectorAll("*"); for (let i = 0; i < allTags.length; i++) { const tag = allTags[i]; let style = ""; if (tag.getAttribute("color")) { style += `color:${tag.getAttribute("color")};`; tag.removeAttribute("color"); } if (tag.getAttribute("size")) { style += `font-size:${tag.getAttribute("size")};`; tag.removeAttribute("size"); } if (tag.getAttribute("face")) { style += `font-family:${tag.getAttribute("face")};`; tag.removeAttribute("face"); } if (tag.getAttribute("bgcolor")) { style += `background-color:${tag.getAttribute("bgcolor")};`; tag.removeAttribute("bgcolor"); } if (tag.getAttribute("border")) { style += `border:${tag.getAttribute("border")} solid;`; tag.removeAttribute("border"); } if (tag.getAttribute("align")) { style += `text-align:${tag.getAttribute("align")};`; tag.removeAttribute("align"); } style = style.replace(/;}/g, ""); if (style !== "") tag.setAttribute("style", style); } }; let css = `<style type="text/css">set,extend,function,data{display:none}mobile,desktop{display:block}</style>`; document.head.insertAdjacentHTML("beforeend", css); const getDevice = () => { const mobileTags = document.querySelectorAll("mobile"); const desktopTags = document.querySelectorAll("desktop"); for (let i = 0; i < mobileTags.length; i++) { if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) { mobileTags[i].removeAttribute("style"); } else { mobileTags[i].remove(); } } for (let i = 0; i < desktopTags.length; i++) { if (!/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) { desktopTags[i].removeAttribute("style"); } else { desktopTags[i].remove(); } } }; const generateExtend = () => { const extendTags = document.querySelectorAll("extend"); for (let i = 0; i < extendTags.length; i++) { const extendTag = extendTags[i]; const src = extendTag.getAttribute("src"); fetch(src).then(response => response.text()).then(data => { data.replace(/<body>(.*?)<\/body>/gs, (s, bodyText) => { extendTag.insertAdjacentHTML("afterend", bodyText); extendTag.remove(); return bodyText; }); }); } }; const generateFunctions = () => { const functionTags = document.querySelectorAll("function"); let functions = {}; for (let i = 0; i < functionTags.length; i++) { const functionTag = functionTags[i]; const functionName = functionTag.getAttribute("name"); const functionArgs = functionTag.getAttribute("arguments"); functions[functionName] = {}; functions[functionName]["content"] = functionTag.innerHTML; functions[functionName]["arguments"] = functionArgs.split(" "); functionTag.remove(); } document.body.innerHTML = document.body.innerHTML.replace(/{{(.*?)}}/g, function (s, varName) { if (/\(.*?\)$/.test(varName) === true) { const funcName = varName.replace(/\((.*?)\)$/, ""); let funcArgs = varName.replace(/(.*?)(?=\(.*?\))/, "").replace(/^\(|\)$/g, "").split(","); for (let i = 0; i < funcArgs.length; i++) funcArgs[i] = funcArgs[i].trim(); let daFuncContent; try { daFuncContent = functions[funcName]["content"]; } catch (err) { return s; } daFuncContent = daFuncContent.replace(/{{(.*?)}}/g, (s, setName) => { for (let i = 0; i < functions[funcName]["arguments"].length; i++) { const arg = functions[funcName]["arguments"][i]; if (arg === setName) { return funcArgs[i]; } } }); return daFuncContent; } else return `{{${varName}}}`; }); }; const generateImages = () => { const imageTags = document.querySelectorAll("img, image"); for (let i = 0; i < imageTags.length; i++) { const image = imageTags[i]; const imageUrl = image.src; if (image.getAttribute("clickable") === null) continue; const parent = image.parentNode; const wrapper = document.createElement("a"); wrapper.href = imageUrl; const accepted = ["newtab", "tab", "_blank"]; for (let i = 0; i < accepted.length; i++) if (image.getAttribute("clickable").toLowerCase().replace(/ /g, "") === accepted[i]) wrapper.setAttribute("target", "_blank"); parent.replaceChild(wrapper, image); wrapper.appendChild(image); } }; const generateLangTags = () => { const langTags = document.querySelectorAll("lang"); for (let i = 0; i < langTags.length; i++) { const langTag = langTags[i]; let language = ""; if (document.querySelector("html")) language = document.querySelector("html").getAttribute("lang"); else pamlErr("<html> tag was not found."); if (langTag.getAttribute("code") !== null) langTag.innerText = language; else { if (iso639_1[language] !== undefined) langTag.innerText = iso639_1[language]; else if (iso639_2[language] !== undefined) langTag.innerText = iso639_2[language]; else pamlErr(`Language code "${language}" was not found.`, "warning"); } } }; const generateValueTags = () => { const valueTags = document.querySelectorAll("value"); for (let i = 0; i < valueTags.length; i++) { const valueTag = valueTags[i]; const defaultValue = valueTag.innerHTML; let element = document.querySelector(valueTag.getAttribute("item")); if (element) { if (element.tagName === "INPUT" || element.tagName === "TEXTAREA") { element = element; element.oninput = () => { if (element.value) valueTag.innerText = element.value; else valueTag.innerHTML = defaultValue; }; } else if (element.tagName === "DIV") { element = element; if (element.getAttribute("contenteditable") !== null) { element.oninput = () => { if (element.innerHTML) valueTag.innerHTML = element.innerHTML; else valueTag.innerHTML = defaultValue; }; } else { valueTag.innerHTML = element.innerHTML; } } else { valueTag.innerHTML = element.innerHTML; } } } }; generateFors(); generateIfs(); generateFunctions(); generateVariables(); generateDate(); generateExtend(); getDevice(); getAttributes(); generateImages(); generateLangTags(); generateValueTags(); //# sourceMappingURL=paml.js.map