diff --git a/administrator/language/en-GB/en-GB.plg_system_helixultimate.ini b/administrator/language/en-GB/en-GB.plg_system_helixultimate.ini index 558c6208..3c9d7c34 100644 --- a/administrator/language/en-GB/en-GB.plg_system_helixultimate.ini +++ b/administrator/language/en-GB/en-GB.plg_system_helixultimate.ini @@ -88,6 +88,8 @@ HELIX_ULTIMATE_LOADER_CIRCLE_TWO="Two Circles" HELIX_ULTIMATE_LOADER_CLOCK="Clock" HELIX_ULTIMATE_LOADER_LOGO="Logo" HELIX_ULTIMATE_ENABLE_BOXED_LAYOUT="Boxed Layout" +HELIX_ULTIMATE_CONTAINER_MAX_WIDTH="Container Max Width (px)" +HELIX_ULTIMATE_CONTAINER_MAX_WIDTH_DESC="Set the max width of the container. (Not applicable for Tablet & Mobile devices)
If you don't want to set the maximum width, leave the field blank" HELIX_ULTIMATE_BODY_BACKGROUND_IMAGE="Background Image" HELIX_ULTIMATE_COPYRIGHT="Copyright" HELIX_ULTIMATE_GO_TO_TOP="Go to Top" @@ -145,6 +147,7 @@ HELIX_ULTIMATE_PAGE_TITLE_HEADING="Heading H1 or H2" HELIX_ULTIMATE_PAGE_TITLE_HEADING_DESC="Set the page title to be either an <h1> or <h2> element." HELIX_ULTIMATE_SELECT_OFFCANVAS="Select Off-canvas" HELIX_ULTIMATE_SELECT_OFFCANVAS_DESC="Select an off-canvas for mobile menu." +HELIX_ULTIMATE_FEATURED="Featured" ;Page Title HELIX_ULTIMATE_PAGE_TITLE="Page Title" @@ -180,6 +183,22 @@ HELIX_ULTIMATE_BLOG_POST_FORMAT_VIDEO_DESCRIPTION="Add YouTube or Vimeo full URL HELIX_ULTIMATE_IMAGE_LARGE_CROP_QUALITY="Quality" HELIX_ULTIMATE_IMAGE_LARGE_CROP_QUALITY_DESC="Set image quality for better compressions. Applicable for JPG images only." HELIX_ULTIMATE_BLOG_DETAILS_REMOVE_CONTAINER="Full-width Layout" +HELIX_ULTIMATE_BLOG_LIST_TYPE="List Type" +HELIX_ULTIMATE_BLOG_LIST_TYPE_DEFAULT="Default" +HELIX_ULTIMATE_BLOG_LIST_TYPE_MASONRY="Masonry" +HELIX_ULTIMATE_BLOG_READ_TIME="Read Time" +HELIX_ULTIMATE_BLOG_READ_TIME_DESC="Display estimated article Read Time in minutes" + +HELIX_ULTIMATE_BLOG_LIST_DISABLE_MODULE="Disable Modules" +HELIX_ULTIMATE_BLOG_LIST_DISABLE_MODULE_DESC="This option will disable all modules from the selected field from article list page." +HELIX_ULTIMATE_BLOG_LIST_DISABLE_MODULE_POSITIONS="Disable Positions" +HELIX_ULTIMATE_BLOG_LIST_DISABLE_MODULE_POSITIONS_DESC="Select which module positions you want to disable" +HELIX_ULTIMATE_BLOG_DETAILS_DISABLE_MODULE="Disable Modules" +HELIX_ULTIMATE_BLOG_DETAILS_DISABLE_MODULE_DESC="This option will disable all modules from the selected filed from article details page." +HELIX_ULTIMATE_BLOG_DETAILS_DISABLE_MODULE_POSITIONS="Disable Positions" +HELIX_ULTIMATE_BLOG_DETAILS_DISABLE_MODULE_POSITIONS_DESC="Select which module positions you want to disable" +HELIX_ULTIMATE_BLOG_MINUTE_READ="minute read" +HELIX_ULTIMATE_BLOG_MINUTES_READ="minutes read" ;Layout HELIX_ULTIMATE_SECTION_TITLE="Section" @@ -348,4 +367,7 @@ COM_FINDER_ADVANCED_TIPS="

