started to implement blabla : menu block, link vuejsed, route, component
This commit is contained in:
parent
3a594202b8
commit
a8027261e3
|
@ -0,0 +1,27 @@
|
||||||
|
uuid: d16db992-5c92-4832-a386-69b50313a3e9
|
||||||
|
langcode: en
|
||||||
|
status: true
|
||||||
|
dependencies:
|
||||||
|
config:
|
||||||
|
- system.menu.header
|
||||||
|
module:
|
||||||
|
- menu_block
|
||||||
|
theme:
|
||||||
|
- materiotheme
|
||||||
|
id: header
|
||||||
|
theme: materiotheme
|
||||||
|
region: header_right
|
||||||
|
weight: -1
|
||||||
|
provider: null
|
||||||
|
plugin: 'menu_block:header'
|
||||||
|
settings:
|
||||||
|
id: 'menu_block:header'
|
||||||
|
label: Header
|
||||||
|
provider: menu_block
|
||||||
|
label_display: '0'
|
||||||
|
level: 1
|
||||||
|
depth: 0
|
||||||
|
expand: 0
|
||||||
|
parent: 'header:'
|
||||||
|
suggestion: header
|
||||||
|
visibility: { }
|
|
@ -9,7 +9,7 @@ dependencies:
|
||||||
id: languageswitcher
|
id: languageswitcher
|
||||||
theme: materiotheme
|
theme: materiotheme
|
||||||
region: header_right
|
region: header_right
|
||||||
weight: -1
|
weight: 0
|
||||||
provider: null
|
provider: null
|
||||||
plugin: 'language_block:language_interface'
|
plugin: 'language_block:language_interface'
|
||||||
settings:
|
settings:
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
uuid: b00f8fd5-4940-4760-abeb-39cdb74ec895
|
||||||
|
langcode: und
|
||||||
|
status: true
|
||||||
|
dependencies: { }
|
||||||
|
id: header
|
||||||
|
label: Header
|
||||||
|
description: ''
|
||||||
|
locked: false
|
|
@ -0,0 +1,276 @@
|
||||||
|
uuid: e116ba1e-828b-40a6-80e1-b7b2e9b4d37b
|
||||||
|
langcode: en
|
||||||
|
status: true
|
||||||
|
dependencies:
|
||||||
|
config:
|
||||||
|
- core.entity_view_mode.node.teaser
|
||||||
|
- node.type.article
|
||||||
|
- system.menu.header
|
||||||
|
module:
|
||||||
|
- node
|
||||||
|
- rest
|
||||||
|
- serialization
|
||||||
|
- user
|
||||||
|
id: blabla
|
||||||
|
label: Blabla
|
||||||
|
module: views
|
||||||
|
description: ''
|
||||||
|
tag: ''
|
||||||
|
base_table: node_field_data
|
||||||
|
base_field: nid
|
||||||
|
core: 8.x
|
||||||
|
display:
|
||||||
|
default:
|
||||||
|
display_plugin: default
|
||||||
|
id: default
|
||||||
|
display_title: Master
|
||||||
|
position: 0
|
||||||
|
display_options:
|
||||||
|
access:
|
||||||
|
type: perm
|
||||||
|
options:
|
||||||
|
perm: 'access content'
|
||||||
|
cache:
|
||||||
|
type: tag
|
||||||
|
options: { }
|
||||||
|
query:
|
||||||
|
type: views_query
|
||||||
|
options:
|
||||||
|
disable_sql_rewrite: false
|
||||||
|
distinct: false
|
||||||
|
replica: false
|
||||||
|
query_comment: ''
|
||||||
|
query_tags: { }
|
||||||
|
exposed_form:
|
||||||
|
type: basic
|
||||||
|
options:
|
||||||
|
submit_button: Apply
|
||||||
|
reset_button: false
|
||||||
|
reset_button_label: Reset
|
||||||
|
exposed_sorts_label: 'Sort by'
|
||||||
|
expose_sort_order: true
|
||||||
|
sort_asc_label: Asc
|
||||||
|
sort_desc_label: Desc
|
||||||
|
pager:
|
||||||
|
type: mini
|
||||||
|
options:
|
||||||
|
items_per_page: 10
|
||||||
|
offset: 0
|
||||||
|
id: 0
|
||||||
|
total_pages: null
|
||||||
|
expose:
|
||||||
|
items_per_page: false
|
||||||
|
items_per_page_label: 'Items per page'
|
||||||
|
items_per_page_options: '5, 10, 25, 50'
|
||||||
|
items_per_page_options_all: false
|
||||||
|
items_per_page_options_all_label: '- All -'
|
||||||
|
offset: false
|
||||||
|
offset_label: Offset
|
||||||
|
tags:
|
||||||
|
previous: ‹‹
|
||||||
|
next: ››
|
||||||
|
style:
|
||||||
|
type: default
|
||||||
|
row:
|
||||||
|
type: 'entity:node'
|
||||||
|
options:
|
||||||
|
view_mode: teaser
|
||||||
|
fields:
|
||||||
|
title:
|
||||||
|
id: title
|
||||||
|
table: node_field_data
|
||||||
|
field: title
|
||||||
|
entity_type: node
|
||||||
|
entity_field: title
|
||||||
|
label: ''
|
||||||
|
alter:
|
||||||
|
alter_text: false
|
||||||
|
make_link: false
|
||||||
|
absolute: false
|
||||||
|
trim: false
|
||||||
|
word_boundary: false
|
||||||
|
ellipsis: false
|
||||||
|
strip_tags: false
|
||||||
|
html: false
|
||||||
|
hide_empty: false
|
||||||
|
empty_zero: false
|
||||||
|
settings:
|
||||||
|
link_to_entity: true
|
||||||
|
plugin_id: field
|
||||||
|
relationship: none
|
||||||
|
group_type: group
|
||||||
|
admin_label: ''
|
||||||
|
exclude: false
|
||||||
|
element_type: ''
|
||||||
|
element_class: ''
|
||||||
|
element_label_type: ''
|
||||||
|
element_label_class: ''
|
||||||
|
element_label_colon: true
|
||||||
|
element_wrapper_type: ''
|
||||||
|
element_wrapper_class: ''
|
||||||
|
element_default_classes: true
|
||||||
|
empty: ''
|
||||||
|
hide_alter_empty: true
|
||||||
|
click_sort_column: value
|
||||||
|
type: string
|
||||||
|
group_column: value
|
||||||
|
group_columns: { }
|
||||||
|
group_rows: true
|
||||||
|
delta_limit: 0
|
||||||
|
delta_offset: 0
|
||||||
|
delta_reversed: false
|
||||||
|
delta_first_last: false
|
||||||
|
multi_type: separator
|
||||||
|
separator: ', '
|
||||||
|
field_api_classes: false
|
||||||
|
filters:
|
||||||
|
status:
|
||||||
|
value: '1'
|
||||||
|
table: node_field_data
|
||||||
|
field: status
|
||||||
|
plugin_id: boolean
|
||||||
|
entity_type: node
|
||||||
|
entity_field: status
|
||||||
|
id: status
|
||||||
|
expose:
|
||||||
|
operator: ''
|
||||||
|
group: 1
|
||||||
|
type:
|
||||||
|
id: type
|
||||||
|
table: node_field_data
|
||||||
|
field: type
|
||||||
|
value:
|
||||||
|
article: article
|
||||||
|
entity_type: node
|
||||||
|
entity_field: type
|
||||||
|
plugin_id: bundle
|
||||||
|
langcode:
|
||||||
|
id: langcode
|
||||||
|
table: node_field_data
|
||||||
|
field: langcode
|
||||||
|
relationship: none
|
||||||
|
group_type: group
|
||||||
|
admin_label: ''
|
||||||
|
operator: in
|
||||||
|
value:
|
||||||
|
'***LANGUAGE_language_interface***': '***LANGUAGE_language_interface***'
|
||||||
|
group: 1
|
||||||
|
exposed: false
|
||||||
|
expose:
|
||||||
|
operator_id: ''
|
||||||
|
label: ''
|
||||||
|
description: ''
|
||||||
|
use_operator: false
|
||||||
|
operator: ''
|
||||||
|
identifier: ''
|
||||||
|
required: false
|
||||||
|
remember: false
|
||||||
|
multiple: false
|
||||||
|
remember_roles:
|
||||||
|
authenticated: authenticated
|
||||||
|
reduce: false
|
||||||
|
is_grouped: false
|
||||||
|
group_info:
|
||||||
|
label: ''
|
||||||
|
description: ''
|
||||||
|
identifier: ''
|
||||||
|
optional: true
|
||||||
|
widget: select
|
||||||
|
multiple: false
|
||||||
|
remember: false
|
||||||
|
default_group: All
|
||||||
|
default_group_multiple: { }
|
||||||
|
group_items: { }
|
||||||
|
entity_type: node
|
||||||
|
entity_field: langcode
|
||||||
|
plugin_id: language
|
||||||
|
sorts:
|
||||||
|
created:
|
||||||
|
id: created
|
||||||
|
table: node_field_data
|
||||||
|
field: created
|
||||||
|
order: DESC
|
||||||
|
entity_type: node
|
||||||
|
entity_field: created
|
||||||
|
plugin_id: date
|
||||||
|
relationship: none
|
||||||
|
group_type: group
|
||||||
|
admin_label: ''
|
||||||
|
exposed: false
|
||||||
|
expose:
|
||||||
|
label: ''
|
||||||
|
granularity: second
|
||||||
|
title: Blabla
|
||||||
|
header: { }
|
||||||
|
footer: { }
|
||||||
|
empty: { }
|
||||||
|
relationships: { }
|
||||||
|
arguments: { }
|
||||||
|
display_extenders: { }
|
||||||
|
cache_metadata:
|
||||||
|
max-age: -1
|
||||||
|
contexts:
|
||||||
|
- 'languages:language_content'
|
||||||
|
- 'languages:language_interface'
|
||||||
|
- url.query_args
|
||||||
|
- 'user.node_grants:view'
|
||||||
|
- user.permissions
|
||||||
|
tags: { }
|
||||||
|
page_1:
|
||||||
|
display_plugin: page
|
||||||
|
id: page_1
|
||||||
|
display_title: Page
|
||||||
|
position: 1
|
||||||
|
display_options:
|
||||||
|
display_extenders:
|
||||||
|
views_ef_fieldset: { }
|
||||||
|
path: blabla
|
||||||
|
menu:
|
||||||
|
type: normal
|
||||||
|
title: Blabla
|
||||||
|
description: ''
|
||||||
|
expanded: false
|
||||||
|
parent: ''
|
||||||
|
weight: 0
|
||||||
|
context: '0'
|
||||||
|
menu_name: header
|
||||||
|
cache_metadata:
|
||||||
|
max-age: -1
|
||||||
|
contexts:
|
||||||
|
- 'languages:language_content'
|
||||||
|
- 'languages:language_interface'
|
||||||
|
- url.query_args
|
||||||
|
- 'user.node_grants:view'
|
||||||
|
- user.permissions
|
||||||
|
tags: { }
|
||||||
|
rest_export_1:
|
||||||
|
display_plugin: rest_export
|
||||||
|
id: rest_export_1
|
||||||
|
display_title: 'REST export'
|
||||||
|
position: 2
|
||||||
|
display_options:
|
||||||
|
display_extenders:
|
||||||
|
views_ef_fieldset: { }
|
||||||
|
path: blabla_rest
|
||||||
|
style:
|
||||||
|
type: serializer
|
||||||
|
defaults:
|
||||||
|
style: false
|
||||||
|
row: false
|
||||||
|
row:
|
||||||
|
type: data_entity
|
||||||
|
options: { }
|
||||||
|
pager:
|
||||||
|
type: some
|
||||||
|
options:
|
||||||
|
items_per_page: 10
|
||||||
|
offset: 0
|
||||||
|
cache_metadata:
|
||||||
|
max-age: -1
|
||||||
|
contexts:
|
||||||
|
- 'languages:language_content'
|
||||||
|
- 'languages:language_interface'
|
||||||
|
- request_format
|
||||||
|
- 'user.node_grants:view'
|
||||||
|
- user.permissions
|
||||||
|
tags: { }
|
File diff suppressed because one or more lines are too long
|
@ -28,7 +28,9 @@ import 'theme/assets/styles/main.scss'
|
||||||
|
|
||||||
var MaterioTheme = function(){
|
var MaterioTheme = function(){
|
||||||
|
|
||||||
var _v_sitebranding_block, _v_pagetitle_block, _v_user_block, _v_main_content, _v_search_block;
|
var _v_sitebranding_block, _v_user_block, _v_header_menu
|
||||||
|
, _v_pagetitle_block, _v_search_block
|
||||||
|
, _v_main_content;
|
||||||
var _is_front = drupalSettings.path.isFront;
|
var _is_front = drupalSettings.path.isFront;
|
||||||
|
|
||||||
console.log('drupalSettings', drupalSettings);
|
console.log('drupalSettings', drupalSettings);
|
||||||
|
@ -43,13 +45,29 @@ import 'theme/assets/styles/main.scss'
|
||||||
}
|
}
|
||||||
|
|
||||||
function initVues(){
|
function initVues(){
|
||||||
|
initVRouter();
|
||||||
initVSiteBrandingBlock()
|
initVSiteBrandingBlock()
|
||||||
initVPagetitleBlock()
|
initVPagetitleBlock()
|
||||||
initVUserBlock()
|
initVUserBlock()
|
||||||
|
initVHeaderMenu()
|
||||||
initVMainContent()
|
initVMainContent()
|
||||||
initVSearchBlock()
|
initVSearchBlock()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function initVRouter(){
|
||||||
|
// we need this to update the title while using history nav
|
||||||
|
router.beforeEach((to, from, next) => {
|
||||||
|
|
||||||
|
// console.log('router beforeEach');
|
||||||
|
// console.log(to);
|
||||||
|
// console.log(from);
|
||||||
|
// console.log(next);
|
||||||
|
|
||||||
|
store.commit('Common/setPagetitle', to.name)
|
||||||
|
next();
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
function initVSiteBrandingBlock(){
|
function initVSiteBrandingBlock(){
|
||||||
_v_sitebranding_block = new Vue({
|
_v_sitebranding_block = new Vue({
|
||||||
store,
|
store,
|
||||||
|
@ -61,7 +79,8 @@ import 'theme/assets/styles/main.scss'
|
||||||
let href = event.target.getAttribute('href');
|
let href = event.target.getAttribute('href');
|
||||||
// console.log("Clicked on logo href", href);
|
// console.log("Clicked on logo href", href);
|
||||||
this.$router.push(href)
|
this.$router.push(href)
|
||||||
this.$store.commit('Common/setPagetitle', null)
|
// replaced by router.beforeEach
|
||||||
|
// this.$store.commit('Common/setPagetitle', null)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -127,6 +146,33 @@ import 'theme/assets/styles/main.scss'
|
||||||
// console.log('initVUserBlock', _v_user_block);
|
// console.log('initVUserBlock', _v_user_block);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function initVHeaderMenu(){
|
||||||
|
// console.log('initVHeaderMenu');
|
||||||
|
// adding vuejs attributes has it wont work on twig template (see menu--header.html.twig)
|
||||||
|
// not working : String contains an invalid character
|
||||||
|
// document.querySelectorAll(`#block-header a`).forEach(link => {
|
||||||
|
// console.log(link);
|
||||||
|
// link.setAttribute('@click.prevent', 'onclick')
|
||||||
|
// });
|
||||||
|
|
||||||
|
_v_header_menu = new Vue({
|
||||||
|
store,
|
||||||
|
router,
|
||||||
|
el: `#block-header`,
|
||||||
|
methods: {
|
||||||
|
onclick(event){
|
||||||
|
// console.log("Clicked on header menu link", event);
|
||||||
|
let href = event.target.getAttribute('href');
|
||||||
|
let title = event.target.innerText;
|
||||||
|
// console.log("Clicked on header menu link : href", href);
|
||||||
|
this.$router.push(href)
|
||||||
|
// replaced by router.beforeEach
|
||||||
|
// this.$store.commit('Common/setPagetitle', title)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
function initVMainContent(){
|
function initVMainContent(){
|
||||||
let id = "main-content"
|
let id = "main-content"
|
||||||
let $main_content = document.querySelector('#'+id)
|
let $main_content = document.querySelector('#'+id)
|
||||||
|
@ -136,7 +182,6 @@ import 'theme/assets/styles/main.scss'
|
||||||
store,
|
store,
|
||||||
render: h => h(VMainContent, {props:{id:id, html:main_html, isfront:drupalSettings.path.isFront}})
|
render: h => h(VMainContent, {props:{id:id, html:main_html, isfront:drupalSettings.path.isFront}})
|
||||||
}).$mount('#'+id)
|
}).$mount('#'+id)
|
||||||
// console.log('initTestVContent', v_test_content);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function initVSearchBlock(){
|
function initVSearchBlock(){
|
||||||
|
|
|
@ -117,6 +117,18 @@ header[role="banner"]{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#block-header{
|
||||||
|
margin-right: 1em;
|
||||||
|
padding-left: 1em;
|
||||||
|
border-left: 1px solid #000;
|
||||||
|
ul.menu{
|
||||||
|
margin:0;
|
||||||
|
li{
|
||||||
|
padding:0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#block-languageswitcher{
|
#block-languageswitcher{
|
||||||
text-align: right;
|
text-align: right;
|
||||||
h2{
|
h2{
|
||||||
|
|
|
@ -0,0 +1,58 @@
|
||||||
|
{#
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Theme override to display a menu.
|
||||||
|
*
|
||||||
|
* Available variables:
|
||||||
|
* - menu_name: The machine name of the menu.
|
||||||
|
* - items: A nested list of menu items. Each menu item contains:
|
||||||
|
* - attributes: HTML attributes for the menu item.
|
||||||
|
* - below: The menu item child items.
|
||||||
|
* - title: The menu link title.
|
||||||
|
* - url: The menu link url, instance of \Drupal\Core\Url
|
||||||
|
* - localized_options: Menu link localized options.
|
||||||
|
* - is_expanded: TRUE if the link has visible children within the current
|
||||||
|
* menu tree.
|
||||||
|
* - is_collapsed: TRUE if the link has children within the current menu tree
|
||||||
|
* that are not currently visible.
|
||||||
|
* - in_active_trail: TRUE if the link is in the active trail.
|
||||||
|
*/
|
||||||
|
#}
|
||||||
|
{% import _self as menus %}
|
||||||
|
|
||||||
|
{#
|
||||||
|
We call a macro which calls itself to render the full tree.
|
||||||
|
@see https://twig.symfony.com/doc/1.x/tags/macro.html
|
||||||
|
#}
|
||||||
|
{{ menus.menu_links(items, attributes, 0) }}
|
||||||
|
|
||||||
|
{% macro menu_links(items, attributes, menu_level) %}
|
||||||
|
{% import _self as menus %}
|
||||||
|
{% if items %}
|
||||||
|
{% if menu_level == 0 %}
|
||||||
|
<ul{{ attributes.addClass('menu') }}>
|
||||||
|
{% else %}
|
||||||
|
<ul class="menu">
|
||||||
|
{% endif %}
|
||||||
|
{% for item in items %}
|
||||||
|
{%
|
||||||
|
set classes = [
|
||||||
|
'menu-item',
|
||||||
|
item.is_expanded ? 'menu-item--expanded',
|
||||||
|
item.is_collapsed ? 'menu-item--collapsed',
|
||||||
|
item.in_active_trail ? 'menu-item--active-trail',
|
||||||
|
]
|
||||||
|
%}
|
||||||
|
<li{{ item.attributes.addClass(classes) }}>
|
||||||
|
{# this does not work because of the '@' #}
|
||||||
|
{# we have to do it via js | not working neither #}
|
||||||
|
{#{{ link(item.title, item.url, {'@click.prevent':['onclick']}) }}#}
|
||||||
|
<a href="{{ item.url }}" @click.prevent='onclick'>{{ item.title }}</a>
|
||||||
|
{% if item.below %}
|
||||||
|
{{ menus.menu_links(item.below, attributes, menu_level + 1) }}
|
||||||
|
{% endif %}
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
{% endif %}
|
||||||
|
{% endmacro %}
|
|
@ -0,0 +1,19 @@
|
||||||
|
<template>
|
||||||
|
<div id="blabla">
|
||||||
|
<h1>Blabla</h1>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "Blabla",
|
||||||
|
data: () => ({
|
||||||
|
|
||||||
|
}),
|
||||||
|
beforeMount(){
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
</style>
|
|
@ -3,6 +3,7 @@ import VueRouter from 'vue-router'
|
||||||
|
|
||||||
import Home from 'vuejs/components/Content/Home'
|
import Home from 'vuejs/components/Content/Home'
|
||||||
import Base from 'vuejs/components/Content/Base'
|
import Base from 'vuejs/components/Content/Base'
|
||||||
|
import Blabla from 'vuejs/components/Content/Blabla'
|
||||||
|
|
||||||
Vue.use(VueRouter)
|
Vue.use(VueRouter)
|
||||||
|
|
||||||
|
@ -36,6 +37,16 @@ const routes = [
|
||||||
// 'base': Base
|
// 'base': Base
|
||||||
// }
|
// }
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name:'blabla',
|
||||||
|
path: `${basePath}blabla`,
|
||||||
|
// path: `/base`,
|
||||||
|
// alias: (() => languages.map(l => `/${l}/base`))(),
|
||||||
|
component: Blabla,
|
||||||
|
// components: {
|
||||||
|
// 'base': Base
|
||||||
|
// }
|
||||||
|
},
|
||||||
// {
|
// {
|
||||||
// path: '*',
|
// path: '*',
|
||||||
// name: 'notfound',
|
// name: 'notfound',
|
||||||
|
|
Loading…
Reference in New Issue