# See the Pagy documentation: https://ddnexus.github.io/pagy/extras/semantic# frozen_string_literal: truerequire'pagy/extras/shared'classPagymoduleFrontend# Pagination for semantic: it returns the html with the series of links to the pagesdefpagy_semantic_nav(pagy,pagy_id: nil,link_extra: '')p_id=%( id="#{pagy_id}")ifpagy_idlink=pagy_link_proc(pagy,link_extra: %(class="item" #{link_extra}))html=+%(<div#{p_id} class="pagy-semantic-nav ui pagination menu">)html<<pagy_semantic_prev_html(pagy,link)pagy.series.eachdo|item|# series example: [1, :gap, 7, 8, "9", 10, 11, :gap, 36]html<<caseitemwhenIntegerthenlink.callitem# page linkwhenStringthen%(<a class="item active">#{item}</a>)# current pagewhen:gapthen%(<div class="disabled item">#{pagy_t'pagy.nav.gap'}</div>)# page gapendendhtml<<pagy_semantic_next_html(pagy,link)html<<%(</div>)end# Javascript pagination for semantic: it returns a nav and a JSON tag used by the Pagy.nav javascriptdefpagy_semantic_nav_js(pagy,deprecated_id=nil,pagy_id: nil,link_extra: '',steps: nil)pagy_id=Pagy.deprecated_arg(:id,deprecated_id,:pagy_id,pagy_id)ifdeprecated_idp_id=%( id="#{pagy_id}")ifpagy_idlink=pagy_link_proc(pagy,link_extra: %(class="item" #{link_extra}))tags={'before'=>pagy_semantic_prev_html(pagy,link),'link'=>link.call(PAGE_PLACEHOLDER),'active'=>%(<a class="item active">#{pagy.page}</a>),'gap'=>%(<div class="disabled item">#{pagy_t('pagy.nav.gap')}</div>),'after'=>pagy_semantic_next_html(pagy,link)}%(<div#{p_id} class="pagy-njs pagy-semantic-nav-js ui pagination menu" role="navigation" #{pagy_json_attr(pagy,:nav,tags,pagy.sequels(steps))}></div>)end# Combo pagination for semantic: it returns a nav and a JSON tag used by the Pagy.combo_nav javascriptdefpagy_semantic_combo_nav_js(pagy,deprecated_id=nil,pagy_id: nil,link_extra: '')pagy_id=Pagy.deprecated_arg(:id,deprecated_id,:pagy_id,pagy_id)ifdeprecated_idp_id=%( id="#{pagy_id}")ifpagy_idlink=pagy_link_proc(pagy,link_extra: %(class="item" #{link_extra}))p_page=pagy.pagep_pages=pagy.pagesinput=%(<input type="number" min="1" max="#{p_pages}" value="#{p_page}" style="padding: 0; text-align: center; width: #{p_pages.to_s.length+1}rem; margin: 0 0.3rem">)%(<div#{p_id} class="pagy-semantic-combo-nav-js ui compact menu" role="navigation" #{pagy_json_attrpagy,:combo_nav,p_page,pagy_marked_link(link)}>#{pagy_semantic_prev_htmlpagy,link}<div class="pagy-combo-input item">#{pagy_t'pagy.combo_nav_js',page_input: input,count: p_page,pages: p_pages}</div> #{pagy_semantic_next_htmlpagy,link}</div>)endprivatedefpagy_semantic_prev_html(pagy,link)if(p_prev=pagy.prev)link.callp_prev,'<i class="left small chevron icon"></i>','aria-label="previous"'else+%(<div class="item disabled"><i class="left small chevron icon"></i></div>)endenddefpagy_semantic_next_html(pagy,link)if(p_next=pagy.next)link.callp_next,'<i class="right small chevron icon"></i>','aria-label="next"'else+%(<div class="item disabled"><i class="right small chevron icon"></i></div>)endendendend