Entering this and that into the se HELIX_ULTIMATE_HEADER_STICKY_OFFSET="Sticky Offset" HELIX_ULTIMATE_HEADER_STICKY_OFFSET_DESC="After which scroll offset the header being sticky." HELIX_ULTIMATE_BLOG_IMAGE_ALT_TEXT="Image Alt Text" -HELIX_ULTIMATE_BLOG_IMAGE_ALT_TEXT_DESCRIPTION="This field isn't required. So, if you leave this field then alt text will get from title." \ No newline at end of file +HELIX_ULTIMATE_BLOG_IMAGE_ALT_TEXT_DESCRIPTION="This field isn't required. So, if you leave this field then alt text will get from title." + +HELIX_ULTIMATE_STICKY_POSITION="Position Sticky" +HELIX_ULTIMATE_STICKY_POSITION_DESC="The viewport doesn’t change when the window is scrolled, so a fixed positioned element will stay right/left where it is when the page is scrolled" \ No newline at end of file diff --git a/gulpfile.js b/gulpfile.js index 43c35995..81958aab 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -14,9 +14,9 @@ const config = { srcPath: path.resolve(__dirname), buildPath: path.resolve(__dirname, './package/'), qsPath: path.resolve(__dirname, './package/helix_ultimate_quickstart/'), - qsPackageName: 'helixultimate_quickstart_j4_2.0.18.zip', - packageName: 'helixultimate_template_v2.0.18.zip', - pluginPackageName: 'plg_system_helixultimate_v2.0.18.zip', + qsPackageName: 'helixultimate_quickstart_j4_2.1.0.zip', + packageName: 'helixultimate_template_v2.1.0.zip', + pluginPackageName: 'plg_system_helixultimate_v2.1.0.zip', templateFileExtensions: 'xml, json, php, png, scss, js, ico, svg, jpg, eot, ttf, woff, woff2, otf, css, html', pluginFileExtensions: function () { return this.templateFileExtensions + ', ini'; diff --git a/language/en-GB/en-GB.tpl_shaper_helixultimate.ini b/language/en-GB/en-GB.tpl_shaper_helixultimate.ini index 66d43a58..d2b98eaf 100644 --- a/language/en-GB/en-GB.tpl_shaper_helixultimate.ini +++ b/language/en-GB/en-GB.tpl_shaper_helixultimate.ini @@ -243,8 +243,6 @@ HELIX_ULTIMATE_BLOG_SOCIAL_SHARE_LIST_DESC="Add or remove social share button as HELIX_ULTIMATE_BLOG_SOCIAL_SHARE_FACEBOOK="Facebook" HELIX_ULTIMATE_BLOG_SOCIAL_SHARE_TWITTER="X (formerly Twitter)" HELIX_ULTIMATE_BLOG_SOCIAL_SHARE_LINKEDIN="Linkedin" -HELIX_ULTIMATE_BLOG_DETAILS_DISABLE_MODULE="Disable Modules" -HELIX_ULTIMATE_BLOG_DETAILS_DISABLE_MODULE_DESC="This option will disable all modules from the left or right sidebar from article details page." HELIX_ULTIMATE_BLOG_DETAILS_READING_TIME_PROGRESS="Reading Time Progress Bar" HELIX_ULTIMATE_BLOG_DETAILS_READING_TIME_PROGRESS_DESC="Show reading progress bar in blog details page." HELIX_ULTIMATE_BLOG_DETAILS_READING_TIME_PROGRESS_BG_COLOR="Background Color" diff --git a/plugins/system/helixultimate/assets/css/admin/blog-options.css b/plugins/system/helixultimate/assets/css/admin/blog-options.css index d43ee726..4dbfdfe3 100644 --- a/plugins/system/helixultimate/assets/css/admin/blog-options.css +++ b/plugins/system/helixultimate/assets/css/admin/blog-options.css @@ -10,13 +10,13 @@ } .hu-image-upload-wrapper { - width: 200px; + width: 290px; display: block; margin-bottom: 20px; } .hu-image-upload-wrapper:not(.loading) { - height: 200px; + max-height: 290px; background: #f5f5f5; padding: 5px; border: 1px solid #e5e5e5; diff --git a/plugins/system/helixultimate/assets/css/admin/helix-ultimate.css b/plugins/system/helixultimate/assets/css/admin/helix-ultimate.css index 8f8b8c95..f78fe786 100644 --- a/plugins/system/helixultimate/assets/css/admin/helix-ultimate.css +++ b/plugins/system/helixultimate/assets/css/admin/helix-ultimate.css @@ -2144,7 +2144,6 @@ select:focus::-ms-value { .hu-topbar .topbar-left { display: flex; align-items: center; - min-width: 400px; } .hu-topbar .topbar-middle { @@ -2152,7 +2151,6 @@ select:focus::-ms-value { align-items: center; text-align: center; justify-content: center; - min-width: 400px; transition: all 0.3s ease; } @@ -2209,7 +2207,6 @@ select:focus::-ms-value { max-width: 450px; border-left: 1px solid #f1f1f1; margin-right: 20px; - min-width: 400px; } .hu-topbar .topbar-right .hu-btn:not(:last-child) { @@ -2242,32 +2239,6 @@ select:focus::-ms-value { fill: rgb(var(--primary)); } -@media (max-width: 576px) { - .hu-topbar .topbar-middle { - display: none; - } - .hu-topbar .topbar-right .helix-topbar-save-text { - display: none; - } - - .hu-btn svg { - margin-right: 0 !important; - } - - .hu-topbar .topbar-right .helix-topbar-show-preview-text { - display: none; - } -} - -@media (max-width: 768px) { - .hu-topbar .topbar-middle { - display: none; - } - .hu-topbar .topbar-right { - border-left: 0; - } -} - .hu-edit-panel { background: #eff4fb; width: 420px; @@ -3671,3 +3642,54 @@ input[type='color'] { .hu-no-gutter-bottom .hu-inline-group { margin-bottom: 0px !important; } + +/* Media css */ +@media (max-width: 768px) { + .hu-topbar .topbar-left { + min-width: auto; + } + .hu-topbar .topbar-middle { + display: none; + min-width: auto; + } + .hu-topbar .topbar-right { + border-left: 0; + min-width: auto; + } +} +@media (max-width: 576px) { + .hu-topbar .topbar-left { + min-width: auto; + } + .hu-topbar .topbar-middle { + display: none; + min-width: auto; + } + .hu-topbar .topbar-right { + min-width: auto; + } + .hu-topbar .topbar-right .helix-topbar-save-text { + display: none; + } + + .hu-btn svg { + margin-right: 0 !important; + } + + .hu-topbar .topbar-right .helix-topbar-show-preview-text { + display: none; + } + + #hu-options-panel { + width: 44px; + } + .hu-fieldset-header .hu-option-title { + display: none; + } + .hu-panel-position-left .hu-fieldset-contents { + top: 12%; + right: 0; + width: 100%; + position: fixed; + } +} \ No newline at end of file diff --git a/plugins/system/helixultimate/assets/js/admin/layout.js b/plugins/system/helixultimate/assets/js/admin/layout.js index a98925b7..3895aa58 100644 --- a/plugins/system/helixultimate/assets/js/admin/layout.js +++ b/plugins/system/helixultimate/assets/js/admin/layout.js @@ -12,7 +12,6 @@ jQuery(function ($) { event.stopPropagation(); $(this).closest('li').find('.hu-column-list').slideToggle(300); - console.log('click fired'); }); /** Close the hu-column-list on select. */ @@ -32,9 +31,7 @@ jQuery(function ($) { opacity: 1, tolerance: 'pointer', start(_, ui) { - $('.hu-layout-section [data-hu-layout-row]') - .find('.ui-state-highlight') - .addClass($(ui.item).attr('class')); + $('.hu-layout-section [data-hu-layout-row]').find('.ui-state-highlight').addClass($(ui.item).attr('class')); $('.hu-layout-section [data-hu-layout-row]') .find('.ui-state-highlight') .css('height', $(ui.item).outerHeight()); @@ -82,7 +79,6 @@ jQuery(function ($) { // setInputValue Callback Function $.fn.setInputValue = function (options) { - console.log(options); if (this.attr('type') == 'checkbox') { if (options.field == '1') { this.attr('checked', 'checked'); @@ -124,16 +120,6 @@ jQuery(function ($) { // color picker initialize $.fn.initColorPicker = function () { Joomla.initColorPicker(this.find('.minicolors')); - // this.find('.minicolors').each(function () { - // $(this).minicolors({ - // control: 'hue', - // position: 'bottom', - // theme: 'bootstrap', - // keywords: 'transparent, initial, inherit', - // letterCase: 'uppercase', - // opacity: true, - // }); - // }); }; // Open Row settings Modal @@ -213,10 +199,26 @@ jQuery(function ($) { $clone = $('.hu-options-modal-inner').html($clone.removeAttr('id').addClass('hu-options-modal-content')); + var removeSticky = true; + $clone.find('.hu-input').each(function () { var $that = $(this), + attrName = $that.data('attrname'), attrValue = $parent.data($that.data('attrname')); $that.setInputValue({ field: attrValue }); + + if ((attrName == 'name' && attrValue == 'right') || (attrName == 'name' && attrValue == 'left')) { + removeSticky = false; + } + + if (removeSticky) { + if (attrName == 'sticky_position') { + if ($that.prop('checked')) { + $that.prop('checked', false); + } + $that.closest('.control-group').hide(); + } + } }); $clone.find('select.hu-input').each(function () { @@ -224,6 +226,19 @@ jQuery(function ($) { }); $clone.initColorPicker(); + + var $chosenSelect = $('select[data-attrname="name"]').chosen(); + // Add change event listener to the Chosen select + $chosenSelect.on('change', function () { + var selectedValue = $(this).val(); + + if (selectedValue == 'right' || selectedValue == 'left') { + $(this).closest('.control-group').next().show(); + } else { + $(this).closest('.control-group').next().hide(); + $(this).closest('.control-group').next().find('.hu-input-sticky_position').prop('checked', false); + } + }); }); $('.hu-input-column_type').change(function (event) { @@ -425,7 +440,7 @@ jQuery(function ($) { Joomla.HelixToaster.success( 'Grid pattern updated to ' + newLayout.join('+') + '', - 'Layout Settings' + 'Layout Settings', ); updateLayoutField(); }); @@ -525,7 +540,7 @@ jQuery(function ($) { Joomla.HelixToaster.success( 'Grid pattern updated to ' + newLayout.join('+') + '', - 'Layout Settings' + 'Layout Settings', ); updateLayoutField(); diff --git a/plugins/system/helixultimate/assets/js/sticky-sidebar.js b/plugins/system/helixultimate/assets/js/sticky-sidebar.js new file mode 100644 index 00000000..1af36a78 --- /dev/null +++ b/plugins/system/helixultimate/assets/js/sticky-sidebar.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e(t.StickySidebar={})}(this,function(t){"use strict";var e,i,n,s="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},o=((e=function(t,e){var i,n;(n=function(t){Object.defineProperty(t,"__esModule",{value:!0});var e,i,n=function(){function t(t,e){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};if(function t(e,i){if(!(e instanceof i))throw TypeError("Cannot call a class as a function")}(this,t),this.options=t.extend(i,s),this.sidebar="string"==typeof e?document.querySelector(e):e,void 0===this.sidebar)throw Error("There is no specific sidebar element.");this.sidebarInner=!1,this.container=this.sidebar.parentElement,this.affixedType="STATIC",this.direction="down",this.support={transform:!1,transform3d:!1},this._initialized=!1,this._reStyle=!1,this._breakpoint=!1,this.dimensions={translateY:0,maxTranslateY:0,topSpacing:0,lastTopSpacing:0,bottomSpacing:0,lastBottomSpacing:0,sidebarHeight:0,sidebarWidth:0,containerTop:0,containerHeight:0,viewportHeight:0,viewportTop:0,lastViewportTop:0},["handleEvent"].forEach(function(t){n[t]=n[t].bind(n)}),this.initialize()}return n(t,[{key:"initialize",value:function t(){var e=this;if(this._setSupportFeatures(),this.options.innerWrapperSelector&&(this.sidebarInner=this.sidebar.querySelector(this.options.innerWrapperSelector),null===this.sidebarInner&&(this.sidebarInner=!1)),!this.sidebarInner){var i=document.createElement("div");for(i.setAttribute("class","inner-wrapper-sticky"),this.sidebar.appendChild(i);this.sidebar.firstChild!=i;)i.appendChild(this.sidebar.firstChild);this.sidebarInner=this.sidebar.querySelector(".inner-wrapper-sticky")}if(this.options.containerSelector){var n=document.querySelectorAll(this.options.containerSelector);if((n=Array.prototype.slice.call(n)).forEach(function(t,i){t.contains(e.sidebar)&&(e.container=t)}),!n.length)throw Error("The container does not contains on the sidebar.")}"function"!=typeof this.options.topSpacing&&(this.options.topSpacing=parseInt(this.options.topSpacing)||0),"function"!=typeof this.options.bottomSpacing&&(this.options.bottomSpacing=parseInt(this.options.bottomSpacing)||0),this._widthBreakpoint(),this.calcDimensions(),this.stickyPosition(),this.bindEvents(),this._initialized=!0}},{key:"bindEvents",value:function t(){window.addEventListener("resize",this,{passive:!0,capture:!1}),window.addEventListener("scroll",this,{passive:!0,capture:!1}),this.sidebar.addEventListener("update"+e,this),this.options.resizeSensor&&"undefined"!=typeof ResizeSensor&&(new ResizeSensor(this.sidebarInner,this.handleEvent),new ResizeSensor(this.container,this.handleEvent))}},{key:"handleEvent",value:function t(e){this.updateSticky(e)}},{key:"calcDimensions",value:function e(){if(!this._breakpoint){var i=this.dimensions;i.containerTop=t.offsetRelative(this.container).top,i.containerHeight=this.container.clientHeight,i.containerBottom=i.containerTop+i.containerHeight,i.sidebarHeight=this.sidebarInner.offsetHeight,i.sidebarWidth=this.sidebarInner.offsetWidth,i.viewportHeight=window.innerHeight,i.maxTranslateY=i.containerHeight-i.sidebarHeight,this._calcDimensionsWithScroll()}}},{key:"_calcDimensionsWithScroll",value:function e(){var i=this.dimensions;i.sidebarLeft=t.offsetRelative(this.sidebar).left,i.viewportTop=document.documentElement.scrollTop||document.body.scrollTop,i.viewportBottom=i.viewportTop+i.viewportHeight,i.viewportLeft=document.documentElement.scrollLeft||document.body.scrollLeft,i.topSpacing=this.options.topSpacing,i.bottomSpacing=this.options.bottomSpacing,"function"==typeof i.topSpacing&&(i.topSpacing=parseInt(i.topSpacing(this.sidebar))||0),"function"==typeof i.bottomSpacing&&(i.bottomSpacing=parseInt(i.bottomSpacing(this.sidebar))||0),"VIEWPORT-TOP"===this.affixedType?i.topSpacing=e.containerBottom?(e.translateY=e.containerBottom-i,o="CONTAINER-BOTTOM"):n>=e.containerTop&&(e.translateY=n-e.containerTop,o="VIEWPORT-TOP"):e.containerBottom<=s?(e.translateY=e.containerBottom-i,o="CONTAINER-BOTTOM"):i+e.translateY<=s?(e.translateY=s-i,o="VIEWPORT-BOTTOM"):e.containerTop+e.translateY<=n&&0!==e.translateY&&e.maxTranslateY!==e.translateY&&(o="VIEWPORT-UNBOTTOM"),o}},{key:"_getAffixTypeScrollingUp",value:function t(){var e=this.dimensions,i=e.sidebarHeight+e.containerTop,n=e.viewportTop+e.topSpacing,s=e.viewportBottom-e.bottomSpacing,o=this.affixedType;return n<=e.translateY+e.containerTop?(e.translateY=n-e.containerTop,o="VIEWPORT-TOP"):e.containerBottom<=s?(e.translateY=e.containerBottom-i,o="CONTAINER-BOTTOM"):!this.isSidebarFitsViewport()&&e.containerTop<=n&&0!==e.translateY&&e.maxTranslateY!==e.translateY&&(o="VIEWPORT-UNBOTTOM"),o}},{key:"_getStyle",value:function e(i){if(void 0!==i){var n={inner:{},outer:{}},s=this.dimensions;switch(i){case"VIEWPORT-TOP":n.inner={position:"fixed",top:s.topSpacing,left:s.sidebarLeft-s.viewportLeft,width:s.sidebarWidth};break;case"VIEWPORT-BOTTOM":n.inner={position:"fixed",top:"auto",left:s.sidebarLeft,bottom:s.bottomSpacing,width:s.sidebarWidth};break;case"CONTAINER-BOTTOM":case"VIEWPORT-UNBOTTOM":var o=this._getTranslate(0,s.translateY+"px");o?n.inner={transform:o}:n.inner={position:"absolute",top:s.translateY,width:s.sidebarWidth}}switch(i){case"VIEWPORT-TOP":case"VIEWPORT-BOTTOM":case"VIEWPORT-UNBOTTOM":case"CONTAINER-BOTTOM":n.outer={height:s.sidebarHeight,position:"relative"}}return n.outer=t.extend({height:"",position:""},n.outer),n.inner=t.extend({position:"relative",top:"",left:"",bottom:"",width:"",transform:""},n.inner),n}}},{key:"stickyPosition",value:function i(n){if(!this._breakpoint){n=this._reStyle||n||!1,this.options.topSpacing,this.options.bottomSpacing;var s=this.getAffixType(),o=this._getStyle(s);if((this.affixedType!=s||n)&&s){var r="affix."+s.toLowerCase().replace("viewport-","")+e;for(var a in t.eventTrigger(this.sidebar,r),"STATIC"===s?t.removeClass(this.sidebar,this.options.stickyClass):t.addClass(this.sidebar,this.options.stickyClass),o.outer){var p="number"==typeof o.outer[a]?"px":"";this.sidebar.style[a]=o.outer[a]+p}for(var c in o.inner){var l="number"==typeof o.inner[c]?"px":"";this.sidebarInner.style[c]=o.inner[c]+l}var h="affixed."+s.toLowerCase().replace("viewport-","")+e;t.eventTrigger(this.sidebar,h)}else this._initialized&&(this.sidebarInner.style.left=o.inner.left);this.affixedType=s}}},{key:"_widthBreakpoint",value:function e(){window.innerWidth<=this.options.minWidth?(this._breakpoint=!0,this.affixedType="STATIC",this.sidebar.removeAttribute("style"),t.removeClass(this.sidebar,this.options.stickyClass),this.sidebarInner.removeAttribute("style")):this._breakpoint=!1}},{key:"updateSticky",value:function t(){var e,i=this,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};!this._running&&(this._running=!0,e=n.type,requestAnimationFrame(function(){"scroll"===e?(i._calcDimensionsWithScroll(),i.observeScrollDir(),i.stickyPosition()):(i._widthBreakpoint(),i.calcDimensions(),i.stickyPosition(!0)),i._running=!1}))}},{key:"_setSupportFeatures",value:function e(){var i=this.support;i.transform=t.supportTransform(),i.transform3d=t.supportTransform(!0)}},{key:"_getTranslate",value:function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;return this.support.transform3d?"translate3d("+e+", "+i+", "+n+")":!!this.support.translate&&"translate("+e+", "+i+")"}},{key:"destroy",value:function t(){window.removeEventListener("resize",this,{capture:!1}),window.removeEventListener("scroll",this,{capture:!1}),this.sidebar.classList.remove(this.options.stickyClass),this.sidebar.style.minHeight="",this.sidebar.removeEventListener("update"+e,this);var i={inner:{},outer:{}};for(var n in i.inner={position:"",top:"",left:"",bottom:"",width:"",transform:""},i.outer={height:"",position:""},i.outer)this.sidebar.style[n]=i.outer[n];for(var s in i.inner)this.sidebarInner.style[s]=i.inner[s];this.options.resizeSensor&&"undefined"!=typeof ResizeSensor&&(ResizeSensor.detach(this.sidebarInner,this.handleEvent),ResizeSensor.detach(this.container,this.handleEvent))}}],[{key:"supportTransform",value:function t(e){var i=!1,n=e?"perspective":"transform",s=n.charAt(0).toUpperCase()+n.slice(1),o=document.createElement("support").style;return(n+" "+["Webkit","Moz","O","ms"].join(s+" ")+s).split(" ").forEach(function(t,e){if(void 0!==o[t])return i=t,!1}),i}},{key:"eventTrigger",value:function t(e,i,n){try{var s=new CustomEvent(i,{detail:n})}catch(o){var s=document.createEvent("CustomEvent");s.initCustomEvent(i,!0,!0,n)}e.dispatchEvent(s)}},{key:"extend",value:function t(e,i){var n={};for(var s in e)void 0!==i[s]?n[s]=i[s]:n[s]=e[s];return n}},{key:"offsetRelative",value:function t(e){var i={left:0,top:0};do{var n=e.offsetTop,s=e.offsetLeft;isNaN(n)||(i.top+=n),isNaN(s)||(i.left+=s),e="BODY"===e.tagName?e.parentElement:e.offsetParent}while(e);return i}},{key:"addClass",value:function e(i,n){t.hasClass(i,n)||(i.classList?i.classList.add(n):i.className+=" "+n)}},{key:"removeClass",value:function e(i,n){t.hasClass(i,n)&&(i.classList?i.classList.remove(n):i.className=i.className.replace(RegExp("(^|\\b)"+n.split(" ").join("|")+"(\\b|$)","gi")," "))}},{key:"hasClass",value:function t(e,i){return e.classList?e.classList.contains(i):RegExp("(^| )"+i+"( |$)","gi").test(e.className)}},{key:"defaults",get:function(){return i}}]),t}());t.default=s,window.StickySidebar=s})(e)})(i={exports:{}},i.exports),i.exports),r=(n=o)&&n.__esModule&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n;t.default=r,t.__moduleExports=o,Object.defineProperty(t,"__esModule",{value:!0})}); \ No newline at end of file diff --git a/plugins/system/helixultimate/fields/helixmultipositions.php b/plugins/system/helixultimate/fields/helixmultipositions.php new file mode 100644 index 00000000..a4ae7034 --- /dev/null +++ b/plugins/system/helixultimate/fields/helixmultipositions.php @@ -0,0 +1,102 @@ + + * @copyright Copyright (c) 2010 - 2021 JoomShaper + * @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPLv2 or Later + */ + +defined('_JEXEC') or die(); + +use Joomla\CMS\Factory; +use Joomla\CMS\HTML\HTMLHelper; +use HelixUltimate\Framework\Platform\Helper; +use Joomla\CMS\Form\FormHelper; +use Joomla\CMS\Version; + +FormHelper::loadFieldClass('list'); + +$version = new Version(); +$JoomlaVersion = $version->getShortVersion(); + +if (version_compare($JoomlaVersion, '4.0.0', '>=')) +{ + JLoader::registerAlias('JFormFieldList', 'Joomla\CMS\Form\Field\ListField'); +} + +/** + * Form field for Helix positions + * + * @since 1.0.0 + */ +class JFormFieldHelixmultipositions extends JFormFieldList +{ + /** + * Field type + * + * @var string $type + * @since 1.0.0 + */ + protected $type = 'Helixmultipositions'; + + /** + * Override getOptions function + * + * @return array + * @since 1.0.0 + */ + protected function getOptions() + { + $input = Factory::getApplication()->input; + $style_id = $input->get('id', 0, 'INT'); + $style = Helper::getTemplateStyle($style_id); + + $db = Factory::getDbo(); + $query = $db->getQuery(true); + $query->select($db->quoteName('position')); + $query->from($db->quoteName('#__modules')); + $query->where($db->quoteName('client_id') . ' = 0'); + $query->where($db->quoteName('published') . ' = 1'); + $query->group('position'); + $query->order('position ASC'); + $db->setQuery($query); + $dbpositions = $db->loadObjectList(); + + $templateXML = JPATH_SITE . '/templates/' . $style->template . '/templateDetails.xml'; + $template = simplexml_load_file($templateXML); + $options = array(); + + foreach ($dbpositions as $positions) + { + if (empty($positions->position)) { + continue; + } + + $options[] = $positions->position; + } + + foreach ($template->positions[0] as $position) + { + $options[] = (string) $position; + } + + ksort($options); + + $opts = array_unique($options); + + $options = array(); + + foreach ($opts as $opt) + { + $options[$opt] = $opt; + } + + $optionsArray = []; + + foreach ($options as $key => $item) { + $optionsArray[] = HTMLHelper::_('select.option', $key, $item . ' (' . $key . ')'); + } + + return array_merge(parent::getOptions(), $optionsArray); + } +} diff --git a/plugins/system/helixultimate/helixultimate.xml b/plugins/system/helixultimate/helixultimate.xml index 5e2cae12..7d0d9faf 100644 --- a/plugins/system/helixultimate/helixultimate.xml +++ b/plugins/system/helixultimate/helixultimate.xml @@ -10,7 +10,7 @@ http://www.gnu.org/licenses/gpl-2.0.html GPLv2 or later support@joomshaper.com www.joomshaper.com - 2.0.18 + 2.1.0 Helix Ultimate Framework - Joomla Template Framework by JoomShaper diff --git a/plugins/system/helixultimate/layout/settings/settings.php b/plugins/system/helixultimate/layout/settings/settings.php index f5c5911c..0fec7c13 100644 --- a/plugins/system/helixultimate/layout/settings/settings.php +++ b/plugins/system/helixultimate/layout/settings/settings.php @@ -210,6 +210,14 @@ function column_grid_system($device = 'lg') 'values' => array(), 'std' => 'none', ), + + 'sticky_position' => array( + 'type' => 'checkbox', + 'group' => 'general', + 'title' => Text::_('HELIX_ULTIMATE_STICKY_POSITION'), + 'desc' => Text::_('HELIX_ULTIMATE_STICKY_POSITION_DESC'), + 'std' => '', + ), 'custom_class' => array( 'type' => 'text', diff --git a/plugins/system/helixultimate/layouts/frontend/generate.php b/plugins/system/helixultimate/layouts/frontend/generate.php index c9d9d99e..95f29b28 100644 --- a/plugins/system/helixultimate/layouts/frontend/generate.php +++ b/plugins/system/helixultimate/layouts/frontend/generate.php @@ -6,15 +6,52 @@ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPLv2 or Later */ +use Joomla\CMS\Factory; use Joomla\CMS\Layout\FileLayout; +use Joomla\CMS\Plugin\PluginHelper; +use Joomla\CMS\Uri\Uri; defined('_JEXEC') or die(); - $layout_path = JPATH_ROOT .'/plugins/system/helixultimate/layouts'; $data = $displayData; +$doc = Factory::getDocument(); +$plg_path = Uri::root(true) . '/plugins/system/helixultimate'; + +$app = Factory::getApplication(); +$template = $app->getTemplate(true); +$layout = []; + +$rightSticky = false; +$leftSticky = false; + +// Check if position 'right' or 'left' is sticky from layout +if (!empty($template->params->get('layout'))) { + $layout = json_decode($template->params->get('layout')); + + foreach ($layout as $row) { + if (!empty($row->attr)) { + foreach ($row->attr as $attr) { + if (!empty($attr->settings) && !empty($attr->settings->name)) { + if ($attr->settings->name == 'right' && !empty($attr->settings->sticky_position)) { + if ($attr->settings->sticky_position) { + $rightSticky = true; + } + } + + if ($attr->settings->name == 'left' && !empty($attr->settings->sticky_position)) { + if ($attr->settings->sticky_position) { + $leftSticky = true; + } + } + } + } + } + } +} + extract($displayData); ?> @@ -50,4 +87,25 @@ -> \ No newline at end of file + + addScript($plg_path . '/assets/js/sticky-sidebar.js'); ?> + + +> diff --git a/plugins/system/helixultimate/layouts/masonry/bloglist.php b/plugins/system/helixultimate/layouts/masonry/bloglist.php new file mode 100644 index 00000000..a780c8c7 --- /dev/null +++ b/plugins/system/helixultimate/layouts/masonry/bloglist.php @@ -0,0 +1,119 @@ +params; +$attribs = json_decode($item->attribs ?? ""); +HTMLHelper::addIncludePath(JPATH_COMPONENT . '/helpers/html'); +$canEdit = $item->params->get('access-edit'); +$info = $params->get('info_block_position', 0); +$article_format = (isset($attribs->helix_ultimate_article_format) && $attribs->helix_ultimate_article_format) ? $attribs->helix_ultimate_article_format : 'standard'; + +$template = HelixUltimate\Framework\Platform\Helper::loadTemplateData(); +$tmpl_params = $template->params; + +// Check if associations are implemented. If they are, define the parameter. +$assocParam = (Associations::isEnabled() && $params->get('show_associations')); + +$currentDate = Factory::getDate()->format('Y-m-d H:i:s'); +$isUnpublished = JVERSION < 4 ? ($item->state == 0 || strtotime($item->publish_up) > strtotime(Factory::getDate()) || ((strtotime($item->publish_down) < strtotime(Factory::getDate())) && $item->publish_down != Factory::getDbo()->getNullDate())) : ($item->state == Joomla\Component\Content\Administrator\Extension\ContentComponent::CONDITION_UNPUBLISHED || $item->publish_up > $currentDate) + || ($item->publish_down < $currentDate && $item->publish_down !== null); + +$version = new Version(); +$JoomlaVersion = $version->getShortVersion(); + +?> + + + $attribs, 'id'=>$item->id)); ?> + + $attribs)); ?> + + $attribs)); ?> + + + +featured) :?> + + + + +

