View all
  • Free Shipping For Order Over $49.

    Free Shipping For Order Over $49.

    Shop now

Free Shipping For Order Over $49.

Free Shipping For Order Over $49.

const updateHeaderMetrics = () => { const header = document.getElementById('header'); const rect = header.getBoundingClientRect(); const headerHeight = rect.bottom; document.documentElement.style.setProperty('--header-height', `${headerHeight}px`); }; window.addEventListener('DOMContentLoaded', updateHeaderMetrics); window.addEventListener('resize', updateHeaderMetrics); const header = document.getElementById('header'); const resizeObserver = new ResizeObserver(entries => { for (let entry of entries) { const rect = entry.target.getBoundingClientRect(); const headerHeight = rect.bottom; document.documentElement.style.setProperty('--header-height', `${headerHeight}px`); } }); resizeObserver.observe(header);
function setSearchUrl(searchValue) { return Promise.resolve({ url: '/search?q=' + searchValue }); } exportFunction('setSearchUrl', setSearchUrl);

Flor Haven

function setSearchUrl(searchValue) { return Promise.resolve({ url: '/search?q=' + searchValue }); } exportFunction('setSearchUrl', setSearchUrl);
function setSearchUrl(searchValue) { return Promise.resolve({ url: '/search?q=' + searchValue }); } exportFunction('setSearchUrl', setSearchUrl); Search
Account
Log in Create an account
Cart
  • Flower Seeds
    Flower Seeds
    • Flower Seeds A~D
      Flower Seeds A~D
      • Assorted Flower Series
      • Anemone
      • Alocasia bulbs
      • Alocasia Bulbs
      • Ageratum
      • Alyssum
      • Amaranthus
      • Anemone Seeds
      • Aquilegia
      • Aster
      • Begonia
      • Begonia
      • Baby's Breath Gypsophila
      • Bells of Ireland
      • Borage
      • Bunny Tail
      • Bachelor's Buttons
      • Coleus
      • Chrysanthemum
      • Cat's Eye Dazzle Flower
      • Carnation
      • Celosia
      • Chamomile
      • Corn Cockle
      • Cosmos
      • Cornflower
      • Columbine
      • Clarkia
      • Dahlia
      • Desert Rose
      • Delphinium
      • Delphinium
      • Didiscus
      • Delphiniums
    • Flower Seeds E~J
      Flower Seeds E~J
      • Flower Seed Kit
      • Foliage (Persian Cress)
      • Feverfew
      • Forget-Me-Nots
      • Gerbera Flower Seeds
      • Giant Hanging Lobelia Seeds
      • Globe Amaranth/Gompherena
      • Grasses
      • Godetia
      • Garden Seeds
      • Hollyhocks
      • Hosta
      • Hollyhock
      • Iris Bulbs
      • Jasmine
      • Echinops
      • Euphorbia
    • Flower Seeds K~P
      Flower Seeds K~P
      • Perfume Amaryllis
      • Petunia
      • Phlox
      • Poached Egg
      • Plantable Calendar
      • Marigold
      • Mexican Hat
      • Myosotis (Forget Me Not)
      • Marigolds
      • Nasturtium
      • Nigella
    • Flower Seeds Q~Z
      Flower Seeds Q~Z
      • Ranunculus Seed
      • Rose
      • Lily
      • Lotus Seed
      • Larkspur
      • Lavender
      • Lantern Flower
      • Lisianthus
      • Linaria
      • Lavatera
      • Tulips
      • Queen Anne's Lace
      • Sunflower
      • Sweet Pea
      • Scabiosa
      • Snapdragon
      • Statice
      • Strawflower
      • Sunflower
      • Sweet Pea
      • Summer Flowers
      • Edible Flowers
      • Viola
      • Zinnia
  • Vegetable Seeds
    Vegetable Seeds
    • Summer Vegetables
    • Winter Vegetable
    • Microgreens Seeds
    • Fruit Seeds
    • Carrot Seeds
    • Radish Seeds
    • Onion Seeds
    • Turnip Seeds
    • Salsify Seeds
    • Cucumber Seeds
    • Pumpkins Seeds
    • Melons Seeds
    • Asparagus Seeds
    • Gourds Seeds
    • Zucchini Seeds
    • Cauliflower Seeds
    • Kale Seeds
    • Microgreens
    • Lettuce Seeds
    • Cabbage Seeds
    • Swiss Chard
    • Salad Seeds
    • Endive Seeds
    • Dark Green Vegetables
    • Tomato Seeds
    • Egg Plant Seeds
    • Sweet Pepper Seeds
    • Hot Chili Pepper
  • Wildflower Seed
  • Artificial Flowers
  • Fruit Seeds
  • Tools & Fertilizer
  • Blog
  • Log in Create an account
  • Flower Seeds
    Flower Seeds A~D
    • Assorted Flower Series
    • Anemone
    • Alocasia bulbs
    • Alocasia Bulbs
    • Ageratum
    • Alyssum
    • Amaranthus
    • Anemone Seeds
    • Aquilegia
    • Aster
    • Begonia
    • Begonia
    • Baby's Breath Gypsophila
    • Bells of Ireland
    • Borage
    • Bunny Tail
    • Bachelor's Buttons
    • Coleus
    • Chrysanthemum
    • Cat's Eye Dazzle Flower
    • Carnation
    • Celosia
    • Chamomile
    • Corn Cockle
    • Cosmos
    • Cornflower
    • Columbine
    • Clarkia
    • Dahlia
    • Desert Rose
    • Delphinium
    • Delphinium
    • Didiscus
    • Delphiniums
    Flower Seeds E~J
    • Flower Seed Kit
    • Foliage (Persian Cress)
    • Feverfew
    • Forget-Me-Nots
    • Gerbera Flower Seeds
    • Giant Hanging Lobelia Seeds
    • Globe Amaranth/Gompherena
    • Grasses
    • Godetia
    • Garden Seeds
    • Hollyhocks
    • Hosta
    • Hollyhock
    • Iris Bulbs
    • Jasmine
    • Echinops
    • Euphorbia
    Flower Seeds K~P
    • Perfume Amaryllis
    • Petunia
    • Phlox
    • Poached Egg
    • Plantable Calendar
    • Marigold
    • Mexican Hat
    • Myosotis (Forget Me Not)
    • Marigolds
    • Nasturtium
    • Nigella
    Flower Seeds Q~Z
    • Ranunculus Seed
    • Rose
    • Lily
    • Lotus Seed
    • Larkspur
    • Lavender
    • Lantern Flower
    • Lisianthus
    • Linaria
    • Lavatera
    • Tulips
    • Queen Anne's Lace
    • Sunflower
    • Sweet Pea
    • Scabiosa
    • Snapdragon
    • Statice
    • Strawflower
    • Sunflower
    • Sweet Pea
    • Summer Flowers
    • Edible Flowers
    • Viola
    • Zinnia
    SALE
    Flor Haven Jasmine Potted Plant – Winter-Friendly, Fragrant & Easy to Grow
    from 
    $9.99
    $33.29
    - 70%
    - 70%
  • Vegetable Seeds
    • Summer Vegetables
    • Winter Vegetable
    • Microgreens Seeds
    • Fruit Seeds
    • Carrot Seeds
    • Radish Seeds
    • Onion Seeds
    • Turnip Seeds
    • Salsify Seeds
    • Cucumber Seeds
    • Pumpkins Seeds
    • Melons Seeds
    • Asparagus Seeds
    • Gourds Seeds
    • Zucchini Seeds
    • Cauliflower Seeds
    • Kale Seeds
    • Microgreens
    • Lettuce Seeds
    • Cabbage Seeds
    • Swiss Chard
    • Salad Seeds
    • Endive Seeds
    • Dark Green Vegetables
    • Tomato Seeds
    • Egg Plant Seeds
    • Sweet Pepper Seeds
    • Hot Chili Pepper
    Black Chili Hot Pepper Seeds
    from 
    $7.99
  • Wildflower Seed
  • Artificial Flowers
  • Fruit Seeds
  • Tools & Fertilizer
  • Blog
  • More links
    function setSearchUrl(searchValue) { return Promise.resolve({ url: '/search?q=' + searchValue }); } exportFunction('setSearchUrl', setSearchUrl);
    function setSearchUrl(searchValue) { return Promise.resolve({ url: '/search?q=' + searchValue }); } exportFunction('setSearchUrl', setSearchUrl);
    Home /  My Account
    Login
    Please enter your e-mail and password:
    Email is required
    Please enter a valid email.
    Password is required.
    Password must be between 6-16 characters long.
    Forgot password?
    Don't have an account? Create one
    Login for more discounts
    Subscribe today to hear first about our sales
    Please fill in this field
    Please enter a valid email address
    Thanks for subscribing
    COMPANY
    • Contact Us
    • About Us
    • Track Your Package
    • FAQs
    SUPPORT
    • Terms of Service
    • Privacy Policy
    • Return Policy
    • Shipping Policy
    CONTACT US

    Email: service@florhaven.com

    Business Hours: 9:00 a.m. to 5:00 p.m., Monday to Friday, GMT+8

    WE ACCEPT
    American Express Apple Pay Mastercard PayPal Visa Google Pay
    COMPANY
    • Contact Us
    • About Us
    • Track Your Package
    • FAQs
    SUPPORT
    • Terms of Service
    • Privacy Policy
    • Return Policy
    • Shipping Policy
    CONTACT US

    Email: service@florhaven.com

    Business Hours: 9:00 a.m. to 5:00 p.m., Monday to Friday, GMT+8

    WE ACCEPT
    American Express Apple Pay Mastercard PayPal Visa Google Pay
    © 2026 Flor Haven

    Cart

    Your cart is reserved for !
    cart
    cart
    Your cart is currently empty.
    Continue shopping
    const TAG = "spz-custom-popup"; const DISPLAY_TYPE = { POPUP: "PTT_POPUP" // 弹窗 }; const API = { LIST: `/api/storefront/promotion/placement/list`, // 获取弹窗列表 REPORT: `/api/storefront/promotion/placement/data/report` // 上报数据 }; const DISPLAY_DEVICE = { PC_AND_MOBILE: "PD_PC_MOBILE", // PC和移动端 PC: "PD_PC", // PC MOBILE: "PD_MOBILE" // 移动端 }; const REPORT_EVENT = { CLICK: "PE_CLICK", // 点击事件 IMPRESSION: "PE_IMPRESSION" // 曝光事件 }; class SpzCustomPopup extends SPZ.BaseElement { constructor(element) { super(element); this.popupList_ = []; // 弹窗数据 this.popupZIndex = 1050; // 弹窗层级 // 节流处理 每5s内多次点击 算一次点击上报 this.throttleReport = this.win.SPZCore.Types.throttle( this.win, (data) => { this.reportData(data) }, 5000 ) } static deferredMount() { return false; } buildCallback() { this.action_ = SPZServices.actionServiceForDoc(this.element); this.templates_ = SPZServices.templatesForDoc(this.element); this.xhr_ = SPZServices.xhrFor(this.win); this.setupAction_(); this.viewport_ = this.getViewport(); } mountCallback() { this.fetchData_(); } // 接口请求,获取数据 fetchData_() { const id = window.SHOPLAZZA.meta.page.template_type === 51 ? window.SHOPLAZZA.meta.page.resource_id : 0; return this.xhr_.fetchJson(API.LIST, { method: 'POST', body: { page_id: window.SHOPLAZZA.meta.page.template_type, placement_type: DISPLAY_TYPE.POPUP, discount_id: id } }).then((res) => { // 请求成功 执行render this.doRender_(res.list); }).catch((err) => { console.error(err); }); } // 渲染dom doRender_(data) { this.popupList_ = data || []; if (this.popupList_.length > 0) { this.popupList_.forEach((item) => { item.config = JSON.parse(item.config); }) } return this.templates_ .findAndRenderTemplate(this.element, { list: this.popupList_ }) .then((el) => { const children = this.element.querySelector('*:not(template)'); children && SPZCore.Dom.removeElement(children); this.element.appendChild(el); }) .then(() => { // 遍历显示弹窗 this.popupList_.forEach((item) => { this.showPopup_(item); }); }) } showPopup_(popup) { // 展示弹窗 符合展示条件的弹窗 const $popup = document.querySelector(`#popup-${popup.id}`); $popup && SPZ.whenApiDefined($popup).then((api)=> { const isPC = this.viewport_.getWidth() >= 960; const isMobile = this.viewport_.getWidth() < 960; const isMatchPCDevice = popup.device === DISPLAY_DEVICE.PC_AND_MOBILE || popup.device === DISPLAY_DEVICE.PC; const isMatchMobileDevice = popup.device == DISPLAY_DEVICE.PC_AND_MOBILE || popup.device === DISPLAY_DEVICE.MOBILE; if((isPC && isMatchPCDevice) || (isMobile && isMatchMobileDevice)) { // 根据推送时间 延迟展示弹窗 setTimeout(() => { api.open(); }, popup.delay_seconds * 1000); } }) } // 上报数据 async reportData(data) { this.xhr_.fetchJson(API.REPORT, { method: "POST", body: { placement_id: data.placement_id, event: data.event } }); } setupAction_() { this.registerAction('handleTrack', async(invocation) => { // 如果是主题编辑器则不用处理 if(window.top !== window.self) { return; } const data = invocation.args; const event = data.event; // 点击上报 节流处理 if(event === REPORT_EVENT.CLICK) { await this.throttleReport(data); } else { this.reportData(data); } }); } triggerEvent_(name, data) { const event = SPZUtils.Event.create(this.win, `${ TAG }.${ name }`, data || {}); this.action_.trigger(this.element, name, event); } isLayoutSupported(layout) { return layout == SPZCore.Layout.CONTAINER; } } SPZ.defineElement(TAG, SpzCustomPopup);
    const TAG = "spz-custom-announcement"; const DISPLAY_TYPE = { ANNOUNCEMENT: "PTT_BANNER" // 公告栏 }; const API = { LIST: `/api/storefront/promotion/placement/list`, // 获取公告栏列表 REPORT: `/api/storefront/promotion/placement/data/report` // 上报数据 }; const DISPLAY_DEVICE = { PC_AND_MOBILE: "PD_PC_MOBILE", // PC和移动端 PC: "PD_PC", // PC MOBILE: "PD_MOBILE" // 移动端 }; const REPORT_EVENT = { CLICK: "PE_CLICK", // 点击事件 IMPRESSION: "PE_IMPRESSION" // 曝光事件 }; const POSITION = { TOP: "PP_TOP", // 顶部 BOTTOM: "PP_BOTTOM" // 底部 } const MODE = { FIXED: "PM_FIXED", // 固定 NORMAL: "PM_SCROLLING" // 滚动 } const THEME_NAME = window.SHOPLAZZA.theme.merchant_theme_name; class SpzCustomAnnouncement extends SPZ.BaseElement { constructor(element) { super(element); this.announcementList_ = []; // 公告栏数据 } static deferredMount() { return false; } buildCallback() { this.action_ = SPZServices.actionServiceForDoc(this.element); this.templates_ = SPZServices.templatesForDoc(this.element); this.xhr_ = SPZServices.xhrFor(this.win); this.setupAction_(); this.viewport_ = this.getViewport(); } mountCallback() { this.fetchData_(); this.createAnnouncementDom_(); this.listenCartChange_(); } fetchData_(type = '') { const id = window.SHOPLAZZA.meta.page.template_type === 51 ? window.SHOPLAZZA.meta.page.resource_id : 0; return this.xhr_.fetchJson(API.LIST, { method: 'POST', body: { page_id: window.SHOPLAZZA.meta.page.template_type, placement_type: DISPLAY_TYPE.ANNOUNCEMENT, discount_id: id } }).then((res) => { this.announcementList_ = res.list || []; if (this.announcementList_.length > 0) { this.announcementList_.forEach((item) => { item.config = JSON.parse(item.config); }); } if(type === 'cartChange') { this.announcementList_.forEach((item) => { this.updateText_(item); }); } else { this.doRender_(this.announcementList_); } }).catch((error) => { console.error(error); }) } doRender_(data) { return this.templates_ .findAndRenderTemplate(this.element, { list: this.announcementList_ }) .then((el) => { const children = this.element.querySelector('*:not(template)'); children && SPZCore.Dom.removeElement(children); this.element.appendChild(el); }) .then(() => { this.announcementList_.forEach((item) => { this.showAnnouncement_(item); }); }).then(() => { this.handleThemeCompatibility_(); }); } // 更新文案 updateText_(item) { const announcement = document.querySelector(`#announcement-${item.id}`); const announcementText = announcement.querySelectorAll('.announcement_text'); const textArr = item.config.text_discount.replace_texts; const textDom = textArr.map((text) => { return `${text}`; }).join(','); announcementText.forEach((text) => { text.innerHTML = textDom; }); } // 创建公告栏dom createAnnouncementDom_() { const isHero = /Hero/.test(THEME_NAME); const isEva = /Eva/.test(THEME_NAME); const headerEl = document.querySelector('[data-section-type="header"]'); const headerSticky = headerEl && SPZCore.Dom.computedStyle(this.win, headerEl).position === 'sticky'; // 创建滚动的底部公告栏 const announcementBottomContainer = document.createElement('div'); announcementBottomContainer.className = 'announcement__container_bottom bootstrap'; document.body.appendChild(announcementBottomContainer); // 创建固定的底部公告栏 const announcementBottomSticky = document.createElement('ljs-sticky'); announcementBottomSticky.className = 'announcement__container_bottom-sticky'; announcementBottomSticky.setAttribute('layout', 'container'); announcementBottomSticky.setAttribute('position', 'bottom'); announcementBottomSticky.style.position = 'fixed'; announcementBottomSticky.style.bottom = '0'; announcementBottomSticky.style.left = '0'; announcementBottomSticky.style.right = '0'; announcementBottomSticky.style.zIndex = '1030'; document.body.appendChild(announcementBottomSticky); const announcementTopContainer = document.createElement('div'); announcementTopContainer.classList.add('announcement__container_top'); if (isHero) { announcementTopContainer.classList.add('announcement__container_top_zIndex_1030'); } announcementTopContainer.classList.add('bootstrap'); document.body.insertBefore(announcementTopContainer, document.body.children[0]); const announcementTopFixedContainer = document.createElement('div'); announcementTopFixedContainer.classList.add('announcement__container_top-fixed'); if (isHero) { announcementTopFixedContainer.classList.add('announcement__container_top_zIndex_1030'); } announcementTopFixedContainer.classList.add('bootstrap'); const insertBeforeElement = headerSticky ? headerEl : document.body; insertBeforeElement.insertBefore(announcementTopFixedContainer, insertBeforeElement.children[0]); if (isEva) { const evaHeader = document.querySelector('header.header'); const isEvaMaskHeader = evaHeader && SPZCore.Dom.computedStyle(this.win, evaHeader).position === 'absolute'; let fixedBannerTopContainer = document.querySelector('.announcement__container_top-fixed'); if (isEvaMaskHeader) { if (fixedBannerTopContainer) { fixedBannerTopContainer.remove(); } const newBanner = document.createElement('div'); newBanner.className = 'announcement__container_top-fixed bootstrap'; document.body.insertBefore(newBanner, document.body.firstChild); fixedBannerTopContainer = newBanner; } else { if (!headerEl) return; const observer = new MutationObserver(() => { const isSticky = SPZCore.Dom.computedStyle(this.win, headerEl).position === 'sticky'; if (!isSticky) return; const isTopFixedAnnouncementInHeader = headerEl.querySelector('.announcement__container_top-fixed'); if (isTopFixedAnnouncementInHeader) return; const announcementTopFixedContainer = document.querySelector('.announcement__container_top-fixed'); if (announcementTopFixedContainer) { announcementTopFixedContainer.remove(); headerEl.insertBefore(announcementTopFixedContainer, headerEl.children[0]); observer.disconnect(); } }); observer.observe(headerEl, { attributes: true, attributeFilter: ['style', 'class'] }); } if (headerSticky && !isEvaMaskHeader && fixedBannerTopContainer) { fixedBannerTopContainer.style.position = 'relative'; fixedBannerTopContainer.style.zIndex = '29'; } } } // 展示公告栏 showAnnouncement_(item) { const announcement = document.querySelector(`#announcement-${item.id}`); const announcementBottomContainer = document.querySelector('.announcement__container_bottom'); const announcementBottomSticky = document.querySelector('.announcement__container_bottom-sticky'); const announcementTopContainer = document.querySelector('.announcement__container_top'); const announcementTopFixedContainer = document.querySelector('.announcement__container_top-fixed'); const isPC = this.viewport_.getWidth() >= 960; const isMobile = this.viewport_.getWidth() < 960; const isMatchPCDevice = item.device === DISPLAY_DEVICE.PC_AND_MOBILE || item.device === DISPLAY_DEVICE.PC; const isMatchMobileDevice = item.device == DISPLAY_DEVICE.PC_AND_MOBILE || item.device === DISPLAY_DEVICE.MOBILE; if((isPC && isMatchPCDevice) || (isMobile && isMatchMobileDevice)) { if (item.position === POSITION.BOTTOM) { if(item.mode === MODE.FIXED) { announcementBottomSticky && announcementBottomSticky.appendChild(announcement); } else { announcementBottomContainer && announcementBottomContainer.appendChild(announcement); } } else { if (item.mode === MODE.FIXED) { announcementTopFixedContainer && announcementTopFixedContainer.appendChild(announcement); } else { announcementTopContainer && announcementTopContainer.appendChild(announcement); } } this.reportData({ placement_id: item.id, event: REPORT_EVENT.IMPRESSION }); } } // 处理主题兼容 handleThemeCompatibility_() { try { const isBoost = /Boost/.test(THEME_NAME); const isHyde = /Hyde/.test(THEME_NAME); const isEva = /Eva/.test(THEME_NAME); const boostHeader = document.querySelector('.boost-header'); const fixedBannerTopContainer = document.querySelector('.announcement__container_top-fixed'); const notFixedBannerTopContainer = document.querySelector('.announcement__container_top'); const headerEl = document.querySelector('[data-section-type="header"]'); const headerSticky = headerEl && SPZCore.Dom.computedStyle(this.win, headerEl).position === 'sticky'; const header = document.querySelector('.header__fixed') || document.querySelector('.header__wrapper'); const headerFixed = header && SPZCore.Dom.computedStyle(this.win, header).position === 'fixed'; const handleScroll = SPZCore.Types.throttle(this.win, () => { if (isHyde) { if (header && headerSticky) { header.style.marginTop = `${fixedBannerTopContainer.offsetHeight}px`; } else { notFixedBannerTopContainer.style.marginTop = `${fixedBannerTopContainer.offsetHeight}px`; } } if (isEva) { const evaHeader = document.querySelector('header.header'); const isEvaMaskHeader = evaHeader && SPZCore.Dom.computedStyle(this.win, evaHeader).position === 'absolute'; if (!isEvaMaskHeader) return; if (evaHeader.classList.contains('header__fixed')) { evaHeader.style.marginTop = `${fixedBannerTopContainer.offsetHeight}px`; } else { notFixedBannerTopContainer.style.marginTop = `${fixedBannerTopContainer.offsetHeight}px`; } if(document.documentElement.scrollTop === 0) { evaHeader.style.marginTop = '0'; } } if (headerSticky) return; if (headerFixed) { header.style.marginTop = `${fixedBannerTopContainer.offsetHeight}px`; } else { const observer = new MutationObserver((mutationsList, observer) => { for (const mutation of mutationsList) { if (mutation.type === 'childList' && fixedBannerTopContainer.childElementCount > 0) { notFixedBannerTopContainer.style.marginTop = `${fixedBannerTopContainer.offsetHeight}px`; observer.disconnect(); // 停止观察 break; } } }); // 开始观察 fixedBannerTopContainer 的子节点变化 observer.observe(fixedBannerTopContainer, { childList: true, subtree: true }); // 初始检查 if (fixedBannerTopContainer.childElementCount > 0) { notFixedBannerTopContainer.style.marginTop = `${fixedBannerTopContainer.offsetHeight}px`; } if(header) { header.style.marginTop = '0'; } } if (isBoost) { fixedBannerTopContainer.style.zIndex = '1031'; if (boostHeader && boostHeader.classList.contains('header__fixed')) { boostHeader.style.marginTop = `${fixedBannerTopContainer.offsetHeight}px`; } else { notFixedBannerTopContainer.style.marginTop = `${fixedBannerTopContainer.offsetHeight}px`; } } }, 16); window.addEventListener('scroll', handleScroll); window.dispatchEvent(new Event('scroll')); } catch (error) { console.error('error', error); } } // 上报数据 async reportData(data) { // 如果是主题编辑器则不用处理 if(window.top !== window.self) { return; } this.xhr_.fetchJson(API.REPORT, { method: "POST", body: { placement_id: data.placement_id, event: data.event } }); } // 监听购物车变化事件dj.cartChange listenCartChange_() { SPZUtils.Event.listen(document, 'dj.cartChange', (event) => { this.fetchData_('cartChange'); }); } setupAction_() { this.registerAction('handleClose', (invocation) => { const data = invocation.args; const id = data.id; const announcement = document.querySelector(`#announcement-${id}`); announcement && SPZCore.Dom.removeElement(announcement); window.dispatchEvent(new Event('scroll')); }); this.registerAction('handleJumpLink', (invocation) => { const data = invocation.args; if(!data.show_url) return; data.url && window.open(data.url, data.open_new_window ? '_blank' : '_self'); this.reportData({ placement_id: data.id, event: REPORT_EVENT.CLICK }); }); } triggerEvent_(name, data) { const event = SPZUtils.Event.create(this.win, `${ TAG }.${ name }`, data || {}); this.action_.trigger(this.element, name, event); } isLayoutSupported(layout) { return layout == SPZCore.Layout.CONTAINER; } } SPZ.defineElement(TAG, SpzCustomAnnouncement);