上传修改后的主题
This commit is contained in:
120
spiffy_theme_backend/static/src/xml/base.xml
Normal file
120
spiffy_theme_backend/static/src/xml/base.xml
Normal file
@@ -0,0 +1,120 @@
|
||||
<templates id="template" xml:space="preserve">
|
||||
<t t-name="show_icon_pack" t-inherit="web.ListView.Buttons" t-inherit-mode="primary" owl="1" >
|
||||
<xpath expr="//div[hasclass('o_list_buttons')]" position="inside">
|
||||
<a class="btn btn-primary open_wizard_action" href="https://www.bizople.com/remix-icons" target="_blank">
|
||||
Show Icon Pack
|
||||
</a>
|
||||
</xpath>
|
||||
</t>
|
||||
|
||||
<t t-name="spiffy_theme_backend.UserMenuInherit" t-inherit="web.UserMenu" t-inherit-mode="extension" owl="1">
|
||||
<xpath expr="//Dropdown" position="replace">
|
||||
<div class="o_user_menu d-none d-lg-block">
|
||||
<Dropdown class="'user-image-style d-none d-md-block pe-0'">
|
||||
<t t-set-slot="toggler">
|
||||
<img class="rounded-circle o_user_avatar oe_topbar_avatar" t-att-src="source" alt="User"/>
|
||||
<div class="user-info">
|
||||
<span class="oe_topbar_name text-truncate"><t t-esc="user.name"/><t t-if="env.debug" t-esc="' (' + user.db.name + ')'"/></span>
|
||||
<span class="greeting">
|
||||
<t t-if="greeting">
|
||||
<t t-esc="greeting"/>
|
||||
</t>
|
||||
</span>
|
||||
</div>
|
||||
</t>
|
||||
<t t-foreach="getElements()" t-as="element" t-key="element_index">
|
||||
<t t-if="!element.hide">
|
||||
<DropdownItem
|
||||
t-if="element.type == 'item' || element.type == 'switch'"
|
||||
href="element.href"
|
||||
dataset="{ menu: element.id }"
|
||||
onSelected="element.callback"
|
||||
>
|
||||
<CheckBox
|
||||
t-if="element.type == 'switch'"
|
||||
value="element.isChecked"
|
||||
className="'form-switch d-flex flex-row-reverse justify-content-between p-0'"
|
||||
onChange="element.callback"
|
||||
>
|
||||
<t t-out="element.description"/>
|
||||
</CheckBox>
|
||||
<t t-else="" t-out="element.description"/>
|
||||
</DropdownItem>
|
||||
<div t-if="element.type == 'separator'" role="separator" class="dropdown-divider"/>
|
||||
</t>
|
||||
</t>
|
||||
</Dropdown>
|
||||
</div>
|
||||
</xpath>
|
||||
</t>
|
||||
|
||||
<t t-name="spiffy_theme_backend.BurgerUserMenuInherit" t-inherit="web.BurgerUserMenu" t-inherit-mode="extension" owl="1">
|
||||
<xpath expr="//a" position="replace">
|
||||
<a t-if="element.type == 'item'" class="dropdown-item py-3 fs-4" t-att-href="element.href or ''" t-out="element.description" t-on-click.stop.prevent="() => this._onItemClicked(element.callback)"/>
|
||||
</xpath>
|
||||
</t>
|
||||
|
||||
<t t-inherit="web.SwitchCompanyMenu" t-inherit-mode="extension" owl="1">
|
||||
<xpath expr="//Dropdown" position="replace">
|
||||
<div class="o_switch_company_menu">
|
||||
<div class="o_user_lang position-relative d-none">
|
||||
<a role="button" class="dropdown-toggle lang_selector" data-bs-toggle="dropdown" data-display="static" aria-expanded="false" title="Languages">
|
||||
<i class="ri ri-translate-2" role="img" aria-label="Activities" />
|
||||
</a>
|
||||
<div class="dropdown-menu" role="menu">
|
||||
<div class="align-items-center active_lang">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="company_selections d-inline-block position-relative">
|
||||
<a role="button" class="dropdown-toggle o-no-caret" data-bs-toggle="dropdown" data-display="static" aria-expanded="false" href="#" title="Company">
|
||||
<span t-attf-class="{{env.isSmall ? 'ri ri-building-2-line' : 'oe_topbar_name'}}">
|
||||
<t t-if="!env.isSmall"><i class="ri ri-building-2-line" /></t>
|
||||
</span>
|
||||
</a>
|
||||
<div class="dropdown-menu" role="menu">
|
||||
<t t-foreach="Object.values(companyService.availableCompanies).sort((c1, c2) => c1.sequence - c2.sequence)" t-as="company" t-key="company.id">
|
||||
<t t-call="web.SwitchCompanyItem">
|
||||
<t t-set="company" t-value="company" />
|
||||
</t>
|
||||
</t>
|
||||
</div>
|
||||
</div>
|
||||
<div class="debug_activator">
|
||||
<a t-attf-class="activate_debug {{isDebug ? 'toggle' : ''}}" title="Debug">
|
||||
<span class="ri ri-code-box-line" style="font-size: 18px;"/>
|
||||
</a>
|
||||
</div>
|
||||
<div class="theme_selector list-unstyled ms-3">
|
||||
<a class="theme-edit" title="Theme Setting">
|
||||
<span aria-label="Themes Configuration" class="ri ri-paint-brush-line" />
|
||||
</a>
|
||||
</div>
|
||||
<div class="vertical_sidemenu_behaviour d-none ms-3">
|
||||
<a class="pin_sidebar" title="Pin Sidebar">
|
||||
<span class="ri ri-lock-unlock-line" style="font-size: 18px;"/>
|
||||
</a>
|
||||
</div>
|
||||
<div class="header_to_do_list list-unstyled ms-3">
|
||||
<a class="to_do_list" title="Notes">
|
||||
<span aria-label="Notes" class="ri ri-sticky-note-line" />
|
||||
</a>
|
||||
</div>
|
||||
<div class="dark_mode list-unstyled ms-3">
|
||||
<div class="dark-light-mode-button-design">
|
||||
<input id="dark_mod" type="checkbox" class="checkbox custom-control-input d-none" role="switch" />
|
||||
<label for="dark_mod" class="label mb-0" title="Light/Dark Mode">
|
||||
<i class='bulb-on ri ri-lightbulb-flash-fill'></i>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</xpath>
|
||||
</t>
|
||||
|
||||
<t t-inherit="web.OwlDialog" t-inherit-mode="extension" owl="1">
|
||||
<xpath expr="//div[hasclass('o_dialog')]" position="attributes">
|
||||
<attribute name="t-att-data-bs-backdrop">'' + props.backdrop</attribute>
|
||||
</xpath>
|
||||
</t>
|
||||
</templates>
|
||||
23
spiffy_theme_backend/static/src/xml/bookmark.xml
Normal file
23
spiffy_theme_backend/static/src/xml/bookmark.xml
Normal file
@@ -0,0 +1,23 @@
|
||||
<templates id="template" xml:space="preserve">
|
||||
<t t-name="BookmarkOptions">
|
||||
<div class="bookmark_options py-2 px-3 d-flex flex-column shadow" t-att-bookmark_id="bookmark_id">
|
||||
<a class="rename_bookmark d-block me-0 px-0 py-1">Rename</a>
|
||||
<a class="remove_bookmark d-block me-0 px-0 py-1">Remove</a>
|
||||
</div>
|
||||
</t>
|
||||
|
||||
<t t-name="BookmarkRename">
|
||||
<div class="bookmark_rename_section px-3 py-2 shadow" t-att-bookmark_id="bookmark_id">
|
||||
<p class="">Rename</p>
|
||||
<div class="form-group">
|
||||
<input type="text" class="form-control" name="bookmark_rename" t-att-value="bookmark_name"
|
||||
id="bookmark_rename" />
|
||||
</div>
|
||||
<div class="dropdown-divider"></div>
|
||||
<div class="d-flex">
|
||||
<a class="btn btn-primary bookmark_rename">Rename</a>
|
||||
<a class="btn btn-secondary me-0 bookmark_rename_cancel">Cancel</a>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
19
spiffy_theme_backend/static/src/xml/form_statusbar.xml
Normal file
19
spiffy_theme_backend/static/src/xml/form_statusbar.xml
Normal file
@@ -0,0 +1,19 @@
|
||||
<templates id="template" xml:space="preserve">
|
||||
<t t-inherit="web.FormStatusIndicator" t-inherit-mode="extension" owl="1">
|
||||
<xpath expr="//div[hasclass('o_form_status_indicator_buttons')]" position="after">
|
||||
<span
|
||||
t-if="displayAutoSavePrevent and (props.model.root.isVirtual or displayButtons)"
|
||||
class="text-danger small disble-auto-save ms-2">
|
||||
<i class="fa fa-warning me-2"/>
|
||||
<span t-esc="prevent_auto_save_warning_msg">
|
||||
Autosave is disabled, Click on save button.
|
||||
</span>
|
||||
</span>
|
||||
</xpath>
|
||||
|
||||
<xpath expr="//button[hasclass('o_form_button_save')]/i" position="attributes">
|
||||
<attribute name="class" add="ri ri-save-3-line" remove="fa fa-cloud-upload" separator=" "></attribute>
|
||||
</xpath>
|
||||
|
||||
</t>
|
||||
</templates>
|
||||
39
spiffy_theme_backend/static/src/xml/list_renderer.xml
Normal file
39
spiffy_theme_backend/static/src/xml/list_renderer.xml
Normal file
@@ -0,0 +1,39 @@
|
||||
<templates id="template" xml:space="preserve">
|
||||
<t t-inherit="web.ListRenderer.RecordRow" t-inherit-mode="extension" owl="1">
|
||||
<xpath expr="//tr[hasclass('o_data_row')]" position="attributes">
|
||||
<attribute name="t-att-resId">record.resId</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//tr[hasclass('o_data_row')]" position="after">
|
||||
<t t-if="biz_attachment_data and showattachment">
|
||||
<t t-if="biz_attachment_data[0][record.resId]">
|
||||
<div class="attachment_div">
|
||||
<section class="biz_attachment_section d-flex align-items-center justify-content-center w-100 position-absolute flex-wrap" t-att-id="record.id">
|
||||
<t t-set="counter" t-value="0"/>
|
||||
<t t-set="extra_length" t-value="biz_attachment_data[0][record.resId].length - 5"/>
|
||||
|
||||
<t t-foreach="biz_attachment_data[0][record.resId]" t-as="attachment" t-key="attachment.attachment_id">
|
||||
<t t-if="counter < 5">
|
||||
<div class="attachment_box border d-flex align-items-center mx-2" t-att-data-id="attachment.attachment_id" t-att-data-name="attachment.attachment_name" t-att-data-mimetype="attachment.attachment_mimetype" t-att-data-rec_id="record.resId" t-on-click="(ev) => this._loadattachmentviewer(ev)">
|
||||
<span class="o_image me-2" t-att-data-mimetype="attachment.attachment_mimetype"/>
|
||||
<div class="attachment-name text-nowrap">
|
||||
<span><t t-esc="attachment.attachment_name"/></span>
|
||||
</div>
|
||||
</div>
|
||||
<t t-set="counter" t-value="counter + 1"/>
|
||||
</t>
|
||||
</t>
|
||||
<t t-if="extra_length >= 1">
|
||||
<t t-set="attachment" t-value="biz_attachment_data[0][record.resId][5]"/>
|
||||
<div class="attachment_box border d-flex align-items-center mx-2 attachment_box_counter " t-att-data-id="attachment.attachment_id" t-att-data-name="attachment.attachment_name" t-att-data-mimetype="attachment.attachment_mimetype" t-att-data-rec_id="record.resId" t-on-click="(ev) => this._loadattachmentviewer(ev)">
|
||||
<div class="attachment-name text-nowrap">
|
||||
<span>+<t t-esc="extra_length"/></span>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</section>
|
||||
</div>
|
||||
</t>
|
||||
</t>
|
||||
</xpath>
|
||||
</t>
|
||||
</template>
|
||||
408
spiffy_theme_backend/static/src/xml/menu.xml
Normal file
408
spiffy_theme_backend/static/src/xml/menu.xml
Normal file
@@ -0,0 +1,408 @@
|
||||
<templates id="template" xml:space="preserve">
|
||||
<t t-name="SearchModalPopup" owl="1">
|
||||
<div class="modal" id="search_bar_modal">
|
||||
<div class="modal-dialog modal-dialog-scrollable">
|
||||
<div class="modal-content p-0">
|
||||
<!-- Modal Header -->
|
||||
<div class="modal-header d-block">
|
||||
<div class="d-flex px-3 align-items-center justify-content-between">
|
||||
<h4 class="modal-title">Search..</h4>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal">
|
||||
<!-- <span class="ri ri-close-line align-middle"></span> -->
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-body px-0">
|
||||
<div class="d-flex align-items-center mb-4 px-3">
|
||||
<div class="load-active-menu-selector w-25">
|
||||
<t t-call="seletor-acvtive-menu-items"/>
|
||||
</div>
|
||||
<input type="text" id="searchPagesInput"
|
||||
class="form-control form-control-size borderless auto-complete" autocomplete="off"
|
||||
placeholder="Search here..." value="" />
|
||||
</div>
|
||||
<ul id="searchPagesResults" class="auto-complete-result mb-0 px-3">
|
||||
</ul>
|
||||
<div class="searchNoResult px-3 d-none">
|
||||
<h3>No Results Found!</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex-row-reverse modal-footer px-0">
|
||||
<div class="pb-3 px-3">
|
||||
<span class="text-alternate d-inline-block m-0 me-3">
|
||||
<span class="ri ri-arrow-up-down-line align-middle"></span>
|
||||
<span class="align-middle text-medium">Navigate</span>
|
||||
</span>
|
||||
<span class="text-alternate d-inline-block m-0">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="cs-icon arrow-bottom-left text-alternate align-middle me-1"><path d="M7 8L2.35355 12.6464C2.15829 12.8417 2.15829 13.1583 2.35355 13.3536L7 18"></path><path d="M17.5 2V9C17.5 10.0609 17.0786 11.0783 16.3284 11.8284C15.5783 12.5786 14.5609 13 13.5 13H2"></path></svg>
|
||||
<span class="align-middle text-medium">Select</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
|
||||
<t t-name="seletor-acvtive-menu-items" owl="1">
|
||||
<div class="form-group mb-0">
|
||||
<select class="form-control border-0 border-bottom p-0 text-truncate" id="active-menu-categories">
|
||||
<option id="0" value="all">All</option>
|
||||
<t t-foreach="menuService.getApps()" t-as="menu" t-key="menu.name">
|
||||
<option t-att-id="menu.id" t-att-value="menu.name"><t t-esc="menu.name"/></option>
|
||||
</t>
|
||||
</select>
|
||||
</div>
|
||||
</t>
|
||||
|
||||
<!-- A search result -->
|
||||
<t t-name="spiffy_theme_backend.MenuSearchResults">
|
||||
<t t-foreach="results" t-as="result" t-key="result.id">
|
||||
<t t-set="menu" t-value="widget._menuInfo(result)" />
|
||||
<li class="search_list_content list-unstyled">
|
||||
<a
|
||||
t-attf-class="autoComplete_highlighted text-small text-muted mb-0"
|
||||
t-attf-href="#menu_id={{menu.id}}&action={{menu.actionID}}"
|
||||
t-att-data-menu-id="menu.id"
|
||||
t-att-data-action-id="menu.actionID"
|
||||
t-esc="result"
|
||||
role="menuitem"
|
||||
/>
|
||||
</li>
|
||||
</t>
|
||||
</t>
|
||||
|
||||
<t t-inherit="web.NavBar" t-inherit-mode="extension" owl="1">
|
||||
<xpath expr="//nav[hasclass('o_main_navbar')]" position="before">
|
||||
<!-- SPIFFY MULTI TAB START -->
|
||||
<div class="multi_tab_section"/>
|
||||
<!-- SPIFFY MULTI TAB END -->
|
||||
<div class="fav_app_island d-none">
|
||||
<span class="ri ri-apps-2-line fav_app_island_btn"/>
|
||||
<div class="fav_apps d-flex alige-items-center justify-content-center">
|
||||
</div>
|
||||
</div>
|
||||
<div class="float-end d-flex align-items-center header_menu_right_content flex-wrap">
|
||||
<li class="bookmark_list list-unstyled"></li>
|
||||
|
||||
<li class="bookmark_section list-unstyled">
|
||||
<div class="dropdown">
|
||||
<button type="button" class="btn btn-light dropdown-toggle demo_btn" data-bs-toggle="dropdown" title="Add Bookmark">
|
||||
<span class="fa fa-bookmark-o" />
|
||||
</button>
|
||||
<div class="dropdown-menu bookmark_page_add">
|
||||
<p class="">Add Bookmark</p>
|
||||
<div class="form-group">
|
||||
<input type="text" class="form-control" name="bookmark_page_name" id="bookmark_page_name" />
|
||||
</div>
|
||||
<div class="dropdown-divider"></div>
|
||||
<div class="d-flex">
|
||||
<a class="btn btn-primary add_bookmark">Add</a>
|
||||
<a class="btn btn-secondary me-0 cancel_bookmark">Cancel</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="fav_app_drawer list-unstyled">
|
||||
<button type="button" class="btn btn-light fav_app_drawer_btn" title="Favourite Apps">
|
||||
<span class="ri ri-star-line"/>
|
||||
</button>
|
||||
</li>
|
||||
|
||||
<li class="magnifier_section list-unstyled">
|
||||
<div class="">
|
||||
<button type="button" class="btn btn-light magnifier_btn demo_btn" data-bs-target="#magnifier" data-bs-toggle="collapse" title="Magnifier">
|
||||
<span class="fa fa-search-plus" />
|
||||
</button>
|
||||
<div id="magnifier" class="collapse position-absolute bg-white zoom-style-box">
|
||||
<div class="d-flex align-items-center">
|
||||
<span class="zoom_value ps-2">100</span>
|
||||
<span>%</span>
|
||||
<div class="zoom-style d-flex align-items-center mx-2">
|
||||
<a class="btn btn-small minus">-</a>
|
||||
<a class="btn btn-small plus">+</a>
|
||||
</div>
|
||||
<a class="fa fa-repeat zoom-reset btn btn-secondary reset"></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="search_view list-unstyled">
|
||||
<button type="button" class="btn btn-light search_bar demo_btn" accesskey="H" title="Search">
|
||||
<span class="fa fa-search" />
|
||||
</button>
|
||||
</li>
|
||||
<li class="fullscreen_section list-unstyled">
|
||||
<a class="btn btn-light full_screen demo_btn" accesskey="F" title="FullScreen">
|
||||
<span class="fa fa-expand" />
|
||||
</a>
|
||||
</li>
|
||||
</div>
|
||||
<!-- SEARCH MODAL -->
|
||||
<t t-call="SearchModalPopup"/>
|
||||
<div class="dynamic_data" />
|
||||
<div class="navbar_to_do_list_data" />
|
||||
</xpath>
|
||||
<xpath expr="//nav[hasclass('o_main_navbar')]" position="replace">
|
||||
<nav class="o_main_navbar" t-on-dropdown-item-selected="onNavBarDropdownItemSelection" data-command-category="navbar">
|
||||
<div class="o_app_drawer">
|
||||
<li class="list-unstyled">
|
||||
<a class="appDrawerToggle me-3" accesskey="A">
|
||||
<span class="ri ri-apps-2-line"/>
|
||||
</a>
|
||||
</li>
|
||||
</div>
|
||||
<div class="o_company_logo">
|
||||
<t t-if="currentCompany">
|
||||
<h1 class="jikimo">JIKIMO</h1>
|
||||
<img class="img img-fluid company_logo_icon d-none" t-attf-src="/web/image?model=res.company&field=backend_menubar_logo_icon&id={{currentCompany.id}}"/>
|
||||
</t>
|
||||
</div>
|
||||
|
||||
<!-- Systray -->
|
||||
<div class="o_menu_systray" role="menu">
|
||||
|
||||
<t t-foreach="systrayItems" t-as="item" t-key="item.key">
|
||||
<!-- This ensures the correct order of the systray items -->
|
||||
<div t-att-data-index="item.index"/>
|
||||
<ErrorHandler onError="error => this.handleItemError(error, item)">
|
||||
<t t-component="item.Component" t-props="item.props"/>
|
||||
</ErrorHandler>
|
||||
</t>
|
||||
</div>
|
||||
|
||||
<!-- Apps Menu -->
|
||||
<t t-call="web.NavBar.AppsMenu">
|
||||
<t t-set="apps" t-value="menuService.getApps()" />
|
||||
</t>
|
||||
|
||||
<div class="favorite_apps_section d-none"></div>
|
||||
|
||||
<!-- <div class="mobile-header-toggle d-lg-none d-block">
|
||||
<a id="mobileMenuToggleBtn" class="menu-button">
|
||||
<span class="ri ri-menu-line align-middle"></span>
|
||||
</a>
|
||||
</div> -->
|
||||
|
||||
<!-- App Brand -->
|
||||
<DropdownItem
|
||||
t-if="currentApp"
|
||||
href="getMenuItemHref(currentApp)"
|
||||
t-esc="currentApp.name"
|
||||
class="'o_menu_brand d-none d-md-block'"
|
||||
dataset="{ menuXmlid: currentApp.xmlid, section: currentApp.id }"
|
||||
onSelected="() => this.onNavBarDropdownItemSelection(currentApp)"
|
||||
/>
|
||||
|
||||
<!-- Current App Sections -->
|
||||
<t t-if="currentAppSections.length and !env.isSmall and !isIpad" t-call="web.NavBar.SectionsMenu">
|
||||
<t t-set="sections" t-value="currentAppSections" />
|
||||
</t>
|
||||
<!-- Mobile App sections -->
|
||||
<t t-call="spiffy.Mobile.SectionsMenu">
|
||||
<t t-set="sections" t-value="currentAppSections" />
|
||||
</t>
|
||||
</nav>
|
||||
</xpath>
|
||||
</t>
|
||||
|
||||
<t t-name="spiffy.Mobile.SectionsMenu" owl="1">
|
||||
<div class="o_menu_sections d-none">
|
||||
<a id="mobileMenuclose" class="menu-button" style="display: none;">
|
||||
<span class="ri ri-close-line align-middle"></span>
|
||||
</a>
|
||||
<t t-foreach="sections" t-as="first_level_menu" t-key="first_level_menu.id">
|
||||
<t t-if="!first_level_menu.childrenTree.length">
|
||||
<t t-call="spiffy.Menu.link">
|
||||
<t t-set="inNavbar" t-value="true"/>
|
||||
<t t-set="menu" t-value="first_level_menu"/>
|
||||
</t>
|
||||
</t>
|
||||
<t t-else="">
|
||||
<li class="list-unstyled">
|
||||
<a href="#" class="dropdown-toggle o-no-caret o_menu_header_lvl_1" t-att-data-menu-xmlid="first_level_menu.xmlid" data-bs-toggle="dropdown" data-display="static" role="button" aria-expanded="false">
|
||||
<t t-esc="first_level_menu.name"/>
|
||||
</a>
|
||||
<div class="dropdown-menu" role="menu">
|
||||
<t t-foreach="first_level_menu.childrenTree" t-as="second_level_menu" t-key="second_level_menu.id">
|
||||
<t t-call="spiffy.Menu.link">
|
||||
<t t-set="depth" t-value="1"/>
|
||||
<t t-set="menu" t-value="second_level_menu"/>
|
||||
</t>
|
||||
</t>
|
||||
</div>
|
||||
</li>
|
||||
</t>
|
||||
</t>
|
||||
</div>
|
||||
</t>
|
||||
|
||||
<t t-name="spiffy.Menu.link" owl="1">
|
||||
<t t-set="depth" t-value="(depth || 0) + 1"/>
|
||||
|
||||
<t t-if="!menu.childrenTree.length">
|
||||
<a role="menuitem" t-attf-href="#menu_id={{menu.id}}&action={{menu.actionID ? menu.actionID : ''}}"
|
||||
t-att-data-menu="menu.id"
|
||||
t-att-data-action-model="menu.actionModel"
|
||||
t-att-data-action-id="menu.actionID"
|
||||
t-att-data-menu-xmlid="menu.xmlid"
|
||||
t-attf-class="{{inNavbar ? '' : 'dropdown-item '}}o_menu_entry_lvl_{{depth}}"
|
||||
>
|
||||
<span><t t-esc="menu.name"/></span>
|
||||
</a>
|
||||
</t>
|
||||
<t t-else="">
|
||||
<div t-attf-class="dropdown-header o_menu_header_lvl_{{depth}}">
|
||||
<span><t t-esc="menu.name"/></span>
|
||||
</div>
|
||||
<t t-foreach="menu.childrenTree" t-as="menu" t-key="menu.id">
|
||||
<t t-call="spiffy.Menu.link"/>
|
||||
</t>
|
||||
</t>
|
||||
</t>
|
||||
|
||||
<t t-inherit="web.NavBar.AppsMenu" t-inherit-mode="extension" owl="1">
|
||||
<xpath expr="//Dropdown" position="replace">
|
||||
<div class="o_navbar_apps_menu">
|
||||
<t t-call="AllAppsMenus"/>
|
||||
<div class="appdrawer_section">
|
||||
<div class="top_navbar_section mb-3 mb-md-5">
|
||||
<a class="close_fav_app_btn d-none">
|
||||
<span class="ri ri-arrow-left-s-line"/>
|
||||
</a>
|
||||
</div>
|
||||
<div class="container">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text">
|
||||
<i class="ri ri-search-line"></i>
|
||||
</span>
|
||||
</div>
|
||||
<input type="text" id="app_menu_search" class="form-control" placeholder="Search"/>
|
||||
</div>
|
||||
<div class="apps-list mt-3 mt-md-5">
|
||||
<div class="row m-0">
|
||||
<t t-foreach="menuService.getApps()" t-as="app" t-key="app.id">
|
||||
<div class="app-box mb16">
|
||||
<a role="menuitem" t-attf-href="#menu_id={{app.id}}" class="d-block o_app text-center text-center" t-att-data-menu-id="app.id" t-att-data-menu-xmlid="app.xmlID" t-att-data-action-id="app.actionID">
|
||||
<div class="app-image mb8">
|
||||
</div>
|
||||
<div class="app-name">
|
||||
<t t-esc="app.name" />
|
||||
</div>
|
||||
</a>
|
||||
<div class="fav_app_select d-none ">
|
||||
<span class="ri ri-check-line"/>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</div>
|
||||
<div id="searched_main_apps" class="d-none flex-wrap"></div>
|
||||
<div id="search_result"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</xpath>
|
||||
</t>
|
||||
|
||||
<t t-inherit="web.NavBar.SectionsMenu.Dropdown.MenuSlot" t-inherit-mode="extension" owl="1">
|
||||
<!-- code commented for website module HTML editor and other link not working -->
|
||||
<!-- <xpath expr="//t[@t-foreach='items']" position="replace">
|
||||
<t t-foreach="items" t-as="item" t-key="item.id">
|
||||
<a t-if="!item.childrenTree.length" role="menuitem" t-att-data-menu="item.id" t-att-data-action-id="item.actionID" t-attf-href="#menu_id={{item.id}}&action_id={{item.actionID}}" t-att-data-menu-xmlid="item.xmlid" class="dropdown-item o_menu_entry_lvl_2" t-esc="item.name"/>
|
||||
|
||||
<t t-else="">
|
||||
<div class="dropdown-header" t-esc="item.name" />
|
||||
<a t-foreach="item.childrenTree" t-as="subItem" t-key="subItem.id" role="menuitem" t-att-data-menu="subItem.id" t-att-data-action-id="subItem.actionID" t-attf-href="#menu_id={{subItem.id}}&action_id={{subItem.actionID}}" t-att-data-menu-xmlid="subItem.xmlid" class="dropdown-item o_menu_entry_lvl_2" t-esc="subItem.name"
|
||||
/>
|
||||
</t>
|
||||
</t>
|
||||
</xpath> -->
|
||||
</t>
|
||||
|
||||
<t t-name="AllmenuRecursive" owl="1">
|
||||
<li class="nav-item">
|
||||
<t t-if="menu.childrenTree.length">
|
||||
<p class="bg-muted">
|
||||
<a class="d-flex align-items-center w-100" data-bs-toggle="collapse" t-attf-data-bs-target="#child_menu_{{menu.id}}" t-att-data-menu-xmlid="menu.xmlid">
|
||||
<span><t t-esc="menu.name"/></span>
|
||||
<span class="ri ri-arrow-right-s-line ms-auto"/>
|
||||
</a>
|
||||
</p>
|
||||
</t>
|
||||
<t t-else="">
|
||||
<a t-att-data-menu="menu.id" t-attf-class="child_menus" t-attf-href="#menu_id={{menu.id}}&action={{menu.actionID ? menu.actionID : ''}}" t-att-data-menu-xmlid="menu.xmlid" t-attf-data-action-id="{{menu.actionID ? menu.actionID : ''}}">
|
||||
<span class="app_name">
|
||||
<t t-esc="menu.name" />
|
||||
</span>
|
||||
</a>
|
||||
</t>
|
||||
<div t-attf-id="child_menu_{{menu.id}}" class="collapse" >
|
||||
<ul t-if="menu.childrenTree.length" class="show">
|
||||
<t t-foreach="menu.children" t-as="menuid" t-key="menuid">
|
||||
<t t-set="menu" t-value="menuService.getMenuAsTree(menuid)"/>
|
||||
<t t-call="AllmenuRecursive" />
|
||||
</t>
|
||||
</ul>
|
||||
</div>
|
||||
</li>
|
||||
</t>
|
||||
|
||||
<t t-name="AllAppsMenus" owl="1">
|
||||
<ul id="accordion">
|
||||
<!-- <t t-if="currentApp"> -->
|
||||
<t t-foreach="menuService.getApps()" t-as="menu" t-key="menu.name">
|
||||
<t t-if="!menu.childrenTree.length">
|
||||
<li>
|
||||
<!-- t-attf-class="main_link {{currentApp.name == menu.name ? 'active':''}}" -->
|
||||
<a t-attf-href="#menu_id={{menu.id}}&action={{menu.actionID ? menu.actionID : ''}}"
|
||||
t-att-data-menu="menu.id"
|
||||
t-attf-data-action-model="{{menu.actionModel ? menu.actionModel : ''}}"
|
||||
t-attf-data-action-id="{{menu.actionID ? menu.actionID : ''}}"
|
||||
t-att-data-menu-xmlid="menu.xmlid" t-attf-class="main_link">
|
||||
<span class="app_icon"></span>
|
||||
<span>
|
||||
<t t-esc="menu.name" />
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
</t>
|
||||
<t t-else="">
|
||||
<li>
|
||||
<!-- t-attf-class="main_link {{currentApp.name == menu.name ? 'active':''}}" -->
|
||||
<a t-attf-href="#menu_id={{menu.id}}&action={{menu.actionID ? menu.actionID : ''}}" t-att-data-menu="menu.id"
|
||||
t-attf-data-action-model="{{menu.actionModel ? menu.actionModel : ''}}"
|
||||
t-attf-data-action-id="{{menu.actionID ? menu.actionID : ''}}"
|
||||
t-att-data-menu-xmlid="menu.xmlid" t-attf-class="main_link dropdown-btn">
|
||||
<span class="app_icon"></span>
|
||||
<span>
|
||||
<t t-esc="menu.name" />
|
||||
</span>
|
||||
<span class="ri ri-arrow-right-s-line ms-auto" />
|
||||
</a>
|
||||
<!-- <ul t-attf-class="{{currentApp.name == menu.name ? 'show':''}}"> -->
|
||||
<ul t-attf-class="header-sub-menus">
|
||||
<t t-set="parent_menu_id" t-value="menu.id" />
|
||||
<t t-foreach="menu.children" t-as="menuid" t-key="menuid">
|
||||
<t t-set="menu" t-value="menuService.getMenuAsTree(menuid)"/>
|
||||
<t t-call="AllmenuRecursive">
|
||||
</t>
|
||||
</t>
|
||||
</ul>
|
||||
</li>
|
||||
</t>
|
||||
</t>
|
||||
<!-- </t> -->
|
||||
</ul>
|
||||
</t>
|
||||
|
||||
<t t-inherit="web.BurgerMenu" t-inherit-mode="extension" owl="1">
|
||||
<xpath expr="//button[hasclass('o_mobile_menu_toggle')]" position="attributes">
|
||||
<attribute name="class" add="d-lg-none" remove="d-md-none" separator=" "/>
|
||||
</xpath>
|
||||
<xpath expr="//button[hasclass('o_mobile_menu_toggle')]/i[hasclass('oi')]" position="replace">
|
||||
<i class="ri ri-menu-line align-middle"/>
|
||||
</xpath>
|
||||
</t>
|
||||
</templates>
|
||||
102
spiffy_theme_backend/static/src/xml/view_button_icons.xml
Normal file
102
spiffy_theme_backend/static/src/xml/view_button_icons.xml
Normal file
@@ -0,0 +1,102 @@
|
||||
<templates id="template" xml:space="preserve">
|
||||
<t t-name="spiffy_theme_backend.icon_button">
|
||||
<span t-attf-class="fa fa-#{icon} align-middle" t-att-title="label" />
|
||||
<span class="d-none d-xl-inline" t-esc="label" />
|
||||
</t>
|
||||
<t t-name="spiffy_theme_backend.MenuStatusbarButtons">
|
||||
<div class="dropdown">
|
||||
<button
|
||||
class="o_statusbar_buttons_dropdown btn btn-secondary dropdown-toggle"
|
||||
type="button"
|
||||
data-bs-toggle="dropdown"
|
||||
aria-haspopup="true"
|
||||
aria-expanded="false"
|
||||
>
|
||||
<t t-call="spiffy_theme_backend.icon_button">
|
||||
<t t-set="icon" t-value="'cogs'" />
|
||||
<t t-set="label">Quick actions</t>
|
||||
</t>
|
||||
</button>
|
||||
</div>
|
||||
</t>
|
||||
<t t-extend="FormView.buttons">
|
||||
<t t-jquery=".o_form_button_edit" t-operation="attributes">
|
||||
<attribute name="accesskey">e</attribute>
|
||||
</t>
|
||||
<t t-jquery=".o_form_button_cancel" t-operation="attributes">
|
||||
<attribute name="accesskey">d</attribute>
|
||||
</t>
|
||||
<t t-jquery=".o_form_button_edit" t-operation="inner">
|
||||
<t t-call="spiffy_theme_backend.icon_button">
|
||||
<t t-set="icon" t-value="'pencil'" />
|
||||
<t t-set="label">Edit</t>
|
||||
</t>
|
||||
</t>
|
||||
<t t-jquery=".o_form_button_create" t-operation="inner">
|
||||
<t t-call="spiffy_theme_backend.icon_button">
|
||||
<t t-set="icon" t-value="'plus'" />
|
||||
<t t-set="label">Create</t>
|
||||
</t>
|
||||
</t>
|
||||
<t t-jquery=".o_form_button_save" t-operation="inner">
|
||||
<t t-call="spiffy_theme_backend.icon_button">
|
||||
<t t-set="icon" t-value="'check'" />
|
||||
<t t-set="label">Save</t>
|
||||
</t>
|
||||
</t>
|
||||
<t t-jquery=".o_form_button_cancel" t-operation="inner">
|
||||
<t t-call="spiffy_theme_backend.icon_button">
|
||||
<t t-set="icon" t-value="'times'" />
|
||||
<t t-set="label">Discard</t>
|
||||
</t>
|
||||
</t>
|
||||
</t>
|
||||
<t t-extend="KanbanView.buttons">
|
||||
<t t-jquery="button" t-operation="inner">
|
||||
<t t-call="spiffy_theme_backend.icon_button">
|
||||
<t t-set="icon" t-value="'plus'" />
|
||||
<t t-set="label" t-value="create_text || _t('Create')" />
|
||||
</t>
|
||||
</t>
|
||||
</t>
|
||||
<t t-extend="ListView.buttons">
|
||||
<!-- Change "Discard" button hotkey to "D" -->
|
||||
<t t-jquery=".o_list_button_discard" t-operation="attributes">
|
||||
<attribute name="accesskey">d</attribute>
|
||||
</t>
|
||||
<t t-jquery=".o_list_button_add" t-operation="inner">
|
||||
<t t-call="spiffy_theme_backend.icon_button">
|
||||
<t t-set="icon" t-value="'plus'" />
|
||||
<t t-set="label">Create</t>
|
||||
</t>
|
||||
</t>
|
||||
<t t-jquery=".o_list_button_save" t-operation="inner">
|
||||
<t t-call="spiffy_theme_backend.icon_button">
|
||||
<t t-set="icon" t-value="'check'" />
|
||||
<t t-set="label">Save</t>
|
||||
</t>
|
||||
</t>
|
||||
<t t-jquery=".o_list_button_discard" t-operation="inner">
|
||||
<t t-call="spiffy_theme_backend.icon_button">
|
||||
<t t-set="icon" t-value="'times'" />
|
||||
<t t-set="label">Discard</t>
|
||||
</t>
|
||||
</t>
|
||||
<t t-jquery=".o_list_export_xlsx" t-operation="replace">
|
||||
<button type="button" class="btn btn-secondary o_list_export_xlsx">
|
||||
<t t-call="spiffy_theme_backend.icon_button">
|
||||
<t t-set="icon" t-value="'download'" />
|
||||
<t t-set="label">Export All</t>
|
||||
</t>
|
||||
</button>
|
||||
</t>
|
||||
</t>
|
||||
<t t-extend="CalendarView.navigation_buttons">
|
||||
<t t-jquery=".o_calendar_button_today" t-operation="inner">
|
||||
<t t-call="spiffy_theme_backend.icon_button">
|
||||
<t t-set="icon" t-value="'calendar-check-o'" />
|
||||
<t t-set="label">Today</t>
|
||||
</t>
|
||||
</t>
|
||||
</t>
|
||||
</templates>
|
||||
89
spiffy_theme_backend/static/src/xml/web_inherit.xml
Normal file
89
spiffy_theme_backend/static/src/xml/web_inherit.xml
Normal file
@@ -0,0 +1,89 @@
|
||||
<templates id="template" xml:space="preserve">
|
||||
<!-- View Refresh -->
|
||||
<t t-name="spiffy_theme_backend.view_refresher" t-inherit="web.Pager" t-inherit-mode="extension" owl="1">
|
||||
<xpath expr="//span[hasclass('o_pager_counter')]" position="before">
|
||||
<span class="btn-group">
|
||||
<button type="button" class="reload_view btn btn-primary ri ri-refresh-line" t-on-click.stop="() => this.navigate(0)" />
|
||||
</span>
|
||||
</xpath>
|
||||
</t>
|
||||
|
||||
<t t-name="FavoriteApps">
|
||||
<div class="app-box">
|
||||
<a role="menuitem" t-attf-href="#menu_id=#{app_id}" class="d-block o_app text-center text-center"
|
||||
t-att-data-menu-id="app_id" t-att-data-menu-xmlid="app_xmlid" t-att-data-action-id="app_actionid" t-att-title="app_name">
|
||||
<div class="app-image">
|
||||
<t t-if="use_icon">
|
||||
<t t-if="icon_class_name">
|
||||
<span t-attf-class="ri #{icon_class_name}"/>
|
||||
</t>
|
||||
<t t-elif="icon_img">
|
||||
<img class='img img-fluid o_image_64_max' t-attf-src='/web/image/ir.ui.menu/#{app_id}/icon_img' />
|
||||
</t>
|
||||
<t t-else="">
|
||||
<t t-if="web_icon_ext == 'false'">
|
||||
<img class='img img-fluid o_image_64_max' src='/spiffy_theme_backend/static/description/bizople-icon.png' />
|
||||
</t>
|
||||
<t t-elif="web_icon_ext === 'svg'">
|
||||
<img class='img img-fluid o_image_64_max' t-attf-src='#{web_svg_src}' />
|
||||
</t>
|
||||
<t t-else="">
|
||||
<img class='img img-fluid o_image_64_max' t-attf-src='data:image/png;base64,#{web_icon_data}' />
|
||||
</t>
|
||||
</t>
|
||||
</t>
|
||||
<t t-else="">
|
||||
<t t-if="icon_img">
|
||||
<img class='img img-fluid o_image_64_max' t-attf-src='/web/image/ir.ui.menu/#{app_id}/icon_img' />
|
||||
</t>
|
||||
<t t-else="">
|
||||
<t t-if="web_icon_ext == 'false'">
|
||||
<img class='img img-fluid o_image_64_max' src='/spiffy_theme_backend/static/description/bizople-icon.png' />
|
||||
</t>
|
||||
<t t-elif="web_icon_ext === 'svg'">
|
||||
<img class='img img-fluid o_image_64_max' t-attf-src='#{web_svg_src}' />
|
||||
</t>
|
||||
<t t-else="">
|
||||
<img class='img img-fluid o_image_64_max' t-attf-src='data:image/png;base64,#{web_icon_data}' />
|
||||
</t>
|
||||
</t>
|
||||
</t>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</t>
|
||||
|
||||
<t t-name="SearchedApps">
|
||||
<div class="app-box mb16">
|
||||
<a role="menuitem" t-attf-href="#menu_id=#{app_id}" class="d-block o_app text-center text-center"
|
||||
t-att-data-menu-id="app_id" t-att-data-menu-xmlid="app_xmlid" t-att-data-action-id="app_actionid">
|
||||
<div class="app-image mb8">
|
||||
</div>
|
||||
<div class="app-name">
|
||||
<t t-esc="app_name" />
|
||||
</div>
|
||||
</a>
|
||||
<div class="fav_app_select d-none">
|
||||
<span class="ri ri-check-line"/>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
|
||||
<t t-name="Searchedlang">
|
||||
<div class="dispalay_lang">
|
||||
<div role="button" t-att-lang="lang_code" class="d-block biz_lang_btn">
|
||||
<div t-attf-class="lang-name #{lang_code == active_lang ? 'active':''}">
|
||||
<t t-esc="lang_name" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
|
||||
<t t-name="MblStatusbarDropdownBtns">
|
||||
<div class="dropdown">
|
||||
<button class="mbl_statusbar_dropdown_btn btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown">
|
||||
<span class="ri ri-list-settings-line"/>
|
||||
</button>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
Reference in New Issue
Block a user