Version 5.0.0 beta 2

This commit is contained in:
Neo committed 2025-12-19 16:39:01 -08:00
1 parent 15c7beabc5
commit f61b0da85d
181 files changed
+3182 -1533

No files matched your search

+1 -1
View File
@@ -1 +1 @@
.ipsData--blog-entries.ipsData--grid{--i-data--display-desc:5;}.ipsCoverPhoto--blog-listing{margin:10px;margin-bottom:0;}.ipsData__blog-item{border-bottom:1px solid transparent;border-bottom-color:color-mix(in srgb, currentColor 15%, transparent);}.cBlogInfo_content{max-height:170px;overflow:hidden;-webkit-mask-image:linear-gradient(#000 6em, transparent);mask-image:linear-gradient(#000 6em, transparent);}.ipsBlogs__blog-listing-entries li{display:flex;align-items:center;gap:.9em;padding:.5em;}.ipsBlogs__blog-listing-entries li:not(:last-child){border-bottom:1px solid transparent;border-bottom-color:color-mix(in srgb, currentColor 10%, transparent);}.ipsBlogs__blog-listing-entries li:first-child:not(:last-child){display:none}.ipsBlogs__blog-listing-entries .ipsUserPhoto{flex:0 0 1.5em;}.cBlogContributors{border-top:1px solid transparent;border-top-color:color-mix(in srgb, currentColor 10%, transparent);padding:1em;}[data-controller="blog.front.view.manageCategories"] .sortable-placeholder{min-height:5.7em;}
.ipsData--blog-entries.ipsData--grid{--i-data--desc-truncate:5;}.ipsCoverPhoto--blog-listing{margin:10px;margin-bottom:0;}.ipsData__blog-item{border-bottom:1px solid transparent;border-bottom-color:color-mix(in srgb, currentColor 15%, transparent);}.cBlogInfo_content{max-height:170px;overflow:hidden;-webkit-mask-image:linear-gradient(#000 6em, transparent);mask-image:linear-gradient(#000 6em, transparent);}.ipsBlogs__blog-listing-entries li{display:flex;align-items:center;gap:.9em;padding:.5em;}.ipsBlogs__blog-listing-entries li:not(:last-child){border-bottom:1px solid transparent;border-bottom-color:color-mix(in srgb, currentColor 10%, transparent);}.ipsBlogs__blog-listing-entries li:first-child:not(:last-child){display:none}.ipsBlogs__blog-listing-entries .ipsUserPhoto{flex:0 0 1.5em;}.cBlogContributors{border-top:1px solid transparent;border-top-color:color-mix(in srgb, currentColor 10%, transparent);padding:1em;}[data-controller="blog.front.view.manageCategories"] .sortable-placeholder{min-height:5.7em;}
@@ -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{border:0;}iframe:where([src*="youtube."], [src*="youtube-nocookie."], [src*="vimeo."]){width:100%;height:auto;aspect-ratio:16/9;}:where(img, svg){border:0;display:inline-block;max-width:100%;height:auto;vertical-align:top;}:where(img::before){display:block;overflow:hidden;height:100%;}:where(h1, h2, h3, h4, h5, h6){font-size:inherit;font-weight:inherit;}:where(b, strong){font-weight:bolder;}:where(ul, ol){list-style-type:none;}:where(blockquote, q){quotes:none;}:where(table){border-collapse:collapse;border-spacing:0;}fieldset{border:0;}:where(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;-webkit-user-select:none;user-select:none;}button{touch-action:manipulation;}summary{list-style-type:none;}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-layout-width:1500;--set__i-flip-sidebar:0;--set__i-sticky-sidebar:1;--set__i-avatar-radius:1;--set__i-design-border:1;--set__i-design-radius:8;--set__i-design-shadow:0;--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)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-layout-width:1500;--set__i-flip-sidebar:0;--set__i-sticky-sidebar:1;--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-co:var(--i-base_2);--light_Line truncated
+1 -1
View File
@@ -1 +1 @@
.ipsData--forum-grid{}.ipsData--forum-grid .ipsData__stats + .ipsData__last{padding-top:1em;}.ipsCategoryWithFeed{container:ipsCategoryWithFeed / inline-size;}.ipsCategoryWithFeed__item{border-top:6px solid var(--i-featured, var(--i-background_6));}.ipsData--forum-feed-view-forum{grid-template-columns:1fr;}.ipsData--forum-feed-view .ipsData__title{font-weight:500 !important;}.ipsData--forum-feed-view-forum .ipsData__stats{font-weight:550;color:var(--i-color_root);}@container ipsCategoryWithFeed (min-width:650.1px){.ipsCategoryWithFeed__item{display:grid;grid-template-columns:clamp(280px, 33%, 350px) 1fr;}.ipsCategoryWithFeed__meta{border-inline-end:1px solid var(--i-background_4);}.ipsData--forum-feed-view-forum{height:100%;}.ipsData--forum-feed-view{--i-data--padding:1.1em;--i-data--cell-spacing:1em;--i-data--icon-width:30px;height:100%;display:flex;flex-direction:column;}.ipsData__item--forum-feed-view-all{flex:0 0 auto;margin-top:auto;text-align:end;font-weight:600;font-size:.9em;}.ipsData__item--forum-feed-view-all .ipsLinkPanel{border-radius:0;}.ipsCategoryWithFeed__small{display:none;}}@container ipsCategoryWithFeed (max-width:650px){.ipsData.ipsData--forum-feed-view-forum{--i-data--padding:1.2em;--i-data--icon-ratio:1;}.ipsData--forum-feed-view-forum .ipsData__item{flex-direction:row;align-items:start;}.ipsData--forum-feed-view-forum .ipsData__image{flex:0 0 clamp(60px, 17vw, 120px);margin:0;}.ipsData--forum-feed-view{--i-data--gap:1.2em;padding:1em var(--i-data--gap);display:flex;gap:1em;overflow:auto;scroll-snap-type:x mandatory;scroll-padding:var(--i-data--gap);scrollbar-width:thin;scrollbar-color:color-mix(in srgb, var(--i-co) 20%, transparent) transparent;}.ipsData--forum-feed-view .ipsData__item{flex:0 0 min(80vw, 400px);border-radius:min(var(--i-design-radius), 8px);border-width:0;background:var(--i-background_2);scroll-snap-align:start;}.ipsData--forum-feed-view .ipsData__icon{align-self:center;}.ipsData__item--forum-feed-view-all{font-weight:600;text-align:center;}.ipsCategoryWithFeed__large{display:none;}}.cTopicHovercard .cTopicHovercard_container{height:200px;overflow:auto;}.ipsData--snippet-topic-list .ipsReactOverview--reactions a{display:block;}.ipsData--snippet-topic-list .ipsReactOverview--reactions img{height:1.3em;display:block;}.ipsData--snippet-topic-list .ipsReactOverview--points{display:flex;align-items:center;}.ipsData--snippet-topic-list .ipsReactOverview--points p{margin-inline-start:.6em;}.ipsData__item--snippet .ipsReactOverview--none{display:none;}.cForumMiniList_wrapper{padding:.5em;font-weight:500;}.cForumMiniList :where(a){display:flex;align-items:center;gap:.6em;padding:.5em 1em;color:var(--i-color_root);border-radius:var(--i-design-radius);}:where(.cForumMiniList a:hover){background-color:var(--i-background_2);}.cForumMiniList__selected{background-color:var(--i-background_3);}.cForumMiniList [data-ips-unread]{color:var(--i-color_hard);font-weight:700;}.cForumMiniList [data-category] > a{font-size:1.3em;font-weight:600;}.cForumMiniList [data-category]:not(:first-child){margin-top:1em;}.cForumMiniList .cForumMiniList .cForumMiniList{margin-inline-start:1.5em;}.cForumMiniList__count{font-size:.85em;flex:0 0 auto;color:var(--i-color_soft);margin-inline-start:auto;}.cForumMiniList .cForumMiniList__blob{background:var(--i-featured, var(--i-background_6));color:#fff;flex:0 0 auto;font-size:16px;width:1em;height:1em;border-radius:5px;display:inline-grid;place-items:center;transform:scale(.5);transition:.2s;}.cForumMiniList .cForumMiniList__blob [class*="fa-"]{display:none;font-size:.6em;}.cForumMiniList .cForumMiniList__selected > .cForumMiniList__blob{opacity:1;transform:scale(1);}.cForumMiniList .cForumMiniList__selected > .cForumMiniList__blob [class*="fa-"]{display:block;}.cForumMiniList [data-ips-read] > .cForumMiniList__blob{background-color:var(--i-background_6);}@media screen and (max-width:979px){.cForumMiniList_wrapper{display:none;}.ipsDialog #elFluidFormFilters{border:0;}.ipsDialog .cForumMiniList_wrapper, .cForumMiniList{display:block !important;}}
.ipsData--forum-grid{}.ipsData--forum-grid .ipsData__stats + .ipsData__last{padding-top:1em;}.ipsCategoryWithFeed{container:ipsCategoryWithFeed / inline-size;}.ipsCategoryWithFeed__item{border-top:6px solid var(--i-featured, var(--i-background_6));}.ipsData--forum-feed-view-forum{grid-template-columns:1fr;}.ipsData--forum-feed-view .ipsData__title{font-weight:500 !important;}.ipsData--forum-feed-view-forum .ipsData__stats{font-weight:550;color:var(--i-color_root);}@container ipsCategoryWithFeed (min-width:650.1px){.ipsCategoryWithFeed__item{display:grid;grid-template-columns:clamp(280px, 33%, 350px) 1fr;}.ipsCategoryWithFeed__meta{border-inline-end:1px solid var(--i-background_4);}.ipsData--forum-feed-view-forum{height:100%;}.ipsData--forum-feed-view{--i-data--padding:1.1em;--i-data--cell-spacing:1em;--i-data--icon-width:30px;height:100%;display:flex;flex-direction:column;}}@container ipsCategoryWithFeed (max-width:650px){.ipsData.ipsData--forum-feed-view-forum{--i-data--padding:1.2em;--i-data--icon-ratio:1;}.ipsData--forum-feed-view-forum .ipsData__item{flex-direction:row;align-items:start;}.ipsData--forum-feed-view-forum .ipsData__image{flex:0 0 clamp(60px, 17vw, 120px);margin:0;}.ipsData--forum-feed-view{--i-data--gap:1.2em;padding:1em var(--i-data--gap);display:flex;gap:1em;overflow:auto;scroll-snap-type:x mandatory;scroll-padding:var(--i-data--gap);scrollbar-width:thin;scrollbar-color:color-mix(in srgb, var(--i-co) 20%, transparent) transparent;}.ipsData--forum-feed-view .ipsData__item{flex:0 0 min(80vw, 400px);border-radius:min(var(--i-design-radius), 8px);border-width:0;background:var(--i-background_2);scroll-snap-align:start;}.ipsData--forum-feed-view .ipsData__icon{align-self:center;}}.cTopicHovercard .cTopicHovercard_container{height:200px;overflow:auto;}.ipsData--snippet-topic-list .ipsReactOverview--reactions a{display:block;}.ipsData--snippet-topic-list .ipsReactOverview--reactions img{height:1.3em;display:block;}.ipsData--snippet-topic-list .ipsReactOverview--points{display:flex;align-items:center;}.ipsData--snippet-topic-list .ipsReactOverview--points p{margin-inline-start:.6em;}.ipsData__item--snippet .ipsReactOverview--none{display:none;}.cForumMiniList_wrapper{padding:.5em;font-weight:500;}.cForumMiniList :where(a){display:flex;align-items:center;gap:.6em;padding:.5em 1em;color:var(--i-color_root);border-radius:var(--i-design-radius);}:where(.cForumMiniList a:hover){background-color:var(--i-background_2);}.cForumMiniList__selected{background-color:var(--i-background_3);}.cForumMiniList [data-ips-unread]{color:var(--i-color_hard);font-weight:700;}.cForumMiniList [data-category] > a{font-size:1.3em;font-weight:600;}.cForumMiniList [data-category]:not(:first-child){margin-top:1em;}.cForumMiniList .cForumMiniList .cForumMiniList{margin-inline-start:1.5em;}.cForumMiniList__count{font-size:.85em;flex:0 0 auto;color:var(--i-color_soft);margin-inline-start:auto;}.cForumMiniList .cForumMiniList__blob{background:var(--i-featured, var(--i-background_6));color:#fff;flex:0 0 auto;font-size:16px;width:1em;height:1em;border-radius:5px;display:inline-grid;place-items:center;transform:scale(.5);transition:.2s;}.cForumMiniList .cForumMiniList__blob [class*="fa-"]{display:none;font-size:.6em;}.cForumMiniList .cForumMiniList__selected > .cForumMiniList__blob{opacity:1;transform:scale(1);}.cForumMiniList .cForumMiniList__selected > .cForumMiniList__blob [class*="fa-"]{display:block;}.cForumMiniList [data-ips-read] > .cForumMiniList__blob{background-color:var(--i-background_6);}@media screen and (max-width:979px){.cForumMiniList_wrapper{display:none;}.ipsDialog #elFluidFormFilters{border:0;}.ipsDialog .cForumMiniList_wrapper, .cForumMiniList{display:block !important;}}
+1 -1
View File
@@ -2,7 +2,7 @@
this._missingSubscription=true;this.scope.html(ips.templates.render('core.browserNotification.missingSubscription')).hide();}).catch(err=>{Debug.log("getSubscription failed - browser may not support pushManager");Debug.log(err);return;});}},destroy:function(){clearTimeout(this._timeout);},menuOpened:function(e,data){let date;const showPrompt=()=>{this._timeout=setTimeout(()=>{this.scope.slideDown('fast');ips.utils.cookie.unset('notificationMenuShown');},750);};if(data.elemID==='elFullNotifications'){if(this._missingSubscription){showPrompt();}else{if(ips.utils.cookie.get('notificationMenuShown')===undefined){date=parseInt(ips.utils.cookie.get('notificationMenuShown'));if(date&&Date.now()>=date){showPrompt();}}else{date=new Date();date.setDate(date.getDate()+2);ips.utils.cookie.set('notificationMenuShown',date.getTime(),true);}}}},subscribePending:function(e,data){const button=this.scope.find('[data-action="browserNotificationPrompt"]');this._buttonText=button.text();button.prop('disabled',true).text(ips.getString('notificationsEnabling'));},subscribeSuccess:function(e,data){const button=this.scope.find('[data-action="browserNotificationPrompt"]');button.prop('disabled',true).text(ips.getString('notificationsSubscribed'));},subscribeFail:function(e,data){this.scope.find('[data-action="browserNotificationPrompt"]').prop('disabled',false).text(this._buttonText);this.scope.find('[data-role="promptMessage"]').text(ips.getString('notificationsSubscribeFailed')).slideDown();},requestPermission:function(){this.scope.find('[data-role="promptMessage"]').text(ips.getString('notificationsAllowPrompt')).slideDown();$(document).trigger('requestPermission.notifications');},rejectPush:function(e){e.preventDefault();ips.utils.cookie.set('notificationPushRejected',true,true);this.hideNotice();},hideNotice:function(){this.scope.slideUp('fast');},dismissNotification:function(e){if(e){e.preventDefault();}
var date=new Date();date.setDate(date.getDate()+100);ips.utils.cookie.set('browserNotificationDismiss',true,date.toUTCString());this.scope.slideUp({duration:400,complete:function(){$(this).remove();}});}});}(jQuery,_));;
;(function($,_,undefined){"use strict";ips.controller.register('core.front.core.onlineUsersWidget',{initialize(){if(!ips.getSetting('member_url')||this.elem.querySelector(`[data-memberId="${ips.getSetting('memberID')}"]`)){return;}
const memberRowHtml=ips.templates.render('core.onlineUser.linked',{memberUrl:ips.getSetting('member_url'),memberHovercardUrl:ips.getSetting('member_hovercardUrl'),formattedName:ips.getSetting('member_formattedName'),});this.scope.find('ul').prepend(memberRowHtml);const numOnline=this.elem.querySelector('[data-memberCount]');if(numOnline){numOnline.innerText=ips.pluralize(ips.getString('widget_onlineusers_membercount'),parseInt(numOnline.dataset.membercount)+1);}
const memberRowHtml=ips.templates.render('core.onlineUser.linked',{memberUrl:ips.getSetting('member_url'),memberHovercardUrl:ips.getSetting('member_hovercardUrl'),formattedName:ips.getSetting('member_formattedName'),memberId:ips.getSetting('memberID')});this.scope.find('ul').prepend(memberRowHtml);const numOnline=this.elem.querySelector('[data-memberCount]');if(numOnline){numOnline.innerText=ips.pluralize(ips.getString('widget_onlineusers_membercount'),parseInt(numOnline.dataset.membercount)+1);}
this.elem.querySelector('li[data-noneOnline]')?.remove();}});}(jQuery,_));;
;(function($,_,undefined){"use strict";ips.controller.register('core.front.core.poll',{initialize:function(){this.on('submit','form',this.submitPoll);this.on('click','[data-action="viewResults"]',this.viewResults);},viewResults:function(e){e.preventDefault();var url=$(e.currentTarget).attr('href')+'&fetchPoll=1&viewResults=1';if($(e.currentTarget).attr('data-viewResults-confirm')){var self=this;ips.ui.alert.show({type:'confirm',icon:'warn',message:ips.getString('generic_confirm'),subText:ips.getString('warn_allow_result_view'),callbacks:{ok:function(){self._viewResults(url+'&nullVote=1');}}});}else{this._viewResults(url);}},_viewResults:function(url){var self=this;self._setContentsLoading();ips.getAjax()(url).done(function(response){self.cleanContents();self.scope.html(response);$(document).trigger('contentChange',[self.scope]);});},_setContentsLoading:function(){var container=this.scope.find('[data-role="pollContents"]');var height=container.outerHeight();container.css({height:height+'px'}).html('').addClass('ipsLoading');},submitPoll:function(e){var form=$(e.currentTarget);if(form.attr('data-bypassAjax')){return}
e.preventDefault();var url=form.attr('action');var self=this;this.scope.find('button[type="submit"]').prop('disabled',true).text(ips.getString('votingNow'));if(url.match(/\?/)){url+='&';}else{url+='?';}
+1 -1
View File
@@ -39,7 +39,7 @@ this.updateURL({sortby:cell.attr('data-key'),sortdirection:order});};this.startL
return{by:sortBy.attr('data-key'),order:sortOrder};};this._getFilterValue=function(){var sortBar=this.scope.find('[data-role="tableSortBar"]');if(!sortBar.length){return'';}
return sortBar.find('.ipsDataFilters__button--active').closest('[data-filter]').attr('data-filter');};this._getSearchValue=function(){if(ips.utils.url.getParam('quicksearch')){return ips.utils.url.getParam('quicksearch');}
return this.scope.find('[data-role="tableSearch"]').val();};});}(jQuery,_));;
ips.templates.set('core.appMenu.reorder'," <span data-role='reorder' style='display: none'><i class='fa-solid fa-bars'></i></span>");ips.templates.set('core.controlStrip.menu'," <ul class='ipsMenu ipsMenu_auto' role='menu' id='{{id}}_menu' style='display: none'> {{{content}}} </ul>");ips.templates.set('core.controlStrip.menuItem'," <li class='ipsMenu_item ipsControlStrip_menuItem' role='menuitem' id='{{id}}'> {{{item}}} </li>");ips.templates.set('core.controlStrip.dropdown'," <li class='ipsControlStrip_button ipsControlStrip_dropdown' data-dropdown id='{{id}}'> <a href='#'> <i class='ipsControlStrip_icon fa-solid fa-angle-down'></i> </a> </li>");ips.templates.set('core.forms.toggle'," <span class='ipsToggle {{className}}' id='{{id}}' tabindex='0' role='switch' aria-checked='{{status}}'> <span data-role='status'></span> </span>");ips.templates.set('core.trees.childWrapper'," {{{content}}}");ips.templates.set('core.trees.loadingRow'," <ol class='ipsTree'><li class='ipsTree_loadingRow ipsLoading ipsLoading--tiny'>{{#lang}}loading{{/lang}}</li></ol>");ips.templates.set('core.trees.loadingPane'," <div class='ipsLoading' style='height: 150px'>&nbsp;</div>");ips.templates.set('core.trees.noRows'," <div class='i-text-align_center i-padding_3 i-color_soft'>{{#lang}}no_results{{/lang}}</div>");ips.templates.set('core.livesearch.noResults'," <li class='i-text-align_center i-padding_3 i-color_soft' data-role='result'> <br><br> </li>");ips.templates.set('languages.translateString'," <div class='cTranslateTable_field'> <textarea class='ipsInput'>{{value}}</textarea> <a href='#' data-action='saveWords' tabindex='-1' class='ipsButton ipsButton--positive ipsButton--tiny ipsButton--icon'><i class='fa-solid fa-check'></i> {{#lang}}languageSave{{/lang}}</a> </div>");ips.templates.set('support.guideSearch'," <li> <a href=\"{{link}}\" target='_blank' rel='noopener'>{{title}}</a> </li>");ips.templates.set('support.guideSearch.noResults'," <li class='i-color_soft'> {{#lang}}no_results{{/lang}} </li>");ips.templates.set('support.ticket.supportSummary'," <div class='i-padding-top_3'> {{#lang}}health_ticket_beforeproceeding{{/lang}} </div>");;
ips.templates.set('core.appMenu.reorder'," <span data-role='reorder' style='display: none'><i class='fa-solid fa-bars'></i></span>");ips.templates.set('core.controlStrip.menu'," <ul class='ipsMenu ipsMenu_auto' role='menu' id='{{id}}_menu' style='display: none'> {{{content}}} </ul>");ips.templates.set('core.controlStrip.menuItem'," <li class='ipsMenu_item ipsControlStrip_menuItem' role='menuitem' id='{{id}}'> {{{item}}} </li>");ips.templates.set('core.controlStrip.dropdown'," <li class='ipsControlStrip_button ipsControlStrip_dropdown' data-dropdown id='{{id}}'> <a href='#'> <i class='ipsControlStrip_icon fa-solid fa-angle-down'></i> </a> </li>");ips.templates.set('core.trees.childWrapper'," {{{content}}}");ips.templates.set('core.trees.loadingRow'," <ol class='ipsTree'><li class='ipsTree_loadingRow ipsLoading ipsLoading--tiny'>{{#lang}}loading{{/lang}}</li></ol>");ips.templates.set('core.trees.loadingPane'," <div class='ipsLoading' style='height: 150px'>&nbsp;</div>");ips.templates.set('core.trees.noRows'," <div class='i-text-align_center i-padding_3 i-color_soft'>{{#lang}}no_results{{/lang}}</div>");ips.templates.set('core.livesearch.noResults'," <li class='i-text-align_center i-padding_3 i-color_soft' data-role='result'> <br><br> </li>");ips.templates.set('languages.translateString'," <div class='cTranslateTable_field'> <textarea class='ipsInput'>{{value}}</textarea> <a href='#' data-action='saveWords' tabindex='-1' class='ipsButton ipsButton--positive ipsButton--tiny ipsButton--icon'><i class='fa-solid fa-check'></i> {{#lang}}languageSave{{/lang}}</a> </div>");ips.templates.set('support.guideSearch'," <li> <a href=\"{{link}}\" target='_blank' rel='noopener'>{{title}}</a> </li>");ips.templates.set('support.guideSearch.noResults'," <li class='i-color_soft'> {{#lang}}no_results{{/lang}} </li>");ips.templates.set('support.ticket.supportSummary'," <div class='i-padding-top_3'> {{#lang}}health_ticket_beforeproceeding{{/lang}} </div>");;
;(function($,_,undefined){"use strict";ips.controller.register('core.admin.core.app',{initialize:function(){this.on('click','[data-clickshow]',this.clickShow);this.on('click','[data-clickhide]',this.clickHide);this.on('click','[data-clickempty]',this.clickEmpty);this.on('click','[data-delete]',this.deleteSomething);this.on('click','a[data-confirm]',this.confirmSomething);this.on('click','[data-doajax]',this.doAjaxAction);this.on(document,'contentChange',this._checkAndClearAutosave);this.setup();},setup:function(){if(ips.utils.serviceWorker.supported){ips.utils.serviceWorker.registerServiceWorker('admin',false);}
this._checkAndClearAutosave();if(!ips.getSetting('memberID')&&ips.utils.url.getParam('_fromLogout')){ips.utils.db.removeByType('editorSave');}},_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');}},doAjaxAction:function(e){e.preventDefault();ips.getAjax()($(e.currentTarget).attr('href'),{dataType:'json'}).done(function(response){ips.ui.flashMsg.show(response);}).fail(function(jqXHR){if(Debug.isEnabled()){Debug.error(jqXHR.responseText);}else{window.location=$(e.currentTarget).attr('href');}});},deleteSomething:function(e){e.preventDefault();var elem=$(e.currentTarget);var deleteTitle=elem.attr('data-delete-message');var extraWarning=elem.attr('data-delete-warning');ips.ui.alert.show({type:'confirm',icon:'warn',message:deleteTitle||ips.getString('delete_confirm'),subText:extraWarning||'',focus:'cancel',callbacks:{ok:function(){if(elem.attr('data-noajax')!==undefined){window.location=elem.attr('href')+'&csrfKey='+ips.getSetting('csrfKey')+'&wasConfirmed=1';return;}
+12 -13
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='{{baseUR 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='{{baseUR 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'>
@@ -39,7 +39,7 @@ ips.templates.set('core.rating.star'," <li class='{{className}}' data-ratingValu
<div class='ipsData__last'></div>
</div>
</li>
`);ips.templates.set('licenseRenewal.wrapper'," <div class='acpLicenseRenewal' data-role='licenseRenewal'> <div class='acpLicenseRenewal_wrap'> <div class='acpLicenseRenewal_inner'> <div class='acpLicenseRenewal_content i-padding_3'> <h4 class='i-font-size_3 i-font-weight_600 i-color_hard i-margin-bottom_2' data-role='mainTitle'>{{#lang}}licenseRenewalTitle{{/lang}}</h4> <p class='i-color_soft'>{{#lang}}licenseRenewalText{{/lang}}</p> <div class='i-margin-top_2 i-flex i-align-items_center i-gap_1 i-font-weight_500'><input type='checkbox' checked='checked' name='hideRenewalNotice' id='hideRenewalNotice' class='ipsInput ipsInput--toggle'> <label for='hideRenewalNotice'>{{#lang}}licenseRenewalCheckbox{{/lang}}</label></div> </div> <ul class='ipsButtons i-background_2 i-border-top_1 i-border-end-start-radius_box i-border-end-end-radius_box i-padding_2'> <li> <a href='#' class='ipsButton ipsButton--inherit' data-action='closeLicenseRenewal'>{{#lang}}licenseRenewalNo{{/lang}}</a> </li> <li> <a href='#' class='ipsButton ipsButton--primary' data-role='survey' data-action='closeLicenseRenewal' target='_blank'>{{#lang}}licenseRenewalYes{{/lang}}</a> </li> </ul> </div> </div> </div>");ips.templates.set('core.browserNotification.prompt'," <div class='cNotifcationPrompt'> <div class='i-padding_3'> <div class='ipsPhotoPanel ipsPhotoPanel--mini'> <span class='cNotifcationPrompt_icon'></span> <div> <a href='#' class='cNotifcationPrompt_dismiss' data-role=\"dismissNotification\">×</a> <h3 class='cNotifcationPrompt_title i-font-size_2 ipsType_sectionHead'>{{#lang}}notificationsCallout{{/lang}}</h3> <p class='cNotifcationPrompt_text i-margin-top_2'> {{#lang}}notificationsDefaultBlurb{{/lang}} </p> <div class='ipsButtons i-margin-top_3'> <button data-action='browserNotificationPrompt' class='ipsButton ipsButton--small ipsButton--soft ipsButton--wide'>{{#lang}}notificationsAllow{{/lang}}</button> </div> <p class='i-font-size_-2 i-margin-block_2 ipsHide' data-role='promptMessage'> {{#lang}}notificationsAllowPrompt{{/lang}} </p> </div> </div> </div> </div>");ips.templates.set('core.browserNotification.missingSubscription'," <div class='cNotifcationPrompt'> <div class='i-padding_3'> <div class='ipsPhotoPanel ipsPhotoPanel--mini'> <span class='cNotifcationPrompt_icon'></span> <div> <a href='#' class='cNotifcationPrompt_dismiss' data-role=\"dismissNotification\">×</a> <h3 class='cNotifcationPrompt_title i-font-size_2 ipsType_sectionHead'>{{#lang}}notificationsCalloutPush{{/lang}}</h3> <p class='cNotifcationPrompt_text i-margin-block_2'> {{#lang}}notificationsDefaultBlurb{{/lang}} </p> <p class='cNotifcationPrompt_text i-font-size_-2 i-margin-block_2'> {{#lang}}notificationsUpgradeBlurb{{/lang}} </p> <div class='ipsButtons i-margin-top_3'> <button data-action='browserNotificationPrompt' class='ipsButton ipsButton--small ipsButton--soft i-flex_11'>{{#lang}}notificationsAllow{{/lang}}</button> <a href='#' data-action='rejectPush' class='ipsButton ipsButton--small ipsButton--text i-color_white i-flex_00'>{{#lang}}notificationsNoThanks{{/lang}}</a> </div> <p class='i-font-size_-2 i-margin-block_2 ipsHide' data-role='promptMessage'> {{#lang}}notificationsAllowPrompt{{/lang}} </p> </div> </div> </div> </div>");ips.templates.set('core.notifications.pending'," <span class='i-color_soft'>{{#lang}}notificationsEnabling{{/lang}}</span>");ips.templates.set('core.notifications.success'," <span class='i-color_positive'><i class='fa-solid fa-check'></i> {{#lang}}notificationsEnabled{{/lang}}</span>");ips.templates.set('core.notifications.fail'," <span class='i-color_negative'><i class='fa-solid fa-xmark'></i> {{#lang}}notificationsFailed{{/lang}}</span>");ips.templates.set('core.notifications.notSupported'," <span class='i-color_soft'><i class='fa-solid fa-xmark'></i> {{#lang}}notificationsNotSupported{{/lang}}</span>");ips.templates.set('core.notifications.checking'," <span class='i-color_soft'>{{#lang}}notificationsChecking{{/lang}}</span>");ips.templates.set('system.warningpenalty.nomodify'," <ul class='ipsList ipsList--bullets' id='elWarningPenalties'> {{#penalties}} <li>{{.}}</li> {{/penalties}} </ul>");ips.templates.set('core.edittags.default'," <div class='i-padding_3'> <span><i class='ipsLoadingIcon'></i> &nbsp;{{#lang}}loading{{/lang}}</span> </div>");ips.templates.set('core.onlineUser.linked',"<li> <a href='{{memberUrl}}' data-ipsHover data-ipsHover-target='{{memberHovercardUrl}}'>{{{formattedName}}}</a></li>");ips.templates.set('core.iconpicker.wrap',`
`);ips.templates.set('licenseRenewal.wrapper'," <div class='acpLicenseRenewal' data-role='licenseRenewal'> <div class='acpLicenseRenewal_wrap'> <div class='acpLicenseRenewal_inner'> <div class='acpLicenseRenewal_content i-padding_3'> <h4 class='i-font-size_3 i-font-weight_600 i-color_hard i-margin-bottom_2' data-role='mainTitle'>{{#lang}}licenseRenewalTitle{{/lang}}</h4> <p class='i-color_soft'>{{#lang}}licenseRenewalText{{/lang}}</p> <div class='i-margin-top_2 i-flex i-align-items_center i-gap_1 i-font-weight_500'><input type='checkbox' checked='checked' name='hideRenewalNotice' id='hideRenewalNotice' class='ipsInput ipsInput--toggle'> <label for='hideRenewalNotice'>{{#lang}}licenseRenewalCheckbox{{/lang}}</label></div> </div> <ul class='ipsButtons i-background_2 i-border-top_1 i-border-end-start-radius_box i-border-end-end-radius_box i-padding_2'> <li> <a href='#' class='ipsButton ipsButton--inherit' data-action='closeLicenseRenewal'>{{#lang}}licenseRenewalNo{{/lang}}</a> </li> <li> <a href='#' class='ipsButton ipsButton--primary' data-role='survey' data-action='closeLicenseRenewal' target='_blank'>{{#lang}}licenseRenewalYes{{/lang}}</a> </li> </ul> </div> </div> </div>");ips.templates.set('core.browserNotification.prompt'," <div class='cNotifcationPrompt'> <div class='i-padding_3'> <div class='ipsPhotoPanel ipsPhotoPanel--mini'> <span class='cNotifcationPrompt_icon'></span> <div> <a href='#' class='cNotifcationPrompt_dismiss' data-role=\"dismissNotification\">×</a> <h3 class='cNotifcationPrompt_title i-font-size_2 ipsType_sectionHead'>{{#lang}}notificationsCallout{{/lang}}</h3> <p class='cNotifcationPrompt_text i-margin-top_2'> {{#lang}}notificationsDefaultBlurb{{/lang}} </p> <div class='ipsButtons i-margin-top_3'> <button data-action='browserNotificationPrompt' class='ipsButton ipsButton--small ipsButton--soft ipsButton--wide'>{{#lang}}notificationsAllow{{/lang}}</button> </div> <p class='i-font-size_-2 i-margin-block_2 ipsHide' data-role='promptMessage'> {{#lang}}notificationsAllowPrompt{{/lang}} </p> </div> </div> </div> </div>");ips.templates.set('core.browserNotification.missingSubscription'," <div class='cNotifcationPrompt'> <div class='i-padding_3'> <div class='ipsPhotoPanel ipsPhotoPanel--mini'> <span class='cNotifcationPrompt_icon'></span> <div> <a href='#' class='cNotifcationPrompt_dismiss' data-role=\"dismissNotification\">×</a> <h3 class='cNotifcationPrompt_title i-font-size_2 ipsType_sectionHead'>{{#lang}}notificationsCalloutPush{{/lang}}</h3> <p class='cNotifcationPrompt_text i-margin-block_2'> {{#lang}}notificationsDefaultBlurb{{/lang}} </p> <p class='cNotifcationPrompt_text i-font-size_-2 i-margin-block_2'> {{#lang}}notificationsUpgradeBlurb{{/lang}} </p> <div class='ipsButtons i-margin-top_3'> <button data-action='browserNotificationPrompt' class='ipsButton ipsButton--small ipsButton--soft i-flex_11'>{{#lang}}notificationsAllow{{/lang}}</button> <a href='#' data-action='rejectPush' class='ipsButton ipsButton--small ipsButton--text i-color_white i-flex_00'>{{#lang}}notificationsNoThanks{{/lang}}</a> </div> <p class='i-font-size_-2 i-margin-block_2 ipsHide' data-role='promptMessage'> {{#lang}}notificationsAllowPrompt{{/lang}} </p> </div> </div> </div> </div>");ips.templates.set('core.notifications.pending'," <span class='i-color_soft'>{{#lang}}notificationsEnabling{{/lang}}</span>");ips.templates.set('core.notifications.success'," <span class='i-color_positive'><i class='fa-solid fa-check'></i> {{#lang}}notificationsEnabled{{/lang}}</span>");ips.templates.set('core.notifications.fail'," <span class='i-color_negative'><i class='fa-solid fa-xmark'></i> {{#lang}}notificationsFailed{{/lang}}</span>");ips.templates.set('core.notifications.notSupported'," <span class='i-color_soft'><i class='fa-solid fa-xmark'></i> {{#lang}}notificationsNotSupported{{/lang}}</span>");ips.templates.set('core.notifications.checking'," <span class='i-color_soft'>{{#lang}}notificationsChecking{{/lang}}</span>");ips.templates.set('system.warningpenalty.nomodify'," <ul class='ipsList ipsList--bullets' id='elWarningPenalties'> {{#penalties}} <li>{{.}}</li> {{/penalties}} </ul>");ips.templates.set('core.edittags.default'," <div class='i-padding_3'> <span><i class='ipsLoadingIcon'></i> &nbsp;{{#lang}}loading{{/lang}}</span> </div>");ips.templates.set('core.onlineUser.linked',"<li data-memberId='{{memberId}}'> <a href='{{memberUrl}}' data-ipsHover data-ipsHover-target='{{memberHovercardUrl}}'>{{{formattedName}}}</a></li>");ips.templates.set('core.iconpicker.wrap',`
<form action="#" class="ipsIconPicker">
<div class="ipsIconPicker__tabs">
<div data-role="tabs">
@@ -613,7 +613,8 @@ $(elem||document).trigger('dialogContentLoaded',{elemID:elemID,dialogID:dialogID
deferred.reject();}).always(function(){});return deferred.promise();},_buildDialog=function(){if(dialogBuilt){return;}
var offset=0;$('body').append(ips.templates.render('core.dialog.main',{'class':options.className,title:options.title||'',id:dialogID,fixed:options.fixed,size:options.size,close:options.close,extraClass:options.extraClass}));dialog=$('#'+dialogID);dialog.css({zIndex:ips.ui.zIndex(),});_positionDialog();dialog.on('click','[data-action="dialogClose"]',function(e){$(dialog).trigger('closeDialog',{dialogID:dialogID,originalEvent:e});});$(dialog).on('closeDialog',function(e,data){hide();});if(options.close){dialog.on('mouseup',function(e){if(e.target==dialog.get(0)){modalEvent.up=true;}});dialog.on('mousedown',function(e){if(e.target==dialog.get(0)){modalEvent.down=true;}});dialog.on('click',function(e){if((!modalEvent.up||(dialog.get(0)==e.target&&modalEvent.down))&&dialog.find('> div').get(0)!=e.target&&!$.contains(dialog.find('> div').get(0),e.target)&&$.contains(document,e.target)){$(dialog).trigger('closeDialog',{dialogID:dialogID,originalEvent:e});}
modalEvent={up:false,down:false};});}
if(options.remoteVerify||options.remoteSubmit){dialog.find('.'+options.className+'_content').on('submit',function(e){_ajaxFormSubmit(e,$(this));});}
dialog.get(0)?.addEventListener('submit',async(e)=>{let target=e.target;while(target instanceof HTMLElement&&target!==dialog.get(0)){if(target instanceof HTMLFormElement&&target.matches('form[data-form-is-download]')){e.preventDefault();e.stopPropagation();e.stopImmediatePropagation();const formData=new FormData(target);await ips.utils.fileDownload.download({url:target.action,formData,blobName:target.dataset.formDownloadName||dialog.find('.ipsDialog_title').text()||'blob'});await hide();break;}
target=target.parentElement;}},{capture:true});if(options.remoteVerify||options.remoteSubmit){dialog.find('.'+options.className+'_content').on('submit',function(e){_ajaxFormSubmit(e,$(this));});}
dialogBuilt=true;},_positionDialog=function(){if(dialog&&!options.fixed){var win=$(window);var offset=win.scrollTop();dialog.css({top:offset+'px'});}},_buildModal=function(){modal=ips.ui.getModal();modal.css({zIndex:ips.ui.zIndex()});},_ajaxFormSubmit=function(e,form){if(!($(form)?.get?.(0)instanceof HTMLFormElement)){form=$(e.target)}
if(!($(form).get(0)instanceof HTMLFormElement)){return;}
if(form.attr('data-bypassValidation')&&!options.remoteSubmit){return;}
@@ -696,7 +697,8 @@ setTimeout(()=>fillTextarea())
setTimeout(()=>{try{$(elem).get(0).dispatchEvent(new CustomEvent("ips:editorAfterInit",{bubbles:true,cancelable:false,detail:{elem:$(elem).get(0),textArea,content:textArea.innerText,options:config,instance}}));}catch(e){e.meessage="Something went wrong dispatching ips:editorAfterInit event on the page:\n"+e.message;Debug.error(e);}
fillTextarea();},100)}
const onTransaction=config.onTransaction;config.onTransaction=_.debounce(function(...args){instance=instance||args[0]?.editor;fillTextarea();try{onTransaction?.call?.(this,...args);}catch(e){e.message="Something went wrong in an onTransaction call to the editor"+e.message;Debug.error(e);}},200,{leading:false,trailing:true});const onUpdate=config.onUpdate;config.onUpdate=function(...args){try{onUpdate?.call?.(this,...args);}catch(e){e.message="Failed to run the onUpdate event listener:\n"+e.message;Debug.error(e);}
instance=instance||args[0]?.editor;config.onTransaction?.cancel();setTimeout(()=>{let canceled=false;const event=new CustomEvent('ips:editorUpdated',{bubbles:true,cancelable:true,detail:{elem:$(elem).get(0),textArea,instance,}});throttledComposeEvent();const origStopProp=event.stopPropagation;const origStopImmProp=event.stopImmediatePropagation;event.stopPropagation=(function(){canceled=true;origStopProp();}).bind(event)
instance=instance||args[0]?.editor;console.log(instance,instance.getJSON())
config.onTransaction?.cancel();setTimeout(()=>{let canceled=false;const event=new CustomEvent('ips:editorUpdated',{bubbles:true,cancelable:true,detail:{elem:$(elem).get(0),textArea,instance,}});throttledComposeEvent();const origStopProp=event.stopPropagation;const origStopImmProp=event.stopImmediatePropagation;event.stopPropagation=(function(){canceled=true;origStopProp();}).bind(event)
event.stopImmediatePropagation=(function(){canceled=true;origStopImmProp();}).bind(event);$(elem).get(0).dispatchEvent(event)
if(canceled){return;}
fillTextarea()})}
@@ -755,9 +757,9 @@ minimized=true;}}
function insertQuotes(quotes){const _doInsert=function(){if(!instance)return;let toInsert="";for(const data of quotes){const html=data.quoteHtml.replace(/data-ipsLightbox(-group)?="([\w]+)?"/ig,'').trim();const quote=$(ips.templates.render('core.editor.quote',{citeurl:data.citeurl||'',citation:ips.utils.getCitation(data),contents:html}));for(let attr of['timestamp','userid','username','contentapp','contenttype','contentclass','contentid','contentcommentid']){if(data[attr]){quote.attr('data-ipsQuote-'+attr,data[attr]);}}
toInsert+=quote.get(0).outerHTML}
if(!toInsert){return;}
instance.chain().insertContent(toInsert+"<p></p>").focus().run();};if(minimized){unminimize(function(){try{instance.chain().setContent('').run();elem.find('[data-role="autoSaveRestoreMessage"]').hide();}catch(err){}
instance.chain().insertContent(toInsert+"<p></p>",{parseOptions:{preserveWhitespace:false}}).focus().run();};if(minimized){unminimize(function(){try{instance.chain().setContent('').run();elem.find('[data-role="autoSaveRestoreMessage"]').hide();}catch(err){}
_doInsert();});}else{_doInsert();}}
function insertHtml(html){instance.chain().insertContent(html).focus().run();}
function insertHtml(html){instance.chain().insertContent(html,{parseOptions:{preserveWhitespace:false}}).focus().run();}
function reset(){instance.chain().setContent(originalContent||'<p></p>').clearAutosave().run();$(elem).find('[data-ipsUploader]').trigger('resetUploader');if(options.minimized&&options.minimizeAfterReset){minimize();}
clearTextarea();}
function saveAndClearAutosave(){if(instance){instance?.commands.clearAutoSave?.()}else{ips.utils.db.remove('editorSave',options.autoSaveKey);}}
@@ -1382,12 +1384,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";ips.createModule('ips.ui.toggle',function(){var defaults={template:'core.forms.toggle'};var respond=function(elem,options){if(!$(elem).data('_toggle')){$(elem).data('_toggle',toggleObj(elem,_.defaults(options,defaults)));}};ips.ui.registerWidget('toggle',ips.ui.toggle,['template']);return{respond:respond};});var toggleObj=function(elem,options,e){var checkID=$(elem).identify().attr('id'),wrapper;var init=function(){var status=$(elem).prop('checked'),className=(status)?'ipsToggle_on':'ipsToggle_off';$(elem).after(ips.templates.render(options.template,{id:checkID+'_wrapper',status:!!status,className:className})).hide();wrapper=$('#'+checkID+'_wrapper');wrapper.on('click',function(e){if(!$(elem).is(':disabled')){if($(elem).prop('checked')){_doToggle('off');}else{_doToggle('on');}
$(elem).change();}
e.preventDefault();}).on('keypress',_keyPress);if($(elem).is('[data-ipstooltip]')){wrapper.attr('data-ipsTooltip','').attr('title',$(elem).attr('title'));$(document).trigger('contentChange',[wrapper]);}
if($(elem).is(':disabled')){wrapper.addClass('ipsToggle_disabled');}
$(elem).on('change',function(e){if($(elem).is(':checked')){_doToggle('on');}else{_doToggle('off');}});},_doToggle=function(type){if(type=='off'){wrapper.removeClass('ipsToggle_on').addClass('ipsToggle_off').attr('aria-checked',false);elem.get(0).checked=false;}else{wrapper.removeClass('ipsToggle_off').addClass('ipsToggle_on').attr('aria-checked',true);elem.get(0).checked=true;}},_keyPress=function(e){if(e.keyCode==ips.ui.key.SPACE||e.keyCode==ips.ui.key.ENTER){e.preventDefault();if($(elem).prop('checked')){_doToggle('off');}else{_doToggle('on');}
$(elem).change();}};init();return{init:init}};}(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();});}}}
@@ -1645,6 +1641,9 @@ init();return{set,get:get,getByType:getByType,remove:remove,removeByType:removeB
;(function($,_,undefined){"use strict";ips.createModule('ips.utils.events',function(){var manualEvent=function(element,ev){if(_.isObject(element)){element.each(function(){_fireEvent(this,ev);});}else{_fireEvent(element,ev);}},isTouchDevice=function(){return(('ontouchstart'in window)||(navigator.MaxTouchPoints>0)||(navigator.msMaxTouchPoints>0));},getVisibilityEvent=function(){if(!_.isUndefined(document.hidden)){return'visibilitychange';}else if(!_.isUndefined(document.mozHidden)){return'mozvisibilitychange';}else if(!_.isUndefined(document.msHidden)){return'msvisibilitychange';}else if(!_.isUndefined(document.webkitHidden)){return'webkitvisibilitychange';}
return'_unsupported';},getVisibilityProp=function(){if(!_.isUndefined(document.hidden)){return'hidden';}else if(!_.isUndefined(document.mozHidden)){return'mozHidden';}else if(!_.isUndefined(document.msHidden)){return'msHidden';}else if(!_.isUndefined(document.webkitHidden)){return'webkitHidden';}
return undefined;},_fireEvent=function(element,ev){if(document.createEvent){var evObj=document.createEvent('MouseEvents');evObj.initEvent(ev,true,false);element.dispatchEvent(evObj);}else if(document.createEventObject){var evObj=document.createEventObject();element.fireEvent('on'+evt,evObj);}};return{manualEvent:manualEvent,isTouchDevice:isTouchDevice,getVisibilityEvent:getVisibilityEvent,getVisibilityProp:getVisibilityProp};});}(jQuery,_));;
;(function($,_){"use strict";ips.createModule('ips.utils.fileDownload',function(){return{download({url,blobName,onProgress,formData,forceBlobName=false}){return new Promise((resolve,reject)=>{const xhr=new XMLHttpRequest();let blob;xhr.open(formData?'POST':'GET',url,true);xhr.responseType="arraybuffer";xhr.onload=function(e){blob=new Blob([this.response]);};xhr.onprogress=function(e){onProgress?.call(this,e);};xhr.onerror=function(e){reject(e);}
xhr.onloadend=function(e){try{const tempLink=document.createElement('a');let href=window.URL.createObjectURL(blob);tempLink.href=href;tempLink.setAttribute('hidden','');let contentDispositionName=this.getResponseHeader('content-disposition')?.match(/filename="(.+)"/i)?.[1];if(forceBlobName||!contentDispositionName){contentDispositionName=blobName;}else{contentDispositionName=decodeURIComponent(contentDispositionName);}
tempLink.setAttribute('download',contentDispositionName);document.body.appendChild(tempLink);tempLink.click();window.URL.revokeObjectURL(href);setTimeout(()=>{tempLink.remove();resolve();});}catch(e){reject(e);}};if(formData){xhr.send(formData);}else{xhr.send();}});}};});}(jQuery,_));;
;(function($,_,undefined){"use strict";ips.createModule('ips.utils.form',function(){var serializeAsObject=function(jQueryObj,customSerializers){var asArray=jQueryObj.serializeArray();var output={};_.each(asArray,function(val){var outValue=val.value;if(customSerializers&&!_.isUndefined(customSerializers[val.name])&&_.isFunction(customSerializers[val.name])){outValue=customSerializers[val.name](val.name,val.value);}
var keys=_splitFieldName(val.name);_addValueToKey(output,keys,outValue);});return output;};var _splitFieldName=function(name){var parts=name.split('[');parts=_.map(parts,function(part){return part.replace(/\]/g,'')});if(parts[0]===''){parts.shift();}
return parts;},_addValueToKey=function(output,keys,value){if(!_.isObject(output)){output={};}
@@ -1772,7 +1771,7 @@ this._highlightIndex=0;this._searchString=query;if(refresh&&this._visible){retur
resolve()})})}}
async search(){const results=this._currentTab==='emoji'?(await this.searchEmojis()):(await this.searchFontAwesome())
return(this._searchString!==''||this.panelMode)?{'Search Results':[...Object.values(results)].flat()}:results}
async searchEmojis(){const store=this._searchString.trim()?(await EmojiSearchTree.search(this._searchString,this.panelMode||this.anchor instanceof Element)):(await EmojiSearchTree.loadEmojiStore(this.panelMode||this.anchor instanceof Element));const out={};for(const category in store){out[category]=[...Object.keys(store[category].emojis)].map(unicode=>{const emojiData=store[category].emojis[unicode]
async searchEmojis(){const store=this._searchString.trim()?(await EmojiSearchTree.search(this._searchString,this.panelMode||this.anchor instanceof Element)):(await EmojiSearchTree.loadEmojiStore(this.panelMode||this.anchor instanceof Element||this.container instanceof Element));const out={};for(const category in store){out[category]=[...Object.keys(store[category].emojis)].map(unicode=>{const emojiData=store[category].emojis[unicode]
let hairStyle=this._emojiHairStyle||'';let skinTone=this._emojiSkinTone||'';return{raw:EmojiSearchTree.codePointsToString(emojiData.unicode,Number(skinTone)||null,Number(hairStyle)||null),skinTone,hairStyle,image:emojiData.image?.image2x||emojiData.image?.image,key:`${unicode}:${emojiData.skinTones ? skinTone : ''}:${emojiData.hairStyles ? hairStyle : ''}`,title:emojiData.description,type:'emoji'}})}
return out}
getEmojiTypes(){const stUnicode=EmojiSearchTree.emojiCodepointMap['270B'].unicode;const hsUnicode=EmojiSearchTree.emojiCodepointMap['1F9D1'].unicode;return[{type:'skin',current:this._emojiSkinTone||'',options:[['',''],...Object.entries(EmojiSearchTree.skinTones)].map(i=>({value:i[0].toString(),label:EmojiSearchTree.codePointsToString(stUnicode,i[0]?`${Number(i[0]).toString(16)}`:null,this._emojiHairStyle),title:i[1]}))},{type:'hair',current:this._emojiHairStyle||'',options:[['',''],...Object.entries(EmojiSearchTree.hairStyles)].map(i=>({value:i[0].toString(),label:EmojiSearchTree.codePointsToString(hsUnicode,this._emojiSkinTone,i[0]?`${Number(i[0]).toString(16)}`:null),title:i[1]}))}];}
+5 -5
View File
@@ -45,7 +45,7 @@ IPSCONTENT;
if ( isset($value['single_day']) AND $value['single_day'] ):
$return .= <<<IPSCONTENT
checked aria-checked='true'
checked
IPSCONTENT;
endif;
@@ -66,7 +66,7 @@ IPSCONTENT;
if ( isset($value['all_day']) AND $value['all_day'] ):
$return .= <<<IPSCONTENT
checked aria-checked='true'
checked
IPSCONTENT;
endif;
@@ -282,7 +282,7 @@ IPSCONTENT;
if ( !isset( $value['end_time'] ) OR !$value['end_time'] ):
$return .= <<<IPSCONTENT
checked aria-checked='true'
checked
IPSCONTENT;
endif;
@@ -313,7 +313,7 @@ IPSCONTENT;
if ( isset($value['event_repeat']) AND $value['event_repeat'] ):
$return .= <<<IPSCONTENT
checked aria-checked='true'
checked
IPSCONTENT;
endif;
@@ -525,7 +525,7 @@ IPSCONTENT;
if ( ( isset( $value['repeat_freq_on_' . $day['ical'] ] ) AND $value['repeat_freq_on_' . $day['ical'] ] ) ):
$return .= <<<IPSCONTENT
checked aria-checked='true'
checked
IPSCONTENT;
endif;
+1 -6
View File
@@ -2569,12 +2569,7 @@ IPSCONTENT;
if ( $unlimited === $value ):
$return .= <<<IPSCONTENT
checked aria-checked='true'
IPSCONTENT;
else:
$return .= <<<IPSCONTENT
aria-checked='false'
checked
IPSCONTENT;
endif;
+3 -3
View File
@@ -72,7 +72,7 @@ IPSCONTENT;
if ( $value ):
$return .= <<<IPSCONTENT
checked aria-checked='true'
checked
IPSCONTENT;
endif;
@@ -346,7 +346,7 @@ IPSCONTENT;
if ( (string) $value == (string) $k or ( isset( $userSuppliedInput ) and !\in_array( $value, array_keys( $options ) ) and $k == $userSuppliedInput ) ):
$return .= <<<IPSCONTENT
checked aria-checked='true'
checked
IPSCONTENT;
endif;
@@ -1004,7 +1004,7 @@ IPSCONTENT;
if ( $unlimited === $value ):
$return .= <<<IPSCONTENT
checked aria-checked='true'
checked
IPSCONTENT;
endif;
+1 -1
View File
@@ -385,7 +385,7 @@ IPSCONTENT;
if ( -1 === $value ):
$return .= <<<IPSCONTENT
checked aria-checked='true'
checked
IPSCONTENT;
endif;
+3 -3
View File
@@ -749,14 +749,14 @@ IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( \IPS\Session::i()->csrfKey, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
">
<div class='i-flex i-flex-wrap_wrap i-_flex_11 i-gap_2 i-margin-top_3'>
<div class='i-flex i-flex-wrap_wrap i-gap_2 i-margin-top_3'>
IPSCONTENT;
foreach ( $buttonMethods as $method ):
$return .= <<<IPSCONTENT
<div>
<div class="i-flex_11">
{$method->button()}
</div>
@@ -3447,7 +3447,7 @@ IPSCONTENT;
if ( $unlimited === $value ):
$return .= <<<IPSCONTENT
checked aria-checked='true'
checked
IPSCONTENT;
endif;
+91 -39
View File
@@ -6510,22 +6510,52 @@ IPSCONTENT;
<ul class="ipsColorSchemeChanger" data-controller="core.front.core.colorScheme">
<li data-ipstooltip title="Light mode">
<li data-ipstooltip title="
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'theme_light_mode', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
">
<button data-ips-prefers-color-scheme="light">
<i class="fa-regular fa-lightbulb"></i>
<span class="ipsInvisible">Light mode</span>
<span class="ipsInvisible">
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'theme_light_mode', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</span>
</button>
</li>
<li data-ipstooltip title="Dark mode">
<li data-ipstooltip title="
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'theme_dark_mode', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
">
<button data-ips-prefers-color-scheme="dark">
<i class="fa-regular fa-moon"></i>
<span class="ipsInvisible">Dark mode</span>
<span class="ipsInvisible">
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'theme_dark_mode', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</span>
</button>
</li>
<li data-ipstooltip title="System preference">
<li data-ipstooltip title="
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'theme_system', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
">
<button data-ips-prefers-color-scheme="system">
<i class="fa-solid fa-circle-half-stroke"></i>
<span class="ipsInvisible">System preference</span>
<span class="ipsInvisible">
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'theme_system', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</span>
</button>
</li>
</ul>
@@ -7237,23 +7267,23 @@ IPSCONTENT;
$theme = \IPS\Theme::i();
$return .= <<<IPSCONTENT
IPSCONTENT;
if ( \IPS\Member::loggedIn()->isEditingTheme() and $theme->edit_in_progress ):
$return .= <<<IPSCONTENT
<script>
if (window.self === window.top) {
window.location = '
<script>
if (window.self === window.top) {
window.location = '
IPSCONTENT;
$return .= \IPS\Http\Url::internal( "app=core&module=system&controller=themeeditor", null, "theme_editor", array(), 0 );
$return .= <<<IPSCONTENT
';
}
</script>
}
</script>
IPSCONTENT;
endif;
@@ -7681,7 +7711,7 @@ IPSCONTENT;
if ( !\in_array( 'ipsLayout_minimal', \IPS\Output::i()->bodyClasses ) ):
$return .= <<<IPSCONTENT
IPSCONTENT;
$return .= \IPS\Theme::i()->getTemplate( "global", "core" )->breadcrumb( 'mobile' );
@@ -8048,7 +8078,7 @@ IPSCONTENT;
if ( !\in_array( 'ipsLayout_minimalNoHome', \IPS\Output::i()->bodyClasses ) ):
$return .= <<<IPSCONTENT
IPSCONTENT;
$return .= \IPS\Theme::i()->getTemplate( "global", "core" )->breadcrumb( 'bottom' );
@@ -8093,16 +8123,16 @@ IPSCONTENT;
if ( !\in_array( 'ipsLayout_minimalNoHome', \IPS\Output::i()->bodyClasses ) ):
$return .= <<<IPSCONTENT
<div class="ipsFooter">
<aside class="ipsFooter__widgets ipsWidth">
<div class="ipsFooter">
<aside class="ipsFooter__widgets ipsWidth">
IPSCONTENT;
$return .= \IPS\Theme::i()->getTemplate( "global", "core" )->widgetContainer( 'globalfooter', 'vertical' );
$return .= <<<IPSCONTENT
</aside>
</aside>
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "core/front/global/globalTemplate", "footer:before", [ $title,$html,$location ] );
@@ -8113,17 +8143,17 @@ IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "core/front/global/globalTemplate", "footer:inside-start", [ $title,$html,$location ] );
$return .= <<<IPSCONTENT
<div class="ipsWidth">
<div class="ipsFooter__align">
<div class="ipsWidth">
<div class="ipsFooter__align">
IPSCONTENT;
$return .= \IPS\Theme::i()->getTemplate( "global", "core" )->footer( );
$return .= <<<IPSCONTENT
</div>
</div>
</div>
</div>
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "core/front/global/globalTemplate", "footer:inside-end", [ $title,$html,$location ] );
@@ -8134,7 +8164,7 @@ IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "core/front/global/globalTemplate", "footer:after", [ $title,$html,$location ] );
$return .= <<<IPSCONTENT
</div>
</div>
IPSCONTENT;
@@ -8167,14 +8197,14 @@ IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "core/front/global/globalTemplate", "layout:after", [ $title,$html,$location ] );
$return .= <<<IPSCONTENT
IPSCONTENT;
if ( $alert = \IPS\Output::i()->alert ):
$return .= <<<IPSCONTENT
{$alert}
{$alert}
IPSCONTENT;
endif;
@@ -9790,7 +9820,7 @@ $return .= <<<IPSCONTENT
</div>
</li>
<li class="ipsFieldRow ipsFieldRow--checkbox">
<input type="checkbox" name="remember_me" id="remember_me_checkbox_popup" value="1" checked aria-checked="true" class="ipsInput ipsInput--toggle">
<input type="checkbox" name="remember_me" id="remember_me_checkbox_popup" value="1" checked class="ipsInput ipsInput--toggle">
<div class="ipsFieldRow__content">
<label class="ipsFieldRow__label" for="remember_me_checkbox_popup">
IPSCONTENT;
@@ -14456,7 +14486,12 @@ IPSCONTENT;
$return .= <<<IPSCONTENT
<div>
<button class="ipsNavPanel__search" aria-controls="ipsSearchDialog" aria-expanded="false" data-ipscontrols type="button"><span class="ipsNavPanel__icon" aria-hidden="true"><i class="fa-ips fa-ips--nav-panel"></i></span>Search</button>
<button class="ipsNavPanel__search" aria-controls="ipsSearchDialog" aria-expanded="false" data-ipscontrols type="button"><span class="ipsNavPanel__icon" aria-hidden="true"><i class="fa-ips fa-ips--nav-panel"></i></span>
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'search', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</button>
</div>
</li>
@@ -15341,10 +15376,15 @@ IPSCONTENT;
if ( $text ):
$return .= <<<IPSCONTENT
<a href='
IPSCONTENT;
$return .= htmlspecialchars( \IPS\Http\Url::internal( "app=core&module=discover&controller=tag&tag={$encoded}", null, "tags", array(), 0 ), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', TRUE );
$url = \IPS\Content\Tag::buildTagUrl( $text );
$return .= <<<IPSCONTENT
<a href='
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $url, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
' title="
IPSCONTENT;
@@ -16661,31 +16701,43 @@ endif;
$return .= <<<IPSCONTENT
IPSCONTENT;
if ( \is_array( $reactions ) ):
$return .= <<<IPSCONTENT
IPSCONTENT;
if ( $showCount && $size == 'small' && \count( $reactions ) ):
$return .= <<<IPSCONTENT
<span>
<span>
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( \count( $reactions ), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
</span>
IPSCONTENT;
elseif ( $showCount ):
$return .= <<<IPSCONTENT
<p class='i-text-align_center'>
<p class='i-text-align_center'>
IPSCONTENT;
$pluralize = array( \count( $reactions ) ); $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'react_total', ENT_DISALLOWED, 'UTF-8', FALSE ), FALSE, array( 'pluralize' => $pluralize ) );
$return .= <<<IPSCONTENT
</p>
</p>
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
IPSCONTENT;
+11
View File
@@ -5870,6 +5870,12 @@ IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
IPSCONTENT;
if ( count(\IPS\core\Reports\Types::roots() )>0 ):
$return .= <<<IPSCONTENT
<section class='i-margin-top_3'>
<div class="ipsButtonBar ipsButtonBar--top">
<h2 class="ipsTitle i-font-size_1 i-flex_91 i-align-self_center i-padding-start_2">
@@ -5950,6 +5956,11 @@ $return .= <<<IPSCONTENT
</ul>
</div>
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
<div data-controller="core.front.core.commentsWrapper" data-tabsId='elTabsReport'>
<div class="ipsTabs" id="elTabsReport" data-ipsTabBar data-ipstabbar-contentarea="#elReportComments">
<ul role="tablist">
+3 -3
View File
@@ -3925,7 +3925,7 @@ $return .= <<<IPSCONTENT
</div>
</li>
<li class="ipsFieldRow ipsFieldRow--checkbox">
<input type="checkbox" name="remember_me" id="remember_me_checkbox" value="1" checked aria-checked="true" class="ipsInput ipsInput--toggle">
<input type="checkbox" name="remember_me" id="remember_me_checkbox" value="1" checked class="ipsInput ipsInput--toggle">
<div class="ipsFieldRow__content">
<label class="ipsFieldRow__label" for="remember_me_checkbox">
IPSCONTENT;
@@ -6916,14 +6916,14 @@ IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( \IPS\Session::i()->csrfKey, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
">
<div class="i-flex i-flex-wrap_wrap i-_flex_11 i-gap_2 i-margin-top_3">
<div class="i-flex i-flex-wrap_wrap i-gap_2 i-margin-top_3">
IPSCONTENT;
foreach ( $buttonMethods as $method ):
$return .= <<<IPSCONTENT
<div>
<div class="i-flex_11">
{$method->button()}
</div>
+1 -1
View File
@@ -369,7 +369,7 @@ IPSCONTENT;
$htmlsprintf = array($row->author()->link( $row->warningRef(), NULL, \IPS\IPS::classUsesTrait( $row, 'IPS\Content\Anonymous' ) ? $row->isAnonymous() : FALSE )); $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'byline', ENT_DISALLOWED, 'UTF-8', FALSE ), FALSE, array( 'htmlsprintf' => $htmlsprintf ) );
$return .= <<<IPSCONTENT
&middot;
IPSCONTENT;
$val = ( $row->__get( $row::$databaseColumnMap['date'] ) instanceof \IPS\DateTime ) ? $row->__get( $row::$databaseColumnMap['date'] ) : \IPS\DateTime::ts( $row->__get( $row::$databaseColumnMap['date'] ) );$return .= $val->html();
+49 -9
View File
@@ -1621,7 +1621,12 @@ $return .= <<<IPSCONTENT
<editor-tab-content>
<theme-setting data-setting='light__i-base-h' data-type='number'>
<label for='light__i-base-h__num'>Hue</label>
<label for='light__i-base-h__num'>
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'theme_editor_hue', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</label>
<input type='number' inputmode='numeric' data-range-output='light__i-base-h' id='light__i-base-h__num' value='
IPSCONTENT;
@@ -1636,7 +1641,12 @@ $return .= <<<IPSCONTENT
' min="0" max="360" data-on-input="changingRangeInput" data-on-change="settingHasBeenChanged">
</theme-setting>
<theme-setting data-setting='light__i-base-c' data-type='number'>
<label for='light__i-base-c__num'>Chroma</label>
<label for='light__i-base-c__num'>
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'theme_editor_chroma', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</label>
<input type='number' inputmode='numeric' data-range-output='light__i-base-c' id='light__i-base-c__num' value='
IPSCONTENT;
@@ -1651,7 +1661,12 @@ $return .= <<<IPSCONTENT
' min="0" max="100" data-on-input="changingRangeInput" data-on-change="settingHasBeenChanged">
</theme-setting>
<theme-setting data-setting='light__i-base-l' data-type='number'>
<label for='light__i-base-l__num'>Lightness</label>
<label for='light__i-base-l__num'>
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'theme_editor_lightness', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</label>
<input type='number' inputmode='numeric' data-range-output='light__i-base-l' id='light__i-base-l__num' value='
IPSCONTENT;
@@ -1667,7 +1682,12 @@ $return .= <<<IPSCONTENT
</theme-setting>
<theme-setting data-setting='dark__i-base-h' data-type='number'>
<label for='dark__i-base-h__num'>Hue</label>
<label for='dark__i-base-h__num'>
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'theme_editor_hue', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</label>
<input type='number' inputmode='numeric' data-range-output='dark__i-base-h' id='dark__i-base-h__num' value='
IPSCONTENT;
@@ -1682,7 +1702,12 @@ $return .= <<<IPSCONTENT
' min="0" max="360" data-on-input="changingRangeInput" data-on-change="settingHasBeenChanged">
</theme-setting>
<theme-setting data-setting='dark__i-base-c' data-type='number'>
<label for='dark__i-base-c__num'>Chroma</label>
<label for='dark__i-base-c__num'>
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'theme_editor_chroma', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</label>
<input type='number' inputmode='numeric' data-range-output='dark__i-base-c' id='dark__i-base-c__num' value='
IPSCONTENT;
@@ -1697,7 +1722,12 @@ $return .= <<<IPSCONTENT
' min="0" max="100" data-on-input="changingRangeInput" data-on-change="settingHasBeenChanged">
</theme-setting>
<theme-setting data-setting='dark__i-base-l' data-type='number'>
<label for='dark__i-base-l__num'>Lightness</label>
<label for='dark__i-base-l__num'>
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'theme_editor_lightness', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</label>
<input type='number' inputmode='numeric' data-range-output='dark__i-base-l' id='dark__i-base-l__num' value='
IPSCONTENT;
@@ -1746,11 +1776,21 @@ $return .= <<<IPSCONTENT
</div>
<button type='button' data-revert-custom-css hidden data-on-click="revertCustomCSS">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9L0 168c0 13.3 10.7 24 24 24l110.1 0c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24l0 104c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65 0-94.1c0-13.3-10.7-24-24-24z"/></svg>
<span>Revert</span>
<span>
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'theme_editor_custom_css_revert', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</span>
</button>
<button type='button' aria-controls="dialog__customCSS" aria-expanded="false" data-ipscontrols>
<span>Preview</span>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M502.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-128-128c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L402.7 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l370.7 0-73.4 73.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l128-128z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM369 209L241 337c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L335 175c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z"/></svg>
<span>
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'theme_editor_custom_css_done', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</span>
</button>
</header>
<ips-code-editor>
+12 -17
View File
@@ -891,7 +891,7 @@ IPSCONTENT;
if ( $value === NULL ):
$return .= <<<IPSCONTENT
checked aria-checked='true'
checked
IPSCONTENT;
endif;
@@ -1569,12 +1569,7 @@ IPSCONTENT;
if ( $unlimited === $value ):
$return .= <<<IPSCONTENT
checked aria-checked='true'
IPSCONTENT;
else:
$return .= <<<IPSCONTENT
aria-checked='false'
checked
IPSCONTENT;
endif;
@@ -2256,7 +2251,7 @@ IPSCONTENT;
if ( ! $value ):
$return .= <<<IPSCONTENT
checked aria-checked='true'
checked
IPSCONTENT;
endif;
@@ -2538,7 +2533,7 @@ IPSCONTENT;
if ( $unlimited === $value ):
$return .= <<<IPSCONTENT
checked aria-checked='true'
checked
IPSCONTENT;
endif;
@@ -2669,7 +2664,7 @@ IPSCONTENT;
if ( $unlimitedChecked ):
$return .= <<<IPSCONTENT
checked aria-checked='true'
checked
IPSCONTENT;
endif;
@@ -5424,7 +5419,7 @@ IPSCONTENT;
if ( $unlimited == $valueNumber ):
$return .= <<<IPSCONTENT
checked aria-checked='true'
checked
IPSCONTENT;
@@ -6052,7 +6047,7 @@ IPSCONTENT;
if ( $checkAlls[ $header ] ):
$return .= <<<IPSCONTENT
checked aria-checked='true'
checked
IPSCONTENT;
endif;
@@ -7524,7 +7519,7 @@ IPSCONTENT;
if ( $unlimited === $value ):
$return .= <<<IPSCONTENT
checked aria-checked='true'
checked
IPSCONTENT;
endif;
@@ -8933,7 +8928,7 @@ IPSCONTENT;
if ( $value === NULL ):
$return .= <<<IPSCONTENT
checked aria-checked='true'
checked
IPSCONTENT;
endif;
@@ -9237,7 +9232,7 @@ IPSCONTENT;
if ( $value === NULL ):
$return .= <<<IPSCONTENT
checked aria-checked='true'
checked
IPSCONTENT;
endif;
@@ -10982,7 +10977,7 @@ $return .= <<<IPSCONTENT
IPSCONTENT;
$extension = mb_strtolower( mb_substr( $screenshot->filename, mb_strrpos( $screenshot->filename, '.' ) + 1 ) );
$extension = mb_strtolower( mb_substr( $screenshot->originalFilename, mb_strrpos( $screenshot->originalFilename, '.' ) + 1 ) );
$return .= <<<IPSCONTENT
@@ -11361,7 +11356,7 @@ IPSCONTENT;
if ( $unlimited == array( $width, $height ) ):
$return .= <<<IPSCONTENT
checked aria-checked='true'
checked
IPSCONTENT;
endif;
+51 -1
View File
@@ -6,7 +6,7 @@ class class_downloads_admin_nexus extends \IPS\Theme\Template
$return .= <<<IPSCONTENT
<div class='i-background_2 i-padding_3'>
<div class='i-background_2 i-padding_3 i-margin-bottom_2 i-border-radius_box'>
<div class='ipsData__item'>
<a href="$file->url()" class='ipsData__image'>
@@ -221,6 +221,56 @@ $return .= <<<IPSCONTENT
</div>
</div>
</div>
IPSCONTENT;
return $return;
}
function itemResultTemplate( $item ) {
$return = '';
$return .= <<<IPSCONTENT
<div data-itemid="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $item->id, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
" data-role='contentItemRow'>
<strong>
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $item->mapped('title'), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
</strong>
IPSCONTENT;
if ( $item->container() ):
$return .= <<<IPSCONTENT
<em>
IPSCONTENT;
$sprintf = array($item->container()->_title); $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'item_selector_added_to_container', ENT_DISALLOWED, 'UTF-8', FALSE ), FALSE, array( 'sprintf' => $sprintf ) );
$return .= <<<IPSCONTENT
</em>
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
<br>
<span class='i-color_soft'>
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $item->author()->name, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
</span> &middot;
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $item->price(), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
</div>
IPSCONTENT;
return $return;
+44 -128
View File
@@ -1003,136 +1003,61 @@ IPSCONTENT;
$return = '';
$return .= <<<IPSCONTENT
<div class='i-background_2 i-padding_3'>
IPSCONTENT;
if ( $file->container()->bitoptions['topic_screenshot'] and $file->primary_screenshot ):
$return .= <<<IPSCONTENT
<div class='ipsColumns'>
<div class='ipsColumns__secondary i-basis_200 i-text-align_center'>
<a href="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $file->url(), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
">
IPSCONTENT;
$image = ( $file->primary_screenshot instanceof \IPS\File ) ? (string) $file->primary_screenshot->url : $file->primary_screenshot;
$return .= <<<IPSCONTENT
<img src='
IPSCONTENT;
$return .= \IPS\File::get( "downloads_Screenshots", $image )->url;
$return .= <<<IPSCONTENT
' alt='
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $file->name, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
' loading='lazy'>
</a>
<br><br>
<a href="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $file->url(), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
" class='ipsButton ipsButton--primary ipsButton--wide ipsButton--small'>
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'view_file', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</a>
</div>
<div class='ipsColumns__primary'>
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
<h3 class='ipsTitle ipsTitle--h3'>
<h3>
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $file->name, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
</h3>
IPSCONTENT;
if ( !$file->container()->bitoptions['topic_screenshot'] or !$file->primary_screenshot ):
if ( $file->desc ):
$return .= <<<IPSCONTENT
<a href="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $file->url(), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
" class='ipsButton ipsButton--primary ipsButton--wide ipsButton--small'>
IPSCONTENT;
{$file->desc}
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'view_file', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</a>
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
<hr class='ipsHr'>
<div class='ipsRichText '>
{$file->desc}
</div>
<hr class='ipsHr'>
<i-data>
<ul class='ipsData ipsData--table ipsData--file-submitter'>
<li class='ipsData__item'>
<div class='i-basis_160'>
<strong>
<div class="ipsRichTextBox ipsRichTextBox--alwaysopen">
<div class="ipsRichTextBox__title">
<p>
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'file_information', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</p>
</div>
<p>
<strong><span data-ips-font-size="90">
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'file_submitter', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</strong>
</div>
<div class='ipsData__main'>
{$file->author()->link( NULL, NULL, $file->isAnonymous() )}
</div>
</li>
<li class='ipsData__item'>
<div class='i-basis_160'>
<strong>
</span></strong> {$file->author()->link( null, null, $file->isAnonymous() )}
</p>
<p>
<strong><span data-ips-font-size="90">
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'file_submitted', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</strong>
</div>
<div class='ipsData__main'>
</span></strong>
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( \IPS\DateTime::ts( $file->submitted )->localeDate(), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
</div>
</li>
<li class='ipsData__item'>
<div class='i-basis_160'>
<strong>
</p>
<p>
<strong><span data-ips-font-size="90">
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'file_cat', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</strong>
</div>
<div class='ipsData__main'>
<a href="
</span></strong> <a href="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $file->container()->url(), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
@@ -1141,50 +1066,41 @@ IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $file->container()->_title, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
</a>
</div>
</li>
</p>
IPSCONTENT;
foreach ( $file->customFields( TRUE ) as $k => $v ):
$return .= <<<IPSCONTENT
<li class='ipsData__item'>
<div class='i-basis_160'>
<strong>
<p>
<strong><span data-ips-font-size="90">
IPSCONTENT;
$val = "downloads_{$k}"; $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( $val, ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</strong>
</div>
<div class='ipsData__main'>
{$v}
</div>
</li>
</span></strong> {$v}
</p>
IPSCONTENT;
endforeach;
$return .= <<<IPSCONTENT
</ul>
</i-data>
IPSCONTENT;
if ( $file->container()->bitoptions['topic_screenshot'] and $file->primary_screenshot ):
$return .= <<<IPSCONTENT
</div>
</div>
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
</div>
<p>
<a href='
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $file->url(), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
'>
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'view_file', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</a>
</p>
IPSCONTENT;
return $return;
+22 -2
View File
@@ -3612,7 +3612,17 @@ $return .= <<<IPSCONTENT
</article>
<aside class="ipsColumns__secondary i-basis_380">
<div class="i-padding_3">
<ul class="ipsButtons i-margin-bottom_4">
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/view/view", "downloadButtonList:before", [ $file,$commentsAndReviews,$versionData,$previousVersions,$next,$prev,$cfields ] );
$return .= <<<IPSCONTENT
<ul class="ipsButtons i-margin-bottom_4" data-ips-hook="downloadButtonList">
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/view/view", "downloadButtonList:inside-start", [ $file,$commentsAndReviews,$versionData,$previousVersions,$next,$prev,$cfields ] );
$return .= <<<IPSCONTENT
IPSCONTENT;
@@ -3867,7 +3877,17 @@ IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
</ul>
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/view/view", "downloadButtonList:inside-end", [ $file,$commentsAndReviews,$versionData,$previousVersions,$next,$prev,$cfields ] );
$return .= <<<IPSCONTENT
</ul>
IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "downloads/front/view/view", "downloadButtonList:after", [ $file,$commentsAndReviews,$versionData,$previousVersions,$next,$prev,$cfields ] );
$return .= <<<IPSCONTENT
<h2 class="ipsTitle ipsTitle--h4 ipsTitle--margin">
IPSCONTENT;
+2 -30
View File
@@ -2145,6 +2145,8 @@ IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
</div>
<div class="ipsData__extra">
<ul class="ipsData__stats">
IPSCONTENT;
@@ -2495,9 +2497,6 @@ $return .= <<<IPSCONTENT
</small>
</div>
</div>
<ul class="ipsData__stats">
<li>
</ul>
</li>
IPSCONTENT;
@@ -2505,33 +2504,6 @@ IPSCONTENT;
endforeach;
$return .= <<<IPSCONTENT
<li class="ipsData__item ipsData__item--forum-feed-view-all">
<a href="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $forum->url(), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
" class="ipsLinkPanel" aria-hidden="true" tabindex="-1"><span>
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'view_all_topics', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</span></a>
<div class="ipsData__content">
<div class="ipsData__main">
<span class="ipsCategoryWithFeed__small i-color_hard">
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'view_all_topics', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
<i class="fa-solid fa-arrow-right-long i-margin-start_icon i-font-size_-2"></i></span>
<span class="ipsCategoryWithFeed__large">
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $forum->_title, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
<i class="fa-solid fa-arrow-right-long i-margin-start_icon i-font-size_-2"></i></span>
</div>
</div>
</li>
IPSCONTENT;
+1 -1
View File
@@ -4445,7 +4445,7 @@ $return .= <<<IPSCONTENT
IPSCONTENT;
if ( ( $postCount == 1 and ( $topic->showSummaryOnDesktop() === 'post' OR $topic->showSummaryOnMobile() ) ) ):
if ( ( !$featureFirstPost and $postCount == 1 and ( $topic->showSummaryOnDesktop() === 'post' OR $topic->showSummaryOnMobile() ) ) ):
$return .= <<<IPSCONTENT
+2 -2
View File
@@ -6,7 +6,7 @@ class class_nexus_admin_invoices extends \IPS\Theme\Template
$return .= <<<IPSCONTENT
<div class="i-padding_3">
<ul class="ipsButtons ipsButtons--end ipsButtons--generate-invoice">
<ul class="ipsButtons ipsButtons--end ipsButtons--generate-invoice i-margin-bottom_2">
<li>
<a href="#el_addItem_menu" class="ipsButton ipsButton--secondary ipsButton--small" data-ipsMenu id='el_addItem'><i class="fa-solid fa-plus"></i>
IPSCONTENT;
@@ -14,7 +14,7 @@ IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'invoice_add_item', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
<i class="fa-solid fa-caret-down"></i></a>
<div id='el_addItem_menu' class='ipsMenu ipsMenu_narrow ipsHide'>
<div id='el_addItem_menu' class='ipsMenu ipsHide'>
<ul>
IPSCONTENT;
+3 -3
View File
@@ -1489,7 +1489,7 @@ IPSCONTENT;
if ( $value === '*' ):
$return .= <<<IPSCONTENT
checked aria-checked='true'
checked
IPSCONTENT;
endif;
@@ -1650,7 +1650,7 @@ IPSCONTENT;
if ( $value === NULL ):
$return .= <<<IPSCONTENT
checked aria-checked="true"
checked
IPSCONTENT;
endif;
@@ -2083,7 +2083,7 @@ IPSCONTENT;
if ( ( $value or $options['lockPrice'] ) and !$term ):
$return .= <<<IPSCONTENT
checked aria-checked="true"
checked
IPSCONTENT;
endif;