Version 5.0.0 beta 10

This commit is contained in:
Neo committed 2025-12-19 17:53:48 -08:00
1 parent 56979f8ee8
commit 264eeb97e0
325 files changed
+6442 -1849

No files matched your search

+1 -1
View File
@@ -1 +1 @@
.ipsTemplateEditor{overflow:hidden;}.ipsTemplateEditor__columns{display:grid;grid-template-columns:280px 1fr;height:calc(100vh - 200px);min-height:570px;}.ipsTemplateEditor__listColumn, .ipsTemplateEditor__codeColumn{display:flex;flex-direction:column;}:where(:is(.ipsTemplateEditor__listColumn, .ipsTemplateEditor__codeColumn) > *){flex:0 0 auto;}.ipsTemplateEditor__listColumn{border-inline-end:1px solid var(--i-background_4);}.cTemplateControls{padding:.5em;background:var(--i-background_2);min-height:60px;align-content:center;}.cTemplateControls__input{display:flex;background:var(--i-background_1);border:1px solid var(--i-background_5);border-radius:8px;}.cTemplateControls__input:has([type="text"]:focus){border-color:currentColor;}.cTemplateControls__input [type="text"]{flex:1 1 100%;outline-width:0;padding:.8em 1em;}.cTemplateControls__filter{flex:0 0 auto;display:flex;align-items:center;gap:.4em;padding:0 .7em;color:var(--i-color_soft);}.cTemplateControls__filter:hover{color:var(--i-color_hard);}.cTemplateControls__filter .fa-caret-down{font-size:10px;opacity:.5;}#elTemplateEditor_info{display:flex;justify-content:space-evenly;font-size:.8em;background:var(--i-background_1);padding:1em 0;border-top:1px solid var(--i-background_3);}#elTemplateEditor_newButton{background:var(--i-background_2);padding:.8em;}.ipsTemplateEditor__editorToolbar{display:flex;justify-content:end;gap:10px;}#elTemplateEditor .ipsTabs{background:var(--i-background_2);display:block;}#elTemplateEditor_tabbar.ipsTabs [role="tablist"]{flex-wrap:wrap;}#elTemplateEditor .ipsTabs:not(:has([role="tab"])){display:none;}#elTemplateEditor [data-action="closeTab"]{font-size:12px;opacity:.5;display:inline-grid;width:1.6em;height:1.6em;line-height:1;place-content:center;border-radius:3px;margin:-1em -.7em;margin-inline-start:.5em;}#elTemplateEditor [data-action="closeTab"]:hover{opacity:1;background:color-mix(in srgb, currentColor 10%, transparent);}#elTemplateEditor_panels{flex:1 1 100%;display:flex;flex-direction:column;}#elTemplateEditor .CodeMirror{height:100%;}#elTemplateEditor [data-role="editor"], #elTemplateEditor .CodeMirror{border-width:0;border-radius:0;padding-bottom:1em;}#elTemplateEditor [data-role="editor"]{font-family:monospace;}#elTemplateEditor [data-role="templatePanelWrap"] textarea{height:550px;}.ipsTabs__panel:has(.cTemplateMergeHeaders){display:flex;flex-direction:column;}.cTemplateMergeHeaders{border:1px solid var(--i-background_4);border-bottom:0;flex:0 0 auto;display:flex;justify-content:space-between;}.cTemplateMergeHeader, .CodeMirror-merge-2pane .CodeMirror-merge-pane{width:calc(50% - 40px);}.CodeMirror-merge-2pane .CodeMirror-merge-gap{width:80px;}.CodeMirror-merge{height:100%;border-width:0;display:flex;}.CodeMirror-merge-pane{height:100%;}#elTemplateEditor_fileList{flex:1 1 auto;overflow:auto;}.cTemplateList{padding:8px;}.cTemplateList a:not(.ipsCms_templateOptions){padding:5px 0;display:block;position:relative;color:var(--i-color_soft);border-radius:6px;}.cTemplateList a[href*="location=database"]:not(.ipsCms_templateOptions){}.cTemplateList li{position:relative;}.cTemplateList > li > details > summary{font-weight:600;}.cTemplateList summary{padding:.7em 1em;border-radius:6px;display:flex;}.cTemplateList summary:hover{background:var(--i-background_3);}.cTemplateList summary::before{flex:0 0 auto;content:"+";display:inline-block;width:1.5em;opacity:.3;}.cTemplateList [open] > summary::before{content:"-";}.cTemplateList i-details-content{padding-inline-start:1em;}a.ipsCms_templateOptions{float:inline-end;position:relative;padding:.7em 8px;color:var(--i-color_hard);opacity:.1;border-radius:6px;}li:hover > a.ipsCms_templateOptions{opacity:.8;}.cTemplateList li.cTemplateList_inactiveBranch > a:not(.ipsCms_templateOptions)::before, .cTemplateList li.cTemplateList_activeBranch > a:not(.ipsCms_templateOptions)::before{font-family:var(--i-font-awesome);-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;text-rendering:auto;font-weight:900;display:inline-block;line-height:7px;font-size:14px;}.cTemplateList li.cTemplateList_inactiveBranch > a:not(.ipsCms_templateOptions)::before, .cTemplateList li.cTemplateList_activeBranch > a:not(.ipsCms_templateOptions)::before{content:'\f0da';margin-inline-end:7px;}[dir="rtl"] .cTemplateList li.cTemplateList_inactiveBranch > a:not(.ipsCms_templateOptions)::before, [dir="rtl"] .cTemplateList li.cTemplateList_activeBranch > a:not(.ipsCms_templateOptions)::before{content:'\f0d9';}[dir="ltr"] .cTemplateList li.cTemplateList_activeBranch > a:not(.ipsCms_templateOptions)::before, [dir="rtl"] .cTemplateList li.cTemplateList_activeBranch > a:not(.ipsCms_templateOptions)::before{content:'\f0d7';}.cTemplateList li.cTemplateList_inactiveBranch > ul{display:none;}.cTemplateList li a:not(.ipsCms_templateOptions){padding-inline-start:15px;}.cTemplateList li li a:not(.ipsCms_templateOptions){padding-inline-start:30px;}.cTemplateList li li li a{padding-inline-start:45px;}.cTemplateListLine truncated
.ipsTemplateEditor{overflow:hidden;}.ipsTemplateEditor__columns{display:grid;grid-template-columns:280px 1fr;height:calc(100vh - 200px);min-height:570px;}.ipsTemplateEditor__listColumn, .ipsTemplateEditor__codeColumn{display:flex;flex-direction:column;}:where(:is(.ipsTemplateEditor__listColumn, .ipsTemplateEditor__codeColumn) > *){flex:0 0 auto;}.ipsTemplateEditor__listColumn{border-inline-end:1px solid var(--i-background_4);}.cTemplateControls{padding:.5em;min-height:60px;align-content:center;}.cTemplateControls__input{display:flex;background:var(--i-background_1);border:1px solid var(--i-background_5);border-radius:8px;}.cTemplateControls__input:has([type="text"]:focus){border-color:currentColor;}.cTemplateControls__input [type="text"]{flex:1 1 100%;outline-width:0;padding:.8em 1em;}.cTemplateControls__filter{flex:0 0 auto;display:flex;align-items:center;gap:.4em;padding:0 .7em;color:var(--i-color_soft);}.cTemplateControls__filter:hover{color:var(--i-color_hard);}.cTemplateControls__filter .fa-caret-down{font-size:10px;opacity:.5;}#elTemplateEditor_info{display:flex;justify-content:space-evenly;font-size:.8em;background:var(--i-background_1);padding:1em 0;border-top:1px solid var(--i-background_3);}#elTemplateEditor_newButton{background:var(--i-background_2);padding:.8em;}.ipsTemplateEditor__editorToolbar{display:flex;align-items:center;gap:6px;}#elTemplateEditor .ipsTabs{background:var(--i-background_2);display:block;box-shadow:none;border:1px solid var(--i-background_4);border-width:1px 0;padding:.6em;}#elTemplateEditor_tabbar.ipsTabs [role="tablist"]{flex-wrap:wrap;}#elTemplateEditor .ipsTabs:not(:has([role="tab"])){display:none;}#elTemplateEditor [data-action="closeTab"]{font-size:12px;opacity:.5;display:inline-grid;width:1.6em;height:1.6em;line-height:1;place-content:center;border-radius:3px;margin:-1em -.7em;margin-inline-start:.5em;}#elTemplateEditor [data-action="closeTab"]:hover{opacity:1;background:color-mix(in srgb, currentColor 10%, transparent);}#elTemplateEditor_panels{flex:1 1 100%;display:flex;flex-direction:column;}#elTemplateEditor .CodeMirror{height:100%;}#elTemplateEditor [data-role="editor"], #elTemplateEditor .CodeMirror{border-width:0;border-radius:0;padding-bottom:1em;}#elTemplateEditor [data-role="editor"]{font-family:monospace;}#elTemplateEditor [data-role="templatePanelWrap"] textarea{height:550px;}.ipsTabs__panel:has(.cTemplateMergeHeaders){display:flex;flex-direction:column;}.cTemplateMergeHeaders{border:1px solid var(--i-background_4);border-bottom:0;flex:0 0 auto;display:flex;justify-content:space-between;}.cTemplateMergeHeader, .CodeMirror-merge-2pane .CodeMirror-merge-pane{width:calc(50% - 40px);}.CodeMirror-merge-2pane .CodeMirror-merge-gap{width:80px;}.CodeMirror-merge{height:100%;border-width:0;display:flex;}.CodeMirror-merge-pane{height:100%;}#elTemplateEditor_fileList{flex:1 1 auto;overflow:auto;}.cTemplateList{padding:8px;}.cTemplateList a:not(.ipsCms_templateOptions){padding:5px 0;display:block;position:relative;color:var(--i-color_soft);border-radius:6px;}.cTemplateList a[href*="location=database"]:not(.ipsCms_templateOptions){}.cTemplateList li{position:relative;}.cTemplateList > li > details > summary{font-weight:600;}.cTemplateList summary{padding:.7em 1em;border-radius:6px;display:flex;}.cTemplateList summary:hover{background:var(--i-background_3);}.cTemplateList summary::before{flex:0 0 auto;content:"+";display:inline-block;width:1.5em;opacity:.3;}.cTemplateList [open] > summary::before{content:"-";}.cTemplateList i-details-content{padding-inline-start:1em;}a.ipsCms_templateOptions{float:inline-end;position:relative;padding:.7em 8px;color:var(--i-color_hard);opacity:.1;border-radius:6px;}li:hover > a.ipsCms_templateOptions{opacity:.8;}.cTemplateList li.cTemplateList_inactiveBranch > a:not(.ipsCms_templateOptions)::before, .cTemplateList li.cTemplateList_activeBranch > a:not(.ipsCms_templateOptions)::before{font-family:var(--i-font-awesome);-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;text-rendering:auto;font-weight:900;display:inline-block;line-height:7px;font-size:14px;}.cTemplateList li.cTemplateList_inactiveBranch > a:not(.ipsCms_templateOptions)::before, .cTemplateList li.cTemplateList_activeBranch > a:not(.ipsCms_templateOptions)::before{content:'\f0da';margin-inline-end:7px;}[dir="rtl"] .cTemplateList li.cTemplateList_inactiveBranch > a:not(.ipsCms_templateOptions)::before, [dir="rtl"] .cTemplateList li.cTemplateList_activeBranch > a:not(.ipsCms_templateOptions)::before{content:'\f0d9';}[dir="ltr"] .cTemplateList li.cTemplateList_activeBranch > a:not(.ipsCms_templateOptions)::before, [dir="rtl"] .cTemplateList li.cTemplateList_activeBranch > a:not(.ipsCms_templateOptions)::before{content:'\f0d7';}.cTemplateList li.cTemplateList_inactiveBranch > ul{display:none;}.cTemplateList li a:not(.ipsCms_templateOptions){padding-inline-start:15px;}.cTemplateList li li a:not(.ipsCms_templateOptions){padding-inline-start:30px;}.cTemplateList Line truncated
+1 -1
View File
@@ -1 +1 @@
.ipsControlStrip{display:flex;gap:4px;position:relative;z-index:1;}.ipsControlStrip > *{flex:1 1 auto;}.ipsControlStrip a{display:flex;align-items:center;justify-content:center;color:inherit;font-size:14px;min-width:2.4em;min-height:2.4em;border-radius:5px;}.ipsControlStrip_disabled{background:transparent;pointer-events:none;}.ipsControlStrip_disabled .ipsControlStrip_icon{opacity:.5;}:where(.ipsTree_row:hover .ipsControlStrip a){background:var(--i-background_3);}@media (hover:none){.ipsControlStrip a:not(:hover){background:var(--i-background_3);}}.ipsControlStrip a:hover{color:var(--i-primary-contrast);background:var(--i-primary);}:where(.ipsControlStrip:not(.ipsControlStrip_showText) .ipsControlStrip_item){border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px;}.ipsControlStrip_showText a{width:auto;padding:0 .7em;}.ipsControlStrip_item:where(:not(.ipsMenu *)){font-size:.9em;margin-inline-start:.6em;font-weight:600;}.ipsWidthHeight{background:#fff;border:1px dashed #000;margin-bottom:10px;}[dir="rtl"] .ipsWidthHeight{display:none;}.ui-icon-gripsmall-diagonal-se{background:url('../resources/core_84c1e40ea0e759e3f1505eb1788ddf3c_resizable.png');}.ui-resizable{position:relative;}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block;}.ui-resizable-se{cursor:nwse-resize;width:12px;height:12px;right:0px;bottom:0px;}[data-ips-scheme="light"] .ipsFieldRow_searchResult{background-color:#f4e5c4;border-color:#ebc46f;color:#7a5206;}[data-ips-scheme="dark"] .ipsFieldRow_searchResult{background-color:#534531;border-color:#786743;color:#f8e5d4;}[data-controller="ips.core.badgepreview"] svg{width:180px;}@media (min-width:1100px){.ipsBadgePicker--form{display:grid;grid-template-columns:180px 1fr 1fr 1fr;}:where(.ipsBadgePicker--form > li){grid-column:1/-1;}.ipsFieldRow--badge-creator-preview .ipsFieldRow__content{position:sticky;top:90px;}.ipsFieldRow--badge-creator{grid-column:auto;align-content:start !important;}.ipsFieldRow--badge-creator:not(.ipsHide, [hidden]){display:grid !important;grid-template-columns:1fr !important;}.ipsFieldRow--badge-creator .ipsFieldRow__label{text-align:start !important;display:flex !important;}.ipsFieldRow--badge-creator .ipsFieldRow__required{flex:0 0 auto !important;}.ipsFieldRow--badge-creator .sp-colorize{max-width:none;}.ipsFieldRow--badge-creator-preview:not([hidden], .ipsHide, #x){grid-column:1/2;grid-row-end:span 5;display:block !important;}.ipsFieldRow--badge-creator-icon{grid-column:3/5;}[data-controller="ips.core.badgepreview"] svg, .ipsFieldRow--badge-creator .sp-colorize-container{width:100%;}.ipsFieldRow--badge-creator [data-controller="core.admin.core.nodeCopySetting"]{display:none;}}.acpFormTabContent .ipsBox{border-width:0;border-radius:0;}:root{--i-layout-gutter:15px;}svg[style*="hidden"] rect[fill="#ffffff"], svg[style*="hidden"] path[fill="#ffffff"]{fill:var(--i-background_1);}svg[style*="hidden"] rect[fill="#edf0f5"]{fill:var(--i-background_1);}svg[style*="hidden"] text[fill="#444444"]{fill:var(--i-color_soft);}svg[style*="hidden"] text[fill="#222222"]{fill:var(--i-color_hard);}svg[style*="hidden"] text[fill="#000000"]{fill:var(--i-color_hard);}svg[style*="hidden"] rect[width="1"], svg[style*="hidden"] rect[height="1"]{fill:var(--i-background_3);}#elLogo{height:62px;display:flex;align-items:center;justify-content:center;}#elLogo img{width:30px;}#acpAppList .ipsNotification{top:3px;inset-inline-end:3px;}#acpAppList .acpAppList__sub .ipsNotification{position:static;margin-inline-start:1em;}#acpAppList #elHideMenu{width:16px;height:32px;line-height:32px;position:fixed;bottom:0;z-index:6000;background:var(--i-background_1);border-radius:5px 0 0 0;}#acpAppList #elHideMenu a{color:inherit !important;}body.cAdminDevModeOn #acpAppList #elHideMenu{bottom:60px;}#acpAppList #elHideMenu{inset-inline-start:54px;inset-inline-start:calc(60px - 16px);}#acpAppList #elHideMenu a{padding:0 !important;height:100% !important;}.acpSearch{background:var(--i-background_3);color:var(--i-color_root);border-radius:6px;flex:1 1 100%;display:flex;align-items:center;height:41px;margin-inline-end:10px;}.acpSearch:focus-within{background:var(--i-background_1);outline:2px solid var(--i-primary);outline-offset:-1px;}.acpSearch .fa-magnifying-glass{margin:0 1em;opacity:.6;}#acpSearchKeyword{border:0;background:transparent;max-width:100%;padding:.75em 0;color:inherit;box-shadow:none;flex:1 1 100%;outline:none;}@media (hover:none) and (max-width:1024px){#acpSearchKeyword{font-size:max(16px, 1em);}}#acpSearchKeyword::-webkit-input-placeholder{color:var(--i-color_soft);opacity:1;}#acpSearchKeyword::placeholder{color:var(--i-color_soft);opacity:1;}.acpSearch__close{display:grid;place-content:center;width:2em;height:2em;background-color:var(--i-background_1);border-radius:5px;margin:0 6px;}body:has(#acpLiveSearchResults:not([style*="block"])) .acpSearch__close{display:none;}#elAdminControls{display:flex;align-items:center;fLine truncated
.ipsControlStrip{display:flex;justify-content:end;gap:4px;position:relative;z-index:1;}.ipsControlStrip > *{flex:1 1 auto;}@media (min-width:500px){.ipsControlStrip > *{flex:0 0 auto;}}.ipsControlStrip a{display:flex;align-items:center;justify-content:center;color:inherit;min-width:2.4em;min-height:2.4em;border-radius:5px;}.ipsControlStrip_disabled{background:transparent;pointer-events:none;}.ipsControlStrip_disabled .ipsControlStrip_icon{opacity:.5;}:where(.ipsTree_row:hover .ipsControlStrip a){background:var(--i-background_3);}@media (hover:none){.ipsControlStrip a:not(:hover){background:var(--i-background_3);}}.ipsControlStrip a:hover{color:var(--i-primary-contrast);background:var(--i-primary);}:where(.ipsControlStrip:not(.ipsControlStrip_showText) .ipsControlStrip_item){border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px;}.ipsControlStrip_showText a{width:auto;padding:0 .7em;}.ipsControlStrip_item:where(:not(.ipsMenu *)){font-size:.9em;margin-inline-start:.6em;font-weight:600;}.ipsWidthHeight{background:#fff;border:1px dashed #000;margin-bottom:10px;}[dir="rtl"] .ipsWidthHeight{display:none;}.ui-icon-gripsmall-diagonal-se{background:url('../resources/core_84c1e40ea0e759e3f1505eb1788ddf3c_resizable.png');}.ui-resizable{position:relative;}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block;}.ui-resizable-se{cursor:nwse-resize;width:12px;height:12px;right:0px;bottom:0px;}[data-ips-scheme="light"] .ipsFieldRow_searchResult{background-color:#f4e5c4;border-color:#ebc46f;color:#7a5206;}[data-ips-scheme="dark"] .ipsFieldRow_searchResult{background-color:#534531;border-color:#786743;color:#f8e5d4;}[data-controller="ips.core.badgepreview"] svg{width:180px;}@media (min-width:1100px){.ipsBadgePicker--form{display:grid;grid-template-columns:180px 1fr 1fr 1fr;}:where(.ipsBadgePicker--form > li){grid-column:1/-1;}.ipsFieldRow--badge-creator-preview .ipsFieldRow__content{position:sticky;top:90px;}.ipsFieldRow--badge-creator{grid-column:auto;align-content:start !important;}.ipsFieldRow--badge-creator:not(.ipsHide, [hidden]){display:grid !important;grid-template-columns:1fr !important;}.ipsFieldRow--badge-creator .ipsFieldRow__label{text-align:start !important;display:flex !important;}.ipsFieldRow--badge-creator .ipsFieldRow__required{flex:0 0 auto !important;}.ipsFieldRow--badge-creator .sp-colorize{max-width:none;}.ipsFieldRow--badge-creator-preview:not([hidden], .ipsHide, #x){grid-column:1/2;grid-row-end:span 5;display:block !important;}.ipsFieldRow--badge-creator-icon{grid-column:3/5;}[data-controller="ips.core.badgepreview"] svg, .ipsFieldRow--badge-creator .sp-colorize-container{width:100%;}.ipsFieldRow--badge-creator [data-controller="core.admin.core.nodeCopySetting"]{display:none;}}.acpFormTabContent .ipsBox{border-width:0;border-radius:0;}:root{--i-layout-gutter:15px;}svg[style*="hidden"] rect[fill="#ffffff"], svg[style*="hidden"] path[fill="#ffffff"]{fill:var(--i-background_1);}svg[style*="hidden"] rect[fill="#edf0f5"]{fill:var(--i-background_1);}svg[style*="hidden"] text[fill="#444444"]{fill:var(--i-color_soft);}svg[style*="hidden"] text[fill="#222222"]{fill:var(--i-color_hard);}svg[style*="hidden"] text[fill="#000000"]{fill:var(--i-color_hard);}svg[style*="hidden"] rect[width="1"], svg[style*="hidden"] rect[height="1"]{fill:var(--i-background_3);}#elLogo{height:62px;display:flex;align-items:center;justify-content:center;}#elLogo img{width:30px;}#acpAppList .ipsNotification{top:3px;inset-inline-end:3px;}#acpAppList .acpAppList__sub .ipsNotification{position:static;margin-inline-start:1em;}#acpAppList #elHideMenu{width:16px;height:32px;line-height:32px;position:fixed;bottom:0;z-index:6000;background:var(--i-background_1);border-radius:5px 0 0 0;}#acpAppList #elHideMenu a{color:inherit !important;}body.cAdminDevModeOn #acpAppList #elHideMenu{bottom:60px;}#acpAppList #elHideMenu{inset-inline-start:54px;inset-inline-start:calc(60px - 16px);}#acpAppList #elHideMenu a{padding:0 !important;height:100% !important;}.acpSearch{background:var(--i-background_3);color:var(--i-color_root);border-radius:6px;flex:1 1 100%;display:flex;align-items:center;height:41px;margin-inline-end:10px;}.acpSearch:focus-within{background:var(--i-background_1);outline:2px solid var(--i-primary);outline-offset:-1px;}.acpSearch .fa-magnifying-glass{margin:0 1em;opacity:.6;}#acpSearchKeyword{border:0;background:transparent;max-width:100%;padding:.75em 0;color:inherit;box-shadow:none;flex:1 1 100%;outline:none;}@media (hover:none) and (max-width:1024px){#acpSearchKeyword{font-size:max(16px, 1em);}}#acpSearchKeyword::-webkit-input-placeholder{color:var(--i-color_soft);opacity:1;}#acpSearchKeyword::placeholder{color:var(--i-color_soft);opacity:1;}.acpSearch__close{display:grid;place-content:center;width:2em;height:2em;background-color:var(--i-background_1);border-radius:5px;margin:0 6px;}body:has(#acpLiveSearchResults:not([style*="block"])) .acpSearch__cloLine truncated
+1 -1
View File
@@ -1 +1 @@
body#elLogin{display:flex;justify-content:center;align-items:center;overflow:auto;padding-top:0;margin:0 auto;}#elLogin_box{width:98%;max-width:450px;padding:15px;}.cAcpLoginBox{padding-left:0;padding-right:0;}#elLogin_box .ipsFieldRow{border-width:0;padding:.6em 1.5em;}.cAcpLoginBox .ipsTabs__panel{background:transparent;}.cAcpLoginBox_logo{text-align:center;margin:30px 0 50px;}.cAcpLoginBox_logo img{width:80%;margin:0 auto;display:block;}[data-ips-scheme="dark"] .cAcpLoginBox_logo img{filter:brightness(100);}.cAcpLoginBox_button{margin-bottom:5px;}.cAcpLoginBox input{filter:none;}#elTwoFactorAuthentication.ipsModal{background:#f9f9f9;position:inherit;}#elTwoFactorAuthentication{position:inherit;}#elTwoFactorAuthentication > div{background:#f9f9f9;box-shadow:none;border-radius:none;}
body#elLogin{display:flex;justify-content:center;align-items:center;overflow:auto;padding-top:0;margin:0 auto;}#elLogin_box{width:98%;max-width:450px;}.cAcpLoginBox{padding-left:0;padding-right:0;}#elLogin_box .ipsFieldRow{padding:1em 1.5em;}.cAcpLoginBox .ipsTabs__panel{background:transparent;}.cAcpLoginBox_logo{text-align:center;margin:40px 0 30px;}.cAcpLoginBox_logo img{width:80%;margin:0 auto;display:block;}[data-ips-scheme="dark"] .cAcpLoginBox_logo img{filter:brightness(100);}.cAcpLoginBox_button{margin-bottom:5px;}.cAcpLoginBox input{filter:none;}#elTwoFactorAuthentication.ipsModal{position:inherit;background:none;}#elTwoFactorAuthentication{position:inherit;}#elTwoFactorAuthentication > div{box-shadow:none;border-radius:0;}
+1 -1
View File
@@ -1 +1 @@
#elErrorMessage{max-width:800px;margin-left:auto;margin-right:auto;}.ipsHovercard[data-role="advicePopup"]{display:none;width:300px;}.ipsHovercard[data-role="advicePopup"] > div{min-height:60px;}.ipsHovercard[data-role="advicePopup"].cStem_ltr .ipsHovercard_stem{right:100%;top:15px;}.ipsHovercard[data-role="advicePopup"].cStem_ltr .ipsHovercard_stem:before{right:1px;border-right-color:inherit;}.ipsHovercard[data-role="advicePopup"].cStem_ltr .ipsHovercard_stem:after{border-right-color:currentColor;}.ipsHovercard[data-role="advicePopup"].cStem_rtl .ipsHovercard_stem{left:100%;top:15px;}.ipsHovercard[data-role="advicePopup"].cStem_rtl .ipsHovercard_stem:before{left:1px;border-left-color:inherit;}.ipsHovercard[data-role="advicePopup"].cStem_rtl .ipsHovercard_stem:after{border-left-color:currentColor;}.ipsHovercard[data-role="advicePopup"].cStem_above .ipsHovercard_stem{left:50%;margin-left:-1em;top:100%;}.ipsHovercard[data-role="advicePopup"].cStem_above .ipsHovercard_stem:before{border-top-color:inherit;top:1px;}.ipsHovercard[data-role="advicePopup"].cStem_above .ipsHovercard_stem:after{border-top-color:currentColor;}.ipsShareLinks{display:flex;flex-wrap:wrap;gap:.4em;}.ipsShareLink{width:2.4em;height:2.4em;border-radius:min(var(--i-design-radius), 6px);display:inline-grid;place-content:center;color:#fff !important;font-size:max(15px, 1em);}.ipsShareLink--internal{background:#008b00;}.ipsShareLink--deviantart{background:#00e59b;}.ipsShareLink--email{background:#444;}.ipsShareLink--facebook{background:#1778F2;}.ipsShareLink--linkedin{background:#0a66c2;}.ipsShareLink--reddit{background:#FF4500;}.ipsShareLink--vk{background:#507299;}.ipsShareLink--weibo{background:#D32F2F;}.ipsShareLink--youtube{background:#ff0000;}.ipsShareLink--foursquare{background:#2D5BE3;}.ipsShareLink--etsy{background:#F56400;}.ipsShareLink--flickr{background:#ff0084;}.ipsShareLink--github{background:#24292f;}.ipsShareLink--instagram{background:#E13D62;}.ipsShareLink--pinterest{background:#BD081C;}.ipsShareLink--slack{background:#42C299;}.ipsShareLink--xing{background:#B0D400;}.ipsShareLink--tumblr{background:#36465D;}.ipsShareLink--twitch{background:#772ce8;}.ipsShareLink--discord{background:#5865f2;}.ipsShareLink--x{background:#000000;}.ipsShareLink--bluesky{background:#59baff;}.ipsWidget .cStatusUpdateWidget .ipsComposeArea_dummy{padding:7px 10px;font-size:var(--i-font-size_-1);}.ipsWidget .cStatusUpdateWidget .ipsComposeArea_dummy i[class*=" fa-"]{margin-inline-end:5px;}.ipsWidget .cStatusUpdateWidget [data-role="attachmentArea"]{display:none !important;}.cTagPopup .ipsTags{margin-top:10px;}#elGuestTerms{background:var(--i-background_1);border-top:1px solid color-mix(in srgb, var(--i-color_root) 10%, transparent);background-clip:var(--if-light,padding-box) var(--if-dark,border-box);position:sticky;bottom:0;padding:1.3em 0;z-index:4000;}:where([data-ips-scheme="dark"]) #elGuestTerms{background:var(--i-background_3);}@media (max-width:979px){#elGuestTerms{bottom:var(--i-mobileFooter--he);}}.cGuestTeaser_social{width:250px;margin-bottom:5px;}.grecaptcha-badge{z-index:10;}@media (max-width:979px){body:not(:has(.ipsEditor:focus-within)) .grecaptcha-badge{bottom:calc(var(--i-mobileFooter--he) + 10px) !important;}}@media (min-width:980px){body:has(#elGuestTerms[style*="block"]) .grecaptcha-badge{bottom:120px !important;}}.cColorChoices li{position:relative;}.cColorChoice_chooser{background-color:var(--_ba-co);width:42px;height:36px;display:block;position:relative;border-radius:4px;}.cColorChoices [type="radio"]{position:absolute;width:100%;height:100%;z-index:1;appearance:none;cursor:pointer;}.cColorChoices [type="radio"]:checked + .cColorChoice_chooser{outline:2px solid currentColor;outline-offset:1px;}.cClubEmbedHeader{position:relative;height:180px;}.cClubEmbedHeader.cClubEmbedHeaderNoPhoto, .cClubEmbedHeader.cClubEmbedHeaderNoPhoto span{height:120px;}.cClubEmbedHeader .ipsUserPhoto{position:absolute;left:50%;top:50%;transform:translate(-50%, -50%);border:2px solid #fff;}.cNotifcationPrompt{position:relative;background:var(--i-background_dark);color:#fff;}.cNotifcationPrompt_title{color:inherit;}.cNotifcationPrompt_text{opacity:0.7;}.cNotifcationPrompt_icon{display:block;background-image:url('../resources/core_d0e70b4cbb9ab8afb1bc1065a3f8487a_notification.svg');background-repeat:no-repeat;background-size:cover;aspect-ratio:1;}.cNotifcationPrompt_dismiss{background:hsl(0 0% 0% / .6);width:16px;height:16px;border-radius:16px;line-height:16px;text-align:center;color:#fff;font-size:12px;position:absolute;top:9px;inset-inline-end:9px;}.cContentMessageEditor.cContentMessageEditor--private .ipsEditor{border-color:var(--i-color_negative);--bo-sh:color-mix(in srgb, var(--i-color_negative) 15%, transparent);box-shadow:var(--bo-sh) 0px 0px 0px 6px;}.cContentMessageEditor.cContentMessageEditor--public .ipsEditor{border-color:var(--i-color_positive);--bo-sh:color-mix(in srgb, var(--i-color_positive) 15%, transparent);box-shadow:var(--bo-sh) 0px 0px Line truncated
#elErrorMessage{max-width:800px;margin-left:auto;margin-right:auto;}.ipsHovercard[data-role="advicePopup"]{display:none;width:300px;}.ipsHovercard[data-role="advicePopup"] > div{min-height:60px;}.ipsHovercard[data-role="advicePopup"].cStem_ltr .ipsHovercard_stem{right:100%;top:15px;}.ipsHovercard[data-role="advicePopup"].cStem_ltr .ipsHovercard_stem:before{right:1px;border-right-color:inherit;}.ipsHovercard[data-role="advicePopup"].cStem_ltr .ipsHovercard_stem:after{border-right-color:currentColor;}.ipsHovercard[data-role="advicePopup"].cStem_rtl .ipsHovercard_stem{left:100%;top:15px;}.ipsHovercard[data-role="advicePopup"].cStem_rtl .ipsHovercard_stem:before{left:1px;border-left-color:inherit;}.ipsHovercard[data-role="advicePopup"].cStem_rtl .ipsHovercard_stem:after{border-left-color:currentColor;}.ipsHovercard[data-role="advicePopup"].cStem_above .ipsHovercard_stem{left:50%;margin-left:-1em;top:100%;}.ipsHovercard[data-role="advicePopup"].cStem_above .ipsHovercard_stem:before{border-top-color:inherit;top:1px;}.ipsHovercard[data-role="advicePopup"].cStem_above .ipsHovercard_stem:after{border-top-color:currentColor;}.ipsShareLinks{display:flex;flex-wrap:wrap;gap:.4em;}.ipsShareLink{width:2.4em;height:2.4em;border-radius:min(var(--i-design-radius), 6px);display:inline-grid;place-content:center;color:#fff !important;font-size:max(15px, 1em);}.ipsShareLink--internal{background:#008b00;}.ipsShareLink--deviantart{background:#00e59b;}.ipsShareLink--email{background:#444;}.ipsShareLink--facebook{background:#1778F2;}.ipsShareLink--linkedin{background:#0a66c2;}.ipsShareLink--reddit{background:#FF4500;}.ipsShareLink--vk{background:#507299;}.ipsShareLink--weibo{background:#D32F2F;}.ipsShareLink--youtube{background:#ff0000;}.ipsShareLink--foursquare{background:#2D5BE3;}.ipsShareLink--etsy{background:#F56400;}.ipsShareLink--flickr{background:#ff0084;}.ipsShareLink--github{background:#24292f;}.ipsShareLink--instagram{background:#E13D62;}.ipsShareLink--pinterest{background:#BD081C;}.ipsShareLink--slack{background:#42C299;}.ipsShareLink--xing{background:#B0D400;}.ipsShareLink--tumblr{background:#36465D;}.ipsShareLink--twitch{background:#772ce8;}.ipsShareLink--discord{background:#5865f2;}.ipsShareLink--x{background:#000000;}.ipsShareLink--bluesky{background:#59baff;}.ipsWidget .cStatusUpdateWidget .ipsComposeArea_dummy{padding:7px 10px;font-size:var(--i-font-size_-1);}.ipsWidget .cStatusUpdateWidget .ipsComposeArea_dummy i[class*=" fa-"]{margin-inline-end:5px;}.ipsWidget .cStatusUpdateWidget [data-role="attachmentArea"]{display:none !important;}.cTagPopup .ipsTags{margin-top:10px;}#elGuestTerms{background:var(--i-background_1);border-top:1px solid color-mix(in srgb, var(--i-color_root) 10%, transparent);background-clip:var(--if-light,padding-box) var(--if-dark,border-box);position:sticky;bottom:0;padding:1.3em 0;z-index:4000;}:where([data-ips-scheme="dark"]) #elGuestTerms{background:var(--i-background_3);}@media (max-width:979px){#elGuestTerms{bottom:var(--i-mobileFooter--he);}}.cGuestTeaser_social{width:250px;margin-bottom:5px;}.grecaptcha-badge{z-index:10;}@media (max-width:979px){body:not(:has(.ipsEditor:focus-within)) .grecaptcha-badge{bottom:calc(var(--i-mobileFooter--he) + 10px) !important;}}@media (min-width:980px){body:has(#elGuestTerms[style*="block"]) .grecaptcha-badge{bottom:120px !important;}}.cColorChoices li{position:relative;}.cColorChoice_chooser{background-color:var(--_ba-co);width:42px;height:36px;display:block;position:relative;border-radius:4px;}.cColorChoices [type="radio"]{position:absolute;width:100%;height:100%;z-index:1;appearance:none;cursor:pointer;}.cColorChoices [type="radio"]:checked + .cColorChoice_chooser{outline:2px solid currentColor;outline-offset:1px;}.cClubEmbedHeader{position:relative;height:180px;}.cClubEmbedHeader.cClubEmbedHeaderNoPhoto, .cClubEmbedHeader.cClubEmbedHeaderNoPhoto span{height:120px;}.cClubEmbedHeader .ipsUserPhoto{position:absolute;left:50%;top:50%;transform:translate(-50%, -50%);border:2px solid #fff;}.cNotifcationPrompt{position:relative;background:var(--i-background_dark);color:#fff;}.cNotifcationPrompt_title{color:inherit;}.cNotifcationPrompt_text{opacity:0.7;}.cNotifcationPrompt_icon{display:block;background-image:url('../resources/core_d0e70b4cbb9ab8afb1bc1065a3f8487a_notification.svg');background-repeat:no-repeat;background-size:cover;aspect-ratio:1;}.cNotifcationPrompt_dismiss{background:hsl(0 0% 0% / .6);width:16px;height:16px;border-radius:16px;line-height:16px;text-align:center;color:#fff;font-size:12px;position:absolute;top:9px;inset-inline-end:9px;}.cContentMessageEditor.cContentMessageEditor--private .ipsEditor{border-color:var(--i-color_negative);--bo-sh:color-mix(in srgb, var(--i-color_negative) 15%, transparent);box-shadow:var(--bo-sh) 0px 0px 0px 6px;}.cContentMessageEditor.cContentMessageEditor--public .ipsEditor{border-color:var(--i-color_positive);--bo-sh:color-mix(in srgb, var(--i-color_positive) 15%, transparent);box-shadow:var(--bo-sh) 0px 0px Line truncated
@@ -1 +1 @@
body{overflow:hidden;}[data-ips-scheme="light"] theme-editor{--panel--ba-co:hsl(220 20% 100%);--panel--ba-co-alt:hsl(220 20% 96%);--panel--ba-co-active:hsl(220 20% 88%);--panel--co:hsl(220 20% 30%);--panel--co_soft:hsl(220 20% 50%);--panel--co_hard:hsl(220 20% 0%);--panel--bo-co:hsl(220 20% 80%);--vte-tooltip:hsl(220 20% 20%);}[data-ips-scheme="dark"] theme-editor{--panel--ba-co:hsl(220 10% 12%);--panel--ba-co-alt:hsl(220 10% 23%);--panel--ba-co-active:hsl(220 10% 30%);--panel--co:hsl(220 10% 70%);--panel--co_soft:hsl(220 10% 50%);--panel--co_hard:hsl(220 10% 90%);--panel--bo-co:hsl(220 10% 30%);--vte-tooltip:hsl(220 10% 40%);}theme-editor{display:grid;grid-template-columns:1fr clamp(370px, 18vw, 450px);position:fixed;top:0;left:0;width:100%;height:100%;font-weight:normal;}theme-editor::-webkit-scrollbar{display:none;}theme-editor button{touch-action:manipulation;}theme-editor .i-color_soft{color:var(--panel--co_soft);}theme-editor .i-color_hard{color:var(--panel--co_hard);}live-preview{background:oklch(32% calc(clamp(0, 100 - var(--i-base-c), 1) * 5%) var(--i-base-h));display:flex;justify-content:center;align-items:center;position:relative;}live-preview iframe{width:100%;height:100%;max-width:100vw;max-height:100vh;transition:.5s;background:var(--panel--ba-co);}:is([data-workspace-size="small"], [data-workspace-size="medium"]) live-preview iframe{max-width:1180px;max-height:820px;height:calc(100vh - 20px);width:calc(100% - 20px);border-radius:10px;}[data-workspace-size="small"] live-preview iframe{max-width:393px;max-height:760px;}theme-editor[data-loading] live-preview::after{content:'';width:50px;height:50px;border-radius:50%;border:5px solid hsl(0 0% 100% / .4);border-top-color:#fff;animation:iframeLoad .6s linear infinite;position:absolute;margin:auto;}@keyframes iframeLoad{100%{transform:rotate(360deg);}}theme-editor[data-loading] live-preview iframe{opacity:0;}.editor__form{display:grid;grid-template-columns:auto 1fr;background:var(--panel--ba-co);color:var(--panel--co);box-shadow:hsl(0 0% 0% / .08) calc(var(--i-lang-dir) * -2px) 0px 0px;font-family:ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";font-size:14px;line-height:1.5;position:relative;}editor-panels{display:grid;grid-template-rows:1fr auto;grid-template-areas:'panel' 'footer';overflow:hidden;height:100%;}editor-buttons{border:0px solid var(--panel--bo-co);border-inline-end-width:1px;padding:6px;display:flex;flex-direction:column;}editor-buttons div{display:grid;gap:6px;flex:0 0 auto;}@media (min-width:701px){editor-buttons div:not(:last-of-type){margin-bottom:2em;padding-bottom:2em;border-bottom:1px solid var(--panel--bo-co);}}editor-buttons :is(a, button){position:relative;width:42px;height:42px;display:flex;align-items:center;justify-content:center;gap:.8em;border-radius:4px;color:inherit;}@media (any-hover:hover){editor-buttons :where(:is(a, button):hover){background-color:var(--panel--ba-co-alt);}}editor-buttons [data-active]{background-color:var(--panel--ba-co-active);}editor-buttons [type="submit"]{background:#46c371;color:#fff;}.editor-buttons__tooltip{position:absolute;inset-inline-end:calc(100% + 10px);top:50%;background:var(--vte-tooltip);color:#fff;padding:.4em 1em;border-radius:4px;white-space:nowrap;pointer-events:none;font-weight:bold;font-size:12px;transform:translateY(-50%);transition:.1s;}.editor-buttons__tooltip::after{content:'';border:5px solid transparent;border-inline-start-color:var(--vte-tooltip);position:absolute;inset-inline-start:100%;top:50%;transform:translateY(-50%);}editor-buttons :is(a, button):not(:hover) .editor-buttons__tooltip{transform:translateY(-50%) translateX(calc(-20px * var(--i-lang-dir)));opacity:0;}@media(hover:none){.editor-buttons__tooltip{display:none;}}editor-buttons [data-active] :is(.fa-lightbulb, .fa-moon){font-weight:900;}.editor-buttons__text{font-weight:600;}editor-panel{grid-area:panel;--panel-direction:1;display:flex;flex-direction:column;transition-property:opacity, transform;transition-duration:.3s;background-color:var(--panel--ba-co);}[data-panel-prev]{--panel-direction:-1;}editor-panel[aria-hidden="true"]{opacity:0;pointer-events:none;transform:translateX(calc(30% * var(--panel-direction)));}editor-panel[aria-hidden="false"]{z-index:1;}editor-panel > *{flex:0 0 auto;}editor-panel header{padding:clamp(1.2em, 5vw, 2em);}editor-panel header :is(h1, h2, h3, h4){font-weight:600;color:var(--panel--co_hard);font-size:1.4em;line-height:1.2;}editor-panel header p{font-weight:500;color:var(--panel--co_soft);margin-top:.4em;}[data-panel-nav="back"]{color:var(--panel--co);padding:1.4em;text-transform:uppercase;font-weight:600;font-size:.9em;outline-offset:-2px;}[data-panel-nav="back"]::before{content:'\2190';margin-inline-end:.5em;transition:transform .3s;display:inline-block;}[dir="rtl"] [data-panel-nav="back"]::before{transform:scaleX(-1);}@media (any-hover:hover){[dir="Line truncated
body{overflow:hidden;}[data-ips-scheme="light"] theme-editor{--panel--ba-co:hsl(220 20% 100%);--panel--ba-co-alt:hsl(220 20% 96%);--panel--ba-co-active:hsl(220 20% 88%);--panel--co:hsl(220 20% 30%);--panel--co_soft:hsl(220 20% 50%);--panel--co_hard:hsl(220 20% 0%);--panel--bo-co:hsl(220 20% 80%);--vte-tooltip:hsl(220 20% 20%);}[data-ips-scheme="dark"] theme-editor{--panel--ba-co:hsl(220 10% 12%);--panel--ba-co-alt:hsl(220 10% 23%);--panel--ba-co-active:hsl(220 10% 30%);--panel--co:hsl(220 10% 70%);--panel--co_soft:hsl(220 10% 50%);--panel--co_hard:hsl(220 10% 90%);--panel--bo-co:hsl(220 10% 30%);--vte-tooltip:hsl(220 10% 40%);}theme-editor{display:grid;grid-template-columns:1fr clamp(370px, 18vw, 450px);position:fixed;top:0;left:0;width:100%;height:100%;font-weight:normal;}theme-editor::-webkit-scrollbar{display:none;}theme-editor button{touch-action:manipulation;}theme-editor .i-color_soft{color:var(--panel--co_soft);}theme-editor .i-color_hard{color:var(--panel--co_hard);}live-preview{background:oklch(32% calc(clamp(0, 100 - var(--i-base-c), 1) * 5%) var(--i-base-h));display:flex;justify-content:center;align-items:center;position:relative;}live-preview iframe{width:100%;height:100%;max-width:100vw;max-height:100vh;transition:.5s;background:var(--panel--ba-co);}:is([data-workspace-size="small"], [data-workspace-size="medium"]) live-preview iframe{max-width:1180px;max-height:820px;height:calc(100vh - 20px);width:calc(100% - 20px);border-radius:10px;}[data-workspace-size="small"] live-preview iframe{max-width:393px;max-height:760px;}theme-editor[data-loading] live-preview::after{content:'';width:50px;height:50px;border-radius:50%;border:5px solid hsl(0 0% 100% / .4);border-top-color:#fff;animation:iframeLoad .6s linear infinite;position:absolute;margin:auto;}@keyframes iframeLoad{100%{transform:rotate(360deg);}}theme-editor[data-loading] live-preview iframe{opacity:0;}.editor__form{display:grid;grid-template-columns:auto 1fr;background:var(--panel--ba-co);color:var(--panel--co);box-shadow:hsl(0 0% 0% / .08) calc(var(--i-lang-dir) * -2px) 0px 0px;font-family:ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";font-size:14px;line-height:1.5;position:relative;}editor-panels{display:grid;grid-template-rows:1fr auto;grid-template-areas:'panel' 'footer';overflow:hidden;height:100%;}editor-buttons{border:0px solid var(--panel--bo-co);border-inline-end-width:1px;padding:6px;display:flex;flex-direction:column;}editor-buttons div{display:grid;gap:6px;flex:0 0 auto;}@media (min-width:701px){editor-buttons div:not(:last-of-type){margin-bottom:2em;padding-bottom:2em;border-bottom:1px solid var(--panel--bo-co);}}editor-buttons :is(a, button){position:relative;width:42px;height:42px;display:flex;align-items:center;justify-content:center;gap:.8em;border-radius:4px;color:inherit;}@media (any-hover:hover){editor-buttons :where(:is(a, button):hover){background-color:var(--panel--ba-co-alt);}}editor-buttons [data-active], [data-ips-scheme="light"] [data-ips-prefers-color-scheme="light"], [data-ips-scheme="dark"] [data-ips-prefers-color-scheme="dark"]{background-color:var(--panel--ba-co-active);}editor-buttons [type="submit"]{background:#46c371;color:#fff;}.editor-buttons__tooltip{position:absolute;inset-inline-end:calc(100% + 10px);top:50%;background:var(--vte-tooltip);color:#fff;padding:.4em 1em;border-radius:4px;white-space:nowrap;pointer-events:none;font-weight:bold;font-size:12px;transform:translateY(-50%);transition:.1s;}.editor-buttons__tooltip::after{content:'';border:5px solid transparent;border-inline-start-color:var(--vte-tooltip);position:absolute;inset-inline-start:100%;top:50%;transform:translateY(-50%);}editor-buttons :is(a, button):not(:hover) .editor-buttons__tooltip{transform:translateY(-50%) translateX(calc(-20px * var(--i-lang-dir)));opacity:0;}@media(hover:none){.editor-buttons__tooltip{display:none;}}editor-buttons [data-active] :is(.fa-lightbulb, .fa-moon){font-weight:900;}.editor-buttons__text{font-weight:600;}editor-panel{grid-area:panel;--panel-direction:1;display:flex;flex-direction:column;transition-property:opacity, transform;transition-duration:.3s;background-color:var(--panel--ba-co);}[data-panel-prev]{--panel-direction:-1;}editor-panel[aria-hidden="true"]{opacity:0;pointer-events:none;transform:translateX(calc(30% * var(--panel-direction)));}editor-panel[aria-hidden="false"]{z-index:1;}editor-panel > *{flex:0 0 auto;}editor-panel header{padding:clamp(1.2em, 5vw, 2em);}editor-panel header :is(h1, h2, h3, h4){font-weight:600;color:var(--panel--co_hard);font-size:1.4em;line-height:1.2;}editor-panel header p{font-weight:500;color:var(--panel--co_soft);margin-top:.4em;}[data-panel-nav="back"]{color:var(--panel--co);padding:1.4em;text-transform:uppercase;font-weight:600;font-size:.9em;outline-offset:-2px;}[data-panel-nav="back"]::before{content:'\2190';margin-inline-end:.5em;transition:tLine truncated
+1 -1
View File
@@ -1 +1 @@
#elTwoFactorAuthentication{position:fixed;inset:0;display:flex;justify-content:center;align-items:center;z-index:10000;overflow:hidden;}#elTwoFactorAuthentication > div{max-width:500px;max-height:95vh;max-height:95dvh;background:var(--i-background_1);box-shadow:0px 5px 55px rgba(0,0,0,0.4);border-radius:6px;overflow:auto;}#elTwoFactorAuthentication .c2FA_info{max-width:80%;margin-left:auto;margin-right:auto;}#elTwoFactorAuthentication button[name="_mfaCancel"]{border:none;padding-bottom:7px;}#elTwoFactorAuthentication button[name="_mfaCancel"] i[class*=" fa-"]{cursor:pointer;}#elGoogleAuthenticator input[type="text"]{font-size:30px;text-align:center;}#elAuthy select{width:100%;}#elAuthy input[type="text"]{font-size:30px;text-align:center;}.cAuthy_container{position:relative;}.cAuthy_icon{width:36px;height:36px;position:absolute;top:8px;inset-inline-start:8px;}
#elTwoFactorAuthentication{position:fixed;inset:0;display:flex;justify-content:center;align-items:center;z-index:10000;overflow:hidden;}#elTwoFactorAuthentication > div{max-width:500px;background:var(--i-background_1);box-shadow:0px 5px 55px rgba(0,0,0,0.4);border-radius:6px;overflow:auto;}#elTwoFactorAuthentication .c2FA_info{max-width:80%;margin-left:auto;margin-right:auto;}#elTwoFactorAuthentication button[name="_mfaCancel"]{border:none;padding-bottom:7px;}#elTwoFactorAuthentication button[name="_mfaCancel"] i[class*=" fa-"]{cursor:pointer;}#elGoogleAuthenticator input[type="text"]{font-size:30px;text-align:center;}#elAuthy select{width:100%;}#elAuthy input[type="text"]{font-size:30px;text-align:center;}.cAuthy_container{position:relative;}.cAuthy_icon{width:36px;height:36px;position:absolute;top:8px;inset-inline-start:8px;}
@@ -1 +1 @@
*{margin:0;padding:0;}*, ::before, ::after{box-sizing:border-box;min-width:0;min-height:0;}html{-webkit-text-size-adjust:100%;accent-color:var(--i-primary);-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;}hr{color:inherit;}hr, iframe, fieldset{border-width:0;}iframe:where([src*="youtube."], [src*="youtube-nocookie."], [src*="vimeo."]){width:100%;height:auto;aspect-ratio:16/9;}img, svg{border:0;display:inline-block;max-width:100%;height:auto;vertical-align:top;}:where(img::before){display:block;overflow:hidden;height:100%;}h1, h2, h3, h4, h5, h6{font-size:inherit;font-weight:inherit;}b, strong{font-weight:bolder;}menu, ol, ul, summary{list-style-type:none;}blockquote, q{quotes:none;}table{border-collapse:collapse;border-spacing:0;}input, textarea, select, button{background:none;border:0;color:inherit;font-family:inherit;font-size:inherit;font-weight:inherit;line-height:inherit;text-align:inherit;text-transform:inherit;}textarea, select{-webkit-appearance:none;appearance:none;box-shadow:none;}textarea{display:block;width:100%;}select{cursor:pointer;}[type="search"]{-webkit-appearance:none;appearance:none;}[type="date"], [type="time"]{accent-color:currentColor;}::placeholder{color:inherit;opacity:.5;}button, [type="submit"], summary{-webkit-appearance:none;appearance:none;cursor:pointer;touch-action:manipulation;-webkit-user-select:none;user-select:none;}button{text-align:inherit;}details summary::-webkit-details-marker{display:none;}:focus{outline-color:transparent;}:focus-visible{outline:var(--i-outline-width) var(--i-outline-style) var(--i-outline-color);outline-offset:var(--i-outline-offset);}address{font-style:inherit;}dialog{border-width:0;margin:auto;}dialog:not([open]){display:none !important;}.sr-only, .ipsInvisible{border:0 !important;clip:rect(1px, 1px, 1px, 1px) !important;clip-path:inset(50%) !important;height:1px !important;margin:-1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:1px !important;}[hidden]{display:none !important;}:root{--light__i-primary:hsl(220 85% 50%);--light__i-primary-relative-l:33;--light__i-secondary:hsl(220 49% 13%);--light__i-secondary-relative-l:10;--light__i-base:oklch(calc(var(--light__i-base-l) * 1%) calc(var(--light__i-base-c) * 1%) var(--light__i-base-h));--light__i-base-l:100;--light__i-base-c:30;--light__i-base-h:260;--dark__i-primary:hsl(215 85% 50%);--dark__i-primary-relative-l:37;--dark__i-secondary:hsl(215 18% 26%);--dark__i-secondary-relative-l:24;--dark__i-base:oklch(calc(var(--dark__i-base-l) * 1%) calc(var(--dark__i-base-c) * 1%) var(--dark__i-base-h));--dark__i-base-l:30;--dark__i-base-c:20;--dark__i-base-h:260;--set__i-default-scheme:system;--set__i-change-scheme:1;--set__i-logo--fo-fa:var(--i-font-family);--set__i-logo--fo-we:500;--set__i-desktop-logo--fo-si:18;--set__i-sidebar-ui-logo--fo-si:20;--set__i-mobile-logo--fo-si:18;--set__logo-light:;--set__logo-dark:;--set__i-logo--he:70;--set__i-sidebar-ui-logo--he:70;--set__mobile-logo-light:;--set__mobile-logo-dark:;--set__i-mobile-logo--he:70;--set__i-font-family:var(--i-font-family_system-ui);--set__i-font-size:14;--set__i-user-content-font-size:110;--set__i-position-logo:4;--set__i-position-navigation:5;--set__i-position-user:6;--set__i-position-breadcrumb:7;--set__i-position-search:9;--set__i-header-top--he:50;--set__i-header-primary--he:100;--set__i-header-secondary--he:50;--set__i-nav-bar-icons:0;--set__i-mobile-header--he:60;--set__i-sidebar-ui-header--he:65;--set__i-sidebar-width:350;--set__i-flip-sidebar:0;--set__i-sticky-sidebar:1;--set__i-layout-width:1500;--set__i-avatar-radius:1;--set__i-design-border:1;--set__i-design-radius:8;--set__i-design-shadow:2;--set__i-link-panels:1;--set__i-mobile-icons-location:footer;--set__i-mobile-footer-labels:1;--light__i-color_root:var(--i-base-contrast_3);--dark__i-color_root:var(--i-base-contrast_4);--light__i-color_soft:var(--i-base-contrast_1);--dark__i-color_soft:var(--i-base-contrast_2);--light__i-color_hard:var(--i-base-contrast_6);--dark__i-color_hard:var(--i-base-contrast_6);--light__i-link--co:var(--i-base-contrast_5);--dark__i-link--co:var(--i-base-contrast_5);--light__i-link-hover--co:var(--i-color_primary);--dark__i-link-hover--co:var(--i-color_primary);--light__i-headerTop--ba-co:var(--i-base-contrast_5);--dark__i-headerTop--ba-co:var(--i-base_3);--light__i-headerTop--co:var(--i-base_1);--dark__i-headerTop--co:var(--i-base-contrast_6);--light__i-headerPrimary--ba-co:var(--i-base-contrast_4);--dark__i-headerPrimary--ba-co:var(--i-base_3);--light__i-headerPrimary--co:var(--i-base_1);--dark__i-headerPrimary--co:var(--i-base-contrast_6);--light__i-headerSecondary--ba-co:var(--i-base-contrast_5);--dark__i-headerSecondary--ba-co:var(--i-base_4);--light__i-headerSecondary--co:var(--i-base_1);--dark__i-headerSecondary--co:var(--i-base-contrast_5);--light__i-headerMobile--ba-co:var(--i-base_1);--dark__i-headerMobile--ba-Line truncated
*{margin:0;padding:0;}*, ::before, ::after{box-sizing:border-box;min-width:0;min-height:0;}html{-webkit-text-size-adjust:100%;accent-color:var(--i-primary);-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;}hr{color:inherit;}hr, iframe, fieldset{border-width:0;}iframe:where([src*="youtube."], [src*="youtube-nocookie."], [src*="vimeo."]){width:100%;height:auto;aspect-ratio:16/9;}img, svg{border:0;display:inline-block;max-width:100%;height:auto;vertical-align:top;}:where(img::before){display:block;overflow:hidden;height:100%;}h1, h2, h3, h4, h5, h6{font-size:inherit;font-weight:inherit;}b, strong{font-weight:bolder;}menu, ol, ul, summary{list-style-type:none;}blockquote, q{quotes:none;}table{border-collapse:collapse;border-spacing:0;}input, textarea, select, button{background:none;border:0;color:inherit;font-family:inherit;font-size:inherit;font-weight:inherit;line-height:inherit;text-align:inherit;text-transform:inherit;}textarea, select{-webkit-appearance:none;appearance:none;box-shadow:none;}textarea{display:block;width:100%;}select{cursor:pointer;}[type="search"]{-webkit-appearance:none;appearance:none;}[type="date"], [type="time"]{accent-color:currentColor;}::placeholder{color:inherit;opacity:.5;}button, [type="submit"], summary{-webkit-appearance:none;appearance:none;cursor:pointer;touch-action:manipulation;-webkit-user-select:none;user-select:none;}button{text-align:inherit;}details summary::-webkit-details-marker{display:none;}:focus{outline-color:transparent;}:focus-visible{outline:var(--i-outline-width) var(--i-outline-style) var(--i-outline-color);outline-offset:var(--i-outline-offset);}address{font-style:inherit;}dialog{border-width:0;margin:auto;}dialog:not([open]){display:none !important;}.sr-only, .ipsInvisible{border:0 !important;clip:rect(1px, 1px, 1px, 1px) !important;clip-path:inset(50%) !important;height:1px !important;margin:-1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:1px !important;}[hidden]{display:none !important;}:root{--light__i-primary:hsl(220 85% 50%);--light__i-primary-relative-l:33;--light__i-secondary:hsl(220 49% 13%);--light__i-secondary-relative-l:10;--light__i-base:oklch(calc(var(--light__i-base-l) * 1%) calc(var(--light__i-base-c) * 1%) var(--light__i-base-h));--light__i-base-l:100;--light__i-base-c:30;--light__i-base-h:260;--dark__i-primary:hsl(215 85% 50%);--dark__i-primary-relative-l:37;--dark__i-secondary:hsl(215 18% 26%);--dark__i-secondary-relative-l:24;--dark__i-base:oklch(calc(var(--dark__i-base-l) * 1%) calc(var(--dark__i-base-c) * 1%) var(--dark__i-base-h));--dark__i-base-l:30;--dark__i-base-c:20;--dark__i-base-h:260;--set__i-default-scheme:system;--set__i-change-scheme:1;--set__i-logo--fo-fa:var(--i-font-family);--set__i-logo--fo-we:500;--set__i-desktop-logo--fo-si:18;--set__i-sidebar-ui-logo--fo-si:20;--set__i-mobile-logo--fo-si:18;--set__logo-light:;--set__logo-dark:;--set__i-logo--he:70;--set__i-sidebar-ui-logo--he:70;--set__mobile-logo-light:;--set__mobile-logo-dark:;--set__i-mobile-logo--he:70;--set__i-font-family:var(--i-font-family_system-ui);--set__i-font-size:14;--set__i-user-content-font-size:110;--set__i-position-logo:4;--set__i-position-navigation:5;--set__i-position-user:6;--set__i-position-breadcrumb:7;--set__i-position-search:9;--set__i-header-top--he:50;--set__i-header-primary--he:100;--set__i-header-secondary--he:50;--set__i-nav-bar-icons:0;--set__i-mobile-header--he:60;--set__i-sidebar-ui-header--he:65;--set__i-sidebar-width:350;--set__i-flip-sidebar:0;--set__i-sticky-sidebar:1;--set__i-layout-width:1500;--set__i-avatar-radius:1;--set__i-design-border:1;--set__i-design-radius:8;--set__i-design-shadow:2;--set__i-link-panels:1;--set__i-mobile-icons-location:footer;--set__i-mobile-footer-labels:1;--light__i-color_root:var(--i-base-contrast_3);--dark__i-color_root:var(--i-base-contrast_4);--light__i-color_soft:var(--i-base-contrast_1);--dark__i-color_soft:var(--i-base-contrast_2);--light__i-color_hard:var(--i-base-contrast_6);--dark__i-color_hard:var(--i-base-contrast_6);--light__i-link--co:var(--i-base-contrast_5);--dark__i-link--co:var(--i-base-contrast_5);--light__i-link-hover--co:var(--i-color_primary);--dark__i-link-hover--co:var(--i-color_primary);--light__i-headerTop--ba-co:var(--i-base-contrast_5);--dark__i-headerTop--ba-co:var(--i-base_3);--light__i-headerTop--co:var(--i-base_1);--dark__i-headerTop--co:var(--i-base-contrast_6);--light__i-headerPrimary--ba-co:var(--i-base-contrast_4);--dark__i-headerPrimary--ba-co:var(--i-base_3);--light__i-headerPrimary--co:var(--i-base_1);--dark__i-headerPrimary--co:var(--i-base-contrast_6);--light__i-headerSecondary--ba-co:var(--i-base-contrast_5);--dark__i-headerSecondary--ba-co:var(--i-base_4);--light__i-headerSecondary--co:var(--i-base_1);--dark__i-headerSecondary--co:var(--i-base-contrast_5);--light__i-headerMobile--ba-co:var(--i-base_1);--dark__i-headerMobile--ba-Line truncated
+1 -1
View File
@@ -1 +1 @@
.cNexusPrice{color:var(--i-color_secondary);}.cNexusPrice s{color:var(--i-color_soft);font-weight:normal;}.cPayment{display:inline-block;width:66px;height:42px;border:1px solid;border-color:color-mix(in srgb, currentColor 10%, transparent);background-color:var(--i-background_3);background-size:cover;background-position:50%;}.cPayment_visa{background-image:url('../resources/nexus_25c7da8f03d0d6ae55d3be3353eb0ca9_visa@2x.png');}.cPayment_mastercard{background-image:url('../resources/nexus_25c7da8f03d0d6ae55d3be3353eb0ca9_mastercard@2x.png');}.cPayment_american_express{background-image:url('../resources/nexus_25c7da8f03d0d6ae55d3be3353eb0ca9_amex@2x.png');}.cPayment_discover{background-image:url('../resources/nexus_25c7da8f03d0d6ae55d3be3353eb0ca9_discover@2x.png');}.cPayment_diners_club{background-image:url('../resources/nexus_25c7da8f03d0d6ae55d3be3353eb0ca9_dinersclub@2x.png');}.cPayment_jcb{background-image:url('../resources/nexus_25c7da8f03d0d6ae55d3be3353eb0ca9_jcb@2x.png');}.cPayment_paypal{background-image:url('../resources/nexus_25c7da8f03d0d6ae55d3be3353eb0ca9_paypal@2x.png');}.cPayment_venmo{background-image:url('../resources/nexus_25c7da8f03d0d6ae55d3be3353eb0ca9_venmo.svg');background-size:80% auto;}.cNexusCard_expiry select{width:45%;}.cNexusPaymentLog .ipsData__icon{font-size:30px;}.cNexusOrderList .cNexusOrderBadge{margin-inline-end:15px;}.cNexusOrderBadge{display:inline-block;padding:0 10px;border-radius:4px;vertical-align:middle;font-size:12px;line-height:20px;font-weight:500;color:#fff;background:#000;}.cNexusOrderBadge.cNexusOrderBadge_paid{background:#7e9e64;}.cNexusOrderBadge.cNexusOrderBadge_expd{background:#c8c9c1;}.cNexusOrderBadge.cNexusOrderBadge_pend{background:#7C6146;}.ipsCommercePrices:not(:last-child){margin-bottom:1em;}.ipsCommercePrice{font-weight:600;font-size:1.1em;color:var(--i-color_primary);}.ipsCommercePrices small{color:var(--i-color_soft);font-size:inherit;}.ipsCommercePrices s{filter:grayscale(1) opacity(.4);}.ipsCommerceStock--in{font-weight:600;}.ipsCommerceStock--out{font-weight:500;color:var(--i-color_negative);}.ipsData--cart-contents .ipsData__item{isolation:auto;}.ipsStreamItem .cNexusPrice{color:var(--i-color_primary);font-weight:bold;font-size:1.1em;}.ipsStreamItem .cNexusPrice s{color:color-mix(in srgb, var(--i-color_soft) 70%, transparent);font-weight:normal;}.ipsStreamItem .cNexusPrice :is(small, s){font-size:max(.8em, 11px);}
.cNexusPrice{color:var(--i-color_secondary);}.cNexusPrice s{color:var(--i-color_soft);font-weight:normal;}.cPayment{display:inline-block;width:66px;height:42px;border:1px solid;border-color:color-mix(in srgb, currentColor 10%, transparent);background-color:var(--i-background_3);background-size:cover;background-position:50%;}.cPayment_visa{background-image:url('../resources/nexus_25c7da8f03d0d6ae55d3be3353eb0ca9_visa@2x.png');}.cPayment_mastercard{background-image:url('../resources/nexus_25c7da8f03d0d6ae55d3be3353eb0ca9_mastercard@2x.png');}.cPayment_american_express{background-image:url('../resources/nexus_25c7da8f03d0d6ae55d3be3353eb0ca9_amex@2x.png');}.cPayment_discover{background-image:url('../resources/nexus_25c7da8f03d0d6ae55d3be3353eb0ca9_discover@2x.png');}.cPayment_diners_club{background-image:url('../resources/nexus_25c7da8f03d0d6ae55d3be3353eb0ca9_dinersclub@2x.png');}.cPayment_jcb{background-image:url('../resources/nexus_25c7da8f03d0d6ae55d3be3353eb0ca9_jcb@2x.png');}.cPayment_paypal{background-image:url('../resources/nexus_25c7da8f03d0d6ae55d3be3353eb0ca9_paypal@2x.png');}.cPayment_venmo{background-image:url('../resources/nexus_25c7da8f03d0d6ae55d3be3353eb0ca9_venmo.svg');background-size:80% auto;}.cNexusCard_expiry select{width:45%;}.cNexusPaymentLog .ipsData__icon{font-size:30px;}.cNexusOrderList .cNexusOrderBadge{margin-inline-end:15px;}.cNexusOrderBadge{display:inline-block;padding:0 10px;border-radius:4px;vertical-align:middle;font-size:12px;line-height:20px;font-weight:500;color:#fff;background:#000;}.cNexusOrderBadge.cNexusOrderBadge_paid{background:#7e9e64;}.cNexusOrderBadge.cNexusOrderBadge_expd{background:#c8c9c1;}.cNexusOrderBadge.cNexusOrderBadge_pend{background:#7C6146;}.ipsCommercePrices:not(:last-child){margin-bottom:1em;}.ipsCommercePrice{font-weight:600;font-size:1.1em;color:var(--i-color_primary);}.ipsCommercePrices small{color:var(--i-color_soft);font-size:inherit;}.ipsCommercePrices s{filter:grayscale(1) opacity(.4);}.ipsCommerceStock--in{font-weight:600;}.ipsCommerceStock--out{font-weight:500;color:var(--i-color_negative);}.ipsData--cart-contents .ipsData__item{isolation:auto;}.ipsStreamItem .cNexusPrice{color:var(--i-color_primary);font-weight:bold;font-size:1.1em;}.ipsStreamItem .cNexusPrice s{color:color-mix(in srgb, var(--i-color_soft) 70%, transparent);font-weight:normal;}.ipsStreamItem .cNexusPrice :is(small, s){font-size:max(.8em, 11px);}[data-role="paymentMethodForm"] .ipsInput--dummy:not(#x){display:block;}
+153 -149
View File
@@ -3,7 +3,7 @@ ips.templates.set('core.tooltip'," <div id='{{id}}' class='ipsTooltip' role='to
<div class='ipsPixabayThumb' {{#width}}{{#height}}style="--i-ratio: {{width}} / {{height}}"{{/height}}{{/width}}>
<img loading="lazy" {{#width}}width='{{width}}'{{/width}} {{#height}}height='{{height}}'{{/height}} src="{{thumb}}" class="ipsPixabayImage" data-url="{{url}}" data-id="{{imgid}}" alt="">
</div>
`);ips.templates.set('core.editor.emoticons'," <div class='ipsMenu ipsMenu_wide' id='{{id}}_menu' style='display: none' data-editorID='{{editor}}' data-controller='core.global.editor.emoticons'> <div class='ipsMenu_headerBar'> <h4 class='ipsTitle ipsTitle--h4'>{{#lang}}emoji{{/lang}}</h4> <div class='i-flex i-gap_2'> <a href='#' class='i-color_inherit ipsHide' data-role='skinToneMenu' data-ipsMenu data-ipsMenu-appendTo='#{{id}}_menu' id='{{id}}_tones'>{{#lang}}emoji_skin_tone{{/lang}} <i class='fa-solid fa-caret-down'></i></a> <a href='#' class='i-color_inherit ipsHide' data-role='categoryTrigger' data-ipsMenu data-ipsMenu-appendTo='#{{id}}_menu' id='{{id}}_more'>{{#lang}}emoticonCategories{{/lang}} <i class='fa-solid fa-caret-down'></i></a> </div> <ul class='ipsMenu ipsMenu_veryNarrow i-cursor_pointer' id='{{id}}_tones_menu' role='menu' style='display: none'> <li class='ipsMenu_title'>{{#lang}}emoji_skin_tone{{/lang}}</li> <li class='ipsMenu_item' role='menuitem' data-ipsMenuValue='none'><a>{{#lang}}emoji_skin_tone_default{{/lang}}</a></li> <li class='ipsMenu_sep'><hr></li> <li class='ipsMenu_item' role='menuitem' data-ipsMenuValue='light'><a>\uD83C\uDFFB {{#lang}}emoji_skin_tone_light{{/lang}}</a></li> <li class='ipsMenu_item' role='menuitem' data-ipsMenuValue='medium-light'><a>\uD83C\uDFFC {{#lang}}emoji_skin_tone_medium_light{{/lang}}</a></li> <li class='ipsMenu_item' role='menuitem' data-ipsMenuValue='medium'><a>\uD83C\uDFFD {{#lang}}emoji_skin_tone_medium{{/lang}}</a></li> <li class='ipsMenu_item' role='menuitem' data-ipsMenuValue='medium-dark'><a>\uD83C\uDFFE {{#lang}}emoji_skin_tone_medium_dark{{/lang}}</a></li> <li class='ipsMenu_item' role='menuitem' data-ipsMenuValue='dark'><a>\uD83C\uDFFF {{#lang}}emoji_skin_tone_dark{{/lang}}</a></li> </ul> <ul data-role='categoryMenu' class='ipsMenu ipsMenu_auto i-cursor_pointer' id='{{id}}_more_menu' role='menu' style='display: none'> </ul> </div> <div class='ipsMenu_innerContent'> <div class='ipsEmoticons_content'> <div class='ipsEmpty ipsEmoticons_contentLoading' data-role='emojiLoading'> {{#lang}}loading{{/lang}}... </div> </div> </div> <div class='ipsMenu_footerBar'> <input type='text' data-role='emoticonSearch' class='ipsInput ipsInput--wide' placeholder='{{#lang}}emoticonFind{{/lang}}'> </div></div>");ips.templates.set('core.editor.emoticonSection'," <div data-panel='{{id}}'>{{{content}}}</div>");ips.templates.set('core.editor.emoticonMenu'," <li class='ipsMenu_item' role='menuitem' data-ipsMenuValue='{{categoryID}}'><a><span class='ipsMenu_itemCount'>{{count}}</span>{{title}}</a></li>");ips.templates.set('core.editor.emoticonCategory'," <div class='i-background_2 i-padding_2'><strong>{{title}}</strong></div> <div class='ipsEmoticons_category' data-categoryid='{{categoryID}}'>{{{emoticons}}}</div>");ips.templates.set('core.editor.emoticonSearch'," <div class='ipsEmoticons_category'>{{{emoticons}}}</div>");ips.templates.set('core.editor.emoticonRow'," <div class='ipsEmoticons_row ipsEmoji'>{{{emoticons}}}</div>");ips.templates.set('core.editor.emoticonItem'," <div class='ipsEmoticons_item' data-emoticon='{{tag}}' src='{{src}}' data-height='{{height}}' data-width='{{width}}' title='{{tag}}' loading='lazy'>{{{img}}}</div>");ips.templates.set('core.editor.emoji'," <div class='ipsEmoticons_item' title='{{name}}' data-emoji='{{code}}'>{{{display}}}</div>");ips.templates.set('core.editor.emojiNotNative'," <div class='ipsEmoticons_item' title='{{name}}' data-emoji='{{code}}'>{{{img}}}</div>");ips.templates.set('core.editor.emoticonBlank'," <div class='ipsEmoticons_item'>&nbsp;</div>");ips.templates.set('core.editor.emoticonNoResults'," <div class='i-padding_3 i-text-align_center i-color_soft'>{{#lang}}no_results{{/lang}}</div>");ips.templates.set('core.editor.emojiResult'," <li class='ipsMenu_item i-cursor_pointer' title='{{name}}' data-emoji='{{code}}'> <a><span class='ipsEmoji_result'>{{{emoji}}}</span> <span data-role='shortCode'>{{short_code}}</span></a> </li>");ips.templates.set('core.editor.quote',"<blockquote class='ipsQuote' data-ipsQuote data-gramm='false' cite='{{citeurl}}'><div class='ipsQuote_citation'>{{{citation}}}</div><div class='ipsQuote_contents ipsClearfix' data-gramm='false'>{{{contents}}}</div></blockquote>");ips.templates.set('core.editor.legacyQuoteUpcast',"<div class='ipsQuote_citation'>{{citation}}</div><div class='ipsQuote_contents ipsClearfix' data-gramm='false'>{{{contents}}}</div>");ips.templates.set('core.editor.citation'," <div class='ipsQuote_citation ipsQuote_open'> <a href='#' data-action='toggleQuote' aria-label='{{#lang}}toggle_quote{{/lang}}'>&nbsp;</a> {{#contenturl}} <a href='{{contenturl}}' class='ipsQuote_citation-origin'><i class='fa-solid fa-share'></i></a> {{/contenturl}} {{{citation}}} </div>");ips.templates.set('core.editor.citationLink'," <a href='{{baseURL}}?app=core&module=members&controller=profile&id={{userid}}' data-ipsHover data-ipshover-target='{{base Line truncated
`);ips.templates.set('core.editor.emoticons'," <div class='ipsMenu ipsMenu_wide' id='{{id}}_menu' style='display: none' data-editorID='{{editor}}' data-controller='core.global.editor.emoticons'> <div class='ipsMenu_headerBar'> <h4 class='ipsTitle ipsTitle--h4'>{{#lang}}emoji{{/lang}}</h4> <div class='i-flex i-gap_2'> <a href='#' class='i-color_inherit ipsHide' data-role='skinToneMenu' data-ipsMenu data-ipsMenu-appendTo='#{{id}}_menu' id='{{id}}_tones'>{{#lang}}emoji_skin_tone{{/lang}} <i class='fa-solid fa-caret-down'></i></a> <a href='#' class='i-color_inherit ipsHide' data-role='categoryTrigger' data-ipsMenu data-ipsMenu-appendTo='#{{id}}_menu' id='{{id}}_more'>{{#lang}}emoticonCategories{{/lang}} <i class='fa-solid fa-caret-down'></i></a> </div> <ul class='ipsMenu ipsMenu_veryNarrow i-cursor_pointer' id='{{id}}_tones_menu' role='menu' style='display: none'> <li class='ipsMenu_title'>{{#lang}}emoji_skin_tone{{/lang}}</li> <li class='ipsMenu_item' role='menuitem' data-ipsMenuValue='none'><a>{{#lang}}emoji_skin_tone_default{{/lang}}</a></li> <li class='ipsMenu_sep'><hr></li> <li class='ipsMenu_item' role='menuitem' data-ipsMenuValue='light'><a>\uD83C\uDFFB {{#lang}}emoji_skin_tone_light{{/lang}}</a></li> <li class='ipsMenu_item' role='menuitem' data-ipsMenuValue='medium-light'><a>\uD83C\uDFFC {{#lang}}emoji_skin_tone_medium_light{{/lang}}</a></li> <li class='ipsMenu_item' role='menuitem' data-ipsMenuValue='medium'><a>\uD83C\uDFFD {{#lang}}emoji_skin_tone_medium{{/lang}}</a></li> <li class='ipsMenu_item' role='menuitem' data-ipsMenuValue='medium-dark'><a>\uD83C\uDFFE {{#lang}}emoji_skin_tone_medium_dark{{/lang}}</a></li> <li class='ipsMenu_item' role='menuitem' data-ipsMenuValue='dark'><a>\uD83C\uDFFF {{#lang}}emoji_skin_tone_dark{{/lang}}</a></li> </ul> <ul data-role='categoryMenu' class='ipsMenu ipsMenu_auto i-cursor_pointer' id='{{id}}_more_menu' role='menu' style='display: none'> </ul> </div> <div class='ipsMenu_innerContent'> <div class='ipsEmoticons_content'> <div class='ipsEmpty ipsEmoticons_contentLoading' data-role='emojiLoading'> {{#lang}}loading{{/lang}}... </div> </div> </div> <div class='ipsMenu_footerBar'> <input type='text' data-role='emoticonSearch' class='ipsInput ipsInput--wide' placeholder='{{#lang}}emoticonFind{{/lang}}'> </div></div>");ips.templates.set('core.editor.emoticonSection'," <div data-panel='{{id}}'>{{{content}}}</div>");ips.templates.set('core.editor.emoticonMenu'," <li class='ipsMenu_item' role='menuitem' data-ipsMenuValue='{{categoryID}}'><a><span class='ipsMenu_itemCount'>{{count}}</span>{{title}}</a></li>");ips.templates.set('core.editor.emoticonCategory'," <div class='i-background_2 i-padding_2'><strong>{{title}}</strong></div> <div class='ipsEmoticons_category' data-categoryid='{{categoryID}}'>{{{emoticons}}}</div>");ips.templates.set('core.editor.emoticonSearch'," <div class='ipsEmoticons_category'>{{{emoticons}}}</div>");ips.templates.set('core.editor.emoticonRow'," <div class='ipsEmoticons_row ipsEmoji'>{{{emoticons}}}</div>");ips.templates.set('core.editor.emoticonItem'," <div class='ipsEmoticons_item' data-emoticon='{{tag}}' src='{{src}}' data-height='{{height}}' data-width='{{width}}' title='{{tag}}' loading='lazy'>{{{img}}}</div>");ips.templates.set('core.editor.emoji'," <div class='ipsEmoticons_item' title='{{name}}' data-emoji='{{code}}'>{{{display}}}</div>");ips.templates.set('core.editor.emojiNotNative'," <div class='ipsEmoticons_item' title='{{name}}' data-emoji='{{code}}'>{{{img}}}</div>");ips.templates.set('core.editor.emoticonBlank'," <div class='ipsEmoticons_item'>&nbsp;</div>");ips.templates.set('core.editor.emoticonNoResults'," <div class='i-padding_3 i-text-align_center i-color_soft'>{{#lang}}no_results{{/lang}}</div>");ips.templates.set('core.editor.emojiResult'," <li class='ipsMenu_item i-cursor_pointer' title='{{name}}' data-emoji='{{code}}'> <a><span class='ipsEmoji_result'>{{{emoji}}}</span> <span data-role='shortCode'>{{short_code}}</span></a> </li>");ips.templates.set('core.editor.quote',"<blockquote class='ipsQuote' data-ipsQuote data-gramm='false' cite='{{citeurl}}'><div class='ipsQuote_citation'>{{{citation}}}</div><div class='ipsQuote_contents ipsClearfix' data-gramm='false'>{{{contents}}}</div></blockquote>");ips.templates.set('core.editor.legacyQuoteUpcast',"<div class='ipsQuote_citation'>{{citation}}</div><div class='ipsQuote_contents ipsClearfix' data-gramm='false'>{{{contents}}}</div>");ips.templates.set('core.editor.citation'," <div class='ipsQuote_citation ipsQuote_open'> <a href='#' data-action='toggleQuote' aria-label='{{#lang}}toggle_quote{{/lang}}'>&nbsp;</a> {{#contenturl}} <a href='{{contenturl}}' class='ipsQuote_citation-origin'><i class='fa-solid fa-share'></i></a> {{/contenturl}} {{{citation}}} </div>");ips.templates.set('core.editor.citationLink'," <a href='{{baseURL}}?app=core&module=members&controller=profile&id={{userid}}' data-ipsHover data-ipshover-target='{{base Line truncated
ips.templates.set('core.rating.star'," <li class='{{className}}' data-ratingValue='{{value}}'><a href='#'><i class='fa-solid fa-star'></i></a></li>");ips.templates.set('core.rating.halfStar'," <li class='ipsRating_half' data-ratingValue='{{value}}'><i class='fa-solid fa-star-half'></i><i class='fa-solid fa-star-half fa-flip-horizontal'></i></li>");ips.templates.set('core.rating.loading'," <i class='ipsLoadingIcon'></span>");ips.templates.set('core.sidebar.managerWrapper',`\
<div id='elSidebarManager' data-role='manager' class='ipsToolbox' hidden>
<div class='ipsToolbox__tools'>
@@ -1140,12 +1140,12 @@ var workingItems;if(!options.group){workingItems=$(elem).find('.ipsSideMenu_item
if(options.type=='check'){item.toggleClass('ipsSideMenu_itemActive').find('input[type="radio"], input[type="checkbox"]').prop("checked",function(i,val){return!val;}).change();}else{workingItems.removeClass('ipsSideMenu_itemActive').find('input[type="radio"], input[type="checkbox"]').prop("checked",false);item.addClass('ipsSideMenu_itemActive').find('input[type="radio"], input[type="checkbox"]').prop("checked",true).change();}
var selectedItems=[];workingItems.filter('.ipsSideMenu_itemActive').each(function(){selectedItems.push($(this).attr('data-ipsMenuValue'));});$(elem).trigger('itemClicked.sideMenu',{id:$(elem).identify().attr('id'),menuElem:$(elem),selectedElem:item,selectedItemID:item.attr('data-ipsMenuValue'),selectedItems:selectedItems});},_toggleSideMenu=function(e){if(e){e.preventDefault();}
$(elem).toggleClass('ipsSideMenu_open');$(elem).find('.ipsSideMenu__view').each(function(){this.scrollIntoView({behavior:"smooth"})});};init();return{};};return{respond};});}(jQuery,_));;
;(function($,_,undefined){"use strict";ips.createModule('ips.ui.spoiler',function(){function respond(elem,options,e){if(elem.parents('[data-ipseditorv5]').length){return;}
if(!elem.get(0)?.tagName.toLowerCase()==='details'){spoilerLegacy(elem)}else{ips.ui.accordion.respond(elem)}}
function spoilerLegacy(elem){elem.contents().hide();var existingHeader=elem.children('.ipsSpoiler_header');var header=ips.templates.render('core.editor.spoilerHeader');if(existingHeader.length){existingHeader.replaceWith(header);}else{elem.prepend(header);}
;(function($,_,undefined){"use strict";ips.createModule('ips.ui.spoiler',function(){function respond(elem,options,e){elem.contents().hide();const details=document.createElement('details');for(const attr of[...$(elem).get(0).getAttributeNames()]){try{details.setAttribute(attr,$(elem).get(0).getAttribute(attr));}catch(e){Debug.warn(e);}}
$(elem).get(0).after(details);elem.hide();for(const child of[...$(elem).get(0).childNodes]){details.appendChild(child);}
elem=$(details);var existingHeader=elem.children('.ipsSpoiler_header');var header=ips.templates.render('core.editor.spoilerHeader');if(existingHeader.length){existingHeader.replaceWith(header);}else{elem.prepend(header);}
elem.find('> .ipsSpoiler_header').on('click',_toggleSpoiler);}
function _toggleSpoiler(e){var header=$(e.currentTarget);var target=$(e.target);var spoiler=$(e.target).closest('[data-ipsSpoiler]');if(target.is('a:not( [data-action="toggleSpoiler"] )')||(target.closest('a').length&&!target.closest('a').is('[data-action="toggleSpoiler"]'))){return;}
e.preventDefault();if(header.hasClass('ipsSpoiler_closed')){ips.utils.anim.go('fadeIn',header.siblings());header.removeClass('ipsSpoiler_closed').addClass('ipsSpoiler_open').find('span').text(ips.getString('spoilerClickToHide'));$(document).trigger('contentChange',[spoiler]);}else{header.siblings().hide();header.removeClass('ipsSpoiler_open').addClass('ipsSpoiler_closed').find('span').text(ips.getString('spoilerClickToReveal'));}
e.preventDefault();if(header.hasClass('ipsSpoiler_closed')){spoiler.attr('open','');ips.utils.anim.go('fadeIn',header.siblings());header.removeClass('ipsSpoiler_closed').addClass('ipsSpoiler_open').find('span').text(ips.getString('spoilerClickToHide'));$(document).trigger('contentChange',[spoiler]);}else{spoiler.attr('open',null);header.siblings().hide();header.removeClass('ipsSpoiler_open').addClass('ipsSpoiler_closed').find('span').text(ips.getString('spoilerClickToReveal'));}
e.stopPropagation();}
ips.ui.registerWidget('spoiler',ips.ui.spoiler);return{respond:respond}});}(jQuery,_));;
;(function($,_,undefined){"use strict";ips.createModule('ips.ui.stack',function(){var defaults={sortable:true,itemTemplate:'core.forms.stack'};var respond=function(elem,options){if(!$(elem).data('_stack')){$(elem).data('_stack',stackObj(elem,_.defaults(options,defaults)));}};ips.ui.registerWidget('stack',ips.ui.stack,['sortable','maxItems','itemTemplate']);return{respond:respond};});var stackObj=function(elem,options){var stack=null;var currentIndex=0;var init=function(){if(!elem.attr('data-initiated')){stack=elem.find('[data-role="stack"]');currentIndex=_getItemCount();if(options.maxItems&&currentIndex>=options.maxItems){elem.find('[data-action="stackAdd"]').hide();}
@@ -1157,6 +1157,33 @@ var html=ips.templates.render(options.itemTemplate,{field:field});if(after){afte
if(options.maxItems&&_getItemCount()>=options.maxItems){elem.find('[data-action="stackAdd"]').hide();}
$(document).trigger('contentChange',[elem]);$(elem).trigger('stackRowAdded',{count:_getItemCount()});},_deleteItem=function(e){e.preventDefault();var row=$(e.currentTarget).closest('[data-role="stackItem"]');if(_getItemCount()===1){row.find('input,textarea').val('');row.find("option:selected").removeAttr("selected");return;}
ips.utils.anim.go('fadeOutDown',row).done(function(){row.hide();setTimeout(function(){row.remove();if(options.maxItems&&_getItemCount()<options.maxItems){elem.find('[data-action="stackAdd"]').show();}},100);});},_getItemCount=function(){return stack.find('[data-role="stackItem"]').length;};init();};}(jQuery,_));;
;(function($,_){"use strict";ips.createModule('ips.ui.tabbar',function(){const defaults={itemSelector:'.ipsTabs__tab',activeClass:false,loadingClass:'ipsLoading ipsTabs_loadingContent',panelClass:'ipsTabs__panel',updateURL:true,updateTitle:false,disableNav:false};ips.ui.registerWidget('tabbar',ips.ui.tabbar,['contentArea','itemSelector','activeClass','loadingClass','disableNav','panelClass','updateURL','updateTitle']);return{respond(elem,options){if(!$(elem).data('_tabbar')){$(elem).data('_tabbar',tabBarObj(elem,_.defaults(options,defaults)));}}};});function tabBarObj(elem,options){const rawElem=$(elem).get(0);const tabs=$(elem).find(options.itemSelector);let barId=rawElem.id;let active;let ajaxObj;function init(){if(!barId){barId=$(rawElem).identify().attr('id');}
if(!options.contentArea||!$(options.contentArea).length){options.contentArea='#'+$(rawElem).next().identify().attr('id');}
if(!tabs.length){Debug.warn("No tabs found in tab bar"+barId);return;}
active=_getActiveTab();_initializeActive();$(elem).on('click',options.itemSelector,_handleTabClick);let tabbar=elem[0],tablist=tabbar.querySelector('[role="tablist"]'),scrollers=tabbar.querySelector('[data-role="tabScrollers"]');if(scrollers){scrollers.addEventListener("click",e=>_handleScrollerClick(e,tablist));let scrollerObserver=new IntersectionObserver(tabs=>tabs.forEach(tab=>tabbar.querySelector(`[data-direction="${tab.target.matches(':first-child') ? 'prev' : 'next'}"]`).hidden=tab.intersectionRatio>.99),{root:tablist,threshold:0.99});tablist.querySelectorAll(':scope > :first-child, :scope > :last-child').forEach(el=>{scrollerObserver.observe(el)});}}
function _handleScrollerClick(e,tablist){let direction=e.target.closest('button').getAttribute("data-direction"),currentScroll=tablist.scrollLeft,listWidth=tablist.offsetWidth/2;if(direction==="prev"){listWidth=-listWidth;}
tablist.scrollTo({left:currentScroll+listWidth,behavior:"smooth"})}
function _handleTabClick(e){if(options.disableNav){return;}
e.preventDefault();if($(this).attr('aria-selected')==='true'){return;}
let thisId=$(this).identify().attr('id'),thisContent=$('#'+$(this).attr('aria-controls'));if(!thisContent.length){thisContent=$('#'+thisId+'_panel');}
if(!thisContent.length){thisContent=_createTabPanel(thisId);_loadContent(this,thisContent).done(()=>_switchTab(thisId)).fail(()=>Debug.log('failed'));}else{_hideAllPanels();_switchTab(thisId);}
_updateURL(thisId);}
function _switchTab(tabId){_hideAllPanels();const thisContent=$('#'+tabId+'_panel'),thisContentParent=document.querySelector(elem[0].getAttribute("data-ipstabbar-contentarea"));thisContent.removeAttr('hidden');$(elem).trigger('tabShown',{barID:barId,tabID:tabId,tab:active,panel:thisContent});$(document).trigger('contentChange',[thisContent]);if(elem[0].matches(".ipsTabs--sticky")&&thisContentParent&&window.scrollY>thisContentParent.offsetTop){thisContentParent.scrollIntoView({behavior:"smooth"});}
active=$('#'+tabId);_makeTabActive(active);$(elem).trigger('tabChanged',{barID:barId,tabID:tabId,tab:active,panel:thisContent});}
function _updateURL(tabId){if(!options.updateURL){return;}
const tabLink=$(`#${tabId}`);const href=tabLink.attr('href');const title=(options.updateTitle&&tabLink.attr('title'))?tabLink.attr('title'):document.title;if(!_.isEmpty(href)&&!href.startsWith('#')){ips.utils.history.replaceState({},'ips.ui.tabbar',href);document.title=title
ips.utils.analytics.trackPageView(href);}}
function _getActiveTab(){const activeTab=elem.find('[aria-selected="true"]');if(activeTab.length){return activeTab.get(0);}
return $(elem).find(options.itemSelector).first();}
function _initializeActive(){const activeId=$(active).identify().attr('id');if(!$('#'+activeId+'_panel').length){if($(options.contentArea).children().length){$(options.contentArea).wrapInner(_createTabPanel(activeId,true));_switchTab(activeId);}else{var newPanel=_createTabPanel(activeId);_loadContent(active,newPanel).done(function(){_switchTab(activeId);});}}else{_switchTab(activeId);}}
function _makeTabActive(activeTab){$(elem).find(options.itemSelector).attr('aria-selected','false');if(options.activeClass){$(elem).find(options.itemSelector).removeClass(options.activeClass);}
$(activeTab).attr('aria-selected','true');if(options.activeClass){$(activeTab).addClass(options.activeClass);}}
function _loadContent(tab,container){let url;const deferred=$.Deferred();_hideAllPanels();if($(tab).attr('data-tabURL')){url=$(tab).attr('data-tabURL');}else{url=$(tab).attr('href');}
$(options.contentArea).addClass(options.loadingClass);ajaxObj=ips.getAjax();ajaxObj(url).done(response=>{$(container).html(response);deferred.resolve();}).fail(()=>window.location=$(tab).attr('href')).always(()=>$(options.contentArea).removeClass(options.loadingClass));return deferred.promise();}
function _hideAllPanels(){$(options.contentArea).find('> .'+options.panelClass).attr('hidden','');}
function _createTabPanel(tabId,noAppend=false){const newPanel=$('<div/>').attr({'id':tabId+'_panel'}).addClass(options.panelClass).attr({'role':'tabpanel'}).attr({'aria-labelledby':tabId});if(!noAppend){$(options.contentArea).append(newPanel);}
return newPanel;}
init();return{init};}}(jQuery,_));;
;((($,_)=>{"use strict";const accordionMap=new Map();const defaults={defaultopen:'open'}
ips.createModule('ips.ui.accordion',function(){ips.ui.registerWidget('accordion',ips.ui.accordion,['defaultopen','alwaysopen'])
return{respond(elem,options){if($(elem).get(0).closest('.ipsEditor__tiptap-wrap')){return;}
@@ -1185,6 +1212,126 @@ siblings=siblings.reverse();element=this.elem.nextElementSibling
while(element?.dataset?.ipsaccordion!==undefined){if(ips.ui.accordion.getInstance(element)){siblings.push(ips.ui.accordion.getInstance(element))}
element=element.nextElementSibling}
return siblings}}})(jQuery,_));;
;(function($,_,undefined){"use strict";const endCachingDebounced=_.throttle((elem)=>{ips.utils.position.endCaching(elem);},100,{leading:false});ips.createModule('ips.ui.tooltip',function(){let _tooltip=null,_timer=[],_currentElem=null,_showTimeout;function respond(elem,options,e){clearTimeout(_showTimeout);if(ips.utils.events.isTouchDevice()){return;}
if(!_tooltip){_createTooltipElement();}
if(e.type==='mouseleave'||e.type==='blur'||e.type==='focusout'){_hide();}else{const content=_getContent(elem,options);if(content){ips.utils.position.startCaching();_showTimeout=setTimeout(()=>{_show(elem,options,content);endCachingDebounced();});}}}
function _calculatePosition(elem,_tooltip){const positionInfo={trigger:elem,target:_tooltip,center:true,above:true,stemOffset:{left:10,top:0}};const tooltipEl=$(_tooltip).get(0);const tooltipPosition=ips.utils.position.positionElem(positionInfo);Object.assign(tooltipEl.style,{left:((tooltipPosition.left>0)?tooltipPosition.left:20)+'px',top:tooltipPosition.top+'px',position:(tooltipPosition.fixed)?'fixed':'absolute',zIndex:ips.ui.zIndex()});if(tooltipPosition.location.vertical==='top'){tooltipEl.classList.add('ipsTooltip_top')
tooltipEl.classList.remove('ipsTooltip_bottom');}else{tooltipEl.classList.add('ipsTooltip_bottom')
tooltipEl.classList.remove('ipsTooltip_top');}
tooltipEl.classList.remove('ipsTooltip_left','ipsTooltip_right');if(tooltipPosition.left>0){if(tooltipPosition.location.horizontal==='left'){tooltipEl.classList.add('ipsTooltip_left');}else if(tooltipPosition.location.horizontal==='right'){tooltipEl.classList.add('ipsTooltip_right');}}}
function _show(elem,options,content){elem=$(elem);ips.utils.anim.cancel(_tooltip);if(options.safe){_tooltip.hide().html(content);}else{_tooltip.hide().text(content);}
if(options.ajax&&!elem.data('_tooltip')){ips.getAjax()(options.ajax).done(response=>{$(elem).data('_tooltip',response);if(options.safe){_tooltip.html(response);}else{_tooltip.text(response);}
_calculatePosition(elem,_tooltip);});}
const element=$(elem).get(0);if(element.hasAttribute('title')){element.setAttribute('_title',element.getAttribute('title'));element.removeAttribute('title');}
_tooltip.show();_calculatePosition(elem,_tooltip);_currentElem=elem;_timer.push(setInterval(_checkForElemPresence,100));setTimeout(()=>$(elem).trigger('tooltipShown'),1);}
function _hide(){ips.utils.anim.go('fadeOut',_tooltip);_currentElem=null;if(_timer.length){for(var i=0;i<_timer.length;i++){clearInterval(_timer[i]);}
_timer=[];}}
function _checkForElemPresence(element){if(!_currentElem||!_currentElem.length||!_currentElem.is(':visible')){_hide();}}
function _getContent(elem,options){elem=$(elem);if(elem.data('_tooltip')){return elem.data('_tooltip');}
else if(options.label){if(options.json){return $.parseJSON(options.label).join("<br>");}else{return options.label;}}else if(elem.attr('aria-label')){return elem.attr('aria-label');}else if(elem.attr('_title')){return elem.attr('_title');}else if(elem.attr('title')){return elem.attr('title');}}
function _createTooltipElement(){var tooltip=ips.templates.render('core.tooltip',{id:'ipsTooltip'});ips.getContainer().append(tooltip);_tooltip=$('#ipsTooltip');}
ips.ui.registerWidget('tooltip',ips.ui.tooltip,['label','extraClass','safe','json','ajax'],{lazyLoad:true,lazyEvents:'mouseenter mouseleave focus blur'});return{respond};});}(jQuery,_));;
;(function($,_,undefined){"use strict";ips.createModule('ips.ui.truncate',function(){const TRUNCATE_CALLBACK_MAP=new WeakMap();document.addEventListener('ips:truncateCollapse',e=>{if(TRUNCATE_CALLBACK_MAP.has(e.target)){TRUNCATE_CALLBACK_MAP.get(e.target)();TRUNCATE_CALLBACK_MAP.delete(e.target);}},{capture:true});var defaults={expandText:ips.getString('show_more'),deferred:false,deferredClasses:undefined,};var respond=function(elem,options){let el=elem[0];if(el.closest('[data-ipseditorv5],.tiptap')){return;}
const collapseIfNeeded=()=>{delete el.dataset.ipstruncateDeferred;if(el.scrollHeight>el.offsetHeight){if(options.deferred&&options.deferredClasses){for(const cls of options.deferredClasses.split(/\s+/)){el.classList.add(cls);}}
_hideTruncate(elem,_.defaults(options,defaults));}}
if(options.deferred){TRUNCATE_CALLBACK_MAP.set(el,collapseIfNeeded);return;}
collapseIfNeeded();},_hideTruncate=function(elem,options){if(elem.attr('data-truncated')){return;}
var showMore=ips.templates.render('core.truncate.expand',{text:options.expandText});$(elem).after(showMore);var expander=elem.next("[data-action='expandTruncate']");elem.attr('data-truncated',true);expander.on('click',function(e){elem.attr('data-truncate-expanded',true);expander.remove();});};ips.ui.registerWidget('truncate',ips.ui.truncate,['expandText','deferred']);return{respond:respond};});}(jQuery,_));;
;(function($,_,undefined){const imageExtensions=new Set(['jpg','jpeg','jpe','gif','png','webp','avif']),audioExtensions=new Set(['mp3','ogg','wav','m4a']),videoExtensions=new Set(['mp4','3gp','mov','ogg','ogv','mpg','mpeg','flv','webm','wmv','avi','m4v']);const uploadObj=function(elem,options,e){elem=$(elem);let pluploadObj,runtime,listContainer,uploadCount=0,totalSize=0,injectIds={},uploaderID='',sound=null;function init(){uploaderID=$(elem).identify().attr('id');if(options.listContainer){listContainer=$(options.listContainer);}else if($(elem).find('[data-role="fileList"]').length){listContainer=$(elem).find('[data-role="fileList"]');}else{listContainer=$(elem);}
if(ips.templates.get(options.template+'Wrapper')){listContainer.prepend(ips.templates.render(options.template+'Wrapper'));const firstItem=listContainer.children().first();firstItem.append(listContainer.children().not(firstItem));listContainer=firstItem;$(document).trigger('contentChange',[listContainer.parent()]);}
$(document).on('addUploaderFile',_addUploaderFile);$(document).on('removeAllFiles',_removeAllFiles);if(options.existingFiles){try{const files=$.parseJSON(options.existingFiles);if(files.length){_buildExistingFiles(files);}}catch(err){Debug.error("Couldn't build existing files: "+err);}}
ips.utils.cookie.set('editor_supports_drag',_supportsDraggable()?'true':'false');$(elem).find('[data-action="browse"],[data-supports-drag]').attr('data-supports-drag',_supportsDraggable()?'true':'false');const load=ips.getSetting('useCompiledFiles')?['core/interface/plupload/plupload.full.min.js']:['core/interface/plupload/moxie.js','core/interface/plupload/plupload.dev.js'];ips.loader.get(load).then(function(){_setUpUploader();_initUploader();_postInitEvents();_setUpFormEvents();});}
function refresh(){if(pluploadObj){Debug.log("Refreshing");pluploadObj.refresh();}}
function _setUpFormEvents(){const form=_getForm();if(!form.length){return;}
if(options.allowStockPhotos!==false){$(elem).find('[data-action="stockPhoto"]').on('click',function(e){e.preventDefault();e.stopPropagation();const dialogRef=ips.ui.dialog.create({title:ips.getString("stockphoto_header"),fixed:false,destructOnClose:true,url:ips.getSetting('baseURL')+'?app=core&module=system&controller=pixabay&uploader='+$(elem).attr('data-ipsUploader-name'),});dialogRef.show();});}
form.on('submit',function(e){if(pluploadObj.state!==plupload.STOPPED){e.preventDefault();e.stopPropagation();ips.ui.alert.show({type:'alert',message:ips.getString('filesStillUploading'),subText:ips.getString('filesStillUploadingDesc'),icon:'warn'});$(elem).trigger('fileStillUploading');}});}
function _addUploaderFile(e,data){if(data.uploaderID===uploaderID){data.extIcon=ips.ui.uploader.getExtensionIcon(data.title);listContainer.append(ips.templates.render(_getTemplateName(data),data));}}
function _getTemplateName(data){if(options.template!==null){return options.template;}
let type='fileItem';if(data.isImage){type='imageItem';}else if(data.isVideo){type='videoItem';}
return`core.attachments.${type}`;}
function _removeAllFiles(){listContainer.find('[data-role="file"]').remove();}
function _buildExistingFiles(files){if(!files.length){return;}
for(let file of files){const data={id:file.id,imagesrc:file.imagesrc,thumbnail:file.thumbnail?file.thumbnail:'',thumbnail_for_css:file.thumbnail?file.thumbnail.replace('(','\\(').replace(')','\\)'):'',title:file.originalFileName,size:file.size,field_name:$(elem).attr('data-ipsUploader-name'),newUpload:false,insertable:!options.insertable,done:true,'default':file.default?file.default:null,supportsDelete:options.supportsDelete,extIcon:ips.ui.uploader.getExtensionIcon(file.originalFileName)};if(file.id===$(elem).attr('data-ipsUploader-default')){data['checked']="checked";}
if(file.hasThumb){data['thumb']="<img src='"+(file['thumbnail']?file['thumbnail']:file['imagesrc'])+"' class='ipsImage' alt='An uploaded image'>";}
listContainer.append(ips.templates.render(options.template,data));$('#'+file.id).trigger('newItem',[$('#'+file.id)]);}
$(elem).trigger('fileAdded',{count:files.length,uploader:options.name});}
function _setUpUploader(){pluploadObj=new plupload.Uploader(_getUploaderSettings());pluploadObj.bind('Init',events.init);listContainer.find('[data-role="file"]').each(function(){const fileElem=$(this);fileElem.on('click','[data-role="deleteFile"]',_.bind(_deleteFile,fileElem,fileElem));uploadCount++;});}
function _getForm(){let form=$(elem).parentsUntil('','form');if(!form.length&&options.postkey){form=$(`[data-ipseditorv5-postkey="${options.postkey}"]`).closest('form');}
return form;}
function _getUploaderSettings(){const form=_getForm();if(options.action===null){options.action=form.attr('action');}
if(options.key===null){options.key=form.children("[name='plupload']").val();}
const pluploadOptions={runtimes:'html5,flash,silverlight,html4',multi_selection:options.multiple,url:encodeURI(_decodeUrl(options.action)),file_data_name:options.name,flash_swf_url:'applications/core/interface/plupload/Movie.swf',silverlight_xap_url:'applications/core/interface/plupload/Movie.xap',browse_button:$(elem).find(options.button).identify().attr('id'),headers:{'x-plupload':options.key},chunk_size:options.maxChunkSize+'mb'};if(options.dropTarget){pluploadOptions.drop_element=$(options.dropTarget).attr('id');}else if($(elem).hasClass('ipsAttachment_dropZone')){pluploadOptions.drop_element=$(elem).attr('id');}else if($(elem).find('.ipsAttachment_dropZone').length){pluploadOptions.drop_element=$(elem).find('.ipsAttachment_dropZone').identify().attr('id');}
return pluploadOptions;}
function _isEncoded(url){url=url||'';return url!==decodeURI(url);}
function _decodeUrl(url){while(_isEncoded(url)){url=decodeURI(url);}
return url;}
function _initUploader(){pluploadObj.init();}
function _postInitEvents(){pluploadObj.bind('Error',events.error);pluploadObj.bind('FilesAdded',events.filesAdded);pluploadObj.bind('FilesRemoved',events.filesRemoved);pluploadObj.bind('UploadFile',events.uploadFile);pluploadObj.bind('UploadProgress',events.uploadProgress);pluploadObj.bind('FileUploaded',events.fileUploaded);pluploadObj.bind('UploadComplete',events.uploadComplete);$(elem).on('injectFile',function(e,data){data=data===undefined?e.originalEvent?.data:data;if(typeof data!=='object'||!(data.file instanceof File)||!('data'in data)){Debug.log('Cannot handle the file injection because there is no file to inject');return;}
const pluploadFile=new plupload.File(new moxie.file.File(getRuntimeUid(),data.file));injectIds[pluploadFile.id]=data.data;pluploadObj.addFile(pluploadFile);}).on('resetUploader',function(data){_resetUploader();});$(window).on('resize',function(){pluploadObj.refresh();});}
function getRuntimeUid(){if(!runtime){runtime=new(moxie.runtime.Runtime.getConstructor(pluploadObj.runtime))();runtime.init();}
return runtime.uid;}
function _resetUploader(){uploadCount=0;totalSize=0;_updateCount();$(elem).trigger('removeAllFiles',{uploaderID:uploaderID});}
function _startUpload(){Debug.log('Starting upload process...');pluploadObj.start();}
function _getStatus(status){switch(status){case plupload.QUEUED:return ips.getString('attachQueued');case plupload.UPLOADING:return ips.getString('attachUploading');case plupload.FAILED:return ips.getString('attachFailed');case plupload.DONE:return ips.getString('attachDone');}}
function _updateFileElement(file){const fileElem=_findFileElem(file);_removeStatusClasses(fileElem);_updateStatus(fileElem,file.status);_updateCount();return fileElem;}
function _findFileElem(file){return $(elem).find('#'+file.id);}
function _updateStatus(fileElem,status){$(fileElem).find('[data-role="status"]').html(_getStatus(status));$(fileElem).toggleClass('ipsAttach_error',status===plupload.FAILED);}
function _removeStatusClasses(fileElem){_.each(['uploading','done','error','queued'],function(type){fileElem.removeClass('ipsAttach_'+type);});}
function _updateCount(){$(elem).find('[data-role="count"]').text(uploadCount);elem.trigger('uploadedCountChanged',{count:uploadCount,percent:pluploadObj.total.percent,uploader:options.name});}
function _setPercent(fileElem,percent){$(fileElem).find('[data-role="progressbar"]').attr('value',percent);if(percent===100){fileElem.find('.ipsMeter').slideUp();}}
function _buildThumb(fileElem,file,info){let toInsert='';if(info.imagesrc){Debug.log(fileElem.find('[data-role="preview"]'));toInsert=$('<img/>').attr({src:info.thumbnail?info.thumbnail:info.imagesrc,alt:''});fileElem.attr('data-fullsizeurl',info.imagesrc).attr('data-thumbnailurl',info.thumbnail?info.thumbnail:info.imagesrc).find('[data-role="preview"]').html(toInsert);}else if(info.videosrc){toInsert=$('<video/>').append($('<source/>').attr({src:info.videosrc,type:fileElem.attr('data-mimeType')}));fileElem.attr('data-fullsizeurl',info.videosrc).find('[data-role="preview"]').html(toInsert);}
fileElem.attr('data-fileid',info.id);if(info.securityKey){fileElem.attr('data-filekey',info.securityKey);}}
function _deleteFile(fileElem,e){e.preventDefault();e.stopPropagation();let baseUrl=options.action;if(baseUrl.match(/\?/)){if(baseUrl.slice(-1)!=='?'){baseUrl+='&';}}else{baseUrl+='?';}
ips.getAjax()(baseUrl+'getUploader&postKey='+options.postkey+'&deleteFile='+encodeURIComponent(fileElem.attr('data-fileid')));uploadCount--;totalSize=totalSize-fileElem.attr('data-filesize');_updateCount();fileElem.fadeOut(function(){fileElem.remove();elem.trigger('fileDeleted',{fileElem:fileElem,uploader:options.name,count:uploadCount,postkey:options.postkey});});}
function _supportsDraggable(){return'draggable'in document.createElement('span')&&FileReader!==undefined&&!/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);}
function _fixZIndex(){$(elem).get(0).querySelector(options.button)?.style.setProperty('z-index','')}
let events={init(up){_fixZIndex();if(_supportsDraggable()){const dropElement=$(up.settings.drop_element);let currentElem=null;$(document).on('dragenter',function(e){if(currentElem&&!$(e.target).is(dropElement)&&!$.contains(dropElement.get(0),currentElem)){dropElement.removeClass('ipsDragging');currentElem=null;}});dropElement.on('dragleave',function(){if(!$(currentElem).is(dropElement)&&!$.contains(dropElement.get(0),currentElem)){dropElement.removeClass('ipsDragging');currentElem=null;}}).on('dragenter',function(e){const target=$(e.target);if(target.is(dropElement)||$.contains(dropElement.get(0),e.target)){dropElement.addClass('ipsDragging');currentElem=e.target;}}).on('drop',function(){dropElement.removeClass('ipsDragging');currentElem=null;});}},filesAdded(up,files){_fixZIndex();if(!options.multiple){listContainer.find('[data-role="deleteFile"]').click();if(files.length>1){ips.ui.alert.show({type:'alert',icon:'warn',message:ips.getString('uploadSingleErr')});return false;}}else if(options.maxFiles){if(files.length>options.maxFiles||(uploadCount+files.length)>options.maxFiles){ips.ui.alert.show({type:'alert',icon:'warn',message:ips.pluralize(ips.getString('uploadMaxFilesErr'),options.maxFiles),callbacks:{}});for(const file of files){up.removeFile(file);}
return false;}}else if(options.maxTotalSize&&totalSize>(options.maxTotalSize*1048576)){ips.ui.alert.show({type:'alert',icon:'warn',message:ips.getString('uploadTotalErr',{size:parseFloat((options.maxTotalSize>=1)?options.maxTotalSize:(options.maxTotalSize*1024)).toLocaleString($('html').attr('lang')),size_suffix:(options.maxTotalSize>=1)?ips.getString('size_mb'):ips.getString('size_kb')}),callbacks:{}});for(const file of files){up.removeFile(file);}
return false;}
const allowedFileTypes=(options.allowedFileTypes!==null)?new Set(JSON.parse(options.allowedFileTypes?.toLowerCase?.())||[]):'';let tooLarge=0,overTotalLimit=0,badType=0,sizeAllowance=options.maxTotalSize?(options.maxTotalSize*1048576)-totalSize:null,fileSizeAllowance=options.maxFileSize?options.maxFileSize*1048576:null
for(let file of files){if(fileSizeAllowance!==null&&file.size>fileSizeAllowance){tooLarge++;up.removeFile(file);continue;}
if(sizeAllowance!==null){if(sizeAllowance<file.size){overTotalLimit++;up.removeFile(file);continue;}
sizeAllowance-=file.size;}
const ext=file.name.split('.').pop().toLowerCase();if(allowedFileTypes?.size&&!allowedFileTypes.has(ext)){badType++;up.removeFile(file);continue;}
const size=plupload.formatSize(file.size),status=_getStatus(file.status);$(elem).trigger('addUploaderFile',{uploaderID:uploaderID,id:file.id,title:file.name,mime:file.type,size:size,sizeRaw:file.size,status,statusCode:file.status,statusText:ips.getString('attachStatus',{size:size,status:status}),field_name:elem.attr('data-ipsUploader-name'),newUpload:true,insertable:true,isImage:imageExtensions.has(ext),isVideo:videoExtensions.has(ext),isAudio:audioExtensions.has(ext),supportsDelete:options.supportsDelete});$('#'+file.id).addClass('ipsAttach_queued').trigger('newItem',[$('#'+file.id)]);}
if(tooLarge){ips.ui.alert.show({type:'alert',icon:'warn',message:ips.pluralize(ips.getString('uploadSizeErr',{max_file_size:parseFloat((options.maxFileSize>1)?options.maxFileSize:(options.maxFileSize*1024)).toLocaleString(document.documentElement.lang),size_suffix:(options.maxFileSize>1)?ips.getString('size_mb'):ips.getString('size_kb')}),[tooLarge,tooLarge])});for(const file of files){up.removeFile(file);}}
if(overTotalLimit){ips.ui.alert.show({type:'alert',icon:'warn',message:ips.pluralize(ips.getString('uploadSizeTotalErr',{max_file_size:parseFloat(options.maxTotalSize>1?options.maxTotalSize:options.maxTotalSize*1024).toLocaleString(document.documentElement.lang),size_suffix:(options.maxTotalSize>1)?ips.getString('size_mb'):ips.getString('size_kb')}),[overTotalLimit,overTotalLimit]),callbacks:{}});}
if(badType){ips.ui.alert.show({type:'alert',icon:'warn',message:ips.pluralize(ips.getString('pluploaderr_-601',{allowed_extensions:[...allowedFileTypes].join(', ')}),[tooLarge,tooLarge]),callbacks:{}});}
if(up.files.length){$(elem).trigger('fileAdded',{count:up.files.length,uploader:options.name});if(options.autoStart){_startUpload();}}},filesRemoved(uploader,files){if(files instanceof Array||Symbol.iterator in files){for(const file of files){if(file.id&&injectIds[file.id]?.error instanceof Function){try{injectIds[file.id].error();}catch(e){console.error(e);}}}}
_fixZIndex();Debug.log('removed');},uploadFile(up,file){_fixZIndex();$(elem).find('.ipsAttachment_loading').show();_updateFileElement(file).addClass('ipsAttach_uploading');},uploadProgress(up,file){_fixZIndex();const fileElem=_updateFileElement(file);fileElem.addClass('ipsAttach_uploading');_setPercent(fileElem,file.percent);elem.trigger('uploadProgress',{count:uploadCount,percent:pluploadObj.total.percent,uploader:options.name});},uploadComplete(up,files){_fixZIndex();let success=0;let error=0;_.each(files,function(file){if(file.status===5){success++;}else if(file.status===4){error++;}});const total=success+error;$(elem).find('.ipsAttachment_loading').hide();elem.trigger('uploadComplete',{success:success,error:error,total:total,uploader:options.name});if(ips.utils.events.getVisibilityProp()!==undefined||!document[ips.utils.events.getVisibilityProp()]){return;}
const text=[];if(!total){return;}
if(success){text.push(ips.pluralize(ips.getString('notifyUploadSuccess'),[success]));}
if(error){text.push(ips.pluralize(ips.getString('notifyUploadError'),[error]));}
if(ips.utils.notification.hasPermission()){ips.utils.notification.create({title:ips.pluralize(ips.getString('yourUploadsFinished'),[total]),body:text.join(' '),icon:ips.getSetting('upload_imgURL'),onClick:function(){try{window.focus();}catch(err){}}}).show();}
if(sound){try{sound.play();}catch(err){}}},fileUploaded(up,file,info){_fixZIndex();uploadCount++;totalSize+=file.size;const fileElem=_updateFileElement(file);fileElem.addClass('ipsAttach_done');if(options.insertable){ips.utils.anim.go('fadeIn',fileElem.find('[data-role="insert"]'));}
fileElem.find('[data-role="deleteFileWrapper"]').slideDown();_setPercent(fileElem,100);try{const jsonInfo=$.parseJSON(info.response);elem.before($('<input type="hidden">').attr('name',elem.attr('data-ipsUploader-name')+'_existing['+file.id+']').attr('value',jsonInfo.id));if(jsonInfo['error']){fileElem.on('click','[data-role="deleteFile"]',_.bind(_deleteFile,fileElem,fileElem));file.status=plupload.FAILED;up.trigger('error',{code:jsonInfo['error'],extra:jsonInfo['extra'],subText:jsonInfo['sub'],file:file,uploader:options.name});return;}
if(jsonInfo){_buildThumb(fileElem,file,jsonInfo);fileElem.on('click','[data-role="deleteFile"]',_.bind(_deleteFile,fileElem,fileElem));}}catch(err){fileElem.on('click','[data-role="deleteFile"]',_.bind(_deleteFile,fileElem,fileElem));file.status=plupload.FAILED;up.trigger('error',{code:'upload_error',extra:err.message,file:file,uploader:options.name});Debug.warn(err);}
if(file.id&&injectIds[file.id]){$(elem).trigger('fileInjected',{'fileElem':fileElem,'data':injectIds[file.id]});delete injectIds[file.id];}},error(up,err){_fixZIndex();if(err.file){_updateFileElement(err.file);}
if(err.code===-600||err.code===-601){return;}
let errorMessage=ips.getString('pluploaderr_'+err.code,{max_file_size:parseFloat((options.maxFileSize>1)?options.maxFileSize:(options.maxFileSize*1024)).toLocaleString($('html').attr('lang')),size_suffix:(options.maxFileSize>1)?ips.getString('size_mb'):ips.getString('size_kb'),allowed_extensions:(options.allowedFileTypes!==null)?$.parseJSON(options.allowedFileTypes).join(','):'',server_error_code:(err.extra!==null)?err.extra:0,});if(!errorMessage){errorMessage=ips.getString('pluploaderr_SERVER_CONFIGURATION',{server_error_code:err.code});err.subText=ips.getString('pluploaderr_error_code',{code:err.code});}
ips.ui.alert.show({type:'alert',icon:'warn',message:errorMessage,callbacks:{},subTextHtml:err.subText?err.subText:null});}};init();return{init,refresh};};"use strict";const iconMap={'txt':'file-lines','rtf':'file-lines','csv':'file-lines','pdf':'file-pdf','doc':'file-word','docx':'file-word','xls':'file-excel','xlsx':'file-excel','xlsm':'file-excel','zip':'file-archive','tar':'file-archive','gz':'file-archive','ppt':'file-powerpoint','pptx':'file-powerpoint','ico':'file-image','gif':'file-image','jpeg':'file-image','jpg':'file-image','jpe':'file-image','png':'file-image','avif':'file-image','psd':'file-image','webp':'file-image','aac':'file-audio','mp3':'file-audio','ogg':'file-audio','ogv':'file-audio','wav':'file-audio','m4a':'file-audio','flv':'file-video','mkv':'file-video','mp4':'file-video','mpg':'file-video','mpeg':'file-video','3gp':'file-video','webm':'file-video','wmv':'file-video','avi':'file-video','m4v':'file-video','mov':'file-video','css':'file-code','html':'file-code','js':'file-code','xml':'file-code',};ips.createModule('ips.ui.uploader',function(){const defaults={multiple:false,allowedFileTypes:null,maxFileSize:null,maxTotalSize:null,maxChunkSize:null,action:null,name:'upload',button:'.ipsButton--primary',key:null,autoStart:true,insertable:false,template:'core.attachments.fileItem',postkey:'',supportsDelete:true,allowStockPhotos:false,};function respond(elem,options){if(!$(elem).data('_uploader')){$(elem).show();$(elem).data('_uploader',uploadObj(elem,_.defaults(options,defaults)));}else{try{const obj=$(elem).data('_uploader');obj.refresh();}catch(err){Debug.log("Couldn't refresh uploader "+$(elem).identify().attr('id'));}}}
function refresh(elem){try{const obj=$(elem).data('_uploader');obj.refresh();}catch(err){Debug.log("Couldn't refresh uploader "+$(elem).identify().attr('id'));}}
function getObj(elem){if($(elem).data('_uploader')){return $(elem).data('_uploader');}
return undefined;}
function getExtensionIcon(filename){const extRegex=/(?:\.([^.]+))?$/;const ext=extRegex.exec(filename);if(!_.isUndefined(iconMap[ext[1]])){return iconMap[ext[1]];}
return'file';}
ips.ui.registerWidget('uploader',ips.ui.uploader,['multiple','allowedFileTypes','maxFileSize','maxTotalSize','maxChunkSize','action','name','button','key','maxFiles','dropTarget','listContainer','autoStart','insertable','template','existingFiles','postkey','supportsDelete','allowStockPhotos']);return{respond:respond,refresh:refresh,getObj:getObj,getExtensionIcon:getExtensionIcon};});}(jQuery,_));;
;(function($,_,undefined){"use strict";ips.createModule('ips.ui.validation',function(){var defaults={live:true,submit:true,characterLimit:3,displayAs:'list'};var respond=function(elem,options,e){if(!$(elem).data('_validation')){$(elem).data('_validation',validateObj(elem,_.defaults(options,defaults)));}};var validateObj=function(elem,options){var init=function(){if(options.live){$(elem).on('keyup blur','input:not( [type="button"] ):not( [type="checkbox"] ):not( [type="hidden"] )'+
':not( [type="radio"] ):not( [data-validate-bypass] ), textarea:not( [data-validate-bypass] )',_textEvent);$(elem).on('change','select',_selectEvent);}
if(options.submit){$(elem).closest('form').on('submit',_submitEvent);}},_submitEvent=function(e){var errors=0;var elements=$(elem).find('input:not( [type="submit"] ):not( [type="checkbox"] )'+
':not( [type="radio"] ):not( [type="hidden"] ), select, textarea');elements.each(function(){if(!_validate($(this))){errors++;}});if(errors>0){e.preventDefault();$(e.currentTarget).trigger('error.validation',{count:errors});}else{$(e.currentTarget).trigger('success.validation');}},_selectEvent=function(e){},_textEvent=function(e){var field=$(e.currentTarget);if(e.type=='blur'||e.type=='focusout'){if(field.val().length>=options.characterLimit||field.is('[type="number"], [type="range"]')){_validate(field);}}else{if(field.attr('data-hasErrors')){_validate(field);}}},_validate=function(target){var result=ips.utils.validate.validate(target);if(result!==true&&!result.result){_displayErrors(target,result);}else{_clearErrors(target);}
return result.result;},_displayErrors=function(target,results){var id=target.identify().attr('id');var errorList=$('#'+id+'_errors');if(!errorList.length){var wrapper=ips.templates.render('core.forms.validationWrapper',{id:id+'_errors'});target.after(wrapper);errorList=$('#'+id+'_errors');}
errorList.html('');for(var i=0;i<results.messages.length;i++){errorList.append(ips.templates.render('core.forms.validationItem',{message:results.messages[i].message}));}
target.addClass('ipsField_error').attr('data-hasErrors',true);},_clearErrors=function(target){var id=target.identify().attr('id');if($('#'+id+'_errors').length){$('#'+id+'_errors').remove();}
target.removeClass('ipsField_error').removeAttr('data-hasErrors');}
init();return{};};ips.ui.registerWidget('validation',ips.ui.validation);return{respond:respond};});}(jQuery,_));;
;(function($,_,undefined){"use strict";ips.createModule('ips.ui.wizard',function(){var respond=function(elem,options,e){elem.on('click','[data-action="wizardLink"]',_.bind(refresh,e,elem));elem.on('submit','form',_.bind(refresh,e,elem));};var refresh=function(elem,e){var target=$(e.currentTarget);_showLoading(elem);if(target.is('form')){if(target.attr('data-bypassAjax')){return true;}
e.preventDefault();e.stopPropagation();e.stopImmediatePropagation();var data=target.serialize()+'&_wizardHeight='+elem.find('[data-role="loading"]').outerHeight();if(e.originalEvent&&e.originalEvent.submitter&&e.originalEvent.submitter.name&&e.originalEvent.submitter.value){data+='&'+e.originalEvent.submitter.name+'='+e.originalEvent.submitter.value;}
ips.getAjax()(target.attr('action'),{data:data,type:'post'}).done(function(response){_insertHtml(response,elem);}).fail(function(response,textStatus,errorThrown){target.attr('data-bypassAjax',true);target.submit();})}else{e.preventDefault();ips.getAjax()(target.attr('href')).done(function(response){_insertHtml(response,elem);});}},_insertHtml=function(response,elem){if(_.isObject(response)&&response.redirect){window.location=response.redirect;return;}
var responseDiv=$('<div>'+response+'</div>');var responseWizard=responseDiv.find('[data-ipsWizard]').html();if(!responseWizard){responseWizard=response;}
responseDiv.find("link","script").appendTo('head');ips.controller.cleanContentsOf(elem);elem.html(responseWizard);$(document).trigger('contentChange',[elem]);elem.trigger('wizardStepChanged');},_showLoading=function(elem){var loading=elem.find('[data-role="loading"]');var formContainer=elem.find('[data-role="wizardContent"]');if(!formContainer.is(':visible')){return;}
if(!loading.length){loading=$('<div/>').attr('data-role','loading').addClass('ipsLoading').hide();elem.append(loading);}
var dims={width:formContainer.outerWidth(),height:formContainer.outerHeight()};loading.css({width:dims.width+'px',height:dims.height+'px'}).show();formContainer.hide().after(loading.show());},_hideLoading=function(){var loading=elem.find('[data-role="loading"]');var formContainer=elem.find('[data-role="registerForm"]');loading.remove();formContainer.show();};ips.ui.registerWidget('wizard',ips.ui.wizard);return{respond:respond};});}(jQuery,_));;
;(($,_)=>{"use strict";const defaults={currentitems:[],canEdit:false}
const _globalExclude=`:not(.ipsTableOfContents *, .ipsEdited, aside *, #elPostFeed [data-ips-hook="postWrapper"]:not([data-ips-first-post]) *)`;const _pagebuilderContainer=`:is([data-blockid*="app_cms_Wysiwyg"], [data-blockid*="app_cms_Codemirror"], [data-pageid] [data-widgetarea*="col"] [data-blockid]) > .ipsWidget__content`
const _rootTocTextNodes=`:is(p,h1,h2,h3,h4,h5,h6)`;const _doubleNestedTocTextNodes=`:is(details, .ipsRichTextBox) > :is(summary, .ipsRichTextBox__title)`
@@ -1405,150 +1552,6 @@ lastItems=options.currentitems;TableOfContents.setItems(options.currentitems)}ca
TableOfContents.instanceMap.set(realElem,new TableOfContents(realElem,options))}
return TableOfContents.instanceMap.get(realElem)},refreshElems(){if(Array.isArray(lastItems)||lastItems===null){TableOfContents.setItems(lastItems,true);}},getInstance(elem){if(TableOfContents.instanceMap.has($(elem).get(0))){return TableOfContents.instanceMap.get($(elem).get(0))}
return null;},createSelector(elem){return TableOfContents.createSelector(elem)},getOptions(){return TableOfContents.options}}})})(jQuery,_);
;(function($,_,undefined){"use strict";const endCachingDebounced=_.throttle((elem)=>{ips.utils.position.endCaching(elem);},100,{leading:false});ips.createModule('ips.ui.tooltip',function(){let _tooltip=null,_timer=[],_currentElem=null,_showTimeout;function respond(elem,options,e){clearTimeout(_showTimeout);if(ips.utils.events.isTouchDevice()){return;}
if(!_tooltip){_createTooltipElement();}
if(e.type==='mouseleave'||e.type==='blur'||e.type==='focusout'){_hide();}else{const content=_getContent(elem,options);if(content){ips.utils.position.startCaching();_showTimeout=setTimeout(()=>{_show(elem,options,content);endCachingDebounced();});}}}
function _calculatePosition(elem,_tooltip){const positionInfo={trigger:elem,target:_tooltip,center:true,above:true,stemOffset:{left:10,top:0}};const tooltipEl=$(_tooltip).get(0);const tooltipPosition=ips.utils.position.positionElem(positionInfo);Object.assign(tooltipEl.style,{left:((tooltipPosition.left>0)?tooltipPosition.left:20)+'px',top:tooltipPosition.top+'px',position:(tooltipPosition.fixed)?'fixed':'absolute',zIndex:ips.ui.zIndex()});if(tooltipPosition.location.vertical==='top'){tooltipEl.classList.add('ipsTooltip_top')
tooltipEl.classList.remove('ipsTooltip_bottom');}else{tooltipEl.classList.add('ipsTooltip_bottom')
tooltipEl.classList.remove('ipsTooltip_top');}
tooltipEl.classList.remove('ipsTooltip_left','ipsTooltip_right');if(tooltipPosition.left>0){if(tooltipPosition.location.horizontal==='left'){tooltipEl.classList.add('ipsTooltip_left');}else if(tooltipPosition.location.horizontal==='right'){tooltipEl.classList.add('ipsTooltip_right');}}}
function _show(elem,options,content){elem=$(elem);ips.utils.anim.cancel(_tooltip);if(options.safe){_tooltip.hide().html(content);}else{_tooltip.hide().text(content);}
if(options.ajax&&!elem.data('_tooltip')){ips.getAjax()(options.ajax).done(response=>{$(elem).data('_tooltip',response);if(options.safe){_tooltip.html(response);}else{_tooltip.text(response);}
_calculatePosition(elem,_tooltip);});}
const element=$(elem).get(0);if(element.hasAttribute('title')){element.setAttribute('_title',element.getAttribute('title'));element.removeAttribute('title');}
_tooltip.show();_calculatePosition(elem,_tooltip);_currentElem=elem;_timer.push(setInterval(_checkForElemPresence,100));setTimeout(()=>$(elem).trigger('tooltipShown'),1);}
function _hide(){ips.utils.anim.go('fadeOut',_tooltip);_currentElem=null;if(_timer.length){for(var i=0;i<_timer.length;i++){clearInterval(_timer[i]);}
_timer=[];}}
function _checkForElemPresence(element){if(!_currentElem||!_currentElem.length||!_currentElem.is(':visible')){_hide();}}
function _getContent(elem,options){elem=$(elem);if(elem.data('_tooltip')){return elem.data('_tooltip');}
else if(options.label){if(options.json){return $.parseJSON(options.label).join("<br>");}else{return options.label;}}else if(elem.attr('aria-label')){return elem.attr('aria-label');}else if(elem.attr('_title')){return elem.attr('_title');}else if(elem.attr('title')){return elem.attr('title');}}
function _createTooltipElement(){var tooltip=ips.templates.render('core.tooltip',{id:'ipsTooltip'});ips.getContainer().append(tooltip);_tooltip=$('#ipsTooltip');}
ips.ui.registerWidget('tooltip',ips.ui.tooltip,['label','extraClass','safe','json','ajax'],{lazyLoad:true,lazyEvents:'mouseenter mouseleave focus blur'});return{respond};});}(jQuery,_));;
;(function($,_,undefined){"use strict";ips.createModule('ips.ui.truncate',function(){var defaults={expandText:ips.getString('show_more')};var respond=function(elem,options){let el=elem[0];if(el.closest('[data-ipseditorv5],.tiptap')){return;}
if(el.scrollHeight>el.offsetHeight){_hideTruncate(elem,_.defaults(options,defaults));}},_hideTruncate=function(elem,options){if(elem.attr('data-truncated')){return;}
var showMore=ips.templates.render('core.truncate.expand',{text:options.expandText});$(elem).after(showMore);var expander=elem.next("[data-action='expandTruncate']");elem.attr('data-truncated',true);expander.on('click',function(e){elem.attr('data-truncate-expanded',true);expander.remove();});};ips.ui.registerWidget('truncate',ips.ui.truncate,['expandText']);return{respond:respond};});}(jQuery,_));;
;(function($,_,undefined){const imageExtensions=new Set(['jpg','jpeg','jpe','gif','png','webp','avif']),audioExtensions=new Set(['mp3','ogg','wav','m4a']),videoExtensions=new Set(['mp4','3gp','mov','ogg','ogv','mpg','mpeg','flv','webm','wmv','avi','m4v']);const uploadObj=function(elem,options,e){elem=$(elem);let pluploadObj,runtime,listContainer,uploadCount=0,totalSize=0,injectIds={},uploaderID='',sound=null;function init(){uploaderID=$(elem).identify().attr('id');if(options.listContainer){listContainer=$(options.listContainer);}else if($(elem).find('[data-role="fileList"]').length){listContainer=$(elem).find('[data-role="fileList"]');}else{listContainer=$(elem);}
if(ips.templates.get(options.template+'Wrapper')){listContainer.prepend(ips.templates.render(options.template+'Wrapper'));const firstItem=listContainer.children().first();firstItem.append(listContainer.children().not(firstItem));listContainer=firstItem;$(document).trigger('contentChange',[listContainer.parent()]);}
$(document).on('addUploaderFile',_addUploaderFile);$(document).on('removeAllFiles',_removeAllFiles);if(options.existingFiles){try{const files=$.parseJSON(options.existingFiles);if(files.length){_buildExistingFiles(files);}}catch(err){Debug.error("Couldn't build existing files: "+err);}}
ips.utils.cookie.set('editor_supports_drag',_supportsDraggable()?'true':'false');$(elem).find('[data-action="browse"],[data-supports-drag]').attr('data-supports-drag',_supportsDraggable()?'true':'false');const load=ips.getSetting('useCompiledFiles')?['core/interface/plupload/plupload.full.min.js']:['core/interface/plupload/moxie.js','core/interface/plupload/plupload.dev.js'];ips.loader.get(load).then(function(){_setUpUploader();_initUploader();_postInitEvents();_setUpFormEvents();});}
function refresh(){if(pluploadObj){Debug.log("Refreshing");pluploadObj.refresh();}}
function _setUpFormEvents(){const form=_getForm();if(!form.length){return;}
if(options.allowStockPhotos!==false){$(elem).find('[data-action="stockPhoto"]').on('click',function(e){e.preventDefault();e.stopPropagation();const dialogRef=ips.ui.dialog.create({title:ips.getString("stockphoto_header"),fixed:false,destructOnClose:true,url:ips.getSetting('baseURL')+'?app=core&module=system&controller=pixabay&uploader='+$(elem).attr('data-ipsUploader-name'),});dialogRef.show();});}
form.on('submit',function(e){if(pluploadObj.state!==plupload.STOPPED){e.preventDefault();e.stopPropagation();ips.ui.alert.show({type:'alert',message:ips.getString('filesStillUploading'),subText:ips.getString('filesStillUploadingDesc'),icon:'warn'});$(elem).trigger('fileStillUploading');}});}
function _addUploaderFile(e,data){if(data.uploaderID===uploaderID){data.extIcon=ips.ui.uploader.getExtensionIcon(data.title);listContainer.append(ips.templates.render(_getTemplateName(data),data));}}
function _getTemplateName(data){if(options.template!==null){return options.template;}
let type='fileItem';if(data.isImage){type='imageItem';}else if(data.isVideo){type='videoItem';}
return`core.attachments.${type}`;}
function _removeAllFiles(){listContainer.find('[data-role="file"]').remove();}
function _buildExistingFiles(files){if(!files.length){return;}
for(let file of files){const data={id:file.id,imagesrc:file.imagesrc,thumbnail:file.thumbnail?file.thumbnail:'',thumbnail_for_css:file.thumbnail?file.thumbnail.replace('(','\\(').replace(')','\\)'):'',title:file.originalFileName,size:file.size,field_name:$(elem).attr('data-ipsUploader-name'),newUpload:false,insertable:!options.insertable,done:true,'default':file.default?file.default:null,supportsDelete:options.supportsDelete,extIcon:ips.ui.uploader.getExtensionIcon(file.originalFileName)};if(file.id===$(elem).attr('data-ipsUploader-default')){data['checked']="checked";}
if(file.hasThumb){data['thumb']="<img src='"+(file['thumbnail']?file['thumbnail']:file['imagesrc'])+"' class='ipsImage' alt='An uploaded image'>";}
listContainer.append(ips.templates.render(options.template,data));$('#'+file.id).trigger('newItem',[$('#'+file.id)]);}
$(elem).trigger('fileAdded',{count:files.length,uploader:options.name});}
function _setUpUploader(){pluploadObj=new plupload.Uploader(_getUploaderSettings());pluploadObj.bind('Init',events.init);listContainer.find('[data-role="file"]').each(function(){const fileElem=$(this);fileElem.on('click','[data-role="deleteFile"]',_.bind(_deleteFile,fileElem,fileElem));uploadCount++;});}
function _getForm(){let form=$(elem).parentsUntil('','form');if(!form.length&&options.postkey){form=$(`[data-ipseditorv5-postkey="${options.postkey}"]`).closest('form');}
return form;}
function _getUploaderSettings(){const form=_getForm();if(options.action===null){options.action=form.attr('action');}
if(options.key===null){options.key=form.children("[name='plupload']").val();}
const pluploadOptions={runtimes:'html5,flash,silverlight,html4',multi_selection:options.multiple,url:encodeURI(_decodeUrl(options.action)),file_data_name:options.name,flash_swf_url:'applications/core/interface/plupload/Movie.swf',silverlight_xap_url:'applications/core/interface/plupload/Movie.xap',browse_button:$(elem).find(options.button).identify().attr('id'),headers:{'x-plupload':options.key},chunk_size:options.maxChunkSize+'mb'};if(options.dropTarget){pluploadOptions.drop_element=$(options.dropTarget).attr('id');}else if($(elem).hasClass('ipsAttachment_dropZone')){pluploadOptions.drop_element=$(elem).attr('id');}else if($(elem).find('.ipsAttachment_dropZone').length){pluploadOptions.drop_element=$(elem).find('.ipsAttachment_dropZone').identify().attr('id');}
return pluploadOptions;}
function _isEncoded(url){url=url||'';return url!==decodeURI(url);}
function _decodeUrl(url){while(_isEncoded(url)){url=decodeURI(url);}
return url;}
function _initUploader(){pluploadObj.init();}
function _postInitEvents(){pluploadObj.bind('Error',events.error);pluploadObj.bind('FilesAdded',events.filesAdded);pluploadObj.bind('FilesRemoved',events.filesRemoved);pluploadObj.bind('UploadFile',events.uploadFile);pluploadObj.bind('UploadProgress',events.uploadProgress);pluploadObj.bind('FileUploaded',events.fileUploaded);pluploadObj.bind('UploadComplete',events.uploadComplete);$(elem).on('injectFile',function(e,data){data=data===undefined?e.originalEvent?.data:data;if(typeof data!=='object'||!(data.file instanceof File)||!('data'in data)){Debug.log('Cannot handle the file injection because there is no file to inject');return;}
const pluploadFile=new plupload.File(new moxie.file.File(getRuntimeUid(),data.file));injectIds[pluploadFile.id]=data.data;pluploadObj.addFile(pluploadFile);}).on('resetUploader',function(data){_resetUploader();});$(window).on('resize',function(){pluploadObj.refresh();});}
function getRuntimeUid(){if(!runtime){runtime=new(moxie.runtime.Runtime.getConstructor(pluploadObj.runtime))();runtime.init();}
return runtime.uid;}
function _resetUploader(){uploadCount=0;totalSize=0;_updateCount();$(elem).trigger('removeAllFiles',{uploaderID:uploaderID});}
function _startUpload(){Debug.log('Starting upload process...');pluploadObj.start();}
function _getStatus(status){switch(status){case plupload.QUEUED:return ips.getString('attachQueued');case plupload.UPLOADING:return ips.getString('attachUploading');case plupload.FAILED:return ips.getString('attachFailed');case plupload.DONE:return ips.getString('attachDone');}}
function _updateFileElement(file){const fileElem=_findFileElem(file);_removeStatusClasses(fileElem);_updateStatus(fileElem,file.status);_updateCount();return fileElem;}
function _findFileElem(file){return $(elem).find('#'+file.id);}
function _updateStatus(fileElem,status){$(fileElem).find('[data-role="status"]').html(_getStatus(status));$(fileElem).toggleClass('ipsAttach_error',status===plupload.FAILED);}
function _removeStatusClasses(fileElem){_.each(['uploading','done','error','queued'],function(type){fileElem.removeClass('ipsAttach_'+type);});}
function _updateCount(){$(elem).find('[data-role="count"]').text(uploadCount);elem.trigger('uploadedCountChanged',{count:uploadCount,percent:pluploadObj.total.percent,uploader:options.name});}
function _setPercent(fileElem,percent){$(fileElem).find('[data-role="progressbar"]').attr('value',percent);if(percent===100){fileElem.find('.ipsMeter').slideUp();}}
function _buildThumb(fileElem,file,info){let toInsert='';if(info.imagesrc){Debug.log(fileElem.find('[data-role="preview"]'));toInsert=$('<img/>').attr({src:info.thumbnail?info.thumbnail:info.imagesrc,alt:''});fileElem.attr('data-fullsizeurl',info.imagesrc).attr('data-thumbnailurl',info.thumbnail?info.thumbnail:info.imagesrc).find('[data-role="preview"]').html(toInsert);}else if(info.videosrc){toInsert=$('<video/>').append($('<source/>').attr({src:info.videosrc,type:fileElem.attr('data-mimeType')}));fileElem.attr('data-fullsizeurl',info.videosrc).find('[data-role="preview"]').html(toInsert);}
fileElem.attr('data-fileid',info.id);if(info.securityKey){fileElem.attr('data-filekey',info.securityKey);}}
function _deleteFile(fileElem,e){e.preventDefault();e.stopPropagation();let baseUrl=options.action;if(baseUrl.match(/\?/)){if(baseUrl.slice(-1)!=='?'){baseUrl+='&';}}else{baseUrl+='?';}
ips.getAjax()(baseUrl+'getUploader&postKey='+options.postkey+'&deleteFile='+encodeURIComponent(fileElem.attr('data-fileid')));uploadCount--;totalSize=totalSize-fileElem.attr('data-filesize');_updateCount();fileElem.fadeOut(function(){fileElem.remove();elem.trigger('fileDeleted',{fileElem:fileElem,uploader:options.name,count:uploadCount,postkey:options.postkey});});}
function _supportsDraggable(){return'draggable'in document.createElement('span')&&FileReader!==undefined&&!/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);}
function _fixZIndex(){$(elem).get(0).querySelector(options.button)?.style.setProperty('z-index','')}
let events={init(up){_fixZIndex();if(_supportsDraggable()){const dropElement=$(up.settings.drop_element);let currentElem=null;$(document).on('dragenter',function(e){if(currentElem&&!$(e.target).is(dropElement)&&!$.contains(dropElement.get(0),currentElem)){dropElement.removeClass('ipsDragging');currentElem=null;}});dropElement.on('dragleave',function(){if(!$(currentElem).is(dropElement)&&!$.contains(dropElement.get(0),currentElem)){dropElement.removeClass('ipsDragging');currentElem=null;}}).on('dragenter',function(e){const target=$(e.target);if(target.is(dropElement)||$.contains(dropElement.get(0),e.target)){dropElement.addClass('ipsDragging');currentElem=e.target;}}).on('drop',function(){dropElement.removeClass('ipsDragging');currentElem=null;});}},filesAdded(up,files){_fixZIndex();if(!options.multiple){listContainer.find('[data-role="deleteFile"]').click();if(files.length>1){ips.ui.alert.show({type:'alert',icon:'warn',message:ips.getString('uploadSingleErr')});return false;}}else if(options.maxFiles){if(files.length>options.maxFiles||(uploadCount+files.length)>options.maxFiles){ips.ui.alert.show({type:'alert',icon:'warn',message:ips.pluralize(ips.getString('uploadMaxFilesErr'),options.maxFiles),callbacks:{}});for(const file of files){up.removeFile(file);}
return false;}}else if(options.maxTotalSize&&totalSize>(options.maxTotalSize*1048576)){ips.ui.alert.show({type:'alert',icon:'warn',message:ips.getString('uploadTotalErr',{size:parseFloat((options.maxTotalSize>=1)?options.maxTotalSize:(options.maxTotalSize*1024)).toLocaleString($('html').attr('lang')),size_suffix:(options.maxTotalSize>=1)?ips.getString('size_mb'):ips.getString('size_kb')}),callbacks:{}});for(const file of files){up.removeFile(file);}
return false;}
const allowedFileTypes=(options.allowedFileTypes!==null)?new Set(JSON.parse(options.allowedFileTypes?.toLowerCase?.())||[]):'';let tooLarge=0,overTotalLimit=0,badType=0,sizeAllowance=options.maxTotalSize?(options.maxTotalSize*1048576)-totalSize:null,fileSizeAllowance=options.maxFileSize?options.maxFileSize*1048576:null
for(let file of files){if(fileSizeAllowance!==null&&file.size>fileSizeAllowance){tooLarge++;up.removeFile(file);continue;}
if(sizeAllowance!==null){if(sizeAllowance<file.size){overTotalLimit++;up.removeFile(file);continue;}
sizeAllowance-=file.size;}
const ext=file.name.split('.').pop().toLowerCase();if(allowedFileTypes?.size&&!allowedFileTypes.has(ext)){badType++;up.removeFile(file);continue;}
const size=plupload.formatSize(file.size),status=_getStatus(file.status);$(elem).trigger('addUploaderFile',{uploaderID:uploaderID,id:file.id,title:file.name,mime:file.type,size:size,sizeRaw:file.size,status,statusCode:file.status,statusText:ips.getString('attachStatus',{size:size,status:status}),field_name:elem.attr('data-ipsUploader-name'),newUpload:true,insertable:true,isImage:imageExtensions.has(ext),isVideo:videoExtensions.has(ext),isAudio:audioExtensions.has(ext),supportsDelete:options.supportsDelete});$('#'+file.id).addClass('ipsAttach_queued').trigger('newItem',[$('#'+file.id)]);}
if(tooLarge){ips.ui.alert.show({type:'alert',icon:'warn',message:ips.pluralize(ips.getString('uploadSizeErr',{max_file_size:parseFloat((options.maxFileSize>1)?options.maxFileSize:(options.maxFileSize*1024)).toLocaleString(document.documentElement.lang),size_suffix:(options.maxFileSize>1)?ips.getString('size_mb'):ips.getString('size_kb')}),[tooLarge,tooLarge])});for(const file of files){up.removeFile(file);}}
if(overTotalLimit){ips.ui.alert.show({type:'alert',icon:'warn',message:ips.pluralize(ips.getString('uploadSizeTotalErr',{max_file_size:parseFloat(options.maxTotalSize>1?options.maxTotalSize:options.maxTotalSize*1024).toLocaleString(document.documentElement.lang),size_suffix:(options.maxTotalSize>1)?ips.getString('size_mb'):ips.getString('size_kb')}),[overTotalLimit,overTotalLimit]),callbacks:{}});}
if(badType){ips.ui.alert.show({type:'alert',icon:'warn',message:ips.pluralize(ips.getString('pluploaderr_-601',{allowed_extensions:[...allowedFileTypes].join(', ')}),[tooLarge,tooLarge]),callbacks:{}});}
if(up.files.length){$(elem).trigger('fileAdded',{count:up.files.length,uploader:options.name});if(options.autoStart){_startUpload();}}},filesRemoved(uploader,files){if(files instanceof Array||Symbol.iterator in files){for(const file of files){if(file.id&&injectIds[file.id]?.error instanceof Function){try{injectIds[file.id].error();}catch(e){console.error(e);}}}}
_fixZIndex();Debug.log('removed');},uploadFile(up,file){_fixZIndex();$(elem).find('.ipsAttachment_loading').show();_updateFileElement(file).addClass('ipsAttach_uploading');},uploadProgress(up,file){_fixZIndex();const fileElem=_updateFileElement(file);fileElem.addClass('ipsAttach_uploading');_setPercent(fileElem,file.percent);elem.trigger('uploadProgress',{count:uploadCount,percent:pluploadObj.total.percent,uploader:options.name});},uploadComplete(up,files){_fixZIndex();let success=0;let error=0;_.each(files,function(file){if(file.status===5){success++;}else if(file.status===4){error++;}});const total=success+error;$(elem).find('.ipsAttachment_loading').hide();elem.trigger('uploadComplete',{success:success,error:error,total:total,uploader:options.name});if(ips.utils.events.getVisibilityProp()!==undefined||!document[ips.utils.events.getVisibilityProp()]){return;}
const text=[];if(!total){return;}
if(success){text.push(ips.pluralize(ips.getString('notifyUploadSuccess'),[success]));}
if(error){text.push(ips.pluralize(ips.getString('notifyUploadError'),[error]));}
if(ips.utils.notification.hasPermission()){ips.utils.notification.create({title:ips.pluralize(ips.getString('yourUploadsFinished'),[total]),body:text.join(' '),icon:ips.getSetting('upload_imgURL'),onClick:function(){try{window.focus();}catch(err){}}}).show();}
if(sound){try{sound.play();}catch(err){}}},fileUploaded(up,file,info){_fixZIndex();uploadCount++;totalSize+=file.size;const fileElem=_updateFileElement(file);fileElem.addClass('ipsAttach_done');if(options.insertable){ips.utils.anim.go('fadeIn',fileElem.find('[data-role="insert"]'));}
fileElem.find('[data-role="deleteFileWrapper"]').slideDown();_setPercent(fileElem,100);try{const jsonInfo=$.parseJSON(info.response);elem.before($('<input type="hidden">').attr('name',elem.attr('data-ipsUploader-name')+'_existing['+file.id+']').attr('value',jsonInfo.id));if(jsonInfo['error']){fileElem.on('click','[data-role="deleteFile"]',_.bind(_deleteFile,fileElem,fileElem));file.status=plupload.FAILED;up.trigger('error',{code:jsonInfo['error'],extra:jsonInfo['extra'],subText:jsonInfo['sub'],file:file,uploader:options.name});return;}
if(jsonInfo){_buildThumb(fileElem,file,jsonInfo);fileElem.on('click','[data-role="deleteFile"]',_.bind(_deleteFile,fileElem,fileElem));}}catch(err){fileElem.on('click','[data-role="deleteFile"]',_.bind(_deleteFile,fileElem,fileElem));file.status=plupload.FAILED;up.trigger('error',{code:'upload_error',extra:err.message,file:file,uploader:options.name});Debug.warn(err);}
if(file.id&&injectIds[file.id]){$(elem).trigger('fileInjected',{'fileElem':fileElem,'data':injectIds[file.id]});delete injectIds[file.id];}},error(up,err){_fixZIndex();if(err.file){_updateFileElement(err.file);}
if(err.code===-600||err.code===-601){return;}
let errorMessage=ips.getString('pluploaderr_'+err.code,{max_file_size:parseFloat((options.maxFileSize>1)?options.maxFileSize:(options.maxFileSize*1024)).toLocaleString($('html').attr('lang')),size_suffix:(options.maxFileSize>1)?ips.getString('size_mb'):ips.getString('size_kb'),allowed_extensions:(options.allowedFileTypes!==null)?$.parseJSON(options.allowedFileTypes).join(','):'',server_error_code:(err.extra!==null)?err.extra:0,});if(!errorMessage){errorMessage=ips.getString('pluploaderr_SERVER_CONFIGURATION',{server_error_code:err.code});err.subText=ips.getString('pluploaderr_error_code',{code:err.code});}
ips.ui.alert.show({type:'alert',icon:'warn',message:errorMessage,callbacks:{},subTextHtml:err.subText?err.subText:null});}};init();return{init,refresh};};"use strict";const iconMap={'txt':'file-lines','rtf':'file-lines','csv':'file-lines','pdf':'file-pdf','doc':'file-word','docx':'file-word','xls':'file-excel','xlsx':'file-excel','xlsm':'file-excel','zip':'file-archive','tar':'file-archive','gz':'file-archive','ppt':'file-powerpoint','pptx':'file-powerpoint','ico':'file-image','gif':'file-image','jpeg':'file-image','jpg':'file-image','jpe':'file-image','png':'file-image','avif':'file-image','psd':'file-image','webp':'file-image','aac':'file-audio','mp3':'file-audio','ogg':'file-audio','ogv':'file-audio','wav':'file-audio','m4a':'file-audio','flv':'file-video','mkv':'file-video','mp4':'file-video','mpg':'file-video','mpeg':'file-video','3gp':'file-video','webm':'file-video','wmv':'file-video','avi':'file-video','m4v':'file-video','mov':'file-video','css':'file-code','html':'file-code','js':'file-code','xml':'file-code',};ips.createModule('ips.ui.uploader',function(){const defaults={multiple:false,allowedFileTypes:null,maxFileSize:null,maxTotalSize:null,maxChunkSize:null,action:null,name:'upload',button:'.ipsButton--primary',key:null,autoStart:true,insertable:false,template:'core.attachments.fileItem',postkey:'',supportsDelete:true,allowStockPhotos:false,};function respond(elem,options){if(!$(elem).data('_uploader')){$(elem).show();$(elem).data('_uploader',uploadObj(elem,_.defaults(options,defaults)));}else{try{const obj=$(elem).data('_uploader');obj.refresh();}catch(err){Debug.log("Couldn't refresh uploader "+$(elem).identify().attr('id'));}}}
function refresh(elem){try{const obj=$(elem).data('_uploader');obj.refresh();}catch(err){Debug.log("Couldn't refresh uploader "+$(elem).identify().attr('id'));}}
function getObj(elem){if($(elem).data('_uploader')){return $(elem).data('_uploader');}
return undefined;}
function getExtensionIcon(filename){const extRegex=/(?:\.([^.]+))?$/;const ext=extRegex.exec(filename);if(!_.isUndefined(iconMap[ext[1]])){return iconMap[ext[1]];}
return'file';}
ips.ui.registerWidget('uploader',ips.ui.uploader,['multiple','allowedFileTypes','maxFileSize','maxTotalSize','maxChunkSize','action','name','button','key','maxFiles','dropTarget','listContainer','autoStart','insertable','template','existingFiles','postkey','supportsDelete','allowStockPhotos']);return{respond:respond,refresh:refresh,getObj:getObj,getExtensionIcon:getExtensionIcon};});}(jQuery,_));;
;(function($,_,undefined){"use strict";ips.createModule('ips.ui.validation',function(){var defaults={live:true,submit:true,characterLimit:3,displayAs:'list'};var respond=function(elem,options,e){if(!$(elem).data('_validation')){$(elem).data('_validation',validateObj(elem,_.defaults(options,defaults)));}};var validateObj=function(elem,options){var init=function(){if(options.live){$(elem).on('keyup blur','input:not( [type="button"] ):not( [type="checkbox"] ):not( [type="hidden"] )'+
':not( [type="radio"] ):not( [data-validate-bypass] ), textarea:not( [data-validate-bypass] )',_textEvent);$(elem).on('change','select',_selectEvent);}
if(options.submit){$(elem).closest('form').on('submit',_submitEvent);}},_submitEvent=function(e){var errors=0;var elements=$(elem).find('input:not( [type="submit"] ):not( [type="checkbox"] )'+
':not( [type="radio"] ):not( [type="hidden"] ), select, textarea');elements.each(function(){if(!_validate($(this))){errors++;}});if(errors>0){e.preventDefault();$(e.currentTarget).trigger('error.validation',{count:errors});}else{$(e.currentTarget).trigger('success.validation');}},_selectEvent=function(e){},_textEvent=function(e){var field=$(e.currentTarget);if(e.type=='blur'||e.type=='focusout'){if(field.val().length>=options.characterLimit||field.is('[type="number"], [type="range"]')){_validate(field);}}else{if(field.attr('data-hasErrors')){_validate(field);}}},_validate=function(target){var result=ips.utils.validate.validate(target);if(result!==true&&!result.result){_displayErrors(target,result);}else{_clearErrors(target);}
return result.result;},_displayErrors=function(target,results){var id=target.identify().attr('id');var errorList=$('#'+id+'_errors');if(!errorList.length){var wrapper=ips.templates.render('core.forms.validationWrapper',{id:id+'_errors'});target.after(wrapper);errorList=$('#'+id+'_errors');}
errorList.html('');for(var i=0;i<results.messages.length;i++){errorList.append(ips.templates.render('core.forms.validationItem',{message:results.messages[i].message}));}
target.addClass('ipsField_error').attr('data-hasErrors',true);},_clearErrors=function(target){var id=target.identify().attr('id');if($('#'+id+'_errors').length){$('#'+id+'_errors').remove();}
target.removeClass('ipsField_error').removeAttr('data-hasErrors');}
init();return{};};ips.ui.registerWidget('validation',ips.ui.validation);return{respond:respond};});}(jQuery,_));;
;(function($,_,undefined){"use strict";ips.createModule('ips.ui.wizard',function(){var respond=function(elem,options,e){elem.on('click','[data-action="wizardLink"]',_.bind(refresh,e,elem));elem.on('submit','form',_.bind(refresh,e,elem));};var refresh=function(elem,e){var target=$(e.currentTarget);_showLoading(elem);if(target.is('form')){if(target.attr('data-bypassAjax')){return true;}
e.preventDefault();e.stopPropagation();e.stopImmediatePropagation();var data=target.serialize()+'&_wizardHeight='+elem.find('[data-role="loading"]').outerHeight();if(e.originalEvent&&e.originalEvent.submitter&&e.originalEvent.submitter.name&&e.originalEvent.submitter.value){data+='&'+e.originalEvent.submitter.name+'='+e.originalEvent.submitter.value;}
ips.getAjax()(target.attr('action'),{data:data,type:'post'}).done(function(response){_insertHtml(response,elem);}).fail(function(response,textStatus,errorThrown){target.attr('data-bypassAjax',true);target.submit();})}else{e.preventDefault();ips.getAjax()(target.attr('href')).done(function(response){_insertHtml(response,elem);});}},_insertHtml=function(response,elem){if(_.isObject(response)&&response.redirect){window.location=response.redirect;return;}
var responseDiv=$('<div>'+response+'</div>');var responseWizard=responseDiv.find('[data-ipsWizard]').html();if(!responseWizard){responseWizard=response;}
responseDiv.find("link","script").appendTo('head');ips.controller.cleanContentsOf(elem);elem.html(responseWizard);$(document).trigger('contentChange',[elem]);elem.trigger('wizardStepChanged');},_showLoading=function(elem){var loading=elem.find('[data-role="loading"]');var formContainer=elem.find('[data-role="wizardContent"]');if(!formContainer.is(':visible')){return;}
if(!loading.length){loading=$('<div/>').attr('data-role','loading').addClass('ipsLoading').hide();elem.append(loading);}
var dims={width:formContainer.outerWidth(),height:formContainer.outerHeight()};loading.css({width:dims.width+'px',height:dims.height+'px'}).show();formContainer.hide().after(loading.show());},_hideLoading=function(){var loading=elem.find('[data-role="loading"]');var formContainer=elem.find('[data-role="registerForm"]');loading.remove();formContainer.show();};ips.ui.registerWidget('wizard',ips.ui.wizard);return{respond:respond};});}(jQuery,_));;
;(function($,_){"use strict";ips.createModule('ips.ui.tabbar',function(){const defaults={itemSelector:'.ipsTabs__tab',activeClass:false,loadingClass:'ipsLoading ipsTabs_loadingContent',panelClass:'ipsTabs__panel',updateURL:true,updateTitle:false,disableNav:false};ips.ui.registerWidget('tabbar',ips.ui.tabbar,['contentArea','itemSelector','activeClass','loadingClass','disableNav','panelClass','updateURL','updateTitle']);return{respond(elem,options){if(!$(elem).data('_tabbar')){$(elem).data('_tabbar',tabBarObj(elem,_.defaults(options,defaults)));}}};});function tabBarObj(elem,options){const rawElem=$(elem).get(0);const tabs=$(elem).find(options.itemSelector);let barId=rawElem.id;let active;let ajaxObj;function init(){if(!barId){barId=$(rawElem).identify().attr('id');}
if(!options.contentArea||!$(options.contentArea).length){options.contentArea='#'+$(rawElem).next().identify().attr('id');}
if(!tabs.length){Debug.warn("No tabs found in tab bar"+barId);return;}
active=_getActiveTab();_initializeActive();$(elem).on('click',options.itemSelector,_handleTabClick);let tabbar=elem[0],tablist=tabbar.querySelector('[role="tablist"]'),scrollers=tabbar.querySelector('[data-role="tabScrollers"]');if(scrollers){scrollers.addEventListener("click",e=>_handleScrollerClick(e,tablist));let scrollerObserver=new IntersectionObserver(tabs=>tabs.forEach(tab=>tabbar.querySelector(`[data-direction="${tab.target.matches(':first-child') ? 'prev' : 'next'}"]`).hidden=tab.intersectionRatio>.99),{root:tablist,threshold:0.99});tablist.querySelectorAll(':scope > :first-child, :scope > :last-child').forEach(el=>{scrollerObserver.observe(el)});}}
function _handleScrollerClick(e,tablist){let direction=e.target.closest('button').getAttribute("data-direction"),currentScroll=tablist.scrollLeft,listWidth=tablist.offsetWidth/2;if(direction==="prev"){listWidth=-listWidth;}
tablist.scrollTo({left:currentScroll+listWidth,behavior:"smooth"})}
function _handleTabClick(e){if(options.disableNav){return;}
e.preventDefault();if($(this).attr('aria-selected')==='true'){return;}
let thisId=$(this).identify().attr('id'),thisContent=$('#'+$(this).attr('aria-controls'));if(!thisContent.length){thisContent=$('#'+thisId+'_panel');}
if(!thisContent.length){thisContent=_createTabPanel(thisId);_loadContent(this,thisContent).done(()=>_switchTab(thisId)).fail(()=>Debug.log('failed'));}else{_hideAllPanels();_switchTab(thisId);}
_updateURL(thisId);}
function _switchTab(tabId){_hideAllPanels();const thisContent=$('#'+tabId+'_panel'),thisContentParent=document.querySelector(elem[0].getAttribute("data-ipstabbar-contentarea"));thisContent.removeAttr('hidden');$(elem).trigger('tabShown',{barID:barId,tabID:tabId,tab:active,panel:thisContent});$(document).trigger('contentChange',[thisContent]);if(elem[0].matches(".ipsTabs--sticky")&&thisContentParent&&window.scrollY>thisContentParent.offsetTop){thisContentParent.scrollIntoView({behavior:"smooth"});}
active=$('#'+tabId);_makeTabActive(active);$(elem).trigger('tabChanged',{barID:barId,tabID:tabId,tab:active,panel:thisContent});}
function _updateURL(tabId){if(!options.updateURL){return;}
const tabLink=$(`#${tabId}`);const href=tabLink.attr('href');const title=(options.updateTitle&&tabLink.attr('title'))?tabLink.attr('title'):document.title;if(!_.isEmpty(href)&&!href.startsWith('#')){ips.utils.history.replaceState({},'ips.ui.tabbar',href);document.title=title
ips.utils.analytics.trackPageView(href);}}
function _getActiveTab(){const activeTab=elem.find('[aria-selected="true"]');if(activeTab.length){return activeTab.get(0);}
return $(elem).find(options.itemSelector).first();}
function _initializeActive(){const activeId=$(active).identify().attr('id');if(!$('#'+activeId+'_panel').length){if($(options.contentArea).children().length){$(options.contentArea).wrapInner(_createTabPanel(activeId,true));_switchTab(activeId);}else{var newPanel=_createTabPanel(activeId);_loadContent(active,newPanel).done(function(){_switchTab(activeId);});}}else{_switchTab(activeId);}}
function _makeTabActive(activeTab){$(elem).find(options.itemSelector).attr('aria-selected','false');if(options.activeClass){$(elem).find(options.itemSelector).removeClass(options.activeClass);}
$(activeTab).attr('aria-selected','true');if(options.activeClass){$(activeTab).addClass(options.activeClass);}}
function _loadContent(tab,container){let url;const deferred=$.Deferred();_hideAllPanels();if($(tab).attr('data-tabURL')){url=$(tab).attr('data-tabURL');}else{url=$(tab).attr('href');}
$(options.contentArea).addClass(options.loadingClass);ajaxObj=ips.getAjax();ajaxObj(url).done(response=>{$(container).html(response);deferred.resolve();}).fail(()=>window.location=$(tab).attr('href')).always(()=>$(options.contentArea).removeClass(options.loadingClass));return deferred.promise();}
function _hideAllPanels(){$(options.contentArea).find('> .'+options.panelClass).attr('hidden','');}
function _createTabPanel(tabId,noAppend=false){const newPanel=$('<div/>').attr({'id':tabId+'_panel'}).addClass(options.panelClass).attr({'role':'tabpanel'}).attr({'aria-labelledby':tabId});if(!noAppend){$(options.contentArea).append(newPanel);}
return newPanel;}
init();return{init};}}(jQuery,_));;
;(function($,_,undefined){"use strict";ips.createModule('ips.utils',function(options){var argsToArray=function(obj){return Array.prototype.slice.call(obj);},uppercaseFirst=function(fromString){return fromString.charAt(0).toUpperCase()+fromString.slice(1);},getIDsFromList=function(list){if(!list){return'';}
if(!_.isArray(list)){list=list.toString().split(',');}
list=_.compact(list);if(!list.length){return false;}
@@ -1556,6 +1559,7 @@ return _.map(list,function(val){return'#'+val;}).join(',');},getCitation=functio
if(data.timestamp){citation=ips.getString('editorQuoteLineWithTime',{date:ips.utils.time.readable(data.timestamp),username:username});}else{citation=ips.getString('editorQuoteLine',{username:username});}}
return citation;},escapeRegexp=function(toEscape){return toEscape.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");},urlBase64ToUint8Array=function(base64String){var padding='='.repeat((4-base64String.length%4)%4);var base64=(base64String+padding).replace(/\-/g,'+').replace(/_/g,'/');var rawData=window.atob(base64);var outputArray=new Uint8Array(rawData.length);for(var i=0;i<rawData.length;++i){outputArray[i]=rawData.charCodeAt(i);}
return outputArray;};return{argsToArray:argsToArray,uppercaseFirst:uppercaseFirst,getIDsFromList:getIDsFromList,getCitation:getCitation,escapeRegexp:escapeRegexp,urlBase64ToUint8Array:urlBase64ToUint8Array};});}(jQuery,_));;
;(function($,_){"use strict";ips.createModule('ips.utils.broadcastChannel',()=>{const channel='BroadcastChannel'in window?new window.BroadcastChannel("ipsBroadcastChannel"):undefined;return{channel:channel,enabled:'BroadcastChannel'in window}})})(jQuery,_);;
;(function($,_,undefined){"use strict";ips.createModule('ips.utils.color',function(){var init=function(){};var convertHex=function(hex,toHue,toSat){hex=hex.replace('#','');if(hex.length===3){hex=hex.slice(0,1)+hex.slice(0,1)+hex.slice(1,2)+hex.slice(1,2)+hex.slice(2,3)+hex.slice(2,3);}
if(hex.length!==6){Debug.write(hex+" isn't a valid hex color");return false;}
var r=(hexToRGB(hex.slice(0,2))/255);var g=(hexToRGB(hex.slice(2,4))/255);var b=(hexToRGB(hex.slice(4,6))/255);var hsl=RGBtoHSL(r,g,b);hsl[0]=(1/360)*toHue;hsl[1]=(1/100)*toSat;var rgb=HSLtoRGB(hsl[0],hsl[1],hsl[2]);return RGBtoHex(rgb[0],rgb[1],rgb[2]);},HSLtoRGB=function(h,s,l){var red=0;var green=0;var blue=0;var v2=0;if(s==0){red=l*255;green=l*255;blue=l*255;}else{if(l<0.5){v2=l*(1+s);}else{v2=(l+s)-(s*l);}
+11 -7
View File
@@ -11,13 +11,15 @@ if(!this._tableOverlay){this._tableOverlay=$('<div/>').addClass('ipsLoading').hi
if(loading){var dims=ips.utils.position.getElemDims(rowElem);var position=ips.utils.position.getElemPosition(rowElem);this._tableOverlay.show().css({left:position.viewportOffset.left+'px',top:position.viewportOffset.top+$(document).scrollTop()+'px',width:dims.width+'px',height:dims.height+'px',position:'absolute',zIndex:ips.ui.zIndex()});rowElem.css({opacity:"0.5"});}else{rowElem.animate({opacity:"1"});this._tableOverlay.hide();}};this.changeSorting=function(e,data){data.originalEvent.preventDefault();if(_.isUndefined(data.selectedItemID)){return;}
var current=this._getSortValue();var menuItem=data.menuElem.find('[data-ipsMenuValue="'+data.selectedItemID+'"]');var sortBy=data.selectedItemID;var sortDirection=current.order;if(menuItem.attr('data-sortDirection')){sortDirection=menuItem.attr('data-sortDirection');}
this.updateURL({sortby:sortBy,sortdirection:sortDirection,page:1});};this._getSortValue=function(){var by=ips.utils.url.getParam('sortby');var order=ips.utils.url.getParam('sortdirection');return{by:by||'',order:order||''};};this._getFilterValue=function(){var filter=ips.utils.url.getParam('filter');return filter||'';};});}(jQuery,_));;
;(function($,_,undefined){"use strict";ips.controller.register('core.front.core.app',{initialize:function(){this.on('click','a[data-confirm],button[data-confirm]',this.confirmSomething);this.on(document,'contentChange',this._checkAndClearAutosave);this.on(document,'contentChange',this.checkOldEmbeds);this.on(document,'contentChange',this.updateExternalLinks);document.addEventListener("ips:colorScheme",this.colorScheme);window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change',this.updatePrefersColorScheme);this.setup();},setup:function(){if(ips.utils.serviceWorker.supported){ips.utils.serviceWorker.registerServiceWorker('front',!_.isUndefined(ips.utils.cookie.get('loggedIn')));}
;(function($,_,undefined){"use strict";ips.controller.register('core.front.core.app',{initialize:function(){this.on('click','a[data-confirm],button[data-confirm]',this.confirmSomething);this.on(document,'contentChange',this._checkAndClearAutosave);this.on(document,'contentChange',this.checkOldEmbeds);this.on(document,'contentChange',this.updateExternalLinks);document.addEventListener("ips:colorScheme",this.colorScheme);window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change',this.updatePrefersColorScheme);if(ips.utils.broadcastChannel.enabled){ips.utils.broadcastChannel.channel.addEventListener("message",this.broadcastChannelEvent);}
this.setup();},setup:function(){if(ips.utils.serviceWorker.supported){ips.utils.serviceWorker.registerServiceWorker('front',!_.isUndefined(ips.utils.cookie.get('loggedIn')));}
if(!ips.utils.events.isTouchDevice()){this.scope.addClass('ipsApp_noTouch');}
ips.utils.cookie.set('ipsTimezone',new Intl.DateTimeFormat().resolvedOptions().timeZone||"UTC");this._checkAndClearAutosave();if(!ips.getSetting('memberID')&&ips.utils.url.getParam('_fromLogout')){ips.utils.db.removeByType('editorSave');}
if($('#elInlineMessage').length){var dialogRef=ips.ui.dialog.create({showFrom:'#inbox',content:'#elInlineMessage',title:$('#elInlineMessage').attr('title')});setTimeout(function(){dialogRef.show();},800);}
ips.utils.links.updateExternalLinks(this.scope);this._upgradeOldEmbeds(this.scope);if(!ips.getSetting('viewProfiles')){this._removeProfileLinks();}},updateExternalLinks:function(e,data){ips.utils.links.updateExternalLinks(data);},checkOldEmbeds:function(e,data){this._upgradeOldEmbeds(data);},_removeProfileLinks:function(){this.scope.find('a[data-mentionid],a[href*="controller=profile"]').replaceWith(function(){return $(this).contents();});},_upgradeOldEmbeds:function(element){if(_.isUndefined(element)){return;}
var oldEmbeds=element.find('[data-embedcontent]:not([data-controller], [data-embed-src])');var toRefresh=[];if(oldEmbeds.length){oldEmbeds.each(function(){$(this).attr('data-controller','core.front.core.autoSizeIframe');toRefresh.push(this);Debug.log("Upgraded old embed");});$(document).trigger('contentChange',[jQuery([]).pushStack(toRefresh)]);}},_checkAndClearAutosave:function(){if(ips.utils.cookie.get('clearAutosave')){var autoSaveKeysToClear=ips.utils.cookie.get('clearAutosave').split(',');for(var i=0;i<autoSaveKeysToClear.length;i++){ips.utils.db.remove('editorSave',autoSaveKeysToClear[i]);}
ips.utils.cookie.unset('clearAutosave');}},confirmSomething:function(e){e.preventDefault();var elem=$(e.currentTarget);var customMessage=$(e.currentTarget).attr('data-confirmMessage');var subMessage=$(e.currentTarget).attr('data-confirmSubMessage');var icon=$(e.currentTarget).attr('data-confirmIcon');ips.ui.alert.show({type:'confirm',icon:(icon)?icon:'warn',message:(customMessage)?customMessage:ips.getString('generic_confirm'),subText:(subMessage)?subMessage:'',callbacks:{ok:function(){window.location=elem.attr('href')+'&wasConfirmed=1';}}});},colorScheme(ev){let value=ev.detail.scheme;document.querySelectorAll('[data-ips-prefers-color-scheme]').forEach(el=>{el.removeAttribute('aria-current');if(el.matches('[data-ips-prefers-color-scheme='+value+']')){el.setAttribute('aria-current','true');}});document.documentElement.dataset.ipsSchemeActive=value;if(value==='system'){document.documentElement.dataset.ipsScheme=(window.matchMedia('(prefers-color-scheme: dark)').matches)?'dark':'light';}else{document.documentElement.dataset.ipsScheme=value;}
ips.utils.cookie.unset('clearAutosave');}},confirmSomething:function(e){e.preventDefault();var elem=$(e.currentTarget);var customMessage=$(e.currentTarget).attr('data-confirmMessage');var subMessage=$(e.currentTarget).attr('data-confirmSubMessage');var icon=$(e.currentTarget).attr('data-confirmIcon');ips.ui.alert.show({type:'confirm',icon:(icon)?icon:'warn',message:(customMessage)?customMessage:ips.getString('generic_confirm'),subText:(subMessage)?subMessage:'',callbacks:{ok:function(){window.location=elem.attr('href')+'&wasConfirmed=1';}}});},broadcastChannelEvent(ev){if(ev.data.command==="colorScheme"){document.dispatchEvent(new CustomEvent("ips:colorScheme",{bubbles:true,detail:{scheme:ev.data.value}}));}},colorScheme(ev){if(document.documentElement.matches('[data-ips-scheme-toggle="false"]')){return;}
let value=ev.detail.scheme;document.querySelectorAll('[data-ips-prefers-color-scheme]').forEach(el=>{if(el.matches('[data-ips-prefers-color-scheme='+value+']')){el.setAttribute('aria-current','true');}else{el.removeAttribute('aria-current');}});document.documentElement.dataset.ipsSchemeActive=value;if(value==='system'){document.documentElement.dataset.ipsScheme=(window.matchMedia('(prefers-color-scheme: dark)').matches)?'dark':'light';}else{document.documentElement.dataset.ipsScheme=value;}
ips.utils.cookie.set('scheme_preference',value,true);},updatePrefersColorScheme:function(){if(document.documentElement.getAttribute('data-ips-scheme-active')==='system'){document.documentElement.setAttribute('data-ips-scheme',(window.matchMedia('(prefers-color-scheme: dark)').matches)?'dark':'light');}}});}(jQuery,_));;
;(function($,_,undefined){"use strict";ips.controller.register('core.front.core.autoSizeIframe',{_origin:ips.utils.url.getOrigin(),_embedId:'',_iframe:null,_border:{vertical:0,horizontal:0},initialize(){if(!this.scope.is('iframe')){return;}
this.on(window,'message',this.receiveMessage);this.on(document,'breakpointChange',this.breakpointChange);this.setup();},setup(){this._lastDims={height:0,width:0};var iframe=this.scope.get(0);iframe.style.overflow='hidden';this._getBorderAdjustment();if(this.scope.height()>800){this.scope.css({height:'800px'});}
@@ -26,7 +28,7 @@ this._startReadyTimeout();},_startReadyTimeout(){this._readyTimeout=setInterval(
try{const pmData=typeof e.originalEvent.data==='string'?JSON.parse(e.originalEvent.data):e.originalEvent.data;const method=pmData.method;if(pmData.embedId===undefined||pmData.embedId!==this._embedId){return;}
this._stopReadyTimeout();this[method]?.call(this,pmData);}catch(err){Debug.error(err.message);}},_postMessage(method,obj){Debug.log("Posting to iframe "+this._embedId);this._iframe.postMessage(JSON.stringify(_.extend(obj||{},{method:method,embedId:this._embedId})),this._origin);},_getBorderAdjustment(){this._border.vertical=parseInt(this.scope.css('border-top-width'))+parseInt(this.scope.css('border-bottom-width'));this._border.horizontal=parseInt(this.scope.css('border-left-width'))+parseInt(this.scope.css('border-right-width'));},breakpointChange(e,data){this._postMessage('responsiveState',{currentIs:data.curBreakName});},dialog(data){var options=ips.ui.getAcceptedOptions('dialog');var dialogOptions={};_.each(options,function(opt){if(!_.isUndefined(data.options['data-ipsdialog-'+opt.toLowerCase()])){dialogOptions[opt]=data.options['data-ipsdialog-'+opt.toLowerCase()];}});if(_.isUndefined(dialogOptions['url'])){dialogOptions['url']=data.url;}
var dialogRef=ips.ui.dialog.create(dialogOptions);dialogRef.show();},height(data){if(this._lastDims.height!==data.height){this.scope.css({height:parseInt(data.height)+this._border.vertical+'px'});this._postMessage('setDimensions',{height:parseInt(data.height)});this._lastDims.height=data.height;}},dims(data){if(parseInt(this._lastDims.height)!==parseInt(data.height)||this._lastDims.width!==data.width){this.scope.css({height:parseInt(data.height)+this._border.vertical+'px',maxWidth:(data.width.toString().indexOf('%')==-1)?parseInt(data.width)+this._border.horizontal+'px':'100%'});this._lastDims.height=data.height;this._lastDims.width=data.width;}},ok(){this._stopReadyTimeout();this.scope.addClass('ipsEmbed_finishedLoading');this._postMessage('responsiveState',{currentIs:ips.utils.responsive.getCurrentKey()});}});}(jQuery,_));;
;(function(){"use strict";ips.controller.register('core.front.core.colorScheme',{initialize(){this.menu=this.scope[0];this.on(this.menu,'click',this.changeColorScheme);if(!this.menu.querySelector("[aria-current")){this.schemePref=ips.utils.cookie.get('scheme_preference')||document.documentElement.dataset.ipsSchemeDefault;document.querySelectorAll('[data-ips-prefers-color-scheme='+this.schemePref+']').forEach(el=>el.setAttribute('aria-current','true'));}},changeColorScheme(ev){let el=ev.target.closest('[data-controller="core.front.core.colorScheme"] [data-ips-prefers-color-scheme]');if(!el)return;document.dispatchEvent(new CustomEvent("ips:colorScheme",{bubbles:true,detail:{scheme:el.dataset.ipsPrefersColorScheme}}));}});}());;
;(function(){"use strict";ips.controller.register('core.front.core.colorScheme',{initialize(){this.menu=this.scope[0];this.on(this.menu,'click',this.changeColorScheme);if(!this.menu.querySelector("[aria-current")){this.schemePref=ips.utils.cookie.get('scheme_preference')||document.documentElement.dataset.ipsSchemeDefault;document.querySelectorAll('[data-ips-prefers-color-scheme='+this.schemePref+']').forEach(el=>el.setAttribute('aria-current','true'));}},changeColorScheme(ev){let el=ev.target.closest('[data-controller="core.front.core.colorScheme"] [data-ips-prefers-color-scheme]');if(!el)return;document.dispatchEvent(new CustomEvent("ips:colorScheme",{bubbles:true,detail:{scheme:el.dataset.ipsPrefersColorScheme}}));if(ips.utils.broadcastChannel.enabled){ips.utils.broadcastChannel.channel.postMessage({command:'colorScheme',value:el.dataset.ipsPrefersColorScheme});}}});}());;
;(function($,_,undefined){"use strict";ips.controller.register('core.front.core.comment',{_quoteData:null,_commentContents:'',_quotingDisabled:false,_quoteTimeout:null,_isEditing:false,_clickHandler:null,_observer:null,initialize:function(){for(const link of this.scope.find('[data-ipsMenu]')){const menuSelector=$(link).attr('href');for(const action of['editComment','cancelEditComment','deleteComment','approveComment']){this.on(document,'click',`${menuSelector} [data-action="${action}"]`,this[action]);}}
for(const action of['quoteComment','multiQuoteComment','rateReview']){this.on('click',`[data-action="${action}"]`,this[action]);}
this.on('submit','form',this.submitEdit);this.on('change','input[type="checkbox"][data-role="moderation"]',this.commentCheckbox);this.elem.addEventListener('ipsCalcQuote',()=>this.inlineQuote())
@@ -143,7 +145,8 @@ this._updateDoneCallback=null});this._overlay.hide();const currentPageNo=ips.uti
this._setUpMultiQuote();$(document).trigger('contentChange',[this.scope]);this._findCheckedComments();ips.ui.tableOfContents.refreshElems();},_getResultsFail:function(jqXHR,textStatus,errorThrown){if(Debug.isEnabled()){if(jqXHR instanceof RangeError){Debug.error(jqXHR)
return;}
Debug.error("Ajax request failed ("+textStatus+"): "+errorThrown);Debug.error(jqXHR.responseText);}else{window.location=this._getURL();}},_getResultsAlways:function(){},_setLoading:function(status){var commentFeed=this.scope.find('[data-role="commentFeed"]');if(status){if(!this._overlay){this._overlay=$('<div/>').addClass('ipsLoading').hide();ips.getContainer().append(this._overlay);}
var dims=ips.utils.position.getElemDims(commentFeed);var position=ips.utils.position.getElemPosition(commentFeed);this._overlay.show().css({left:position.viewportOffset.left+'px',top:position.viewportOffset.top+$(document).scrollTop()+'px',width:dims.width+'px',height:dims.height+'px',position:'absolute',zIndex:ips.ui.zIndex()});commentFeed.animate({opacity:"0.5"});}else{}},paginationClick:function(e,data){data.originalEvent.preventDefault();if(data.pageNo!==this._urlParams[this._pageParam]){var urlObj=ips.utils.url.getURIObject(data.href);var queryKey=urlObj.queryKey;if(_.isUndefined(queryKey[this._pageParam])){queryKey[this._pageParam]=data.pageNo;}
var dims=ips.utils.position.getElemDims(commentFeed);var position=ips.utils.position.getElemPosition(commentFeed);this._overlay.show().css({left:position.viewportOffset.left+'px',top:position.viewportOffset.top+$(document).scrollTop()+'px',width:dims.width+'px',height:dims.height+'px',position:'absolute',zIndex:ips.ui.zIndex()});commentFeed.animate({opacity:"0.5"});}else{}},_paginatedOnce:false,paginationClick:function(e,data){data.originalEvent.preventDefault();if(data.pageNo!==this._urlParams[this._pageParam]){Debug.log("Possibly collapsing elements as the user navigated away from the first page");if(parseInt(`${this._urlParams[this._pageParam]}`)===1&&!this._paginatedOnce){document.querySelectorAll(`[data-feedid="${this._commentFeedID}"] [data-collapse-off-first-page]`).forEach(toCollapse=>{toCollapse.dispatchEvent(new CustomEvent("ips:truncateCollapse",{bubbles:true}));})}
this._paginatedOnce=true;var urlObj=ips.utils.url.getURIObject(data.href);var queryKey=urlObj.queryKey;if(_.isUndefined(queryKey[this._pageParam])){queryKey[this._pageParam]=data.pageNo;}
this._seoPagination=data.seoPagination;this._updateURL(queryKey,()=>{const elem=this.elem.querySelector(`.ipsButtonBar--top`)
if(!(elem instanceof HTMLElement)){Debug.warn("Couldn't find the .ipsButtonBar--top or .ipsButtonBar--bottom pagination container inside the comment feed controller. This is likely a theme error that needs to be addressed so that the content feed can be scrolled to the top or bottom after pagination")
return;}
@@ -170,8 +173,9 @@ this.loadNewPosts(e);}};if(this._notification){this._notification.hide();}
if(parseInt(response.count)===1&&'photo'in response&&'name'in response){Object.apply(notifyData,{title:ips.getString('notificationNewPostSingleTitle',response),body:ips.getString('notificationNewPostSingleBody',response),icon:response.photo});}else{Object.apply(notifyData,{title:ips.pluralize(ips.getString('notificationNewPostMultipleTitle'),[response.count]),body:ips.pluralize(ips.getString('notificationNewPostMultipleBody',response),[response.count])});}
this._notification=ips.utils.notification.create(notifyData);this._notification.show();},async _importNewReplies(loadNewPage=true){const form=this.scope.find('[data-role="replyArea"] form');const commentsOnThisPage=this.scope.find('[data-commentid]');const _lastSeenID=this._getLastSeenID(commentsOnThisPage);try{const response=await ips.fetch(form.attr('action'),{data:{do:'checkForNewReplies',type:'fetch',lastSeenID:_lastSeenID,showing:this.getCurrentCommentPageCount()},type:'post'});if(loadNewPage&&commentsOnThisPage.length+parseInt(response.totalNewCount)>response.perPage){if(response.spillOverUrl){window.location=response.spillOverUrl;}else{window.location.reload();}}else{for(const item of[response.content].flat()){this.trigger('addToCommentFeed',{content:item,feedID:this._commentFeedID,resetEditor:false,totalItems:response.totalCount});}}
this._clearNotifications();}catch(e){Debug.warn(`Could not import new replies for the comment feed!`);Debug.error(e);}},_clearNotifications:function(){if(this._notification&&_.isFunction(this._notification.hide())){this._notification.hide();}
if($('#elFlashMessage').find('[data-role="newPostNotification"]').length){$('#elFlashMessage').find('[data-role="newPostNotification"]').trigger('closeFlashMsg.flashMsg');}},quickReply:function(e){var form=this.scope.find('[data-role="replyArea"] form');if(form.attr('data-noAjax')){return;}
e.preventDefault();e.stopPropagation();var self=this;var replyArea=this.scope.find('[data-role="replyArea"]');var submit=form.find('[type="submit"]');var autoFollow=this.scope.find('input[name$="auto_follow_checkbox"]');var commentsOnThisPage=this.scope.find('[data-commentid]');var _lastSeenID=this._getLastSeenID(commentsOnThisPage);var initialText=submit.text();submit.prop('disabled',true).text(ips.getString('saving'));var page=ips.utils.url.getPageNumber(this._pageParam);if(!page){page=1;}
if($('#elFlashMessage').find('[data-role="newPostNotification"]').length){$('#elFlashMessage').find('[data-role="newPostNotification"]').trigger('closeFlashMsg.flashMsg');}},quickReply:function(e){const form=this.scope.find('[data-role="replyArea"] form');if(form.attr('data-noAjax')){return;}
e.preventDefault();e.stopPropagation();const self=this;const replyArea=this.scope.find('[data-role="replyArea"]');const submit=form.find('[type="submit"]');const autoFollow=this.scope.find('input[name$="auto_follow_checkbox"]');const commentsOnThisPage=this.scope.find('[data-commentid]');const _lastSeenID=this._getLastSeenID(commentsOnThisPage);const submitButtons=[...submit];const submitRestorations=[];submitButtons.forEach(button=>{if(button.closest('.ipsIconPicker')){return;}
const initialText=button.innerText;button.setAttribute('disabled','');button.innerText=ips.getString('saving');submitRestorations.push(()=>{button.removeAttribute('disabled');button.innerText=initialText;});});let page=ips.utils.url.getPageNumber(this._pageParam);if(!page){page=1;}
this._clearNotifications();ips.getAjax()(form.attr('action'),{data:form.serialize()+'&currentPage='+page+'&_lastSeenID='+_lastSeenID,type:'post'}).done(function(response){if(response.type=='error'){if(response.form){if(replyArea.find('[data-ipseditorv5]')){ips.ui.editorv5.getObj(replyArea.find('[data-ipseditorv5]')).destruct();}
form.replaceWith($(response.form));$(document).trigger('contentChange',[self.scope]);}else{ips.ui.alert.show({type:'alert',icon:'warn',message:response.message,callbacks:{}});}}
else if(response.type=='redirect'){self.paginationClick(e,{href:response.url,originalEvent:e});}else if(response.type=='merge'){var comment=$(self.findCommentInFeed(response.id));comment.find('[data-role="commentContent"]').html(response.content);if(comment.find('pre.prettyprint').length){comment.find('pre.prettyprint').each(function(){$(this).html(window.PR.prettyPrintOne(_.escape($(this).text())));});}
@@ -181,7 +185,7 @@ ips.ui.flashMsg.show(ips.getString('mergedConncurrentPosts'));$(document).trigge
self.trigger('addToCommentFeed',{content:response.content,totalItems:response.total,feedID:self._commentFeedID,scrollToItem:true});if(response.message){ips.ui.flashMsg.show(response.message);}
if(self.scope.find('[data-role="replyArea"] input[name="guest_name"]').length){self.scope.find('[data-role="replyArea"] input[name="guest_name"]').val('');self.scope.find('[data-role="replyArea"] [data-ipsEditorv5]').find('.ipsComposeArea_dummy').hide().end().find('[data-role="mainEditorArea"]').show().end().closest('.ipsComposeArea').removeClass('ipsComposeArea_minimized').find('[data-ipsEditor-toolList]').show();}
form.find("[data-role='commentFormError']").each(function(){$(this).remove();});if(autoFollow.length){self.trigger('followingItem',{feedID:self.scope.attr('data-feedID'),following:autoFollow.is(':checked')});}}
self._clearNotifications();}).fail(function(jqXHR,textStatus,errorThrown){if(Debug.isEnabled()){Debug.error("Posting new reply failed: "+textStatus);Debug.log(jqXHR);Debug.log(errorThrown);}else{form.attr('data-noAjax','true');form.attr('action',form.attr('action')+((!form.attr('action').match(/\?/))?'?failedReply=1':'&failedReply=1'));form.submit();}}).always(function(){submit.prop('disabled',false).text(initialText?initialText:ips.getString('submit_reply'));});},loadNewPosts:function(e){e?.preventDefault?.();this._importNewReplies();},findCommentInFeed(commentId){const commentSelector=`[data-commentid="${commentId}"]`;const comment=this.elem.querySelector(`[data-role="commentFeed"] ${commentSelector}`);if(comment){return comment;}else if(this.elem.dataset.feedid){const feedSelector=`[data-feedid="${this.elem.dataset.feedid}"]`;return document.querySelector(`${feedSelector}${commentSelector}, ${feedSelector} ${commentSelector}`)||null;}
self._clearNotifications();}).fail(function(jqXHR,textStatus,errorThrown){if(Debug.isEnabled()){Debug.error("Posting new reply failed: "+textStatus);Debug.log(jqXHR);Debug.log(errorThrown);}else{form.attr('data-noAjax','true');form.attr('action',form.attr('action')+((!form.attr('action').match(/\?/))?'?failedReply=1':'&failedReply=1'));form.submit();}}).always(function(){submitRestorations.forEach(cb=>cb());});},loadNewPosts:function(e){e?.preventDefault?.();this._importNewReplies();},findCommentInFeed(commentId){const commentSelector=`[data-commentid="${commentId}"]`;const comment=this.elem.querySelector(`[data-role="commentFeed"] ${commentSelector}`);if(comment){return comment;}else if(this.elem.dataset.feedid){const feedSelector=`[data-feedid="${this.elem.dataset.feedid}"]`;return document.querySelector(`${feedSelector}${commentSelector}, ${feedSelector} ${commentSelector}`)||null;}
return null;},addToCommentFeed(e,data){if(typeof data?.content!=="string"||data.feedID!==this._commentFeedID){return;}
const content=$('<div/>').append(data.content);const div=content.get(0);const comment=content.find('.js-ipsEntry');let commentFeed=this.scope.find('[data-role="commentFeed"]');if(commentFeed.find('[data-role="moderationTools"]').length){commentFeed=commentFeed.find('[data-role="moderationTools"]');}
this.scope.find('[data-role="noComments"]').remove();const actualContent=div.querySelector(`[data-ips-hook="postWrapper"]`)
+2 -11
View File
@@ -2446,19 +2446,10 @@ $return .= <<<IPSCONTENT
IPSCONTENT;
if ( $entry->cover_photo ):
if ( $entry->coverPhoto() ):
$return .= <<<IPSCONTENT
<div class="ipsCoverPhoto" data-controller="core.global.core.coverPhoto">
<div class="ipsCoverPhoto__container">
<img src="
IPSCONTENT;
$return .= \IPS\File::get( "blog_Entries", $entry->cover_photo )->url;
$return .= <<<IPSCONTENT
" alt="" fetchpriority="high" decoding="sync" class="ipsCoverPhoto__image" data-action="toggleCoverPhoto">
</div>
</div>
{$entry->coverPhoto()}
IPSCONTENT;
+33 -33
View File
@@ -888,34 +888,50 @@ $return .= <<<IPSCONTENT
&nbsp;<i class='fa-solid fa-caret-down'></i></a>
</div>
</div>
<div class='ipsTemplateEditor__codeColumn' data-controller='cms.admin.templates.fileEditor'>
<div class='ipsTemplateEditor__codeColumn' data-controller='cms.admin.templates.fileEditor'>
<div class='cTemplateControls'>
<ul class='ipsTemplateEditor__editorToolbar' id='elTemplateEditor_panelToolbar'>
<li>
<a href='#elTemplateEditor_preferences_menu' id='elTemplateEditor_preferences' class='ipsButton ipsButton--inherit ipsButton--small' data-ipsMenu data-ipsMenu-selectable><i class='fa-solid fa-gear'></i> <i class='fa-solid fa-caret-down'></i></a>
<button type='submit' class='ipsButton ipsButton--primary' data-action="save">
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'save', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</button>
</li>
<li>
<div data-role='loading' class='ipsHide i-padding-inline_2'><i class='ipsLoadingIcon'></i>
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'loading', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</div>
</li>
<li class="i-margin-start_auto">
<a href='#elTemplateEditor_preferences_menu' id='elTemplateEditor_preferences' class='ipsButton ipsButton--inherit i-color_primary' data-ipsMenu data-ipsMenu-selectable><i class='fa-solid fa-gear'></i> <i class='fa-solid fa-caret-down'></i></a>
<ul id='elTemplateEditor_preferences_menu' class='ipsMenu ipsMenu_selectable ipsMenu_auto ipsMenu_withStem ipsHide'>
<li class='ipsMenu_item' data-ipsMenuValue='wrap'><a href='#'>
<li class='ipsMenu_item' data-ipsMenuValue='wrap'><button type="button">
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'theme_wrap', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</a></li>
<li class='ipsMenu_item' data-ipsMenuValue='lines'><a href='#'>
</button></li>
<li class='ipsMenu_item' data-ipsMenuValue='lines'><button type="button">
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'theme_show_line', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</a></li>
<li class='ipsMenu_item' data-ipsMenuValue='diff'><a href='#'>
</button></li>
<li class='ipsMenu_item' data-ipsMenuValue='diff'><button type="button">
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'theme_show_original', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</a></li>
</button></li>
</ul>
</li>
<li>
<a href='#' id='elTemplateEditor_variables' class='ipsButton ipsButton--inherit ipsButton--small' data-ipsDialog data-ipsDialog-title='
<button type="button" id='elTemplateEditor_variables' class='ipsButton ipsButton--inherit i-color_primary' data-ipsDialog data-ipsDialog-title='
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'content_template_editor_fields_title', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
@@ -925,7 +941,7 @@ IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'theme_attributes', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</a>
</button>
</li>
<li>
<a href='
@@ -933,7 +949,7 @@ IPSCONTENT;
$return .= htmlspecialchars( \IPS\Http\Url::internal( "app=cms&module=pages&controller=templates&do=delete&t_location={$current->location}&t_key={$current->id}", null, "", array(), 0 ), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', TRUE );
$return .= <<<IPSCONTENT
' class='ipsButton ipsButton--inherit ipsButton--small
' class='ipsButton ipsButton--inherit i-color_primary
IPSCONTENT;
if ( $current->user_edited == 'original' or $current->user_edited === 0 ):
@@ -969,23 +985,7 @@ IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
</a>
</li>
<li>
<button type='submit' class='ipsButton ipsButton--primary ipsButton--small' data-action="save">
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'save', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</button>
</li>
<li>
<span data-role='loading' class='ipsHide'><i class='ipsLoadingIcon'></i> &nbsp;
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'loading', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</span>
</li>
</ul>
</div>
<i-tabs id='elTemplateEditor_tabbar' class='ipsTabs acpFormTabBar' data-ipsTabBar data-ipsTabBar-contentArea='#elTemplateEditor_panels'>
@@ -1058,7 +1058,7 @@ $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 't
$return .= <<<IPSCONTENT
</div>
<p class='ipsType_textBlock' id='elTemplateEditor_attributes_title'>
<p class='i-font-weight_600 i-color_hard i-margin-top_3 i-margin-bottom_1' id='elTemplateEditor_attributes_title'>
IPSCONTENT;
@@ -1067,7 +1067,7 @@ $return .= <<<IPSCONTENT
</p>
<input class='ipsInput ipsInput--text ipsInput--fullWidth' data-role='variables' placeholder="&#36;foo=''">
<p class='ipsType_textBlock' id='elTemplateEditor_title_title'>
<p class='i-font-weight_600 i-color_hard i-margin-top_3 i-margin-bottom_1' id='elTemplateEditor_title_title'>
IPSCONTENT;
@@ -1076,7 +1076,7 @@ $return .= <<<IPSCONTENT
</p>
<input class='ipsInput ipsInput--text ipsInput--fullWidth' data-role='title'>
<p class='ipsType_textBlock' id='elTemplateEditor_group_title'>
<p class='i-font-weight_600 i-color_hard i-margin-top_3 i-margin-bottom_1' id='elTemplateEditor_group_title'>
IPSCONTENT;
@@ -1094,7 +1094,7 @@ $return .= <<<IPSCONTENT
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $type, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
_hidden" class='ipsHide' name="group" data-role="group" data-container-type="
_hidden" class='ipsInput ipsHide' name="group" data-role="group" data-container-type="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $type, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
@@ -1128,7 +1128,7 @@ IPSCONTENT;
endforeach;
$return .= <<<IPSCONTENT
<p class='ipsType_textBlock ipsHide'>
<p class='i-font-weight_600 i-color_hard i-margin-top_3 i-margin-bottom_1 ipsHide'>
IPSCONTENT;
@@ -1140,7 +1140,7 @@ $return .= <<<IPSCONTENT
<input type='hidden' name='_variables_fileid' value=''>
<input type='hidden' name='_variables_location' value=''>
</div>
<div class='i-padding_3 i-background_3 i-text-align_end'>
<div class='ipsSubmitRow'>
<input type='submit' class='ipsButton ipsButton--primary' value='
IPSCONTENT;
@@ -2781,7 +2781,7 @@ $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 't
$return .= <<<IPSCONTENT
</div>
<p class='ipsType_textBlock'>
<p class='i-font-weight_600 i-color_hard i-margin-top_3 i-margin-bottom_1'>
IPSCONTENT;
@@ -2789,7 +2789,6 @@ $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 't
$return .= <<<IPSCONTENT
</p>
<br>
<textarea class='ipsInput ipsInput--text ipsInput--fullWidth' data-role='variables' placeholder='
IPSCONTENT;
@@ -2813,7 +2812,7 @@ $return .= <<<IPSCONTENT
<div id='elTemplateEditor_attributesDialog' class='ipsHide'>
<div>
<div class='i-padding_3'>
<p class='ipsType_textBlock'>
<p class='i-font-weight_600 i-color_hard i-margin-top_3 i-margin-bottom_1'>
IPSCONTENT;
@@ -2821,7 +2820,6 @@ $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 't
$return .= <<<IPSCONTENT
</p>
<br>
<input class='ipsInput ipsInput--text ipsInput--fullWidth' data-role='variables' placeholder="e.g. media='screen'">
<input type='hidden' name='_variables_fileid' value=''>
<input type='hidden' name='_variables_type' value=''>
+11 -11
View File
@@ -2120,7 +2120,7 @@ $return .= <<<IPSCONTENT
</div></div>
</div>
</div>
<ul id='elAdminUser_menu' class='ipsMenu ipsMenu_narrow ipsHide'>
<ul id='elAdminUser_menu' class='ipsMenu ipsMenu_auto ipsHide'>
<li class='ipsMenu_item'><a href='
IPSCONTENT;
@@ -2136,7 +2136,7 @@ IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'change_details', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
' data-ipsDialog-size='medium'><i class='fa-solid fa-pencil'></i>&nbsp;
' data-ipsDialog-size='medium'><i class='fa-solid fa-user'></i>
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'change_details', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
@@ -2144,7 +2144,7 @@ $return .= <<<IPSCONTENT
</a></li>
<li class='ipsMenu_item ipsMenu_subItems elThemeMenu-wrap'>
<a href='#elThemeMenu_menu' id='elThemeMenu'>
<i class='fa-solid fa-paintbrush'></i>&nbsp;
<i class='fa-solid fa-paintbrush'></i>
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'theme', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
@@ -2163,12 +2163,12 @@ IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
" data-ipsMenuValue="os">
<span>
<button type="button">
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'acptheme_os_preference', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</span>
</button>
</li>
<li class="ipsCursor_pointer ipsMenu_item
IPSCONTENT;
@@ -2181,12 +2181,12 @@ IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
" data-ipsMenuValue="light">
<span>
<button type="button">
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'acptheme_light', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</span>
</button>
</li>
<li class="ipsCursor_pointer ipsMenu_item
IPSCONTENT;
@@ -2199,12 +2199,12 @@ IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
" data-ipsMenuValue="dark">
<span>
<button type="button">
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'acptheme_dark', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</span>
</button>
</li>
</ul>
</li>
@@ -2221,7 +2221,7 @@ if ( \count( $languages ) > 1 ):
$return .= <<<IPSCONTENT
<li class='ipsMenu_item ipsMenu_subItems'>
<a href='#elNavLang_menu' id='elNavLang'><i class='fa-solid fa-earth-americas'></i>&nbsp;
<a href='#elNavLang_menu' id='elNavLang'><i class='fa-solid fa-earth-americas'></i>
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'acp_language', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
@@ -2305,7 +2305,7 @@ IPSCONTENT;
$return .= htmlspecialchars( \IPS\Http\Url::internal( "app=core&module=system&controller=login&do=logout" . "&csrfKey=" . \IPS\Session::i()->csrfKey, null, "", array(), 0 ), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', TRUE );
$return .= <<<IPSCONTENT
'><i class='fa-solid fa-power-off'></i>&nbsp;
'><i class='fa-solid fa-power-off'></i>
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'sign_out', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
+21 -4
View File
@@ -132,7 +132,7 @@ IPSCONTENT;
if ( $error ):
$return .= <<<IPSCONTENT
<div class='ipsMessage ipsMessage--error'>
<div class='ipsMessage ipsMessage--error i-margin_2'>
IPSCONTENT;
$val = "{$error}"; $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( $val, ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
@@ -234,6 +234,12 @@ IPSCONTENT;
<ul class='ipsForm ipsForm--vertical ipsForm--admin-login-form'>
<li class="ipsFieldRow ipsFieldRow--fullWidth">
<label class="ipsFieldRow__label" for="auth">
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'email_address', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</label>
<div class="ipsFieldRow__content">
<input class="ipsInput" autofocus type="email" placeholder="
IPSCONTENT;
@@ -259,6 +265,12 @@ $return .= <<<IPSCONTENT
</div>
</li>
<li class="ipsFieldRow ipsFieldRow--fullWidth">
<label class="ipsFieldRow__label" for="password">
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'password', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</label>
<div class="ipsFieldRow__content">
<input class="ipsInput" type="password" placeholder="
IPSCONTENT;
@@ -283,8 +295,8 @@ $return .= <<<IPSCONTENT
autocomplete="current-password">
</div>
</li>
<li class='ipsFieldRow ipsFieldRow--fullWidth'>
<button type='submit' name="_processLogin" value="usernamepassword" class='ipsButton ipsButton--primary'><i class='fa-solid fa-lock'></i>
<li class='ipsSubmitRow'>
<button type='submit' name="_processLogin" value="usernamepassword" class='ipsButton ipsButton--primary ipsButton--wide'><i class='fa-solid fa-lock'></i>
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'login', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
@@ -375,7 +387,12 @@ IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
">
"
IPSCONTENT;
$return .= \IPS\Theme::i()->getTemplate( "global", "core", 'front' )->htmlDataAttributes( );
$return .= <<<IPSCONTENT
>
<head>
<meta charset="utf-8">
<title>
+3 -3
View File
@@ -86,7 +86,7 @@ $return .= <<<IPSCONTENT
IPSCONTENT;
if ( $alert->reply === 2 and $alert->author()->member_id and ! $alert->anonymous and ! \IPS\Member::loggedIn()->canUseMessenger() ):
if ( $alert->reply === \IPS\core\Alerts\Alert::REPLY_REQUIRED and $alert->author()->member_id and ! $alert->anonymous and ! \IPS\Member::loggedIn()->canUseMessenger() ):
$return .= <<<IPSCONTENT
<div data-role="reply-prompt" class="i-padding_2 i-color_soft i-font-size_-2">
@@ -100,7 +100,7 @@ $return .= <<<IPSCONTENT
IPSCONTENT;
elseif ( $alert->reply == 2 and $alert->author()->member_id and ! $alert->anonymous ):
elseif ( $alert->reply == \IPS\core\Alerts\Alert::REPLY_REQUIRED and $alert->author()->member_id and ! $alert->anonymous ):
$return .= <<<IPSCONTENT
<div data-role="reply-prompt" class="i-padding_2 i-color_soft i-font-size_-2">
@@ -137,7 +137,7 @@ $return .= <<<IPSCONTENT
IPSCONTENT;
if ( ( $alert->reply !== 2 or !$alert->author()->member_id ) or ( $alert->reply === 2 and ! \IPS\Member::loggedIn()->canUseMessenger() ) ):
if ( ( $alert->reply !== \IPS\core\Alerts\Alert::REPLY_REQUIRED or !$alert->author()->member_id ) or ( $alert->reply === \IPS\core\Alerts\Alert::REPLY_REQUIRED and ! \IPS\Member::loggedIn()->canUseMessenger() ) ):
$return .= <<<IPSCONTENT
<a class="ipsButton ipsButton--secondary ipsButton--small" href="
+6 -6
View File
@@ -2028,7 +2028,7 @@ IPSCONTENT;
if ( \IPS\Member::loggedIn()->language()->checkKeyExists( 'profile_step_text_' . $step->id ) and \IPS\Member::loggedIn()->language()->words[ 'profile_step_text_' . $step->id ] ):
$return .= <<<IPSCONTENT
<div class='i-padding_3'>
<div class='i-padding_2'>
<div class="ipsMessage ipsMessage--info">
IPSCONTENT;
@@ -2044,7 +2044,7 @@ IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
<div class="i-padding_3">
<div class="">
IPSCONTENT;
@@ -2059,7 +2059,7 @@ IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
<ul>
<ul class="ipsForm ipsForm--vertical">
IPSCONTENT;
@@ -2140,7 +2140,7 @@ IPSCONTENT;
if ( \IPS\Member::loggedIn()->language()->checkKeyExists( 'profile_step_text_' . $step->id ) and \IPS\Member::loggedIn()->language()->words[ 'profile_step_text_' . $step->id ] ):
$return .= <<<IPSCONTENT
<div class='i-padding_3'>
<div class='i-padding_2'>
<div class="ipsMessage ipsMessage--info">
IPSCONTENT;
@@ -2254,7 +2254,7 @@ $return .= <<<IPSCONTENT
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $id, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
_content' class='ipsTabs__panels ipsTabs__panels--padded'>
_content' class='ipsTabs__panels'>
IPSCONTENT;
@@ -2288,7 +2288,7 @@ IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
>
<ul>
<ul class="ipsForm ipsForm--vertical">
IPSCONTENT;
+130 -14
View File
@@ -9236,6 +9236,22 @@ IPSCONTENT;
$return .= \IPS\Theme::i()->id;
$return .= <<<IPSCONTENT
"
data-ips-scheme-toggle="
IPSCONTENT;
if ( \IPS\Theme::i()->getCssVariableFromKey('set__i-change-scheme') == "1" ):
$return .= <<<IPSCONTENT
true
IPSCONTENT;
else:
$return .= <<<IPSCONTENT
false
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
"
IPSCONTENT;
@@ -18482,7 +18498,12 @@ IPSCONTENT;
$return = '';
$return .= <<<IPSCONTENT
<div id="review-
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "core/front/global/review", "reviewWrap:before", [ $item,$review,$editorName,$app,$type ] );
$return .= <<<IPSCONTENT
<div data-ips-hook="reviewWrap" id="review-
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $review->id, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
@@ -18523,10 +18544,25 @@ IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
>
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "core/front/global/review", "reviewWrap:inside-start", [ $item,$review,$editorName,$app,$type ] );
$return .= <<<IPSCONTENT
<header class="ipsEntry__header">
<div class="ipsEntry__header-align">
<div class="ipsPhotoPanel">
<div class="ipsAvatarStack">
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "core/front/global/review", "reviewUserPhoto:before", [ $item,$review,$editorName,$app,$type ] );
$return .= <<<IPSCONTENT
<div class="ipsAvatarStack" data-ips-hook="reviewUserPhoto">
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "core/front/global/review", "reviewUserPhoto:inside-start", [ $item,$review,$editorName,$app,$type ] );
$return .= <<<IPSCONTENT
IPSCONTENT;
@@ -18546,9 +18582,29 @@ IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
</div>
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "core/front/global/review", "reviewUserPhoto:inside-end", [ $item,$review,$editorName,$app,$type ] );
$return .= <<<IPSCONTENT
</div>
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "core/front/global/review", "reviewUserPhoto:after", [ $item,$review,$editorName,$app,$type ] );
$return .= <<<IPSCONTENT
<div class="ipsPhotoPanel__text">
<div class="ipsEntry__username">
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "core/front/global/review", "reviewUsername:before", [ $item,$review,$editorName,$app,$type ] );
$return .= <<<IPSCONTENT
<div data-ips-hook="reviewUsername" class="ipsEntry__username">
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "core/front/global/review", "reviewUsername:inside-start", [ $item,$review,$editorName,$app,$type ] );
$return .= <<<IPSCONTENT
<h3>
IPSCONTENT;
@@ -18573,7 +18629,17 @@ IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
</div>
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "core/front/global/review", "reviewUsername:inside-end", [ $item,$review,$editorName,$app,$type ] );
$return .= <<<IPSCONTENT
</div>
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "core/front/global/review", "reviewUsername:after", [ $item,$review,$editorName,$app,$type ] );
$return .= <<<IPSCONTENT
<p class="ipsPhotoPanel__secondary">
IPSCONTENT;
@@ -18805,11 +18871,21 @@ endif;
$return .= <<<IPSCONTENT
<div id="review-
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "core/front/global/review", "review:before", [ $item,$review,$editorName,$app,$type ] );
$return .= <<<IPSCONTENT
<div data-ips-hook="review" id="review-
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $review->id, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
" class="ipsRichText ipsRichText--user" data-role="commentContent" data-controller="core.front.core.lightboxedImages">
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "core/front/global/review", "review:inside-start", [ $item,$review,$editorName,$app,$type ] );
$return .= <<<IPSCONTENT
{$review->content()}
IPSCONTENT;
@@ -18824,7 +18900,17 @@ IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
</div>
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "core/front/global/review", "review:inside-end", [ $item,$review,$editorName,$app,$type ] );
$return .= <<<IPSCONTENT
</div>
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "core/front/global/review", "review:after", [ $item,$review,$editorName,$app,$type ] );
$return .= <<<IPSCONTENT
IPSCONTENT;
@@ -19010,7 +19096,17 @@ IPSCONTENT;
if ( ( \IPS\Member::loggedIn()->member_id and ( !$review->mapped('votes_data') or !array_key_exists( \IPS\Member::loggedIn()->member_id, json_decode( $review->mapped('votes_data'), TRUE ) ) ) ) || $review->canEdit() || $review->canDelete() || $review->canHide() || $review->canUnhide() || ( $review->hidden() !== 1 && \IPS\IPS::classUsesTrait( $review, 'IPS\Content\Reactable' ) and \IPS\Settings::i()->reputation_enabled and $review->hasReactionBar() ) ):
$return .= <<<IPSCONTENT
<div class="ipsEntry__footer">
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "core/front/global/review", "reviewFooter:before", [ $item,$review,$editorName,$app,$type ] );
$return .= <<<IPSCONTENT
<div data-ips-hook="reviewFooter" class="ipsEntry__footer">
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "core/front/global/review", "reviewFooter:inside-start", [ $item,$review,$editorName,$app,$type ] );
$return .= <<<IPSCONTENT
IPSCONTENT;
@@ -19020,12 +19116,12 @@ $return .= <<<IPSCONTENT
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "core/front/global/review", "commentControls:before", [ $item,$review,$editorName,$app,$type ] );
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "core/front/global/review", "reviewControls:before", [ $item,$review,$editorName,$app,$type ] );
$return .= <<<IPSCONTENT
<menu class="ipsEntry__controls" data-role="commentControls" data-ips-hook="commentControls">
<menu class="ipsEntry__controls" data-role="commentControls" data-ips-hook="reviewControls">
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "core/front/global/review", "commentControls:inside-start", [ $item,$review,$editorName,$app,$type ] );
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "core/front/global/review", "reviewControls:inside-start", [ $item,$review,$editorName,$app,$type ] );
$return .= <<<IPSCONTENT
@@ -19246,12 +19342,12 @@ $return .= <<<IPSCONTENT
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "core/front/global/review", "commentControls:inside-end", [ $item,$review,$editorName,$app,$type ] );
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "core/front/global/review", "reviewControls:inside-end", [ $item,$review,$editorName,$app,$type ] );
$return .= <<<IPSCONTENT
</menu>
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "core/front/global/review", "commentControls:after", [ $item,$review,$editorName,$app,$type ] );
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "core/front/global/review", "reviewControls:after", [ $item,$review,$editorName,$app,$type ] );
$return .= <<<IPSCONTENT
@@ -19278,7 +19374,17 @@ IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
</div>
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "core/front/global/review", "reviewFooter:inside-end", [ $item,$review,$editorName,$app,$type ] );
$return .= <<<IPSCONTENT
</div>
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "core/front/global/review", "reviewFooter:after", [ $item,$review,$editorName,$app,$type ] );
$return .= <<<IPSCONTENT
IPSCONTENT;
@@ -19303,7 +19409,17 @@ IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "core/front/global/review", "reviewWrap:inside-end", [ $item,$review,$editorName,$app,$type ] );
$return .= <<<IPSCONTENT
</div>
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "core/front/global/review", "reviewWrap:after", [ $item,$review,$editorName,$app,$type ] );
$return .= <<<IPSCONTENT
IPSCONTENT;
return $return;
+2 -2
View File
@@ -93,7 +93,7 @@ $return .= <<<IPSCONTENT
IPSCONTENT;
if ( $row->reply == 1 ):
if ( $row->reply == \IPS\core\Alerts\Alert::REPLY_OPTIONAL ):
$return .= <<<IPSCONTENT
<span class='ipsBadge ipsBadge--neutral ipsBadge--icon'><i class="fa-regular fa-envelope" data-ipstooltip="" _title="
@@ -111,7 +111,7 @@ $return .= <<<IPSCONTENT
IPSCONTENT;
if ( $row->reply == 2 ):
if ( $row->reply == \IPS\core\Alerts\Alert::REPLY_REQUIRED ):
$return .= <<<IPSCONTENT
<span class='ipsBadge ipsBadge--neutral ipsBadge--icon'><i class="fa-solid fa-envelope" data-ipstooltip="" _title="
+9 -11
View File
@@ -496,7 +496,7 @@ IPSCONTENT;
<div data-ipsWizard class='ipsWizard'>
<div data-role="wizardStepbar">
<div data-role="wizardStepbar" class="i-padding_3 i-border-bottom_3 i-background_2 i-border-start-start-radius_box i-border-start-end-radius_box">
IPSCONTENT;
@@ -509,14 +509,14 @@ IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( \IPS\Member::loggedIn()->profileCompletionPercentage(), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
'></progress>
<small class='i-color_soft i-display_block'>
<small class='i-color_soft i-margin-top_1 i-display_block'>
IPSCONTENT;
$sprintf = array($completion . '%'); $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'profile_completion_percent', ENT_DISALLOWED, 'UTF-8', FALSE ), FALSE, array( 'sprintf' => $sprintf ) );
$return .= <<<IPSCONTENT
</small>
</div>
<div data-role="wizardContent" class="ipsBox">
<div data-role="wizardContent">
{$output}
</div>
</div>
@@ -9346,24 +9346,22 @@ IPSCONTENT;
if ( \IPS\Settings::i()->reg_auth_type == 'user' or \IPS\Settings::i()->reg_auth_type == 'admin_user' ):
$return .= <<<IPSCONTENT
<div class='ipsType_textBlock'>
<ul class='ipsList ipsList--bullets'>
<li>
<ul class='ipsList ipsList--bullets'>
<li>
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'change_email_explain_1', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</li>
<li>
<li>
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'change_email_explain_2', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</li>
</ul>
</div>
</li>
</ul>
<hr class='ipsHr'>
IPSCONTENT;
+6 -25
View File
@@ -1094,8 +1094,9 @@ $return .= \IPS\Settings::i()->base_url;
$return .= <<<IPSCONTENT
?app=core&module=system&controller=themeeditor&do=save' method='post' enctype='multipart/form-data' role="form">
<editor-buttons>
<div data-workspace='color'>
<button value='light' type='button' data-on-click="changeWorkspace">
<div data-controller="core.front.core.colorScheme">
<button type="button" data-ips-prefers-color-scheme="light">
<span class='editor-buttons__tooltip'>
IPSCONTENT;
@@ -1104,7 +1105,7 @@ $return .= <<<IPSCONTENT
</span>
<i class="fa-regular fa-lightbulb"></i>
</button>
<button value='dark' type='button' data-on-click="changeWorkspace">
<button type="button" data-ips-prefers-color-scheme="dark">
<span class='editor-buttons__tooltip'>
IPSCONTENT;
@@ -1114,6 +1115,7 @@ $return .= <<<IPSCONTENT
<i class="fa-regular fa-moon"></i>
</button>
</div>
<div data-workspace='size'>
<button value='small' type='button' data-on-click="changeWorkspace">
<span class='editor-buttons__tooltip'>
@@ -1866,28 +1868,7 @@ $return .= <<<IPSCONTENT
</theme-editor>
<button type="button" aria-controls="closeConfirmationDialog" aria-expanded="false" data-ipscontrols id="toggleCloseConfirmationDialog" hidden>Toggle confirmation window</button>
<div class="sr-only" data-controller="core.front.core.colorScheme">
<button type="button" data-ips-prefers-color-scheme="light">
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'theme_editor_light', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</button>
<button type="button" data-ips-prefers-color-scheme="dark">
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'theme_editor_dark', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</button>
<button type="button" data-ips-prefers-color-scheme="system">
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'theme_editor_system', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</button>
</ul>
<button type="button" aria-controls="closeConfirmationDialog" aria-expanded="false" data-ipscontrols id="toggleCloseConfirmationDialog" hidden>Toggle confirmation window</button>
IPSCONTENT;
+66 -104
View File
@@ -851,7 +851,7 @@ IPSCONTENT;
if ( \in_array( 'authy', $methods ) ):
$return .= <<<IPSCONTENT
<div class='i-text-align_center'>
<div class='i-flex i-align-items_center i-justify-content_center i-flex-wrap_wrap i-gap_2'>
IPSCONTENT;
@@ -868,7 +868,7 @@ IPSCONTENT;
$return .= \IPS\Theme::i()->resource( "appstores/ios/{$langCode}.svg", "core", 'global', false );
$return .= <<<IPSCONTENT
" class="i-margin-block_2"></a>
" alt=""></a>
<a href="
IPSCONTENT;
@@ -879,7 +879,7 @@ IPSCONTENT;
$return .= \IPS\Theme::i()->resource( "appstores/android/{$langCode}.png", "core", 'global', false );
$return .= <<<IPSCONTENT
" style="height: 60px"></a>
" style="height: 60px" alt=""></a>
</div>
IPSCONTENT;
@@ -888,8 +888,8 @@ endif;
$return .= <<<IPSCONTENT
<div class="i-padding_3">
<div class='ipsSpanGrid'>
<div class='ipsSpanGrid__5 i-text-align_center'>
<div class='i-grid i-gap_1'>
<div>
<select class="ipsInput ipsInput--select" data-sort name="countryCode">
IPSCONTENT;
@@ -958,7 +958,7 @@ $return .= <<<IPSCONTENT
</select>
</div>
<div class='ipsSpanGrid__7 i-text-align_center'>
<div>
<input name="phoneNumber" type="tel" class="ipsInput ipsInput--text" value="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $phoneNumber, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
@@ -990,23 +990,21 @@ endif;
$return .= <<<IPSCONTENT
</div>
<div class="i-padding_3 i-background_3 ipsSpanGrid">
<div class="i-padding_3 i-background_3 ipsButtons ipsButtons--fill">
IPSCONTENT;
if ( \in_array( 'authy', $methods ) ):
$return .= <<<IPSCONTENT
<div class="ipsSpanGrid__12">
<button type='submit' name="method" value="authy" class='ipsButton ipsButton--primary ipsButton--wide'>
<i class='fa-solid fa-lock'></i>&nbsp;
<button type='submit' name="method" value="authy" class='ipsButton ipsButton--primary'>
<i class='fa-solid fa-lock'></i>
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'authy_submit_authy', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</button>
</div>
</button>
IPSCONTENT;
@@ -1019,31 +1017,14 @@ IPSCONTENT;
if ( \in_array( 'phone', $methods ) ):
$return .= <<<IPSCONTENT
<div class="ipsSpanGrid__
IPSCONTENT;
if ( \in_array( 'sms', $methods ) ):
$return .= <<<IPSCONTENT
6
IPSCONTENT;
else:
$return .= <<<IPSCONTENT
12
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
">
<button type='submit' name="method" value="phone" class='ipsButton ipsButton--primary ipsButton--wide'>
<i class='fa-solid fa-phone'></i>&nbsp;
<button type='submit' name="method" value="phone" class='ipsButton ipsButton--primary'>
<i class='fa-solid fa-phone'></i>
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'authy_submit_call', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</button>
</div>
</button>
IPSCONTENT;
@@ -1056,31 +1037,14 @@ IPSCONTENT;
if ( \in_array( 'sms', $methods ) ):
$return .= <<<IPSCONTENT
<div class="ipsSpanGrid__
IPSCONTENT;
if ( \in_array( 'phone', $methods ) ):
$return .= <<<IPSCONTENT
6
IPSCONTENT;
else:
$return .= <<<IPSCONTENT
12
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
">
<button type='submit' name="method" value="sms" class='ipsButton ipsButton--primary ipsButton--wide'>
<i class='fa-solid fa-commenting'></i>&nbsp;
<button type='submit' name="method" value="sms" class='ipsButton ipsButton--primary'>
<i class='fa-solid fa-commenting'></i>
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'authy_submit_sms', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</button>
</div>
</button>
IPSCONTENT;
@@ -1302,7 +1266,8 @@ IPSCONTENT;
$langCode = mb_substr( \IPS\Member::loggedIn()->language()->bcp47(), 0, 2 );
$return .= <<<IPSCONTENT
<a href="
<div class="i-flex i-align-items_center i-justify-content_center i-flex-wrap_wrap i-gap_2">
<a href="
IPSCONTENT;
$return .= \IPS\Http\Url::ips( "docs/googleauth_ios" );
@@ -1312,8 +1277,8 @@ IPSCONTENT;
$return .= \IPS\Theme::i()->resource( "appstores/ios/{$langCode}.svg", "core", 'global', false );
$return .= <<<IPSCONTENT
" class="i-margin-block_2"></a>
<a href="
" alt=""></a>
<a href="
IPSCONTENT;
$return .= \IPS\Http\Url::ips( "docs/googleauth_android" );
@@ -1323,16 +1288,17 @@ IPSCONTENT;
$return .= \IPS\Theme::i()->resource( "appstores/android/{$langCode}.png", "core", 'global', false );
$return .= <<<IPSCONTENT
" style="height: 60px"></a>
" style="height: 60px" alt=""></a>
</div>
<p>
<a class="i-cursor_pointer" data-action="showManual">
<div>
<button type="button" class="i-cursor_pointer" data-action="showManual">
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'google_mfa_help', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</a>
</p>
</button>
</div>
</div>
</div>
</div>
@@ -1450,7 +1416,8 @@ IPSCONTENT;
$langCode = mb_substr( \IPS\Member::loggedIn()->language()->bcp47(), 0, 2 );
$return .= <<<IPSCONTENT
<a href="
<div class="i-flex i-align-items_center i-justify-content_center i-flex-wrap_wrap i-gap_2">
<a href="
IPSCONTENT;
$return .= \IPS\Http\Url::ips( "docs/googleauth_ios" );
@@ -1460,8 +1427,8 @@ IPSCONTENT;
$return .= \IPS\Theme::i()->resource( "appstores/ios/{$langCode}.svg", "core", 'global', false );
$return .= <<<IPSCONTENT
" class="i-margin-block_2"></a>
<a href="
" alt=""></a>
<a href="
IPSCONTENT;
$return .= \IPS\Http\Url::ips( "docs/googleauth_android" );
@@ -1471,16 +1438,17 @@ IPSCONTENT;
$return .= \IPS\Theme::i()->resource( "appstores/android/{$langCode}.png", "core", 'global', false );
$return .= <<<IPSCONTENT
" style="height: 60px"></a>
" style="height: 60px" alt=""></a>
</div>
<p class='i-text-align_center'>
<a class="i-cursor_pointer" data-action="showBarcode">
<div class='i-text-align_center'>
<button type="button" class="i-cursor_pointer" data-action="showBarcode">
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'google_mfa_help_reset', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</a>
</p>
</button>
</div>
</div>
</div>
</div>
@@ -1870,19 +1838,19 @@ $return .= <<<IPSCONTENT
</p>
<div class="i-padding_3">
<ul>
<ul class="ipsButtons ipsButtons--fill">
IPSCONTENT;
foreach ( $handlers as $key => $handler ):
$return .= <<<IPSCONTENT
<li class="i-margin-bottom_2">
<li>
<a href="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $url->setQueryString( array( '_mfa' => 'alt', '_mfaMethod' => $key ) ), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
" class="ipsButton ipsButton--primary ipsButton--wide">
" class="ipsButton ipsButton--primary">
IPSCONTENT;
$val = "{$handler->recoveryButton()}"; $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( $val, ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
@@ -1901,11 +1869,11 @@ IPSCONTENT;
if ( $knownDevicesAvailable ):
$return .= <<<IPSCONTENT
<li class="i-margin-bottom_2"><a href="
<li><a href="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $url->setQueryString( array( '_mfa' => 'knownDevice' ) ), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
" class="ipsButton ipsButton--soft ipsButton--wide">
" class="ipsButton ipsButton--soft">
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'mfa_recovery_known_device', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
@@ -1923,12 +1891,12 @@ IPSCONTENT;
if ( \in_array( 'email', explode( ',', \IPS\Settings::i()->mfa_forgot_behaviour ) ) ):
$return .= <<<IPSCONTENT
<li class="i-margin-bottom_2"><a href="
<li><a href="
IPSCONTENT;
$return .= htmlspecialchars( \IPS\Http\Url::internal( "app=core&module=system&controller=settings&do=mfarecovery", "front", "mfarecovery", array(), 0 ), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', TRUE );
$return .= <<<IPSCONTENT
" class="ipsButton ipsButton--text ipsButton--wide">
" class="ipsButton ipsButton--text">
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'mfa_recovery_email', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
@@ -1946,12 +1914,12 @@ IPSCONTENT;
if ( \in_array( 'contact', explode( ',', \IPS\Settings::i()->mfa_forgot_behaviour ) ) and \IPS\Member::loggedIn()->canUseContactUs() ):
$return .= <<<IPSCONTENT
<li class="i-margin-bottom_2"><a href="
<li><a href="
IPSCONTENT;
$return .= htmlspecialchars( \IPS\Http\Url::internal( "app=core&module=contact&controller=contact", "front", "contact", array(), 0 ), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', TRUE );
$return .= <<<IPSCONTENT
" class="ipsButton ipsButton--text ipsButton--wide">
" class="ipsButton ipsButton--text">
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'mfa_recovery_contact', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
@@ -2002,7 +1970,7 @@ IPSCONTENT;
if ( \count( $acceptableHandlers ) > 1 ):
$return .= <<<IPSCONTENT
<div class='i-background_3 i-text-align_center'>
<div class='i-background_2 i-text-align_center'>
<div class='i-padding_3'>
<h1 class='i-text-align_center ipsTitle ipsTitle--h3'>
IPSCONTENT;
@@ -2019,7 +1987,7 @@ $return .= <<<IPSCONTENT
</p>
</div>
<i-tabs class='ipsTabs ipsTabs--small ipsTabs--stretch' id='ipsTabs_2fa' data-ipsTabBar data-ipsTabBar-contentArea='#ipsTabs_2fa_content'>
<i-tabs class='ipsTabs ipsTabs--small ipsTabs--stretch i-background_2' id='ipsTabs_2fa' data-ipsTabBar data-ipsTabBar-contentArea='#ipsTabs_2fa_content'>
<div role='tablist'>
IPSCONTENT;
@@ -3544,8 +3512,8 @@ $return .= <<<IPSCONTENT
</div>
</div>
<div class="i-padding_3">
<div class='ipsSpanGrid'>
<div class='ipsSpanGrid__5 i-text-align_center'>
<div class='i-grid i-gap_2'>
<div>
<select class="ipsInput ipsInput--select" data-sort name="countryCode">
IPSCONTENT;
@@ -3614,7 +3582,7 @@ $return .= <<<IPSCONTENT
</select>
</div>
<div class='ipsSpanGrid__7 i-text-align_center'>
<div>
<input name="phoneNumber" type="tel" value="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $phoneNumber, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
@@ -3646,68 +3614,62 @@ endif;
$return .= <<<IPSCONTENT
</div>
<div class="i-padding_3 i-background_3">
<div class="i-padding_3 i-background_3 ipsButtons ipsButtons--fill">
IPSCONTENT;
if ( \in_array( 'phone', $methods ) ):
$return .= <<<IPSCONTENT
<div class="i-margin-bottom_3">
<button type='submit' name="method" value="phone" class='ipsButton ipsButton--primary ipsButton--wide'>
<i class='fa-solid fa-phone'></i>&nbsp;
<button type='submit' name="method" value="phone" class='ipsButton ipsButton--primary'>
<i class='fa-solid fa-phone'></i>
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'verify_submit_call', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</button>
</div>
</button>
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
IPSCONTENT;
if ( \in_array( 'sms', $methods ) ):
$return .= <<<IPSCONTENT
<div class="i-margin-bottom_3">
<button type='submit' name="method" value="sms" class='ipsButton ipsButton--primary ipsButton--wide'>
<i class='fa-solid fa-comment-dots'></i>&nbsp;
<button type='submit' name="method" value="sms" class='ipsButton ipsButton--primary'>
<i class='fa-solid fa-comment-dots'></i>
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'verify_submit_sms', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</button>
</div>
</button>
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
IPSCONTENT;
if ( \in_array( 'whatsapp', $methods ) ):
$return .= <<<IPSCONTENT
<div class="i-margin-bottom_3">
<button type='submit' name="method" value="whatsapp" class='ipsButton ipsButton--primary ipsButton--wide'>
<i class='fa-reguar fa-comment'></i>&nbsp;
<button type='submit' name="method" value="whatsapp" class='ipsButton ipsButton--primary'>
<i class='fa-reguar fa-comment'></i>
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'verify_submit_whatsapp', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</button>
</div>
</button>
IPSCONTENT;
endif;
+36 -9
View File
@@ -900,7 +900,22 @@ IPSCONTENT;
if ( $file->container()->log ):
$return .= <<<IPSCONTENT
<div class='i-padding_2'><div class='ipsMessage ipsMessage--info'>
<div class='
IPSCONTENT;
if ( \IPS\Widget\Request::i()->isAjax() ):
$return .= <<<IPSCONTENT
i-padding_2
IPSCONTENT;
else:
$return .= <<<IPSCONTENT
i-margin-bottom_2
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
'><div class='ipsMessage ipsMessage--info'>
IPSCONTENT;
$pluralize = array( $file->container()->log ); $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'log_days', ENT_DISALLOWED, 'UTF-8', FALSE ), FALSE, array( 'pluralize' => $pluralize ) );
@@ -928,26 +943,28 @@ IPSCONTENT;
foreach ( $rows as $row ):
$return .= <<<IPSCONTENT
<li class='ipsSpanGrid__6 ipsPhotoPanel ipsPhotoPanel--mini i-padding_2'>
<li>
<div class="ipsPhotoPanel ipsPhotoPanel--mini">
IPSCONTENT;
$return .= \IPS\Theme::i()->getTemplate( "global", "core" )->userPhoto( \IPS\Member::load( $row['dmid'] ), 'mini' );
$return .= <<<IPSCONTENT
<div>
<h3 class='ipsTruncate_1'>
<div class="ipsPhotoPanel__text">
<h3 class='ipsPhotoPanel__primary'>
IPSCONTENT;
$return .= htmlspecialchars( \IPS\Member::load( $row['dmid'] )->name, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= \IPS\Theme::i()->getTemplate( "global", "core" )->userLink( \IPS\Member::load( $row['dmid'] ) );
$return .= <<<IPSCONTENT
</h3>
<span class='i-color_soft'>
<span class='ipsPhotoPanel__secondary'>
IPSCONTENT;
$val = ( $row['dtime'] instanceof \IPS\DateTime ) ? $row['dtime'] : \IPS\DateTime::ts( $row['dtime'] );$return .= (string) $val;
$return .= <<<IPSCONTENT
</span>
</div>
</div>
</li>
@@ -985,6 +1002,16 @@ $return .= <<<IPSCONTENT
'
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
IPSCONTENT;
if ( !\IPS\Widget\Request::i()->isAjax() ):
$return .= <<<IPSCONTENT
class="ipsBox"
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
>
@@ -1017,7 +1044,7 @@ IPSCONTENT;
if ( \count( $rows ) ):
$return .= <<<IPSCONTENT
<ol class='ipsGrid
<ol class='ipsGrid ipsGrid--fileLogTable i-padding_3
IPSCONTENT;
foreach ( $table->classes as $class ):
@@ -2287,7 +2314,7 @@ IPSCONTENT;
elseif ( $file->mustDownloadBeforeReview() ):
$return .= <<<IPSCONTENT
<p class='i-color_soft'>
<p class='i-color_soft i-font-weight_600 i-text-align_center i-background_2 i-padding_2'>
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'no_download_review', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
+40 -3
View File
@@ -1020,10 +1020,47 @@ $return .= <<<IPSCONTENT
IPSCONTENT;
if ( \IPS\Member::loggedIn()->getLayoutValue( 'forum_topic_view_firstpost' ) and $comment->isFirst() and isset( \IPS\Widget\Request::i()->page ) and \IPS\Widget\Request::i()->page > 1 ):
$includeWrapper = (\IPS\Member::loggedIn()->getLayoutValue('forum_topic_view_firstpost') and $comment->isFirst());
$return .= <<<IPSCONTENT
<div class="ipsEntry__truncate" data-ipstruncate>
IPSCONTENT;
if ( $includeWrapper ):
$return .= <<<IPSCONTENT
IPSCONTENT;
$collapsed = ($includeWrapper and isset( \IPS\Widget\Request::i()->page ) and \IPS\Widget\Request::i()->page > 1);
$return .= <<<IPSCONTENT
<div
IPSCONTENT;
if ( $collapsed ):
$return .= <<<IPSCONTENT
class
IPSCONTENT;
else:
$return .= <<<IPSCONTENT
data-ipstruncate-deferredclasses
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
="ipsEntry__truncate" data-ipstruncate
IPSCONTENT;
if ( !$collapsed ):
$return .= <<<IPSCONTENT
data-ipstruncate-deferred="1" data-collapse-off-first-page
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
>
IPSCONTENT;
@@ -1036,7 +1073,7 @@ $return .= <<<IPSCONTENT
IPSCONTENT;
if ( \IPS\Member::loggedIn()->getLayoutValue( 'forum_topic_view_firstpost' ) and $comment->isFirst() and isset( \IPS\Widget\Request::i()->page ) and \IPS\Widget\Request::i()->page > 1 ):
if ( $includeWrapper ):
$return .= <<<IPSCONTENT
</div>
+20 -85
View File
@@ -44,13 +44,13 @@ IPSCONTENT;
if ( $album->coverPhoto('masked') ):
$return .= <<<IPSCONTENT
<div class="ipsCoverPhoto ipsCoverPhoto--album" hidden>
<div class="ipsCoverPhoto ipsCoverPhoto--album" data-controller="core.global.core.coverPhoto">
<div class="ipsCoverPhoto__container">
<img src="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $album->coverPhoto('masked'), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
" alt="
" class="ipsCoverPhoto__image" data-action="toggleCoverPhoto" alt="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $album->name, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
@@ -98,92 +98,15 @@ IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/browse/album", "badges:inside-start", [ $album,$table,$commentsAndReviews ] );
$return .= <<<IPSCONTENT
IPSCONTENT;
if ( $album->asItem()->hidden() === 1 ):
foreach ( $album->asItem()->badges() as $badge ):
$return .= <<<IPSCONTENT
<span class="ipsBadge ipsBadge--icon ipsBadge--warning" data-ipstooltip title="
{$badge}
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'pending_approval', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
"><i class="fa-solid fa-triangle-exclamation"></i></span>
IPSCONTENT;
elseif ( $album->asItem()->hidden() === -1 ):
$return .= <<<IPSCONTENT
<span class="ipsBadge ipsBadge--icon ipsBadge--warning" data-ipstooltip title="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $album->asItem()->hiddenBlurb(), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
"><i class="fa-solid fa-eye-slash"></i></span>
IPSCONTENT;
elseif ( $album->asItem()->hidden() === -2 ):
$return .= <<<IPSCONTENT
<span class="ipsBadge ipsBadge--icon ipsBadge--warning" data-ipstooltip title="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $album->asItem()->deletedBlurb(), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
"><i class="fa-solid fa-trash"></i></span>
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
IPSCONTENT;
if ( $album->asItem()->mapped('featured') ):
$return .= <<<IPSCONTENT
<span class="ipsBadge ipsBadge--icon ipsBadge--positive" data-ipstooltip title="
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'featured', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
"><i class="fa-solid fa-star"></i></span>
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
IPSCONTENT;
if ( $album->type === \IPS\gallery\Album::AUTH_TYPE_PRIVATE ):
$return .= <<<IPSCONTENT
<span class="ipsBadge ipsBadge--warning">
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'album_private_badge', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</span>
IPSCONTENT;
elseif ( $album->type === \IPS\gallery\Album::AUTH_TYPE_RESTRICTED ):
$return .= <<<IPSCONTENT
<span class="ipsBadge ipsBadge--warning">
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'album_friend_only_badge', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</span>
IPSCONTENT;
endif;
endforeach;
$return .= <<<IPSCONTENT
@@ -535,17 +458,29 @@ $return .= <<<IPSCONTENT
IPSCONTENT;
if ( $album->can('add') ):
if ( $menu = $album->asItem()->menu() ):
$return .= <<<IPSCONTENT
<ul class="ipsButtons ipsButtons--main">
<li>{$album->asItem()->menu()}</li>
<li>{$menu}</li>
IPSCONTENT;
if ( $album->can( 'add' ) ):
$return .= <<<IPSCONTENT
IPSCONTENT;
$return .= \IPS\Theme::i()->getTemplate( "browse", \IPS\Request::i()->app )->categoryButtons( $album->can('add'), $album->category(), $album );
$return .= <<<IPSCONTENT
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
</ul>
IPSCONTENT;
+297 -340
View File
@@ -297,7 +297,12 @@ IPSCONTENT;
$idField = $comment::$databaseColumnId;
$return .= <<<IPSCONTENT
<div id="comment-
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/comment", "galleryCommentWrap:before", [ $item,$comment,$editorName,$app,$type,$class ] );
$return .= <<<IPSCONTENT
<div data-ips-hook="galleryCommentWrap" id="comment-
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $comment->$idField, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
@@ -338,10 +343,25 @@ IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
>
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/comment", "galleryCommentWrap:inside-start", [ $item,$comment,$editorName,$app,$type,$class ] );
$return .= <<<IPSCONTENT
<header class="ipsEntry__header">
<div class="ipsEntry__header-align">
<div class="ipsPhotoPanel">
<div class="ipsAvatarStack">
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/comment", "galleryCommentUserPhoto:before", [ $item,$comment,$editorName,$app,$type,$class ] );
$return .= <<<IPSCONTENT
<div class="ipsAvatarStack" data-ips-hook="galleryCommentUserPhoto">
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/comment", "galleryCommentUserPhoto:inside-start", [ $item,$comment,$editorName,$app,$type,$class ] );
$return .= <<<IPSCONTENT
IPSCONTENT;
@@ -351,7 +371,7 @@ $return .= <<<IPSCONTENT
IPSCONTENT;
if ( !$comment->isAnonymous() and $comment->author()->canHaveAchievements() and \IPS\core\Achievements\Rank::show() and $rank = $comment->author()->rank() ):
if ( ( \IPS\IPS::classUsesTrait( $comment, 'IPS\Content\Anonymous' ) AND !$comment->isAnonymous() ) and $comment->author()->canHaveAchievements() and \IPS\core\Achievements\Rank::show() and $rank = $comment->author()->rank() ):
$return .= <<<IPSCONTENT
{$rank->html( 'ipsAvatarStack__rank' )}
@@ -361,19 +381,39 @@ IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
</div>
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/comment", "galleryCommentUserPhoto:inside-end", [ $item,$comment,$editorName,$app,$type,$class ] );
$return .= <<<IPSCONTENT
</div>
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/comment", "galleryCommentUserPhoto:after", [ $item,$comment,$editorName,$app,$type,$class ] );
$return .= <<<IPSCONTENT
<div class="ipsPhotoPanel__text">
<div class="ipsEntry__username">
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/comment", "galleryCommentUsername:before", [ $item,$comment,$editorName,$app,$type,$class ] );
$return .= <<<IPSCONTENT
<div data-ips-hook="galleryCommentUsername" class="ipsEntry__username">
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/comment", "galleryCommentUsername:inside-start", [ $item,$comment,$editorName,$app,$type,$class ] );
$return .= <<<IPSCONTENT
<h3>
IPSCONTENT;
$return .= \IPS\Theme::i()->getTemplate( "global", "core" )->userLink( $comment->author(), $comment->warningRef(), NULL, $comment->isAnonymous() );
$return .= \IPS\Theme::i()->getTemplate( "global", "core" )->userLink( $comment->author(), $comment->warningRef(), NULL, \IPS\IPS::classUsesTrait( $comment, 'IPS\Content\Anonymous' ) ? $comment->isAnonymous() : FALSE );
$return .= <<<IPSCONTENT
</h3>
IPSCONTENT;
if ( !$comment->isAnonymous() ):
if ( \IPS\IPS::classUsesTrait( $comment, 'IPS\Content\Anonymous' ) AND !$comment->isAnonymous() ):
$return .= <<<IPSCONTENT
<span class="ipsEntry__group">
@@ -410,7 +450,17 @@ IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
</div>
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/comment", "galleryCommentUsername:inside-end", [ $item,$comment,$editorName,$app,$type,$class ] );
$return .= <<<IPSCONTENT
</div>
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/comment", "galleryCommentUsername:after", [ $item,$comment,$editorName,$app,$type,$class ] );
$return .= <<<IPSCONTENT
<p class="ipsPhotoPanel__secondary">
IPSCONTENT;
@@ -440,7 +490,7 @@ $return .= <<<IPSCONTENT
IPSCONTENT;
if ( $comment->editLine() ):
if ( \IPS\IPS::classUsesTrait( $comment, 'IPS\Content\EditHistory' ) and $comment->editLine() ):
$return .= <<<IPSCONTENT
(
@@ -569,7 +619,12 @@ $return .= <<<IPSCONTENT
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $comment->authorMiniProfileUrl, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
" aria-label="Toggle mini profile"><i class="fa-solid fa-chevron-down" aria-hidden="true"></i></button>
" aria-label="
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'author_stats', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
"><i class="fa-solid fa-chevron-down" aria-hidden="true"></i></button>
IPSCONTENT;
@@ -603,7 +658,17 @@ IPSCONTENT;
if ( $comment->author()->hasHighlightedReplies() || ( \IPS\IPS::classUsesTrait( $comment, 'IPS\Content\Reactable' ) and $comment->isHighlighted() ) OR $comment->isFeatured() ):
$return .= <<<IPSCONTENT
<ul class="ipsBadges">
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/comment", "galleryCommentBadges:before", [ $item,$comment,$editorName,$app,$type,$class ] );
$return .= <<<IPSCONTENT
<ul class="ipsBadges" data-ips-hook="galleryCommentBadges">
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/comment", "galleryCommentBadges:inside-start", [ $item,$comment,$editorName,$app,$type,$class ] );
$return .= <<<IPSCONTENT
IPSCONTENT;
@@ -658,7 +723,17 @@ IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
</ul>
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/comment", "galleryCommentBadges:inside-end", [ $item,$comment,$editorName,$app,$type,$class ] );
$return .= <<<IPSCONTENT
</ul>
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/comment", "galleryCommentBadges:after", [ $item,$comment,$editorName,$app,$type,$class ] );
$return .= <<<IPSCONTENT
IPSCONTENT;
@@ -729,7 +804,17 @@ IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
<div class="ipsRichText ipsRichText--user" data-role="commentContent" data-controller="core.front.core.lightboxedImages">
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/comment", "galleryComment:before", [ $item,$comment,$editorName,$app,$type,$class ] );
$return .= <<<IPSCONTENT
<div data-ips-hook="galleryComment" class="ipsRichText ipsRichText--user" data-role="commentContent" data-controller="core.front.core.lightboxedImages">
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/comment", "galleryComment:inside-start", [ $item,$comment,$editorName,$app,$type,$class ] );
$return .= <<<IPSCONTENT
{$comment->content()}
IPSCONTENT;
@@ -744,7 +829,17 @@ IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
</div>
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/comment", "galleryComment:inside-end", [ $item,$comment,$editorName,$app,$type,$class ] );
$return .= <<<IPSCONTENT
</div>
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/comment", "galleryComment:after", [ $item,$comment,$editorName,$app,$type,$class ] );
$return .= <<<IPSCONTENT
</div>
IPSCONTENT;
@@ -752,16 +847,26 @@ IPSCONTENT;
if ( ( $comment->hidden() !== 1 && \IPS\IPS::classUsesTrait( $comment, 'IPS\Content\Reactable' ) and \IPS\Settings::i()->reputation_enabled and $comment->hasReactionBar() ) || ( $comment->hidden() === 1 && ( $comment->canUnhide() || $comment->canDelete() ) ) || ( $comment->hidden() === 0 and $item->canComment() and $editorName ) ):
$return .= <<<IPSCONTENT
<div class="ipsEntry__footer">
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/comment", "galleryCommentFooter:before", [ $item,$comment,$editorName,$app,$type,$class ] );
$return .= <<<IPSCONTENT
<div data-ips-hook="galleryCommentFooter" class="ipsEntry__footer">
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/comment", "galleryCommentFooter:inside-start", [ $item,$comment,$editorName,$app,$type,$class ] );
$return .= <<<IPSCONTENT
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/comment", "commentControls:before", [ $item,$comment,$editorName,$app,$type,$class ] );
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/comment", "galleryCommentControls:before", [ $item,$comment,$editorName,$app,$type,$class ] );
$return .= <<<IPSCONTENT
<menu class="ipsEntry__controls" data-role="commentControls" data-ips-hook="commentControls">
<menu class="ipsEntry__controls" data-role="commentControls" data-ips-hook="galleryCommentControls">
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/comment", "commentControls:inside-start", [ $item,$comment,$editorName,$app,$type,$class ] );
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/comment", "galleryCommentControls:inside-start", [ $item,$comment,$editorName,$app,$type,$class ] );
$return .= <<<IPSCONTENT
@@ -1004,6 +1109,24 @@ $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'q
$return .= <<<IPSCONTENT
</span></a>
</li>
IPSCONTENT;
if ( \IPS\Application::appIsEnabled('cloud') ):
$return .= <<<IPSCONTENT
<li>
IPSCONTENT;
$return .= \IPS\Theme::i()->getTemplate( "spam", "cloud" )->spam( $comment, FALSE );
$return .= <<<IPSCONTENT
</li>
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
IPSCONTENT;
@@ -1022,12 +1145,12 @@ $return .= <<<IPSCONTENT
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/comment", "commentControls:inside-end", [ $item,$comment,$editorName,$app,$type,$class ] );
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/comment", "galleryCommentControls:inside-end", [ $item,$comment,$editorName,$app,$type,$class ] );
$return .= <<<IPSCONTENT
</menu>
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/comment", "commentControls:after", [ $item,$comment,$editorName,$app,$type,$class ] );
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/comment", "galleryCommentControls:after", [ $item,$comment,$editorName,$app,$type,$class ] );
$return .= <<<IPSCONTENT
@@ -1048,7 +1171,17 @@ IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
</div>
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/comment", "galleryCommentFooter:inside-end", [ $item,$comment,$editorName,$app,$type,$class ] );
$return .= <<<IPSCONTENT
</div>
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/comment", "galleryCommentFooter:after", [ $item,$comment,$editorName,$app,$type,$class ] );
$return .= <<<IPSCONTENT
IPSCONTENT;
@@ -1073,7 +1206,17 @@ IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/comment", "galleryCommentWrap:inside-end", [ $item,$comment,$editorName,$app,$type,$class ] );
$return .= <<<IPSCONTENT
</div>
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/comment", "galleryCommentWrap:after", [ $item,$comment,$editorName,$app,$type,$class ] );
$return .= <<<IPSCONTENT
IPSCONTENT;
return $return;
@@ -3695,7 +3838,12 @@ IPSCONTENT;
$return = '';
$return .= <<<IPSCONTENT
<div id="review-
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/review", "galleryReviewWrap:before", [ $item,$review,$editorName,$app,$type ] );
$return .= <<<IPSCONTENT
<div data-ips-hook="galleryReviewWrap" id="review-
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $review->id, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
@@ -3736,10 +3884,25 @@ IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
>
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/review", "galleryReviewWrap:inside-start", [ $item,$review,$editorName,$app,$type ] );
$return .= <<<IPSCONTENT
<header class="ipsEntry__header">
<div class="ipsEntry__header-align">
<div class="ipsPhotoPanel">
<div class="ipsAvatarStack">
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/review", "galleryReviewUserPhoto:before", [ $item,$review,$editorName,$app,$type ] );
$return .= <<<IPSCONTENT
<div class="ipsAvatarStack" data-ips-hook="galleryReviewUserPhoto">
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/review", "galleryReviewUserPhoto:inside-start", [ $item,$review,$editorName,$app,$type ] );
$return .= <<<IPSCONTENT
IPSCONTENT;
@@ -3759,9 +3922,29 @@ IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
</div>
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/review", "galleryReviewUserPhoto:inside-end", [ $item,$review,$editorName,$app,$type ] );
$return .= <<<IPSCONTENT
</div>
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/review", "galleryReviewUserPhoto:after", [ $item,$review,$editorName,$app,$type ] );
$return .= <<<IPSCONTENT
<div class="ipsPhotoPanel__text">
<div class="ipsEntry__username">
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/review", "galleryReviewUsername:before", [ $item,$review,$editorName,$app,$type ] );
$return .= <<<IPSCONTENT
<div data-ips-hook="galleryReviewUsername" class="ipsEntry__username">
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/review", "galleryReviewUsername:inside-start", [ $item,$review,$editorName,$app,$type ] );
$return .= <<<IPSCONTENT
<h3>
IPSCONTENT;
@@ -3786,7 +3969,17 @@ IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
</div>
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/review", "galleryReviewUsername:inside-end", [ $item,$review,$editorName,$app,$type ] );
$return .= <<<IPSCONTENT
</div>
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/review", "galleryReviewUsername:after", [ $item,$review,$editorName,$app,$type ] );
$return .= <<<IPSCONTENT
<p class="ipsPhotoPanel__secondary">
IPSCONTENT;
@@ -3900,311 +4093,7 @@ IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
<a href="#elControlsReviews_
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $review->id, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
_menu" class="ipsEntry__topButton ipsEntry__topButton--ellipsis" id="elControlsReviews_
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $review->id, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
" title="
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'more_options', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
" data-ipsmenu data-ipsmenu-appendto="#review-
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $review->id, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
_wrap"><i class="fa-solid fa-ellipsis"></i><span class="ipsInvisible">
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'more_options', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</span></a>
<ul id="elControlsReviews_
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $review->id, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
_menu" class="ipsMenu ipsMenu_narrow ipsHide">
IPSCONTENT;
if ( $review->canReportOrRevoke() === TRUE ):
$return .= <<<IPSCONTENT
<li class="ipsMenu_item">
<a href="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $review->url('report'), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
"
IPSCONTENT;
if ( \IPS\Member::loggedIn()->member_id or \IPS\Helpers\Form\Captcha::supportsModal() ):
$return .= <<<IPSCONTENT
data-ipsdialog data-ipsdialog-remotesubmit data-ipsdialog-size="medium" data-ipsdialog-flashmessage="
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'report_submit_success', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
" data-ipsdialog-title="
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'report', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
"
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
data-action="reportComment" title="
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'report', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
">
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'report', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</a>
</li>
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
<li class="ipsMenu_item">
<a class="i-color_inherit" href="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $review->item()->url()->setQueryString( array( 'do' => 'findReview', 'review' => $review->id ) ), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
" title="
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'share_this_review', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
" data-ipsdialog data-ipsdialog-size="narrow" data-ipsdialog-content="#elShareReview_
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $review->id, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
_menu" data-ipsdialog-title="
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'share_this_review', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
" id="elShareReview_
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $review->id, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
" data-role="shareComment">
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'share_this_review', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</a>
</li>
IPSCONTENT;
if ( $review->canEdit() || ( $review->hidden() == -2 AND \IPS\Member::loggedIn()->modPermission('can_manage_deleted_content') ) || ( \IPS\IPS::classUsesTrait( $review, 'IPS\Content\Hideable' ) && ( ( !$review->hidden() and $review->canHide() ) || ( $review->hidden() and $review->canUnhide() ) ) ) || $review->canDelete() ):
$return .= <<<IPSCONTENT
<li class="ipsMenu_sep"><hr></li>
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
IPSCONTENT;
if ( $review->canEdit() ):
$return .= <<<IPSCONTENT
<li class="ipsMenu_item"><a href="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $review->url('edit'), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
" data-action="editComment">
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'edit', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</a></li>
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
IPSCONTENT;
if ( $review->hidden() == -2 AND \IPS\Member::loggedIn()->modPermission('can_manage_deleted_content') ):
$return .= <<<IPSCONTENT
<li class="ipsMenu_item"><a href="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $review->url('restore')->csrf(), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
" data-confirm data-confirmsubmessage="
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'restore_as_visible_desc', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
">
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'restore_as_visible', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</a></li>
<li class="ipsMenu_item"><a href="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $review->url('restore')->csrf()->setQueryString( 'restoreAsHidden', 1 ), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
" data-confirm data-confirmsubmessage="
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'restore_as_hidden_desc', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
">
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'restore_as_hidden', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</a></li>
<li class="ipsMenu_item"><a href="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $review->url('delete')->csrf()->setQueryString( 'immediately', 1 ), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
" data-confirm data-confirmsubmessage="
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'delete_immediately_desc', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
">
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'delete_immediately', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</a></li>
IPSCONTENT;
else:
$return .= <<<IPSCONTENT
IPSCONTENT;
if ( \IPS\IPS::classUsesTrait( $review, 'IPS\Content\Hideable' ) ):
$return .= <<<IPSCONTENT
IPSCONTENT;
if ( !$review->hidden() and $review->canHide() ):
$return .= <<<IPSCONTENT
<li class="ipsMenu_item"><a href="
IPSCONTENT;
if ( $review::$hideLogKey ):
$return .= <<<IPSCONTENT
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $review->url('hide'), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
IPSCONTENT;
else:
$return .= <<<IPSCONTENT
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $review->url('hide')->csrf(), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
" data-ipsdialog data-ipsdialog-title="
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'hide', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
">
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'hide', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</a></li>
IPSCONTENT;
elseif ( $review->hidden() and $review->canUnhide() ):
$return .= <<<IPSCONTENT
<li class="ipsMenu_item"><a href="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $review->url('unhide')->csrf(), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
">
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'unhide', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</a></li>
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
IPSCONTENT;
if ( $review->canDelete() ):
$return .= <<<IPSCONTENT
<li class="ipsMenu_item"><a href="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $review->url('delete')->csrf()->setPage('page',\IPS\Request::i()->page), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
" data-action="deleteComment" data-updateondelete="#reviewCount">
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'delete', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</a></li>
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
</ul>
{$review->menu()}
IPSCONTENT;
@@ -4322,11 +4211,21 @@ endif;
$return .= <<<IPSCONTENT
<div id="review-
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/review", "galleryReview:before", [ $item,$review,$editorName,$app,$type ] );
$return .= <<<IPSCONTENT
<div data-ips-hook="galleryReview" id="review-
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $review->id, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
" class="ipsRichText ipsRichText--user" data-role="commentContent" data-controller="core.front.core.lightboxedImages">
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/review", "galleryReview:inside-start", [ $item,$review,$editorName,$app,$type ] );
$return .= <<<IPSCONTENT
{$review->content()}
IPSCONTENT;
@@ -4341,7 +4240,17 @@ IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
</div>
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/review", "galleryReview:inside-end", [ $item,$review,$editorName,$app,$type ] );
$return .= <<<IPSCONTENT
</div>
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/review", "galleryReview:after", [ $item,$review,$editorName,$app,$type ] );
$return .= <<<IPSCONTENT
IPSCONTENT;
@@ -4527,7 +4436,17 @@ IPSCONTENT;
if ( ( \IPS\Member::loggedIn()->member_id and ( !$review->mapped('votes_data') or !array_key_exists( \IPS\Member::loggedIn()->member_id, json_decode( $review->mapped('votes_data'), TRUE ) ) ) ) || $review->canEdit() || $review->canDelete() || $review->canHide() || $review->canUnhide() || ( $review->hidden() !== 1 && \IPS\IPS::classUsesTrait( $review, 'IPS\Content\Reactable' ) and \IPS\Settings::i()->reputation_enabled and $review->hasReactionBar() ) ):
$return .= <<<IPSCONTENT
<div class="ipsEntry__footer">
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/review", "galleryReviewFooter:before", [ $item,$review,$editorName,$app,$type ] );
$return .= <<<IPSCONTENT
<div data-ips-hook="galleryReviewFooter" class="ipsEntry__footer">
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/review", "galleryReviewFooter:inside-start", [ $item,$review,$editorName,$app,$type ] );
$return .= <<<IPSCONTENT
IPSCONTENT;
@@ -4537,12 +4456,12 @@ $return .= <<<IPSCONTENT
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/review", "commentControls:before", [ $item,$review,$editorName,$app,$type ] );
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/review", "galleryReviewControls:before", [ $item,$review,$editorName,$app,$type ] );
$return .= <<<IPSCONTENT
<menu class="ipsEntry__controls" data-role="commentControls" data-ips-hook="commentControls">
<menu class="ipsEntry__controls" data-role="commentControls" data-ips-hook="galleryReviewControls">
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/review", "commentControls:inside-start", [ $item,$review,$editorName,$app,$type ] );
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/review", "galleryReviewControls:inside-start", [ $item,$review,$editorName,$app,$type ] );
$return .= <<<IPSCONTENT
@@ -4736,6 +4655,24 @@ $return .= <<<IPSCONTENT
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
IPSCONTENT;
if ( \IPS\Application::appIsEnabled('cloud') ):
$return .= <<<IPSCONTENT
<li>
IPSCONTENT;
$return .= \IPS\Theme::i()->getTemplate( "spam", "cloud" )->spam( $review, FALSE );
$return .= <<<IPSCONTENT
</li>
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
@@ -4745,12 +4682,12 @@ $return .= <<<IPSCONTENT
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/review", "commentControls:inside-end", [ $item,$review,$editorName,$app,$type ] );
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/review", "galleryReviewControls:inside-end", [ $item,$review,$editorName,$app,$type ] );
$return .= <<<IPSCONTENT
</menu>
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/review", "commentControls:after", [ $item,$review,$editorName,$app,$type ] );
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/review", "galleryReviewControls:after", [ $item,$review,$editorName,$app,$type ] );
$return .= <<<IPSCONTENT
@@ -4777,7 +4714,17 @@ IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
</div>
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/review", "galleryReviewFooter:inside-end", [ $item,$review,$editorName,$app,$type ] );
$return .= <<<IPSCONTENT
</div>
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/review", "galleryReviewFooter:after", [ $item,$review,$editorName,$app,$type ] );
$return .= <<<IPSCONTENT
IPSCONTENT;
@@ -4802,7 +4749,17 @@ IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/review", "galleryReviewWrap:inside-end", [ $item,$review,$editorName,$app,$type ] );
$return .= <<<IPSCONTENT
</div>
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "gallery/front/global/review", "galleryReviewWrap:after", [ $item,$review,$editorName,$app,$type ] );
$return .= <<<IPSCONTENT
IPSCONTENT;
return $return;
+2 -2
View File
@@ -1354,7 +1354,7 @@ IPSCONTENT;
if ( \count( $customFields ) ):
$return .= <<<IPSCONTENT
<div class="ipsBox">
<div class="ipsBox i-margin-bottom_1">
<h2 class='ipsBox__header'>
IPSCONTENT;
@@ -1404,7 +1404,7 @@ IPSCONTENT;
if ( $purchase->childrenCount() ):
$return .= <<<IPSCONTENT
<div class='ipsBox'>
<div class='ipsBox i-margin-bottom_1'>
<h2 class="ipsBox__header">
IPSCONTENT;