+ +
+ + + + + + get('show_modify_date') || $params->get('show_publish_date') || $params->get('show_create_date') + || $params->get('show_hits') || $params->get('show_category') || $params->get('show_parent_category') || $params->get('show_author') || $assocParam); ?> + + + $item, 'params' => $params, 'position' => 'above', 'intro' => true)); ?> + + + get('show_tags', 1) && !$tmpl_params->get('show_list_tags',0) && !empty($item->tags->itemTags)) : ?> + tagLayout = new FileLayout('joomla.content.tags'); ?> + tagLayout->render($item->tags->itemTags); ?> + + + get('show_intro')) : ?> + + event->afterDisplayTitle; ?> + + + + event->beforeDisplayContent; ?> + +
+ introtext; ?> + + + + $item, 'params' => $params, 'position' => 'below', 'intro' => true)); ?> + + + get('show_readmore') && $item->readmore) : + if ($params->get('access-view')) : + $link = Route::_(version_compare($JoomlaVersion, '4.0.0', '>=') ? Joomla\Component\Content\Site\Helper\RouteHelper::getArticleRoute($item->slug, $item->catid, $item->language) : ContentHelperRoute::getArticleRoute($item->slug, $item->catid, $item->language)); + else : + $menu = Factory::getApplication()->getMenu(); + $active = $menu->getActive(); + $itemId = $active->id; + $link = new Uri(Route::_('index.php?option=com_users&view=login&Itemid=' . $itemId, false)); + $link->setVar('return', base64_encode(version_compare($JoomlaVersion, '4.0.0', '>=') ? Joomla\Component\Content\Site\Helper\RouteHelper::getArticleRoute($item->slug, $item->catid, $item->language) : ContentHelperRoute::getArticleRoute($item->slug, $item->catid, $item->language))); + endif; ?> + + $item, 'params' => $params, 'link' => $link)); ?> + + +
+ + +
+ +
+ + +event->afterDisplayContent; ?> diff --git a/plugins/system/helixultimate/layouts/preview/iframe.php b/plugins/system/helixultimate/layouts/preview/iframe.php index a2bad764..7c85cf21 100644 --- a/plugins/system/helixultimate/layouts/preview/iframe.php +++ b/plugins/system/helixultimate/layouts/preview/iframe.php @@ -8,6 +8,21 @@ defined('_JEXEC') or die(); +use Joomla\CMS\Factory; +use Joomla\CMS\Uri\Uri; +use Joomla\CMS\Version; + +defined('_JEXEC') or die(); + +$version = new Version(); +$JoomlaVersion = $version->getShortVersion(); + +if (version_compare($JoomlaVersion, '5.0.0', '<')) +{ + $doc = Factory::getDocument(); + $doc->addStyleSheet(Uri::root(true) . '/media/system/css/joomla-fontawesome.min.css', ['relative' => false, 'version' => 'auto']); +} + extract($displayData); $style = ''; diff --git a/plugins/system/helixultimate/overrides/com_content/article/default.php b/plugins/system/helixultimate/overrides/com_content/article/default.php index db96cd6c..a63fdcc5 100644 --- a/plugins/system/helixultimate/overrides/com_content/article/default.php +++ b/plugins/system/helixultimate/overrides/com_content/article/default.php @@ -78,6 +78,10 @@ item); ?> + item->featured) :?> + + + get('show_modify_date') || $params->get('show_publish_date') || $params->get('show_create_date') diff --git a/plugins/system/helixultimate/overrides/com_content/category/blog.php b/plugins/system/helixultimate/overrides/com_content/category/blog.php index dfc010c0..3a937db8 100644 --- a/plugins/system/helixultimate/overrides/com_content/category/blog.php +++ b/plugins/system/helixultimate/overrides/com_content/category/blog.php @@ -13,6 +13,7 @@ use Joomla\CMS\HTML\HTMLHelper; use Joomla\CMS\Language\Text; use Joomla\CMS\Layout\FileLayout; +use Joomla\CMS\Layout\LayoutHelper; HTMLHelper::addIncludePath(JPATH_COMPONENT . '/helpers'); @@ -30,9 +31,12 @@ $results = $app->triggerEvent('onContentAfterDisplay', array($this->category->extension . '.categories', &$this->category, &$this->params, 0)); $afterDisplayContent = trim(implode("\n", $results)); +$columns = !empty((int) $this->params->get('num_columns')) ? (int) $this->params->get('num_columns') : 3; +$template = HelixUltimate\Framework\Platform\Helper::loadTemplateData(); +$blogListType = $template->params->get('blog_list_type') ?? 'default'; ?> - +
params->get('show_page_heading')) : ?> - +
diff --git a/plugins/system/helixultimate/src/Core/Classes/HelixultimateMenu.php b/plugins/system/helixultimate/src/Core/Classes/HelixultimateMenu.php index 577969d9..c4f3e5f2 100644 --- a/plugins/system/helixultimate/src/Core/Classes/HelixultimateMenu.php +++ b/plugins/system/helixultimate/src/Core/Classes/HelixultimateMenu.php @@ -221,12 +221,13 @@ public function initMenu() $item->flink = Route::_($item->flink); } - $item->title = htmlspecialchars($item->title ?? "", ENT_COMPAT, 'UTF-8', false); - $item->anchor_css = htmlspecialchars($item->getParams()->get('menu-anchor_css', '') ?? "", ENT_COMPAT, 'UTF-8', false); - $item->anchor_title = htmlspecialchars($item->getParams()->get('menu-anchor_title', '') ?? "", ENT_COMPAT, 'UTF-8', false); - $item->menu_icon = htmlspecialchars($item->getParams()->get('menu_icon_css', '') ?? "", ENT_COMPAT, 'UTF-8', false); - $item->anchor_rel = htmlspecialchars($item->getParams()->get('menu-anchor_rel', '') ?? "", ENT_COMPAT, 'UTF-8', false); - $item->menu_image = $item->getParams()->get('menu_image', '') ? htmlspecialchars($item->getParams()->get('menu_image', '') ?? "", ENT_COMPAT, 'UTF-8', false) : ''; + $item->title = htmlspecialchars($item->title ?? "", ENT_COMPAT, 'UTF-8', false); + $item->anchor_css = htmlspecialchars($item->getParams()->get('menu-anchor_css', '') ?? "", ENT_COMPAT, 'UTF-8', false); + $item->anchor_title = htmlspecialchars($item->getParams()->get('menu-anchor_title', '') ?? "", ENT_COMPAT, 'UTF-8', false); + $item->anchor_rel = htmlspecialchars($item->getParams()->get('menu-anchor_rel', '') ?? "", ENT_COMPAT, 'UTF-8', false); + $item->menu_icon = htmlspecialchars($item->getParams()->get('menu_icon_css', '') ?? "", ENT_COMPAT, 'UTF-8', false); + $item->menu_image_css = htmlspecialchars($item->getParams()->get('menu_image_css', '') ?? "", ENT_COMPAT, 'UTF-8', false); + $item->menu_image = $item->getParams()->get('menu_image', '') ? htmlspecialchars($item->getParams()->get('menu_image', '') ?? "", ENT_COMPAT, 'UTF-8', false) : ''; } } @@ -664,8 +665,9 @@ private function item($item, $extra_class='') else if ($item->menu_image) { $item->getParams()->get('menu_text', 1) ? - $linktitle = '' . $item->title . '' . $item->title . ' ' : + $linktitle = '' . $item->title . '' . $item->title . ' ' : $linktitle = '' . $item->title . ''; + } else { diff --git a/plugins/system/helixultimate/src/Core/HelixUltimate.php b/plugins/system/helixultimate/src/Core/HelixUltimate.php index e717aa3d..7b2df91b 100644 --- a/plugins/system/helixultimate/src/Core/HelixUltimate.php +++ b/plugins/system/helixultimate/src/Core/HelixUltimate.php @@ -721,7 +721,7 @@ private function get_current_row($row) foreach ($row->attr as $key => &$column) { - $column->settings->disable_modules = isset($column->settings->name) ? $this->disable_details_page_modules($column->settings->name) : false; + $column->settings->disable_modules = isset($column->settings->name) ? $this->disable_article_page_modules($column->settings->name) : false; if (!$column->settings->column_type) { @@ -995,17 +995,31 @@ public function count_modules($position) } /** - * Disable module only from article page. + * Disable module only from article list and detail pages. * * @param string $position Module position. * * @return boolean * @since 1.0.0 */ - private function disable_details_page_modules( $position ) + private function disable_article_page_modules( $position ) { - $article_and_disable = ($this->app->input->get('view') === 'article' && $this->params->get('disable_module')); - $match_positions = $position === 'left' || $position === 'right'; + if (!$this->app->input->get('option') === 'com_content') { + return false; + } + + if ($this->app->input->get('view') === 'article' && $this->params->get('blog_detail_disable_module')) { + $article_and_disable = true; + $disabled_positions = !empty($this->params->get('blog_detail_disable_positions')) ? $this->params->get('blog_detail_disable_positions') : []; + + } elseif ($this->app->input->get('view') === 'category' || $this->app->input->get('view') === 'featured' && $this->params->get('blog_list_disable_module')) { + $article_and_disable = true; + $disabled_positions = !empty($this->params->get('blog_list_disable_positions')) ? $this->params->get('blog_list_disable_positions') : []; + } else { + return false; + } + + $match_positions = in_array($position, $disabled_positions); return ($article_and_disable && $match_positions); } diff --git a/plugins/system/helixultimate/src/Platform/Helper.php b/plugins/system/helixultimate/src/Platform/Helper.php index a2e5332e..866deffb 100644 --- a/plugins/system/helixultimate/src/Platform/Helper.php +++ b/plugins/system/helixultimate/src/Platform/Helper.php @@ -725,4 +725,27 @@ public static function CheckNull($value = null) { return ($value == null) ? '' : $value; } + + /** + * Count read time buy content text + * + * @param string $text + * @return string + */ + public static function getReadTime($text) + { + $words_per_minute = 200; + $word_count = str_word_count(strip_tags($text)); + $read_time = ceil($word_count / $words_per_minute); + + if ($read_time == 1) { //grammar conversion + $label = Text::_('HELIX_ULTIMATE_BLOG_MINUTE_READ'); + } else { + $label = Text::_('HELIX_ULTIMATE_BLOG_MINUTES_READ'); + } + + $totalString = $read_time . " " . $label; //adds time with minute/minutes label + + return $totalString; + } } diff --git a/plugins/system/helixultimate/src/Platform/Request.php b/plugins/system/helixultimate/src/Platform/Request.php index 3d08deae..a65eec65 100644 --- a/plugins/system/helixultimate/src/Platform/Request.php +++ b/plugins/system/helixultimate/src/Platform/Request.php @@ -231,8 +231,8 @@ private function saveTemplateStyle() $data = $_POST; - $data['comingsoon_date'] = date('Y-m-d', strtotime($data['comingsoon_date'])); - $dateStatus = $this->validateDate($data['comingsoon_date']); + $data['comingsoon_date'] = date('Y-m-d H:i:s', strtotime($data['comingsoon_date'])); + $dateStatus = $this->validateDate($data['comingsoon_date'], 'Y-m-d H:i:s'); if (!$dateStatus) { $this->report['status'] = false; diff --git a/plugins/system/helixultimate/src/fields/helixmultipositions.php b/plugins/system/helixultimate/src/fields/helixmultipositions.php new file mode 100644 index 00000000..a4ae7034 --- /dev/null +++ b/plugins/system/helixultimate/src/fields/helixmultipositions.php @@ -0,0 +1,102 @@ + + * @copyright Copyright (c) 2010 - 2021 JoomShaper + * @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPLv2 or Later + */ + +defined('_JEXEC') or die(); + +use Joomla\CMS\Factory; +use Joomla\CMS\HTML\HTMLHelper; +use HelixUltimate\Framework\Platform\Helper; +use Joomla\CMS\Form\FormHelper; +use Joomla\CMS\Version; + +FormHelper::loadFieldClass('list'); + +$version = new Version(); +$JoomlaVersion = $version->getShortVersion(); + +if (version_compare($JoomlaVersion, '4.0.0', '>=')) +{ + JLoader::registerAlias('JFormFieldList', 'Joomla\CMS\Form\Field\ListField'); +} + +/** + * Form field for Helix positions + * + * @since 1.0.0 + */ +class JFormFieldHelixmultipositions extends JFormFieldList +{ + /** + * Field type + * + * @var string $type + * @since 1.0.0 + */ + protected $type = 'Helixmultipositions'; + + /** + * Override getOptions function + * + * @return array + * @since 1.0.0 + */ + protected function getOptions() + { + $input = Factory::getApplication()->input; + $style_id = $input->get('id', 0, 'INT'); + $style = Helper::getTemplateStyle($style_id); + + $db = Factory::getDbo(); + $query = $db->getQuery(true); + $query->select($db->quoteName('position')); + $query->from($db->quoteName('#__modules')); + $query->where($db->quoteName('client_id') . ' = 0'); + $query->where($db->quoteName('published') . ' = 1'); + $query->group('position'); + $query->order('position ASC'); + $db->setQuery($query); + $dbpositions = $db->loadObjectList(); + + $templateXML = JPATH_SITE . '/templates/' . $style->template . '/templateDetails.xml'; + $template = simplexml_load_file($templateXML); + $options = array(); + + foreach ($dbpositions as $positions) + { + if (empty($positions->position)) { + continue; + } + + $options[] = $positions->position; + } + + foreach ($template->positions[0] as $position) + { + $options[] = (string) $position; + } + + ksort($options); + + $opts = array_unique($options); + + $options = array(); + + foreach ($opts as $opt) + { + $options[$opt] = $opt; + } + + $optionsArray = []; + + foreach ($options as $key => $item) { + $optionsArray[] = HTMLHelper::_('select.option', $key, $item . ' (' . $key . ')'); + } + + return array_merge(parent::getOptions(), $optionsArray); + } +} diff --git a/templates/shaper_helixultimate/headers/style-1/header.php b/templates/shaper_helixultimate/headers/style-1/header.php index f850716d..b5235999 100644 --- a/templates/shaper_helixultimate/headers/style-1/header.php +++ b/templates/shaper_helixultimate/headers/style-1/header.php @@ -113,7 +113,7 @@ - +
diff --git a/templates/shaper_helixultimate/html/layouts/joomla/content/info_block/reading_time.php b/templates/shaper_helixultimate/html/layouts/joomla/content/info_block/reading_time.php new file mode 100644 index 00000000..447059b3 --- /dev/null +++ b/templates/shaper_helixultimate/html/layouts/joomla/content/info_block/reading_time.php @@ -0,0 +1,11 @@ +params->get('boxed_layout'); +$containerMaxWidth = $this->params->get('container_max_width'); + // Body Background Image if ($boxedLayout && $this->params->get('body_bg_image')) { @@ -141,6 +143,9 @@ echo $before_head . "\n"; } ?> + + + diff --git a/templates/shaper_helixultimate/options.xml b/templates/shaper_helixultimate/options.xml index a5e3f682..d4eac236 100644 --- a/templates/shaper_helixultimate/options.xml +++ b/templates/shaper_helixultimate/options.xml @@ -206,6 +206,13 @@ type="checkbox" default="0" label="HELIX_ULTIMATE_ENABLE_BOXED_LAYOUT" /> + + @@ -1554,6 +1562,38 @@ default="0" label="HELIX_ULTIMATE_LIST_TAGS_OPTION" description="HELIX_ULTIMATE_LIST_TAGS_OPTION_DESC" /> + + + + + + + + + + + HELIX_ULTIMATE_BLOG_SOCIAL_SHARE_LINKEDIN - + + + * { + break-inside: avoid; + margin-bottom: var(--gap); +} + +@supports (grid-template-rows: masonry) { + .article-list.grid { + display: grid; + grid-template-columns: repeat(var(--columns), 1fr); + grid-template-rows: masonry; + grid-auto-flow: dense; + } + + .article-list.grid > * { + margin-bottom: 0em; + } +} + .related-article-large { .article-image { width: 350px; @@ -1243,6 +1315,7 @@ body.view-article.remove-container { } .article-details { + position: relative; .article-header { position: relative; h1, @@ -1250,6 +1323,13 @@ body.view-article.remove-container { font-size: 2.25rem; } } + + .featured-article-badge { + position: absolute; + top: 5px; + left: 5px; + cursor: default; + } .article-info { margin-bottom: 1rem; @@ -2625,4 +2705,12 @@ li.custom_user_login_menu ul { li.custom_user_login_menu ul li { padding: 5px 0; border-bottom: 1px solid #eee; -} \ No newline at end of file +} + +// Login Passkey style +svg#Passkey { + height: 2rem; +} +#icon-passkey { + fill: #fff; +} \ No newline at end of file diff --git a/templates/shaper_helixultimate/templateDetails.xml b/templates/shaper_helixultimate/templateDetails.xml index 331cd0fa..16a3e90a 100644 --- a/templates/shaper_helixultimate/templateDetails.xml +++ b/templates/shaper_helixultimate/templateDetails.xml @@ -10,7 +10,7 @@ http://www.joomshaper.com Copyright (C) 2010 - 2023 JoomShaper.com. All rights reserved. http://www.gnu.org/licenses/gpl-2.0.html GPLv2 or later - 2.0.18 + 2.1.0 Helix Ultimate - Starter Template of Helix Ultimate Framework