[{"data":1,"prerenderedAt":3962},["ShallowReactive",2],{"navigation_docs_en":3,"-development-styles-development":58,"-development-styles-development-surround":3959},[4,25,44],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fgetting-started","en",[10,15,20],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","en\u002F1.getting-started\u002F1.introduction","i-lucide-house",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fgetting-started\u002Finstallation","en\u002F1.getting-started\u002F2.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Update & Upgrade","\u002Fgetting-started\u002Fupdate-upgrade","en\u002F1.getting-started\u002F3.update-upgrade","i-lucide-arrow-up-circle",{"title":26,"icon":6,"path":27,"stem":8,"children":28,"page":6},"Guides","\u002Fguides",[29,34,39],{"title":30,"path":31,"stem":32,"icon":33},"Install Styles","\u002Fguides\u002Finstall-styles","en\u002F2.guides\u002F1.install-styles","i-lucide-palette",{"title":35,"path":36,"stem":37,"icon":38},"Install Plugins","\u002Fguides\u002Finstall-plugins","en\u002F2.guides\u002F2.install-plugins","i-lucide-plug",{"title":40,"path":41,"stem":42,"icon":43},"config.php File","\u002Fguides\u002Fconfig-file","en\u002F2.guides\u002F3.config-file","i-lucide-file-cog",{"title":45,"icon":6,"path":46,"stem":8,"children":47,"page":6},"Development","\u002Fdevelopment",[48,53],{"title":49,"path":50,"stem":51,"icon":52},"Plugin Development","\u002Fdevelopment\u002Fplugin-development","en\u002F3.development\u002F1.plugin-development","i-lucide-blocks",{"title":54,"path":55,"stem":56,"icon":57},"Styles Development","\u002Fdevelopment\u002Fstyles-development","en\u002F3.development\u002F2.styles-development","i-lucide-paintbrush",{"id":59,"title":54,"body":60,"description":3950,"extension":3951,"links":3952,"meta":3953,"navigation":3954,"path":55,"seo":3955,"stem":56,"__hash__":3958},"docs_en\u002F3.development\u002F2.styles-development.md",{"type":61,"value":62,"toc":3909},"minimark",[63,72,75,87,92,106,125,154,158,164,321,336,341,609,619,623,638,776,863,872,876,879,883,886,972,983,987,1001,1137,1143,1246,1256,1260,1273,1423,1505,1508,1592,1663,1692,1712,1823,1831,1835,1841,1928,1931,1935,1944,2047,2089,2093,2107,2191,2195,2205,2230,2234,2254,2317,2321,2325,2387,2404,2408,2551,2555,2691,2699,2703,2712,2840,2894,2918,2922,2936,2961,2964,2999,3012,3020,3111,3115,3126,3137,3222,3229,3233,3244,3256,3266,3273,3277,3288,3292,3302,3359,3371,3375,3383,3414,3423,3430,3434,3445,3456,3460,3464,3551,3555,3559,3733,3737,3829,3833,3906],[64,65,66,67,71],"p",{},"A Kleeja style is a folder of HTML templates and assets that controls how the front end looks. Styles live under ",[68,69,70],"code",{},"styles\u002F",", and the administrator picks the active one from the admin panel.",[64,73,74],{},"Templates are plain HTML with a small tag language on top. Kleeja compiles each template to PHP once, caches the result, and serves the cached file on later requests. You never write PHP in a template — the parser strips it.",[76,77,78,79,82,83,86],"note",{},"This page documents the style system in Kleeja 3.x. The template engine lives in ",[68,80,81],{},"includes\u002Fstyle.php"," and the style manager in ",[68,84,85],{},"includes\u002Fadm\u002Fm_styles.php",".",[88,89,91],"h2",{"id":90},"how-it-works","How it works",[64,93,94,97,98,101,102,105],{},[68,95,96],{},"includes\u002Fcommon.php"," builds the style paths from two settings: ",[68,99,100],{},"style"," holds the active style folder, and ",[68,103,104],{},"style_depend_on"," holds its parent when the style inherits from another one.",[64,107,108,109,112,113,116,117,120,121,124],{},"When a page calls ",[68,110,111],{},"$tpl->display('login')",", the engine resolves ",[68,114,115],{},"login.html"," against the active style, falls back to the parent or to ",[68,118,119],{},"default",", compiles the file into ",[68,122,123],{},"cache\u002Ftpl_login.php",", and includes it. The compiled file is reused until the cache is cleared.",[64,126,127,128,131,132,135,136,139,140,139,143,146,147,139,150,153],{},"Every global PHP variable is a template variable. ",[68,129,130],{},"display()"," copies ",[68,133,134],{},"$GLOBALS"," into the engine before rendering, so ",[68,137,138],{},"$config",", ",[68,141,142],{},"$lang",[68,144,145],{},"$userinfo"," and everything a page defines are readable as ",[68,148,149],{},"{config.sitename}",[68,151,152],{},"{lang.LOGIN}"," and so on.",[88,155,157],{"id":156},"folder-structure","Folder structure",[64,159,160,161,163],{},"A style is a folder under ",[68,162,70],{}," whose name uses lowercase letters, digits, dots and underscores, with at least three characters.",[165,166,171],"pre",{"className":167,"code":168,"filename":70,"language":169,"meta":170,"style":170},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","styles\u002F\n└── my_style\u002F\n    ├── info.txt          # required — style metadata\n    ├── header.html       # required — opens the page, loads CSS\n    ├── footer.html       # required — closes the page\n    ├── index_body.html   # required — the upload form\n    ├── up_boxes.html     # required — result blocks after an upload\n    ├── info.html         # required — information messages\n    ├── err.html          # required — error messages\n    ├── login.html        # ... one file per page, see the table below\n    ├── screenshot.png    # optional — thumbnail in the admin panel\n    ├── index.html        # optional — blocks directory listing\n    ├── css\u002F\n    └── images\u002F\n","bash","",[68,172,173,182,192,205,216,227,238,249,260,271,282,293,304,312],{"__ignoreMap":170},[174,175,178],"span",{"class":176,"line":177},"line",1,[174,179,181],{"class":180},"sBMFI","styles\u002F\n",[174,183,185,188],{"class":176,"line":184},2,[174,186,187],{"class":180},"└──",[174,189,191],{"class":190},"sfazB"," my_style\u002F\n",[174,193,195,198,201],{"class":176,"line":194},3,[174,196,197],{"class":180},"    ├──",[174,199,200],{"class":190}," info.txt",[174,202,204],{"class":203},"sHwdD","          # required — style metadata\n",[174,206,208,210,213],{"class":176,"line":207},4,[174,209,197],{"class":180},[174,211,212],{"class":190}," header.html",[174,214,215],{"class":203},"       # required — opens the page, loads CSS\n",[174,217,219,221,224],{"class":176,"line":218},5,[174,220,197],{"class":180},[174,222,223],{"class":190}," footer.html",[174,225,226],{"class":203},"       # required — closes the page\n",[174,228,230,232,235],{"class":176,"line":229},6,[174,231,197],{"class":180},[174,233,234],{"class":190}," index_body.html",[174,236,237],{"class":203},"   # required — the upload form\n",[174,239,241,243,246],{"class":176,"line":240},7,[174,242,197],{"class":180},[174,244,245],{"class":190}," up_boxes.html",[174,247,248],{"class":203},"     # required — result blocks after an upload\n",[174,250,252,254,257],{"class":176,"line":251},8,[174,253,197],{"class":180},[174,255,256],{"class":190}," info.html",[174,258,259],{"class":203},"         # required — information messages\n",[174,261,263,265,268],{"class":176,"line":262},9,[174,264,197],{"class":180},[174,266,267],{"class":190}," err.html",[174,269,270],{"class":203},"          # required — error messages\n",[174,272,274,276,279],{"class":176,"line":273},10,[174,275,197],{"class":180},[174,277,278],{"class":190}," login.html",[174,280,281],{"class":203},"        # ... one file per page, see the table below\n",[174,283,285,287,290],{"class":176,"line":284},11,[174,286,197],{"class":180},[174,288,289],{"class":190}," screenshot.png",[174,291,292],{"class":203},"    # optional — thumbnail in the admin panel\n",[174,294,296,298,301],{"class":176,"line":295},12,[174,297,197],{"class":180},[174,299,300],{"class":190}," index.html",[174,302,303],{"class":203},"        # optional — blocks directory listing\n",[174,305,307,309],{"class":176,"line":306},13,[174,308,197],{"class":180},[174,310,311],{"class":190}," css\u002F\n",[174,313,315,318],{"class":176,"line":314},14,[174,316,317],{"class":180},"    └──",[174,319,320],{"class":190}," images\u002F\n",[322,323,324,325,328,329,332,333,86],"tip",{},"A style that inherits from another needs only the templates it changes. ",[68,326,327],{},"styles\u002Fbootstrap_black\u002F"," ships a single ",[68,330,331],{},"header.html"," plus a stylesheet, and inherits everything else from ",[68,334,335],{},"bootstrap",[337,338,340],"h3",{"id":339},"templates","Templates",[342,343,344,360],"table",{},[345,346,347],"thead",{},[348,349,350,354,357],"tr",{},[351,352,353],"th",{},"Template",[351,355,356],{},"Rendered by",[351,358,359],{},"Page",[361,362,363,378,393,408,423,438,453,468,482,496,510,524,538,553,567,581,595],"tbody",{},[348,364,365,370,375],{},[366,367,368],"td",{},[68,369,331],{},[366,371,372],{},[68,373,374],{},"Saaheader()",[366,376,377],{},"Opening markup for every page.",[348,379,380,385,390],{},[366,381,382],{},[68,383,384],{},"footer.html",[366,386,387],{},[68,388,389],{},"Saafooter()",[366,391,392],{},"Closing markup for every page.",[348,394,395,400,405],{},[366,396,397],{},[68,398,399],{},"index_body.html",[366,401,402],{},[68,403,404],{},"index.php",[366,406,407],{},"The upload form on the home page.",[348,409,410,415,420],{},[366,411,412],{},[68,413,414],{},"up_boxes.html",[366,416,417],{},[68,418,419],{},"get_up_tpl_box()",[366,421,422],{},"Link blocks shown after a successful upload.",[348,424,425,430,435],{},[366,426,427],{},[68,428,429],{},"info.html",[366,431,432],{},[68,433,434],{},"kleeja_info()",[366,436,437],{},"Information messages. Also replaces the home page when uploads are off.",[348,439,440,445,450],{},[366,441,442],{},[68,443,444],{},"err.html",[366,446,447],{},[68,448,449],{},"kleeja_err()",[366,451,452],{},"Error messages.",[348,454,455,460,465],{},[366,456,457],{},[68,458,459],{},"download.html",[366,461,462],{},[68,463,464],{},"do.php",[366,466,467],{},"The download landing page for a file.",[348,469,470,474,479],{},[366,471,472],{},[68,473,115],{},[366,475,476],{},[68,477,478],{},"ucp.php",[366,480,481],{},"The login form.",[348,483,484,489,493],{},[366,485,486],{},[68,487,488],{},"register.html",[366,490,491],{},[68,492,478],{},[366,494,495],{},"The registration form.",[348,497,498,503,507],{},[366,499,500],{},[68,501,502],{},"profile.html",[366,504,505],{},[68,506,478],{},[366,508,509],{},"The user profile form.",[348,511,512,517,521],{},[366,513,514],{},[68,515,516],{},"fileuser.html",[366,518,519],{},[68,520,478],{},[366,522,523],{},"The user's file manager.",[348,525,526,531,535],{},[366,527,528],{},[68,529,530],{},"get_pass.html",[366,532,533],{},[68,534,478],{},[366,536,537],{},"Password recovery.",[348,539,540,545,550],{},[366,541,542],{},[68,543,544],{},"guide.html",[366,546,547],{},[68,548,549],{},"go.php",[366,551,552],{},"The guide page.",[348,554,555,560,564],{},[366,556,557],{},[68,558,559],{},"rules.html",[366,561,562],{},[68,563,549],{},[366,565,566],{},"The rules page.",[348,568,569,574,578],{},[366,570,571],{},[68,572,573],{},"report.html",[366,575,576],{},[68,577,549],{},[366,579,580],{},"The report-a-file form.",[348,582,583,588,592],{},[366,584,585],{},[68,586,587],{},"call.html",[366,589,590],{},[68,591,549],{},[366,593,594],{},"The contact form.",[348,596,597,602,606],{},[366,598,599],{},[68,600,601],{},"stats.html",[366,603,604],{},[68,605,549],{},[366,607,608],{},"Site statistics.",[610,611,612,613,615,616,86],"warning",{},"A missing template is fatal. When the engine cannot resolve a name in the active style, its parent, or ",[68,614,119],{},", it stops the request with ",[68,617,618],{},"No Template !",[88,620,622],{"id":621},"the-infotxt-file","The info.txt file",[64,624,625,626,629,630,633,634,637],{},"Every style carries an ",[68,627,628],{},"info.txt"," that the admin panel reads. The parser ignores blank lines and lines starting with ",[68,631,632],{},"#",", splits the rest on the first ",[68,635,636],{},"=",", and treats a colon in the key as a sub-key.",[165,639,644],{"className":640,"code":641,"filename":642,"language":643,"meta":170,"style":170},"language-ini shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","#\n# This is a configuration file of the style.\n#\n\n#Style name\nname = My Style\n\n#Style desc\ndesc:en = A clean, responsive style for Kleeja\ndesc:ar = ستايل بسيط ومتجاوب لكليجا\n\n#Style copyright\ncopyright = 2026 Your Name\n\n#Version of style\nversion = 1.0\n\n#Min. required version of kleeja\nkleeja_version = 3.2.0\n\n#name of the style required by this style\n#depend_on = bootstrap\n\n#plugins required to install this style\n#plugins_required = test, test2\n","styles\u002Fmy_style\u002Finfo.txt","ini",[68,645,646,651,656,660,666,671,676,680,685,690,695,699,704,709,713,719,725,730,736,742,747,753,759,764,770],{"__ignoreMap":170},[174,647,648],{"class":176,"line":177},[174,649,650],{},"#\n",[174,652,653],{"class":176,"line":184},[174,654,655],{},"# This is a configuration file of the style.\n",[174,657,658],{"class":176,"line":194},[174,659,650],{},[174,661,662],{"class":176,"line":207},[174,663,665],{"emptyLinePlaceholder":664},true,"\n",[174,667,668],{"class":176,"line":218},[174,669,670],{},"#Style name\n",[174,672,673],{"class":176,"line":229},[174,674,675],{},"name = My Style\n",[174,677,678],{"class":176,"line":240},[174,679,665],{"emptyLinePlaceholder":664},[174,681,682],{"class":176,"line":251},[174,683,684],{},"#Style desc\n",[174,686,687],{"class":176,"line":262},[174,688,689],{},"desc:en = A clean, responsive style for Kleeja\n",[174,691,692],{"class":176,"line":273},[174,693,694],{},"desc:ar = ستايل بسيط ومتجاوب لكليجا\n",[174,696,697],{"class":176,"line":284},[174,698,665],{"emptyLinePlaceholder":664},[174,700,701],{"class":176,"line":295},[174,702,703],{},"#Style copyright\n",[174,705,706],{"class":176,"line":306},[174,707,708],{},"copyright = 2026 Your Name\n",[174,710,711],{"class":176,"line":314},[174,712,665],{"emptyLinePlaceholder":664},[174,714,716],{"class":176,"line":715},15,[174,717,718],{},"#Version of style\n",[174,720,722],{"class":176,"line":721},16,[174,723,724],{},"version = 1.0\n",[174,726,728],{"class":176,"line":727},17,[174,729,665],{"emptyLinePlaceholder":664},[174,731,733],{"class":176,"line":732},18,[174,734,735],{},"#Min. required version of kleeja\n",[174,737,739],{"class":176,"line":738},19,[174,740,741],{},"kleeja_version = 3.2.0\n",[174,743,745],{"class":176,"line":744},20,[174,746,665],{"emptyLinePlaceholder":664},[174,748,750],{"class":176,"line":749},21,[174,751,752],{},"#name of the style required by this style\n",[174,754,756],{"class":176,"line":755},22,[174,757,758],{},"#depend_on = bootstrap\n",[174,760,762],{"class":176,"line":761},23,[174,763,665],{"emptyLinePlaceholder":664},[174,765,767],{"class":176,"line":766},24,[174,768,769],{},"#plugins required to install this style\n",[174,771,773],{"class":176,"line":772},25,[174,774,775],{},"#plugins_required = test, test2\n",[342,777,778,788],{},[345,779,780],{},[348,781,782,785],{},[351,783,784],{},"Key",[351,786,787],{},"Purpose",[361,789,790,800,813,823,833,843,853],{},[348,791,792,797],{},[366,793,794],{},[68,795,796],{},"name",[366,798,799],{},"Display name in the style list.",[348,801,802,807],{},[366,803,804],{},[68,805,806],{},"desc:\u003Clang>",[366,808,809,810,86],{},"Description per language code. Falls back to ",[68,811,812],{},"desc:en",[348,814,815,820],{},[366,816,817],{},[68,818,819],{},"copyright",[366,821,822],{},"Copyright line shown with the style.",[348,824,825,830],{},[366,826,827],{},[68,828,829],{},"version",[366,831,832],{},"Style version. The store uses it to detect updates.",[348,834,835,840],{},[366,836,837],{},[68,838,839],{},"kleeja_version",[366,841,842],{},"Minimum Kleeja version. Activation fails on anything older.",[348,844,845,850],{},[366,846,847],{},[68,848,849],{},"depend_on",[366,851,852],{},"Parent style folder. Missing templates resolve there.",[348,854,855,860],{},[366,856,857],{},[68,858,859],{},"plugins_required",[366,861,862],{},"Comma-separated plugin folder names that must be installed and enabled.",[864,865,866,868,869,871],"important",{},[68,867,628],{}," drives the checks that run when an administrator activates the style. A missing parent folder, a Kleeja version below ",[68,870,839],{},", or an uninstalled required plugin blocks activation with a clear error.",[88,873,875],{"id":874},"template-syntax","Template syntax",[64,877,878],{},"The parser rewrites a handful of pseudo-tags into PHP. Everything else passes through untouched.",[337,880,882],{"id":881},"variables","Variables",[64,884,885],{},"Wrap a variable name in single braces. A dot walks into an array.",[165,887,892],{"className":888,"code":889,"filename":890,"language":891,"meta":170,"style":170},"language-html shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Ctitle>{title} - {config.sitename}\u003C\u002Ftitle>\n\u003Cp>{lang.WELCOME}, {username}\u003C\u002Fp>\n\u003Clink rel=\"stylesheet\" href=\"{STYLE_PATH}css\u002Fstylesheet.css\" \u002F>\n","styles\u002Fmy_style\u002Fheader.html","html",[68,893,894,919,936],{"__ignoreMap":170},[174,895,896,900,904,907,911,914,916],{"class":176,"line":177},[174,897,899],{"class":898},"sMK4o","\u003C",[174,901,903],{"class":902},"swJcz","title",[174,905,906],{"class":898},">",[174,908,910],{"class":909},"sTEyZ","{title} - {config.sitename}",[174,912,913],{"class":898},"\u003C\u002F",[174,915,903],{"class":902},[174,917,918],{"class":898},">\n",[174,920,921,923,925,927,930,932,934],{"class":176,"line":184},[174,922,899],{"class":898},[174,924,64],{"class":902},[174,926,906],{"class":898},[174,928,929],{"class":909},"{lang.WELCOME}, {username}",[174,931,913],{"class":898},[174,933,64],{"class":902},[174,935,918],{"class":898},[174,937,938,940,943,947,949,952,955,957,960,962,964,967,969],{"class":176,"line":194},[174,939,899],{"class":898},[174,941,942],{"class":902},"link",[174,944,946],{"class":945},"spNyl"," rel",[174,948,636],{"class":898},[174,950,951],{"class":898},"\"",[174,953,954],{"class":190},"stylesheet",[174,956,951],{"class":898},[174,958,959],{"class":945}," href",[174,961,636],{"class":898},[174,963,951],{"class":898},[174,965,966],{"class":190},"{STYLE_PATH}css\u002Fstylesheet.css",[174,968,951],{"class":898},[174,970,971],{"class":898}," \u002F>\n",[64,973,974,975,978,979,982],{},"Names may contain letters, digits, underscores and dots — nothing else. ",[68,976,977],{},"{lang.X}"," and ",[68,980,981],{},"{olang.X}"," are special: when the key does not exist, the engine prints the tag itself instead of an empty string, which makes missing translations easy to spot.",[337,984,986],{"id":985},"loops","Loops",[64,988,989,992,993,996,997,1000],{},[68,990,991],{},"\u003CLOOP>"," iterates an array. Inside the loop, double braces read the current row, ",[68,994,995],{},"{%key%}"," prints the current key and ",[68,998,999],{},"{%value%}"," prints the current value.",[165,1002,1004],{"className":888,"code":1003,"filename":890,"language":891,"meta":170,"style":170},"\u003Cul class=\"menu\">\n    \u003CLOOP NAME=\"top_menu\">\n        \u003CIF LOOP=\"show\">\n        \u003Cli>\u003Ca href=\"{{url}}\">{{title}}\u003C\u002Fa>\u003C\u002Fli>\n        \u003C\u002FIF>\n    \u003C\u002FLOOP>\n\u003C\u002Ful>\n",[68,1005,1006,1027,1049,1071,1111,1120,1129],{"__ignoreMap":170},[174,1007,1008,1010,1013,1016,1018,1020,1023,1025],{"class":176,"line":177},[174,1009,899],{"class":898},[174,1011,1012],{"class":902},"ul",[174,1014,1015],{"class":945}," class",[174,1017,636],{"class":898},[174,1019,951],{"class":898},[174,1021,1022],{"class":190},"menu",[174,1024,951],{"class":898},[174,1026,918],{"class":898},[174,1028,1029,1032,1035,1038,1040,1042,1045,1047],{"class":176,"line":184},[174,1030,1031],{"class":898},"    \u003C",[174,1033,1034],{"class":902},"LOOP",[174,1036,1037],{"class":945}," NAME",[174,1039,636],{"class":898},[174,1041,951],{"class":898},[174,1043,1044],{"class":190},"top_menu",[174,1046,951],{"class":898},[174,1048,918],{"class":898},[174,1050,1051,1054,1057,1060,1062,1064,1067,1069],{"class":176,"line":194},[174,1052,1053],{"class":898},"        \u003C",[174,1055,1056],{"class":902},"IF",[174,1058,1059],{"class":945}," LOOP",[174,1061,636],{"class":898},[174,1063,951],{"class":898},[174,1065,1066],{"class":190},"show",[174,1068,951],{"class":898},[174,1070,918],{"class":898},[174,1072,1073,1075,1078,1081,1084,1086,1088,1090,1093,1095,1097,1100,1102,1104,1107,1109],{"class":176,"line":207},[174,1074,1053],{"class":898},[174,1076,1077],{"class":902},"li",[174,1079,1080],{"class":898},">\u003C",[174,1082,1083],{"class":902},"a",[174,1085,959],{"class":945},[174,1087,636],{"class":898},[174,1089,951],{"class":898},[174,1091,1092],{"class":190},"{{url}}",[174,1094,951],{"class":898},[174,1096,906],{"class":898},[174,1098,1099],{"class":909},"{{title}}",[174,1101,913],{"class":898},[174,1103,1083],{"class":902},[174,1105,1106],{"class":898},">\u003C\u002F",[174,1108,1077],{"class":902},[174,1110,918],{"class":898},[174,1112,1113,1116,1118],{"class":176,"line":218},[174,1114,1115],{"class":898},"        \u003C\u002F",[174,1117,1056],{"class":902},[174,1119,918],{"class":898},[174,1121,1122,1125,1127],{"class":176,"line":229},[174,1123,1124],{"class":898},"    \u003C\u002F",[174,1126,1034],{"class":902},[174,1128,918],{"class":898},[174,1130,1131,1133,1135],{"class":176,"line":240},[174,1132,913],{"class":898},[174,1134,1012],{"class":902},[174,1136,918],{"class":898},[64,1138,1139,1140,1142],{},"For a flat array of strings, ",[68,1141,999],{}," is all you need:",[165,1144,1147],{"className":888,"code":1145,"filename":1146,"language":891,"meta":170,"style":170},"\u003CIF NAME=\"ERRORS\">\n    \u003Cul class=\"alert\">\n        \u003CLOOP NAME=\"ERRORS\">\n            \u003Cli>{%value%}\u003C\u002Fli>\n        \u003C\u002FLOOP>\n    \u003C\u002Ful>\n\u003C\u002FIF>\n","styles\u002Fmy_style\u002Flogin.html",[68,1148,1149,1168,1187,1205,1222,1230,1238],{"__ignoreMap":170},[174,1150,1151,1153,1155,1157,1159,1161,1164,1166],{"class":176,"line":177},[174,1152,899],{"class":898},[174,1154,1056],{"class":902},[174,1156,1037],{"class":945},[174,1158,636],{"class":898},[174,1160,951],{"class":898},[174,1162,1163],{"class":190},"ERRORS",[174,1165,951],{"class":898},[174,1167,918],{"class":898},[174,1169,1170,1172,1174,1176,1178,1180,1183,1185],{"class":176,"line":184},[174,1171,1031],{"class":898},[174,1173,1012],{"class":902},[174,1175,1015],{"class":945},[174,1177,636],{"class":898},[174,1179,951],{"class":898},[174,1181,1182],{"class":190},"alert",[174,1184,951],{"class":898},[174,1186,918],{"class":898},[174,1188,1189,1191,1193,1195,1197,1199,1201,1203],{"class":176,"line":194},[174,1190,1053],{"class":898},[174,1192,1034],{"class":902},[174,1194,1037],{"class":945},[174,1196,636],{"class":898},[174,1198,951],{"class":898},[174,1200,1163],{"class":190},[174,1202,951],{"class":898},[174,1204,918],{"class":898},[174,1206,1207,1210,1212,1214,1216,1218,1220],{"class":176,"line":207},[174,1208,1209],{"class":898},"            \u003C",[174,1211,1077],{"class":902},[174,1213,906],{"class":898},[174,1215,999],{"class":909},[174,1217,913],{"class":898},[174,1219,1077],{"class":902},[174,1221,918],{"class":898},[174,1223,1224,1226,1228],{"class":176,"line":218},[174,1225,1115],{"class":898},[174,1227,1034],{"class":902},[174,1229,918],{"class":898},[174,1231,1232,1234,1236],{"class":176,"line":229},[174,1233,1124],{"class":898},[174,1235,1012],{"class":902},[174,1237,918],{"class":898},[174,1239,1240,1242,1244],{"class":176,"line":240},[174,1241,913],{"class":898},[174,1243,1056],{"class":902},[174,1245,918],{"class":898},[610,1247,1248,1249,1251,1252,1255],{},"Nested loops share one row variable. An inner ",[68,1250,991],{}," overwrites the outer row, so ",[68,1253,1254],{},"{{field}}"," after the inner loop closes no longer refers to the outer one. Flatten the data in PHP instead of nesting.",[337,1257,1259],{"id":1258},"conditions","Conditions",[64,1261,1262,1265,1266,1269,1270,1272],{},[68,1263,1264],{},"\u003CIF>"," takes attributes rather than a free-form expression. Use ",[68,1267,1268],{},"NAME"," for a global variable and ",[68,1271,1034],{}," for a field of the current loop row.",[165,1274,1277],{"className":888,"code":1275,"filename":1276,"language":891,"meta":170,"style":170},"\u003CIF NAME=\"user_is\">\n    \u003Cp>{lang.WELCOME} {username}\u003C\u002Fp>\n\u003CELSE>\n    \u003Ca href=\"{action_login}\">{lang.LOGIN}\u003C\u002Fa>\n\u003C\u002FIF>\n\n\u003CIF NAME=\"config.safe_code\">\n    \u003Cimg src=\"{captcha_file_path}\" alt=\"{lang.REFRESH_CAPTCHA}\" \u002F>\n\u003C\u002FIF>\n","styles\u002Fmy_style\u002Findex_body.html",[68,1278,1279,1298,1315,1324,1351,1359,1363,1382,1415],{"__ignoreMap":170},[174,1280,1281,1283,1285,1287,1289,1291,1294,1296],{"class":176,"line":177},[174,1282,899],{"class":898},[174,1284,1056],{"class":902},[174,1286,1037],{"class":945},[174,1288,636],{"class":898},[174,1290,951],{"class":898},[174,1292,1293],{"class":190},"user_is",[174,1295,951],{"class":898},[174,1297,918],{"class":898},[174,1299,1300,1302,1304,1306,1309,1311,1313],{"class":176,"line":184},[174,1301,1031],{"class":898},[174,1303,64],{"class":902},[174,1305,906],{"class":898},[174,1307,1308],{"class":909},"{lang.WELCOME} {username}",[174,1310,913],{"class":898},[174,1312,64],{"class":902},[174,1314,918],{"class":898},[174,1316,1317,1319,1322],{"class":176,"line":194},[174,1318,899],{"class":898},[174,1320,1321],{"class":902},"ELSE",[174,1323,918],{"class":898},[174,1325,1326,1328,1330,1332,1334,1336,1339,1341,1343,1345,1347,1349],{"class":176,"line":207},[174,1327,1031],{"class":898},[174,1329,1083],{"class":902},[174,1331,959],{"class":945},[174,1333,636],{"class":898},[174,1335,951],{"class":898},[174,1337,1338],{"class":190},"{action_login}",[174,1340,951],{"class":898},[174,1342,906],{"class":898},[174,1344,152],{"class":909},[174,1346,913],{"class":898},[174,1348,1083],{"class":902},[174,1350,918],{"class":898},[174,1352,1353,1355,1357],{"class":176,"line":218},[174,1354,913],{"class":898},[174,1356,1056],{"class":902},[174,1358,918],{"class":898},[174,1360,1361],{"class":176,"line":229},[174,1362,665],{"emptyLinePlaceholder":664},[174,1364,1365,1367,1369,1371,1373,1375,1378,1380],{"class":176,"line":240},[174,1366,899],{"class":898},[174,1368,1056],{"class":902},[174,1370,1037],{"class":945},[174,1372,636],{"class":898},[174,1374,951],{"class":898},[174,1376,1377],{"class":190},"config.safe_code",[174,1379,951],{"class":898},[174,1381,918],{"class":898},[174,1383,1384,1386,1389,1392,1394,1396,1399,1401,1404,1406,1408,1411,1413],{"class":176,"line":251},[174,1385,1031],{"class":898},[174,1387,1388],{"class":902},"img",[174,1390,1391],{"class":945}," src",[174,1393,636],{"class":898},[174,1395,951],{"class":898},[174,1397,1398],{"class":190},"{captcha_file_path}",[174,1400,951],{"class":898},[174,1402,1403],{"class":945}," alt",[174,1405,636],{"class":898},[174,1407,951],{"class":898},[174,1409,1410],{"class":190},"{lang.REFRESH_CAPTCHA}",[174,1412,951],{"class":898},[174,1414,971],{"class":898},[174,1416,1417,1419,1421],{"class":176,"line":262},[174,1418,913],{"class":898},[174,1420,1056],{"class":902},[174,1422,918],{"class":898},[342,1424,1425,1435],{},[345,1426,1427],{},[348,1428,1429,1432],{},[351,1430,1431],{},"Attribute",[351,1433,1434],{},"Meaning",[361,1436,1437,1446,1455,1468,1480,1493],{},[348,1438,1439,1443],{},[366,1440,1441],{},[68,1442,1268],{},[366,1444,1445],{},"A global variable, optionally with a comparison.",[348,1447,1448,1452],{},[366,1449,1450],{},[68,1451,1034],{},[366,1453,1454],{},"A field of the current loop row.",[348,1456,1457,1462],{},[366,1458,1459],{},[68,1460,1461],{},"AND",[366,1463,1464,1465,86],{},"Joins the previous test with ",[68,1466,1467],{},"&&",[348,1469,1470,1475],{},[366,1471,1472],{},[68,1473,1474],{},"OR",[366,1476,1464,1477,86],{},[68,1478,1479],{},"||",[348,1481,1482,1487],{},[366,1483,1484],{},[68,1485,1486],{},"ISSET",[366,1488,1489,1490,86],{},"Wraps the named variable in ",[68,1491,1492],{},"isset()",[348,1494,1495,1500],{},[366,1496,1497],{},[68,1498,1499],{},"EMPTY",[366,1501,1489,1502,86],{},[68,1503,1504],{},"empty()",[64,1506,1507],{},"Comparisons accept both symbols and words:",[342,1509,1510,1520],{},[345,1511,1512],{},[348,1513,1514,1517],{},[351,1515,1516],{},"Operator",[351,1518,1519],{},"Word form",[361,1521,1522,1534,1546,1557,1568,1580],{},[348,1523,1524,1529],{},[366,1525,1526],{},[68,1527,1528],{},"==",[366,1530,1531],{},[68,1532,1533],{},"eq",[348,1535,1536,1541],{},[366,1537,1538],{},[68,1539,1540],{},"!=",[366,1542,1543],{},[68,1544,1545],{},"neq",[348,1547,1548,1552],{},[366,1549,1550],{},[68,1551,899],{},[366,1553,1554],{},[68,1555,1556],{},"lt",[348,1558,1559,1563],{},[366,1560,1561],{},[68,1562,906],{},[366,1564,1565],{},[68,1566,1567],{},"gt",[348,1569,1570,1575],{},[366,1571,1572],{},[68,1573,1574],{},"\u003C=",[366,1576,1577],{},[68,1578,1579],{},"lte",[348,1581,1582,1587],{},[366,1583,1584],{},[68,1585,1586],{},">=",[366,1588,1589],{},[68,1590,1591],{},"gte",[165,1593,1596],{"className":888,"code":1594,"filename":1595,"language":891,"meta":170,"style":170},"\u003CIF NAME=\"go_to==start\" AND=\"\" ISSET=\"go_menu_html\">\n    \u003Cnav>{go_menu_html}\u003C\u002Fnav>\n\u003C\u002FIF>\n","admin\u002FMasmak\u002Fadmin_header.html",[68,1597,1598,1637,1655],{"__ignoreMap":170},[174,1599,1600,1602,1604,1606,1608,1610,1613,1615,1618,1620,1623,1626,1628,1630,1633,1635],{"class":176,"line":177},[174,1601,899],{"class":898},[174,1603,1056],{"class":902},[174,1605,1037],{"class":945},[174,1607,636],{"class":898},[174,1609,951],{"class":898},[174,1611,1612],{"class":190},"go_to==start",[174,1614,951],{"class":898},[174,1616,1617],{"class":945}," AND",[174,1619,636],{"class":898},[174,1621,1622],{"class":898},"\"\"",[174,1624,1625],{"class":945}," ISSET",[174,1627,636],{"class":898},[174,1629,951],{"class":898},[174,1631,1632],{"class":190},"go_menu_html",[174,1634,951],{"class":898},[174,1636,918],{"class":898},[174,1638,1639,1641,1644,1646,1649,1651,1653],{"class":176,"line":184},[174,1640,1031],{"class":898},[174,1642,1643],{"class":902},"nav",[174,1645,906],{"class":898},[174,1647,1648],{"class":909},"{go_menu_html}",[174,1650,913],{"class":898},[174,1652,1643],{"class":902},[174,1654,918],{"class":898},[174,1656,1657,1659,1661],{"class":176,"line":194},[174,1658,913],{"class":898},[174,1660,1056],{"class":902},[174,1662,918],{"class":898},[64,1664,1665,1666,139,1668,139,1670,139,1672,139,1674,139,1676,1678,1679,1682,1683,1685,1686,1688,1689,1691],{},"Attributes always compile in the order ",[68,1667,1268],{},[68,1669,1034],{},[68,1671,1461],{},[68,1673,1474],{},[68,1675,1486],{},[68,1677,1499],{},". Pass an empty ",[68,1680,1681],{},"AND=\"\""," to place the ",[68,1684,1467],{}," operator before an ",[68,1687,1486],{}," or ",[68,1690,1499],{}," test, as above.",[64,1693,1694,1697,1698,1701,1702,139,1705,1708,1709,86],{},[68,1695,1696],{},"\u003CELSEIF>"," extends a chain and ",[68,1699,1700],{},"\u003CUNLESS>"," inverts a test. Close all three with ",[68,1703,1704],{},"\u003C\u002FIF>",[68,1706,1707],{},"\u003C\u002FUNLESS>"," or the generic ",[68,1710,1711],{},"\u003C\u002FEND>",[165,1713,1716],{"className":888,"code":1714,"filename":1715,"language":891,"meta":170,"style":170},"\u003CIF NAME=\"current_smt == users\">\n    ...\n\u003CELSEIF NAME=\"current_smt == team\">\n    ...\n\u003C\u002FIF>\n\n\u003CUNLESS NAME=\"no_results\">\n    \u003Cp>{lang.RESULTS}\u003C\u002Fp>\n\u003C\u002FUNLESS>\n","styles\u002Fmy_style\u002Fprofile.html",[68,1717,1718,1737,1742,1762,1766,1774,1778,1798,1815],{"__ignoreMap":170},[174,1719,1720,1722,1724,1726,1728,1730,1733,1735],{"class":176,"line":177},[174,1721,899],{"class":898},[174,1723,1056],{"class":902},[174,1725,1037],{"class":945},[174,1727,636],{"class":898},[174,1729,951],{"class":898},[174,1731,1732],{"class":190},"current_smt == users",[174,1734,951],{"class":898},[174,1736,918],{"class":898},[174,1738,1739],{"class":176,"line":184},[174,1740,1741],{"class":909},"    ...\n",[174,1743,1744,1746,1749,1751,1753,1755,1758,1760],{"class":176,"line":194},[174,1745,899],{"class":898},[174,1747,1748],{"class":902},"ELSEIF",[174,1750,1037],{"class":945},[174,1752,636],{"class":898},[174,1754,951],{"class":898},[174,1756,1757],{"class":190},"current_smt == team",[174,1759,951],{"class":898},[174,1761,918],{"class":898},[174,1763,1764],{"class":176,"line":207},[174,1765,1741],{"class":909},[174,1767,1768,1770,1772],{"class":176,"line":218},[174,1769,913],{"class":898},[174,1771,1056],{"class":902},[174,1773,918],{"class":898},[174,1775,1776],{"class":176,"line":229},[174,1777,665],{"emptyLinePlaceholder":664},[174,1779,1780,1782,1785,1787,1789,1791,1794,1796],{"class":176,"line":240},[174,1781,899],{"class":898},[174,1783,1784],{"class":902},"UNLESS",[174,1786,1037],{"class":945},[174,1788,636],{"class":898},[174,1790,951],{"class":898},[174,1792,1793],{"class":190},"no_results",[174,1795,951],{"class":898},[174,1797,918],{"class":898},[174,1799,1800,1802,1804,1806,1809,1811,1813],{"class":176,"line":251},[174,1801,1031],{"class":898},[174,1803,64],{"class":902},[174,1805,906],{"class":898},[174,1807,1808],{"class":909},"{lang.RESULTS}",[174,1810,913],{"class":898},[174,1812,64],{"class":902},[174,1814,918],{"class":898},[174,1816,1817,1819,1821],{"class":176,"line":262},[174,1818,913],{"class":898},[174,1820,1784],{"class":902},[174,1822,918],{"class":898},[1824,1825,1826,1827,1830],"caution",{},"A comparison value that contains a digit is emitted unquoted, so ",[68,1828,1829],{},"\u003CIF NAME=\"style == bootstrap4\">"," compiles to invalid PHP. Compare against pure text or pure numbers, and move anything else into a variable you set in PHP.",[337,1832,1834],{"id":1833},"inline-conditions","Inline conditions",[64,1836,1837,1838,1840],{},"A parenthesised ternary is shorthand for a short ",[68,1839,1264],{},". The condition takes no quotes or commas.",[165,1842,1845],{"className":888,"code":1843,"filename":1844,"language":891,"meta":170,"style":170},"(page_stats?\u003Cdiv class=\"footer_stats\">{page_stats}\u003C\u002Fdiv>:)\n\u003Ca href=\"{{url}}\" (go_current=={{name}}?class=\"current\":)>{{title}}\u003C\u002Fa>\n","styles\u002Fmy_style\u002Ffooter.html",[68,1846,1847,1882],{"__ignoreMap":170},[174,1848,1849,1852,1854,1857,1859,1861,1863,1866,1868,1870,1873,1875,1877,1879],{"class":176,"line":177},[174,1850,1851],{"class":909},"(page_stats?",[174,1853,899],{"class":898},[174,1855,1856],{"class":902},"div",[174,1858,1015],{"class":945},[174,1860,636],{"class":898},[174,1862,951],{"class":898},[174,1864,1865],{"class":190},"footer_stats",[174,1867,951],{"class":898},[174,1869,906],{"class":898},[174,1871,1872],{"class":909},"{page_stats}",[174,1874,913],{"class":898},[174,1876,1856],{"class":902},[174,1878,906],{"class":898},[174,1880,1881],{"class":909},":)\n",[174,1883,1884,1886,1888,1890,1892,1894,1896,1898,1901,1903,1906,1908,1910,1913,1915,1918,1920,1922,1924,1926],{"class":176,"line":184},[174,1885,899],{"class":898},[174,1887,1083],{"class":902},[174,1889,959],{"class":945},[174,1891,636],{"class":898},[174,1893,951],{"class":898},[174,1895,1092],{"class":190},[174,1897,951],{"class":898},[174,1899,1900],{"class":945}," (go_current",[174,1902,1528],{"class":898},[174,1904,1905],{"class":190},"{{name}}?class",[174,1907,636],{"class":898},[174,1909,951],{"class":898},[174,1911,1912],{"class":190},"current",[174,1914,951],{"class":898},[174,1916,1917],{"class":945},":)",[174,1919,906],{"class":898},[174,1921,1099],{"class":909},[174,1923,913],{"class":898},[174,1925,1083],{"class":902},[174,1927,918],{"class":898},[64,1929,1930],{},"Leave either branch empty to render nothing on that side.",[337,1932,1934],{"id":1933},"browser-detection","Browser detection",[64,1936,1937,1940,1941,1943],{},[68,1938,1939],{},"\u003CIS_BROWSER>"," renders a block only for the browsers you name. Use ",[68,1942,1540],{}," to invert it, and a comma-separated list to match several.",[165,1945,1947],{"className":888,"code":1946,"filename":890,"language":891,"meta":170,"style":170},"\u003CIS_BROWSER!=\"mobile\">\n    \u003Cimg src=\"{user_avatar}\" alt=\"{username}\" \u002F>\n\u003C\u002FIS_BROWSER>\n\n\u003CIS_BROWSER=\"ie,opera\">\n    \u003Clink rel=\"stylesheet\" href=\"{THIS_STYLE_PATH}css\u002Flegacy.css\" \u002F>\n\u003C\u002FIS_BROWSER>\n",[68,1948,1949,1958,1988,1997,2001,2010,2039],{"__ignoreMap":170},[174,1950,1951,1953,1956],{"class":176,"line":177},[174,1952,899],{"class":898},[174,1954,1955],{"class":902},"IS_BROWSER!=\"mobile\"",[174,1957,918],{"class":898},[174,1959,1960,1962,1964,1966,1968,1970,1973,1975,1977,1979,1981,1984,1986],{"class":176,"line":184},[174,1961,1031],{"class":898},[174,1963,1388],{"class":902},[174,1965,1391],{"class":945},[174,1967,636],{"class":898},[174,1969,951],{"class":898},[174,1971,1972],{"class":190},"{user_avatar}",[174,1974,951],{"class":898},[174,1976,1403],{"class":945},[174,1978,636],{"class":898},[174,1980,951],{"class":898},[174,1982,1983],{"class":190},"{username}",[174,1985,951],{"class":898},[174,1987,971],{"class":898},[174,1989,1990,1992,1995],{"class":176,"line":194},[174,1991,913],{"class":898},[174,1993,1994],{"class":902},"IS_BROWSER",[174,1996,918],{"class":898},[174,1998,1999],{"class":176,"line":207},[174,2000,665],{"emptyLinePlaceholder":664},[174,2002,2003,2005,2008],{"class":176,"line":218},[174,2004,899],{"class":898},[174,2006,2007],{"class":902},"IS_BROWSER=\"ie,opera\"",[174,2009,918],{"class":898},[174,2011,2012,2014,2016,2018,2020,2022,2024,2026,2028,2030,2032,2035,2037],{"class":176,"line":229},[174,2013,1031],{"class":898},[174,2015,942],{"class":902},[174,2017,946],{"class":945},[174,2019,636],{"class":898},[174,2021,951],{"class":898},[174,2023,954],{"class":190},[174,2025,951],{"class":898},[174,2027,959],{"class":945},[174,2029,636],{"class":898},[174,2031,951],{"class":898},[174,2033,2034],{"class":190},"{THIS_STYLE_PATH}css\u002Flegacy.css",[174,2036,951],{"class":898},[174,2038,971],{"class":898},[174,2040,2041,2043,2045],{"class":176,"line":240},[174,2042,913],{"class":898},[174,2044,1994],{"class":902},[174,2046,918],{"class":898},[64,2048,2049,2050,139,2053,139,2056,139,2059,139,2062,139,2065,139,2068,139,2071,139,2074,978,2077,2080,2081,1688,2083,2085,2086,86],{},"Recognised names are ",[68,2051,2052],{},"ie",[68,2054,2055],{},"firefox",[68,2057,2058],{},"safari",[68,2060,2061],{},"chrome",[68,2063,2064],{},"flock",[68,2066,2067],{},"opera",[68,2069,2070],{},"konqueror",[68,2072,2073],{},"mozilla",[68,2075,2076],{},"webkit",[68,2078,2079],{},"mobile",". Append a version number to ",[68,2082,2052],{},[68,2084,2055],{}," to target it, as in ",[68,2087,2088],{},"ie6",[337,2090,2092],{"id":2091},"row-helpers","Row helpers",[64,2094,2095,2096,978,2099,2102,2103,2106],{},"Inside a loop, ",[68,2097,2098],{},"\u003CODD>",[68,2100,2101],{},"\u003CEVEN>"," test a numeric field of the current row, and ",[68,2104,2105],{},"\u003CRAND>"," alternates between two strings on every call.",[165,2108,2111],{"className":888,"code":2109,"filename":2110,"language":891,"meta":170,"style":170},"\u003CLOOP NAME=\"files\">\n    \u003Ctr class=\"\u003CRAND=\"row_a\",\"row_b\">\">\n        \u003Ctd>{{name}}\u003C\u002Ftd>\n    \u003C\u002Ftr>\n\u003C\u002FLOOP>\n","styles\u002Fmy_style\u002Ffileuser.html",[68,2112,2113,2132,2158,2175,2183],{"__ignoreMap":170},[174,2114,2115,2117,2119,2121,2123,2125,2128,2130],{"class":176,"line":177},[174,2116,899],{"class":898},[174,2118,1034],{"class":902},[174,2120,1037],{"class":945},[174,2122,636],{"class":898},[174,2124,951],{"class":898},[174,2126,2127],{"class":190},"files",[174,2129,951],{"class":898},[174,2131,918],{"class":898},[174,2133,2134,2136,2138,2140,2142,2144,2147,2149,2152,2155],{"class":176,"line":184},[174,2135,1031],{"class":898},[174,2137,348],{"class":902},[174,2139,1015],{"class":945},[174,2141,636],{"class":898},[174,2143,951],{"class":898},[174,2145,2146],{"class":190},"\u003CRAND=",[174,2148,951],{"class":898},[174,2150,2151],{"class":945},"row_a",[174,2153,2154],{"class":898},"\",\"row_b\">",[174,2156,2157],{"class":909},"\">\n",[174,2159,2160,2162,2164,2166,2169,2171,2173],{"class":176,"line":194},[174,2161,1053],{"class":898},[174,2163,366],{"class":902},[174,2165,906],{"class":898},[174,2167,2168],{"class":909},"{{name}}",[174,2170,913],{"class":898},[174,2172,366],{"class":902},[174,2174,918],{"class":898},[174,2176,2177,2179,2181],{"class":176,"line":207},[174,2178,1124],{"class":898},[174,2180,348],{"class":902},[174,2182,918],{"class":898},[174,2184,2185,2187,2189],{"class":176,"line":218},[174,2186,913],{"class":898},[174,2188,1034],{"class":902},[174,2190,918],{"class":898},[337,2192,2194],{"id":2193},"including-a-template","Including a template",[64,2196,2197,2200,2201,2204],{},[68,2198,2199],{},"\u003CINCLUDE>"," renders another template in place. Add ",[68,2202,2203],{},"PATH"," to pull it from a directory outside the active style.",[165,2206,2208],{"className":888,"code":2207,"filename":1276,"language":891,"meta":170,"style":170},"\u003CINCLUDE NAME=\"sidebar\">\n",[68,2209,2210],{"__ignoreMap":170},[174,2211,2212,2214,2217,2219,2221,2223,2226,2228],{"class":176,"line":177},[174,2213,899],{"class":898},[174,2215,2216],{"class":902},"INCLUDE",[174,2218,1037],{"class":945},[174,2220,636],{"class":898},[174,2222,951],{"class":898},[174,2224,2225],{"class":190},"sidebar",[174,2227,951],{"class":898},[174,2229,918],{"class":898},[337,2231,2233],{"id":2232},"escaping","Escaping",[64,2235,2236,2237,139,2240,139,2243,978,2246,2249,2250,2253],{},"The parser strips PHP from templates, so ",[68,2238,2239],{},"\u003C?php ?>",[68,2241,2242],{},"\u003C? ?>",[68,2244,2245],{},"\u003C% %>",[68,2247,2248],{},"\u003Cscript language=\"php\">"," blocks never survive compilation. Wrap markup in ",[68,2251,2252],{},"\u003CIGNORE>"," to hide it from the parser entirely — useful for JavaScript or CSS that would otherwise look like a template tag.",[165,2255,2257],{"className":888,"code":2256,"filename":1844,"language":891,"meta":170,"style":170},"\u003CIGNORE>\n\u003Cscript>const tpl = { name: \"{not a variable}\" };\u003C\u002Fscript>\n\u003C\u002FIGNORE>\n",[68,2258,2259,2268,2309],{"__ignoreMap":170},[174,2260,2261,2263,2266],{"class":176,"line":177},[174,2262,899],{"class":898},[174,2264,2265],{"class":902},"IGNORE",[174,2267,918],{"class":898},[174,2269,2270,2272,2275,2277,2280,2283,2285,2288,2291,2294,2297,2300,2302,2305,2307],{"class":176,"line":184},[174,2271,899],{"class":898},[174,2273,2274],{"class":902},"script",[174,2276,906],{"class":898},[174,2278,2279],{"class":945},"const",[174,2281,2282],{"class":909}," tpl ",[174,2284,636],{"class":898},[174,2286,2287],{"class":898}," {",[174,2289,2290],{"class":902}," name",[174,2292,2293],{"class":898},":",[174,2295,2296],{"class":898}," \"",[174,2298,2299],{"class":190},"{not a variable}",[174,2301,951],{"class":898},[174,2303,2304],{"class":898}," };\u003C\u002F",[174,2306,2274],{"class":902},[174,2308,918],{"class":898},[174,2310,2311,2313,2315],{"class":176,"line":194},[174,2312,913],{"class":898},[174,2314,2265],{"class":902},[174,2316,918],{"class":898},[88,2318,2320],{"id":2319},"template-variables","Template variables",[337,2322,2324],{"id":2323},"paths","Paths",[342,2326,2327,2337],{},[345,2328,2329],{},[348,2330,2331,2334],{},[351,2332,2333],{},"Variable",[351,2335,2336],{},"Points to",[361,2338,2339,2357,2367,2377],{},[348,2340,2341,2346],{},[366,2342,2343],{},[68,2344,2345],{},"{STYLE_PATH}",[366,2347,2348,2349,2353,2354,2356],{},"URL of the ",[2350,2351,2352],"strong",{},"parent"," style when ",[68,2355,849],{}," is set, otherwise the active style. Use it for inherited assets.",[348,2358,2359,2364],{},[366,2360,2361],{},[68,2362,2363],{},"{THIS_STYLE_PATH}",[366,2365,2366],{},"URL of the active style folder. Use it for your own overrides.",[348,2368,2369,2374],{},[366,2370,2371],{},[68,2372,2373],{},"{STYLE_PATH_ADMIN}",[366,2375,2376],{},"URL of the admin theme.",[348,2378,2379,2384],{},[366,2380,2381],{},[68,2382,2383],{},"{DEFAULT_PATH_ADMIN}",[366,2385,2386],{},"URL of the default admin theme.",[864,2388,2389,2390,2392,2393,2395,2396,2399,2400,2403],{},"In a child style, ",[68,2391,2345],{}," resolves to the parent. Loading ",[68,2394,966],{}," then ",[68,2397,2398],{},"{THIS_STYLE_PATH}css\u002Fstylesheet.css"," gives you the parent's stylesheet followed by your overrides — exactly what ",[68,2401,2402],{},"bootstrap_black"," does.",[337,2405,2407],{"id":2406},"page-and-user","Page and user",[342,2409,2410,2419],{},[345,2411,2412],{},[348,2413,2414,2416],{},[351,2415,2333],{},[351,2417,2418],{},"Contents",[361,2420,2421,2431,2448,2461,2470,2480,2489,2499,2514,2527,2537],{},[348,2422,2423,2428],{},[366,2424,2425],{},[68,2426,2427],{},"{title}",[366,2429,2430],{},"Page title.",[348,2432,2433,2438],{},[366,2434,2435],{},[68,2436,2437],{},"{dir}",[366,2439,2440,2441,1688,2444,2447],{},"Text direction, ",[68,2442,2443],{},"rtl",[68,2445,2446],{},"ltr",", from the active language.",[348,2449,2450,2455],{},[366,2451,2452],{},[68,2453,2454],{},"{charset}",[366,2456,2457,2458,86],{},"Character set, always ",[68,2459,2460],{},"utf-8",[348,2462,2463,2467],{},[366,2464,2465],{},[68,2466,1983],{},[366,2468,2469],{},"The visitor's name, or the guest label.",[348,2471,2472,2477],{},[366,2473,2474],{},[68,2475,2476],{},"{user_is}",[366,2478,2479],{},"True when the visitor is logged in.",[348,2481,2482,2486],{},[366,2483,2484],{},[68,2485,1972],{},[366,2487,2488],{},"Gravatar URL, falling back to the style's default avatar.",[348,2490,2491,2496],{},[366,2492,2493],{},[68,2494,2495],{},"{userinfo.*}",[366,2497,2498],{},"The logged-in user's row.",[348,2500,2501,2506],{},[366,2502,2503],{},[68,2504,2505],{},"{config.*}",[366,2507,2508,2509,1688,2511,86],{},"Any setting from the admin panel, such as ",[68,2510,149],{},[68,2512,2513],{},"{config.siteurl}",[348,2515,2516,2521],{},[366,2517,2518],{},[68,2519,2520],{},"{lang.*}",[366,2522,2523,2524,86],{},"Language strings from ",[68,2525,2526],{},"lang\u002F\u003Ccode>\u002F",[348,2528,2529,2534],{},[366,2530,2531],{},[68,2532,2533],{},"{olang.*}",[366,2535,2536],{},"Language strings added by plugins.",[348,2538,2539,2544],{},[366,2540,2541],{},[68,2542,2543],{},"{text}",[366,2545,2546,2547,978,2549,86],{},"The message body in ",[68,2548,429],{},[68,2550,444],{},[337,2552,2554],{"id":2553},"menus-and-blocks","Menus and blocks",[342,2556,2557,2565],{},[345,2558,2559],{},[348,2560,2561,2563],{},[351,2562,2333],{},[351,2564,2418],{},[361,2566,2567,2586,2596,2606,2616,2626,2640,2649,2659,2671,2681],{},[348,2568,2569,2574],{},[366,2570,2571],{},[68,2572,2573],{},"{top_menu}",[366,2575,2576,2577,139,2579,139,2581,139,2583,86],{},"Loop of the top navigation: ",[68,2578,2168],{},[68,2580,1099],{},[68,2582,1092],{},[68,2584,2585],{},"{{show}}",[348,2587,2588,2593],{},[366,2589,2590],{},[68,2591,2592],{},"{side_menu}",[366,2594,2595],{},"Loop of the user menu, with the same fields.",[348,2597,2598,2603],{},[366,2599,2600],{},[68,2601,2602],{},"{go_current}",[366,2604,2605],{},"Name of the current page, for marking the active menu item.",[348,2607,2608,2613],{},[366,2609,2610],{},[68,2611,2612],{},"{extras.header}",[366,2614,2615],{},"Extra HTML injected above the content.",[348,2617,2618,2623],{},[366,2619,2620],{},[68,2621,2622],{},"{extras.footer}",[366,2624,2625],{},"Extra HTML injected below the content.",[348,2627,2628,2633],{},[366,2629,2630],{},[68,2631,2632],{},"{EXTRA_CODE_META}",[366,2634,2635,2636,2639],{},"Extra tags for the ",[68,2637,2638],{},"\u003Chead>",", where plugins add meta tags.",[348,2641,2642,2646],{},[366,2643,2644],{},[68,2645,1872],{},[366,2647,2648],{},"Generation time and query count, when enabled.",[348,2650,2651,2656],{},[366,2652,2653],{},[68,2654,2655],{},"{admin_page}",[366,2657,2658],{},"Link to the admin panel, shown to administrators.",[348,2660,2661,2666],{},[366,2662,2663],{},[68,2664,2665],{},"{run_queue}",[366,2667,2668,2669,86],{},"The queue pixel. Keep it in ",[68,2670,384],{},[348,2672,2673,2678],{},[366,2674,2675],{},[68,2676,2677],{},"{googleanalytics}",[366,2679,2680],{},"Analytics snippet, when configured.",[348,2682,2683,2688],{},[366,2684,2685],{},[68,2686,2687],{},"{go_back_browser}",[366,2689,2690],{},"Localised \"go back\" label.",[610,2692,2693,2695,2696,2698],{},[68,2694,384],{}," must keep ",[68,2697,2665],{},". It triggers Kleeja's scheduled tasks, including old-file cleanup, and dropping it silently stops them.",[88,2700,2702],{"id":2701},"upload-result-blocks","Upload result blocks",[64,2704,2705,2707,2708,2711],{},[68,2706,414],{}," is not a normal template. Kleeja splits it into named blocks and does a plain ",[68,2709,2710],{},"{var}"," replacement, with no conditions or loops. Blocks are delimited by HTML comments.",[165,2713,2716],{"className":888,"code":2714,"filename":2715,"language":891,"meta":170,"style":170},"\u003C!-- BEGIN image -->\n    \u003Ctable class=\"up_box_input\">\n        \u003Ctr>\n            \u003Ctd class=\"btitle\">{b_title}\u003C\u002Ftd>\n            \u003Ctd>\u003Ctextarea readonly rows=\"1\">{b_url_link}\u003C\u002Ftextarea>\u003C\u002Ftd>\n        \u003C\u002Ftr>\n    \u003C\u002Ftable>\n\u003C!-- END image -->\n","styles\u002Fmy_style\u002Fup_boxes.html",[68,2717,2718,2723,2742,2750,2778,2819,2827,2835],{"__ignoreMap":170},[174,2719,2720],{"class":176,"line":177},[174,2721,2722],{"class":203},"\u003C!-- BEGIN image -->\n",[174,2724,2725,2727,2729,2731,2733,2735,2738,2740],{"class":176,"line":184},[174,2726,1031],{"class":898},[174,2728,342],{"class":902},[174,2730,1015],{"class":945},[174,2732,636],{"class":898},[174,2734,951],{"class":898},[174,2736,2737],{"class":190},"up_box_input",[174,2739,951],{"class":898},[174,2741,918],{"class":898},[174,2743,2744,2746,2748],{"class":176,"line":194},[174,2745,1053],{"class":898},[174,2747,348],{"class":902},[174,2749,918],{"class":898},[174,2751,2752,2754,2756,2758,2760,2762,2765,2767,2769,2772,2774,2776],{"class":176,"line":207},[174,2753,1209],{"class":898},[174,2755,366],{"class":902},[174,2757,1015],{"class":945},[174,2759,636],{"class":898},[174,2761,951],{"class":898},[174,2763,2764],{"class":190},"btitle",[174,2766,951],{"class":898},[174,2768,906],{"class":898},[174,2770,2771],{"class":909},"{b_title}",[174,2773,913],{"class":898},[174,2775,366],{"class":902},[174,2777,918],{"class":898},[174,2779,2780,2782,2784,2786,2789,2792,2795,2797,2799,2802,2804,2806,2809,2811,2813,2815,2817],{"class":176,"line":218},[174,2781,1209],{"class":898},[174,2783,366],{"class":902},[174,2785,1080],{"class":898},[174,2787,2788],{"class":902},"textarea",[174,2790,2791],{"class":945}," readonly",[174,2793,2794],{"class":945}," rows",[174,2796,636],{"class":898},[174,2798,951],{"class":898},[174,2800,2801],{"class":190},"1",[174,2803,951],{"class":898},[174,2805,906],{"class":898},[174,2807,2808],{"class":909},"{b_url_link}",[174,2810,913],{"class":898},[174,2812,2788],{"class":902},[174,2814,1106],{"class":898},[174,2816,366],{"class":902},[174,2818,918],{"class":898},[174,2820,2821,2823,2825],{"class":176,"line":229},[174,2822,1115],{"class":898},[174,2824,348],{"class":902},[174,2826,918],{"class":898},[174,2828,2829,2831,2833],{"class":176,"line":240},[174,2830,1124],{"class":898},[174,2832,342],{"class":902},[174,2834,918],{"class":898},[174,2836,2837],{"class":176,"line":251},[174,2838,2839],{"class":203},"\u003C!-- END image -->\n",[342,2841,2842,2852],{},[345,2843,2844],{},[348,2845,2846,2849],{},[351,2847,2848],{},"Block",[351,2850,2851],{},"Shown for",[361,2853,2854,2864,2874,2884],{},[348,2855,2856,2861],{},[366,2857,2858],{},[68,2859,2860],{},"image_thumb",[366,2862,2863],{},"An uploaded image with a thumbnail.",[348,2865,2866,2871],{},[366,2867,2868],{},[68,2869,2870],{},"image",[366,2872,2873],{},"An uploaded image, direct and BBCode links.",[348,2875,2876,2881],{},[366,2877,2878],{},[68,2879,2880],{},"file",[366,2882,2883],{},"A non-image upload.",[348,2885,2886,2891],{},[366,2887,2888],{},[68,2889,2890],{},"del_file_code",[366,2892,2893],{},"The deletion code for the upload.",[64,2895,2896,2897,139,2899,139,2902,139,2904,139,2907,2910,2911,978,2914,2917],{},"Available placeholders are ",[68,2898,2771],{},[68,2900,2901],{},"{b_bbc_title}",[68,2903,2808],{},[68,2905,2906],{},"{b_img_link}",[68,2908,2909],{},"{b_code_link}",", plus ",[68,2912,2913],{},"{siteurl}",[68,2915,2916],{},"{sitename}",". All four blocks must exist, because the uploader requests them by name.",[88,2919,2921],{"id":2920},"style-inheritance","Style inheritance",[64,2923,2924,2925,2927,2928,2930,2931,978,2933,2935],{},"Set ",[68,2926,849],{}," in ",[68,2929,628],{}," to build on an existing style. Activating the child writes both ",[68,2932,100],{},[68,2934,104],{}," to the settings, and the engine then resolves every missing template against the parent.",[165,2937,2940],{"className":640,"code":2938,"filename":2939,"language":643,"meta":170,"style":170},"name = Bootstrap Black\nversion = 1.0\nkleeja_version = 2.0\ndepend_on = bootstrap\n","styles\u002Fbootstrap_black\u002Finfo.txt",[68,2941,2942,2947,2951,2956],{"__ignoreMap":170},[174,2943,2944],{"class":176,"line":177},[174,2945,2946],{},"name = Bootstrap Black\n",[174,2948,2949],{"class":176,"line":184},[174,2950,724],{},[174,2952,2953],{"class":176,"line":194},[174,2954,2955],{},"kleeja_version = 2.0\n",[174,2957,2958],{"class":176,"line":207},[174,2959,2960],{},"depend_on = bootstrap\n",[64,2962,2963],{},"Template resolution runs in this order:",[2965,2966,2967,2971,2976,2980,2986,2990],"steps",{},[337,2968,2970],{"id":2969},"the-active-style","The active style",[64,2972,2973,86],{},[68,2974,2975],{},"styles\u002F\u003Cstyle>\u002F\u003Ctemplate>.html",[337,2977,2979],{"id":2978},"the-parent-style","The parent style",[64,2981,2982,2983,2985],{},"When ",[68,2984,104],{}," is set, the same filename under the parent folder.",[337,2987,2989],{"id":2988},"the-default-style","The default style",[64,2991,2992,2993,2995,2996,86],{},"When the style has no parent and is not ",[68,2994,119],{}," itself, the same filename under ",[68,2997,2998],{},"styles\u002Fdefault\u002F",[1824,3000,3001,3002,3004,3005,3008,3009,3011],{},"The fallbacks are mutually exclusive. A style that declares ",[68,3003,849],{}," falls back ",[2350,3006,3007],{},"only"," to its parent, never to ",[68,3010,119],{},". Make sure the parent is complete, or ship the missing templates yourself.",[64,3013,3014,3015,3017,3018,2293],{},"Inside a child style, load the parent's assets through ",[68,3016,2345],{}," and your own through ",[68,3019,2363],{},[165,3021,3024],{"className":888,"code":3022,"filename":3023,"language":891,"meta":170,"style":170},"\u003Clink href=\"{STYLE_PATH}css\u002Fbootstrap.min.css\" rel=\"stylesheet\">\n\u003Clink href=\"{STYLE_PATH}css\u002Fstylesheet.css\" rel=\"stylesheet\">\n\u003Clink href=\"{THIS_STYLE_PATH}css\u002Fstylesheet.css\" rel=\"stylesheet\">\n","styles\u002Fbootstrap_black\u002Fheader.html",[68,3025,3026,3055,3083],{"__ignoreMap":170},[174,3027,3028,3030,3032,3034,3036,3038,3041,3043,3045,3047,3049,3051,3053],{"class":176,"line":177},[174,3029,899],{"class":898},[174,3031,942],{"class":902},[174,3033,959],{"class":945},[174,3035,636],{"class":898},[174,3037,951],{"class":898},[174,3039,3040],{"class":190},"{STYLE_PATH}css\u002Fbootstrap.min.css",[174,3042,951],{"class":898},[174,3044,946],{"class":945},[174,3046,636],{"class":898},[174,3048,951],{"class":898},[174,3050,954],{"class":190},[174,3052,951],{"class":898},[174,3054,918],{"class":898},[174,3056,3057,3059,3061,3063,3065,3067,3069,3071,3073,3075,3077,3079,3081],{"class":176,"line":184},[174,3058,899],{"class":898},[174,3060,942],{"class":902},[174,3062,959],{"class":945},[174,3064,636],{"class":898},[174,3066,951],{"class":898},[174,3068,966],{"class":190},[174,3070,951],{"class":898},[174,3072,946],{"class":945},[174,3074,636],{"class":898},[174,3076,951],{"class":898},[174,3078,954],{"class":190},[174,3080,951],{"class":898},[174,3082,918],{"class":898},[174,3084,3085,3087,3089,3091,3093,3095,3097,3099,3101,3103,3105,3107,3109],{"class":176,"line":194},[174,3086,899],{"class":898},[174,3088,942],{"class":902},[174,3090,959],{"class":945},[174,3092,636],{"class":898},[174,3094,951],{"class":898},[174,3096,2398],{"class":190},[174,3098,951],{"class":898},[174,3100,946],{"class":945},[174,3102,636],{"class":898},[174,3104,951],{"class":898},[174,3106,954],{"class":190},[174,3108,951],{"class":898},[174,3110,918],{"class":898},[88,3112,3114],{"id":3113},"assets-and-direction","Assets and direction",[64,3116,3117,3118,3121,3122,3125],{},"Keep stylesheets in ",[68,3119,3120],{},"css\u002F"," and graphics in ",[68,3123,3124],{},"images\u002F",", and reference them through a path variable so the style keeps working after it is renamed or inherited.",[64,3127,3128,3129,3131,3132,1688,3134,3136],{},"Kleeja ships Arabic and English, so a style must handle both directions. The ",[68,3130,2437],{}," variable carries ",[68,3133,2443],{},[68,3135,2446],{},", which lets you set the document direction and load a direction-specific stylesheet:",[165,3138,3140],{"className":888,"code":3139,"filename":890,"language":891,"meta":170,"style":170},"\u003Chtml dir=\"{dir}\">\n...\n\u003CIF NAME=\"lang.DIR==ltr\">\n    \u003Clink rel=\"stylesheet\" href=\"{STYLE_PATH}css\u002Fltr.css\" \u002F>\n\u003C\u002FIF>\n",[68,3141,3142,3161,3166,3185,3214],{"__ignoreMap":170},[174,3143,3144,3146,3148,3151,3153,3155,3157,3159],{"class":176,"line":177},[174,3145,899],{"class":898},[174,3147,891],{"class":902},[174,3149,3150],{"class":945}," dir",[174,3152,636],{"class":898},[174,3154,951],{"class":898},[174,3156,2437],{"class":190},[174,3158,951],{"class":898},[174,3160,918],{"class":898},[174,3162,3163],{"class":176,"line":184},[174,3164,3165],{"class":909},"...\n",[174,3167,3168,3170,3172,3174,3176,3178,3181,3183],{"class":176,"line":194},[174,3169,899],{"class":898},[174,3171,1056],{"class":902},[174,3173,1037],{"class":945},[174,3175,636],{"class":898},[174,3177,951],{"class":898},[174,3179,3180],{"class":190},"lang.DIR==ltr",[174,3182,951],{"class":898},[174,3184,918],{"class":898},[174,3186,3187,3189,3191,3193,3195,3197,3199,3201,3203,3205,3207,3210,3212],{"class":176,"line":207},[174,3188,1031],{"class":898},[174,3190,942],{"class":902},[174,3192,946],{"class":945},[174,3194,636],{"class":898},[174,3196,951],{"class":898},[174,3198,954],{"class":190},[174,3200,951],{"class":898},[174,3202,959],{"class":945},[174,3204,636],{"class":898},[174,3206,951],{"class":898},[174,3208,3209],{"class":190},"{STYLE_PATH}css\u002Fltr.css",[174,3211,951],{"class":898},[174,3213,971],{"class":898},[174,3215,3216,3218,3220],{"class":176,"line":218},[174,3217,913],{"class":898},[174,3219,1056],{"class":902},[174,3221,918],{"class":898},[64,3223,3224,3225,3228],{},"Add a ",[68,3226,3227],{},"screenshot.png"," to the style folder for a thumbnail in the style list. Without it, the admin panel shows a generic icon.",[88,3230,3232],{"id":3231},"development-workflow","Development workflow",[64,3234,3235,3236,3239,3240,3243],{},"Compiled templates are cached in ",[68,3237,3238],{},"cache\u002F",", so edits to an ",[68,3241,3242],{},".html"," file are invisible until the cache is cleared. Turn caching off while you work:",[165,3245,3250],{"className":3246,"code":3247,"filename":3248,"language":3249,"meta":170,"style":170},"language-php shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","define('DEV_STAGE', true);\n","config.php","php",[68,3251,3252],{"__ignoreMap":170},[174,3253,3254],{"class":176,"line":177},[174,3255,3247],{},[64,3257,3258,3261,3262,3265],{},[68,3259,3260],{},"DEV_STAGE"," disables template caching, reports all PHP errors and adds a debug link to the footer. To keep caching off without the rest of the debug output, use ",[68,3263,3264],{},"STOP_TPL_CACHE"," instead.",[322,3267,3268,3269,3272],{},"On a live site, clear the cache from ",[2350,3270,3271],{},"Admin → Repair → Clear cache"," after uploading a changed template. Activating a style clears it automatically.",[337,3274,3276],{"id":3275},"reading-the-compiled-output","Reading the compiled output",[64,3278,3279,3280,3283,3284,3287],{},"Each template compiles to ",[68,3281,3282],{},"cache\u002Ftpl_\u003Cname>.php",", with the name lowercased and every character outside ",[68,3285,3286],{},"a-z0-9-_"," replaced by a hyphen. Opening that file is the quickest way to see what a tag turned into when a template misbehaves.",[88,3289,3291],{"id":3290},"managing-styles","Managing styles",[64,3293,3294,3295,3298,3299,3301],{},"Administrators work with styles in ",[2350,3296,3297],{},"Admin → Styles",". The page lists the styles present in ",[68,3300,70],{}," and, on the store tab, the styles available in the remote catalog.",[342,3303,3304,3314],{},[345,3305,3306],{},[348,3307,3308,3311],{},[351,3309,3310],{},"Action",[351,3312,3313],{},"Effect",[361,3315,3316,3329,3343,3351],{},[348,3317,3318,3321],{},[366,3319,3320],{},"Select",[366,3322,3323,3324,978,3326,3328],{},"Writes ",[68,3325,100],{},[68,3327,104],{},", then clears the cache. Runs the parent, version and required-plugin checks first.",[348,3330,3331,3334],{},[366,3332,3333],{},"Upload",[366,3335,3336,3337,3340,3341,86],{},"Extracts an uploaded ",[68,3338,3339],{},".zip"," into ",[68,3342,70],{},[348,3344,3345,3348],{},[366,3346,3347],{},"Download",[366,3349,3350],{},"Fetches and extracts a style from the remote catalog, with automatic rollback on failure. Founder accounts only.",[348,3352,3353,3356],{},[366,3354,3355],{},"Delete folder",[366,3357,3358],{},"Removes the style folder. The active style cannot be deleted.",[64,3360,3361,3362,3364,3365,3367,3368,3370],{},"Activation fails with a specific error in three cases: the folder named by ",[68,3363,849],{}," is missing, ",[68,3366,839],{}," is newer than the running Kleeja, or a plugin listed in ",[68,3369,859],{}," is missing or disabled.",[88,3372,3374],{"id":3373},"packaging-and-distribution","Packaging and distribution",[64,3376,3377,3378,3380,3381,86],{},"Ship a style as a ",[68,3379,3339],{}," containing one top-level folder, the same shape as the folder in ",[68,3382,70],{},[165,3384,3387],{"className":167,"code":3385,"filename":3386,"language":169,"meta":170,"style":170},"zip -r my_style.zip my_style -x \"*.git*\"\n","Terminal",[68,3388,3389],{"__ignoreMap":170},[174,3390,3391,3394,3397,3400,3403,3406,3408,3411],{"class":176,"line":177},[174,3392,3393],{"class":180},"zip",[174,3395,3396],{"class":190}," -r",[174,3398,3399],{"class":190}," my_style.zip",[174,3401,3402],{"class":190}," my_style",[174,3404,3405],{"class":190}," -x",[174,3407,2296],{"class":898},[174,3409,3410],{"class":190},"*.git*",[174,3412,3413],{"class":898},"\"\n",[64,3415,3416,3417,3419,3420,3422],{},"Administrators upload the archive in ",[2350,3418,3297],{},", and Kleeja extracts it directly into ",[68,3421,70],{},". Styles listed in the public catalog install with one click:",[3424,3425,3429],"read-more",{"to":3426,"icon":3427,"target":3428},"https:\u002F\u002Fgithub.com\u002Fkleeja-official\u002Fstore-catalog","i-simple-icons-github","_blank","The Kleeja store catalog.",[88,3431,3433],{"id":3432},"the-admin-theme","The admin theme",[64,3435,3436,3437,3440,3441,3444],{},"The admin panel uses its own theme, fixed to ",[68,3438,3439],{},"admin\u002FMasmak\u002F",", whose templates are the files beginning with ",[68,3442,3443],{},"admin_",". The engine routes any template name with that prefix to the admin theme instead of the active style.",[64,3446,3447,3448,3451,3452,3455],{},"Admin templates are not part of a front-end style. To replace them, ship a plugin that rewrites the admin path variables — the bundled ",[68,3449,3450],{},"zaki_admin_theme"," does exactly that from the ",[68,3453,3454],{},"end_common"," hook.",[3424,3457,3459],{"to":3458},"\u002Fplugins\u002Fen","See the plugin documentation for the full hook and path-override example.",[88,3461,3463],{"id":3462},"troubleshooting","Troubleshooting",[342,3465,3466,3476],{},[345,3467,3468],{},[348,3469,3470,3473],{},[351,3471,3472],{},"Symptom",[351,3474,3475],{},"Cause",[361,3477,3478,3493,3504,3521,3529,3539],{},[348,3479,3480,3484],{},[366,3481,3482],{},[68,3483,618],{},[366,3485,3486,3487,3489,3490,3492],{},"The template does not exist in the style, its parent, or ",[68,3488,119],{},". Check the filename and the ",[68,3491,849],{}," chain.",[348,3494,3495,3498],{},[366,3496,3497],{},"Edits do nothing",[366,3499,3500,3501,3503],{},"The compiled template is cached. Enable ",[68,3502,3260],{}," or clear the cache.",[348,3505,3506,3513],{},[366,3507,3508,3509,3512],{},"A ",[68,3510,3511],{},"{variable}"," prints literally",[366,3514,3515,3516,978,3518,3520],{},"For ",[68,3517,2520],{},[68,3519,2533],{}," the key is missing. For anything else the global does not exist on that page.",[348,3522,3523,3526],{},[366,3524,3525],{},"A blank page after editing a condition",[366,3527,3528],{},"A comparison value containing a digit compiled to invalid PHP. Quote-free values must be pure text or pure numbers.",[348,3530,3531,3534],{},[366,3532,3533],{},"JavaScript breaks after compilation",[366,3535,3536,3537,86],{},"Braces in the script looked like template tags. Wrap the block in ",[68,3538,2252],{},[348,3540,3541,3544],{},[366,3542,3543],{},"Scheduled cleanup stopped",[366,3545,3546,3548,3549,86],{},[68,3547,2665],{}," was removed from ",[68,3550,384],{},[88,3552,3554],{"id":3553},"reference","Reference",[337,3556,3558],{"id":3557},"tags","Tags",[342,3560,3561,3571],{},[345,3562,3563],{},[348,3564,3565,3568],{},[351,3566,3567],{},"Tag",[351,3569,3570],{},"Compiles to",[361,3572,3573,3585,3594,3605,3618,3628,3641,3651,3661,3674,3684,3694,3704,3714,3724],{},[348,3574,3575,3582],{},[366,3576,3577,139,3579],{},[68,3578,2710],{},[68,3580,3581],{},"{a.b}",[366,3583,3584],{},"Print a global variable.",[348,3586,3587,3591],{},[366,3588,3589],{},[68,3590,1254],{},[366,3592,3593],{},"Print a field of the current loop row.",[348,3595,3596,3602],{},[366,3597,3598,139,3600],{},[68,3599,995],{},[68,3601,999],{},[366,3603,3604],{},"Print the current loop key or value.",[348,3606,3607,3612],{},[366,3608,3609],{},[68,3610,3611],{},"\u003CLOOP NAME=\"x\"> … \u003C\u002FLOOP>",[366,3613,3614,3617],{},[68,3615,3616],{},"foreach"," over an array.",[348,3619,3620,3625],{},[366,3621,3622],{},[68,3623,3624],{},"\u003CIF NAME=\"x\"> … \u003C\u002FIF>",[366,3626,3627],{},"Conditional block.",[348,3629,3630,3638],{},[366,3631,3632,139,3635],{},[68,3633,3634],{},"\u003CELSEIF …>",[68,3636,3637],{},"\u003CELSE>",[366,3639,3640],{},"Condition chain.",[348,3642,3643,3648],{},[366,3644,3645],{},[68,3646,3647],{},"\u003CUNLESS …> … \u003C\u002FUNLESS>",[366,3649,3650],{},"Inverted condition.",[348,3652,3653,3658],{},[366,3654,3655],{},[68,3656,3657],{},"(cond?a:b)",[366,3659,3660],{},"Inline condition.",[348,3662,3663,3668],{},[366,3664,3665],{},[68,3666,3667],{},"\u003CIS_BROWSER=\"x\"> … \u003C\u002FIS_BROWSER>",[366,3669,3670,3671,3673],{},"Browser test, ",[68,3672,1540],{}," to invert.",[348,3675,3676,3681],{},[366,3677,3678],{},[68,3679,3680],{},"\u003CODD=\"field\"> … \u003C\u002FODD>",[366,3682,3683],{},"Render on odd values.",[348,3685,3686,3691],{},[366,3687,3688],{},[68,3689,3690],{},"\u003CEVEN=\"field\"> … \u003C\u002FEVEN>",[366,3692,3693],{},"Render on even values.",[348,3695,3696,3701],{},[366,3697,3698],{},[68,3699,3700],{},"\u003CRAND=\"a\",\"b\">",[366,3702,3703],{},"Alternate between two strings.",[348,3705,3706,3711],{},[366,3707,3708],{},[68,3709,3710],{},"\u003CINCLUDE NAME=\"tpl\">",[366,3712,3713],{},"Render another template.",[348,3715,3716,3721],{},[366,3717,3718],{},[68,3719,3720],{},"\u003CIGNORE> … \u003C\u002FIGNORE>",[366,3722,3723],{},"Hide a block from the parser.",[348,3725,3726,3730],{},[366,3727,3728],{},[68,3729,1711],{},[366,3731,3732],{},"Generic closing tag.",[337,3734,3736],{"id":3735},"engine-api","Engine API",[342,3738,3739,3749],{},[345,3740,3741],{},[348,3742,3743,3746],{},[351,3744,3745],{},"Method",[351,3747,3748],{},"Signature",[361,3750,3751,3762,3774,3786,3802,3815],{},[348,3752,3753,3757],{},[366,3754,3755],{},[68,3756,130],{},[366,3758,3759],{},[68,3760,3761],{},"display(string $template_name, string $style_path = ''): string",[348,3763,3764,3769],{},[366,3765,3766],{},[68,3767,3768],{},"assign()",[366,3770,3771],{},[68,3772,3773],{},"assign(string $var, mixed $to): void",[348,3775,3776,3781],{},[366,3777,3778],{},[68,3779,3780],{},"template_exists()",[366,3782,3783],{},[68,3784,3785],{},"template_exists(string $template_name, string $style_path = ''): string|false",[348,3787,3788,3793],{},[366,3789,3790],{},[68,3791,3792],{},"kleeja_style_info()",[366,3794,3795,3798,3799],{},[68,3796,3797],{},"kleeja_style_info(string $style_name): array|false"," — ",[68,3800,3801],{},"includes\u002Ffunctions_display.php",[348,3803,3804,3808],{},[366,3805,3806],{},[68,3807,419],{},[366,3809,3810,3798,3813],{},[68,3811,3812],{},"get_up_tpl_box(string $box_name, array $extra = []): string",[68,3814,3801],{},[348,3816,3817,3822],{},[366,3818,3819],{},[68,3820,3821],{},"is_browser()",[366,3823,3824,3798,3827],{},[68,3825,3826],{},"is_browser(string $b): bool",[68,3828,3801],{},[337,3830,3832],{"id":3831},"settings-and-constants","Settings and constants",[342,3834,3835,3844],{},[345,3836,3837],{},[348,3838,3839,3842],{},[351,3840,3841],{},"Name",[351,3843,1434],{},[361,3845,3846,3856,3866,3879,3888,3897],{},[348,3847,3848,3853],{},[366,3849,3850],{},[68,3851,3852],{},"config.style",[366,3854,3855],{},"Folder name of the active style.",[348,3857,3858,3863],{},[366,3859,3860],{},[68,3861,3862],{},"config.style_depend_on",[366,3864,3865],{},"Folder name of the parent style, or empty.",[348,3867,3868,3873],{},[366,3869,3870],{},[68,3871,3872],{},"ACP_STYLE_NAME",[366,3874,3875,3876,86],{},"The admin theme folder, ",[68,3877,3878],{},"Masmak",[348,3880,3881,3885],{},[366,3882,3883],{},[68,3884,3260],{},[366,3886,3887],{},"Disables template caching and enables debug output.",[348,3889,3890,3894],{},[366,3891,3892],{},[68,3893,3264],{},[366,3895,3896],{},"Disables template caching only.",[348,3898,3899,3903],{},[366,3900,3901],{},[68,3902,2203],{},[366,3904,3905],{},"Absolute filesystem path to the Kleeja root, with a trailing slash.",[100,3907,3908],{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}",{"title":170,"searchDepth":184,"depth":184,"links":3910},[3911,3912,3915,3916,3926,3931,3932,3937,3938,3941,3942,3943,3944,3945],{"id":90,"depth":184,"text":91},{"id":156,"depth":184,"text":157,"children":3913},[3914],{"id":339,"depth":194,"text":340},{"id":621,"depth":184,"text":622},{"id":874,"depth":184,"text":875,"children":3917},[3918,3919,3920,3921,3922,3923,3924,3925],{"id":881,"depth":194,"text":882},{"id":985,"depth":194,"text":986},{"id":1258,"depth":194,"text":1259},{"id":1833,"depth":194,"text":1834},{"id":1933,"depth":194,"text":1934},{"id":2091,"depth":194,"text":2092},{"id":2193,"depth":194,"text":2194},{"id":2232,"depth":194,"text":2233},{"id":2319,"depth":184,"text":2320,"children":3927},[3928,3929,3930],{"id":2323,"depth":194,"text":2324},{"id":2406,"depth":194,"text":2407},{"id":2553,"depth":194,"text":2554},{"id":2701,"depth":184,"text":2702},{"id":2920,"depth":184,"text":2921,"children":3933},[3934,3935,3936],{"id":2969,"depth":194,"text":2970},{"id":2978,"depth":194,"text":2979},{"id":2988,"depth":194,"text":2989},{"id":3113,"depth":184,"text":3114},{"id":3231,"depth":184,"text":3232,"children":3939},[3940],{"id":3275,"depth":194,"text":3276},{"id":3290,"depth":184,"text":3291},{"id":3373,"depth":184,"text":3374},{"id":3432,"depth":184,"text":3433},{"id":3462,"depth":184,"text":3463},{"id":3553,"depth":184,"text":3554,"children":3946},[3947,3948,3949],{"id":3557,"depth":194,"text":3558},{"id":3735,"depth":194,"text":3736},{"id":3831,"depth":194,"text":3832},"Learn how to build your own styles for Kleeja.","md",null,{},{"icon":57},{"title":3956,"description":3957},"Kleeja styles development","A guide to building your own styles for Kleeja.","PBZxpEx6Or-iOxI9eiCuXUsO6UKaIDqY6dPmrv5iUk8",[3960,3952],{"title":49,"path":50,"stem":51,"description":3961,"icon":52,"children":-1},"Learn how to build your own plugins for Kleeja.",1788049177287]