1<!DOCTYPE html> <html class="ltr" dir="ltr" lang="en"> <head> <!-- Liferay DXP 2026.q1.8 - NODE 10.211.7.52 [MASTER] - MARKET COM - COUNTRY CK - LOCALE en_GB - LAYOUT 630 - DATE 21/09/2026 14:18:51 --> <title>News | Roca.com</title> <!-- Default meta tags --> <meta content="initial-scale=1.0, width=device-width" name="viewport" /> <meta content="text/html; charset=UTF-8" http-equiv="content-type" /> <!-- Description meta --> <meta name="description" lang="en-GB" content="All the latest news from Roca UK and the rest of the world and press contact information for the media." /> <!-- Canonical, next, prev links --> <link rel="canonical" href="https://www.roca.com/about-roca/news" /> <!-- OpenGraph metas --> <meta property="og:title" content="News | Roca.com" /> <meta property="og:type" content="website" /> <meta property="og:url" content="https://www.roca.com/about-roca/news" /> <meta property="og:image" content="https://www.roca.com/o/adaptive-media/image/263707978/263707979/tablet/ROCA_Campa%C3%B1a_El_Ba%C3%B1o_080524.jpg" /> <meta property="og:description" content="All the latest news from Roca UK and the rest of the world and press contact information for the media." /> <meta property="og:locale" content="en_GB" /> <meta property="og:site_name" content="Roca.com" /> <!-- Language links --> <link rel="alternate" hreflang="x-default" href="https://www.roca.com/about-roca/news" /> <!-- Zendesk --> <!-- Most important fonts pre-loading --> <link rel="preload" href="/o/roca-restyle-theme/fonts/suisse-intl/SuisseIntl-Regular.woff2" as="font" type="font/woff2" crossorigin="anonymous"> <link rel="preload" href="/o/roca-restyle-theme/fonts/suisse-intl/SuisseIntl-Medium.woff2" as="font" type="font/woff2" crossorigin="anonymous"> <link rel="preload" href="/o/roca-restyle-theme/fonts/helvetica/HelveticaNeueLTW01-45Light.woff2" as="font" type="font/woff2" crossorigin="anonymous"> <link rel="preload" href="/o/roca-restyle-theme/fonts/roboto/Roboto-Regular.woff2" as="font" type="font/woff2" crossorigin="anonymous"> <link rel="preload" href="/o/roca-restyle-theme/fonts/roboto/Roboto-Bold.woff2" as="font" type="font/woff2" crossorigin="anonymous"> <link rel="preload" href="/o/roca-restyle-theme/fonts/roboto/Roboto-Light.woff2" as="font" type="font/woff2" crossorigin="anonymous"> <link rel="preload" href="/o/roca-restyle-theme/fonts/roca-black/roca_black-webfont.woff2" as="font" type="font/woff2" crossorigin="anonymous"> <link rel="preload" href="/o/roca-restyle-theme/fonts/roca-black/roca-regular-webfont.woff2" as="font" type="font/woff2" crossorigin="anonymous"> <!-- Fonts not preloaded --> <link href="/o/roca-restyle-theme/fonts/roca-black/roca-black_italic-webfont.woff2" as="font" type="font/woff2" crossorigin="anonymous"> <link href="/o/roca-restyle-theme/fonts/roca-black/roca-bold_italic-webfont.woff2" as="font" type="font/woff2" crossorigin="anonymous"> <link href="/o/roca-restyle-theme/fonts/roca-black/roca-bold-webfont.woff2" as="font" type="font/woff2" crossorigin="anonymous"> <link href="/o/roca-restyle-theme/fonts/roca-black/roca-light_italic-webfont.woff2" as="font" type="font/woff2" crossorigin="anonymous"> <link href="/o/roca-restyle-theme/fonts/roca-black/roca-light-webfont.woff2" as="font" type="font/woff2" crossorigin="anonymous"> <link href="/o/roca-restyle-theme/fonts/roca-black/roca-regular_italic-webfont.woff2" as="font" type="font/woff2" crossorigin="anonymous"> <link href="/o/roca-restyle-theme/fonts/icofonts/icomoon.woff?nidxzc" as="font" type="font/woff" crossorigin="anonymous"> <!-- Roca Custom JSP Bag is ACTIVE -->
1<script type="importmap">{"imports": {"@liferay/oauth2-provider-web/client": "/o/oauth2-provider-web/__liferay__/client.js","@clayui/alert": "/o/frontend-js-clay-web/__liferay__/exports/@clayui$alert.js", "@clayui/autocomplete": "/o/frontend-js-clay-web/__liferay__/exports/@clayui$autocomplete.js", "@clayui/badge": "/o/frontend-js-clay-web/__liferay__/exports/@clayui$badge.js", "@clayui/breadcrumb": "/o/frontend-js-clay-web/__liferay__/exports/@clayui$breadcrumb.js", "@clayui/button": "/o/frontend-js-clay-web/__liferay__/exports/@clayui$button.js", "@clayui/card": "/o/frontend-js-clay-web/__liferay__/exports/@clayui$card.js", "@clayui/color-picker": "/o/frontend-js-clay-web/__liferay__/exports/@clayui$color-picker.js", "@clayui/core": "/o/frontend-js-clay-web/__liferay__/exports/@clayui$core.js", "@clayui/data-provider": "/o/frontend-js-clay-web/__liferay__/exports/@clayui$data-provider.js", "@clayui/date-picker": "/o/frontend-js-clay-web/__liferay__/exports/@clayui$date-picker.js", "@clayui/drop-down": "/o/frontend-js-clay-web/__liferay__/exports/@clayui$drop-down.js", "@clayui/empty-state": "/o/frontend-js-clay-web/__liferay__/exports/@clayui$empty-state.js", "@clayui/form": "/o/frontend-js-clay-web/__liferay__/exports/@clayui$form.js", "@clayui/icon": "/o/frontend-js-clay-web/__liferay__/exports/@clayui$icon.js", "@clayui/label": "/o/frontend-js-clay-web/__liferay__/exports/@clayui$label.js", "@clayui/layout": "/o/frontend-js-clay-web/__liferay__/exports/@clayui$layout.js", "@clayui/link": "/o/frontend-js-clay-web/__liferay__/exports/@clayui$link.js", "@clayui/list": "/o/frontend-js-clay-web/__liferay__/exports/@clayui$list.js", "@clayui/loading-indicator": "/o/frontend-js-clay-web/__liferay__/exports/@clayui$loading-indicator.js", "@clayui/localized-input": "/o/frontend-js-clay-web/__liferay__/exports/@clayui$localized-input.js", "@clayui/management-toolbar": "/o/frontend-js-clay-web/__liferay__/exports/@clayui$management-toolbar.js", "@clayui/modal": "/o/frontend-js-clay-web/__liferay__/exports/@clayui$modal.js", "@clayui/multi-select": "/o/frontend-js-clay-web/__liferay__/exports/@clayui$multi-select.js", "@clayui/multi-step-nav": "/o/frontend-js-clay-web/__liferay__/exports/@clayui$multi-step-nav.js", "@clayui/nav": "/o/frontend-js-clay-web/__liferay__/exports/@clayui$nav.js", "@clayui/navigation-bar": "/o/frontend-js-clay-web/__liferay__/exports/@clayui$navigation-bar.js", "@clayui/pagination": "/o/frontend-js-clay-web/__liferay__/exports/@clayui$pagination.js", "@clayui/pagination-bar": "/o/frontend-js-clay-web/__liferay__/exports/@clayui$pagination-bar.js", "@clayui/panel": "/o/frontend-js-clay-web/__liferay__/exports/@clayui$panel.js", "@clayui/popover": "/o/frontend-js-clay-web/__liferay__/exports/@clayui$popover.js", "@clayui/progress-bar": "/o/frontend-js-clay-web/__liferay__/exports/@clayui$progress-bar.js", "@clayui/provider": "/o/frontend-js-clay-web/__liferay__/exports/@clayui$provider.js", "@clayui/shared": "/o/frontend-js-clay-web/__liferay__/exports/@clayui$shared.js", "@clayui/slider": "/o/frontend-js-clay-web/__liferay__/exports/@clayui$slider.js", "@clayui/sticker": "/o/frontend-js-clay-web/__liferay__/exports/@clayui$sticker.js", "@clayui/table": "/o/frontend-js-clay-web/__liferay__/exports/@clayui$table.js", "@clayui/tabs": "/o/frontend-js-clay-web/__liferay__/exports/@clayui$tabs.js", "@clayui/time-picker": "/o/frontend-js-clay-web/__liferay__/exports/@clayui$time-picker.js", "@clayui/toolbar": "/o/frontend-js-clay-web/__liferay__/exports/@clayui$toolbar.js", "@clayui/tooltip": "/o/frontend-js-clay-web/__liferay__/exports/@clayui$tooltip.js", "@clayui/upper-toolbar": "/o/frontend-js-clay-web/__liferay__/exports/@clayui$upper-toolbar.js","@liferay/frontend-js-api": "/o/frontend-js-dependencies-web/__liferay__/exports/@liferay$js-api.js", "@liferay/frontend-js-api/data-set": "/o/frontend-js-dependencies-web/__liferay__/exports/@liferay$js-api$data-set.js","@ckeditor/ckeditor5-adapter-ckfinder/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-adapter-ckfinder$dist$index.js.js", "@ckeditor/ckeditor5-alignment/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-alignment$dist$index.js.js", "@ckeditor/ckeditor5-autoformat/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-autoformat$dist$index.js.js", "@ckeditor/ckeditor5-autosave/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-autosave$dist$index.js.js", "@ckeditor/ckeditor5-basic-styles/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-basic-styles$dist$index.js.js", "@ckeditor/ckeditor5-block-quote/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-block-quote$dist$index.js.js", "@ckeditor/ckeditor5-bookmark/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-bookmark$dist$index.js.js", "@ckeditor/ckeditor5-ckbox/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-ckbox$dist$index.js.js", "@ckeditor/ckeditor5-ckfinder/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-ckfinder$dist$index.js.js", "@ckeditor/ckeditor5-clipboard/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-clipboard$dist$index.js.js", "@ckeditor/ckeditor5-cloud-services/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-cloud-services$dist$index.js.js", "@ckeditor/ckeditor5-code-block/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-code-block$dist$index.js.js", "@ckeditor/ckeditor5-core/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-core$dist$index.js.js", "@ckeditor/ckeditor5-easy-image/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-easy-image$dist$index.js.js", "@ckeditor/ckeditor5-editor-balloon/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-editor-balloon$dist$index.js.js", "@ckeditor/ckeditor5-editor-classic/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-editor-classic$dist$index.js.js", "@ckeditor/ckeditor5-editor-decoupled/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-editor-decoupled$dist$index.js.js", "@ckeditor/ckeditor5-editor-inline/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-editor-inline$dist$index.js.js", "@ckeditor/ckeditor5-editor-multi-root/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-editor-multi-root$dist$index.js.js", "@ckeditor/ckeditor5-emoji/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-emoji$dist$index.js.js", "@ckeditor/ckeditor5-engine/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-engine$dist$index.js.js", "@ckeditor/ckeditor5-enter/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-enter$dist$index.js.js", "@ckeditor/ckeditor5-essentials/
1dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-essentials$dist$index.js.js", "@ckeditor/ckeditor5-find-and-replace/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-find-and-replace$dist$index.js.js", "@ckeditor/ckeditor5-font/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-font$dist$index.js.js", "@ckeditor/ckeditor5-fullscreen/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-fullscreen$dist$index.js.js", "@ckeditor/ckeditor5-heading/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-heading$dist$index.js.js", "@ckeditor/ckeditor5-highlight/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-highlight$dist$index.js.js", "@ckeditor/ckeditor5-horizontal-line/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-horizontal-line$dist$index.js.js", "@ckeditor/ckeditor5-html-embed/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-html-embed$dist$index.js.js", "@ckeditor/ckeditor5-html-support/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-html-support$dist$index.js.js", "@ckeditor/ckeditor5-icons/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-icons$dist$index.js.js", "@ckeditor/ckeditor5-image/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-image$dist$index.js.js", "@ckeditor/ckeditor5-indent/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-indent$dist$index.js.js", "@ckeditor/ckeditor5-language/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-language$dist$index.js.js", "@ckeditor/ckeditor5-link/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-link$dist$index.js.js", "@ckeditor/ckeditor5-list/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-list$dist$index.js.js", "@ckeditor/ckeditor5-markdown-gfm/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-markdown-gfm$dist$index.js.js", "@ckeditor/ckeditor5-media-embed/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-media-embed$dist$index.js.js", "@ckeditor/ckeditor5-mention/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-mention$dist$index.js.js", "@ckeditor/ckeditor5-minimap/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-minimap$dist$index.js.js", "@ckeditor/ckeditor5-page-break/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-page-break$dist$index.js.js", "@ckeditor/ckeditor5-paragraph/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-paragraph$dist$index.js.js", "@ckeditor/ckeditor5-paste-from-office/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-paste-from-office$dist$index.js.js", "@ckeditor/ckeditor5-react": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-react.js", "@ckeditor/ckeditor5-remove-format/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-remove-format$dist$index.js.js", "@ckeditor/ckeditor5-restricted-editing/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-restricted-editing$dist$index.js.js", "@ckeditor/ckeditor5-select-all/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-select-all$dist$index.js.js", "@ckeditor/ckeditor5-show-blocks/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-show-blocks$dist$index.js.js", "@ckeditor/ckeditor5-source-editing/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-source-editing$dist$index.js.js", "@ckeditor/ckeditor5-special-characters/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-special-characters$dist$index.js.js", "@ckeditor/ckeditor5-style/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-style$dist$index.js.js", "@ckeditor/ckeditor5-table/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-table$dist$index.js.js", "@ckeditor/ckeditor5-typing/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-typing$dist$index.js.js", "@ckeditor/ckeditor5-ui/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-ui$dist$index.js.js", "@ckeditor/ckeditor5-undo/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-undo$dist$index.js.js", "@ckeditor/ckeditor5-upload/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-upload$dist$index.js.js", "@ckeditor/ckeditor5-utils/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-utils$dist$index.js.js", "@ckeditor/ckeditor5-watchdog/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-watchdog$dist$index.js.js", "@ckeditor/ckeditor5-widget/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-widget$dist$index.js.js", "@ckeditor/ckeditor5-word-count/dist/index.js": "/o/frontend-editor-ckeditor-web/__liferay__/exports/@ckeditor$ckeditor5-word-count$dist$index.js.js","@liferay/fragment-impl/api": "/o/fragment-impl/__liferay__/api.js","@liferay/dynamic-data-mapping-form-field-type/api": "/o/dynamic-data-mapping-form-field-type/__liferay__/api.js","react": "/o/frontend-js-react-web/__liferay__/exports/react.js", "react-16": "/o/frontend-js-react-web/__liferay__/exports/react-16.js", "react-18": "/o/frontend-js-react-web/__liferay__/exports/react-18.js", "react-dom": "/o/frontend-js-react-web/__liferay__/exports/react-dom.js", "react-dom/client": "/o/frontend-js-react-web/__liferay__/exports/react-dom$client.js", "react-dom-16": "/o/frontend-js-react-web/__liferay__/exports/react-dom-16.js", "react-dom-18": "/o/frontend-js-react-web/__liferay__/exports/react-dom-18.js", "react-dom-18/client": "/o/frontend-js-react-web/__liferay__/exports/react-dom-18$client.js","@liferay/language/": "/o/js/language/"}, "scopes": {}}</script>
1 <link href="https://www.roca.com/o/roca-restyle-theme/images/favicon.ico" rel="apple-touch-icon" /> <link href="https://www.roca.com/o/roca-restyle-theme/images/favicon.ico" rel="icon" /> <link class="lfr-css-file" data-senna-track="temporary" href="https://www.roca.com/o/roca-restyle-theme/css/clay.css?browserId=firefox&themeId=rocarestyletheme_WAR_rocarestyletheme&minifierType=css&languageId=en_GB&t=1789464090000" id="liferayAUICSS" rel="stylesheet" type="text/css" /> <link href="https://www.roca.com/o/product-navigation-product-menu-web/css/main.(i$0IgPwR2kk).css" rel="stylesheet" type="text/css" data-senna-track="temporary" id="60af828e" />
1<script data-senna-track="temporary" type="text/javascript"> 2(function() { 3 function buildESMStub(contextPath, symbol) { 4 return ( 5 (...args) => { 6 import( 7 Liferay.ThemeDisplay.getCDNHost() + 8 Liferay.ThemeDisplay.getPathContext() + 9 '/o/' + 10 contextPath + 11 '/__liferay__/index.js' 12 ).then( 13 (exports) => exports[symbol](...args) 14 ); 15 } 16 ); 17 } 18 19 function defineReadOnlyGlobal(name, getValue) { 20 Object.defineProperty( 21 window, 22 name, 23 { 24 get: getValue, 25 set: (x) => { 26 if (x !== getValue()) { 27 console.error(`Global variable '${name}' is read-only`); 28 } 29 } 30 } 31 ); 32 } 33 34 function isObject(item) { 35 return (item && typeof item === 'object' && !Array.isArray(item)); 36 } 37 38 function merge(target, source) { 39 for (const key in source) { 40 if (isObject(source[key])) { 41 if (!target[key]) { 42 Object.assign(target, { [key]: {} }); 43 } 44 45 merge(target[key], source[key]); 46 } 47 else { 48 Object.assign(target, { [key]: source[key] }); 49 } 50 } 51 } 52 53 let __liferay = { 54AUI: { 55getCombine: () => true, 56getComboPath: () => '/combo/?browserId=firefox&minifierType=&languageId=en_GB&t=1789463949813&', 57getDateFormat: () => '%d/%m/%Y', 58getEditorCKEditorPath: () => '/o/frontend-editor-ckeditor-web', 59getFilter: () => 'min', 60getFilterConfig: () => null, 61getJavaScriptRootPath: () => '/o/frontend-js-web', 62getPortletRootPath: () => '/html/portlet', 63getStaticResourceURLParams: () => '?browserId=firefox&minifierType=&languageId=en_GB&t=1789463949813', 64}, 65Browser: { 66acceptsGzip: () => true, 67getMajorVersion: () => '131.0', 68getRevision: () => '131.0', 69getVersion: () => '131.0', 70isAir: () => false, 71isChrome: () => false, 72isEdge: () => false, 73isFirefox: () => true, 74isGecko: () => true, 75isIe: () => false, 76isIphone: () => false, 77isLinux: () => false, 78isMac: () => false, 79isMobile: () => false, 80isMozilla: () => true, 81isOpera: () => false, 82isRtf: () => true, 83isSafari: () => false, 84isSun: () => false, 85isWebKit: () => false, 86isWindows: () => true, 87}, 88Data: { 89ICONS_INLINE_SVG: true, 90NAV_SELECTOR: '#navigation', 91NAV_SELECTOR_MOBILE: '#navigationCollapse', 92isCustomizationView: () => false, 93notices: [ 94], 95}, 96FeatureFlags: { 97'LPD-11342': false, 98'LPD-23840': false, 99'LPD-36010': true, 100'LPD-36719': true, 101'LPD-39203': false, 102'LPD-40529': true, 103'LPD-48372': true, 104'LPD-48975': true, 105'LPD-78863': true, 106'LPS-157670': false, 107'LPS-172416': false, 108'LPS-183672': false, 109'LPS-186360': false, 110'LRAC-14771': false, 111'COMMERCE-13024': false, 112'COMMERCE-8087': false, 113'COMMERCE-8949': false, 114'LPD-10562': false, 115'LPD-10964': false, 116'LPD-11003': false, 117'LPD-11131': true, 118'LPD-11228': false, 119'LPD-11235': false, 120'LPD-11313': false, 121'LPD-11848': false, 122'LPD-13311': true, 123'LPD-13778': true, 124'LPD-17564': false, 125'LPD-19870': false, 126'LPD-19955': false, 127'LPD-20183': false, 128'LPD-20379': false, 129'LPD-20640': false, 130'LPD-21414': false, 131'LPD-29516': false, 132'LPD-31212': true, 133'LPD-31228': false, 134'LPD-31789': false, 135'LPD-32867': false, 136'LPD-34594': false, 137'LPD-35013': true, 138'LPD-35128': false, 139'LPD-35443': false, 140'LPD-36105': false, 141'LPD-38564': false, 142'LPD-38869': true, 143'LPD-39304': true, 144'LPD-39437': false, 145'LPD-40530': true, 146'LPD-40533': true, 147'LPD-40534': true, 148'LPD-40535': true, 149'LPD-42553': false, 150'LPD-43996': false, 151'LPD-44091': true, 152'LPD-44307': true, 153'LPD-44771': true, 154'LPD-45276': false, 155'LPD-47713': true, 156'LPD-48862': true, 157'LPD-51356': false, 158'LPD-56718': false, 159'LPD-57655': false, 160'LPD-58677': false, 161'LPD-60546': true, 162'LPD-62272': false, 163'LPD-63311': false, 164'LPD-63415': false, 165'LPD-63416': false, 166'LPD-6368': false, 167'LPD-65299': false, 168'LPD-65399': false, 169'LPD-66359': false, 170'LPD-66611': true, 171'LPD-74328': false, 172'LPD-74739': true, 173'LPD-75032': false, 174'LPD-75525': false, 175'LPD-7822': false, 176'LPS-122920': false, 177'LPS-135430': false, 178'LPS-153332': false, 179'LPS-153714': false, 180'LPS-153813': false, 181'LPS-155284': false, 182'LPS-159643': false, 183'LPS-164563': false, 184'LPS-165482': false, 185'LPS-169837': false, 186'LPS-170670': false, 187'LPS-174417': false, 188'LPS-174816': false, 189'LPS-176691': false, 190'LPS-177027': false, 191'LPS-178052': false, 192'LPS-178642': false, 193'LPS-180090': false, 194'LPS-185892': false, 195'LPS-186620': false, 196'LPS-193884': false, 197'LPS-196935': true, 198'LPS-197477': false, 199'LPS-197909': false, 200'LPS-198183': false, 201'LPS-200108': false, 202'LPS-202104': false, 203'LRAC-10757': false, 204'LRAC-15017': false, 205}, 206Language: { 207 _cache: 208 window?.Liferay?.Language?._cache 209 ? Liferay.Language._cache 210 : {}, 211 available: { 212'es_ES': 'español\x20\x28España\x29', 213'en_GB': 'English\x20\x28United\x20Kingdom\x29', 214'en_US': 'English\x20\x28United\x20States\x29', 215'pt_BR': 'português\x20\x28Brasil\x29', 216'de_DE': 'Deutsch\x20\x28Deutschland\x29', 217'de_CH': 'Deutsch\x20\x28Schweiz\x29', 218'bg_BG': 'бÑлгаÑÑки\x20\x28ÐÑлгаÑиÑ\x29', 219'ca_ES': 'català \x20\x28Espanya\x29', 220'cs_CZ': 'ÄeÅ¡tina\x20\x28Äesko\x29', 221'zh_CN': '䏿\x20\x28ä¸å½\x29', 222'zh_HK': '䏿\x20\x28ä¸å馿¸¯ç¹å¥è¡æ¿å\x29', 223'zh_TW': '䏿\x20\x28å°ç£\x29', 224'hr_HR': 'hrvatski\x20\x28Hrvatska\x29', 225'da_DK': 'dansk\x20\x28Danmark\x29', 226'sk_SK': 'slovenÄina\x20\x28Slovensko\x29', 227'es_AR': 'español\x20\x28Argentina\x29', 228'es_MX': 'español\x20\x28México\x29', 229'fi_FI': 'suomi\x20\x28Suomi\x29', 230'fr_FR': 'français\x20\x28France\x29', 231'fr_CH': 'français\x20\x28Suisse\x29', 232'gl_ES': 'galego\x20\x28España\x29', 233'el_GR': 'Îλληνικά\x20\x28Îλλάδα\x29', 234'hu_HU': 'magyar\x20\x28Magyarország\x29', 235'en_AU': 'English\x20\x28Australia\x29', 236'it_IT': 'italiano\x20\x28Italia\x29', 237'it_CH': 'italiano\x20\x28Svizzera\x29', 238'lt_LT': 'lietuvių\x20\x28Lietuva\x29', 239'nl_NL': 'Nederlands\x20\x28Nederland\x29', 240'no_NO': 'norsk\x20\x28Norge\x29', 241'pl_PL': 'polski\x20\x28Polska\x29', 242'pt_PT': 'português\x20\x28Portugal\x29', 243'ro_RO': 'românÄ\x20\x28România\x29', 244'ru_RU': 'ÑÑÑÑкий\x20\x28РоÑÑиÑ\x29', 245'sv_SE': 'svenska\x20\x28Sverige\x29', 246'th_TH': 'à¹à¸à¸¢\x20\x28à¹à¸à¸¢\x29', 247'tr_TR': 'Türkçe\x20\x28Türkiye\x29', 248'uk_UA': 'ÑкÑаÑнÑÑка\x20\x28УкÑаÑна\x29', 249'eu_ES': 'euskara\x20\x28Espainia\x29', 250'ar_EG': 'Ø§ÙØ¹Ø±Ø¨ÙØ©\x20\x28٠صر\x29', 251'ko_KR': 'íêµì´\x20\x28ëí민êµ\x29', 252'in_ID': 'Indonesia\x20\x28Indonesia\x29', 253 254 }, 255 direction: { 256'es_ES': 'ltr', 257'en_GB': 'ltr', 258'en_US': 'ltr', 259'pt_BR': 'ltr', 260'de_DE': 'ltr', 261'de_CH': 'ltr', 262'bg_BG': 'ltr', 263'ca_ES': 'ltr', 264'cs_CZ': 'ltr', 265'zh_CN': 'ltr', 266'zh_HK': 'ltr', 267'zh_TW': 'ltr', 268'hr_HR': 'ltr', 269'da_DK': 'ltr', 270'sk_SK': 'ltr', 271'es_AR': 'ltr', 272'es_MX': 'ltr', 273'fi_FI': 'ltr', 274'fr_FR': 'ltr', 275'fr_CH': 'ltr', 276'gl_ES': 'ltr', 277'el_GR': 'ltr', 278'hu_HU': 'ltr', 279'en_AU': 'ltr', 280'it_IT': 'ltr', 281'it_CH': 'ltr', 282'lt_LT': 'ltr', 283'nl_NL': 'ltr', 284'no_NO': 'ltr', 285'pl_PL': 'ltr', 286'pt_PT': 'ltr', 287'ro_RO': 'ltr', 288'ru_RU': 'ltr', 289'sv_SE': 'ltr', 290'th_TH': 'ltr', 291'tr_TR': 'ltr', 292'uk_UA': 'ltr', 293'eu_ES': 'ltr', 294'ar_EG': 'rtl', 295'ko_KR': 'ltr', 296'in_ID': 'ltr', 297 298 }, 299 get: 300 (key) => { 301 let value = Liferay.Language._cache[key]; 302 303 if (value === undefined) { 304 value = key; 305 } 306 307 return value; 308 }, 309}, 310Portlet: { 311openModal: buildESMStub('frontend-js-components-web', 'openPortletModal'), 312openWindow: buildESMStub('frontend-js-components-web', 'openPortletWindow'), 313}, 314PortletKeys: { 315DOCUMENT_LIBRARY: 'com_liferay_document_library_web_portlet_DLPortlet', 316DYNAMIC_DATA_MAPPING: 'com_liferay_dynamic_data_mapping_web_portlet_DDMPortlet', 317INSTANCE_SETTINGS: 'com_liferay_configuration_admin_web_portlet_InstanceSettingsPortlet', 318ITEM_SELECTOR: 'com_liferay_item_selector_web_portlet_ItemSelectorPortlet', 319}, 320PropsValues: { 321JAVASCRIPT_SINGLE_PAGE_APPLICATION_TIMEOUT: 0, 322UPLOAD_SERVLET_REQUEST_IMPL_MAX_SIZE: 31457280000, 323}, 324ThemeDisplay: { 325getLayoutId: () => '630', 326getLayoutRelativeControlPanelURL: () => '/group/roca/~/control_panel/manage', 327getLayoutRelativeURL: () =>
327 '/web/roca/about-roca/news', 328getLayoutURL: () => 'https://www.roca.com/web/roca/about-roca/news', 329getParentLayoutId: () => '95', 330getPathFriendlyURLPublic: () => '/web', 331isControlPanel: () => false, 332isPrivateLayout: () => false, 333isVirtualLayout: () => false, 334getBCP47LanguageId: () => 'es-ES', 335getCanonicalURL: () => 'https\x3a\x2f\x2fwww\x2eroca\x2ecom\x2fsobre-roca\x2fnoticias', 336getCDNBaseURL: () => 'https://www.roca.com', 337getCDNDynamicResourcesHost: () => '', 338getCDNHost: () => '', 339getCompanyGroupId: () => '20135', 340getCompanyId: () => '20099', 341getDefaultLanguageId: () => 'es_ES', 342getDoAsUserIdEncoded: () => '', 343getLanguageId: () => 'en_GB', 344getParentGroupId: () => '20126', 345getParentSiteGroupId: () => '0', 346getPathContext: () => '', 347getPathImage: () => '/image', 348getPathJavaScript: () => '/o/frontend-js-web', 349getPathMain: () => '/c', 350getPathThemeImages: () => 'https://www.roca.com/o/roca-restyle-theme/images', 351getPathThemeRoot: () => '/o/roca-restyle-theme', 352getPlid: () => '182441079', 353getPortalURL: () => 'https://www.roca.com', 354getRealUserId: () => '20103', 355getRemoteAddr: () => '10.210.223.20', 356getRemoteHost: () => '10.210.223.20', 357getScopeGroupId: () => '20126', 358getScopeGroupIdOrLiveGroupId: () => '20126', 359getSessionId: () => '', 360getSiteAdminURL: () => 'https://www.roca.com/group/roca/~/control_panel/manage?p_p_lifecycle=0&p_p_state=maximized&p_p_mode=view', 361getSiteGroupId: () => '20126', 362getTimeZone: () => 'UTC', 363getURLControlPanel: () => '/group/control_panel?refererPlid=182441079', 364getURLHome: () => 'https\x3a\x2f\x2fwww\x2eroca\x2ecom\x2fweb\x2froca\x2f', 365getUserEmailAddress: () => '', 366getUserId: () => '20103', 367getUserName: () => '', 368isAddSessionIdToURL: () => false, 369isImpersonated: () => false, 370isSignedIn: () => false, 371isStagedPortlet: () => false, 372isStateExclusive: () => false, 373isStateMaximized: () => false, 374isStatePopUp: () => false, 375}, 376Util: { 377Window: { 378 _map: {}, 379 getById: (id) => Liferay.Util.Window._map[id], 380}, 381openAlertModal: buildESMStub('frontend-js-components-web', 'openAlertModal'), 382openConfirmModal: buildESMStub('frontend-js-components-web', 'openConfirmModal'), 383openModal: buildESMStub('frontend-js-components-web', 'openModal'), 384openSelectionModal: buildESMStub('frontend-js-components-web', 'openSelectionModal'), 385openSimpleInputModal: buildESMStub('frontend-js-components-web', 'openSimpleInputModal'), 386openToast: buildESMStub('frontend-js-components-web', 'openToast'), 387}, 388authToken: 'wsR2YGfa', 389currentURL: '\x2fabout-roca\x2fnews', 390currentURLEncoded: '\x252Fabout-roca\x252Fnews', 391 392 }; 393 394 if (window.Liferay) { 395 merge(window.Liferay, __liferay); 396 } 397 else { 398 defineReadOnlyGlobal('Liferay', () => __liferay); 399 defineReadOnlyGlobal('themeDisplay', () => window.Liferay.ThemeDisplay); 400 } 401})(); 402</script>
402
402<script data-senna-track="permanent" src="/o/portal-url-builder-impl/Liferay.js" type="text/javascript"></script>
402<script data-senna-track="permanent" src="/combo?browserId=firefox&minifierType=js&languageId=en_GB&t=1789463949813&/o/frontend-js-aui-web/aui/aui/aui-min.js&/o/frontend-js-aui-web/liferay/modules.js&/o/frontend-js-aui-web/liferay/aui_sandbox.js&/o/frontend-js-aui-web/aui/attribute-base/attribute-base-min.js&/o/frontend-js-aui-web/aui/attribute-complex/attribute-complex-min.js&/o/frontend-js-aui-web/aui/attribute-core/attribute-core-min.js&/o/frontend-js-aui-web/aui/attribute-observable/attribute-observable-min.js&/o/frontend-js-aui-web/aui/attribute-extras/attribute-extras-min.js&/o/frontend-js-aui-web/aui/event-custom-base/event-custom-base-min.js&/o/frontend-js-aui-web/aui/event-custom-complex/event-custom-complex-min.js&/o/frontend-js-aui-web/aui/oop/oop-min.js&/o/frontend-js-aui-web/aui/aui-base-lang/aui-base-lang-min.js&/o/frontend-js-aui-web/liferay/dependency.js" type="text/javascript"></script>
402
402<script data-senna-track="permanent" src="/o/frontend-js-web/Liferay.js" type="text/javascript"></script>
402
402<script data-senna-track="permanent" type="module">await import(`@liferay/language/${Liferay.ThemeDisplay.getLanguageId()}/frontend-js-web/all.js`);</script>
402
402<script data-senna-track="temporary" type="text/javascript">window.__CONFIG__= {basePath: '', combine: true, defaultURLParams: null, explainResolutions: false, exposeGlobal: false, logLevel: 'warn', moduleType: 'module', namespace:'Liferay', nonce: '', reportMismatchedAnonymousModules: 'warn', resolvePath: '/o/js_resolve_modules', url: '/combo/?browserId=firefox&minifierType=js&languageId=en_GB&t=1789463949813&', waitTimeout: 57000};</script>
402<script data-senna-track="permanent" src="/o/frontend-js-loader-modules-extender/loader.js" type="text/javascript"></script>
402<script data-senna-track="temporary">Liferay.Icons = Liferay.Icons || {};Liferay.Icons.controlPanelSpritemap = 'https://www.roca.com/o/admin-theme/images/clay/icons.svg'; Liferay.Icons.spritemap = 'https://www.roca.com/o/roca-restyle-theme/images/clay/icons.svg';</script>
402
402<script data-senna-track="permanent" type="text/javascript">window.Liferay.CSP = {nonce: ''};</script>
402
402<script data-senna-track="permanent" src="/o/oauth2-provider-web/__liferay__/global.js" type="module"></script>
402
402<script data-senna-track="temporary" type="text/javascript">window.Liferay = Liferay || {}; window.Liferay.OAuth2 = {getAuthorizeURL: function() {return 'https://www.roca.com/o/oauth2/authorize';}, getBuiltInRedirectURL: function() {return 'https://www.roca.com/o/oauth2/redirect';}, getIntrospectURL: function() { return 'https://www.roca.com/o/oauth2/introspect';}, getTokenURL: function() {return 'https://www.roca.com/o/oauth2/token';}, getUserAgentApplication: function(externalReferenceCode) {return Liferay.OAuth2._userAgentApplications[externalReferenceCode];}, _userAgentApplications: {}}</script>
402<script data-senna-track="temporary" type="text/javascript" src="/o/roca-jquery-global-js/jquery-3.5.1.min.js"></script>
402<script data-senna-track="temporary" type="text/javascript" src="/o/roca-bootstrap-bundle-global-js/bootstrap.bundle.4.3.1.min.js"></script>
402<script data-senna-track="temporary" type="text/javascript">try {var MODULE_MAIN='[email protected]/index';var MODULE_PATH='/o/frontend-editor-alloyeditor-web';/** 403 * SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com 404 * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06 405 */ 406 407(function () { 408 AUI().applyConfig({ 409 groups: { 410 alloyeditor: { 411 base: MODULE_PATH + '/js/legacy/', 412 combine: Liferay.AUI.getCombine(), 413 filter: Liferay.AUI.getFilterConfig(), 414 modules: { 415 'liferay-alloy-editor': { 416 path: 'alloyeditor.js', 417 requires: [ 418 'aui-component', 419 'liferay-portlet-base', 420 'timers', 421 ], 422 }, 423 'liferay-alloy-editor-source': { 424 path: 'alloyeditor_source.js', 425 requires: [ 426 'aui-debounce', 427 'liferay-fullscreen-source-editor', 428 'liferay-source-editor', 429 'plugin', 430 ], 431 }, 432 'liferay-fullscreen-source-editor': { 433 path: 'fullscreen_source_editor.js', 434 requires: ['liferay-source-editor'], 435 }, 436 'liferay-source-editor': { 437 path: 'source_editor.js', 438 requires: ['aui-ace-editor'], 439 }, 440 }, 441 root: MODULE_PATH + '/js/legacy/', 442 }, 443 }, 444 }); 445})(); 446} catch(error) {console.error(error);}try {var MODULE_MAIN='@liferay/[email protected]/index';var MODULE_PATH='/o/image-uploader-web';/** 447 * SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com 448 * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06 449 */ 450 451(function () { 452 AUI().applyConfig({ 453 groups: { 454 imageuploaderweb: { 455 base: MODULE_PATH + '/js/legacy/', 456 combine: Liferay.AUI.getCombine(), 457 filter: Liferay.AUI.getFilterConfig(), 458 modules: { 459 'liferay-logo-editor': { 460 path: 'logo_editor.js', 461 requires: ['aui-image-cropper', 'liferay-portlet-base'], 462 }, 463 }, 464 root: MODULE_PATH + '/js/legacy/', 465 }, 466 }, 467 }); 468})(); 469} catch(error) {console.error(error);}try {var MODULE_MAIN='@liferay/[email protected]/index';var MODULE_PATH='/o/layout-js-components-web';/** 470 * SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com 471 * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06 472 */ 473 474(function () { 475 AUI().applyConfig({ 476 groups: { 477 layout: { 478 base: MODULE_PATH + '/js/legacy/', 479 combine: Liferay.AUI.getCombine(), 480 filter: Liferay.AUI.getFilterConfig(), 481 modules: { 482 'liferay-layout': { 483 path: 'layout.js', 484 }, 485 'liferay-layout-column': { 486 path: 'layout_column.js', 487 requires: ['aui-sortable-layout', 'dd'], 488 }, 489 }, 490 root: MODULE_PATH + '/js/legacy/', 491 }, 492 }, 493 }); 494})(); 495} catch(error) {console.error(error);}try {var MODULE_MAIN='[email protected]/index';var MODULE_PATH='/o/portal-search-web';/** 496 * SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com 497 * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06 498 */ 499 500(function () { 501 AUI().applyConfig({ 502 groups: { 503 search: { 504 base: MODULE_PATH + '/js/', 505 combine: Liferay.AUI.getCombine(), 506 filter: Liferay.AUI.getFilterConfig(), 507 modules: { 508 'liferay-search-custom-range-facet': { 509 path: 'custom_range_facet.js', 510 requires: ['aui-form-validator'], 511 }, 512 }, 513 root: MODULE_PATH + '/js/', 514 }, 515 }, 516 }); 517})(); 518} catch(error) {console.error(error);}try {var MODULE_MAIN='[email protected]/index';var MODULE_PATH='/o/portal-workflow-kaleo-designer-web';/** 519 * SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com 520 * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06 521 */ 522 523(function () { 524 AUI().applyConfig({ 525 groups: { 526 'kaleo-designer': { 527 base: MODULE_PATH + '/designer/js/legacy/', 528 combine: Liferay.AUI.getCombine(), 529 filter: Liferay.AUI.getFilterConfig(), 530 modules: { 531 'liferay-kaleo-designer-autocomplete-util': { 532 path: 'autocomplete_util.js', 533 requires: ['autocomplete', 'autocomplete-highlighters'], 534 }, 535 'liferay-kaleo-designer-definition-diagram-controller': { 536 path: 'definition_diagram_controller.js', 537 requires: [ 538 'liferay-kaleo-designer-field-normalizer', 539 'liferay-kaleo-designer-utils', 540 ], 541 }, 542 'liferay-kaleo-designer-dialogs': { 543 path: 'dialogs.js', 544 requires: ['liferay-util-window'], 545 }, 546 'liferay-kaleo-designer-editors': { 547 path: 'editors.js', 548 requires: [ 549 'aui-ace-editor', 550 'aui-ace-editor-mode-xml', 551 'aui-base', 552 'aui-datatype', 553 'aui-node', 554 'liferay-kaleo-designer-autocomplete-util', 555 'liferay-kaleo-designer-utils', 556 ], 557 }, 558 'liferay-kaleo-designer-field-normalizer': { 559 path: 'field_normalizer.js', 560 requires: ['liferay-kaleo-designer-remote-services'], 561 }, 562 'liferay-kaleo-designer-nodes': { 563 path: 'nodes.js', 564 requires: [ 565 'aui-datatable', 566 'aui-datatype', 567 'aui-diagram-builder', 568 'liferay-kaleo-designer-editors', 569 'liferay-kaleo-designer-utils', 570 ], 571 }, 572 'liferay-kaleo-designer-remote-services': { 573 path: 'remote_services.js', 574 requires: ['aui-io'], 575 }, 576 'liferay-kaleo-designer-templates': { 577 path: 'templates.js', 578 requires: ['aui-tpl-snippets-deprecated'], 579 }, 580 'liferay-kaleo-designer-utils': { 581 path: 'utils.js', 582 requires: [], 583 }, 584 'liferay-kaleo-designer-xml-definition': { 585 path: 'xml_definition.js', 586 requires: [ 587 'aui-base', 588 'aui-component', 589 'dataschema-xml', 590 'datatype-xml', 591 ], 592 }, 593 'liferay-kaleo-designer-xml-definition-serializer': { 594 path: 'xml_definition_serializer.js', 595 requires: ['escape', 'liferay-kaleo-designer-xml-util'], 596 }, 597 'liferay-kaleo-designer-xml-util': { 598 path: 'xml_util.js', 599 requires: ['aui-base'], 600 }, 601 'liferay-portlet-kaleo-designer': { 602 path: 'main.js', 603 requires: [ 604 'aui-ace-editor', 605 'aui-ace-editor-mode-xml', 606 'aui-tpl-snippets-deprecated', 607 'dataschema-xml', 608 'datasource', 609 'datatype-xml', 610 'event-valuechange', 611 'io-form', 612 'liferay-kaleo-designer-autocomplete-util', 613 'liferay-kaleo-designer-editors', 614 'liferay-kaleo-designer-nodes', 615 'liferay-kaleo-designer-remote-services', 616 'liferay-kaleo-designer-utils', 617 'liferay-kaleo-designer-xml-util', 618 'liferay-util-window', 619 ], 620 }, 621 }, 622 root: MODULE_PATH + '/designer/js/legacy/', 623 }, 624 }, 625 }); 626})(); 627} catch(error) {console.error(error);}try {var MODULE_MAIN='[email protected]/index';var MODULE_PATH='/o/staging-processes-web';/** 628 * SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com 629 * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06 630 */ 631 632(function () { 633 AUI().applyConfig({ 634 groups: { 635 stagingprocessesweb: { 636 base: MODULE_PATH + '/js/legacy/', 637 combine: Liferay.AUI.getCombine(), 638 filter: Liferay.AUI.getFilterConfig(), 639 modules: { 640 'liferay-staging-processes-export-import': { 641 path: 'main.js', 642 requires: [ 643 'aui-datatype', 644 'aui-dialog-iframe-deprecated', 645 'aui-modal', 646 'aui-parse-content', 647 'aui-toggler', 648 'liferay-portlet-base', 649 'liferay-util-window', 650 ], 651 }, 652 }, 653 root: MODULE_PATH + '/js/legacy/', 654 }, 655 }, 656 }); 657})(); 658} catch(error) {console.error(error);}try {var MODULE_MAIN='[email protected]/index';var MODULE_PATH='/o/exportimport-web';/** 659 * SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com 660 * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06 661 */ 662 663(function () { 664 AUI().applyConfig({ 665 groups: { 666 exportimportweb: { 667 base: MODULE_PATH + '/js/legacy/', 668 combine: Liferay.AUI.getCombine(), 669 filter: Liferay.AUI.getFilterConfig(), 670 modules: { 671 'liferay-export-import-export-import': { 672 path: 'main.js', 673 requires: [ 674 'aui-datatype', 675 'aui-dialog-iframe-deprecated', 676 'aui-modal', 677 'aui-parse-content', 678 'aui-toggler', 679 'liferay-portlet-base', 680 'liferay-util-window', 681 ], 682 }, 683 }, 684 root: MODULE_PATH + '/js/legacy/', 685 }, 686 }, 687 }); 688})(); 689} catch(error) {console.error(error);}try {var MODULE_MAIN='[email protected]/index';var MODULE_PATH='/o/frontend-js-components-web';/** 690 * SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com 691 * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06 692 */ 693 694(function () { 695 AUI().applyConfig({ 696 groups: { 697 components: { 698 699 // eslint-disable-next-line 700 mainModule: MODULE_MAIN, 701 }, 702 }, 703 }); 704})(); 705} catch(error) {console.error(error);}try {var MODULE_MAIN='[email protected]/index';var MODULE_PATH='/o/contacts-web';/** 706 * SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com 707 * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06 708 */ 709 710(function () { 711 AUI().applyConfig({ 712 groups: { 713 contactscenter: { 714 base: MODULE_PATH + '/js/legacy/', 715 combine: Liferay.AUI.getCombine(), 716 filter: Liferay.AUI.getFilterConfig(), 717 modules: { 718 'liferay-contacts-center': { 719 path: 'main.js', 720 requires: [ 721 'aui-io-plugin-deprecated', 722 'aui-toolbar', 723 'autocomplete-base', 724 'datasource-io', 725 'json-parse', 726 'liferay-portlet-base', 727 'liferay-util-window', 728 ], 729 }, 730 }, 731 root: MODULE_PATH + '/js/legacy/', 732 }, 733 }, 734 }); 735})(); 736} catch(error) {console.error(error);}try {var MODULE_MAIN='[email protected]/index';var MODULE_PATH='/o/frontend-editor-ckeditor-web';/** 737 * SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com 738 * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06 739 */ 740 741(function () { 742 AUI().applyConfig({ 743 groups: { 744 editor: { 745 base: MODULE_PATH + '/js/legacy/', 746 combine: Liferay.AUI.getCombine(), 747 filter: Liferay.AUI.getFilterConfig(), 748 modules: { 749 'inline-editor-ckeditor': { 750 path: 'main.js', 751 requires: [ 752 'array-invoke', 753 'liferay-inline-editor-base', 754 'node-event-simulate', 755 'overlay', 756 'yui-later', 757 ], 758 }, 759 'liferay-inline-editor-base': { 760 path: 'inline_editor_base.js', 761 requires: ['aui-base', 'aui-overlay-base-deprecated'], 762 }, 763 }, 764 root: MODULE_PATH + '/js/legacy/', 765 }, 766 }, 767 }); 768})(); 769} catch(error) {console.error(error);}try {var MODULE_MAIN='[email protected]/index';var MODULE_PATH='/o/dynamic-data-mapping-web';/** 770 * SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com 771 * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06 772 */ 773 774(function () { 775 const LiferayAUI = Liferay.AUI; 776 777 AUI().applyConfig({ 778 groups: { 779 ddm: { 780 base: MODULE_PATH + '/js/legacy/', 781 combine: Liferay.AUI.getCombine(), 782 filter: LiferayAUI.getFilterConfig(), 783 modules: { 784 'liferay-ddm-form': { 785 path: 'ddm_form.js', 786 requires: [ 787 'aui-base', 788 'aui-datatable', 789 'aui-datatype', 790 'aui-image-viewer', 791 'aui-parse-content', 792 'aui-set', 793 'aui-sortable-list', 794 'json', 795 'liferay-form', 796 'liferay-map-base', 797 'liferay-translation-manager', 798 'liferay-util-window', 799 ], 800 }, 801 'liferay-portlet-dynamic-data-mapping': { 802 condition: { 803 trigger: 'liferay-document-library', 804 }, 805 path: 'main.js', 806 requires: [ 807 'arraysort',
808 'aui-form-builder-deprecated', 809 'aui-form-validator', 810 'aui-map', 811 'aui-text-unicode', 812 'json', 813 'liferay-menu', 814 'liferay-translation-manager', 815 'liferay-util-window', 816 'text', 817 ], 818 }, 819 'liferay-portlet-dynamic-data-mapping-custom-fields': { 820 condition: { 821 trigger: 'liferay-document-library', 822 }, 823 path: 'custom_fields.js', 824 requires: ['liferay-portlet-dynamic-data-mapping'], 825 }, 826 'liferay-translation-manager': { 827 path: 'translation_manager.js', 828 requires: ['aui-base'], 829 }, 830 }, 831 root: MODULE_PATH + '/js/legacy/', 832 }, 833 }, 834 }); 835})(); 836} catch(error) {console.error(error);}try {var MODULE_MAIN='@liferay/[email protected]/index';var MODULE_PATH='/o/document-library-web';/** 837 * SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com 838 * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06 839 */ 840 841(function () { 842 AUI().applyConfig({ 843 groups: { 844 dl: { 845 base: MODULE_PATH + '/js/legacy/', 846 combine: Liferay.AUI.getCombine(), 847 filter: Liferay.AUI.getFilterConfig(), 848 modules: { 849 'document-library-upload-component': { 850 path: 'DocumentLibraryUpload.js', 851 requires: [ 852 'aui-component', 853 'aui-data-set-deprecated', 854 'aui-overlay-manager-deprecated', 855 'aui-overlay-mask-deprecated', 856 'aui-parse-content', 857 'aui-progressbar', 858 'aui-template-deprecated', 859 'liferay-search-container', 860 'querystring-parse-simple', 861 'uploader', 862 ], 863 }, 864 }, 865 root: MODULE_PATH + '/js/legacy/', 866 }, 867 }, 868 }); 869})(); 870} catch(error) {console.error(error);}try {var MODULE_MAIN='[email protected]/index';var MODULE_PATH='/o/calendar-web';/** 871 * SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com 872 * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06 873 */ 874 875(function () { 876 AUI().applyConfig({ 877 groups: { 878 calendar: { 879 base: MODULE_PATH + '/js/legacy/', 880 combine: Liferay.AUI.getCombine(), 881 filter: Liferay.AUI.getFilterConfig(), 882 modules: { 883 'liferay-calendar-a11y': { 884 path: 'calendar_a11y.js', 885 requires: ['calendar'], 886 }, 887 'liferay-calendar-container': { 888 path: 'calendar_container.js', 889 requires: [ 890 'aui-alert', 891 'aui-base', 892 'aui-component', 893 'liferay-portlet-base', 894 ], 895 }, 896 'liferay-calendar-date-picker-sanitizer': { 897 path: 'date_picker_sanitizer.js', 898 requires: ['aui-base'], 899 }, 900 'liferay-calendar-interval-selector': { 901 path: 'interval_selector.js', 902 requires: ['aui-base', 'liferay-portlet-base'], 903 }, 904 'liferay-calendar-interval-selector-scheduler-event-link': { 905 path: 'interval_selector_scheduler_event_link.js', 906 requires: ['aui-base', 'liferay-portlet-base'], 907 }, 908 'liferay-calendar-list': { 909 path: 'calendar_list.js', 910 requires: [ 911 'aui-template-deprecated', 912 'liferay-scheduler', 913 ], 914 }, 915 'liferay-calendar-message-util': { 916 path: 'message_util.js', 917 requires: ['liferay-util-window'], 918 }, 919 'liferay-calendar-recurrence-converter': { 920 path: 'recurrence_converter.js', 921 requires: [], 922 }, 923 'liferay-calendar-recurrence-dialog': { 924 path: 'recurrence.js', 925 requires: [ 926 'aui-base', 927 'liferay-calendar-recurrence-util', 928 ], 929 }, 930 'liferay-calendar-recurrence-util': { 931 path: 'recurrence_util.js', 932 requires: ['aui-base', 'liferay-util-window'], 933 }, 934 'liferay-calendar-reminders': { 935 path: 'calendar_reminders.js', 936 requires: ['aui-base'], 937 }, 938 'liferay-calendar-remote-services': { 939 path: 'remote_services.js', 940 requires: [ 941 'aui-base', 942 'aui-component', 943 'liferay-calendar-util', 944 'liferay-portlet-base', 945 ], 946 }, 947 'liferay-calendar-session-listener': { 948 path: 'session_listener.js', 949 requires: ['aui-base', 'liferay-scheduler'], 950 }, 951 'liferay-calendar-simple-color-picker': { 952 path: 'simple_color_picker.js', 953 requires: ['aui-base', 'aui-template-deprecated'], 954 }, 955 'liferay-calendar-simple-menu': { 956 path: 'simple_menu.js', 957 requires: [ 958 'aui-base', 959 'aui-template-deprecated', 960 'event-outside', 961 'event-touch', 962 'widget-modality', 963 'widget-position', 964 'widget-position-align', 965 'widget-position-constrain', 966 'widget-stack', 967 'widget-stdmod', 968 ], 969 }, 970 'liferay-calendar-util': { 971 path: 'calendar_util.js', 972 requires: [ 973 'aui-datatype', 974 'aui-io', 975 'aui-scheduler', 976 'aui-toolbar', 977 'autocomplete', 978 'autocomplete-highlighters', 979 ], 980 }, 981 'liferay-scheduler': { 982 path: 'scheduler.js', 983 requires: [ 984 'async-queue', 985 'aui-datatype', 986 'aui-scheduler', 987 'dd-plugin', 988 'liferay-calendar-a11y', 989 'liferay-calendar-message-util', 990 'liferay-calendar-recurrence-converter', 991 'liferay-calendar-recurrence-util', 992 'liferay-calendar-util', 993 'liferay-scheduler-event-recorder', 994 'liferay-scheduler-models', 995 'promise', 996 'resize-plugin', 997 ], 998 }, 999 'liferay-scheduler-event-recorder': { 1000 path: 'scheduler_event_recorder.js', 1001 requires: [ 1002 'dd-plugin', 1003 'liferay-calendar-util', 1004 'resize-plugin', 1005 ], 1006 }, 1007 'liferay-scheduler-models': { 1008 path: 'scheduler_models.js', 1009 requires: [ 1010 'aui-datatype', 1011 'dd-plugin', 1012 'liferay-calendar-util', 1013 ], 1014 }, 1015 }, 1016 root: MODULE_PATH + '/js/legacy/', 1017 }, 1018 }, 1019 }); 1020})(); 1021} catch(error) {console.error(error);}try {var MODULE_MAIN='@liferay/[email protected]/index';var MODULE_PATH='/o/frontend-js-state-web';/** 1022 * SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com 1023 * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06 1024 */ 1025 1026(function () { 1027 AUI().applyConfig({ 1028 groups: { 1029 state: { 1030 1031 // eslint-disable-next-line 1032 mainModule: MODULE_MAIN, 1033 }, 1034 }, 1035 }); 1036})(); 1037} catch(error) {console.error(error);}try {var MODULE_MAIN='[email protected]/index';var MODULE_PATH='/o/site-navigation-menu-web';/** 1038 * SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com 1039 * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06 1040 */ 1041 1042(function () { 1043 AUI().applyConfig({ 1044 groups: { 1045 navigationmenuweb: { 1046 base: MODULE_PATH + '/js/legacy/', 1047 combine: Liferay.AUI.getCombine(), 1048 filter: Liferay.AUI.getFilterConfig(), 1049 modules: { 1050 'liferay-navigation-interaction': { 1051 path: 'navigation_interaction.js', 1052 plugins: { 1053 'liferay-navigation-interaction-touch': { 1054 condition: { 1055 name: 'liferay-navigation-interaction-touch', 1056 test(A) { 1057 return A.UA.touchEnabled; 1058 }, 1059 trigger: 'liferay-navigation-interaction', 1060 }, 1061 }, 1062 }, 1063 requires: [ 1064 'aui-base', 1065 'aui-component', 1066 'event-mouseenter', 1067 'node-focusmanager', 1068 'plugin', 1069 ], 1070 }, 1071 'liferay-navigation-interaction-touch': { 1072 path: 'navigation_interaction_touch.js', 1073 requires: [ 1074 'event-tap', 1075 'event-touch', 1076 'liferay-navigation-interaction', 1077 ], 1078 }, 1079 }, 1080 root: MODULE_PATH + '/js/legacy/', 1081 }, 1082 }, 1083 }); 1084})(); 1085} catch(error) {console.error(error);}try {var MODULE_MAIN='@liferay/[email protected]/index';var MODULE_PATH='/o/frontend-js-react-web';/** 1086 * SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com 1087 * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06 1088 */ 1089 1090(function () { 1091 AUI().applyConfig({ 1092 groups: { 1093 react: { 1094 1095 // eslint-disable-next-line 1096 mainModule: MODULE_MAIN, 1097 }, 1098 }, 1099 }); 1100})(); 1101} catch(error) {console.error(error);}</script>
1101
1101<script type="text/javascript" data-senna-track="temporary"> 1102 // <![CDATA[ 1103 1104 1105 1106 1107 1108 1109 1110 1111 // ]]> 1112</script>
1112 <link class="lfr-css-file" data-senna-track="temporary" href="https://www.roca.com/o/roca-restyle-theme/css/main.css?browserId=firefox&themeId=rocarestyletheme_WAR_rocarestyletheme&minifierType=css&languageId=en_GB&t=1789464090000" id="liferayThemeCSS" rel="stylesheet" type="text/css" /> <style data-senna-track="temporary" type="text/css"> 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 </style>
1132<script> 1133 // Define dataLayer and the gtag function. 1134 window.dataLayer = window.dataLayer || []; 1135 function gtag(){dataLayer.push(arguments);} 1136 1137 // Default ad_storage to 'denied'. 1138 gtag('consent', 'default', { 1139 ad_storage: "denied", 1140 analytics_storage: "granted", 1141 functionality_storage: "granted", 1142 personalization_storage: "denied", 1143 security_storage: "granted", 1144 ad_user_data: "denied", 1145 ad_personalization: "denied", 1146 'wait_for_update': 500 1147 }); 1148 </script>
1148 <!-- One Trust Cookie Banner -->
1148<script type="text/javascript" src="https://cdn.cookielaw.org/consent/eccc3a1b-10ac-4792-8f68-26cc80c4c587/OtAutoBlock.js"></script>
1148
1148<script src="https://cdn.cookielaw.org/scripttemplates/otSDKStub.js" data-document-language="true" type="text/javascript" charset="UTF-8" data-domain-script="eccc3a1b-10ac-4792-8f68-26cc80c4c587"></script>
1148
1148<script type="text/javascript"> 1149 function OptanonWrapper() {} 1150 </script>
1150 <!-- End One Trust Cookie Banner -->
1150<script src="https://www.roca.com/o/roca-restyle-theme/js/lib/slick.min.js?v1"></script>
1150
1151<script>(window.BOOMR_mq=window.BOOMR_mq||[]).push(["addVar",{"rua.upush":"false","rua.cpush":"true","rua.upre":"false","rua.cpre":"true","rua.uprl":"false","rua.cprl":"false","rua.cprf":"false","rua.trans":"SJ-5c3127d1-a968-4cf0-b5cb-79c9182ddfdf","rua.cook":"false","rua.ims":"false","rua.ufprl":"false","rua.cfprl":"true","rua.isuxp":"false","rua.texp":"norulematch","rua.ceh":"false","rua.ueh":"false","rua.ieh.st":"0"}]);</script>
1151 1152
1152<script>!function(e){var n="https://s.go-mpulse.net/boomerang/";if("False"=="True")e.BOOMR_config=e.BOOMR_config||{},e.BOOMR_config.PageParams=e.BOOMR_config.PageParams||{},e.BOOMR_config.PageParams.pci=!0,n="https://s2.go-mpulse.net/boomerang/";if(window.BOOMR_API_key="FMCXR-DKM5M-72WB7-5U3BC-3Q7L7",function(){function e(){if(!i){var e=document.createElement("script");e.id="boomr-scr-as",e.src=window.BOOMR.url,e.async=!0,o.parentNode.appendChild(e),i=!0}}function t(e){i=!0;var n,t,a,r,d=document,O=window;if(window.BOOMR.snippetMethod=e?"if":"i",t=function(e,n){var t=d.createElement("script");t.id=n||"boomr-if-as",t.src=window.BOOMR.url,BOOMR_lstart=(new Date).getTime(),e=e||d.body,e.appendChild(t)},!window.addEventListener&&window.attachEvent&&navigator.userAgent.match(/MSIE [67]\./))return window.BOOMR.snippetMethod="s",void t(o.parentNode,"boomr-async");a=document.createElement("IFRAME"),a.src="about:blank",a.title="",a.role="presentation",a.loading="eager",r=(a.frameElement||a).style,r.width=0,r.height=0,r.border=0,r.display="none",o.parentNode.appendChild(a);try{O=a.contentWindow,d=O.document.open()}catch(_){n=document.domain,a.src="javascript:var d=document.open();d.domain='"+n+"';void(0);",O=a.contentWindow,d=O.document.open()}if(n)d._boomrl=function(){this.domain=n,t()},d.write("<bo"+"dy onload='document._boomrl();'>");else if(O._boomrl=function(){t()},O.addEventListener)O.addEventListener("load",O._boomrl,!1);else if(O.attachEvent)O.attachEvent("onload",O._boomrl);d.close()}function a(e){window.BOOMR_onload=e&&e.timeStamp||(new Date).getTime()}if(!window.BOOMR||!window.BOOMR.version&&!window.BOOMR.snippetExecuted){window.BOOMR=window.BOOMR||{},window.BOOMR.snippetStart=(new Date).getTime(),window.BOOMR.snippetExecuted=!0,window.BOOMR.snippetVersion=12,window.BOOMR.url=n+"FMCXR-DKM5M-72WB7-5U3BC-3Q7L7";var o=document.currentScript||document.getElementsByTagName("script")[0],i=!1,r=document.createElement("link");if(r.relList&&"function"==typeof r.relList.supports&&r.relList.supports("preload")&&"as"in r)window.BOOMR.snippetMethod="p",r.href=window.BOOMR.url,r.rel="preload",r.as="script",r.addEventListener("load",e),r.addEventListener("error",function(){t(!0)}),setTimeout(function(){if(!i)t(!0)},3e3),BOOMR_lstart=(new Date).getTime(),o.parentNode.appendChild(r);else t(!1);if(window.addEventListener)window.addEventListener("load",a,!1);else if(window.attachEvent)window.attachEvent("onload",a)}}(),"".length>0)if(e&&"performance"in e&&e.performance&&"function"==typeof e.performance.setResourceTimingBufferSize)e.performance.setResourceTimingBufferSize();!function(){if(BOOMR=e.BOOMR||{},BOOMR.plugins=BOOMR.plugins||{},!BOOMR.plugins.AK){var n="true"=="true"?1:0,t="",a="wxluctixzcofi2v6kgxa-f-f4de6426e-clientnsv4-s.akamaihd.net",o="false"=="true"?2:1,i={"ak.v":"41","ak.cp":"1516484","ak.ai":parseInt("963523",10),"ak.ol":"0","ak.cr":0,"ak.ipv":4,"ak.proto":"http/1.1","ak.rid":"aa04b28","ak.r":44386,"ak.a2":n,"ak.m":"dsca","ak.n":"essl","ak.cport":28029,"ak.gh":"23.192.164.84","ak.quicv":"","ak.tlsv":"tls1.2","ak.0rtt":"","ak.0rtt.ed":"","ak.csrc":"-","ak.acc":"bbr","ak.t":"1790857646","ak.ak":"hOBiQwZUYzCg5VSAfCLimQ==1KEX0mB7EDwPgB2lU+ePYUIbtG6StslWzy1C1L11JRwQJ6eVcYOO95Az9YxrlngbQMQCug8PhJ5sQQ7iXPqTSuOiO5dLQPjqWetD9iC9oardjcvuqWOE1EKz/9Z3ubNESYzTwerlpx7CqZpnEl+PqtCUxWZoI5nTxGB4hBA8Kmd35HyYRBM7WjfimfyAW888/Sfs8WoxMB2Byd/SrsCSmjHKYUaELI7O21l5kkTeFY7Ye71Mi5Lr3XO/tUpVIGiMCpLDVAjeHWD65ted3/gwY99BKOf+EIcFf4fmkF2CcGoSRXLVxW4n9FBxHnzSr0qbSuXJKjHvagv/+Hi0l22XESXMYS0IkDo3Z/rgI/eBz0lKJUVWnQIed5hZ+WqGwHbJcSA6Ys4stiaw1qq0Y+0HeYdYxZGw1rW9fec9h2+cSBI=","ak.pv":"15","ak.dpoabenc":"","ak.tf":o};if(""!==t)i["ak.ruds"]=t;var r={i:!1,av:function(n){var t="http.initiator";if(n&&(!n[t]||"spa_hard"===n[t]))i["ak.feo"]=void 0!==e.aFeoApplied?1:0,BOOMR.addVar(i)},rv:function(){var e=["ak.cport","ak.cr","ak.csrc","ak.gh","ak.ipv","ak.m","ak.n","ak.ol","ak.proto","ak.quicv","ak.tlsv","ak.0rtt","ak.0rtt.ed","ak.r","ak.acc","ak.t","ak.tf"];BOOMR.removeVar(e)}};BOOMR.plugins.AK={akVars:i,akDNSPreFetchDomain:a,init:function(){if(!r.i){var e=BOOMR.subscribe;e("before_beacon",r.av,null,null),e("onbeacon",r.rv,null,null),r.i=!0}return this},is_complete:function(){return!0}}}}()}(window);</script>
1152</head> <body class="firefox controls-visible yui3-skin-sam guest-site signed-out public-page site "> <!-- Google Tag Manager -->
vendor: 63 bytes, line 1152
1152 <noscript> <iframe src="//www.googletagmanager.com/ns.html?id=
1152GTM-P9R8ZPM3
vendor: 84 bytes, line 1152
1152" height="0" width="0" style="display:none;visibility:hidden"></iframe> </noscript>
1152<script>
vendor: 317 bytes, line 1152
1152(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src='//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);})(window,document,'script','dataLayer','
1152GTM-P9R8ZPM3
vendor: 3 bytes, line 1152
1152');
1152</script>
1152 <!-- End Google Tag Manager --> <!-- Google Tag Manager -->
vendor: 63 bytes, line 1152
1152 <noscript> <iframe src="//www.googletagmanager.com/ns.html?id=
1152GTM-W7ZS3T
vendor: 84 bytes, line 1152
1152" height="0" width="0" style="display:none;visibility:hidden"></iframe> </noscript>
1152<script>
vendor: 317 bytes, line 1152
1152(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src='//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);})(window,document,'script','dataLayer','
1152GTM-W7ZS3T
vendor: 3 bytes, line 1152
1152');
1152</script>
1152 <!-- End Google Tag Manager --> <div class="container-fluid aux-wrapper"> <header id="roca-restyle-header" class="roca-restyle-header js-header "> <div class="main-header__wrapper"> <div class="main-navbar"> <section class="supramenu"> <div class="container"> <div class="row"> <div class="col-12 supramenu-cols"> <div class="supramenu-left"> <ul class="supramenu__list supramenu__list--left"> <li class="supramenu__item"><a class="supramenu__link" href="/about-roca/news" target=""><div><span>News </span></div></a></li><li class="supramenu__item"><a class="supramenu__link" href="/launches/brochures-downloads" target=""><img class="icon-right-space" alt="" data-fileentryid="346442418" src="/documents/20126/346080475/book-opened.svg/2dd01c26-92e4-8dff-c86e-85c72ac5e946?t=1753429188789" title="2025 Catalogues " style="" /><div><span>2025 Catalogues </span></div></a></li><li class="supramenu__item"><a class="supramenu__link" href="/where-to-find-us" target=""><img class="icon-right-space" alt="" data-fileentryid="346080678" src="/documents/20126/346080475/location.svg/f878b6f9-76fd-a3d8-c494-938d6fcae04b?t=1753429133504" title="Where to find us " style="" /><div><span>Where to find us </span></div></a></li><li class="supramenu__item"><a class="supramenu__link" href="/products" target=""><img class="icon-right-space" alt="" data-fileentryid="346080690" src="/documents/20126/346080475/exit.svg/4f2c42a8-cabc-3e9c-d179-b3c0adad624c?t=1753429136975" title="Go to local site " style="" /><div><span>Go to local site </span></div></a></li> </ul> </div> </div> </div> </div> </section> <section class="main-nav js-main-nav"> <div class="main-nav-container container"> <div class="d-flex align-items-center justify-content-between"> <div class="logo-search-header"> <div class="js-h-hamburger menu-trigger"> <a href="javascript:void(0)" data-target="main-menu-collapse"> <span class="icon-hamburger"></span> </a> </div> <div class="logo-header"> <a href="/" target=""> <img alt="" data-fileentryid="346080477" src="/documents/20126/346080475/roca-logo.svg/4dc29d13-1df3-b628-786b-7c63db57cdcd?t=1753429104544" style="" /> </a> </div> </div> <nav class="main-menu__wrapper"> <ul class="main-menu__list" id="id001"> <li class="main-menu__item js-collapse-sm"> <div class="link-wrapper"> <a class="main-menu__link" href="/launches/" target="_self"> New launches </a> </div> <div id="menu-section-1" class="js-menu-collapse dropdown-menu mega-menu"> <div class="wrapper"> <section> <div class="container"> <div class="row"> <div class="main-content col-12"> <div class="header-menu"> New launches </div> <div class="wrapper"> <ul class="row"> <li class="col-xl-3 col-lg-3 col-4"><a href="/meridian" target=""><div><span>Meridian collection</span></div></a></li><li class="col-xl-3 col-lg-3 col-4"><a href="/kay" target=""><div><span>Kay collection</span></div></a></li><li class="col-xl-3 col-lg-3 col-4"><a href="/ohtake" target=""><div><span>Ohtake collection</span></div></a></li><li class="col-xl-3 col-lg-3 col-4"><a href="/smart-toilets/in-wash-vorea" target=""><div><span>In-Wash® Vorea</span></div></a></li><li class="col-xl-3 col-lg-3 col-4"><a href="/aquafy" target=""><div><span>Roca Aquafy</span></div></a></li><li class="col-xl-3 col-lg-3 col-4"><a href="/targa" target=""><div><span>Targa collection</span></div></a></li><li class="col-xl-3 col-lg-3 col-4"><a href="/connect" target=""><div><span>Roca Connect</span></div></a></li><li class="col-xl-3 col-lg-3 col-4"><a href="/avant" target="_self"><div><span>Avant</span></div></a></li> </ul> </div> </div> </div> </div> </section> </div> </div> </li> <li class="main-menu__item js-collapse-sm"> <div class="link-wrapper"> <a class="main-menu__link" href="/professional-area" target="_self"> Professional Area </a> </div> <div id="menu-section-2" class="js-menu-collapse dropdown-menu mega-menu"> <div class="wrapper"> <section> <div class="container"> <div class="row"> <div class="main-content col-xl-8 col-lg-8 col-12"> <div class="header-menu"> Professional Area </div> <div class="wrapper"> <ul class="row">
1152 <li class="main-menu__section col-xl-3 col-lg-3 col-4"><span class="main-menu__sublist-title">Tools <span class="icon-chevron-up" data-toggle="collapse" href="#main-menu-1__section-0" role="button" aria-expanded="true"></span></span><ul id="main-menu-1__section-0" class="row collapse show main-menu__sublist"><li class="col-xl-12 col-lg-12 col-4"><a href="/professional-area/spare-parts-catalogue" target=""><div><span>Spare Parts Catalogue</span></div></a></li><li class="col-xl-12 col-lg-12 col-4"><a href="/professional-area/videos" target=""><div><span>Installation manuals & videos</span></div></a></li><li class="col-xl-12 col-lg-12 col-4"><a href="/products/brochures-downloads" target=""><div><span>Brochures</span></div></a></li><li class="col-xl-12 col-lg-12 col-4"><a href="/sustainability/certificates-and-declarations" target=""><div><span>Product & environmental certifications</span></div></a></li><li class="col-xl-12 col-lg-12 col-4"><a href="/professional-area/downloads-center" target=""><div><span>Downloads center (manuals, drawings, CADs)</span></div></a></li><li class="col-xl-12 col-lg-12 col-4"><a href="/professional-area/bim-objects" target=""><div><span>BIM objects</span></div></a></li><li class="col-xl-12 col-lg-12 col-4"><a href="/professional-area/3d-bathroom-planner" target=""><div><span>Blophome (3D Planner)</span></div></a></li><li class="col-xl-12 col-lg-12 col-4"><a href="/professional-area/rocagallery" target=""><div><span>Roca gallery platform</span></div></a></li><li class="col-xl-12 col-lg-12 col-4"><a href="/materials-technologies" target=""><div><span>Materials & Technologies</span></div></a></li></ul></li><li class="main-menu__section col-xl-3 col-lg-3 col-4"><span class="main-menu__sublist-title">Projects <span class="icon-chevron-up" data-toggle="collapse" href="#main-menu-1__section-1" role="button" aria-expanded="true"></span></span><ul id="main-menu-1__section-1" class="row collapse show main-menu__sublist"><li class="col-xl-12 col-lg-12 col-4"><a href="/professional-area/custom-projects-support/case-studies" target=""><div><span>Project case studies</span></div></a></li><li class="col-xl-12 col-lg-12 col-4"><a href="/professional-area/custom-projects-support/" target=""><div><span>Custom projects</span></div></a></li></ul></li><li class="main-menu__section col-xl-3 col-lg-3 col-4"><span class="main-menu__sublist-title">Where to find us <span class="icon-chevron-up" data-toggle="collapse" href="#main-menu-1__section-2" role="button" aria-expanded="true"></span></span><ul id="main-menu-1__section-2" class="row collapse show main-menu__sublist"><li class="col-xl-12 col-lg-12 col-4"><a href="/galleries" target=""><div><span>Roca Galleries</span></div></a></li><li class="col-xl-12 col-lg-12 col-4"><a href="/professional-area/fairs-events" target=""><div><span>Fairs & Events</span></div></a></li><li class="col-xl-12 col-lg-12 col-4"><a href="/professional-area/design-competitions" target=""><div><span>Design competitions</span></div></a></li><li class="col-xl-12 col-lg-12 col-4"><a href="/about-roca/roca-around-the-world/roca-offices" target=""><div><span>Roca offices worldwide</span></div></a></li></ul></li> </ul> </div> </div> <div id="banner-2" class="banner-content col-xl-4 col-lg-4 col-12"> <div class="menu-carousel-container "> <div class="menu-carousel-buttons"> <button class="menu-carousel-button prev icon-chevron-left disabled" onclick="showMenuCarouselItem('banner-2', -1);"></button> <button class="menu-carousel-button next icon-chevron-right" onclick="showMenuCarouselItem('banner-2', 1);"></button> </div> <div class="menu-carousel" data-index="0"> <div class="menu-carousel-item" style="background-image: url('/documents/20126/247121/recursos_profesionales_2.jpg/5e2f2a32-2084-4664-1714-e465acaf6ca9?t=1565609646201');"><a href="/professional-area" target=""><span>Go to professional area </span></a></div> </div> </div> </div> </div> </div> </section> </div> </div> </li> <li class="main-menu__item js-collapse-sm"> <div class="link-wrapper"> <a class="main-menu__link" href="/sustainability" target="_self"> Sustainability </a> </div> <div id="menu-section-3" class="js-menu-collapse dropdown-menu mega-menu"> <div class="wrapper"> <section> <div class="container"> <div class="row"> <div class="main-content col-xl-6 col-lg-6 col-12"> <div class="header-menu"> Sustainability </div> <div class="wrapper"> <ul class="row"> <li class="col-xl-12 col-lg-12 col-4"><a href="/sustainability/ecodesign" target="_self"><div><span>EcoDesign</span></div></a></li><li class="col-xl-12 col-lg-12 col-4"><a href="/sustainability/responsible-production" target="_self"><div><span>Responsible Production</span></div></a></li><li class="col-xl-12 col-lg-12 col-4"><a href="/sustainability/commitment-society" target="_self"><div><span>Commitment to Society</span></div></a></li><li class="col-xl-12 col-lg-12 col-4"><a href="/sustainability/ecovadis" target=""><div><span>EcoVadis Platinum Medal</span></div></a></li><li class="col-xl-12 col-lg-12 col-4"><a href="/sustainability/sdg" target="_self"><div><span>Sustainable Development Goals</span></div></a></li> </ul> </div> </div> <div id="banner-3" class="banner-content col-xl-6 col-lg-6 col-12"> <div class="menu-carousel-container two"> <div class="menu-carousel-buttons"> <button class="menu-carousel-button prev icon-chevron-left disabled" onclick="showMenuCarouselItem('banner-3', -1);"></button> <button class="menu-carousel-button next icon-chevron-right" onclick="showMenuCarouselItem('banner-3', 1);"></button> </div> <div class="menu-carousel" data-index="0"> <div class="menu-carousel-item" style="background-image: url('/documents/20126/0/wearewater_foundation+%281%29.jpg/fa7cb483-b3e4-5ed8-07ed-5164b640da0f?t=1757929915381');"><a href="https://www.wearewater.org" target="_blank"><span>We Are Water Foundation</span></a></div><div class="menu-carousel-item" style="background-image: url('/documents/20126/236919/certificates_declarations.jpg/fc035a6d-f838-caf8-b79e-d8181607519b?t=1731261895074');"><a href="/sustainability/certificates-and-declarations" target="_self"><span>Certificates & Declarations</span></a></div> </div> </div> </div> </div> </div> </section> </div> </div> </li> <li class="main-menu__item js-collapse-sm"> <div class="link-wrapper"> <a class="main-menu__link" href="/about-roca" target=""> About us </a> </div> <div id="menu-section-4" class="js-menu-collapse dropdown-menu mega-menu"> <div class="wrapper"> <section> <div class="container"> <div class="row"> <div class="main-content col-12"> <div class="header-menu"> About us </div> <div class="wrapper"> <ul class="row">
1152 <li class="col-xl-3 col-lg-3 col-4"><a href="/about-roca" target=""><div><span>Who we are</span></div></a></li><li class="col-xl-3 col-lg-3 col-4"><a href="/about-roca/roca-history" target=""><div><span>Our history</span></div></a></li><li class="col-xl-3 col-lg-3 col-4"><a href="/about-roca/design-innovation/manufacturing-processes" target=""><div><span>Manufacturing processes</span></div></a></li><li class="col-xl-3 col-lg-3 col-4"><a href="/about-roca/roca-around-the-world" target=""><div><span>International presence</span></div></a></li><li class="col-xl-3 col-lg-3 col-4"><a href="/about-roca/annual-reports" target=""><div><span>Annual Reports</span></div></a></li><li class="col-xl-3 col-lg-3 col-4"><a href="/about-roca/roca-group-ventures" target=""><div><span>Roca Group Ventures</span></div></a></li><li class="col-xl-3 col-lg-3 col-4"><a href="https://rocagroup.whispli.com/lp/speakup" target="_blank"><div><span>Speak up platform</span></div></a></li> </ul> </div> </div> </div> </div> </section> </div> </div> </li> </ul> </nav> </div> </div> </section> <div class="r-modal main-menu-collapse"> <div class="r-modal__wrapper"> <div class="main-submenu__list" id="clpsMbM-0" style="display: none;"> <div class="container"> <div class="row"> <div class="col-12"> <button class="arrow" type="button" onclick="showMobileSubmenu('clpsMbM-0', true);"> Back </button> </div> <div class="col-12"> <span class="main-submenu__title">New launches</span> </div> </div> <ul class="row"> <li class="col-12 align-items-start"><a href="/meridian" target=""><div><span>Meridian collection</span></div></a></li><li class="col-12 align-items-start"><a href="/kay" target=""><div><span>Kay collection</span></div></a></li><li class="col-12 align-items-start"><a href="/ohtake" target=""><div><span>Ohtake collection</span></div></a></li><li class="col-12 align-items-start"><a href="/smart-toilets/in-wash-vorea" target=""><div><span>In-Wash® Vorea</span></div></a></li><li class="col-12 align-items-start"><a href="/aquafy" target=""><div><span>Roca Aquafy</span></div></a></li><li class="col-12 align-items-start"><a href="/targa" target=""><div><span>Targa collection</span></div></a></li><li class="col-12 align-items-start"><a href="/connect" target=""><div><span>Roca Connect</span></div></a></li><li class="col-12 align-items-start"><a href="/avant" target="_self"><div><span>Avant</span></div></a></li> </ul> </div> </div> <div class="main-submenu__list" id="clpsMbM-1" style="display: none;"> <div class="container"> <div class="row"> <div class="col-12"> <button class="arrow" type="button" onclick="showMobileSubmenu('clpsMbM-1', true);"> Back </button> </div> <div class="col-12"> <span class="main-submenu__title">Professional Area</span> </div> </div> <ul class="row"> <li class="main-menu__section col-xl-3 col-lg-3 col-4"><span class="main-menu__sublist-title">Tools<span class="icon-chevron-up" data-toggle="collapse" href="#main-menu-mb-1__section-0" role="button" aria-expanded="true"></span></span><ul id="main-menu-mb-1__section-0" class="row collapse show main-menu__sublist"><li class="col-12 align-items-start"><a href="/professional-area/spare-parts-catalogue" target=""><div><span>Spare Parts Catalogue</span></div></a></li><li class="col-12 align-items-start"><a href="/professional-area/videos" target=""><div><span>Installation manuals & videos</span></div></a></li><li class="col-12 align-items-start"><a href="/products/brochures-downloads" target=""><div><span>Brochures</span></div></a></li><li class="col-12 align-items-start"><a href="/sustainability/certificates-and-declarations" target=""><div><span>Product & environmental certifications</span></div></a></li><li class="col-12 align-items-start"><a href="/professional-area/downloads-center" target=""><div><span>Downloads center (manuals, drawings, CADs)</span></div></a></li><li class="col-12 align-items-start"><a href="/professional-area/bim-objects" target=""><div><span>BIM objects</span></div></a></li><li class="col-12 align-items-start"><a href="/professional-area/3d-bathroom-planner" target=""><div><span>Blophome (3D Planner)</span></div></a></li>
1152<li class="col-12 align-items-start"><a href="/professional-area/rocagallery" target=""><div><span>Roca gallery platform</span></div></a></li><li class="col-12 align-items-start"><a href="/materials-technologies" target=""><div><span>Materials & Technologies</span></div></a></li></ul></li><li class="main-menu__section col-xl-3 col-lg-3 col-4"><span class="main-menu__sublist-title">Projects<span class="icon-chevron-up" data-toggle="collapse" href="#main-menu-mb-1__section-1" role="button" aria-expanded="true"></span></span><ul id="main-menu-mb-1__section-1" class="row collapse show main-menu__sublist"><li class="col-12 align-items-start"><a href="/professional-area/custom-projects-support/case-studies" target=""><div><span>Project case studies</span></div></a></li><li class="col-12 align-items-start"><a href="/professional-area/custom-projects-support/" target=""><div><span>Custom projects</span></div></a></li></ul></li><li class="main-menu__section col-xl-3 col-lg-3 col-4"><span class="main-menu__sublist-title">Where to find us<span class="icon-chevron-up" data-toggle="collapse" href="#main-menu-mb-1__section-2" role="button" aria-expanded="true"></span></span><ul id="main-menu-mb-1__section-2" class="row collapse show main-menu__sublist"><li class="col-12 align-items-start"><a href="/galleries" target=""><div><span>Roca Galleries</span></div></a></li><li class="col-12 align-items-start"><a href="/professional-area/fairs-events" target=""><div><span>Fairs & Events</span></div></a></li><li class="col-12 align-items-start"><a href="/professional-area/design-competitions" target=""><div><span>Design competitions</span></div></a></li><li class="col-12 align-items-start"><a href="/about-roca/roca-around-the-world/roca-offices" target=""><div><span>Roca offices worldwide</span></div></a></li></ul></li> </ul> <div class="row"> <div id="banner-mb-2" class="banner-content col-xl-4 col-lg-4 col-12"> <div class="menu-carousel-container "> <div class="menu-carousel-buttons"> <button class="menu-carousel-button prev icon-chevron-left disabled" onclick="showMenuCarouselItem('banner-mb-2', -1);"></button> <button class="menu-carousel-button next icon-chevron-right" onclick="showMenuCarouselItem('banner-mb-2', 1);"></button> </div> <div class="menu-carousel" data-index="0"> <div class="menu-carousel-item" style="background-image: url('/documents/20126/247121/recursos_profesionales_2.jpg/5e2f2a32-2084-4664-1714-e465acaf6ca9?t=1565609646201');"><a href="/professional-area" target=""><span>Go to professional area </span></a></div> </div> </div> </div> </div> </div> </div> <div class="main-submenu__list" id="clpsMbM-2" style="display: none;"> <div class="container"> <div class="row"> <div class="col-12"> <button class="arrow" type="button" onclick="showMobileSubmenu('clpsMbM-2', true);"> Back </button> </div> <div class="col-12"> <span class="main-submenu__title">Sustainability</span> </div> </div> <ul class="row"> <li class="col-12 align-items-start"><a href="/sustainability/ecodesign" target="_self"><div><span>EcoDesign</span></div></a></li><li class="col-12 align-items-start"><a href="/sustainability/responsible-production" target="_self"><div><span>Responsible Production</span></div></a></li><li class="col-12 align-items-start"><a href="/sustainability/commitment-society" target="_self"><div><span>Commitment to Society</span></div></a></li><li class="col-12 align-items-start"><a href="/sustainability/ecovadis" target=""><div><span>EcoVadis Platinum Medal</span></div></a></li><li class="col-12 align-items-start"><a href="/sustainability/sdg" target="_self"><div><span>Sustainable Development Goals</span></div></a></li> </ul> <div class="row"> <div id="banner-mb-3" class="banner-content col-xl-6 col-lg-6 col-12"> <div class="menu-carousel-container two"> <div class="menu-carousel-buttons"> <button class="menu-carousel-button prev icon-chevron-left disabled" onclick="showMenuCarouselItem('banner-mb-3', -1);"></button> <button class="menu-carousel-button next icon-chevron-right" onclick="showMenuCarouselItem('banner-mb-3', 1);"></button> </div> <div class="menu-carousel" data-index="0"> <div class="menu-carousel-item" style="background-image: url('/documents/20126/0/wearewater_foundation+%281%29.jpg/fa7cb483-b3e4-5ed8-07ed-5164b640da0f?t=1757929915381');"><a href="https://www.wearewater.org" target="_blank"><span>We Are Water Foundation</span></a></div><div class="menu-carousel-item" style="background-image: url('/documents/20126/236919/certificates_declarations.jpg/fc035a6d-f838-caf8-b79e-d8181607519b?t=1731261895074');"><a href="/sustainability/certificates-and-declarations" target="_self"><span>Certificates & Declarations</span></a></div> </div> </div> </div> </div> </div> </div> <div class="main-submenu__list" id="clpsMbM-3" style="display: none;"> <div class="container"> <div class="row"> <div class="col-12"> <button class="arrow" type="button" onclick="showMobileSubmenu('clpsMbM-3', true);"> Back </button> </div> <div class="col-12"> <span class="main-submenu__title">About us</span> </div> </div> <ul class="row">
1152 <li class="col-12 align-items-start"><a href="/about-roca" target=""><div><span>Who we are</span></div></a></li><li class="col-12 align-items-start"><a href="/about-roca/roca-history" target=""><div><span>Our history</span></div></a></li><li class="col-12 align-items-start"><a href="/about-roca/design-innovation/manufacturing-processes" target=""><div><span>Manufacturing processes</span></div></a></li><li class="col-12 align-items-start"><a href="/about-roca/roca-around-the-world" target=""><div><span>International presence</span></div></a></li><li class="col-12 align-items-start"><a href="/about-roca/annual-reports" target=""><div><span>Annual Reports</span></div></a></li><li class="col-12 align-items-start"><a href="/about-roca/roca-group-ventures" target=""><div><span>Roca Group Ventures</span></div></a></li><li class="col-12 align-items-start"><a href="https://rocagroup.whispli.com/lp/speakup" target="_blank"><div><span>Speak up platform</span></div></a></li> </ul> </div> </div> <ul class="main-menu__list"> <li class="main-menu__item js-collapse-sm"> <div class="link-wrapper"> <a class="main-menu__link" href="/launches/" target="_self"> New launches </a> <button class="arrow" type="button" onclick="showMobileSubmenu('clpsMbM-0', false);"></button> </div> </li> <li class="main-menu__item js-collapse-sm"> <div class="link-wrapper"> <a class="main-menu__link" href="/professional-area" target="_self"> Professional Area </a> <button class="arrow" type="button" onclick="showMobileSubmenu('clpsMbM-1', false);"></button> </div> </li> <li class="main-menu__item js-collapse-sm"> <div class="link-wrapper"> <a class="main-menu__link" href="/sustainability" target="_self"> Sustainability </a> <button class="arrow" type="button" onclick="showMobileSubmenu('clpsMbM-2', false);"></button> </div> </li> <li class="main-menu__item js-collapse-sm"> <div class="link-wrapper"> <a class="main-menu__link" href="/about-roca" target=""> About us </a> <button class="arrow" type="button" onclick="showMobileSubmenu('clpsMbM-3', false);"></button> </div> </li> </ul> <ul class="supramenu__list supramenu__list--left"> <li class="supramenu__item"><a class="supramenu__link" href="/about-roca/news" target=""><div><span>News </span></div></a></li><li class="supramenu__item"><a class="supramenu__link" href="/launches/brochures-downloads" target=""><img class="icon-right-space" alt="" data-fileentryid="346442418" src="/documents/20126/346080475/book-opened.svg/2dd01c26-92e4-8dff-c86e-85c72ac5e946?t=1753429188789" title="2025 Catalogues " style="" /><div><span>2025 Catalogues </span></div></a></li><li class="supramenu__item"><a class="supramenu__link" href="/where-to-find-us" target=""><img class="icon-right-space" alt="" data-fileentryid="346080678" src="/documents/20126/346080475/location.svg/f878b6f9-76fd-a3d8-c494-938d6fcae04b?t=1753429133504" title="Where to find us " style="" /><div><span>Where to find us </span></div></a></li><li class="supramenu__item"><a class="supramenu__link" href="/products" target=""><img class="icon-right-space" alt="" data-fileentryid="346080690" src="/documents/20126/346080475/exit.svg/4f2c42a8-cabc-3e9c-d179-b3c0adad624c?t=1753429136975" title="Go to local site " style="" /><div><span>Go to local site </span></div></a></li> </ul> </div> </div> </div> <div id="rs-search-modal" class="r-modal search-modal"></div> <div class="r-modal mini-cart-collapse"> <div class="close-menu"> <div class="wrapper"> <a href="javascript:void(0)" class="js-close icon-close"></a> </div> </div> <div class="r-modal__wrapper"></div> </div> </div> </header>
1152<script type="text/javascript"> 1153 1154// IMPORTANT: this Javascript must be here so the site works properly with full HTML caching systems (i.e. Akamai) 1155 1156var ghGroupId = '20126', ghMarketCode = 'COM', ghCountryCode = 'CK', 1157 ghLanguageId = 'en_GB', ghDebug = false; 1158if ((ghGroupId)&&(ghMarketCode)&&(ghCountryCode)&&(ghLanguageId)) { 1159 var url = '/o/marginals/get-header-data?groupId=' + ghGroupId + '&marketCode=' + ghMarketCode + 1160 '&countryCode=' + ghCountryCode + '&languageId=' + ghLanguageId; 1161 if (ghDebug) {console.log('Calling getUserData service: ' + url);} 1162 $.ajax({ 1163 type : 'POST', 1164 url : url, 1165 success : function(result) { 1166 if (ghDebug) {console.log(result);} 1167 var li = document.getElementById('userMenuLi'); 1168 if (li) { 1169 if (result.success) { 1170 var html = result.userHTML; 1171 if (html) { 1172 li.innerHTML = html; 1173 if (ghDebug) {console.log('Header user HTML menu succesfully updated');} 1174 } 1175 var mdiv = document.getElementById('mobileUserAreaDiv'); 1176 if ((mdiv)&&(result.mobileUserHTML)) { 1177 mdiv.innerHTML = result.mobileUserHTML; 1178 mdiv.style.display = ''; 1179 if (ghDebug) {console.log('Header mobile user HTML menu succesfully updated');} 1180 } 1181 } else { 1182 li.innerHTML = 'ERROR!'; 1183 li.style.color = 'red'; 1184 if (ghDebug) { 1185 var error = (result.error) ? result.error : 'Unspecified error'; 1186 console.log('ERROR: ' + error); 1187 } 1188 } 1189 } 1190 1191 // Check if logged user is professional to properly show fav data on video banner and product props (avoiding Akamai full cache issues) 1192 if (result.userProfile && result.userProfile === 'PRO' && typeof(productCode) !== 'undefined' && productCode !== '') { 1193 $(document).ready(function() { 1194 try { 1195 if (ghDebug) {console.log('Setting Product Props fav data');} 1196 1197 productPropsCheckFavData(); 1198 } catch (error) { 1199 console.log('ERROR -- Could not set Product Props fav data', error); 1200 } 1201 1202 try { 1203 1204 if (ghDebug) {console.log('Setting Video Banner fav data');} 1205 1206 videoBannerCheckFavData(); 1207 } catch (error) { 1208 console.log('ERROR -- Could not set Video Banner fav data', error); 1209 } 1210 }); 1211 } 1212 }, 1213 error : function(jqXHR, textStatus, errorThrown) { 1214// li.innerHTML = 'ERROR!'; 1215// li.style.color = 'red'; 1216 if (ghDebug) {console.log('ERROR: ' + textStatus + ' (' + errorThrown + ')');} 1217 } 1218 }); 1219} 1220 1221</script>
1221 <div id="all-loading" class="loader-fs"> <div class="loader-fs__wrapper"> <div class="loader active"> <div class="lds-css"></div> <div class="lds-load"> <div></div> <div></div> <div></div> </div> </div> </div> </div> <div class="floating-buttons__section sd_remove"> </div> <section id="content"> <style type="text/css"> 1222 .master-layout-fragment .portlet-header { 1223 display: none; 1224 } 1225 </style> <div class="columns-1" id="main-content" role="main"> <div class="portlet-layout row"> <div class="col-md-12 portlet-column portlet-column-only" id="column-1"> <div class="portlet-dropzone portlet-column-content portlet-column-content-only" id="layout-column_column-1"> <div class="portlet-boundary portlet-boundary_Breadcrumb_ portlet-static portlet-static-end portlet-decorate " id="p_p_id_Breadcrumb_INSTANCE_r2bGoDQ7qlpW_"> <span id="p_Breadcrumb_INSTANCE_r2bGoDQ7qlpW"></span> <section class="portlet" id="portlet_Breadcrumb_INSTANCE_r2bGoDQ7qlpW"> <div class="portlet-content"> <div class="autofit-float autofit-row portlet-header"> <!--div class="autofit-col autofit-col-expand"> <h2 class="portlet-title-text">Breadcrumb</h2> </div--> <div class="autofit-col autofit-col-end"> <div class="autofit-section"> </div> </div> </div> <div class=" portlet-content-container"> <div class="portlet-body"> <div class="container"> <div class="row"> <div class="col"> <section class="breadcrumb "> <div class="container"> <div class="row "> <div class="col"> <ul> <li> <a href="/">Home</a> </li> <li> <a href="/about-roca">About Roca</a> </li> </ul> </div> </div> </div> </section> </div> </div> </div> </div> </div> </div> </section> </div> <div class="portlet-boundary portlet-boundary_ArticleTitle_ portlet-static portlet-static-end portlet-decorate " id="p_p_id_ArticleTitle_INSTANCE_kXT3Czkmbe7m_"> <span id="p_ArticleTitle_INSTANCE_kXT3Czkmbe7m"></span> <section class="portlet" id="portlet_ArticleTitle_INSTANCE_kXT3Czkmbe7m"> <div class="portlet-content"> <div class="autofit-float autofit-row portlet-header"> <!--div class="autofit-col autofit-col-expand"> <h2 class="portlet-title-text">Article Title</h2> </div--> <div class="autofit-col autofit-col-end"> <div class="autofit-section"> </div> </div> </div> <div class=" portlet-content-container"> <div class="portlet-body"> <link rel="preload" href="https://www.roca.com/o/roca-restyle-theme/css/textos-styles.css?browserId=firefox&themeId=rocarestyletheme_WAR_rocarestyletheme&minifierType=css&languageId=en_GB&t=1789464090000" as="style" onload="this.onload=null;this.rel='stylesheet'"> <noscript><link rel="stylesheet" href="https://www.roca.com/o/roca-restyle-theme/css/textos-styles.css?browserId=firefox&themeId=rocarestyletheme_WAR_rocarestyletheme&minifierType=css&languageId=en_GB&t=1789464090000"></noscript> <div class=" portlet-content-container roca-restyle"> <div class="container"> <div class="row"> <div class="col-12"> <div class="text-simple text-simple-left"> <H1 class="titular">News</H1> </div> </div> </div> </div> </div> </div> </div> </div> </section> </div> <div class="portlet-boundary portlet-boundary_BlogList_ portlet-static portlet-static-end portlet-decorate " id="p_p_id_BlogList_INSTANCE_hA5lBAGvU4gE_"> <span id="p_BlogList_INSTANCE_hA5lBAGvU4gE"></span> <section class="portlet" id="portlet_BlogList_INSTANCE_hA5lBAGvU4gE"> <div class="portlet-content"> <div class="autofit-float autofit-row portlet-header"> <!--div class="autofit-col autofit-col-expand"> <h2 class="portlet-title-text">Blog List</h2> </div--> <div class="autofit-col autofit-col-end"> <div class="autofit-section"> </div> </div> </div> <div class=" portlet-content-container"> <div class="portlet-body"> <link rel="preload" href="https://www.roca.com/o/roca-restyle-theme/css/collection-styles.css?browserId=firefox&themeId=rocarestyletheme_WAR_rocarestyletheme&minifierType=css&languageId=en_GB&t=1789464090000" as="style" onload="this.onload=null;this.rel='stylesheet'"> <noscript><link rel="stylesheet" href="https://www.roca.com/o/roca-restyle-theme/css/collection-styles.css?browserId=firefox&themeId=rocarestyletheme_WAR_rocarestyletheme&minifierType=css&languageId=en_GB&t=1789464090000"></noscript> <link rel="preload" href="https://www.roca.com/o/roca-restyle-theme/css/blog-styles.css?browserId=firefox&themeId=rocarestyletheme_WAR_rocarestyletheme&minifierType=css&languageId=en_GB&t=1789464090000" as="style" onload="this.onload=null;this.rel='stylesheet'"> <noscript><link rel="stylesheet" href="https://www.roca.com/o/roca-restyle-theme/css/blog-styles.css?browserId=firefox&themeId=rocarestyletheme_WAR_rocarestyletheme&minifierType=css&languageId=en_GB&t=1789464090000"></noscript> <link rel="preload" href="https://www.roca.com/o/roca-restyle-theme/css/product-filter-styles.css?browserId=firefox&themeId=rocarestyletheme_WAR_rocarestyletheme&minifierType=css&languageId=en_GB&t=1789464090000" as="style" onload="this.onload=null;this.rel='stylesheet'"> <noscript><link rel="stylesheet" href="https://www.roca.com/o/roca-restyle-theme/css/product-filter-styles.css?browserId=firefox&themeId=rocarestyletheme_WAR_rocarestyletheme&minifierType=css&languageId=en_GB&t=1789464090000"></noscript> <div class="container"> <div class="row"> </div> </div> <section class="roca-restyle menus-secundarios product-filter "> <div class="background-grow"> <div class="main-nav js-main-nav"> <div class="container pl-xs-0 pr-xs-0 position-relative"> <div class="row-flex main-filter"> <nav id="highlightedNav" class="main-menu__wrapper js-filters-desktop"> <ul id="highlightedFilterGroupsUL" class="main-menu__list js-menu-filters"> <li class="main-menu__item dropdown js-collapse-sd" id="js-filter-tags" > <div class="link-wrapper"> <a class="main-menu__link" role="button">Categories</a> </div> <div class="arrow-n shadow"></div> <div class="arrow-n"></div> <div id="tag" class="js-menu-collapse dropdown-menu menu-colleccion-filter" aria-labelledby="toggle-news-menu"> <div class="wrapper"> <div class="row" id="js-tags-filters"> </div> </div> </div> </li> <li class="main-menu__item dropdown js-collapse-sd"> <div class="link-wrapper"> <a class="main-menu__link" role="button">Date</a> </div> <div class="arrow-n shadow"></div> <div class="arrow-n"></div> <div id="test03" class="js-menu-collapse dropdown-menu menu-colleccion-filter" aria-labelledby="toggle-news-menu"> <div class="wrapper"> <div class="row"> <div class="col-12 col-sm-2 col-lg-4" > <div class="custom-form-group"> <div class="form-group"> <label for="monthDate">Month</label> <select class="form-control" id="monthDate"> <option value="-1"></option> <option value="1">January</option> <option value="2">February</option> <option value="3">March</option> <option value="4">April</option> <option value="5">May</option> <option value="6">June</option> <option value="7">July</option> <option value="8">August</option> <option value="9">September</option> <option value="10">October</option> <option value="11">November</option> <option value="12">December</option> </select> </div> </div> </div> <div class="col-12 col-sm-1 col-lg-4" > <div class="custom-form-group"> <div class="form-group"> <label for="yearDate">Year</label> <select class="form-control" id="yearDate"> <option value="-1"></option> <option value="2026">2026</option> <option value="2025">2025</option> <option value="2024">2024</option> <option value="2023">2023</option> <option value="2022">2022</option> </select> </div> </div> </div> </div> </div> </div> </li> </ul> </nav> <nav id="moreNav" class="right-menu__wrapper has-modal col-12">
1225 <a data-target="#modal-filters" data-toggle="modal" role="button"> <i class="icon-filter"></i> <span>filters</span> </a> <div class="lightbox-filter-wrapper"> <div aria-hidden="true" class="modal fade modal-lightbox modal-filters" id="modal-filters" role="dialog" style="display: none;" tabindex="-1"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-body"> <div class="more-filters"> <div class="selected-filters-info"> <div class="js-selected-filters-mobile selected-filter"></div> <div class="d-none-sm delete-filters" style="display: none;"> <a href="javascript:blogListClearAllFilters();"> Delete all <i class="icon icon-close"></i> </a> </div> </div> <div class="js-filters-mobile"></div> <ul id="moreFilterGroupsUL" class="list-filters"></ul> <div class="d-none-sm apply-filters"> <button aria-label="Apply all filters" data-dismiss="modal" type="button">Apply all filters</button> </div> </div> </div> </div> </div> </div> </div> </nav> </div> <!-- Filtros --> <div class="selected-filters-info d-none d-lg-flex column-flex"> <div id="selectedFilters" class="selected-filter js-selected-filters-desktop"> <ul id="selectedFilterGroupsUL" class="column-flex selected-filter-list"></ul> </div> <div class="delete-filters" style="display: none;"> <a href="javascript:blogListClearAllFilters();"> Delete all <i class="icon icon-close"></i> </a> </div> </div> </div> </div> </div> <div class="nav-dropdown bg-secondary"> <div class="nav-dropdown__wrapper"> </div> </div> </section>
1225<script> 1226 1227 // --- Blog list: active filters bar --- 1228 1229 // Builds a chip <span> for a given filter name and clear function 1230 function blogListBuildChip(id, label, clearFn) { 1231 var span = document.createElement('span'); 1232 span.setAttribute('id', 'blogChip_' + id); 1233 span.setAttribute('class', 'seleccionado'); 1234 span.innerHTML = label + '<span class="filter-close">✕</span>'; 1235 span.addEventListener('click', function() { clearFn(); }); 1236 return span; 1237 } 1238 1239 // Rebuilds the selected-filters bar (desktop + mobile via roca.js moveFiltersMobile) 1240 function blogListUpdateSelectedFilters(collections, categories, tags, month, year) { 1241 var ul = document.getElementById('selectedFilterGroupsUL'); 1242 if (!ul) { return; } 1243 1244 ul.innerHTML = ''; 1245 1246 // Tags 1247 if (tags && tags.length) { 1248 tags.forEach(function(tag) { 1249 var isSelected = tag.selected !== undefined ? tag.selected : tag.checked; 1250 var label = tag.value !== undefined ? tag.value : tag.name; 1251 var key = tag.key !== undefined ? tag.key : tag.code; 1252 if (isSelected) { 1253 var li = document.createElement('li'); 1254 var chip = blogListBuildChip('tag_' + key, label, function(k) { 1255 return function() { setTagsUnchecked(k); }; 1256 }(key)); 1257 li.appendChild(chip); 1258 ul.appendChild(li); 1259 } 1260 }); 1261 } 1262 1263 // Categories 1264 if (categories && categories.length) { 1265 categories.forEach(function(cat) { 1266 var isSelected = cat.checked !== undefined ? cat.checked : cat.selected; 1267 var label = cat.name !== undefined ? cat.name : cat.value; 1268 var key = cat.code !== undefined ? cat.code : cat.key; 1269 if (isSelected) { 1270 var li = document.createElement('li'); 1271 var chip = blogListBuildChip('cat_' + key, label, function(k) { 1272 return function() { 1273 blogListUncheckedAndSearch(k, 'categories'); 1274 }; 1275 }(key)); 1276 li.appendChild(chip); 1277 ul.appendChild(li); 1278 } 1279 }); 1280 } 1281 1282 // Collections 1283 if (collections && collections.length) { 1284 collections.forEach(function(col) { 1285 var isSelected = col.checked !== undefined ? col.checked : col.selected; 1286 var label = col.name !== undefined ? col.name : col.value; 1287 var key = col.code !== undefined ? col.code : col.key; 1288 if (isSelected) { 1289 var li = document.createElement('li'); 1290 var chip = blogListBuildChip('col_' + key, label, function(k) { 1291 return function() { 1292 blogListUncheckedAndSearch(k, 'collections'); 1293 }; 1294 }(key)); 1295 li.appendChild(chip); 1296 ul.appendChild(li); 1297 } 1298 }); 1299 } 1300 1301 // Date 1302 if ((month && month != -1 && month != 0) || (year && year != -1 && year != 0)) { 1303 var dateLabel = ''; 1304 if (month && month != -1 && month != 0) { 1305 dateLabel += jQuery('#monthDate option:selected').text(); 1306 } 1307 if (year && year != -1 && year != 0) { 1308 dateLabel += (dateLabel ? ' ' : '') + year; 1309 } 1310 if (dateLabel) { 1311 var li = document.createElement('li'); 1312 var chip = blogListBuildChip('date', dateLabel, function() { clearDate(); }); 1313 li.appendChild(chip); 1314 ul.appendChild(li); 1315 } 1316 } 1317 1318 blogListToggleDeleteAllButton(); 1319 } 1320 1321 // Shows or hides the "Delete all" button based on active chips 1322 function blogListToggleDeleteAllButton() { 1323 var ul = document.getElementById('selectedFilterGroupsUL'); 1324 var hasChips = ul && ul.querySelectorAll('li').length > 0;
1325 jQuery('.selected-filters-info div.delete-filters').each(function() { 1326 hasChips ? jQuery(this).show() : jQuery(this).hide(); 1327 }); 1328 } 1329 1330 // Unchecks a filter directly in instanceData and triggers search (safe even if checkbox is not in DOM) 1331 function blogListUncheckedAndSearch(code, type) { 1332 // Uncheck in DOM if checkbox exists 1333 var check = document.getElementById(type + 'Check' + code); 1334 if (check) { check.checked = false; } 1335 1336 // Update instanceData directly 1337 if (blogListCurrentInstanceData && blogListCurrentInstanceData[type]) { 1338 blogListCurrentInstanceData[type].forEach(function(filterField) { 1339 var fieldKey = filterField.code !== undefined ? filterField.code : filterField.key; 1340 if (String(fieldKey) === String(code)) { 1341 filterField.checked = false; 1342 if (filterField.selected !== undefined) { filterField.selected = false; } 1343 } 1344 }); 1345 } 1346 1347 search(); 1348 } 1349
1350 // Clears all active filters (tags, categories, collections and date) 1351 function blogListClearAllFilters() { 1352 if (blogListCurrentInstanceData) { 1353 // Clear tags 1354 if (blogListCurrentInstanceData.tags) { 1355 blogListCurrentInstanceData.tags.forEach(function(t) { 1356 t.selected = false; 1357 t.checked = false; 1358 }); 1359 } 1360 // Clear categories 1361 if (blogListCurrentInstanceData.categories) { 1362 blogListCurrentInstanceData.categories.forEach(function(c) { 1363 c.checked = false; 1364 if (c.selected !== undefined) { c.selected = false; } 1365 }); 1366 } 1367 // Clear collections 1368 if (blogListCurrentInstanceData.collections) { 1369 blogListCurrentInstanceData.collections.forEach(function(c) { 1370 c.checked = false; 1371 if (c.selected !== undefined) { c.selected = false; } 1372 }); 1373 } 1374 // Clear date 1375 blogListCurrentInstanceData.selectedMonth = -1; 1376 blogListCurrentInstanceData.selectedYear = -1; 1377 } 1378 // Reset date selects in DOM 1379 jQuery('#monthDate').val(-1); 1380 jQuery('#yearDate').val(-1); 1381 search(); 1382 } 1383 1384</script>
1384 <section class=" "> <div> <div class="product-list__body"> <section class="blog-list"> <div class="container"> <div id="blogListDiv" class="row"></div> </div> </section> <div id="blogListLoadingDiv" class="loader active"> <div class="lds-css"></div> <div class="lds-load"> <div></div> <div></div> <div></div> </div> </div> </div> <div class="container"> <div id="nextButtonDiv" class="roca-restyle pagination-ajax pagination-footer" style="display:none;"> <div class="row justify-content-center"> <div class="col-12"> <div class="progressive-bar"> <div id="nextButtonTotalsSpan" class="tag"></div> <div id="nextButtonBarDiv" class="row no-gutters"></div> </div> <a class="view-more-btn" href="javascript:nextPage();"> <span class="link-content">Load more</span> </a> </div> </div> </div> </div> </div> </section>
1384<script type="text/javascript"> 1385 var urlBase = '/about-roca/news'; 1386 1387 1388 var blogListCurrentInstanceData = {"hideBreadcumb":true,"showTagsFilter":true,"selectedMonth":-1,"groupId":"20126","selectedYear":-1,"showCollectionsFilter":false,"marketCode":"COM","locale":"en_GB","showCategoriesFilter":false,"showDateFilter":true,"tags":[]}; 1389 1390 1391 var currentPage = 0, currentFirstPage = -1, currentFirstPage = -1, currentLastPage = -1, currentMaxPage = -1; 1392 1393 function search() { 1394 doSearch('resourceSearch', null, true); 1395 } 1396 1397 function setTagsChecked(code) { 1398 var params = {'_BlogList_INSTANCE_hA5lBAGvU4gE_tag' : code}; 1399 doSearch('resourceSetTag', params, true); 1400 } 1401 1402 function setTagsUnchecked(code) { 1403 var params = {'_BlogList_INSTANCE_hA5lBAGvU4gE_tag' : code}; 1404 doSearch('resourceClearTag', params, true); 1405 } 1406 1407 function clearTags() { 1408 doSearch('resourceClearTags', null, true); 1409 } 1410 1411 function clearCategories() { 1412 doSearch('resourceClearTags', null, true); 1413 } 1414 1415 function clearCollections() { 1416 doSearch('resourceClearTags', null, true); 1417 } 1418 1419 $( '#yearDate' ).change(function() { 1420 var year = $( this ).val(); 1421 if (year != null && year != -1) { 1422 var params = {'_BlogList_INSTANCE_hA5lBAGvU4gE_year' : year}; 1423 doSearch('resourceSetYear', params, true); 1424 } else { 1425 clearDate(); 1426 } 1427 }); 1428 1429 $( '#monthDate' ).change(function() { 1430 var month = $( this ).val(); 1431 1432 if (month != null && month != -1) { 1433 var params = {'_BlogList_INSTANCE_hA5lBAGvU4gE_month' : month}; 1434 doSearch('resourceSetMonth', params, true); 1435 } else { 1436 clearDate(); 1437 } 1438 }); 1439 1440 function clearDate() { 1441 doSearch('resourceClearDate', null, true); 1442 } 1443 1444 function nextPage() { 1445 if ((currentLastPage >= 0)&&(currentMaxPage >= 0)&&(currentLastPage < currentMaxPage)) { 1446 currentPage = currentLastPage + 1; 1447 doSearch('resourcePagSearch'); 1448 } 1449 } 1450 1451 function doSearch(action, params, clear) { 1452 1453 if (clear) { 1454 currentPage = 0; 1455 currentFirstPage = -1; 1456 currentLastPage = -1; 1457 currentMaxPage = -1; 1458 var blogsDiv = document.getElementById('blogListDiv'); 1459 if (blogsDiv) {blogsDiv.innerHTML = '';} 1460 var nextDiv = document.getElementById('nextButtonDiv'); 1461 if (nextDiv) {hideElement(nextDiv);} 1462 } 1463 1464 var data = { 1465 '_BlogList_INSTANCE_hA5lBAGvU4gE_resourceAction' : action, 1466 '_BlogList_INSTANCE_hA5lBAGvU4gE_resourceCurrentPage' : currentPage, 1467 }; 1468 1469 1470 data['_BlogList_INSTANCE_hA5lBAGvU4gE_resourceInstanceData'] = JSON.stringify(blogListCurrentInstanceData); 1471 1472 1473 if (params) {data = Object.assign(data, params);} 1474 1475 disableAll(); 1476 setLoading(true); 1477 var posTop = $(window).scrollTop(); 1478 1479 $.ajax({ 1480 url : 'https://www.roca.com/en-GB/web/roca/about-roca/news?p_p_id=BlogList_INSTANCE_hA5lBAGvU4gE&p_p_lifecycle=2&p_p_state=normal&p_p_mode=view&p_p_cacheability=cacheLevelPage', 1481 method : 'post', 1482 data : data 1483 }).done(function(result) { 1484 setLoading(false); 1485 enableAll(); 1486 1487 if (result) { 1488 1489 1490 if (result.instanceData) {blogListCurrentInstanceData = result.instanceData}; 1491 1492 1493 console.log(blogListCurrentInstanceData); 1494 currentPage = result.currentPage; 1495 currentMaxPage = result.maxPages; 1496 1497 updateFilters(result.collections, result.categories, result.tags, result.selectedMonth, result.selectedYear); 1498 1499 1500 1501 if (((currentFirstPage < 0)||(currentPage < currentFirstPage))||((currentLastPage < 0)||(currentPage > currentLastPage))) { 1502 1503 if ((currentFirstPage < 0)||(currentPage < currentFirstPage)) {currentFirstPage = currentPage; before = true;} 1504 if ((currentLastPage < 0)||(currentPage > currentLastPage)) {currentLastPage = currentPage;} 1505 1506 addBlogs(result.blogs, result.tags); 1507 updateNextButton(result.maxBlogs); 1508 } 1509 1510 $('.clamp').each(function(index, element) { 1511 $clamp(element, { 1512 clamp: 4 1513 }); 1514 }); 1515 1516 $(window).resize(function() { 1517 try { 1518 if (typeof $('.clamp') !== "undefined") { 1519 $('.clamp').each(function(index, element) { 1520 $clamp(element, { 1521 clamp: 'auto' 1522 });
1523 }); 1524 1525 $('.clamp').each(function(index, element) { 1526 $clamp(element, { 1527 clamp: 4 1528 }); 1529 }); 1530 } 1531 } catch (error) { 1532 console.log(error); 1533 } 1534 1535 1536 initScroll('#collectionTopSlider'); 1537 1538 }); 1539 } 1540 1541 var currentPosTop = $(window).scrollTop(); 1542 1543 while(currentPosTop != posTop) { 1544 window.scrollTo({top:posTop, left:0, behavior:'auto'}); 1545 var currentPosTop = $(window).scrollTop(); 1546 } 1547 }); 1548 } 1549 1550 function initialSearch(result, clear) { 1551 1552 if (clear) { 1553 currentPage = 0; 1554 currentFirstPage = -1; 1555 currentLastPage = -1; 1556 currentMaxPage = -1; 1557 var blogsDiv = document.getElementById('blogListDiv'); 1558 if (blogsDiv) {blogsDiv.innerHTML = '';} 1559 var nextDiv = document.getElementById('nextButtonDiv'); 1560 if (nextDiv) {hideElement(nextDiv);} 1561 } 1562 1563 var posTop = $(window).scrollTop(); 1564 1565 setLoading(false); 1566 enableAll(); 1567 1568 if (result) { 1569 1570 1571 if (result.instanceData) {blogListCurrentInstanceData = result.instanceData}; 1572 1573 1574 currentPage = result.currentPage; 1575 currentMaxPage = result.maxPages; 1576 1577 updateFilters(result.collections, result.categories, result.tags, result.selectedMonth, result.selectedYear); 1578 1579 1580 1581 if (((currentFirstPage < 0)||(currentPage < currentFirstPage))||((currentLastPage < 0)||(currentPage > currentLastPage))) { 1582 1583 if ((currentFirstPage < 0)||(currentPage < currentFirstPage)) {currentFirstPage = currentPage; before = true;} 1584 if ((currentLastPage < 0)||(currentPage > currentLastPage)) {currentLastPage = currentPage;} 1585 1586 addBlogs(result.blogs, result.tags); 1587 updateNextButton(result.maxBlogs); 1588 1589 } 1590 1591 $('.clamp').each(function(index, element) { 1592 $clamp(element, { 1593 clamp: 4 1594 }); 1595 }); 1596 1597 $(window).resize(function() { 1598 try { 1599 if (typeof $('.clamp') !== "undefined") { 1600 $('.clamp').each(function(index, element) { 1601 $clamp(element, { 1602 clamp: 'auto' 1603 }); 1604 }); 1605 1606 $('.clamp').each(function(index, element) { 1607 $clamp(element, { 1608 clamp: 4 1609 }); 1610 }); 1611 } 1612 } catch (error) {console.log(error);} 1613 1614 1615 initScroll('#collectionTopSlider'); 1616 1617 }); 1618 1619 } 1620 1621 var currentPosTop = $(window).scrollTop(); 1622 1623 while(currentPosTop != posTop) { 1624 window.scrollTo({top:posTop, left:0, behavior:'auto'}); 1625 var currentPosTop = $(window).scrollTop(); 1626 } 1627 1628 } 1629 1630 function updateFilters(collections, categories, tags, month, year) { 1631 var isCosmic = false; 1632 var showDateFilter = true; 1633 var showCategoriesFilter = false; 1634 var showCollectionsFilter = false; 1635 var showTagsFilter = true; 1636 var displayMode = "null"; 1637 1638 if(!isCosmic){ 1639 updateDate(month, year, 'clearDate()'); 1640 1641 // If the server returns no results (empty response), categories/collections/tags will be 1642 // undefined. In that case, fall back to the current instanceData to decide whether 1643 // the filter bar should stay visible (there may be active filters that caused 0 results). 1644 var hasActiveFilters = false; 1645 if (typeof blogListCurrentInstanceData !== 'undefined' && blogListCurrentInstanceData) { 1646 var _d = blogListCurrentInstanceData; 1647 hasActiveFilters = 1648 ((_d.categories && _d.categories.some(function(c){ return c.checked; })) || 1649 (_d.collections && _d.collections.some(function(c){ return c.checked; })) || 1650 (_d.tags && _d.tags.some(function(t){ return t.selected || t.checked; })) || 1651 (_d.selectedMonth && _d.selectedMonth > 0) || 1652 (_d.selectedYear && _d.selectedYear > 0)); 1653 } 1654 1655 if(!collections && !hasActiveFilters){ 1656 showCollectionsFilter = false; 1657 } 1658 1659 if(!categories && !hasActiveFilters){ 1660 showCategoriesFilter = false; 1661 } 1662 1663 if(!tags){ 1664 showTagsFilter = false; 1665 } 1666 1667 if(!showTagsFilter && !showCategoriesFilter && !showCollectionsFilter && !showDateFilter && !hasActiveFilters){ 1668 $(".product-filter").addClass("hideFilter"); 1669 }else{ 1670 $(".product-filter").removeClass("hideFilter"); 1671 } 1672 } 1673 1674 if (displayMode !== "TAGS_DESC" && displayMode !== "TAGS_ASC") { 1675 updateFilterGroup(tags, 'tags', 'clearTags()'); 1676 } 1677 1678 // When result is empty, pass current instanceData arrays so chips remain visible 1679 var _effectiveCategories = categories; 1680 var _effectiveCollections = collections; 1681 if (typeof blogListCurrentInstanceData !== 'undefined' && blogListCurrentInstanceData) { 1682 if (!_effectiveCategories && blogListCurrentInstanceData.categories) { 1683 _effectiveCategories = blogListCurrentInstanceData.categories; 1684 } 1685 if (!_effectiveCollections && blogListCurrentInstanceData.collections) { 1686 _effectiveCollections = blogListCurrentInstanceData.collections; 1687 } 1688 } 1689 1690 updateFilterGroupAuto(_effectiveCategories, 'categories', 'clearCategories()'); 1691 updateFilterGroupAuto(_effectiveCollections, 'collections', 'clearCategories()'); 1692 1693 if (typeof blogListUpdateSelectedFilters === 'function') { 1694 blogListUpdateSelectedFilters(_effectiveCollections, _effectiveCategories, tags, month, year); 1695 } 1696 } 1697 1698 function updateFilterGroupAuto(filters, type, clearFunction) { 1699 console.log(filters); 1700 1701 if (filters) { 1702 $('#js-filter-' + type).show(); 1703 updateCheckboxesAuto(filters, type); 1704 updateFilterSelectionAuto(filters, type, clearFunction); 1705 } else { 1706 $('#js-filter-' + type).hide(); 1707 } 1708 } 1709 1710 function updateFilterSelectionAuto(filters, type, clearFunction) { 1711 if (filters.length) { 1712 var selected = ''; 1713 var counter = 0; 1714 var span = $('#' + type + 'Seleccionado'); 1715
1716 filters.forEach( function(filter) { 1717 if(filter.checked){ 1718 counter++; 1719 if(counter > 1){ 1720 selected = 'Various (' + counter + ')'; 1721 span.attr("onclick", clearFunction); 1722 } else { 1723 selected = filter.name; 1724 var name = type.charAt(0).toUpperCase() + type.slice(1); 1725 span.attr("onclick", 'set' + name + 'Unchecked("' + filter.code + '")'); 1726 } 1727 } 1728 }); 1729 1730 if (selected && selected != '') { 1731 span.html(selected); 1732 showElement(span); 1733 } else { 1734 hideElement(span); 1735 } 1736 } 1737 } 1738 1739 function updateCheckboxesAuto(filters, type) { 1740 filters.forEach( function(filter) { 1741 if (!($('#' + type + 'Span' + filter.code.replace(".","\\.")).length > 0)) { 1742 var html = ''; 1743 html += '<div class="col-6 col-sm-4" id="'+type+'CheckedDiv">'; 1744 html += '<div class="custom-control custom-checkbox">'; 1745 html += '<label>'; 1746 html += '<input aria-label="" class="custom-control-input" type="checkbox"'; 1747 html += 'id="'+type+'Check' + filter.code + '" onchange="onCheckClicked(\'' + filter.code + '\',\''+type+'\');">'; 1748 html += '<span class="custom-control-label"> </span>'; 1749 html += '</label>'; 1750 html += '<span id="'+type+'Span' + filter.code + '" '; 1751 html += 'class="custom-control-label-text">' + filter.name + '</span>'; 1752 html += '</div> </div>'; 1753 $('#js-'+type+'-filters').append(html); 1754 } 1755 1756 if (filter.count == 0){ 1757 $('#' + type + 'Span' + filter.code).parent().parent().hide(); 1758 } else { 1759 $('#' + type + 'Span' + filter.code.replace(".","\\.")).parent().parent().show(); 1760 $('#' + type + 'Check' + filter.code.replace(".","\\.")).prop('checked', filter.checked); 1761 $('#' + type + 'Span' + filter.code.replace(".","\\.")).html(filter.name + ' (' + filter.count + ')'); 1762 } 1763 }); 1764 } 1765 1766 function onCheckClickedTags(code, type){ 1767 var check = document.getElementById(type+'Check' + code); 1768 1769 console.log(check); 1770 1771 if ((check)&&(!check.disabled)) { 1772 1773 blogListCurrentInstanceData[type].forEach(function (filterField) { 1774 console.log(filterField); 1775 if(filterField.key == code){ 1776 if (check.checked) { 1777 filterField.selected = true; 1778 }else{ 1779 filterField.selected = false; 1780 } 1781 } 1782 }); 1783 1784 /* 1785 if (check.checked) { 1786 setTagChecked(code); 1787 jQuery(check).parent().parent().parent().addClass("active"); 1788 } else { 1789 1790 setTagUnchecked(code); 1791 jQuery(check).parent().parent().parent().removeClass("active"); 1792 } 1793 */ 1794 1795 console.log(blogListCurrentInstanceData); 1796 console.log(blogListCurrentInstanceData[type]); 1797 search(); 1798 } 1799 } 1800 1801 function onCheckClicked(code, type){ 1802 var check = document.getElementById(type+'Check' + code); 1803 console.log(check); 1804 1805 if ((check)&&(!check.disabled)) { 1806 1807 blogListCurrentInstanceData[type].forEach(function (filterField) { 1808 console.log(filterField); 1809 if(filterField.code == code){ 1810 if (check.checked) { 1811 filterField.checked = true; 1812 }else{ 1813 filterField.checked = false; 1814 } 1815 } 1816 }); 1817 1818 /* 1819 if (check.checked) { 1820 setTagChecked(code); 1821 jQuery(check).parent().parent().parent().addClass("active"); 1822 } else { 1823 1824 setTagUnchecked(code); 1825 jQuery(check).parent().parent().parent().removeClass("active"); 1826 } 1827 */ 1828 1829 console.log(blogListCurrentInstanceData); 1830 console.log(blogListCurrentInstanceData[type]); 1831 search(); 1832 } 1833 } 1834 1835 function updateFilterGroup(filters, type, clearFunction) { 1836 if (filters) { 1837 $('#js-filter-' + type).show(); 1838 updateCheckboxes(filters, type); 1839 updateFilterSelection(filters, type, clearFunction); 1840 1841 } else { 1842 $('#js-filter-' + type).hide(); 1843 } 1844 } 1845 1846 function updateCheckboxes(filters, type) { 1847 var isCosmic = false; 1848 var isFilterTag = true; 1849 1850 if(isCosmic) { 1851 filters.forEach( function(filter) { 1852 if (!($('#' + type + 'Span' + filter.key).length > 0)) { 1853 var html = ''; 1854 html += '<div id="tagsCheckedDiv" class="form-check form-check-card form-check-top-left category-check " >'; 1855 html += '<div class="custom-control custom-checkbox" onclick="onCallTagClicked(\'' + filter.key + '\');">'; 1856 html += '<label>'; 1857 html += '<input class="custom-control-input" id="tagsCheck'+ filter.key + '" tabindex="0" type="checkbox" onchange="onTagClicked(\'' + filter.key + '\');"/>'; 1858 html += '<span class="custom-control-label"></span>'; 1859 html += '</label>'; 1860 html += '<span id="tagsSpan' + filter.key + '" '; 1861 html += 'class="custom-control-label-text product-category"><p class="product-category__tag"><label>' + filter.value + '</label></p></span>'; 1862 html += '</div>'; 1863 html += '</div>'; 1864 $('.js-slider').slick('slickAdd', html); 1865 } 1866 if (filter.count == 0){ 1867 $('#' + type + 'Span' + filter.key).parent().parent().hide(); 1868 } else { 1869 $('#' + type + 'Span' + filter.key).parent().parent().show(); 1870 $('#' + type + 'Check' + filter.key).prop('checked', filter.selected); 1871 $('#' + type + 'Span' + filter.key).html(filter.value + ' (' + filter.count + ')'); 1872 } 1873 }); 1874 } else { 1875 if(isFilterTag){
1876 filters.forEach( function(filter) { 1877 if (!($('#' + type + 'Span' + filter.key.replace(".","\\.")).length > 0)) { 1878 var html = ''; 1879 html += '<div class="col-6 col-sm-4" id="'+type+'CheckedDiv">'; 1880 html += '<div class="custom-control custom-checkbox">'; 1881 html += '<label>'; 1882 html += '<input aria-label="" class="custom-control-input" type="checkbox"'; 1883 html += 'id="'+type+'Check' + filter.key + '" onchange="onCheckClickedTags(\'' + filter.key + '\',\''+type+'\');">'; 1884 html += '<span class="custom-control-label"> </span>'; 1885 html += '</label>'; 1886 html += '<span id="'+type+'Span' + filter.key + '" '; 1887 html += 'class="custom-control-label-text">' + filter.value + '</span>'; 1888 html += '</div> </div>'; 1889 $('#js-'+type+'-filters').append(html); 1890 } 1891 1892 if (filter.count == 0){ 1893 $('#' + type + 'Span' + filter.key).parent().parent().hide(); 1894 } else { 1895 $('#' + type + 'Span' + filter.key.replace(".","\\.")).parent().parent().show(); 1896 $('#' + type + 'Check' + filter.key.replace(".","\\.")).prop('checked', filter.selected); 1897 $('#' + type + 'Span' + filter.key.replace(".","\\.")).html(filter.value + ' (' + filter.count + ')'); 1898 } 1899 }); 1900 } else { 1901 1902 $('#collectionTopSlider').html(''); 1903 filters.forEach( function(filter) { 1904 var html = ''; 1905 html += '<div id="categoryDiv' + filter.key + '" class="form-check form-check-card form-check-top-left category-check'; 1906 if (filter.selected) { html += ' active'; } 1907 html += '" onclick="document.location.href = \'' + filter.valueSlugify + '\';">'; 1908 html += '<div class="custom-control custom-checkbox">'; 1909 html += '<label>'; 1910 html += '<input id="categoryCheck' + filter.key + '" type="checkbox" class="custom-control-input"'; 1911 if (filter.selected) { html += 'checked="checked"'; } 1912 html += '/>'; 1913 html += '<span class="custom-control-label"></span>'; 1914 html += '<div class="product-category">'; 1915 html += '<p id="categoryP' + filter.key + '" class="product-category__tag">' + filter.value + '</p>'; 1916 html += '</div>'; 1917 html += '</label>'; 1918 html += '</div>'; 1919 html += '</div>'; 1920 1921 $('#collectionTopSlider').append(html); 1922 }); 1923 initScroll('#collectionTopSlider'); 1924 1925 } 1926 } 1927 } 1928 1929 function updateFilterSelection(filters, type, clearFunction) { 1930 if (filters.length) { 1931 var selected = ''; 1932 var counter = 0; 1933 var span = $('#' + type + 'Seleccionado'); 1934 1935 filters.forEach( function(filter) { 1936 if(filter.selected){ 1937 counter++; 1938 1939 if(counter > 1){ 1940 selected = 'Various (' + counter + ')'; 1941 span.attr("onclick", clearFunction); 1942 } else { 1943 selected = filter.value; 1944 var name = type.charAt(0).toUpperCase() + type.slice(1); 1945 console.log(name); 1946 console.log('set' + name + 'Unchecked("' + filter.key + '")'); 1947 span.attr("onclick", 'set' + name + 'Unchecked("' + filter.key + '")'); 1948 } 1949 } 1950 }); 1951 1952 if (selected && selected != '') { 1953 span.html(selected); 1954 showElement(span); 1955 } else { 1956 hideElement(span); 1957 } 1958 } 1959 } 1960 1961 function updateDate(month, year, clearFunction) { 1962 1963 var selected = ''; 1964 var span = $('#dateSeleccionado'); 1965 1966 if (month != null && month != -1 && month != 0 ) { 1967 selected = $( '#monthDate option:selected' ).text(); 1968 span.attr("onclick", clearFunction); 1969 } 1970 1971 if(year != null && year != -1 && year != 0) { 1972 selected = selected + ' ' + $( '#yearDate option:selected' ).text(); 1973 span.attr("onclick", clearFunction); 1974 } 1975 1976 if (selected) { 1977 span.html(selected); 1978 showElement(span); 1979 } else { 1980 $( '#monthDate').val(-1); 1981 $( '#yearDate').val(-1); 1982 hideElement(span); 1983 } 1984 } 1985 1986 function addBlogs(blogs, tags) { 1987 var blogsDiv = document.getElementById('blogListDiv'); 1988 let displayMode = "null" 1989 1990 if (blogsDiv) { 1991 if (blogs && blogs.length) { 1992 var noResultsDiv = document.getElementById('noResultsDiv'); 1993 if (noResultsDiv) {noResultsDiv.parentNode.removeChild(noResultsDiv);} 1994 1995 if (displayMode === "TAGS_DESC") { 1996 const orderedTags = sortByField(tags, "description", "value", "desc"); 1997 renderTagSections(blogsDiv, orderedTags, blogs); 1998 } else if (displayMode === "TAGS_ASC") { 1999 const orderedTags = sortByField(tags, "description", "value", "asc"); 2000 renderTagSections(blogsDiv, orderedTags, blogs); 2001 } else { 2002 renderBlogs(blogsDiv, blogs); 2003 } 2004 } else { 2005 blogsDiv.innerHTML = '<div id="noResultsDiv">There are no articles that meet the specified criteria</div>'; 2006 } 2007 } 2008 } 2009 2010 function sortByField(array, field, secondaryField, order = "asc") { 2011 return array.sort((a, b) => { 2012 let valA = a[field]; 2013 let valB = b[field]; 2014 2015 if (valA === undefined) { 2016 valA = a[secondaryField] 2017 } 2018 2019 if (valB === undefined) { 2020 valB = b[secondaryField] 2021 } 2022 2023 const numA = Number(valA), numB = Number(valB); 2024 if (!isNaN(numA) && !isNaN(numB)) { 2025 return order === "asc" ? numA - numB : numB - numA; 2026 } 2027 2028 return order === "asc" 2029 ? valA.toString().localeCompare(valB.toString()) 2030 : valB.toString().localeCompare(valA.toString()); 2031 }); 2032 } 2033 2034 function renderTagSections(blogsDiv, tags, blogs) {
2035 tags.forEach((tag, index) => { 2036 const tagDescription = tag.description !== undefined ? tag.description : tag.value; 2037 2038 const filteredBlogs = blogs.filter(blog => 2039 Array.isArray(blog.tags) && blog.tags.includes(tagDescription) 2040 ); 2041 2042 renderBlogs(blogsDiv, filteredBlogs, tagDescription); 2043 }); 2044 } 2045 2046 function renderBlogs(blogsDiv, blogs, sectionTitle) { 2047 if (sectionTitle !== undefined && sectionTitle !== "") { 2048 let div = document.createElement('DIV'); 2049 div.setAttribute('class', 'col-12 blog-section__title'); 2050 div.innerHTML = '<h4 class="section-title">' + sectionTitle + '</h4>'; 2051 blogsDiv.appendChild(div); 2052 } 2053 2054 for (var i = 0; i < blogs.length; i++) { 2055 var blogsContent = blogs[i], div = document.createElement('DIV'); 2056 2057 div.setAttribute('id', 'blogDiv' + blogsContent.code); 2058 2059 2060 div.setAttribute('class', 'col-xl-3 col-lg-4 col-md-6 col-12'); 2061 2062 2063 2064 div.innerHTML = getBlogsHTML(blogsContent); 2065 2066 blogsDiv.appendChild(div); 2067 } 2068 } 2069 2070 function getBlogsHTML(blogs) { 2071 var isCosmic = false; 2072 var isRoca = true; 2073 var isSanitana = false; 2074 2075 //TODO: Cambiar todo este html formado dinamicamente con lo que adapte manuel 2076 2077 var html = '<div class="tarjeta-news blog-card">' + 2078 '<div class="tarjeta-wrapper blog-card__body">' + 2079 '<div class="image-box blog-card__image-box">' + 2080 '<a href="' + blogs.url + '" class="image-news blog-card__image" role="img" aria-label="' + blogs.title + '" id="img0000" '; 2081 2082 if (blogs.image) { 2083 html += 'style="background-image: url(\'' + blogs.image + '\'); background-repeat: no-repeat; background-size: cover;" '; 2084 } 2085 2086 html += '>' + 2087 '<span class="blog-card__image-overlay velo-hover"></span>' + 2088 '</a>' + 2089 '</div>'; 2090 2091 if ((blogs.socialNetworkIcons) && (blogs.socialNetworkIcons.length) && (blogs.image) && (!isCosmic) && (!isRoca)) { 2092 html += '<div class="relative">' + 2093 '<ul class="nav nav-pills esquina-inferior-izquierda">' + 2094 '<li class="nav-item dropdown">' + 2095 '<a class="nav-link dropdown-toggle no-padding" style="background-color:white;" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false"><img alt="" src="' + Liferay.ThemeDisplay.getPathThemeImages() + '/icons/share_18.svg" width="40px" height="40px"></a>' + 2096 '<div class="dropdown-menu" x-placement="bottom-start" style="position: absolute; will-change: transform; top: 0px; left: 0px; transform: translate3d(0px, 50px, 0px); min-width:125px;">' + 2097 '<div class="justify">'; 2098 for (var i = 0; i < blogs.socialNetworkIcons.length; i++) { 2099 var sndata = blogs.socialNetworkIcons[i]; 2100 html += '<a class="dropdown-item" href="' + sndata.url + '"><img alt="' + sndata.title + '" src="' + sndata.icon + '" width="20px" height="20px"></a>'; 2101 } 2102 2103 html += '</div>' + 2104 '</div>' + 2105 '</li>' + 2106 '</ul>' + 2107 '</div>'; 2108 } 2109 2110 html += '<div class="content-wrapper blog-card__content">'; 2111 2112 if (isSanitana) { 2113 html += '<p class="category blog-card__category">'; 2114 2115 if (blogs.tags) { 2116 for (var i = 0; i < blogs.tags.length; i++) { 2117 if (!blogs.tags[i]) {continue;} 2118 html += ((i === blogs.tags.length-1) ? (blogs.tags[i]) : (blogs.tags[i] + ' | ')); 2119 } 2120 } 2121 2122 html += '</p>'; 2123 } 2124 2125 if (isCosmic) { 2126 html += '<div class="datos"><h2 class="style-title"><a href="'+ blogs.url +'" target="">' + blogs.title + '</a></h2>'; 2127 } else { 2128 html += '<h2 class="blog-card__title"><a class="clamp blog-card__title-link" href="' + blogs.url + '">' + blogs.title + 2129 '</a></h2>'; 2130 2131 2132 if (blogs.date) {html += '<span class="data blog-card__date">' + blogs.date + '</span>';} 2133 2134 } 2135 2136 if (blogs.subtitle) { 2137 if (isCosmic) { 2138 html += '<div class="event-description">' + blogs.subtitle + '</div></div>'; 2139 } else { 2140 html += '<span class="clamp blog-card__description">' + blogs.subtitle + '</span>'; 2141 } 2142 } 2143 2144 if (blogs.url && isCosmic) { 2145 html += '<a class="btn-blog__list" href="' + blogs.url +'" tabindex="0">see more</a>'; 2146 } 2147 2148 html += '</div>' + 2149 '</div>' + 2150 '</div>'; 2151 2152 return html; 2153 } 2154 2155 function setLoading(show) { 2156 var loadingDiv = document.getElementById('blogListLoadingDiv'); 2157 if (loadingDiv) {loadingDiv.className = ((show) ? 'loader active' : 'loader');} 2158 } 2159 2160 function updateNextButton(maxblogs) { 2161 2162 var div = document.getElementById('nextButtonDiv'); 2163 var bardiv = document.getElementById('nextButtonBarDiv'); 2164 var span = document.getElementById('nextButtonTotalsSpan'); 2165 2166 if ((div)&&(bardiv)&&(span)) { 2167 var html = ''; 2168 for (var i=0; i < currentMaxPage; i++) { 2169 var active = ((i >= currentFirstPage)&&(i <= currentLastPage)); 2170 html += '<div class="col"><span class="progressive-bar__element' + ((active) ? ' active' : '') + '"></span></div>'; 2171 } 2172 html += '<div class="col"><span class="progressive-bar__element"></span></div>'; 2173 bardiv.innerHTML = html; 2174 var blogs = 0, blogsDiv = document.getElementById('blogListDiv'); 2175 if (blogsDiv) {blogs = $(blogsDiv).find('.blog-card').length;} 2176 span.innerHTML = 'You have seen ' + blogs + ' from ' + maxblogs + ' articles'; 2177 if (currentLastPage < currentMaxPage) {showElement(div);} else {hideElement(div);} 2178 } 2179 2180 var ndiv = document.getElementById('blogNumberDiv'); 2181 if (ndiv) {ndiv.innerHTML = 'show ' + maxblogs + ' articles';} 2182 } 2183 2184 function onCategoryClicked(code) { 2185 var check = document.getElementById('categoryCheck' + code); 2186 if ((check)&&(!check.disabled)) { 2187 if (check.checked) {setCategoryChecked(code);} else {setCategoryUnchecked(code);} 2188 } 2189 } 2190 2191 function onTagClicked(code) { 2192 var check = document.getElementById('tagsCheck' + code); 2193 if ((check)&&(!check.disabled)) { 2194 if (check.checked) { 2195 setTagsChecked(code); 2196 jQuery(check).parent().parent().parent().addClass("active"); 2197 } else { 2198 setTagsUnchecked(code); 2199 jQuery(check).parent().parent().parent().removeClass("active");} 2200 } 2201 } 2202 2203
2204 2205 function onDateClicked(code) { 2206 var check = document.getElementById('dateCheck' + code); 2207 if ((check)&&(!check.disabled)) { 2208 if (check.checked) {setDateChecked(code);} else {setDateUnchecked(code);} 2209 } 2210 } 2211 2212 function disableAll() { 2213 $('input[id^="categoryCheck"]').each(function() {$(this).attr('disabled', true);}); 2214 $('input[id^="tagCheck"]').each(function() {$(this).attr('disabled', true);}); 2215 $('input[id^="dateCheck"]').each(function() {$(this).attr('disabled', true);}); 2216 } 2217 2218 function enableAll() { 2219 $('input[id^="categoryCheck"]').each(function() {$(this).attr('disabled', false);}); 2220 $('input[id^="tagCheck"]').each(function() {$(this).attr('disabled', false);}); 2221 $('input[id^="dateCheck"]').each(function() {$(this).attr('disabled', false);}); 2222 } 2223 2224 function showElement(obj) { 2225 $(obj).show(); 2226 } 2227 2228 function hideElement(obj) { 2229 $(obj).hide(); 2230 } 2231 2232 2233 2234 $(document).ready(function() { 2235 2236 2237 2238 2239 search(); 2240 2241 2242 2243 }); 2244 2245 function loadCollectionsTopSlider() { 2246 2247 $("#collectionTopSlider:not(.slick-initialized)").slick({ 2248 slidesToShow: 7, 2249 slidesToScroll: 3, 2250 dots: false, 2251 arrows: true, 2252 focusOnSelect: false, 2253 infinite: false, 2254 responsive: [{ 2255 breakpoint: 1024, 2256 settings: { 2257 slidesToShow: 5, 2258 slidesToScroll: 3 2259 } 2260 }, { 2261 breakpoint: 640, 2262 settings: { 2263 slidesToShow: 4, 2264 slidesToScroll: 3, 2265 arrows: false 2266 } 2267 }, { 2268 breakpoint: 420, 2269 settings: { 2270 slidesToShow: 2.75, 2271 slidesToScroll: 2, 2272 arrows: false 2273 } 2274 }] 2275 }); 2276 } 2277</script>
2277 <style type="text/css"> 2278 .hideFilter{ 2279 display:none !important; 2280 } 2281 2282 @media (max-width: 1024px) { 2283 #tagCheckedDiv span { 2284 text-transform: uppercase; 2285 } 2286 } 2287</style> </div> </div> </div> </section> </div> </div> </div> </div> </div> <form action="#" aria-hidden="true" class="hide" id="hrefFm" method="post" name="hrefFm"><span></span><button hidden type="submit">Hidden</button></form> </section> <footer class="footer"> <div class="container"> <div class="row"> <div class="col-12"> <div class="footer-logo-img"> <a href="/" target="_self"> <img alt="" data-fileentryid="346080477" src="/documents/20126/346080475/roca-logo.svg/4dc29d13-1df3-b628-786b-7c63db57cdcd?t=1753429104544" style="" /> </a> </div> </div> </div> <div class="row"> <div class="col-12 footer-links"> <div class="footer__lists" id="footer02"> <div class="js-collapse-wrapper"> <h2><a href="/about-roca" target="">About us <span class='arrow' data-toggle='' role='' data-target='' aria-controls='' aria-expanded=''></span></a></h2> <div class="collapseble-wrapper" id="collapse-0"> <ul class="footer__list"> <li class="footer__list-item"> <a href="/about-roca" target="">About Roca</a> </li> <li class="footer__list-item"> <a href="/about-roca/roca-history" target="">Roca's history</a> </li> <li class="footer__list-item"> <a href="https://www.export.roca.com/roca-contract/awards" target="_blank">Awards</a> </li> <li class="footer__list-item"> <a href="/about-roca/annual-reports" target="">Annual reports</a> </li> <li class="footer__list-item"> <a href="/about-roca/join" target="">Join us</a> </li> <li class="footer__list-item"> <a href="/about-roca/news" target="">News</a> </li> <li class="footer__list-item"> <a href="/about-roca/design-innovation/manufacturing-processes" target="">Manufacturing processes</a> </li> <li class="footer__list-item"> <a href="/about-roca/roca-around-the-world" target="">International presence</a> </li> </ul> </div> </div> <div class="js-collapse-wrapper"> <h2><a href="/sustainability" target="">Sustainability <span class='arrow' data-toggle='' role='' data-target='' aria-controls='' aria-expanded=''></span></a></h2> <div class="collapseble-wrapper" id="collapse-1"> <ul class="footer__list"> <li class="footer__list-item"> <a href="/sustainability/ecodesign" target="">EcoDesign</a> </li> <li class="footer__list-item"> <a href="/sustainability/responsible-production" target="">Responsible Production</a> </li> <li class="footer__list-item"> <a href="/sustainability/commitment-society" target="">Commitment to Society</a> </li> <li class="footer__list-item"> <a href="/sustainability/ecovadis" target="">EcoVadis Platinum Medal</a> </li> <li class="footer__list-item"> <a href="/sustainability/sdg" target="">Sustainable Development Goals</a> </li> <li class="footer__list-item"> <a href="/sustainability/certificates-and-declarations" target="">Certificates & Declarations</a> </li> <li class="footer__list-item"> <a href="https://www.wearewater.org/" target="_blank">We Are Water Foundation</a> </li> <li class="footer__list-item"> <a href="https://rocagroup.whispli.com/lp/speakup?locale=en" target="_blank">Speak up platform</a> </li> </ul> </div> </div> <div class="js-collapse-wrapper"> <h2><a href="/professional-area" target="">Professional Area <span class='arrow' data-toggle='' role='' data-target='' aria-controls='' aria-expanded=''></span></a></h2> <div class="collapseble-wrapper" id="collapse-2"> <ul class="footer__list"> <li class="footer__list-item"> <a href="/professional-area/rocagallery" target="">Roca Gallery</a> </li> <li class="footer__list-item"> <a href="/professional-area/design-competitions" target="">Design Competitions</a> </li> <li class="footer__list-item"> <a href="/professional-area/fairs-events" target="">Fairs & Events</a> </li> <li class="footer__list-item"> <a href="/professional-area/international-reference-projects" target="">Reference projects</a> </li> <li class="footer__list-item"> <a href="/professional-area/resources/bim" target="">BIM</a> </li> <li class="footer__list-item"> <a href="/professional-area/resources/videos" target="">Videos</a> </li> </ul> </div> </div> <div class="js-collapse-wrapper"> <h2><a href="/touchless" target="">Touchless solutions <span class='arrow' data-toggle='' role='' data-target='' aria-controls='' aria-expanded=''></span></a></h2> <div class="collapseble-wrapper" id="collapse-3"> <ul class="footer__list"> <li class="footer__list-item"> <a href="/products-touchless-solutions-for-home-spaces" target="">Private bathrooms</a> </li> <li class="footer__list-item"> <a href="/products-touchless-solutions-for-public-spaces" target="">Public spaces</a> </li> </ul> </div> </div> <div class="js-collapse-wrapper"> <h2><a href="/products" target="">Products <span class='arrow' data-toggle='' role='' data-target='' aria-controls='' aria-expanded=''></span></a></h2> <div class="collapseble-wrapper" id="collapse-4"> <ul class="footer__list"> <li class="footer__list-item"> <a href="/everything" target="">Everything in Bathrooms Magazine</a> </li> </ul> </div> </div> <div class="js-collapse-wrapper"> <h2><a href="/where-to-find-us" target="">Where to find us <span class='arrow' data-toggle='' role='' data-target='' aria-controls='' aria-expanded=''></span></a></h2> <div class="collapseble-wrapper" id="collapse-5"> <ul class="footer__list"> <li class="footer__list-item"> <a href="/customer-service/contact" target="">Contact form</a> </li> <li class="footer__list-item"> <a href="/showrooms" target="">Roca Showrooms</a> </li> <li class="footer__list-item"> <a href="/galleries" target="">Roca Galleries</a> </li> </ul> </div> </div> <div class="js-collapse-wrapper"> <h2><a href="/suppliers" target="">Suppliers <span class='arrow' data-toggle='' role='' data-target='' aria-controls='' aria-expanded=''></span></a></h2> <div class="collapseble-wrapper" id="collapse-6"> <ul class="footer__list"> </ul> </div> </div> </div> <div class="footer-pay-social"> <div class="footer-pay-methods"> </div> <div class="footer-social-networks"> <h2>Follow us</h2> <ul class="footer__list"> <li class="footer__list-item"> <a href="https://www.facebook.com/RocaGlobal" target="_blank"> <img alt="" data-fileentryid="346080582" src="/documents/20126/346080475/facebook.svg/ed92f082-30d6-ef16-dacf-7f482c92f3d1?t=1753429139439" style="" /> </a> </li> <li class="footer__list-item"> <a href="https://www.youtube.com/roca" target="_blank"> <img alt="" data-fileentryid="346080588" src="/documents/20126/346080475/youtube.svg/22ec91c0-a0b8-3727-cbab-10c7f60c3d50?t=1753429080048" style="" /> </a> </li> <li class="footer__list-item"> <a href="https://www.instagram.com/roca_global" target="_blank"> <img alt="" data-fileentryid="346080594" src="/documents/20126/346080475/instagram.svg/421da9da-3f30-70d3-3ae3-b5615414260f?t=1753429126851" style="" /> </a> </li> <li class="footer__list-item"> <a href="https://www.pinterest.com/roca_global" target="_blank"> <img alt="" data-fileentryid="346442727" src="/documents/20126/346080475/pinterest.svg/dd13a952-d0a3-d714-878a-c569dead660e?t=1753429094926" style="" /> </a> </li> <li class="footer__list-item"> <a href="https://www.linkedin.com/showcase/roca" target="_blank"> <img alt="" data-fileentryid="346080600" src="/documents/20126/346080475/linkedin.svg/56157e05-371e-
2287a335-2081-2feb335e4334?t=1753429131764" style="" /> </a> </li> <li class="footer__list-item"> <a href="https://www.tiktok.com/@roca_global" target="_blank"> <img alt="" data-fileentryid="370239047" src="/documents/20126/346080475/tiktok_28x28.svg/99e00bac-78d6-c853-d327-4c122b315cc0?t=1763395387448" style="" /> </a> </li> </ul> </div> </div> </div> </div> </div> <div class="footer-institutional"> <div class="container"> <div class="row"> <div class="col-12 footer-institutional__wrapper"> <ul class="footer-institutional__legal"> <li class="footer-institutional__link"> <a href="/legal/privacy-policy" target="">Privacy Policy</a> </li> <li class="footer-institutional__link"> <a href="/legal/legal-notice" target="">Legal notice </a> </li> <li class="footer-institutional__link"> <a href="/cookies-policy" target="">Cookies policy </a> </li> </ul> <div class="footer-institutional__copy">©Copyright 2026 - Roca Sanitario S.A.U.</div> </div> </div> </div> </div> </footer> </div>
2287<script type="text/javascript"> 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300</script>
2300<script> 2301 2302</script>
2302
2302<script type="module"> 2303 import {Session} from '/o/frontend-js-web/__liferay__/legacy.js'; 2304 2305 if (Liferay.Session && Liferay.Session.destructor) { 2306 Liferay.Session.destructor(); 2307 } 2308 2309 Liferay.Session = new Session( 2310 { 2311 autoExtend: true, 2312 redirectOnExpire: false, 2313 redirectUrl: 'https\x3a\x2f\x2fwww\x2eroca\x2ecom\x2fweb\x2froca\x2f', 2314 rememberMe: false, 2315 sessionLength: 900, 2316 sessionTimeoutOffset: 70, 2317 warningLength: 60 2318 }) 2319 </script>
2319
2319<script type="text/javascript"> 2320 2321 if (window.svg4everybody && Liferay.Data.ICONS_INLINE_SVG) { 2322 svg4everybody( 2323 { 2324 polyfill: true, 2325 validate: function (src, svg, use) { 2326 return !src || !src.startsWith('#'); 2327 } 2328 } 2329 ); 2330 } 2331 2332(function() {var $ = AUI.$;var _ = AUI._; 2333 Liferay.Util.delegate( 2334 document, 2335 'focusin', 2336 '.portlet', 2337 function(event) { 2338 event.delegateTarget.closest('.portlet').classList.add('open'); 2339 } 2340 ); 2341 2342 Liferay.Util.delegate( 2343 document, 2344 'focusout', 2345 '.portlet', 2346 function(event) { 2347 event.delegateTarget.closest('.portlet').classList.remove('open'); 2348 } 2349 ); 2350})(); 2351 2352 // <![CDATA[ 2353 2354 2355 2356 Liferay.currentURL = '\x2fabout-roca\x2fnews'; 2357 Liferay.currentURLEncoded = '\x252Fabout-roca\x252Fnews'; 2358 2359 // ]]> 2360 2361 2362 2363 Liferay.Portlet.register('ArticleTitle_INSTANCE_kXT3Czkmbe7m'); 2364 2365 2366 Liferay.Portlet.onLoad( 2367 { 2368 canEditTitle: false, 2369 columnPos: 1, 2370 isAjaxable: true, 2371 isStatic: 'end', 2372 namespacedId: 'p_p_id_ArticleTitle_INSTANCE_kXT3Czkmbe7m_', 2373 portletId: 'ArticleTitle_INSTANCE_kXT3Czkmbe7m', 2374 refreshURL: '\x2fc\x2fportal\x2frender_portlet\x3fp_l_id\x3d182441079\x26p_p_id\x3dArticleTitle_INSTANCE_kXT3Czkmbe7m\x26p_p_lifecycle\x3d0\x26p_t_lifecycle\x3d0\x26p_p_state\x3dnormal\x26p_p_mode\x3dview\x26p_p_col_id\x3dcolumn-1\x26p_p_col_pos\x3d1\x26p_p_col_count\x3d3\x26p_p_isolated\x3d1\x26currentURL\x3d\x252Fabout-roca\x252Fnews', 2375 refreshURLData: {} 2376 } 2377 ); 2378 2379 2380 2381 Liferay.Portlet.register('BlogList_INSTANCE_hA5lBAGvU4gE'); 2382 2383 2384 Liferay.Portlet.onLoad( 2385 { 2386 canEditTitle: false, 2387 columnPos: 2, 2388 isAjaxable: true, 2389 isStatic: 'end', 2390 namespacedId: 'p_p_id_BlogList_INSTANCE_hA5lBAGvU4gE_', 2391 portletId: 'BlogList_INSTANCE_hA5lBAGvU4gE', 2392 refreshURL: '\x2fc\x2fportal\x2frender_portlet\x3fp_l_id\x3d182441079\x26p_p_id\x3dBlogList_INSTANCE_hA5lBAGvU4gE\x26p_p_lifecycle\x3d0\x26p_t_lifecycle\x3d0\x26p_p_state\x3dnormal\x26p_p_mode\x3dview\x26p_p_col_id\x3dcolumn-1\x26p_p_col_pos\x3d2\x26p_p_col_count\x3d3\x26p_p_isolated\x3d1\x26currentURL\x3d\x252Fabout-roca\x252Fnews', 2393 refreshURLData: {} 2394 } 2395 ); 2396 2397 2398 2399 Liferay.Portlet.register('Breadcrumb_INSTANCE_r2bGoDQ7qlpW'); 2400 2401 2402 Liferay.Portlet.onLoad( 2403 { 2404 canEditTitle: false, 2405 columnPos: 0, 2406 isAjaxable: true, 2407 isStatic: 'end', 2408 namespacedId: 'p_p_id_Breadcrumb_INSTANCE_r2bGoDQ7qlpW_', 2409 portletId: 'Breadcrumb_INSTANCE_r2bGoDQ7qlpW', 2410 refreshURL: '\x2fc\x2fportal\x2frender_portlet\x3fp_l_id\x3d182441079\x26p_p_id\x3dBreadcrumb_INSTANCE_r2bGoDQ7qlpW\x26p_p_lifecycle\x3d0\x26p_t_lifecycle\x3d0\x26p_p_state\x3dnormal\x26p_p_mode\x3dview\x26p_p_col_id\x3dcolumn-1\x26p_p_col_pos\x3d0\x26p_p_col_count\x3d3\x26p_p_isolated\x3d1\x26currentURL\x3d\x252Fabout-roca\x252Fnews', 2411 refreshURLData: {} 2412 } 2413 ); 2414 2415 2416</script>
2416<script type="module"> 2417import {InfoItemActionHandler as ComponentModule} from '/o/layout-taglib/__liferay__/render.js'; 2418AUI().use( 2419 'liferay-menu', 2420function(A) { 2421{ 2422Liferay.component('infoItemActionComponent', new ComponentModule({"executeInfoItemActionURL":"https:\/\/www.roca.com\/c\/portal\/execute_info_item_action?p_l_mode=view&plid=182441079","namespace":"","spritemap":"https:\/\/www.roca.com\/o\/roca-restyle-theme\/images\/clay\/icons.svg"}), { destroyOnNavigate: true, portletId: ''}); 2423} 2424(function() { 2425var $ = AUI.$;var _ = AUI._; 2426 new Liferay.Menu(); 2427 2428 var liferayNotices = Liferay.Data.notices; 2429 2430 for (var i = 0; i < liferayNotices.length; i++) { 2431 Liferay.Util.openToast(liferayNotices[i]); 2432 } 2433 2434})(); 2435}); 2436 2437</script>
2437
2437<script src="https://www.roca.com/o/roca-restyle-theme/js/main.js?browserId=firefox&minifierType=js&languageId=en_GB&t=1789464090000" type="text/javascript"></script>
2437
2437<script type="module"> 2438import {main} from '/o/frontend-js-bootstrap-support-web/__liferay__/index.js'; 2439{ 2440main(); 2441} 2442 2443</script>
2443<script type="module"> 2444import {main} from '/o/frontend-js-tooltip-support-web/__liferay__/index.js'; 2445{ 2446main(); 2447} 2448 2449</script>
2449<script type="text/javascript"> 2450Liferay.CustomDialogs = {enabled: false}; 2451 2452</script>
2452<script> 2453 2454</script>
2454
2454<script type="text/javascript">document.currencySymbol = 'â¬';</script>
2454
2454<script src="https://www.roca.com/o/roca-restyle-theme/js/roca-full.min.js?v15" defer></script>
2454
2454<script src="https://www.roca.com/o/roca-restyle-theme/js/lib/roca-chat.min.js" defer></script>
2454 <!-- endinject -->
2454<script type="text/javascript"> 2455 const collectDemandButtons = JSON.parse('{"buttons":[]}') 2456 $(document).ready(function() { 2457 updateCollectDemandButtonsHTML(collectDemandButtons.buttons); 2458 }); 2459 2460</script>
2460 </body> </html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.