From 6718e5c9f9333708bf7d3294d100faab68b331ea Mon Sep 17 00:00:00 2001 From: Bachir Soussi Chiadmi Date: Wed, 18 Nov 2020 13:22:30 +0100 Subject: [PATCH] enabled flag_lists, started flags front ui --- composer.json | 2 + composer.lock | 192 +++- config/sync/block.block.header.yml | 2 +- config/sync/core.extension.yml | 3 + config/sync/flag.flag.dossier.yml | 32 + .../sync/flag.flag.flag_list_template_1.yml | 32 + config/sync/flag.flag.test_dossier.yml | 33 + .../sync/flag_lists.flag_for_list.dossier.yml | 9 + ...sts.flag_for_list.flag_list_template_1.yml | 11 + ...ection_type.flagging_collection_type_1.yml | 8 + config/sync/language/fr/views.view.files.yml | 1 + .../fr/views.view.my_flag_list_items.yml | 49 + config/sync/rest.resource.entity.flag.yml | 18 + .../rest.resource.entity.flag_for_list.yml | 18 + .../rest.resource.entity.flag_list_item.yml | 21 + config/sync/rest.resource.entity.flagging.yml | 21 + ...st.resource.entity.flagging_collection.yml | 21 + ...source.entity.flagging_collection_type.yml | 18 + ...system.action.flag_action.dossier_flag.yml | 15 + ...stem.action.flag_action.dossier_unflag.yml | 15 + ....flag_action.flag_list_template_1_flag.yml | 17 + ...lag_action.flag_list_template_1_unflag.yml | 17 + ...m.action.flag_action.test_dossier_flag.yml | 15 + ...action.flag_action.test_dossier_unflag.yml | 15 + .../system.action.flag_delete_flagging.yml | 13 + config/sync/user.role.adherent.yml | 5 + config/sync/user.role.admin.yml | 5 + config/sync/user.role.admin_showroom.yml | 5 + config/sync/user.role.alpha_testeur.yml | 5 + config/sync/user.role.student.yml | 5 + config/sync/user.role.translator.yml | 5 + config/sync/views.view.my_flag_list_items.yml | 852 ++++++++++++++++++ .../custom/materio_flag/materio_flag.info.yml | 7 + .../custom/materio_flag/materio_flag.module | 1 + .../materio_flag/materio_flag.permissions.yml | 9 + .../materio_flag/materio_flag.routing.yml | 7 + .../src/Controller/MaterioFlagController.php | 113 +++ .../custom/materiotheme/assets/dist/main.js | 70 +- .../materiotheme/assets/scripts/main.js | 10 +- .../vuejs/components/User/UserFlags.vue | 47 + .../vuejs/components/User/UserTools.vue | 11 +- .../vuejs/store/modules/search.js | 1 + .../materiotheme/vuejs/store/modules/user.js | 256 +++--- 43 files changed, 1889 insertions(+), 123 deletions(-) create mode 100644 config/sync/flag.flag.dossier.yml create mode 100644 config/sync/flag.flag.flag_list_template_1.yml create mode 100644 config/sync/flag.flag.test_dossier.yml create mode 100644 config/sync/flag_lists.flag_for_list.dossier.yml create mode 100644 config/sync/flag_lists.flag_for_list.flag_list_template_1.yml create mode 100644 config/sync/flag_lists.flagging_collection_type.flagging_collection_type_1.yml create mode 100644 config/sync/language/fr/views.view.my_flag_list_items.yml create mode 100644 config/sync/rest.resource.entity.flag.yml create mode 100644 config/sync/rest.resource.entity.flag_for_list.yml create mode 100644 config/sync/rest.resource.entity.flag_list_item.yml create mode 100644 config/sync/rest.resource.entity.flagging.yml create mode 100644 config/sync/rest.resource.entity.flagging_collection.yml create mode 100644 config/sync/rest.resource.entity.flagging_collection_type.yml create mode 100644 config/sync/system.action.flag_action.dossier_flag.yml create mode 100644 config/sync/system.action.flag_action.dossier_unflag.yml create mode 100644 config/sync/system.action.flag_action.flag_list_template_1_flag.yml create mode 100644 config/sync/system.action.flag_action.flag_list_template_1_unflag.yml create mode 100644 config/sync/system.action.flag_action.test_dossier_flag.yml create mode 100644 config/sync/system.action.flag_action.test_dossier_unflag.yml create mode 100644 config/sync/system.action.flag_delete_flagging.yml create mode 100644 config/sync/views.view.my_flag_list_items.yml create mode 100644 web/modules/custom/materio_flag/materio_flag.info.yml create mode 100644 web/modules/custom/materio_flag/materio_flag.module create mode 100644 web/modules/custom/materio_flag/materio_flag.permissions.yml create mode 100644 web/modules/custom/materio_flag/materio_flag.routing.yml create mode 100644 web/modules/custom/materio_flag/src/Controller/MaterioFlagController.php create mode 100644 web/themes/custom/materiotheme/vuejs/components/User/UserFlags.vue diff --git a/composer.json b/composer.json index 69bea27..3acf959 100644 --- a/composer.json +++ b/composer.json @@ -35,9 +35,11 @@ "drupal/consumer_image_styles": "^3.0", "drupal/content_sync": "2.x-dev@dev", "drupal/core-composer-scaffold": "^9.0", + "drupal/debug_bar": "^1.4", "drupal/entity_clone": "^1.0", "drupal/error_log": "^1.0", "drupal/field_permissions": "^1.0", + "drupal/flag_lists": "^4.0@beta", "drupal/genpass": "^1.x-dev", "drupal/image_delta_formatter": "^1.x-dev", "drupal/jsonapi_extras": "^3.7", diff --git a/composer.lock b/composer.lock index 24656d0..faa73ac 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "0fde84a349225b506081d88d67aa5cbc", + "content-hash": "72666d13bf47ed93fa6c3d45a9e17370", "packages": [ { "name": "alchemy/zippy", @@ -5721,6 +5721,54 @@ "source": "https://git.drupalcode.org/project/date_range_formatter" } }, + { + "name": "drupal/debug_bar", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/debug_bar.git", + "reference": "8.x-1.4" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/debug_bar-8.x-1.4.zip", + "reference": "8.x-1.4", + "shasum": "49046c56bcb1abdff29b561774ed8b5f29f12425" + }, + "require": { + "drupal/core": "^8.7.0" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.4", + "datestamp": "1567404482", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "Chi", + "homepage": "https://www.drupal.org/user/556138" + } + ], + "description": "A simple toolbar with debug information.", + "homepage": "https://www.drupal.org/project/debug_bar", + "keywords": [ + "Drupal" + ], + "support": { + "source": "http://cgit.drupalcode.org/debug_bar", + "issues": "https://www.drupal.org/project/issues/debug_bar" + } + }, { "name": "drupal/devel", "version": "4.0.1", @@ -6887,6 +6935,147 @@ }, "time": "2020-09-04T17:12:31+00:00" }, + { + "name": "drupal/flag", + "version": "4.0.0-beta2", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/flag.git", + "reference": "8.x-4.0-beta2" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/flag-8.x-4.0-beta2.zip", + "reference": "8.x-4.0-beta2", + "shasum": "6f180b6f65e0e778e6fccebd07de9f9c689f6a1f" + }, + "require": { + "drupal/core": "^8.8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-4.0-beta2", + "datestamp": "1595273815", + "security-coverage": { + "status": "not-covered", + "message": "Beta releases are not covered by Drupal security advisories." + } + } + }, + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Berdir", + "homepage": "https://www.drupal.org/user/214652" + }, + { + "name": "fago", + "homepage": "https://www.drupal.org/user/16747" + }, + { + "name": "fubhy", + "homepage": "https://www.drupal.org/user/761344" + }, + { + "name": "joachim", + "homepage": "https://www.drupal.org/user/107701" + }, + { + "name": "merlinofchaos", + "homepage": "https://www.drupal.org/user/26979" + }, + { + "name": "mooffie", + "homepage": "https://www.drupal.org/user/78454" + }, + { + "name": "quicksketch", + "homepage": "https://www.drupal.org/user/35821" + }, + { + "name": "shabana.navas", + "homepage": "https://www.drupal.org/user/1311398" + }, + { + "name": "socketwench", + "homepage": "https://www.drupal.org/user/65793" + } + ], + "description": "Create customized flags that users can set on entities.", + "homepage": "https://www.drupal.org/project/flag", + "support": { + "source": "https://git.drupalcode.org/project/flag" + } + }, + { + "name": "drupal/flag_lists", + "version": "4.0.0-beta8", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/flag_lists.git", + "reference": "4.0.0-beta8" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/flag_lists-4.0.0-beta8.zip", + "reference": "4.0.0-beta8", + "shasum": "3262bbcdb3a28db2d9fbb0c8820da98f90c3d854" + }, + "require": { + "drupal/core": "^8 || ^9", + "drupal/flag": "^4.0" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "4.0.0-beta8", + "datestamp": "1598351532", + "security-coverage": { + "status": "not-covered", + "message": "Beta releases are not covered by Drupal security advisories." + } + } + }, + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "awolfey", + "homepage": "https://www.drupal.org/user/277371" + }, + { + "name": "branana", + "homepage": "https://www.drupal.org/user/758394" + }, + { + "name": "erikwebb", + "homepage": "https://www.drupal.org/user/273404" + }, + { + "name": "queenvictoria", + "homepage": "https://www.drupal.org/user/856454" + }, + { + "name": "sl27257", + "homepage": "https://www.drupal.org/user/15938" + } + ], + "description": "Flag Lists handle collection of flags", + "homepage": "https://www.drupal.org/project/flag_lists", + "keywords": [ + "Drupal" + ], + "support": { + "source": "http://cgit.drupalcode.org/flag_lists", + "issues": "https://www.drupal.org/project/issues/flag_lists" + } + }, { "name": "drupal/genpass", "version": "dev-1.x", @@ -17216,6 +17405,7 @@ "drupal/commerce_variation_cart_form": 20, "drupal/computed_field": 10, "drupal/content_sync": 20, + "drupal/flag_lists": 10, "drupal/genpass": 20, "drupal/image_delta_formatter": 20, "drupal/jsonrpc": 20, diff --git a/config/sync/block.block.header.yml b/config/sync/block.block.header.yml index cf00e74..e84a712 100644 --- a/config/sync/block.block.header.yml +++ b/config/sync/block.block.header.yml @@ -23,7 +23,7 @@ settings: follow_parent: child level: 1 depth: 0 - expand: 0 + expand: false parent: 'header:' suggestion: header visibility: { } diff --git a/config/sync/core.extension.yml b/config/sync/core.extension.yml index 428cc77..93e1719 100644 --- a/config/sync/core.extension.yml +++ b/config/sync/core.extension.yml @@ -78,6 +78,8 @@ module: file_mdm_exif: 0 filter: 0 filter_perms: 0 + flag: 0 + flag_lists: 0 genpass: 0 help: 0 honeypot: 0 @@ -103,6 +105,7 @@ module: maillog: 0 mailsystem: 0 materio_decoupled: 0 + materio_flag: 0 materio_home: 0 materio_jsonapi: 0 materio_migrate: 0 diff --git a/config/sync/flag.flag.dossier.yml b/config/sync/flag.flag.dossier.yml new file mode 100644 index 0000000..009e2b6 --- /dev/null +++ b/config/sync/flag.flag.dossier.yml @@ -0,0 +1,32 @@ +uuid: 4183b53b-30db-4b2d-b087-cb903f23fe27 +langcode: en +status: true +dependencies: + module: + - node +id: dossier +label: Dossier +bundles: + - article + - materiau + - thematique +entity_type: node +global: false +weight: 0 +flag_short: 'Flag this item' +flag_long: '' +flag_message: '' +unflag_short: 'Unflag this item' +unflag_long: '' +unflag_message: '' +unflag_denied_text: '' +flag_type: 'entity:node' +link_type: reload +flagTypeConfig: + show_in_links: { } + show_as_field: true + show_on_form: false + show_contextual_link: true + extra_permissions: + owner: owner +linkTypeConfig: { } diff --git a/config/sync/flag.flag.flag_list_template_1.yml b/config/sync/flag.flag.flag_list_template_1.yml new file mode 100644 index 0000000..a8e5791 --- /dev/null +++ b/config/sync/flag.flag.flag_list_template_1.yml @@ -0,0 +1,32 @@ +uuid: cc972bc9-a9d6-4715-bde0-b686a22069d2 +langcode: en +status: true +dependencies: + module: + - flag_lists + - node +_core: + default_config_hash: gv5HCXt_zANnxz5g4ygaALNMnN5yQzI4jy3A7c8phFc +id: flag_list_template_1 +label: 'Flag list template 1' +bundles: { } +entity_type: node +global: false +weight: 0 +flag_short: 'Add this item to the [flagging_collection:name] list' +flag_long: 'Add this to your flag list' +flag_message: 'Added to the flag list' +unflag_short: 'Remove this item from the [flagging_collection:name] list' +unflag_long: 'Remove this item from your flag list' +unflag_message: 'Removed from the flag list' +unflag_denied_text: '' +flag_type: 'entity:node' +link_type: ajax_link +flagTypeConfig: + show_in_links: { } + show_as_field: true + show_on_form: false + show_contextual_link: false + extra_permissions: + owner: '0' +linkTypeConfig: { } diff --git a/config/sync/flag.flag.test_dossier.yml b/config/sync/flag.flag.test_dossier.yml new file mode 100644 index 0000000..1c3ed64 --- /dev/null +++ b/config/sync/flag.flag.test_dossier.yml @@ -0,0 +1,33 @@ +uuid: null +langcode: en +status: true +dependencies: + module: + - flag_lists + - node +id: test_dossier +label: 'test dossier' +bundles: + - article + - materiau + - thematique +entity_type: node +global: false +weight: 0 +flag_short: 'Flag this item' +flag_long: '' +flag_message: '' +unflag_short: 'Unflag this item' +unflag_long: '' +unflag_message: '' +unflag_denied_text: '' +flag_type: 'entity:node' +link_type: ajax_link +flagTypeConfig: + show_in_links: { } + show_as_field: true + show_on_form: false + show_contextual_link: false + extra_permissions: + owner: owner +linkTypeConfig: { } diff --git a/config/sync/flag_lists.flag_for_list.dossier.yml b/config/sync/flag_lists.flag_for_list.dossier.yml new file mode 100644 index 0000000..b403d3e --- /dev/null +++ b/config/sync/flag_lists.flag_for_list.dossier.yml @@ -0,0 +1,9 @@ +uuid: null +langcode: en +status: true +dependencies: { } +id: dossier +label: Dossier +base_flag: dossier +owner: root +weight: null diff --git a/config/sync/flag_lists.flag_for_list.flag_list_template_1.yml b/config/sync/flag_lists.flag_for_list.flag_list_template_1.yml new file mode 100644 index 0000000..94a5557 --- /dev/null +++ b/config/sync/flag_lists.flag_for_list.flag_list_template_1.yml @@ -0,0 +1,11 @@ +uuid: e0111fa4-31c3-483a-918f-aca9c752190f +langcode: en +status: true +dependencies: { } +_core: + default_config_hash: is37xp2En_K1r0KAxyELb0cyrB6aQH5Ygr7o6tICk24 +id: flag_list_template_1 +label: 'Flag list template 1' +base_flag: flag_list_template_1 +owner: 'Drupal Master' +weight: null diff --git a/config/sync/flag_lists.flagging_collection_type.flagging_collection_type_1.yml b/config/sync/flag_lists.flagging_collection_type.flagging_collection_type_1.yml new file mode 100644 index 0000000..cbf55c2 --- /dev/null +++ b/config/sync/flag_lists.flagging_collection_type.flagging_collection_type_1.yml @@ -0,0 +1,8 @@ +uuid: 93164e3c-1d21-4129-bafc-e8956664f1db +langcode: en +status: true +dependencies: { } +_core: + default_config_hash: FgMUj7Lcs3yxNwSGpVwKZ6N00JNmxn3FndQcd-230hM +id: flagging_collection_type_1 +label: 'Flagging collection type 1' diff --git a/config/sync/language/fr/views.view.files.yml b/config/sync/language/fr/views.view.files.yml index 9959956..95d3a1e 100644 --- a/config/sync/language/fr/views.view.files.yml +++ b/config/sync/language/fr/views.view.files.yml @@ -78,6 +78,7 @@ display: label: 'Enregistrement du module' count: label: 'Nombre d''utilisations' + format_plural_string: !!binary MQNAY291bnQ= title: 'Utilisation du fichier' arguments: fid: diff --git a/config/sync/language/fr/views.view.my_flag_list_items.yml b/config/sync/language/fr/views.view.my_flag_list_items.yml new file mode 100644 index 0000000..7148522 --- /dev/null +++ b/config/sync/language/fr/views.view.my_flag_list_items.yml @@ -0,0 +1,49 @@ +display: + default: + display_title: Maître + display_options: + exposed_form: + options: + submit_button: Appliquer + reset_button_label: Réinitialiser + exposed_sorts_label: 'Trier par' + sort_asc_label: Asc + sort_desc_label: Desc + pager: + options: + expose: + items_per_page_label: 'Éléments par page' + items_per_page_options_all_label: '- Tout -' + offset_label: Décalage + tags: + previous: ‹‹ + next: ›› + fields: + name_1: + separator: ', ' + title: + label: Titre + separator: ', ' + type: + label: 'Type d''entité' + separator: ', ' + entity_id: + label: 'Identifiant (ID) de l''entité' + separator: ', ' + block_1: + display_title: Bloc + display_options: + fields: + name_1: + separator: ', ' + title: + label: Titre + separator: ', ' + type: + label: 'Type d''entité' + separator: ', ' + entity_id: + label: 'Identifiant (ID) de l''entité' + separator: ', ' + page_1: + display_title: Page diff --git a/config/sync/rest.resource.entity.flag.yml b/config/sync/rest.resource.entity.flag.yml new file mode 100644 index 0000000..9f0a42e --- /dev/null +++ b/config/sync/rest.resource.entity.flag.yml @@ -0,0 +1,18 @@ +uuid: c6b97e2c-7823-4aa3-9102-9482d78c4551 +langcode: en +status: true +dependencies: + module: + - flag + - serialization + - user +id: entity.flag +plugin_id: 'entity:flag' +granularity: resource +configuration: + methods: + - GET + formats: + - json + authentication: + - cookie diff --git a/config/sync/rest.resource.entity.flag_for_list.yml b/config/sync/rest.resource.entity.flag_for_list.yml new file mode 100644 index 0000000..0635df8 --- /dev/null +++ b/config/sync/rest.resource.entity.flag_for_list.yml @@ -0,0 +1,18 @@ +uuid: 619d9b48-cf3a-429a-b9e8-eae1106b05a5 +langcode: en +status: true +dependencies: + module: + - flag_lists + - serialization + - user +id: entity.flag_for_list +plugin_id: 'entity:flag_for_list' +granularity: resource +configuration: + methods: + - GET + formats: + - json + authentication: + - cookie diff --git a/config/sync/rest.resource.entity.flag_list_item.yml b/config/sync/rest.resource.entity.flag_list_item.yml new file mode 100644 index 0000000..aa4116e --- /dev/null +++ b/config/sync/rest.resource.entity.flag_list_item.yml @@ -0,0 +1,21 @@ +uuid: 9b95ad99-19d6-495c-8d3b-e9b79fc390f5 +langcode: en +status: true +dependencies: + module: + - flag_lists + - serialization + - user +id: entity.flag_list_item +plugin_id: 'entity:flag_list_item' +granularity: resource +configuration: + methods: + - GET + - POST + - DELETE + - PATCH + formats: + - json + authentication: + - cookie diff --git a/config/sync/rest.resource.entity.flagging.yml b/config/sync/rest.resource.entity.flagging.yml new file mode 100644 index 0000000..94a5489 --- /dev/null +++ b/config/sync/rest.resource.entity.flagging.yml @@ -0,0 +1,21 @@ +uuid: 5ab3e66a-7ab2-42f7-988a-d60bc5cb502e +langcode: en +status: true +dependencies: + module: + - flag + - serialization + - user +id: entity.flagging +plugin_id: 'entity:flagging' +granularity: resource +configuration: + methods: + - GET + - POST + - DELETE + - PATCH + formats: + - json + authentication: + - cookie diff --git a/config/sync/rest.resource.entity.flagging_collection.yml b/config/sync/rest.resource.entity.flagging_collection.yml new file mode 100644 index 0000000..c8f46fa --- /dev/null +++ b/config/sync/rest.resource.entity.flagging_collection.yml @@ -0,0 +1,21 @@ +uuid: bdabf98a-bd5a-434c-b442-24de2558894c +langcode: en +status: true +dependencies: + module: + - flag_lists + - serialization + - user +id: entity.flagging_collection +plugin_id: 'entity:flagging_collection' +granularity: resource +configuration: + methods: + - GET + - POST + - DELETE + - PATCH + formats: + - json + authentication: + - cookie diff --git a/config/sync/rest.resource.entity.flagging_collection_type.yml b/config/sync/rest.resource.entity.flagging_collection_type.yml new file mode 100644 index 0000000..d7fb5dc --- /dev/null +++ b/config/sync/rest.resource.entity.flagging_collection_type.yml @@ -0,0 +1,18 @@ +uuid: 61a720a3-ee1e-47c4-a5d9-9fe052d020e8 +langcode: en +status: true +dependencies: + module: + - flag_lists + - serialization + - user +id: entity.flagging_collection_type +plugin_id: 'entity:flagging_collection_type' +granularity: resource +configuration: + methods: + - GET + formats: + - json + authentication: + - cookie diff --git a/config/sync/system.action.flag_action.dossier_flag.yml b/config/sync/system.action.flag_action.dossier_flag.yml new file mode 100644 index 0000000..599777b --- /dev/null +++ b/config/sync/system.action.flag_action.dossier_flag.yml @@ -0,0 +1,15 @@ +uuid: 19f6415c-55ae-4d43-9804-3b6c9725eb29 +langcode: en +status: true +dependencies: + config: + - flag.flag.dossier + module: + - flag +id: flag_action.dossier_flag +label: 'Flag this item' +type: node +plugin: 'flag_action:dossier_flag' +configuration: + flag_id: dossier + flag_action: flag diff --git a/config/sync/system.action.flag_action.dossier_unflag.yml b/config/sync/system.action.flag_action.dossier_unflag.yml new file mode 100644 index 0000000..0cf949f --- /dev/null +++ b/config/sync/system.action.flag_action.dossier_unflag.yml @@ -0,0 +1,15 @@ +uuid: ee3693e6-2a01-4850-a464-099930242d42 +langcode: en +status: true +dependencies: + config: + - flag.flag.dossier + module: + - flag +id: flag_action.dossier_unflag +label: 'Unflag this item' +type: node +plugin: 'flag_action:dossier_unflag' +configuration: + flag_id: dossier + flag_action: unflag diff --git a/config/sync/system.action.flag_action.flag_list_template_1_flag.yml b/config/sync/system.action.flag_action.flag_list_template_1_flag.yml new file mode 100644 index 0000000..faf8b6d --- /dev/null +++ b/config/sync/system.action.flag_action.flag_list_template_1_flag.yml @@ -0,0 +1,17 @@ +uuid: b883b2b8-2955-4df1-987b-10a5e1488fd2 +langcode: en +status: true +dependencies: + config: + - flag.flag.flag_list_template_1 + module: + - flag +_core: + default_config_hash: LkE1QB2Y0oqjrb33mVsdE0cSy6E9wujJklHGqH91GvE +id: flag_action.flag_list_template_1_flag +label: 'Add this item to a list' +type: node +plugin: 'flag_action:flag_list_template_1_flag' +configuration: + flag_id: flag_list_template_1 + flag_action: flag diff --git a/config/sync/system.action.flag_action.flag_list_template_1_unflag.yml b/config/sync/system.action.flag_action.flag_list_template_1_unflag.yml new file mode 100644 index 0000000..c1204de --- /dev/null +++ b/config/sync/system.action.flag_action.flag_list_template_1_unflag.yml @@ -0,0 +1,17 @@ +uuid: 657ee4d7-61e7-4466-b6d5-37270056d4ef +langcode: en +status: true +dependencies: + config: + - flag.flag.flag_list_template_1 + module: + - flag +_core: + default_config_hash: dkSOtOrwdYQJVIAi2LOYl8XRZCqSIIIb0Hb9J-2NNug +id: flag_action.flag_list_template_1_unflag +label: 'Remove this item from the list' +type: node +plugin: 'flag_action:flag_list_template_1_unflag' +configuration: + flag_id: flag_list_template_1 + flag_action: unflag diff --git a/config/sync/system.action.flag_action.test_dossier_flag.yml b/config/sync/system.action.flag_action.test_dossier_flag.yml new file mode 100644 index 0000000..e7ce1ef --- /dev/null +++ b/config/sync/system.action.flag_action.test_dossier_flag.yml @@ -0,0 +1,15 @@ +uuid: dbe3c645-f4b1-416c-b9b2-43bf919eb593 +langcode: en +status: true +dependencies: + config: + - flag.flag.test_dossier + module: + - flag +id: flag_action.test_dossier_flag +label: 'Flag this item' +type: node +plugin: 'flag_action:test_dossier_flag' +configuration: + flag_id: test_dossier + flag_action: flag diff --git a/config/sync/system.action.flag_action.test_dossier_unflag.yml b/config/sync/system.action.flag_action.test_dossier_unflag.yml new file mode 100644 index 0000000..b895433 --- /dev/null +++ b/config/sync/system.action.flag_action.test_dossier_unflag.yml @@ -0,0 +1,15 @@ +uuid: c4aa7c16-1473-471b-81b0-3a862238bda7 +langcode: en +status: true +dependencies: + config: + - flag.flag.test_dossier + module: + - flag +id: flag_action.test_dossier_unflag +label: 'Unflag this item' +type: node +plugin: 'flag_action:test_dossier_unflag' +configuration: + flag_id: test_dossier + flag_action: unflag diff --git a/config/sync/system.action.flag_delete_flagging.yml b/config/sync/system.action.flag_delete_flagging.yml new file mode 100644 index 0000000..71723a7 --- /dev/null +++ b/config/sync/system.action.flag_delete_flagging.yml @@ -0,0 +1,13 @@ +uuid: 11e49c6d-d0f0-4e79-b692-1e482ce100bc +langcode: en +status: true +dependencies: + module: + - flag +_core: + default_config_hash: Z9dGFmjyQgZjDwdsI-Mmgd2tZkUsjYi7cOSUPqjXPtw +id: flag_delete_flagging +label: 'Delete flagging' +type: flagging +plugin: flag_delete_flagging +configuration: { } diff --git a/config/sync/user.role.adherent.yml b/config/sync/user.role.adherent.yml index 1675c64..e3c327d 100644 --- a/config/sync/user.role.adherent.yml +++ b/config/sync/user.role.adherent.yml @@ -8,11 +8,16 @@ weight: -3 is_admin: null permissions: - 'access materio search' + - 'add flag lists' - 'create member profile' + - 'edit own flag lists' + - 'flag dossier other items' + - 'unflag dossier other items' - 'update own commerce_license' - 'update own member profile' - 'use jsonrpc services' - 'view materio_order_type commerce_order' - 'view own commerce_license' + - 'view own flag lists' - 'view own member profile' - 'view recurring commerce_order' diff --git a/config/sync/user.role.admin.yml b/config/sync/user.role.admin.yml index 39ceee7..5138948 100644 --- a/config/sync/user.role.admin.yml +++ b/config/sync/user.role.admin.yml @@ -20,6 +20,7 @@ permissions: - 'access site in maintenance mode' - 'access synonyms entity autocomplete' - 'access toolbar' + - 'add flag lists' - 'administer commerce_order' - 'administer newsletters' - 'administer productions menu items' @@ -85,6 +86,7 @@ permissions: - 'edit field_memo' - 'edit field_showroom' - 'edit own enregistrement content' + - 'edit own flag lists' - 'edit terms in assisted_research' - 'edit terms in collectionneurs' - 'edit terms in company' @@ -111,6 +113,7 @@ permissions: - 'execute views_bulk_edit all' - 'execute workflow_node_given_state_action node' - 'execute workflow_node_next_state_action node' + - 'flag dossier other items' - 'revert any corpus_documents workflow_transition' - 'revert any generique workflow_transition' - 'revert article revisions' @@ -140,6 +143,7 @@ permissions: - 'translate static node' - 'translate tags taxonomy_term' - 'translate thesaurus taxonomy_term' + - 'unflag dossier other items' - 'update any commerce_license' - 'update commerce_promotion' - 'update content translations' @@ -164,6 +168,7 @@ permissions: - 'view materiau revisions' - 'view materio_order_type commerce_order' - 'view member profile' + - 'view own flag lists' - 'view own profile' - 'view page revisions' - 'view simplenews_issue revisions' diff --git a/config/sync/user.role.admin_showroom.yml b/config/sync/user.role.admin_showroom.yml index 8a7d953..6625bdc 100644 --- a/config/sync/user.role.admin_showroom.yml +++ b/config/sync/user.role.admin_showroom.yml @@ -8,4 +8,9 @@ weight: 0 is_admin: null permissions: - 'access materio search' + - 'add flag lists' + - 'edit own flag lists' + - 'flag dossier other items' + - 'unflag dossier other items' - 'use jsonrpc services' + - 'view own flag lists' diff --git a/config/sync/user.role.alpha_testeur.yml b/config/sync/user.role.alpha_testeur.yml index 4a7722d..e136b3e 100644 --- a/config/sync/user.role.alpha_testeur.yml +++ b/config/sync/user.role.alpha_testeur.yml @@ -8,7 +8,12 @@ weight: -5 is_admin: null permissions: - 'access materio search' + - 'add flag lists' - 'create member profile' + - 'edit own flag lists' + - 'flag dossier other items' + - 'unflag dossier other items' - 'update own member profile' - 'use jsonrpc services' + - 'view own flag lists' - 'view own member profile' diff --git a/config/sync/user.role.student.yml b/config/sync/user.role.student.yml index a4e2a24..1342394 100644 --- a/config/sync/user.role.student.yml +++ b/config/sync/user.role.student.yml @@ -8,7 +8,12 @@ weight: -4 is_admin: null permissions: - 'access materio search' + - 'add flag lists' - 'create member profile' + - 'edit own flag lists' + - 'flag dossier other items' + - 'unflag dossier other items' - 'update own member profile' - 'use jsonrpc services' + - 'view own flag lists' - 'view own member profile' diff --git a/config/sync/user.role.translator.yml b/config/sync/user.role.translator.yml index f263dd9..2ade850 100644 --- a/config/sync/user.role.translator.yml +++ b/config/sync/user.role.translator.yml @@ -8,3 +8,8 @@ weight: -1 is_admin: null permissions: - 'access materio search' + - 'add flag lists' + - 'edit own flag lists' + - 'flag dossier other items' + - 'unflag dossier other items' + - 'view own flag lists' diff --git a/config/sync/views.view.my_flag_list_items.yml b/config/sync/views.view.my_flag_list_items.yml new file mode 100644 index 0000000..f989d4a --- /dev/null +++ b/config/sync/views.view.my_flag_list_items.yml @@ -0,0 +1,852 @@ +uuid: bdcbca4d-9bcf-47fd-b8d9-68a721afdbe0 +langcode: en +status: true +dependencies: + config: + - system.menu.tools + module: + - flag_lists + - node + - user +_core: + default_config_hash: y1M-Cg-Ne3EcH-8k16QBBb-q-aReeTXz-Uu99lV7P9g +id: my_flag_list_items +label: 'My flag list items' +module: views +description: 'List a users flag lists' +tag: 'Flag lists' +base_table: flag_list_item_field_data +base_field: id +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: table + options: + grouping: + - + field: name_1 + rendered: true + rendered_strip: false + row_class: '' + default_row_class: true + override: true + sticky: false + caption: '' + summary: '' + description: '' + columns: + name_1: name_1 + type: type + entity_id: entity_id + info: + name_1: + sortable: true + default_sort_order: asc + align: '' + separator: '' + empty_column: false + responsive: '' + type: + sortable: true + default_sort_order: asc + align: '' + separator: '' + empty_column: false + responsive: '' + entity_id: + sortable: true + default_sort_order: asc + align: '' + separator: '' + empty_column: false + responsive: '' + default: name_1 + empty_table: false + row: + type: fields + fields: + name_1: + id: name_1 + table: flagging_collection_field_data + field: name + relationship: flag_list + group_type: group + admin_label: '' + label: 'Flag list' + exclude: true + alter: + alter_text: false + text: '' + make_link: false + path: '' + absolute: false + external: false + replace_spaces: false + path_case: none + trim_whitespace: false + alt: '' + rel: '' + link_class: '' + prefix: '' + suffix: '' + target: '' + nl2br: false + max_length: 0 + word_boundary: true + ellipsis: true + more_link: false + more_link_text: '' + more_link_path: '' + strip_tags: false + trim: false + preserve_tags: '' + html: 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_empty: false + empty_zero: false + hide_alter_empty: true + click_sort_column: value + type: string + settings: + link_to_entity: false + 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 + entity_type: flagging_collection + entity_field: name + plugin_id: field + title: + id: title + table: node_field_data + field: title + relationship: entity_id + group_type: group + admin_label: '' + label: Title + exclude: false + alter: + alter_text: false + text: '' + make_link: false + path: '' + absolute: false + external: false + replace_spaces: false + path_case: none + trim_whitespace: false + alt: '' + rel: '' + link_class: '' + prefix: '' + suffix: '' + target: '' + nl2br: false + max_length: 0 + word_boundary: true + ellipsis: true + more_link: false + more_link_text: '' + more_link_path: '' + strip_tags: false + trim: false + preserve_tags: '' + html: 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_empty: false + empty_zero: false + hide_alter_empty: true + click_sort_column: value + type: string + settings: + link_to_entity: true + 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 + entity_type: node + entity_field: title + plugin_id: field + type: + id: type + table: flag_list_item_field_data + field: type + relationship: none + group_type: group + admin_label: '' + label: 'Entity Type' + exclude: false + alter: + alter_text: false + text: '' + make_link: false + path: '' + absolute: false + external: false + replace_spaces: false + path_case: none + trim_whitespace: false + alt: '' + rel: '' + link_class: '' + prefix: '' + suffix: '' + target: '' + nl2br: false + max_length: 0 + word_boundary: true + ellipsis: true + more_link: false + more_link_text: '' + more_link_path: '' + strip_tags: false + trim: false + preserve_tags: '' + html: 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_empty: false + empty_zero: false + hide_alter_empty: true + click_sort_column: value + type: string + settings: + link_to_entity: false + 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 + entity_type: flag_list_item + entity_field: type + plugin_id: field + entity_id: + id: entity_id + table: flag_list_item_field_data + field: entity_id + relationship: none + group_type: group + admin_label: '' + label: 'Entity ID' + exclude: false + alter: + alter_text: false + text: '' + make_link: false + path: '' + absolute: false + external: false + replace_spaces: false + path_case: none + trim_whitespace: false + alt: '' + rel: '' + link_class: '' + prefix: '' + suffix: '' + target: '' + nl2br: false + max_length: 0 + word_boundary: true + ellipsis: true + more_link: false + more_link_text: '' + more_link_path: '' + strip_tags: false + trim: false + preserve_tags: '' + html: 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_empty: false + empty_zero: false + hide_alter_empty: true + click_sort_column: value + type: number_integer + settings: + thousand_separator: '' + prefix_suffix: true + 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 + entity_type: flag_list_item + entity_field: entity_id + plugin_id: field + filters: + uid_current: + id: uid_current + table: users + field: uid_current + relationship: user_id + group_type: group + admin_label: '' + operator: '=' + value: '1' + group: 1 + exposed: false + expose: + operator_id: '' + label: '' + description: '' + use_operator: false + operator: '' + identifier: '' + required: false + remember: false + multiple: false + remember_roles: + authenticated: authenticated + operator_limit_selection: false + operator_list: { } + 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: user + plugin_id: user_current + type: + id: type + table: flag_list_item_field_data + field: type + relationship: none + group_type: group + admin_label: '' + operator: '=' + value: node + group: 1 + exposed: false + expose: + operator_id: '' + label: '' + description: '' + use_operator: false + operator: '' + identifier: '' + required: false + remember: false + multiple: false + remember_roles: + authenticated: authenticated + placeholder: '' + operator_limit_selection: false + operator_list: { } + 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: flag_list_item + entity_field: type + plugin_id: string + sorts: { } + title: 'My flag list items' + header: + area: + id: area + table: views + field: area + plugin_id: text + footer: { } + empty: + area: + id: area + table: views + field: area + relationship: none + group_type: group + admin_label: '' + empty: true + tokenize: false + content: + value: 'You don''t have any Flag List Items.' + format: basic_html + plugin_id: text + relationships: + flag_list: + id: flag_list + table: flag_list_item_field_data + field: flag_list + relationship: none + group_type: group + admin_label: 'Connected flag' + required: false + entity_type: flag_list_item + plugin_id: standard + entity_id: + id: entity_id + table: flag_list_item_field_data + field: entity_id + relationship: none + group_type: group + admin_label: 'Connected node' + required: false + entity_type: flag_list_item + plugin_id: standard + user_id: + id: user_id + table: flag_list_item_field_data + field: user_id + relationship: none + group_type: group + admin_label: User + required: false + entity_type: flag_list_item + entity_field: user_id + plugin_id: standard + arguments: { } + display_extenders: { } + cache_metadata: + max-age: -1 + contexts: + - 'languages:language_content' + - 'languages:language_interface' + - url.query_args + - user + - user.permissions + tags: { } + block_1: + display_plugin: block + id: block_1 + display_title: Block + position: 2 + display_options: + display_extenders: { } + block_description: 'My Flag Lists' + pager: + type: none + options: + offset: 0 + defaults: + pager: false + fields: false + block_category: 'Flag Lists' + fields: + name_1: + id: name_1 + table: flagging_collection_field_data + field: name + relationship: flag_list + group_type: group + admin_label: '' + label: 'Flag list' + exclude: true + alter: + alter_text: false + text: '' + make_link: false + path: '' + absolute: false + external: false + replace_spaces: false + path_case: none + trim_whitespace: false + alt: '' + rel: '' + link_class: '' + prefix: '' + suffix: '' + target: '' + nl2br: false + max_length: 0 + word_boundary: true + ellipsis: true + more_link: false + more_link_text: '' + more_link_path: '' + strip_tags: false + trim: false + preserve_tags: '' + html: 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_empty: false + empty_zero: false + hide_alter_empty: true + click_sort_column: value + type: string + settings: + link_to_entity: false + 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 + entity_type: flagging_collection + entity_field: name + plugin_id: field + title: + id: title + table: node_field_data + field: title + relationship: entity_id + group_type: group + admin_label: '' + label: Title + exclude: false + alter: + alter_text: false + text: '' + make_link: false + path: '' + absolute: false + external: false + replace_spaces: false + path_case: none + trim_whitespace: false + alt: '' + rel: '' + link_class: '' + prefix: '' + suffix: '' + target: '' + nl2br: false + max_length: 0 + word_boundary: true + ellipsis: true + more_link: false + more_link_text: '' + more_link_path: '' + strip_tags: false + trim: false + preserve_tags: '' + html: 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_empty: false + empty_zero: false + hide_alter_empty: true + click_sort_column: value + type: string + settings: + link_to_entity: true + 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 + entity_type: node + entity_field: title + plugin_id: field + type: + id: type + table: flag_list_item_field_data + field: type + relationship: none + group_type: group + admin_label: '' + label: 'Entity Type' + exclude: true + alter: + alter_text: false + text: '' + make_link: false + path: '' + absolute: false + external: false + replace_spaces: false + path_case: none + trim_whitespace: false + alt: '' + rel: '' + link_class: '' + prefix: '' + suffix: '' + target: '' + nl2br: false + max_length: 0 + word_boundary: true + ellipsis: true + more_link: false + more_link_text: '' + more_link_path: '' + strip_tags: false + trim: false + preserve_tags: '' + html: 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_empty: false + empty_zero: false + hide_alter_empty: true + click_sort_column: value + type: string + settings: + link_to_entity: false + 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 + entity_type: flag_list_item + entity_field: type + plugin_id: field + entity_id: + id: entity_id + table: flag_list_item_field_data + field: entity_id + relationship: none + group_type: group + admin_label: '' + label: 'Entity ID' + exclude: true + alter: + alter_text: false + text: '' + make_link: false + path: '' + absolute: false + external: false + replace_spaces: false + path_case: none + trim_whitespace: false + alt: '' + rel: '' + link_class: '' + prefix: '' + suffix: '' + target: '' + nl2br: false + max_length: 0 + word_boundary: true + ellipsis: true + more_link: false + more_link_text: '' + more_link_path: '' + strip_tags: false + trim: false + preserve_tags: '' + html: 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_empty: false + empty_zero: false + hide_alter_empty: true + click_sort_column: value + type: number_integer + settings: + thousand_separator: '' + prefix_suffix: true + 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 + entity_type: flag_list_item + entity_field: entity_id + plugin_id: field + cache_metadata: + max-age: -1 + contexts: + - 'languages:language_content' + - 'languages:language_interface' + - url.query_args + - user + - user.permissions + tags: { } + page_1: + display_plugin: page + id: page_1 + display_title: Page + position: 1 + display_options: + display_extenders: { } + path: my-flag-list-items + menu: + type: normal + title: 'My flag list items' + description: 'All my flag list items' + expanded: false + parent: '' + weight: 0 + context: '0' + menu_name: tools + header: + area: + id: area + table: views + field: area + relationship: none + group_type: group + admin_label: '' + empty: false + tokenize: false + content: + value: 'My flag lists for node''s entities on this system' + format: basic_html + plugin_id: text + defaults: + header: false + cache_metadata: + max-age: -1 + contexts: + - 'languages:language_content' + - 'languages:language_interface' + - url.query_args + - user + - user.permissions + tags: { } diff --git a/web/modules/custom/materio_flag/materio_flag.info.yml b/web/modules/custom/materio_flag/materio_flag.info.yml new file mode 100644 index 0000000..cf62fba --- /dev/null +++ b/web/modules/custom/materio_flag/materio_flag.info.yml @@ -0,0 +1,7 @@ +name: Materio FLAG +type: module +description: Defines api behaviours for flaglist. +core: 8.x +package: Materio +dependencies: + - drupal:flag_lists diff --git a/web/modules/custom/materio_flag/materio_flag.module b/web/modules/custom/materio_flag/materio_flag.module new file mode 100644 index 0000000..b3d9bbc --- /dev/null +++ b/web/modules/custom/materio_flag/materio_flag.module @@ -0,0 +1 @@ +entityManager = $entity_manager; + // $this->languageManager = $language_manager; + // $this->renderer = $renderer; + // $this->entityTypeManager = $entity_type_manager; + // } + public function __construct(FlagListsService $flag_lists_service ) { + $this->flaglists = $flag_lists_service; + } + + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container) { + return new static( + $container->get('flaglists'), + ); + } + + /** + * Hello. + * + * @return string + * Return Hello string. + */ + public function getUsersFlaggingCollections() { + + // $data['data'] = ['test', 'hello']; + + // $data['data'] = $this->flaglists->getUsersFlaggingCollections(); + + // $data['#cache'] = [ + // // 'max-age' => \Drupal\Core\Cache\Cache::PERMANENT, + // 'tags' => ['materio-flag-cache'], + // // 'contexts' => [ + // // 'languages:language_content' + // // ] + // ]; + // $response = new CacheableJsonResponse($data); + // $response->addCacheableDependency(CacheableMetadata::createFromRenderArray($data)); + // return $response; + + $colls = $this->flaglists->getUsersFlaggingCollections(); + + $data = []; + foreach ($colls as $id => $collection) { + $data[] = array( + "id" => $id, + "name" => $collection->getName() + ); + } + + return new JsonResponse($data); + } + +} diff --git a/web/themes/custom/materiotheme/assets/dist/main.js b/web/themes/custom/materiotheme/assets/dist/main.js index 87f30d6..4cf7ae6 100644 --- a/web/themes/custom/materiotheme/assets/dist/main.js +++ b/web/themes/custom/materiotheme/assets/dist/main.js @@ -601,6 +601,18 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n /***/ }), +/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js?!./web/themes/custom/materiotheme/vuejs/components/User/UserFlags.vue?vue&type=script&lang=js&": +/*!***************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./web/themes/custom/materiotheme/vuejs/components/User/UserFlags.vue?vue&type=script&lang=js& ***! + \***************************************************************************************************************************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _vuex = __webpack_require__(/*! vuex */ \"./node_modules/vuex/dist/vuex.esm.js\");\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar _default = {\n name: \"userFlags\",\n data: function data() {\n return {};\n },\n computed: _objectSpread({}, (0, _vuex.mapState)({\n flags: function flags(state) {\n return state.User.flags;\n }\n })),\n methods: _objectSpread({}, (0, _vuex.mapActions)({\n createFlag: 'User/createFlag'\n }), {\n onLogout: function onLogout() {\n console.log(\"UserFlags onCreateFlag\");\n this.userLogout();\n }\n })\n};\nexports.default = _default;\n\n//# sourceURL=webpack:///./web/themes/custom/materiotheme/vuejs/components/User/UserFlags.vue?./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options"); + +/***/ }), + /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js?!./web/themes/custom/materiotheme/vuejs/components/User/UserTools.vue?vue&type=script&lang=js&": /*!***************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./web/themes/custom/materiotheme/vuejs/components/User/UserTools.vue?vue&type=script&lang=js& ***! @@ -609,7 +621,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _vuex = __webpack_require__(/*! vuex */ \"./node_modules/vuex/dist/vuex.esm.js\");\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar _default = {\n // data () {\n // return {\n // mail: \"Hello User!\"\n // }\n // },\n computed: _objectSpread({}, (0, _vuex.mapState)({\n mail: function mail(state) {\n return state.User.mail;\n },\n isAdmin: function isAdmin(state) {\n return state.User.isAdmin;\n }\n })),\n methods: _objectSpread({}, (0, _vuex.mapActions)({\n userLogout: 'User/userLogout'\n }), {\n onLogout: function onLogout() {\n console.log('UserTools onLogout');\n this.userLogout();\n }\n })\n};\nexports.default = _default;\n\n//# sourceURL=webpack:///./web/themes/custom/materiotheme/vuejs/components/User/UserTools.vue?./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options"); +eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _vuex = __webpack_require__(/*! vuex */ \"./node_modules/vuex/dist/vuex.esm.js\");\n\nvar _UserFlags = _interopRequireDefault(__webpack_require__(/*! vuejs/components/User/UserFlags */ \"./web/themes/custom/materiotheme/vuejs/components/User/UserFlags.vue\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar _default = {\n components: {\n UserFlags: _UserFlags.default\n },\n // data () {\n // return {\n // mail: \"Hello User!\"\n // }\n // },\n computed: _objectSpread({}, (0, _vuex.mapState)({\n mail: function mail(state) {\n return state.User.mail;\n },\n isAdmin: function isAdmin(state) {\n return state.User.isAdmin;\n },\n flags: function flags(state) {\n return state.User.flags;\n }\n })),\n methods: _objectSpread({}, (0, _vuex.mapActions)({\n userLogout: 'User/userLogout'\n }), {\n onLogout: function onLogout() {\n console.log(\"UserTools onLogout\");\n this.userLogout();\n }\n })\n};\nexports.default = _default;\n\n//# sourceURL=webpack:///./web/themes/custom/materiotheme/vuejs/components/User/UserTools.vue?./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options"); /***/ }), @@ -950,6 +962,18 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ }), +/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./web/themes/custom/materiotheme/vuejs/components/User/UserFlags.vue?vue&type=template&id=0e1971fa&scoped=true&lang=html&": +/*!***************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./web/themes/custom/materiotheme/vuejs/components/User/UserFlags.vue?vue&type=template&id=0e1971fa&scoped=true&lang=html& ***! + \***************************************************************************************************************************************************************************************************************************************************************/ +/*! exports provided: render, staticRenderFns */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { attrs: { id: \"user-flags\" } }, [\n _c(\"h4\", { staticClass: \"mdi mdi-folder-outline\" }, [_vm._v(\"My folders\")]),\n _vm._v(\" \"),\n _c(\n \"ul\",\n [\n _vm._l(_vm.flags, function(flag) {\n return _c(\"li\", { key: flag.id }, [\n _c(\"h5\", [_vm._v(_vm._s(flag.name))])\n ])\n }),\n _vm._v(\" \"),\n _c(\"li\", { ref: \"create-flag\" }, [\n _c(\n \"h5\",\n {\n staticClass: \"mdi mdi-folder-plus-outline\",\n on: {\n click: function($event) {\n $event.preventDefault()\n return _vm.onCreateFlag()\n }\n }\n },\n [_vm._v(\"new folder\")]\n )\n ])\n ],\n 2\n )\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack:///./web/themes/custom/materiotheme/vuejs/components/User/UserFlags.vue?./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options"); + +/***/ }), + /***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./web/themes/custom/materiotheme/vuejs/components/User/UserTools.vue?vue&type=template&id=4e9a834e&scoped=true&lang=html&": /*!***************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./web/themes/custom/materiotheme/vuejs/components/User/UserTools.vue?vue&type=template&id=4e9a834e&scoped=true&lang=html& ***! @@ -958,7 +982,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { attrs: { id: \"user-tools\" } }, [\n _c(\"h4\", { staticClass: \"mdi mdi-account\" }, [_vm._v(_vm._s(_vm.mail))]),\n _vm._v(\" \"),\n _vm.isAdmin\n ? _c(\"a\", {\n staticClass: \"mdi mdi-settings\",\n attrs: { href: \"/admin/content/materials\", title: \"admin\" }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"a\", {\n staticClass: \"mdi mdi-logout\",\n attrs: { href: \"/user/logout\", title: \"logout\" },\n on: {\n click: function($event) {\n $event.preventDefault()\n return _vm.onLogout()\n }\n }\n })\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack:///./web/themes/custom/materiotheme/vuejs/components/User/UserTools.vue?./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { attrs: { id: \"user-tools\" } },\n [\n _c(\"h4\", { staticClass: \"mdi mdi-account\" }, [_vm._v(_vm._s(_vm.mail))]),\n _vm._v(\" \"),\n _vm.isAdmin\n ? _c(\"a\", {\n staticClass: \"mdi mdi-settings\",\n attrs: { href: \"/admin/content/materials\", title: \"admin\" }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"a\", {\n staticClass: \"mdi mdi-logout\",\n attrs: { href: \"/user/logout\", title: \"logout\" },\n on: {\n click: function($event) {\n $event.preventDefault()\n return _vm.onLogout()\n }\n }\n }),\n _vm._v(\" \"),\n _vm.flags ? _c(\"UserFlags\") : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack:///./web/themes/custom/materiotheme/vuejs/components/User/UserTools.vue?./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options"); /***/ }), @@ -1028,7 +1052,7 @@ eval("var g; // This works in non-strict mode\n\ng = function () {\n return thi /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("\n\nvar _vue = _interopRequireDefault(__webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.js\"));\n\nvar _vueInfiniteLoading = _interopRequireDefault(__webpack_require__(/*! vue-infinite-loading */ \"./node_modules/vue-infinite-loading/dist/vue-infinite-loading.js\"));\n\nvar _vueCoolLightbox = _interopRequireDefault(__webpack_require__(/*! vue-cool-lightbox */ \"./node_modules/vue-cool-lightbox/dist/vue-cool-lightbox.esm.js\"));\n\nvar _store = _interopRequireDefault(__webpack_require__(/*! vuejs/store */ \"./web/themes/custom/materiotheme/vuejs/store/index.js\"));\n\nvar _route = _interopRequireDefault(__webpack_require__(/*! vuejs/route */ \"./web/themes/custom/materiotheme/vuejs/route/index.js\"));\n\nvar _UserBlock = _interopRequireDefault(__webpack_require__(/*! vuejs/components/Block/UserBlock */ \"./web/themes/custom/materiotheme/vuejs/components/Block/UserBlock.vue\"));\n\nvar _MainContent = _interopRequireDefault(__webpack_require__(/*! vuejs/components/Content/MainContent */ \"./web/themes/custom/materiotheme/vuejs/components/Content/MainContent.vue\"));\n\nvar _SearchBlock = _interopRequireDefault(__webpack_require__(/*! vuejs/components/Block/SearchBlock */ \"./web/themes/custom/materiotheme/vuejs/components/Block/SearchBlock.vue\"));\n\nvar _vuex = __webpack_require__(/*! vuex */ \"./node_modules/vuex/dist/vuex.esm.js\");\n\n__webpack_require__(/*! theme/assets/styles/main.scss */ \"./web/themes/custom/materiotheme/assets/styles/main.scss\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n_vue.default.use(_vueInfiniteLoading.default, {\n props: {\n spinner: 'spiral' // slots.noMore: ''\n\n } // system: {\n // throttleLimit: 50,\n // /* other settings need to configure */\n // }\n\n}); // import vueVimeoPlayer from 'vue-vimeo-player'\n// Vue.use(vueVimeoPlayer)\n// import VueYouTubeEmbed from 'vue-youtube-embed'\n// Vue.use(VueYouTubeEmbed)\n\n\n_vue.default.use(_vueCoolLightbox.default);\n\n(function (Drupal, drupalSettings, drupalDecoupled) {\n var MaterioTheme = function MaterioTheme() {\n var _v_sitebranding_block, _v_user_block, _v_header_menu, _v_pagetitle_block, _v_search_block, _v_main_content;\n\n var _is_front = drupalSettings.path.isFront;\n console.log('drupalSettings', drupalSettings); // ___ _ _\n // |_ _|_ _ (_) |_\n // | || ' \\| | _|\n // |___|_||_|_|\\__|\n\n function init() {\n console.log(\"MaterioTheme init()\");\n initVues();\n }\n\n function checkNoVuePages() {\n // return drupalDecoupled.sys_path != '/cart'\n // && drupalDecoupled.sys_path.indexOf('checkout') != 1;\n if (drupalDecoupled.route_name.indexOf('commerce') == -1) {\n return true;\n } else {\n return false;\n }\n }\n\n function initVues() {\n // only launch views if we are not in commerce pages\n if (checkNoVuePages()) {\n initVRouter();\n initVSiteBrandingBlock();\n initVPagetitleBlock();\n initVHeaderMenu();\n initVMainContent();\n initVSearchBlock();\n }\n\n initVUserBlock();\n }\n\n function initVRouter() {\n // we need this to update the title and body classes while using history nav\n _route.default.beforeEach(function (to, from, next) {\n var _document$querySelect, _document$querySelect2;\n\n // console.log('router beforeEach to ', to);\n // commit new title to store\n var title = null;\n\n switch (to.name) {\n case 'home':\n title = null;\n break;\n\n case 'article':\n title = false;\n break;\n\n default:\n title = to.name;\n }\n\n if (title !== false) {\n _store.default.commit('Common/setPagetitle', title);\n } // remove all path related body classes\n\n\n var body_classes = document.querySelector('body').classList;\n var classes_to_rm = [];\n\n for (var i = 0; i < body_classes.length; i++) {\n if (body_classes[i].startsWith('path-')) {\n classes_to_rm.push(body_classes[i]);\n }\n }\n\n (_document$querySelect = document.querySelector('body').classList).remove.apply(_document$querySelect, classes_to_rm); // add new path classes to body\n\n\n var classes = [];\n\n if (to.path == '/') {\n classes.push('path-home');\n } else {\n var path_parts = to.path.replace(/^\\//, '').split('/'); // TODO: remove language relative prefix from path classes (fr, en, etc)\n\n for (var i = 0; i < path_parts.length; i++) {\n if (i == 0) {\n var c = \"path-\" + path_parts[i];\n } else if (path_parts[i] !== '') {\n var c = classes[i - 1] + '-' + path_parts[i];\n }\n\n classes.push(c);\n }\n }\n\n (_document$querySelect2 = document.querySelector('body').classList).add.apply(_document$querySelect2, classes); // trigger router\n\n\n next();\n });\n }\n\n function initVSiteBrandingBlock() {\n _v_sitebranding_block = new _vue.default({\n store: _store.default,\n router: _route.default,\n el: '#block-sitebranding',\n methods: {\n onclick: function onclick(event) {\n // console.log(\"Clicked on logo event\", event);\n var href = event.target.getAttribute('href'); // console.log(\"Clicked on logo href\", href);\n\n this.$router.push(href); // replaced by router.beforeEach\n // this.$store.commit('Common/setPagetitle', null)\n }\n }\n });\n }\n\n function initVPagetitleBlock() {\n var $blk = document.querySelector('#block-pagetitle');\n var $h2 = $blk.querySelector('h2'); // get the loaded pagetitle\n\n var title = $h2.innerText; // if not front recorde the loaded pagetitle in store\n\n if (!_is_front) {\n _store.default.commit('Common/setPagetitle', title);\n } // replace in template the pagetitle by vue binding\n\n\n $h2.innerText = '{{ pagetitle }}'; // create the vue\n\n _v_pagetitle_block = new _vue.default({\n store: _store.default,\n router: _route.default,\n el: $blk,\n computed: _objectSpread({}, (0, _vuex.mapState)({\n pagetitle: function pagetitle(state) {\n return state.Common.pagetitle;\n }\n }))\n });\n }\n\n function initVUserBlock() {\n var mount_point = drupalSettings.user.uid !== 0 ? 'block-userblock' : 'block-userlogin';\n var props = {\n title: \"\",\n loginblock: \"\"\n };\n\n switch (mount_point) {\n case 'block-userlogin':\n var $block = document.getElementById(mount_point);\n console.log('initVUserBlock login form html', $block);\n props.loginblock = $block.outerHTML.trim();\n break;\n\n case 'block-userblock':\n default:\n break;\n }\n\n _v_user_block = new _vue.default({\n store: _store.default,\n // computed: {\n // ...mapState({\n // isloggedin: state => state.User.isloggedin\n // })\n // },\n created: function created() {\n // if already loggedin, call store.user to get the user infos\n if (drupalSettings.user.uid !== 0) {\n this.$store.commit('User/setUid', drupalSettings.user.uid);\n this.$store.dispatch('User/getUser');\n }\n },\n render: function render(h) {\n return h(_UserBlock.default, {\n props: props\n });\n }\n }).$mount('#' + mount_point); // console.log('initVUserBlock', _v_user_block);\n }\n\n function initVHeaderMenu() {\n // console.log('initVHeaderMenu');\n // adding vuejs attributes has it wont work on twig template (see menu--header.html.twig)\n // not working : String contains an invalid character\n // document.querySelectorAll(`#block-header a`).forEach(link => {\n // console.log(link);\n // link.setAttribute('@click.prevent', 'onclick')\n // });\n _v_header_menu = new _vue.default({\n store: _store.default,\n router: _route.default,\n el: \"#block-header\",\n methods: {\n onclick: function onclick(event) {\n // console.log(\"Clicked on header menu link\", event);\n var href = event.target.getAttribute('href'); // let title = event.target.innerText;\n // console.log(\"Clicked on header menu link : href\", href);\n\n this.$router.push(href); // replaced by router.beforeEach\n // this.$store.commit('Common/setPagetitle', title)\n }\n }\n });\n }\n\n function initVMainContent() {\n var id = \"main-content\";\n var $main_content = document.querySelector('#' + id); // console.log('main-content', $main_content);\n\n var main_html = $main_content.innerHTML;\n _v_main_content = new _vue.default({\n store: _store.default,\n render: function render(h) {\n return h(_MainContent.default, {\n props: {\n id: id,\n html: main_html,\n isfront: drupalSettings.path.isFront\n }\n });\n }\n }).$mount('#' + id);\n }\n\n function initVSearchBlock() {\n // console.log('initVSearchBlock');\n var id = \"block-materiosapisearchblock\";\n var $search_block = document.getElementById(id);\n var formhtml = null;\n\n if ($search_block) {\n // get the search form html to pass it as template to the vue\n // we gain display speed vs async downloaded data\n formhtml = $search_block.innerHTML;\n } else {\n // else create the empty block to fill it later with async data\n $search_block = document.createElement('div');\n $search_block.setAttribute('id', id); // TODO: get region by REST\n\n var $region = document.getElementById('header-bottom');\n $region.appendChild($search_block);\n } // in any case create the vue\n\n\n _v_search_block = new _vue.default({\n store: _store.default,\n render: function render(h) {\n return h(_SearchBlock.default, {\n props: {\n blockid: id,\n formhtml: formhtml\n }\n });\n }\n }).$mount('#' + id);\n }\n\n init();\n }; // end MaterioTheme()\n\n\n var materiotheme = new MaterioTheme();\n})(Drupal, drupalSettings, drupalDecoupled);\n\n//# sourceURL=webpack:///./web/themes/custom/materiotheme/assets/scripts/main.js?"); +eval("\n\nvar _vue = _interopRequireDefault(__webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.js\"));\n\nvar _vueInfiniteLoading = _interopRequireDefault(__webpack_require__(/*! vue-infinite-loading */ \"./node_modules/vue-infinite-loading/dist/vue-infinite-loading.js\"));\n\nvar _vueCoolLightbox = _interopRequireDefault(__webpack_require__(/*! vue-cool-lightbox */ \"./node_modules/vue-cool-lightbox/dist/vue-cool-lightbox.esm.js\"));\n\nvar _store = _interopRequireDefault(__webpack_require__(/*! vuejs/store */ \"./web/themes/custom/materiotheme/vuejs/store/index.js\"));\n\nvar _route = _interopRequireDefault(__webpack_require__(/*! vuejs/route */ \"./web/themes/custom/materiotheme/vuejs/route/index.js\"));\n\nvar _UserBlock = _interopRequireDefault(__webpack_require__(/*! vuejs/components/Block/UserBlock */ \"./web/themes/custom/materiotheme/vuejs/components/Block/UserBlock.vue\"));\n\nvar _MainContent = _interopRequireDefault(__webpack_require__(/*! vuejs/components/Content/MainContent */ \"./web/themes/custom/materiotheme/vuejs/components/Content/MainContent.vue\"));\n\nvar _SearchBlock = _interopRequireDefault(__webpack_require__(/*! vuejs/components/Block/SearchBlock */ \"./web/themes/custom/materiotheme/vuejs/components/Block/SearchBlock.vue\"));\n\nvar _vuex = __webpack_require__(/*! vuex */ \"./node_modules/vuex/dist/vuex.esm.js\");\n\n__webpack_require__(/*! theme/assets/styles/main.scss */ \"./web/themes/custom/materiotheme/assets/styles/main.scss\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n_vue.default.use(_vueInfiniteLoading.default, {\n props: {\n spinner: 'spiral' // slots.noMore: ''\n\n } // system: {\n // throttleLimit: 50,\n // /* other settings need to configure */\n // }\n\n}); // import vueVimeoPlayer from 'vue-vimeo-player'\n// Vue.use(vueVimeoPlayer)\n// import VueYouTubeEmbed from 'vue-youtube-embed'\n// Vue.use(VueYouTubeEmbed)\n\n\n_vue.default.use(_vueCoolLightbox.default);\n\n(function (Drupal, drupalSettings, drupalDecoupled) {\n var MaterioTheme = function MaterioTheme() {\n var _v_sitebranding_block, _v_user_block, _v_header_menu, _v_pagetitle_block, _v_search_block, _v_main_content;\n\n var _is_front = drupalSettings.path.isFront;\n console.log('drupalSettings', drupalSettings); // ___ _ _\n // |_ _|_ _ (_) |_\n // | || ' \\| | _|\n // |___|_||_|_|\\__|\n\n function init() {\n console.log(\"MaterioTheme init()\");\n initVues();\n }\n\n function checkNoVuePages() {\n // return drupalDecoupled.sys_path != '/cart'\n // && drupalDecoupled.sys_path.indexOf('checkout') != 1;\n if (drupalDecoupled.route_name.indexOf('commerce') == -1 && drupalDecoupled.route_name.indexOf('flagging_collection') == -1 && drupalDecoupled.route_name.indexOf('user') == -1) {\n return false;\n } else {\n return true;\n }\n }\n\n function initVues() {\n // only launch views if we are not in commerce pages\n if (!checkNoVuePages()) {\n initVRouter();\n initVSiteBrandingBlock();\n initVPagetitleBlock();\n initVHeaderMenu();\n initVMainContent();\n initVSearchBlock();\n }\n\n initVUserBlock();\n }\n\n function initVRouter() {\n // we need this to update the title and body classes while using history nav\n _route.default.beforeEach(function (to, from, next) {\n var _document$querySelect, _document$querySelect2;\n\n // console.log('router beforeEach to ', to);\n // commit new title to store\n var title = null;\n\n switch (to.name) {\n case 'home':\n title = null;\n break;\n\n case 'article':\n title = false;\n break;\n\n default:\n title = to.name;\n }\n\n if (title !== false) {\n _store.default.commit('Common/setPagetitle', title);\n } // remove all path related body classes\n\n\n var body_classes = document.querySelector('body').classList;\n var classes_to_rm = [];\n\n for (var i = 0; i < body_classes.length; i++) {\n if (body_classes[i].startsWith('path-')) {\n classes_to_rm.push(body_classes[i]);\n }\n }\n\n (_document$querySelect = document.querySelector('body').classList).remove.apply(_document$querySelect, classes_to_rm); // add new path classes to body\n\n\n var classes = [];\n\n if (to.path == '/') {\n classes.push('path-home');\n } else {\n var path_parts = to.path.replace(/^\\//, '').split('/'); // TODO: remove language relative prefix from path classes (fr, en, etc)\n\n for (var i = 0; i < path_parts.length; i++) {\n if (i == 0) {\n var c = \"path-\" + path_parts[i];\n } else if (path_parts[i] !== '') {\n var c = classes[i - 1] + '-' + path_parts[i];\n }\n\n classes.push(c);\n }\n }\n\n (_document$querySelect2 = document.querySelector('body').classList).add.apply(_document$querySelect2, classes); // trigger router\n\n\n next();\n });\n }\n\n function initVSiteBrandingBlock() {\n _v_sitebranding_block = new _vue.default({\n store: _store.default,\n router: _route.default,\n el: '#block-sitebranding',\n methods: {\n onclick: function onclick(event) {\n // console.log(\"Clicked on logo event\", event);\n var href = event.target.getAttribute('href'); // console.log(\"Clicked on logo href\", href);\n\n this.$router.push(href); // replaced by router.beforeEach\n // this.$store.commit('Common/setPagetitle', null)\n }\n }\n });\n }\n\n function initVPagetitleBlock() {\n var $blk = document.querySelector('#block-pagetitle');\n var $h2 = $blk.querySelector('h2'); // get the loaded pagetitle\n\n var title = $h2.innerText; // if not front recorde the loaded pagetitle in store\n\n if (!_is_front) {\n _store.default.commit('Common/setPagetitle', title);\n } // replace in template the pagetitle by vue binding\n\n\n $h2.innerText = '{{ pagetitle }}'; // create the vue\n\n _v_pagetitle_block = new _vue.default({\n store: _store.default,\n router: _route.default,\n el: $blk,\n computed: _objectSpread({}, (0, _vuex.mapState)({\n pagetitle: function pagetitle(state) {\n return state.Common.pagetitle;\n }\n }))\n });\n }\n\n function initVUserBlock() {\n var mount_point = drupalSettings.user.uid !== 0 ? 'block-userblock' : 'block-userlogin';\n var props = {\n title: \"\",\n loginblock: \"\"\n };\n\n switch (mount_point) {\n case 'block-userlogin':\n var $block = document.getElementById(mount_point);\n console.log('initVUserBlock login form html', $block);\n props.loginblock = $block.outerHTML.trim();\n break;\n\n case 'block-userblock':\n default:\n break;\n }\n\n _v_user_block = new _vue.default({\n store: _store.default,\n // computed: {\n // ...mapState({\n // isloggedin: state => state.User.isloggedin\n // })\n // },\n created: function created() {\n // if already loggedin, call store.user to get the user infos\n if (drupalSettings.user.uid !== 0) {\n this.$store.commit('User/setUid', drupalSettings.user.uid);\n this.$store.dispatch('User/getUser');\n }\n },\n render: function render(h) {\n return h(_UserBlock.default, {\n props: props\n });\n }\n }).$mount('#' + mount_point); // console.log('initVUserBlock', _v_user_block);\n }\n\n function initVHeaderMenu() {\n // console.log('initVHeaderMenu');\n // adding vuejs attributes has it wont work on twig template (see menu--header.html.twig)\n // not working : String contains an invalid character\n // document.querySelectorAll(`#block-header a`).forEach(link => {\n // console.log(link);\n // link.setAttribute('@click.prevent', 'onclick')\n // });\n _v_header_menu = new _vue.default({\n store: _store.default,\n router: _route.default,\n el: \"#block-header\",\n methods: {\n onclick: function onclick(event) {\n // console.log(\"Clicked on header menu link\", event);\n var href = event.target.getAttribute('href'); // let title = event.target.innerText;\n // console.log(\"Clicked on header menu link : href\", href);\n\n this.$router.push(href); // replaced by router.beforeEach\n // this.$store.commit('Common/setPagetitle', title)\n }\n }\n });\n }\n\n function initVMainContent() {\n var id = \"main-content\";\n var $main_content = document.querySelector('#' + id); // console.log('main-content', $main_content);\n\n var main_html = $main_content.innerHTML;\n _v_main_content = new _vue.default({\n store: _store.default,\n render: function render(h) {\n return h(_MainContent.default, {\n props: {\n id: id,\n html: main_html,\n isfront: drupalSettings.path.isFront\n }\n });\n }\n }).$mount('#' + id);\n }\n\n function initVSearchBlock() {\n // console.log('initVSearchBlock');\n var id = \"block-materiosapisearchblock\";\n var $search_block = document.getElementById(id);\n var formhtml = null;\n\n if ($search_block) {\n // get the search form html to pass it as template to the vue\n // we gain display speed vs async downloaded data\n formhtml = $search_block.innerHTML;\n } else {\n // else create the empty block to fill it later with async data\n $search_block = document.createElement('div');\n $search_block.setAttribute('id', id); // TODO: get region by REST\n\n var $region = document.getElementById('header-bottom');\n $region.appendChild($search_block);\n } // in any case create the vue\n\n\n _v_search_block = new _vue.default({\n store: _store.default,\n render: function render(h) {\n return h(_SearchBlock.default, {\n props: {\n blockid: id,\n formhtml: formhtml\n }\n });\n }\n }).$mount('#' + id);\n }\n\n init();\n }; // end MaterioTheme()\n\n\n var materiotheme = new MaterioTheme();\n})(Drupal, drupalSettings, drupalDecoupled);\n\n//# sourceURL=webpack:///./web/themes/custom/materiotheme/assets/scripts/main.js?"); /***/ }), @@ -1763,6 +1787,42 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _nod /***/ }), +/***/ "./web/themes/custom/materiotheme/vuejs/components/User/UserFlags.vue": +/*!****************************************************************************!*\ + !*** ./web/themes/custom/materiotheme/vuejs/components/User/UserFlags.vue ***! + \****************************************************************************/ +/*! no static exports found */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _UserFlags_vue_vue_type_template_id_0e1971fa_scoped_true_lang_html___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./UserFlags.vue?vue&type=template&id=0e1971fa&scoped=true&lang=html& */ \"./web/themes/custom/materiotheme/vuejs/components/User/UserFlags.vue?vue&type=template&id=0e1971fa&scoped=true&lang=html&\");\n/* harmony import */ var _UserFlags_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./UserFlags.vue?vue&type=script&lang=js& */ \"./web/themes/custom/materiotheme/vuejs/components/User/UserFlags.vue?vue&type=script&lang=js&\");\n/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _UserFlags_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _UserFlags_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[key]; }) }(__WEBPACK_IMPORT_KEY__));\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _UserFlags_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _UserFlags_vue_vue_type_template_id_0e1971fa_scoped_true_lang_html___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _UserFlags_vue_vue_type_template_id_0e1971fa_scoped_true_lang_html___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n \"0e1971fa\",\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"web/themes/custom/materiotheme/vuejs/components/User/UserFlags.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n//# sourceURL=webpack:///./web/themes/custom/materiotheme/vuejs/components/User/UserFlags.vue?"); + +/***/ }), + +/***/ "./web/themes/custom/materiotheme/vuejs/components/User/UserFlags.vue?vue&type=script&lang=js&": +/*!*****************************************************************************************************!*\ + !*** ./web/themes/custom/materiotheme/vuejs/components/User/UserFlags.vue?vue&type=script&lang=js& ***! + \*****************************************************************************************************/ +/*! no static exports found */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_UserFlags_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../../../node_modules/babel-loader/lib!../../../../../../../node_modules/vue-loader/lib??vue-loader-options!./UserFlags.vue?vue&type=script&lang=js& */ \"./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js?!./web/themes/custom/materiotheme/vuejs/components/User/UserFlags.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_UserFlags_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_UserFlags_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__);\n/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_UserFlags_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_UserFlags_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__));\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_UserFlags_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0___default.a); \n\n//# sourceURL=webpack:///./web/themes/custom/materiotheme/vuejs/components/User/UserFlags.vue?"); + +/***/ }), + +/***/ "./web/themes/custom/materiotheme/vuejs/components/User/UserFlags.vue?vue&type=template&id=0e1971fa&scoped=true&lang=html&": +/*!*********************************************************************************************************************************!*\ + !*** ./web/themes/custom/materiotheme/vuejs/components/User/UserFlags.vue?vue&type=template&id=0e1971fa&scoped=true&lang=html& ***! + \*********************************************************************************************************************************/ +/*! exports provided: render, staticRenderFns */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_UserFlags_vue_vue_type_template_id_0e1971fa_scoped_true_lang_html___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../../../../node_modules/vue-loader/lib??vue-loader-options!./UserFlags.vue?vue&type=template&id=0e1971fa&scoped=true&lang=html& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./web/themes/custom/materiotheme/vuejs/components/User/UserFlags.vue?vue&type=template&id=0e1971fa&scoped=true&lang=html&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_UserFlags_vue_vue_type_template_id_0e1971fa_scoped_true_lang_html___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_UserFlags_vue_vue_type_template_id_0e1971fa_scoped_true_lang_html___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n//# sourceURL=webpack:///./web/themes/custom/materiotheme/vuejs/components/User/UserFlags.vue?"); + +/***/ }), + /***/ "./web/themes/custom/materiotheme/vuejs/components/User/UserTools.vue": /*!****************************************************************************!*\ !*** ./web/themes/custom/materiotheme/vuejs/components/User/UserTools.vue ***! @@ -1879,7 +1939,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _jsonAxios = __webpack_require__(/*! vuejs/api/json-axios */ \"./web/themes/custom/materiotheme/vuejs/api/json-axios.js\");\n\nvar _maAxios = __webpack_require__(/*! vuejs/api/ma-axios */ \"./web/themes/custom/materiotheme/vuejs/api/ma-axios.js\");\n\nvar _querystring = _interopRequireDefault(__webpack_require__(/*! querystring */ \"./node_modules/querystring-es3/index.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar _default = {\n namespaced: true,\n // initial state\n state: {\n keys: \"\",\n term: \"\",\n uuids: [],\n items: [],\n offset: 0,\n limit: 15,\n infos: null,\n count: 0,\n // infinteState will come from vue-infinite-loading plugin\n // implemented in vuejs/components/Content/Base.vue\n infiniteLoadingState: null\n },\n // getters\n getters: {},\n // mutations\n mutations: {\n setUuids: function setUuids(state, uuids) {\n state.uuids = state.uuids.concat(uuids);\n },\n resetUuids: function resetUuids(state) {\n state.uuids = [];\n },\n setItems: function setItems(state, items) {\n state.items = state.items.concat(items);\n },\n resetItems: function resetItems(state) {\n state.items = [];\n },\n setKeys: function setKeys(state, keys) {\n state.keys = keys;\n },\n setTerm: function setTerm(state, term) {\n state.term = term;\n },\n setInfos: function setInfos(state, infos) {\n state.infos = infos;\n },\n setCount: function setCount(state, count) {\n state.count = count;\n },\n resetOffset: function resetOffset(state) {\n state.offset = 0;\n },\n incrementOffset: function incrementOffset(state) {\n state.offset += state.limit;\n },\n setInfiniteState: function setInfiniteState(state, infiniteLoadingstate) {\n state.infiniteLoadingState = infiniteLoadingstate;\n }\n },\n // actions\n actions: {\n newSearch: function newSearch(_ref) {\n var dispatch = _ref.dispatch,\n commit = _ref.commit,\n state = _ref.state;\n console.log('Search newSearch');\n commit('resetUuids');\n commit('resetItems');\n commit('resetOffset');\n this.commit('Common/setPagetitle', state.keys);\n dispatch('getResults');\n },\n nextPage: function nextPage(_ref2, $infiniteLoadingstate) {\n var dispatch = _ref2.dispatch,\n commit = _ref2.commit,\n state = _ref2.state;\n console.log(\"Search nextPage\", $infiniteLoadingstate);\n commit('incrementOffset');\n commit('setInfiniteState', $infiniteLoadingstate);\n dispatch('getResults');\n },\n getResults: function getResults(_ref3) {\n var dispatch = _ref3.dispatch,\n commit = _ref3.commit,\n state = _ref3.state;\n var params = {\n keys: state.keys,\n term: state.term,\n offset: state.offset,\n limit: state.limit\n }; // console.log('Search getResults params', params);\n\n var q = _querystring.default.stringify(params);\n\n return _maAxios.MA.get(\"/materio_sapi/getresults?\" + q).then(function (_ref4) {\n var data = _ref4.data;\n console.log('search MA getresults data', data); // commit('setItems', data.items)\n\n commit('setInfos', data.infos);\n commit('setCount', data.count);\n commit('setUuids', data.uuids);\n dispatch('getItems', data.uuids);\n }).catch(function (error) {\n console.warn('Issue with getResults', error);\n Promise.reject(error);\n });\n },\n getItems: function getItems(_ref5, uuids) {\n var dispatch = _ref5.dispatch,\n commit = _ref5.commit,\n state = _ref5.state;\n var params = {\n // include: 'images', // no needs to include thanks to consumers_image_styles module\n 'filter[uuids-groupe][group][conjunction]': 'OR'\n };\n\n for (var i = 0; i < uuids.length; i++) {\n var uuid = uuids[i];\n params[\"filter[\".concat(uuid, \"][condition][path]\")] = 'id';\n params[\"filter[\".concat(uuid, \"][condition][value]\")] = uuid;\n params[\"filter[\".concat(uuid, \"][condition][operator]\")] = '=';\n params[\"filter[\".concat(uuid, \"][condition][memberOf]\")] = 'uuids-groupe';\n } // console.log('search JSONAPI params', params);\n\n\n var q = _querystring.default.stringify(params);\n\n return _jsonAxios.JSONAPI.get('node/materiau?' + q).then(function (_ref6) {\n var data = _ref6.data;\n console.log('search getItems data', data);\n dispatch('parseItems', {\n data: data.data,\n uuids: uuids\n }); // commit('setItems', data.items)\n }).catch(function (error) {\n console.warn('Issue with getItems', error);\n Promise.reject(error);\n });\n },\n parseItems: function parseItems(_ref7, _ref8) {\n var dispatch = _ref7.dispatch,\n commit = _ref7.commit,\n state = _ref7.state;\n var data = _ref8.data,\n uuids = _ref8.uuids;\n // data comes from jsonapi query\n // uuids comes from solr search query (we loop from uuids to conserve the search results order)\n console.log('search parseItems data, uuids', data, uuids);\n var items = []; // for (var i = 0; i < data.length; i++) {\n\n var _loop = function _loop() {\n var uuid = uuids[i]; // https://stackoverflow.com/questions/11258077/how-to-find-index-of-an-object-by-key-and-value-in-an-javascript-array\n\n var item_index = data.findIndex(function (p) {\n return p.id == uuid;\n }); // console.log('item_index', item_index);\n\n if (item_index == -1) return \"continue\";\n var item_src = data[item_index];\n var attrs = item_src.attributes;\n var relations = item_src.relationships; // get field values\n\n var item = {\n uuid: uuid,\n title: attrs.title,\n field_short_description: attrs.field_short_description,\n body: attrs.body,\n field_reference: attrs.field_reference\n }; // get images included values\n\n var img_src = relations.images.data;\n console.log('img_src', img_src); // this is a temporary deactivation of images\n // img_src = [];\n\n item.images = [];\n\n for (j = 0; j < img_src.length; j++) {\n if (img_src[j].meta.imageDerivatives) {\n item.images.push({\n title: img_src[j].meta.title,\n // meta.imageDerivatives.style.href link is provided by drupal consumers_image_styles module\n // BUG: missing all image derivative but first\n url: img_src[j].meta.imageDerivatives.links.card_medium.href\n });\n } else {\n console.warn('missing image derivative ' + j + '/' + img_src.length + ' for ' + attrs.title);\n }\n }\n\n items.push(item);\n };\n\n for (var i = 0; i < uuids.length; i++) {\n var j;\n\n var _ret = _loop();\n\n if (_ret === \"continue\") continue;\n }\n\n console.log('items', items);\n commit('setItems', items);\n\n if (state.infiniteLoadingState) {\n if (state.offset + state.limit > state.count) {\n console.log('Search infinite completed'); // tell to vue-infinite-loading plugin that there si no new page\n\n state.infiniteLoadingState.complete();\n } else {\n console.log('Search infinite loaded'); // tell to vue-infinite-loading plugin that newpage is loaded\n\n state.infiniteLoadingState.loaded();\n }\n }\n }\n }\n};\nexports.default = _default;\n\n//# sourceURL=webpack:///./web/themes/custom/materiotheme/vuejs/store/modules/search.js?"); +eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _restAxios = __webpack_require__(/*! vuejs/api/rest-axios */ \"./web/themes/custom/materiotheme/vuejs/api/rest-axios.js\");\n\nvar _jsonAxios = __webpack_require__(/*! vuejs/api/json-axios */ \"./web/themes/custom/materiotheme/vuejs/api/json-axios.js\");\n\nvar _maAxios = __webpack_require__(/*! vuejs/api/ma-axios */ \"./web/themes/custom/materiotheme/vuejs/api/ma-axios.js\");\n\nvar _querystring = _interopRequireDefault(__webpack_require__(/*! querystring */ \"./node_modules/querystring-es3/index.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar _default = {\n namespaced: true,\n // initial state\n state: {\n keys: \"\",\n term: \"\",\n uuids: [],\n items: [],\n offset: 0,\n limit: 15,\n infos: null,\n count: 0,\n // infinteState will come from vue-infinite-loading plugin\n // implemented in vuejs/components/Content/Base.vue\n infiniteLoadingState: null\n },\n // getters\n getters: {},\n // mutations\n mutations: {\n setUuids: function setUuids(state, uuids) {\n state.uuids = state.uuids.concat(uuids);\n },\n resetUuids: function resetUuids(state) {\n state.uuids = [];\n },\n setItems: function setItems(state, items) {\n state.items = state.items.concat(items);\n },\n resetItems: function resetItems(state) {\n state.items = [];\n },\n setKeys: function setKeys(state, keys) {\n state.keys = keys;\n },\n setTerm: function setTerm(state, term) {\n state.term = term;\n },\n setInfos: function setInfos(state, infos) {\n state.infos = infos;\n },\n setCount: function setCount(state, count) {\n state.count = count;\n },\n resetOffset: function resetOffset(state) {\n state.offset = 0;\n },\n incrementOffset: function incrementOffset(state) {\n state.offset += state.limit;\n },\n setInfiniteState: function setInfiniteState(state, infiniteLoadingstate) {\n state.infiniteLoadingState = infiniteLoadingstate;\n }\n },\n // actions\n actions: {\n newSearch: function newSearch(_ref) {\n var dispatch = _ref.dispatch,\n commit = _ref.commit,\n state = _ref.state;\n console.log('Search newSearch');\n commit('resetUuids');\n commit('resetItems');\n commit('resetOffset');\n this.commit('Common/setPagetitle', state.keys);\n dispatch('getResults');\n },\n nextPage: function nextPage(_ref2, $infiniteLoadingstate) {\n var dispatch = _ref2.dispatch,\n commit = _ref2.commit,\n state = _ref2.state;\n console.log(\"Search nextPage\", $infiniteLoadingstate);\n commit('incrementOffset');\n commit('setInfiniteState', $infiniteLoadingstate);\n dispatch('getResults');\n },\n getResults: function getResults(_ref3) {\n var dispatch = _ref3.dispatch,\n commit = _ref3.commit,\n state = _ref3.state;\n var params = {\n keys: state.keys,\n term: state.term,\n offset: state.offset,\n limit: state.limit\n }; // console.log('Search getResults params', params);\n\n var q = _querystring.default.stringify(params);\n\n return _maAxios.MA.get(\"/materio_sapi/getresults?\" + q).then(function (_ref4) {\n var data = _ref4.data;\n console.log('search MA getresults data', data); // commit('setItems', data.items)\n\n commit('setInfos', data.infos);\n commit('setCount', data.count);\n commit('setUuids', data.uuids);\n dispatch('getItems', data.uuids);\n }).catch(function (error) {\n console.warn('Issue with getResults', error);\n Promise.reject(error);\n });\n },\n getItems: function getItems(_ref5, uuids) {\n var dispatch = _ref5.dispatch,\n commit = _ref5.commit,\n state = _ref5.state;\n var params = {\n // include: 'images', // no needs to include thanks to consumers_image_styles module\n 'filter[uuids-groupe][group][conjunction]': 'OR'\n };\n\n for (var i = 0; i < uuids.length; i++) {\n var uuid = uuids[i];\n params[\"filter[\".concat(uuid, \"][condition][path]\")] = 'id';\n params[\"filter[\".concat(uuid, \"][condition][value]\")] = uuid;\n params[\"filter[\".concat(uuid, \"][condition][operator]\")] = '=';\n params[\"filter[\".concat(uuid, \"][condition][memberOf]\")] = 'uuids-groupe';\n } // console.log('search JSONAPI params', params);\n\n\n var q = _querystring.default.stringify(params);\n\n return _jsonAxios.JSONAPI.get('node/materiau?' + q).then(function (_ref6) {\n var data = _ref6.data;\n console.log('search getItems data', data);\n dispatch('parseItems', {\n data: data.data,\n uuids: uuids\n }); // commit('setItems', data.items)\n }).catch(function (error) {\n console.warn('Issue with getItems', error);\n Promise.reject(error);\n });\n },\n parseItems: function parseItems(_ref7, _ref8) {\n var dispatch = _ref7.dispatch,\n commit = _ref7.commit,\n state = _ref7.state;\n var data = _ref8.data,\n uuids = _ref8.uuids;\n // data comes from jsonapi query\n // uuids comes from solr search query (we loop from uuids to conserve the search results order)\n console.log('search parseItems data, uuids', data, uuids);\n var items = []; // for (var i = 0; i < data.length; i++) {\n\n var _loop = function _loop() {\n var uuid = uuids[i]; // https://stackoverflow.com/questions/11258077/how-to-find-index-of-an-object-by-key-and-value-in-an-javascript-array\n\n var item_index = data.findIndex(function (p) {\n return p.id == uuid;\n }); // console.log('item_index', item_index);\n\n if (item_index == -1) return \"continue\";\n var item_src = data[item_index];\n var attrs = item_src.attributes;\n var relations = item_src.relationships; // get field values\n\n var item = {\n uuid: uuid,\n title: attrs.title,\n field_short_description: attrs.field_short_description,\n body: attrs.body,\n field_reference: attrs.field_reference\n }; // get images included values\n\n var img_src = relations.images.data;\n console.log('img_src', img_src); // this is a temporary deactivation of images\n // img_src = [];\n\n item.images = [];\n\n for (j = 0; j < img_src.length; j++) {\n if (img_src[j].meta.imageDerivatives) {\n item.images.push({\n title: img_src[j].meta.title,\n // meta.imageDerivatives.style.href link is provided by drupal consumers_image_styles module\n // BUG: missing all image derivative but first\n url: img_src[j].meta.imageDerivatives.links.card_medium.href\n });\n } else {\n console.warn('missing image derivative ' + j + '/' + img_src.length + ' for ' + attrs.title);\n }\n }\n\n items.push(item);\n };\n\n for (var i = 0; i < uuids.length; i++) {\n var j;\n\n var _ret = _loop();\n\n if (_ret === \"continue\") continue;\n }\n\n console.log('items', items);\n commit('setItems', items);\n\n if (state.infiniteLoadingState) {\n if (state.offset + state.limit > state.count) {\n console.log('Search infinite completed'); // tell to vue-infinite-loading plugin that there si no new page\n\n state.infiniteLoadingState.complete();\n } else {\n console.log('Search infinite loaded'); // tell to vue-infinite-loading plugin that newpage is loaded\n\n state.infiniteLoadingState.loaded();\n }\n }\n }\n }\n};\nexports.default = _default;\n\n//# sourceURL=webpack:///./web/themes/custom/materiotheme/vuejs/store/modules/search.js?"); /***/ }), @@ -1903,7 +1963,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _restAxios = __webpack_require__(/*! vuejs/api/rest-axios */ \"./web/themes/custom/materiotheme/vuejs/api/rest-axios.js\");\n\nvar _jsonAxios = __webpack_require__(/*! vuejs/api/json-axios */ \"./web/themes/custom/materiotheme/vuejs/api/json-axios.js\");\n\nvar _querystring = _interopRequireDefault(__webpack_require__(/*! querystring */ \"./node_modules/querystring-es3/index.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar _default = {\n namespaced: true,\n // initial state\n state: {\n uid: null,\n // username: '',\n mail: '',\n token: null,\n csrftoken: null,\n logout_token: null,\n isloggedin: false,\n isAdmin: false,\n isAdherent: false,\n canSearch: false,\n roles: []\n },\n // getters\n getters: {},\n // mutations\n mutations: {\n SetCsrftoken: function SetCsrftoken(state, token) {\n state.csrftoken = token;\n },\n setToken: function setToken(state, data) {\n state.uid = data.current_user.uid; // state.username = data.username\n\n state.mail = data.current_user.mail;\n state.token = data.csrf_token;\n state.isloggedin = true;\n state.logout_token = data.logout_token;\n },\n setUid: function setUid(state, uid) {\n state.uid = uid;\n state.isloggedin = true;\n },\n setUser: function setUser(state, data) {\n state.mail = data.mail[0].value;\n state.uuid = data.uuid[0].value;\n },\n setRoles: function setRoles(state, roles) {\n console.log(\"User setRoles\", roles);\n state.roles = [];\n\n for (var i = 0; i < roles.length; i++) {\n state.roles.push(roles[i].target_id);\n } // check if admin\n\n\n if (state.roles.indexOf('admin') != -1 || state.roles.indexOf('root') != -1) {\n // console.log('is admin');\n state.isAdmin = true;\n } // check if has access to search\n\n\n if (state.roles.indexOf('adherent') != -1) {\n // console.log('is admin');\n state.canSearch = true;\n state.isAdherent = true;\n }\n },\n setLoggedOut: function setLoggedOut(state) {\n console.log(\"setLoggedOut state\", state);\n state.uid = null;\n state.mail = '';\n state.token = null;\n state.isloggedin = false;\n state.logout_token = null;\n\n if (state.isAdmin) {\n // TODO: what if on a page where login is needed (as commerce checkout and cart)\n window.location.reload(true);\n }\n\n state.asAdmin = false;\n state.canSearch = false;\n }\n },\n // actions\n actions: {\n userRegister: function userRegister(_ref, credentials) {\n var dispatch = _ref.dispatch,\n commit = _ref.commit,\n state = _ref.state;\n return new Promise(function (resolve, reject) {\n _restAxios.REST.get('/session/token').then(function (_ref2) {\n var token = _ref2.token;\n commit('SetCsrftoken', token);\n\n _restAxios.REST.post('/user/register?_format=json', credentials, {\n 'X-CSRF-Token': state.csrftoken\n }).then(function (_ref3) {\n var data = _ref3.data;\n console.log('user REST registered', data);\n dispatch('userLogin', credentials).then(function () {\n resolve();\n });\n }).catch(function (error) {\n console.warn('Issue with register', error);\n Promise.reject(error);\n });\n });\n });\n },\n userLogin: function userLogin(_ref4, credentials) {\n var dispatch = _ref4.dispatch,\n commit = _ref4.commit,\n state = _ref4.state;\n return new Promise(function (resolve, reject) {\n dispatch('getToken', credentials).then(function () {\n dispatch('getUser').then(function (userdata) {\n console.log('User Loggedin');\n\n if (state.isAdmin) {\n window.location.reload(true);\n }\n\n resolve();\n });\n });\n });\n },\n getToken: function getToken(_ref5, credentials) {\n var dispatch = _ref5.dispatch,\n commit = _ref5.commit,\n state = _ref5.state;\n return _restAxios.REST.post('/user/login?_format=json', credentials).then(function (_ref6) {\n var data = _ref6.data;\n console.log('user REST getToken data', data);\n commit('setToken', data);\n }).catch(function (error) {\n console.warn('Issue with getToken', error);\n Promise.reject(error);\n });\n },\n getUser: function getUser(_ref7) {\n var dispatch = _ref7.dispatch,\n commit = _ref7.commit,\n state = _ref7.state;\n var params = {\n token: state.token\n };\n return _restAxios.REST.get(\"/user/\".concat(state.uid, \"?_format=json\"), params).then(function (_ref8) {\n var data = _ref8.data;\n console.log('user REST getUser data', data);\n console.log('roles', data['roles']);\n commit('setUser', data);\n\n if (data.roles) {\n commit('setRoles', data.roles);\n }\n }).catch(function (error) {\n console.warn('Issue with getUser', error);\n Promise.reject(error);\n });\n },\n userLogout: function userLogout(_ref9) {\n var commit = _ref9.commit,\n state = _ref9.state;\n\n var credentials = _querystring.default.stringify({\n token: state.token\n });\n\n _restAxios.REST.post('/user/logout', credentials).then(function (resp) {\n console.log('userLogout resp', resp);\n commit('setLoggedOut');\n }).catch(function (error) {\n console.warn('Issue with logout', error);\n Promise.reject(error);\n });\n }\n }\n};\nexports.default = _default;\n\n//# sourceURL=webpack:///./web/themes/custom/materiotheme/vuejs/store/modules/user.js?"); +eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _restAxios = __webpack_require__(/*! vuejs/api/rest-axios */ \"./web/themes/custom/materiotheme/vuejs/api/rest-axios.js\");\n\nvar _maAxios = __webpack_require__(/*! vuejs/api/ma-axios */ \"./web/themes/custom/materiotheme/vuejs/api/ma-axios.js\");\n\nvar _querystring = _interopRequireDefault(__webpack_require__(/*! querystring */ \"./node_modules/querystring-es3/index.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// import { JSONAPI } from 'vuejs/api/json-axios';\nvar _default = {\n namespaced: true,\n // initial state\n state: {\n uid: null,\n // username: '',\n mail: \"\",\n token: null,\n csrftoken: null,\n logout_token: null,\n isloggedin: false,\n isAdmin: false,\n isAdherent: false,\n canSearch: false,\n roles: [],\n flags: false\n },\n // getters\n getters: {},\n // mutations\n mutations: {\n SetCsrftoken: function SetCsrftoken(state, token) {\n state.csrftoken = token;\n },\n setToken: function setToken(state, data) {\n state.uid = data.current_user.uid; // state.username = data.username;\n\n state.mail = data.current_user.mail;\n state.token = data.csrf_token;\n state.isloggedin = true;\n state.logout_token = data.logout_token;\n },\n setUid: function setUid(state, uid) {\n state.uid = uid;\n state.isloggedin = true;\n },\n setUser: function setUser(state, data) {\n state.mail = data.mail[0].value;\n state.uuid = data.uuid[0].value;\n },\n setRoles: function setRoles(state, roles) {\n console.log(\"User setRoles\", roles);\n state.roles = [];\n\n for (var i = 0; i < roles.length; i++) {\n state.roles.push(roles[i].target_id);\n } // check if admin\n\n\n if (state.roles.indexOf(\"admin\") !== -1 || state.roles.indexOf(\"root\") !== -1) {\n // console.log('is admin');\n state.isAdmin = true;\n } // check if has access to search\n\n\n if (state.roles.indexOf(\"adherent\") !== -1) {\n // console.log('is admin');\n state.canSearch = true;\n state.isAdherent = true;\n }\n },\n setLoggedOut: function setLoggedOut(state) {\n console.log(\"setLoggedOut state\", state);\n state.uid = null;\n state.mail = \"\";\n state.token = null;\n state.isloggedin = false;\n state.logout_token = null;\n\n if (state.isAdmin) {\n // TODO: what if on a page where login is needed (as commerce checkout and cart)\n window.location.reload(true);\n }\n\n state.asAdmin = false;\n state.canSearch = false;\n },\n setFlags: function setFlags(state, flags) {\n console.log(\"User setFlags\", flags);\n state.flags = flags;\n }\n },\n // actions\n actions: {\n userRegister: function userRegister(_ref, credentials) {\n var dispatch = _ref.dispatch,\n commit = _ref.commit,\n state = _ref.state;\n return new Promise(function (resolve, reject) {\n _restAxios.REST.get(\"/session/token\").then(function (_ref2) {\n var token = _ref2.token;\n commit(\"SetCsrftoken\", token);\n\n _restAxios.REST.post(\"/user/register?_format=json\", credentials, {\n \"X-CSRF-Token\": state.csrftoken\n }).then(function (_ref3) {\n var data = _ref3.data;\n console.log(\"user REST registered\", data);\n dispatch(\"userLogin\", credentials).then(function () {\n resolve();\n });\n }).catch(function (error) {\n console.warn(\"Issue with register\", error);\n Promise.reject(error);\n });\n });\n });\n },\n userLogin: function userLogin(_ref4, credentials) {\n var dispatch = _ref4.dispatch,\n commit = _ref4.commit,\n state = _ref4.state;\n return new Promise(function (resolve, reject) {\n dispatch(\"getToken\", credentials).then(function () {\n dispatch(\"getUser\").then(function (userdata) {\n console.log(\"User Loggedin\");\n\n if (state.isAdmin) {\n window.location.reload(true);\n }\n\n resolve();\n });\n });\n });\n },\n getToken: function getToken(_ref5, credentials) {\n var dispatch = _ref5.dispatch,\n commit = _ref5.commit,\n state = _ref5.state;\n return _restAxios.REST.post(\"/user/login?_format=json\", credentials).then(function (_ref6) {\n var data = _ref6.data;\n console.log(\"user REST getToken data\", data);\n commit(\"setToken\", data);\n }).catch(function (error) {\n console.warn(\"Issue with getToken\", error);\n Promise.reject(error);\n });\n },\n getUser: function getUser(_ref7) {\n var dispatch = _ref7.dispatch,\n commit = _ref7.commit,\n state = _ref7.state;\n var params = {\n token: state.token\n };\n return _restAxios.REST.get(\"/user/\".concat(state.uid, \"?_format=json\"), params).then(function (_ref8) {\n var data = _ref8.data;\n console.log(\"user REST getUser data\", data);\n console.log(\"roles\", data.roles);\n commit(\"setUser\", data);\n\n if (data.roles) {\n commit(\"setRoles\", data.roles);\n }\n\n dispatch(\"getUserFlags\");\n }).catch(function (error) {\n console.warn(\"Issue with getUser\", error);\n Promise.reject(error);\n });\n },\n getUserFlags: function getUserFlags(_ref9) {\n var dispatch = _ref9.dispatch,\n commit = _ref9.commit,\n state = _ref9.state;\n // flags\n // REST.get('/flagging_collection/1?_format=json')\n // .then(( data ) => {\n // console.log('TEST FLAG REST data', data)\n // })\n // .catch(error => {\n // console.warn('Issue USER TEST FLAG REST', error)\n // Promise.reject(error)\n // })\n return _maAxios.MA.get(\"materio_flag/user_flagging_collections\").then(function (_ref10) {\n var data = _ref10.data;\n console.log(\"user MA getFlags data\", data);\n commit(\"setFlags\", data);\n }).catch(function (error) {\n console.warn(\"Issue USER MA getFlags\", error);\n Promise.reject(error);\n });\n },\n createFlag: function createFlag(_ref11) {\n var dispatch = _ref11.dispatch,\n commit = _ref11.commit,\n state = _ref11.state;\n // https://drupal.stackexchange.com/questions/248539/cant-get-flagging-api-to-accept-post-request\n return _restAxios.REST.post(\"/entity/flagging_collection?_format=json\").then(function (_ref12) {\n var data = _ref12.data;\n console.log(\"user REST createFlag data\", data); // commit(\"setFlags\", data);\n }).catch(function (error) {\n console.warn(\"Issue USER MA createFlag\", error);\n Promise.reject(error);\n });\n },\n userLogout: function userLogout(_ref13) {\n var commit = _ref13.commit,\n state = _ref13.state;\n\n var credentials = _querystring.default.stringify({\n token: state.token\n });\n\n _restAxios.REST.post(\"/user/logout\", credentials).then(function (resp) {\n console.log(\"userLogout resp\", resp);\n commit(\"setLoggedOut\");\n }).catch(function (error) {\n console.warn(\"Issue with logout\", error);\n Promise.reject(error);\n });\n }\n }\n};\nexports.default = _default;\n\n//# sourceURL=webpack:///./web/themes/custom/materiotheme/vuejs/store/modules/user.js?"); /***/ }) diff --git a/web/themes/custom/materiotheme/assets/scripts/main.js b/web/themes/custom/materiotheme/assets/scripts/main.js index f4a8e84..3a77504 100644 --- a/web/themes/custom/materiotheme/assets/scripts/main.js +++ b/web/themes/custom/materiotheme/assets/scripts/main.js @@ -55,16 +55,18 @@ import 'theme/assets/styles/main.scss' function checkNoVuePages(){ // return drupalDecoupled.sys_path != '/cart' // && drupalDecoupled.sys_path.indexOf('checkout') != 1; - if( drupalDecoupled.route_name.indexOf('commerce') == -1 ){ - return true; - }else{ + if( drupalDecoupled.route_name.indexOf('commerce') == -1 && + drupalDecoupled.route_name.indexOf('flagging_collection') == -1 && + drupalDecoupled.route_name.indexOf('user') == -1){ return false; + }else{ + return true; } } function initVues(){ // only launch views if we are not in commerce pages - if(checkNoVuePages()){ + if(!checkNoVuePages()){ initVRouter(); initVSiteBrandingBlock() initVPagetitleBlock() diff --git a/web/themes/custom/materiotheme/vuejs/components/User/UserFlags.vue b/web/themes/custom/materiotheme/vuejs/components/User/UserFlags.vue new file mode 100644 index 0000000..31d1f34 --- /dev/null +++ b/web/themes/custom/materiotheme/vuejs/components/User/UserFlags.vue @@ -0,0 +1,47 @@ + + + + + diff --git a/web/themes/custom/materiotheme/vuejs/components/User/UserTools.vue b/web/themes/custom/materiotheme/vuejs/components/User/UserTools.vue index 4b50142..3d27d3f 100644 --- a/web/themes/custom/materiotheme/vuejs/components/User/UserTools.vue +++ b/web/themes/custom/materiotheme/vuejs/components/User/UserTools.vue @@ -13,13 +13,19 @@ class="mdi mdi-logout" title="logout" > +