-
-
-
'
+ filter_html_help: false
+ filter_html_nofollow: false
+ filter_align:
+ id: filter_align
+ provider: filter
+ status: true
+ weight: 7
+ settings: { }
+ filter_caption:
+ id: filter_caption
+ provider: filter
+ status: true
+ weight: 8
+ settings: { }
+ filter_html_image_secure:
+ id: filter_html_image_secure
+ provider: filter
+ status: true
+ weight: 9
+ settings: { }
+ editor_file_reference:
+ id: editor_file_reference
+ provider: editor
+ status: true
+ weight: 11
+ settings: { }
diff --git a/config/sync/filter.format.full_html.yml b/config/sync/filter.format.full_html.yml
new file mode 100644
index 00000000..49b889bc
--- /dev/null
+++ b/config/sync/filter.format.full_html.yml
@@ -0,0 +1,36 @@
+uuid: cc99508a-5cb0-4999-b9a5-000253bcb794
+langcode: en
+status: true
+dependencies:
+ module:
+ - editor
+_core:
+ default_config_hash: hewPmBgni9jlDK_IjLxUx1HsTbinK-hdl0lOwjbteIY
+name: 'Full HTML'
+format: full_html
+weight: 1
+filters:
+ filter_align:
+ id: filter_align
+ provider: filter
+ status: true
+ weight: 8
+ settings: { }
+ filter_caption:
+ id: filter_caption
+ provider: filter
+ status: true
+ weight: 9
+ settings: { }
+ filter_htmlcorrector:
+ id: filter_htmlcorrector
+ provider: filter
+ status: true
+ weight: 10
+ settings: { }
+ editor_file_reference:
+ id: editor_file_reference
+ provider: editor
+ status: true
+ weight: 11
+ settings: { }
diff --git a/config/sync/filter.format.plain_text.yml b/config/sync/filter.format.plain_text.yml
new file mode 100644
index 00000000..1c19685b
--- /dev/null
+++ b/config/sync/filter.format.plain_text.yml
@@ -0,0 +1,29 @@
+uuid: e00ef9c4-c41e-47e5-ae02-e3067db3865e
+langcode: en
+status: true
+dependencies: { }
+_core:
+ default_config_hash: NIKBt6kw_uPhNI0qtR2DnRf7mSOgAQdx7Q94SKMjXbQ
+name: 'Plain text'
+format: plain_text
+weight: 10
+filters:
+ filter_html_escape:
+ id: filter_html_escape
+ provider: filter
+ status: true
+ weight: -10
+ settings: { }
+ filter_url:
+ id: filter_url
+ provider: filter
+ status: true
+ weight: 0
+ settings:
+ filter_url_length: 72
+ filter_autop:
+ id: filter_autop
+ provider: filter
+ status: true
+ weight: 0
+ settings: { }
diff --git a/config/sync/filter.format.restricted_html.yml b/config/sync/filter.format.restricted_html.yml
new file mode 100644
index 00000000..bfcdb08a
--- /dev/null
+++ b/config/sync/filter.format.restricted_html.yml
@@ -0,0 +1,32 @@
+uuid: 4de4d100-9c6e-4c1e-8216-fbf6d9eae1dc
+langcode: en
+status: true
+dependencies: { }
+_core:
+ default_config_hash: KUjJ8Ti_ZJSlhGM88E_mhJP-8mmQRNUB6RFof615Kt0
+name: 'Restricted HTML'
+format: restricted_html
+weight: 0
+filters:
+ filter_html:
+ id: filter_html
+ provider: filter
+ status: true
+ weight: -10
+ settings:
+ allowed_html: ' -
-
-
'
+ filter_html_help: true
+ filter_html_nofollow: false
+ filter_autop:
+ id: filter_autop
+ provider: filter
+ status: true
+ weight: 0
+ settings: { }
+ filter_url:
+ id: filter_url
+ provider: filter
+ status: true
+ weight: 0
+ settings:
+ filter_url_length: 72
diff --git a/config/sync/filter.settings.yml b/config/sync/filter.settings.yml
new file mode 100644
index 00000000..dfcfed36
--- /dev/null
+++ b/config/sync/filter.settings.yml
@@ -0,0 +1,4 @@
+fallback_format: plain_text
+always_show_fallback_choice: false
+_core:
+ default_config_hash: FiPjM3WdB__ruFA7B6TLwni_UcZbmek5G4b2dxQItxA
diff --git a/config/sync/image.settings.yml b/config/sync/image.settings.yml
new file mode 100644
index 00000000..52ee4a8f
--- /dev/null
+++ b/config/sync/image.settings.yml
@@ -0,0 +1,5 @@
+preview_image: core/modules/image/sample.png
+allow_insecure_derivatives: false
+suppress_itok_output: false
+_core:
+ default_config_hash: k-yDFHbqNfpe-Srg4sdCSqaosCl2D8uwyEY5esF8gEw
diff --git a/config/sync/image.style.large.yml b/config/sync/image.style.large.yml
new file mode 100644
index 00000000..f60f8969
--- /dev/null
+++ b/config/sync/image.style.large.yml
@@ -0,0 +1,17 @@
+uuid: 0bc31b7d-7bf9-4234-8c35-0352460847e8
+langcode: en
+status: true
+dependencies: { }
+_core:
+ default_config_hash: J2n0RpFzS0-bgSyxjs6rSdgxB1rb-bTAgqywNx_964M
+name: large
+label: 'Large (480×480)'
+effects:
+ ddd73aa7-4bd6-4c85-b600-bdf2b1628d1d:
+ uuid: ddd73aa7-4bd6-4c85-b600-bdf2b1628d1d
+ id: image_scale
+ weight: 0
+ data:
+ width: 480
+ height: 480
+ upscale: false
diff --git a/config/sync/image.style.medium.yml b/config/sync/image.style.medium.yml
new file mode 100644
index 00000000..f55da121
--- /dev/null
+++ b/config/sync/image.style.medium.yml
@@ -0,0 +1,17 @@
+uuid: 97e4a920-9c00-4a46-98fb-8255b19ae00f
+langcode: en
+status: true
+dependencies: { }
+_core:
+ default_config_hash: Y9NmnZHQq20ASSyTNA6JnwtWrJJiSajOehGDtmUFdM0
+name: medium
+label: 'Medium (220×220)'
+effects:
+ bddf0d06-42f9-4c75-a700-a33cafa25ea0:
+ uuid: bddf0d06-42f9-4c75-a700-a33cafa25ea0
+ id: image_scale
+ weight: 0
+ data:
+ width: 220
+ height: 220
+ upscale: false
diff --git a/config/sync/image.style.thumbnail.yml b/config/sync/image.style.thumbnail.yml
new file mode 100644
index 00000000..2c7b8c0f
--- /dev/null
+++ b/config/sync/image.style.thumbnail.yml
@@ -0,0 +1,17 @@
+uuid: b5d3cafc-4b41-4388-b798-4cebece83ccd
+langcode: en
+status: true
+dependencies: { }
+_core:
+ default_config_hash: cCiWdBHgLwj5omG35lsKc4LkW4MBdmcctkVop4ol5x0
+name: thumbnail
+label: 'Thumbnail (100×100)'
+effects:
+ 1cfec298-8620-4749-b100-ccb6c4500779:
+ uuid: 1cfec298-8620-4749-b100-ccb6c4500779
+ id: image_scale
+ weight: 0
+ data:
+ width: 100
+ height: 100
+ upscale: false
diff --git a/config/sync/menu_ui.settings.yml b/config/sync/menu_ui.settings.yml
new file mode 100644
index 00000000..c9fe099e
--- /dev/null
+++ b/config/sync/menu_ui.settings.yml
@@ -0,0 +1,3 @@
+override_parent_selector: false
+_core:
+ default_config_hash: SqMarzIjxC3F8dZo9FEOxfqDKD_sdW1tbcFTV1BA2zU
diff --git a/config/sync/node.settings.yml b/config/sync/node.settings.yml
new file mode 100644
index 00000000..1657c1cb
--- /dev/null
+++ b/config/sync/node.settings.yml
@@ -0,0 +1,3 @@
+use_admin_theme: true
+_core:
+ default_config_hash: 2OMXCScXUOLSYID9-phjO4q36nnnaMWNUlDxEqZzG1U
diff --git a/config/sync/node.type.article.yml b/config/sync/node.type.article.yml
new file mode 100644
index 00000000..f96a1dc6
--- /dev/null
+++ b/config/sync/node.type.article.yml
@@ -0,0 +1,13 @@
+uuid: 8622aec7-077a-4e9e-a83b-75d09430975f
+langcode: en
+status: true
+dependencies: { }
+_core:
+ default_config_hash: AeW1SEDgb1OTQACAWGhzvMknMYAJlcZu0jljfeU3oso
+name: Article
+type: article
+description: 'Use articles for time-sensitive content like news, press releases or blog posts.'
+help: ''
+new_revision: true
+preview_mode: 1
+display_submitted: true
diff --git a/config/sync/node.type.blog.yml b/config/sync/node.type.blog.yml
new file mode 100644
index 00000000..406f8ee0
--- /dev/null
+++ b/config/sync/node.type.blog.yml
@@ -0,0 +1,18 @@
+uuid: a8b13a93-e1a1-4f80-a249-b914e24f3837
+langcode: en
+status: true
+dependencies:
+ module:
+ - menu_ui
+third_party_settings:
+ menu_ui:
+ available_menus:
+ - main
+ parent: 'main:'
+name: Blog
+type: blog
+description: ''
+help: ''
+new_revision: true
+preview_mode: 1
+display_submitted: true
diff --git a/config/sync/node.type.page.yml b/config/sync/node.type.page.yml
new file mode 100644
index 00000000..ac4cb584
--- /dev/null
+++ b/config/sync/node.type.page.yml
@@ -0,0 +1,13 @@
+uuid: 41e74327-6141-45e3-930b-e8ce0fbed50a
+langcode: en
+status: true
+dependencies: { }
+_core:
+ default_config_hash: KuyA4NHPXcmKAjRtwa0vQc2ZcyrUJy6IlS2TAyMNRbc
+name: 'Basic page'
+type: page
+description: 'Use basic pages for your static content, such as an ''About us'' page.'
+help: ''
+new_revision: true
+preview_mode: 1
+display_submitted: false
diff --git a/config/sync/node.type.portfolio.yml b/config/sync/node.type.portfolio.yml
new file mode 100644
index 00000000..c11a86cf
--- /dev/null
+++ b/config/sync/node.type.portfolio.yml
@@ -0,0 +1,18 @@
+uuid: 00a187e7-cf09-4d0f-95f1-d9d19adc621b
+langcode: en
+status: true
+dependencies:
+ module:
+ - menu_ui
+third_party_settings:
+ menu_ui:
+ available_menus:
+ - main
+ parent: 'main:'
+name: Portfolio
+type: portfolio
+description: ''
+help: ''
+new_revision: true
+preview_mode: 1
+display_submitted: true
diff --git a/config/sync/node.type.reference.yml b/config/sync/node.type.reference.yml
new file mode 100644
index 00000000..7fd76709
--- /dev/null
+++ b/config/sync/node.type.reference.yml
@@ -0,0 +1,18 @@
+uuid: d3b5a560-0b60-42b9-9dcc-ded4fc6ee559
+langcode: en
+status: true
+dependencies:
+ module:
+ - menu_ui
+third_party_settings:
+ menu_ui:
+ available_menus:
+ - main
+ parent: 'main:'
+name: Reference
+type: reference
+description: 'This is my reference page.'
+help: ''
+new_revision: true
+preview_mode: 1
+display_submitted: true
diff --git a/config/sync/page_manager.page.homepage.yml b/config/sync/page_manager.page.homepage.yml
new file mode 100644
index 00000000..48689a3c
--- /dev/null
+++ b/config/sync/page_manager.page.homepage.yml
@@ -0,0 +1,12 @@
+uuid: 64114cc7-c5e8-45ac-9723-3082c4984599
+langcode: en
+status: true
+dependencies: { }
+id: homepage
+label: Homepage
+description: ''
+use_admin_theme: false
+path: /home
+access_logic: and
+access_conditions: { }
+parameters: { }
diff --git a/config/sync/page_manager.page.node_view.yml b/config/sync/page_manager.page.node_view.yml
new file mode 100644
index 00000000..decbf42a
--- /dev/null
+++ b/config/sync/page_manager.page.node_view.yml
@@ -0,0 +1,18 @@
+uuid: 65bdc145-cd71-4bab-b331-ec505ef5e095
+langcode: en
+status: true
+dependencies: { }
+_core:
+ default_config_hash: RCVWP-yHwxSNiQORMIabDgHMEVqOMW58w80BQgRFJ4k
+id: node_view
+label: 'Node view'
+description: 'When enabled, this overrides the default Drupal behavior for displaying nodes at /node/{node}. If you add variants, you may use selection criteria such as node type or language or user access to provide different views of nodes. If no variant is selected, the default Drupal node view will be used. This page only affects nodes viewed as pages, it will not affect nodes viewed in lists or at other locations.'
+use_admin_theme: false
+path: '/node/{node}'
+access_logic: and
+access_conditions: { }
+parameters:
+ node:
+ machine_name: node
+ type: 'entity:node'
+ label: Node
diff --git a/config/sync/page_manager.page_variant.homepage-panels_variant-0.yml b/config/sync/page_manager.page_variant.homepage-panels_variant-0.yml
new file mode 100644
index 00000000..86106230
--- /dev/null
+++ b/config/sync/page_manager.page_variant.homepage-panels_variant-0.yml
@@ -0,0 +1,41 @@
+uuid: 78798d36-aa16-4850-bc0b-cbbba2993784
+langcode: en
+status: true
+dependencies:
+ config:
+ - page_manager.page.homepage
+ - views.view.view_portfolio
+ module:
+ - panels
+ - views
+id: homepage-panels_variant-0
+label: Home
+variant: panels_variant
+variant_settings:
+ blocks:
+ 5ac8d0b7-724a-4da6-adf8-d5c787c901b9:
+ id: 'views_block:view_portfolio-block_1'
+ label: ''
+ provider: views
+ label_display: visible
+ views_label: ''
+ items_per_page: none
+ region: content
+ weight: 0
+ uuid: 5ac8d0b7-724a-4da6-adf8-d5c787c901b9
+ context_mapping: { }
+ id: panels_variant
+ uuid: b36bbf5c-dfb2-4366-8225-79da7c59064c
+ label: null
+ weight: 0
+ layout: layout_onecol
+ layout_settings: { }
+ page_title: null
+ storage_type: page_manager
+ storage_id: homepage-panels_variant-0
+ builder: standard
+page: homepage
+weight: 0
+selection_criteria: { }
+selection_logic: and
+static_context: { }
diff --git a/config/sync/proj_me_theme.settings.yml b/config/sync/proj_me_theme.settings.yml
new file mode 100644
index 00000000..24efd88e
--- /dev/null
+++ b/config/sync/proj_me_theme.settings.yml
@@ -0,0 +1,24 @@
+cdn_provider: ''
+_core:
+ default_config_hash: _5qrDuRmWmRVjW00si3U1s1NrgrocA4N653EYGRfgEE
+favicon:
+ mimetype: image/vnd.microsoft.icon
+ path: ''
+ url: 'http://dev-1.academyvm.dev/proj-me/web/themes/custom/proj_me_theme/favicon.ico'
+ use_default: 1
+schemas:
+ bootstrap: 8000
+ proj_me_theme: 8000
+features:
+ comment_user_picture: 1
+ comment_user_verification: 1
+ favicon: 1
+ node_user_picture: 1
+logo:
+ path: ''
+ url: ''
+ use_default: 1
+table_responsive: '-1'
+table: ''
+proj_me_header:
+ - '13'
diff --git a/config/sync/rdf.mapping.comment.comment.yml b/config/sync/rdf.mapping.comment.comment.yml
new file mode 100644
index 00000000..290b49ba
--- /dev/null
+++ b/config/sync/rdf.mapping.comment.comment.yml
@@ -0,0 +1,36 @@
+uuid: 17d4de10-66a1-4bd7-a933-7536e9461bfa
+langcode: en
+status: true
+dependencies:
+ config:
+ - comment.type.comment
+ module:
+ - comment
+_core:
+ default_config_hash: uETe6XupRGKDForx2MpY0pMOEu6CzGgdCAZZOKkbgmk
+id: comment.comment
+targetEntityType: comment
+bundle: comment
+types:
+ - 'schema:Comment'
+fieldMappings:
+ subject:
+ properties:
+ - 'schema:name'
+ created:
+ properties:
+ - 'schema:dateCreated'
+ datatype_callback:
+ callable: 'Drupal\rdf\CommonDataConverter::dateIso8601Value'
+ changed:
+ properties:
+ - 'schema:dateModified'
+ datatype_callback:
+ callable: 'Drupal\rdf\CommonDataConverter::dateIso8601Value'
+ comment_body:
+ properties:
+ - 'schema:text'
+ uid:
+ properties:
+ - 'schema:author'
+ mapping_type: rel
diff --git a/config/sync/rdf.mapping.node.article.yml b/config/sync/rdf.mapping.node.article.yml
new file mode 100644
index 00000000..38388f1b
--- /dev/null
+++ b/config/sync/rdf.mapping.node.article.yml
@@ -0,0 +1,52 @@
+uuid: e0abe5bc-df30-4181-82e5-ea0a27777436
+langcode: en
+status: true
+dependencies:
+ config:
+ - node.type.article
+ module:
+ - node
+_core:
+ default_config_hash: IdobJe379eDudt7-bXFfJjF7pDqFl-kYxVFtpWrgkro
+id: node.article
+targetEntityType: node
+bundle: article
+types:
+ - 'schema:Article'
+fieldMappings:
+ title:
+ properties:
+ - 'schema:name'
+ created:
+ properties:
+ - 'schema:dateCreated'
+ datatype_callback:
+ callable: 'Drupal\rdf\CommonDataConverter::dateIso8601Value'
+ changed:
+ properties:
+ - 'schema:dateModified'
+ datatype_callback:
+ callable: 'Drupal\rdf\CommonDataConverter::dateIso8601Value'
+ body:
+ properties:
+ - 'schema:text'
+ uid:
+ properties:
+ - 'schema:author'
+ comment:
+ properties:
+ - 'schema:comment'
+ mapping_type: rel
+ comment_count:
+ properties:
+ - 'schema:interactionCount'
+ datatype_callback:
+ callable: 'Drupal\rdf\SchemaOrgDataConverter::interactionCount'
+ arguments:
+ interaction_type: UserComments
+ field_image:
+ properties:
+ - 'schema:image'
+ field_tags:
+ properties:
+ - 'schema:about'
diff --git a/config/sync/rdf.mapping.node.page.yml b/config/sync/rdf.mapping.node.page.yml
new file mode 100644
index 00000000..91a6b64d
--- /dev/null
+++ b/config/sync/rdf.mapping.node.page.yml
@@ -0,0 +1,43 @@
+uuid: ec265ae9-7cc7-4272-aae0-5248b2358145
+langcode: en
+status: true
+dependencies:
+ config:
+ - node.type.page
+ module:
+ - node
+_core:
+ default_config_hash: 32LxRnl4Wesvzqyfp7HnD0-U9-wxrLBn76pqY5XGNAE
+id: node.page
+targetEntityType: node
+bundle: page
+types:
+ - 'schema:WebPage'
+fieldMappings:
+ title:
+ properties:
+ - 'schema:name'
+ created:
+ properties:
+ - 'schema:dateCreated'
+ datatype_callback:
+ callable: 'Drupal\rdf\CommonDataConverter::dateIso8601Value'
+ changed:
+ properties:
+ - 'schema:dateModified'
+ datatype_callback:
+ callable: 'Drupal\rdf\CommonDataConverter::dateIso8601Value'
+ body:
+ properties:
+ - 'schema:text'
+ uid:
+ properties:
+ - 'schema:author'
+ mapping_type: rel
+ comment_count:
+ properties:
+ - 'schema:interactionCount'
+ datatype_callback:
+ callable: 'Drupal\rdf\SchemaOrgDataConverter::interactionCount'
+ arguments:
+ interaction_type: UserComments
diff --git a/config/sync/rdf.mapping.taxonomy_term.tags.yml b/config/sync/rdf.mapping.taxonomy_term.tags.yml
new file mode 100644
index 00000000..bafc5408
--- /dev/null
+++ b/config/sync/rdf.mapping.taxonomy_term.tags.yml
@@ -0,0 +1,22 @@
+uuid: 4247591d-da72-43fa-9e5c-87254d0a9db9
+langcode: en
+status: true
+dependencies:
+ config:
+ - taxonomy.vocabulary.tags
+ module:
+ - taxonomy
+_core:
+ default_config_hash: o5duwyS1CTHx3tYOZhuu91kspe8VQjQsnwZjAJv9njk
+id: taxonomy_term.tags
+targetEntityType: taxonomy_term
+bundle: tags
+types:
+ - 'schema:Thing'
+fieldMappings:
+ name:
+ properties:
+ - 'schema:name'
+ description:
+ properties:
+ - 'schema:description'
diff --git a/config/sync/rdf.mapping.user.user.yml b/config/sync/rdf.mapping.user.user.yml
new file mode 100644
index 00000000..f1aeb65e
--- /dev/null
+++ b/config/sync/rdf.mapping.user.user.yml
@@ -0,0 +1,17 @@
+uuid: e6457c96-0fbb-4016-b535-70db303c039e
+langcode: en
+status: true
+dependencies:
+ module:
+ - user
+_core:
+ default_config_hash: TGTlmpYAtXxjtYMFA_A0vosE2c4R5MCQwLviIA5HUM0
+id: user.user
+targetEntityType: user
+bundle: user
+types:
+ - 'schema:Person'
+fieldMappings:
+ name:
+ properties:
+ - 'schema:name'
diff --git a/config/sync/search.page.node_search.yml b/config/sync/search.page.node_search.yml
new file mode 100644
index 00000000..aa2aef61
--- /dev/null
+++ b/config/sync/search.page.node_search.yml
@@ -0,0 +1,15 @@
+uuid: c8b6c7ec-f629-4906-9838-765de2073c20
+langcode: en
+status: true
+dependencies:
+ module:
+ - node
+_core:
+ default_config_hash: 97tvtzGOa8_flb22CzSjgtm_YkiGMHvEBO-6q2K9V_U
+id: node_search
+label: Content
+path: node
+weight: -10
+plugin: node_search
+configuration:
+ rankings: { }
diff --git a/config/sync/search.page.user_search.yml b/config/sync/search.page.user_search.yml
new file mode 100644
index 00000000..b4720f70
--- /dev/null
+++ b/config/sync/search.page.user_search.yml
@@ -0,0 +1,14 @@
+uuid: cec6d6cf-4167-4b13-a2ad-2c4a89eaaf5e
+langcode: en
+status: true
+dependencies:
+ module:
+ - user
+_core:
+ default_config_hash: k3aUaZXGDuhkek2TZIee0PApOPTvYZLadziekdyHA5A
+id: user_search
+label: Users
+path: user
+weight: 0
+plugin: user_search
+configuration: { }
diff --git a/config/sync/search.settings.yml b/config/sync/search.settings.yml
new file mode 100644
index 00000000..8d3840db
--- /dev/null
+++ b/config/sync/search.settings.yml
@@ -0,0 +1,21 @@
+and_or_limit: 7
+index:
+ cron_limit: 100
+ overlap_cjk: true
+ minimum_word_size: 3
+ tag_weights:
+ h1: 25
+ h2: 18
+ h3: 15
+ h4: 14
+ h5: 9
+ h6: 6
+ u: 3
+ b: 3
+ i: 3
+ strong: 3
+ em: 3
+ a: 10
+logging: false
+_core:
+ default_config_hash: hvVxL1G-ZCxaq32IZws0YsfuhvaDiQE_np-0g35KjUk
diff --git a/config/sync/seven.settings.yml b/config/sync/seven.settings.yml
new file mode 100644
index 00000000..6bba58bc
--- /dev/null
+++ b/config/sync/seven.settings.yml
@@ -0,0 +1,3 @@
+third_party_settings:
+ shortcut:
+ module_link: true
diff --git a/config/sync/shortcut.set.default.yml b/config/sync/shortcut.set.default.yml
new file mode 100644
index 00000000..4e837c0d
--- /dev/null
+++ b/config/sync/shortcut.set.default.yml
@@ -0,0 +1,8 @@
+uuid: 9e326524-f34f-42cb-8bef-a1b9565effa6
+langcode: en
+status: true
+dependencies: { }
+_core:
+ default_config_hash: U5VlGjd_SfV0Qm_EfnaynOfc549cNscFAx48JfYoMRI
+id: default
+label: Default
diff --git a/config/sync/system.action.comment_publish_action.yml b/config/sync/system.action.comment_publish_action.yml
new file mode 100644
index 00000000..eef8ea88
--- /dev/null
+++ b/config/sync/system.action.comment_publish_action.yml
@@ -0,0 +1,13 @@
+uuid: b903bbb4-282d-4685-ad14-132cef09bd4a
+langcode: en
+status: true
+dependencies:
+ module:
+ - comment
+_core:
+ default_config_hash: f6w_Pd30AyyDIoMkD4QpPMM2-I8FTEHICchFVOpjiCI
+id: comment_publish_action
+label: 'Publish comment'
+type: comment
+plugin: comment_publish_action
+configuration: { }
diff --git a/config/sync/system.action.comment_save_action.yml b/config/sync/system.action.comment_save_action.yml
new file mode 100644
index 00000000..48feefad
--- /dev/null
+++ b/config/sync/system.action.comment_save_action.yml
@@ -0,0 +1,13 @@
+uuid: 46e9b6fc-8964-47ee-bc7d-7283d792076e
+langcode: en
+status: true
+dependencies:
+ module:
+ - comment
+_core:
+ default_config_hash: TSkg_gUZvk-39yXFrIFnKjsxuEzO0qBH82TdDxOMMr4
+id: comment_save_action
+label: 'Save comment'
+type: comment
+plugin: comment_save_action
+configuration: { }
diff --git a/config/sync/system.action.comment_unpublish_action.yml b/config/sync/system.action.comment_unpublish_action.yml
new file mode 100644
index 00000000..83f836c5
--- /dev/null
+++ b/config/sync/system.action.comment_unpublish_action.yml
@@ -0,0 +1,13 @@
+uuid: c4f8a055-60c0-482a-a207-380b720c567b
+langcode: en
+status: true
+dependencies:
+ module:
+ - comment
+_core:
+ default_config_hash: MLin6S_PsJ7Oo480DxS46D46IM8tqFkkWOLyH7TGByI
+id: comment_unpublish_action
+label: 'Unpublish comment'
+type: comment
+plugin: comment_unpublish_action
+configuration: { }
diff --git a/config/sync/system.action.node_delete_action.yml b/config/sync/system.action.node_delete_action.yml
new file mode 100644
index 00000000..4ab3c7bf
--- /dev/null
+++ b/config/sync/system.action.node_delete_action.yml
@@ -0,0 +1,13 @@
+uuid: f602e5b0-bc74-4c7d-a106-de57fe4f8040
+langcode: en
+status: true
+dependencies:
+ module:
+ - node
+_core:
+ default_config_hash: Zx0jD1Klh5tZaGJy8uOeR_2MCu9FDM4xg7TaUJUEbkI
+id: node_delete_action
+label: 'Delete content'
+type: node
+plugin: node_delete_action
+configuration: { }
diff --git a/config/sync/system.action.node_make_sticky_action.yml b/config/sync/system.action.node_make_sticky_action.yml
new file mode 100644
index 00000000..60c67cbe
--- /dev/null
+++ b/config/sync/system.action.node_make_sticky_action.yml
@@ -0,0 +1,13 @@
+uuid: c3fc7bb5-be16-44f0-872c-7a9d85afb263
+langcode: en
+status: true
+dependencies:
+ module:
+ - node
+_core:
+ default_config_hash: sOb26JSy3fGpWkvR0WYN6_hMqj_6d1rvbvrkzp1yya0
+id: node_make_sticky_action
+label: 'Make content sticky'
+type: node
+plugin: node_make_sticky_action
+configuration: { }
diff --git a/config/sync/system.action.node_make_unsticky_action.yml b/config/sync/system.action.node_make_unsticky_action.yml
new file mode 100644
index 00000000..838423a0
--- /dev/null
+++ b/config/sync/system.action.node_make_unsticky_action.yml
@@ -0,0 +1,13 @@
+uuid: 1dd8eb37-c681-480d-a017-f0bec7a6733e
+langcode: en
+status: true
+dependencies:
+ module:
+ - node
+_core:
+ default_config_hash: lDM9mvIGAu8Sw8rt-uCO4Sr7yX5VPrDPxYcawkbKd6k
+id: node_make_unsticky_action
+label: 'Make content unsticky'
+type: node
+plugin: node_make_unsticky_action
+configuration: { }
diff --git a/config/sync/system.action.node_promote_action.yml b/config/sync/system.action.node_promote_action.yml
new file mode 100644
index 00000000..6863821a
--- /dev/null
+++ b/config/sync/system.action.node_promote_action.yml
@@ -0,0 +1,13 @@
+uuid: cb5aeba3-9d22-45aa-a162-f4f900a7553a
+langcode: en
+status: true
+dependencies:
+ module:
+ - node
+_core:
+ default_config_hash: N0RDBTqiK4dKoN4p4oW2j0SGWycdHyALUe9M-Ofp89U
+id: node_promote_action
+label: 'Promote content to front page'
+type: node
+plugin: node_promote_action
+configuration: { }
diff --git a/config/sync/system.action.node_publish_action.yml b/config/sync/system.action.node_publish_action.yml
new file mode 100644
index 00000000..b79e7740
--- /dev/null
+++ b/config/sync/system.action.node_publish_action.yml
@@ -0,0 +1,13 @@
+uuid: 55b7c8d8-966c-44d7-b4dd-f638c1b5b91f
+langcode: en
+status: true
+dependencies:
+ module:
+ - node
+_core:
+ default_config_hash: lsQkbo4njZ-Q_oGKCPGXGWFjWF1I7QpgA6m-t9rcRoA
+id: node_publish_action
+label: 'Publish content'
+type: node
+plugin: node_publish_action
+configuration: { }
diff --git a/config/sync/system.action.node_save_action.yml b/config/sync/system.action.node_save_action.yml
new file mode 100644
index 00000000..a2c9b833
--- /dev/null
+++ b/config/sync/system.action.node_save_action.yml
@@ -0,0 +1,13 @@
+uuid: 9783f141-90a4-4b7c-a73c-89d5993c2455
+langcode: en
+status: true
+dependencies:
+ module:
+ - node
+_core:
+ default_config_hash: U9HspszLxcw6pZmRacFa6yDbbheyMN-We4fPbrWWHGg
+id: node_save_action
+label: 'Save content'
+type: node
+plugin: node_save_action
+configuration: { }
diff --git a/config/sync/system.action.node_unpromote_action.yml b/config/sync/system.action.node_unpromote_action.yml
new file mode 100644
index 00000000..66c2daad
--- /dev/null
+++ b/config/sync/system.action.node_unpromote_action.yml
@@ -0,0 +1,13 @@
+uuid: d18f40b3-3c4a-499d-802a-155e30ce005b
+langcode: en
+status: true
+dependencies:
+ module:
+ - node
+_core:
+ default_config_hash: JBptjnfuOMtsdKygklXxoOgeOCTMtQxlkymjnnj-cC0
+id: node_unpromote_action
+label: 'Remove content from front page'
+type: node
+plugin: node_unpromote_action
+configuration: { }
diff --git a/config/sync/system.action.node_unpublish_action.yml b/config/sync/system.action.node_unpublish_action.yml
new file mode 100644
index 00000000..e48e1604
--- /dev/null
+++ b/config/sync/system.action.node_unpublish_action.yml
@@ -0,0 +1,13 @@
+uuid: d428c1ce-d59c-40bf-bb3c-a9f46357e921
+langcode: en
+status: true
+dependencies:
+ module:
+ - node
+_core:
+ default_config_hash: gGQXiSspwGl0lyOS6w_HCPpvGAPDciqDNLFwWOydVtI
+id: node_unpublish_action
+label: 'Unpublish content'
+type: node
+plugin: node_unpublish_action
+configuration: { }
diff --git a/config/sync/system.action.user_add_role_action.administrator.yml b/config/sync/system.action.user_add_role_action.administrator.yml
new file mode 100644
index 00000000..b03a9bc7
--- /dev/null
+++ b/config/sync/system.action.user_add_role_action.administrator.yml
@@ -0,0 +1,14 @@
+uuid: e13a404d-df17-4dd1-9bf9-2a9018f673c1
+langcode: en
+status: true
+dependencies:
+ config:
+ - user.role.administrator
+ module:
+ - user
+id: user_add_role_action.administrator
+label: 'Add the Administrator role to the selected users'
+type: user
+plugin: user_add_role_action
+configuration:
+ rid: administrator
diff --git a/config/sync/system.action.user_block_user_action.yml b/config/sync/system.action.user_block_user_action.yml
new file mode 100644
index 00000000..e945d7c3
--- /dev/null
+++ b/config/sync/system.action.user_block_user_action.yml
@@ -0,0 +1,13 @@
+uuid: f751b01f-c4f5-4328-be88-18993c1df5fc
+langcode: en
+status: true
+dependencies:
+ module:
+ - user
+_core:
+ default_config_hash: DyypzTfThX10FFQw-399qPfEbLLyrhXgQrKPVsmAoJ4
+id: user_block_user_action
+label: 'Block the selected user(s)'
+type: user
+plugin: user_block_user_action
+configuration: { }
diff --git a/config/sync/system.action.user_cancel_user_action.yml b/config/sync/system.action.user_cancel_user_action.yml
new file mode 100644
index 00000000..71f05736
--- /dev/null
+++ b/config/sync/system.action.user_cancel_user_action.yml
@@ -0,0 +1,13 @@
+uuid: 887358c9-b556-4aa5-af88-dfeee6470706
+langcode: en
+status: true
+dependencies:
+ module:
+ - user
+_core:
+ default_config_hash: nvrL9bFilzBvm2bjO9rQnFDpBA7dBBUjShSSt6NS-DU
+id: user_cancel_user_action
+label: 'Cancel the selected user account(s)'
+type: user
+plugin: user_cancel_user_action
+configuration: { }
diff --git a/config/sync/system.action.user_remove_role_action.administrator.yml b/config/sync/system.action.user_remove_role_action.administrator.yml
new file mode 100644
index 00000000..64d45a4a
--- /dev/null
+++ b/config/sync/system.action.user_remove_role_action.administrator.yml
@@ -0,0 +1,14 @@
+uuid: 7fbb4ad2-7b2d-46fd-84b4-ff8f331cb523
+langcode: en
+status: true
+dependencies:
+ config:
+ - user.role.administrator
+ module:
+ - user
+id: user_remove_role_action.administrator
+label: 'Remove the Administrator role from the selected users'
+type: user
+plugin: user_remove_role_action
+configuration:
+ rid: administrator
diff --git a/config/sync/system.action.user_unblock_user_action.yml b/config/sync/system.action.user_unblock_user_action.yml
new file mode 100644
index 00000000..13cec5cf
--- /dev/null
+++ b/config/sync/system.action.user_unblock_user_action.yml
@@ -0,0 +1,13 @@
+uuid: db125989-9f9e-4f8c-9316-8551c033e26d
+langcode: en
+status: true
+dependencies:
+ module:
+ - user
+_core:
+ default_config_hash: SPsUXsR3Rc8d1y3gewzaAKWa1ncea_ywXX3f7LTn7k0
+id: user_unblock_user_action
+label: 'Unblock the selected user(s)'
+type: user
+plugin: user_unblock_user_action
+configuration: { }
diff --git a/config/sync/system.action.webform_submission_delete_action.yml b/config/sync/system.action.webform_submission_delete_action.yml
new file mode 100644
index 00000000..f2c45f33
--- /dev/null
+++ b/config/sync/system.action.webform_submission_delete_action.yml
@@ -0,0 +1,13 @@
+uuid: cdf4f9c5-b996-41ea-ba31-51cc329d8ce2
+langcode: en
+status: true
+dependencies:
+ module:
+ - webform
+_core:
+ default_config_hash: TBnl4vapW7sy5bRi7TcF-ueJnvz7aZNLif95ifvhfTQ
+id: webform_submission_delete_action
+label: 'Delete submission'
+type: webform_submission
+plugin: webform_submission_delete_action
+configuration: { }
diff --git a/config/sync/system.action.webform_submission_make_sticky_action.yml b/config/sync/system.action.webform_submission_make_sticky_action.yml
new file mode 100644
index 00000000..462116b1
--- /dev/null
+++ b/config/sync/system.action.webform_submission_make_sticky_action.yml
@@ -0,0 +1,13 @@
+uuid: 56e5616a-5a67-42cd-8bcc-0828e019058e
+langcode: en
+status: true
+dependencies:
+ module:
+ - webform
+_core:
+ default_config_hash: 8GSfG176mjTvczykLSKKzdI6HfM7nGnZGo54f0hRe5E
+id: webform_submission_make_sticky_action
+label: 'Star/Flag submission'
+type: webform_submission
+plugin: webform_submission_make_sticky_action
+configuration: { }
diff --git a/config/sync/system.action.webform_submission_make_unsticky_action.yml b/config/sync/system.action.webform_submission_make_unsticky_action.yml
new file mode 100644
index 00000000..a0c18350
--- /dev/null
+++ b/config/sync/system.action.webform_submission_make_unsticky_action.yml
@@ -0,0 +1,13 @@
+uuid: e545d8e6-f5d4-4533-bf51-7de323fe3185
+langcode: en
+status: true
+dependencies:
+ module:
+ - webform
+_core:
+ default_config_hash: n4gTFiUsdp7gw6yWUlDbKFEasZLCgXWWCmm7eJejay0
+id: webform_submission_make_unsticky_action
+label: 'Unstar/unflag submission'
+type: webform_submission
+plugin: webform_submission_make_unsticky_action
+configuration: { }
diff --git a/config/sync/system.authorize.yml b/config/sync/system.authorize.yml
new file mode 100644
index 00000000..c469caee
--- /dev/null
+++ b/config/sync/system.authorize.yml
@@ -0,0 +1,3 @@
+filetransfer_default: null
+_core:
+ default_config_hash: z63ds8M4zPrylEgFRkRcOlfcsXWwfITzjD4cj1kRdfg
diff --git a/config/sync/system.cron.yml b/config/sync/system.cron.yml
new file mode 100644
index 00000000..a44f232f
--- /dev/null
+++ b/config/sync/system.cron.yml
@@ -0,0 +1,5 @@
+threshold:
+ requirements_warning: 172800
+ requirements_error: 1209600
+_core:
+ default_config_hash: 05U0n1_8zHYzxEFSWjyHCWuJyhdez2a6Z_aTIXin04E
diff --git a/config/sync/system.date.yml b/config/sync/system.date.yml
new file mode 100644
index 00000000..0c3766ee
--- /dev/null
+++ b/config/sync/system.date.yml
@@ -0,0 +1,11 @@
+country:
+ default: US
+first_day: 0
+timezone:
+ default: America/New_York
+ user:
+ configurable: true
+ warn: false
+ default: 0
+_core:
+ default_config_hash: V9UurX2GPT05NWKG9f2GWQqFG2TRG8vczidwjpy7Woo
diff --git a/config/sync/system.diff.yml b/config/sync/system.diff.yml
new file mode 100644
index 00000000..c43dd916
--- /dev/null
+++ b/config/sync/system.diff.yml
@@ -0,0 +1,5 @@
+context:
+ lines_leading: 2
+ lines_trailing: 2
+_core:
+ default_config_hash: 1WanmaEhxW_vM8_5Ktsdntj8MaO9UBHXg0lN603PsWM
diff --git a/config/sync/system.file.yml b/config/sync/system.file.yml
new file mode 100644
index 00000000..39ee4cb9
--- /dev/null
+++ b/config/sync/system.file.yml
@@ -0,0 +1,7 @@
+allow_insecure_uploads: false
+default_scheme: public
+path:
+ temporary: /tmp
+temporary_maximum_age: 21600
+_core:
+ default_config_hash: t48gCU9DzYfjb3bAOIqHLzhL0ChBlXh6_5B5Pyo9t8g
diff --git a/config/sync/system.image.gd.yml b/config/sync/system.image.gd.yml
new file mode 100644
index 00000000..b676907e
--- /dev/null
+++ b/config/sync/system.image.gd.yml
@@ -0,0 +1,3 @@
+jpeg_quality: 75
+_core:
+ default_config_hash: eNXaHfkJJUThHeF0nvkoXyPLRrKYGxgHRjORvT4F5rQ
diff --git a/config/sync/system.image.yml b/config/sync/system.image.yml
new file mode 100644
index 00000000..990d3dc7
--- /dev/null
+++ b/config/sync/system.image.yml
@@ -0,0 +1,3 @@
+toolkit: gd
+_core:
+ default_config_hash: durWHaKeBaq4d9Wpi4RqwADj1OufDepcnJuhVLmKN24
diff --git a/config/sync/system.logging.yml b/config/sync/system.logging.yml
new file mode 100644
index 00000000..e95b28a4
--- /dev/null
+++ b/config/sync/system.logging.yml
@@ -0,0 +1,3 @@
+error_level: hide
+_core:
+ default_config_hash: u3-njszl92FaxjrCMiq0yDcjAfcdx72w1zT1O9dx6aA
diff --git a/config/sync/system.mail.yml b/config/sync/system.mail.yml
new file mode 100644
index 00000000..da8293ca
--- /dev/null
+++ b/config/sync/system.mail.yml
@@ -0,0 +1,5 @@
+interface:
+ default: php_mail
+ webform: webform_php_mail
+_core:
+ default_config_hash: rYgt7uhPafP2ngaN_ZUPFuyI4KdE0zU868zLNSlzKoE
diff --git a/config/sync/system.maintenance.yml b/config/sync/system.maintenance.yml
new file mode 100644
index 00000000..79501fb1
--- /dev/null
+++ b/config/sync/system.maintenance.yml
@@ -0,0 +1,4 @@
+message: '@site is currently under maintenance. We should be back shortly. Thank you for your patience.'
+langcode: en
+_core:
+ default_config_hash: Z5MXifrF77GEAgx0GQ6iWT8wStjFuY8BD9OruofWTJ8
diff --git a/config/sync/system.menu.account.yml b/config/sync/system.menu.account.yml
new file mode 100644
index 00000000..8dd07c25
--- /dev/null
+++ b/config/sync/system.menu.account.yml
@@ -0,0 +1,10 @@
+uuid: 87b74867-7fc5-4a6a-a924-f13f75d43fde
+langcode: en
+status: true
+dependencies: { }
+_core:
+ default_config_hash: M_Bh81osDyUQ4wV0GgU_NdBNqkzM87sLxjaCdFj9mnw
+id: account
+label: 'User account menu'
+description: 'Links related to the active user account'
+locked: true
diff --git a/config/sync/system.menu.admin.yml b/config/sync/system.menu.admin.yml
new file mode 100644
index 00000000..355c8816
--- /dev/null
+++ b/config/sync/system.menu.admin.yml
@@ -0,0 +1,10 @@
+uuid: 02506154-5018-44bc-b404-f1c503f85d07
+langcode: en
+status: true
+dependencies: { }
+_core:
+ default_config_hash: sapEi2YDGoI9yQIT_WgIV2vUdQ6DScH0V3fAyTadAL0
+id: admin
+label: Administration
+description: 'Administrative task links'
+locked: true
diff --git a/config/sync/system.menu.footer.yml b/config/sync/system.menu.footer.yml
new file mode 100644
index 00000000..9aea432f
--- /dev/null
+++ b/config/sync/system.menu.footer.yml
@@ -0,0 +1,10 @@
+uuid: 9a17ca3e-c5d7-40e8-b3ed-08a2596fd2d2
+langcode: en
+status: true
+dependencies: { }
+_core:
+ default_config_hash: 7yrlW5z9zdg2eBucB2GPqXKSMQfH9lSRSO4DbWF7AFc
+id: footer
+label: Footer
+description: 'Site information links'
+locked: true
diff --git a/config/sync/system.menu.main.yml b/config/sync/system.menu.main.yml
new file mode 100644
index 00000000..f78c8450
--- /dev/null
+++ b/config/sync/system.menu.main.yml
@@ -0,0 +1,10 @@
+uuid: 7a2ad3d7-307a-4e3c-9a43-269c11d74376
+langcode: en
+status: true
+dependencies: { }
+_core:
+ default_config_hash: Q2Ra3jfoIVk0f3SjxJX61byRQFVBAbpzYDQOiY-kno8
+id: main
+label: 'Main navigation'
+description: 'Site section links'
+locked: true
diff --git a/config/sync/system.menu.tools.yml b/config/sync/system.menu.tools.yml
new file mode 100644
index 00000000..7e45bc08
--- /dev/null
+++ b/config/sync/system.menu.tools.yml
@@ -0,0 +1,10 @@
+uuid: 25465afa-6690-4f60-8b5e-1297e46270f4
+langcode: en
+status: true
+dependencies: { }
+_core:
+ default_config_hash: BCM-vV1zzRaLHN18dqAR_CuGOj8AFJvTx7BKl_8Gcxc
+id: tools
+label: Tools
+description: 'User tool links, often added by modules'
+locked: true
diff --git a/config/sync/system.performance.yml b/config/sync/system.performance.yml
new file mode 100644
index 00000000..65d6e1a3
--- /dev/null
+++ b/config/sync/system.performance.yml
@@ -0,0 +1,17 @@
+cache:
+ page:
+ max_age: 0
+css:
+ preprocess: false
+ gzip: true
+fast_404:
+ enabled: true
+ paths: '/\.(?:txt|png|gif|jpe?g|css|js|ico|swf|flv|cgi|bat|pl|dll|exe|asp)$/i'
+ exclude_paths: '/\/(?:styles|imagecache)\//'
+ html: '404 Not Found Not Found
The requested URL "@path" was not found on this server.
'
+js:
+ preprocess: false
+ gzip: true
+stale_file_threshold: 2592000
+_core:
+ default_config_hash: b2cssrj-lOmATIbdehfCqfCFgVR0qCdxxWhwqa2KBVQ
diff --git a/config/sync/system.rss.yml b/config/sync/system.rss.yml
new file mode 100644
index 00000000..858f127d
--- /dev/null
+++ b/config/sync/system.rss.yml
@@ -0,0 +1,8 @@
+channel:
+ description: ''
+items:
+ limit: 10
+ view_mode: rss
+langcode: en
+_core:
+ default_config_hash: TlH7NNk46phfxu1mSUfwg1C0YqaGsUCeD4l9JQnQlDU
diff --git a/config/sync/system.site.yml b/config/sync/system.site.yml
new file mode 100644
index 00000000..f62a90a6
--- /dev/null
+++ b/config/sync/system.site.yml
@@ -0,0 +1,14 @@
+uuid: 0003034d-1229-4224-8de0-7deb6a4c2f39
+name: 'My Portfolio'
+mail: email@site.com
+slogan: ''
+page:
+ 403: ''
+ 404: ''
+ front: /home
+admin_compact_mode: false
+weight_select_max: 100
+langcode: en
+default_langcode: en
+_core:
+ default_config_hash: AyT9s8OUcclfALRE_imByOMgtZ19eOlqdF6zI3p7yqo
diff --git a/config/sync/system.theme.global.yml b/config/sync/system.theme.global.yml
new file mode 100644
index 00000000..ad3e46c6
--- /dev/null
+++ b/config/sync/system.theme.global.yml
@@ -0,0 +1,16 @@
+favicon:
+ mimetype: image/vnd.microsoft.icon
+ path: ''
+ url: ''
+ use_default: true
+features:
+ comment_user_picture: true
+ comment_user_verification: true
+ favicon: true
+ node_user_picture: true
+logo:
+ path: ''
+ url: ''
+ use_default: true
+_core:
+ default_config_hash: 9rAU4Pku7eMBQxauQqAgjzlcicFZ2As6zEa6zvTlCB8
diff --git a/config/sync/system.theme.yml b/config/sync/system.theme.yml
new file mode 100644
index 00000000..4006fba9
--- /dev/null
+++ b/config/sync/system.theme.yml
@@ -0,0 +1,4 @@
+admin: seven
+default: proj_me_theme
+_core:
+ default_config_hash: fOjer9hADYYnbCJVZMFZIIM1azTFWyg84ZkFDHfAbUg
diff --git a/config/sync/taxonomy.settings.yml b/config/sync/taxonomy.settings.yml
new file mode 100644
index 00000000..c98a316b
--- /dev/null
+++ b/config/sync/taxonomy.settings.yml
@@ -0,0 +1,5 @@
+maintain_index_table: true
+override_selector: false
+terms_per_page_admin: 100
+_core:
+ default_config_hash: zKpaWT6cJc1tVQQaTqatGELaCqU_oyRym6zTl27Yias
diff --git a/config/sync/taxonomy.vocabulary.tags.yml b/config/sync/taxonomy.vocabulary.tags.yml
new file mode 100644
index 00000000..0c5ee337
--- /dev/null
+++ b/config/sync/taxonomy.vocabulary.tags.yml
@@ -0,0 +1,11 @@
+uuid: 6da01e44-79ce-4296-b619-994cb55f1605
+langcode: en
+status: true
+dependencies: { }
+_core:
+ default_config_hash: lO5ziR5dVI1PpEeHZsSOfQ-Y7NWihSDKW8-MMf6uoms
+name: Tags
+vid: tags
+description: 'Use tags to group articles on similar topics into categories.'
+hierarchy: 0
+weight: 0
diff --git a/config/sync/taxonomy.vocabulary.technologies.yml b/config/sync/taxonomy.vocabulary.technologies.yml
new file mode 100644
index 00000000..1cb7b84e
--- /dev/null
+++ b/config/sync/taxonomy.vocabulary.technologies.yml
@@ -0,0 +1,9 @@
+uuid: 0acb8cfc-1b2a-421f-ae92-819c031733db
+langcode: en
+status: true
+dependencies: { }
+name: Technologies
+vid: technologies
+description: ''
+hierarchy: 0
+weight: 0
diff --git a/config/sync/text.settings.yml b/config/sync/text.settings.yml
new file mode 100644
index 00000000..ef751a5c
--- /dev/null
+++ b/config/sync/text.settings.yml
@@ -0,0 +1,3 @@
+default_summary_length: 600
+_core:
+ default_config_hash: Bkewb77RBOK3_aXMPsp8p87gbc03NvmC5gBLzPl7hVA
diff --git a/config/sync/tour.tour.views-ui.yml b/config/sync/tour.tour.views-ui.yml
new file mode 100644
index 00000000..dcba1205
--- /dev/null
+++ b/config/sync/tour.tour.views-ui.yml
@@ -0,0 +1,97 @@
+uuid: 8f5f30e9-9c89-40fb-83fd-289c334831b4
+langcode: en
+status: true
+dependencies:
+ module:
+ - views_ui
+_core:
+ default_config_hash: c-HMyZwgeP8H6AITDcq4hznePkd7azpe8xl_WTnx2O0
+id: views-ui
+label: 'View edit page'
+module: views_ui
+routes:
+ -
+ route_name: entity.view.edit_form
+ -
+ route_name: entity.view.edit_display_form
+tips:
+ views-main:
+ id: views-main
+ plugin: text
+ label: 'Manage view settings'
+ body: 'View or edit the configuration.'
+ weight: 1
+ views-ui-displays:
+ id: views-ui-displays
+ plugin: text
+ label: 'Displays in this view'
+ body: 'A display is a way of outputting the results, e.g., as a page or a block. A view can contain multiple displays, which are listed here. The active display is highlighted.'
+ weight: 2
+ attributes:
+ data-id: views-display-top
+ views-ui-view-admin:
+ id: views-ui-view-admin
+ plugin: text
+ label: 'View administration'
+ body: 'Perform administrative tasks, including adding a description and creating a clone. Click the drop-down button to view the available options.'
+ weight: 3
+ location: left
+ attributes:
+ data-id: views-display-extra-actions
+ views-ui-format:
+ id: views-ui-format
+ plugin: text
+ label: 'Output format'
+ body: 'Choose how to output results. E.g., choose Content to output each item completely, using your configured display settings. Or choose Fields, which allows you to output only specific fields for each result. Additional formats can be added by installing modules to extend Drupal''s base functionality.'
+ weight: 4
+ attributes:
+ data-class: views-ui-display-tab-bucket.format
+ views-ui-fields:
+ id: views-ui-fields
+ plugin: text
+ label: Fields
+ body: 'If this view uses fields, they are listed here. You can click on a field to configure it.'
+ weight: 5
+ attributes:
+ data-class: views-ui-display-tab-bucket.field
+ views-ui-filter:
+ id: views-ui-filter
+ plugin: text
+ label: 'Filter your view'
+ body: 'Add filters to limit the results in the output. E.g., to only show content that is published, you would add a filter for Published and select Yes.'
+ weight: 6
+ attributes:
+ data-class: views-ui-display-tab-bucket.filter
+ views-ui-filter-operations:
+ id: views-ui-filter-operations
+ plugin: text
+ label: 'Filter actions'
+ body: 'Add, rearrange or remove filters.'
+ weight: 7
+ attributes:
+ data-class: 'views-ui-display-tab-bucket.filter .dropbutton-widget'
+ views-ui-sorts:
+ id: views-ui-sorts
+ plugin: text
+ label: 'Sort Criteria'
+ body: 'Control the order in which the results are output. Click on an active sort rule to configure it.'
+ weight: 8
+ attributes:
+ data-class: views-ui-display-tab-bucket.sort
+ views-ui-sorts-operations:
+ id: views-ui-sorts-operations
+ plugin: text
+ label: 'Sort actions'
+ body: 'Add, rearrange or remove sorting rules.'
+ weight: 9
+ attributes:
+ data-class: 'views-ui-display-tab-bucket.sort .dropbutton-widget'
+ views-ui-preview:
+ id: views-ui-preview
+ plugin: text
+ label: Preview
+ body: 'Show a preview of the view output.'
+ weight: 10
+ location: left
+ attributes:
+ data-id: preview-submit
diff --git a/config/sync/update.settings.yml b/config/sync/update.settings.yml
new file mode 100644
index 00000000..f38b367b
--- /dev/null
+++ b/config/sync/update.settings.yml
@@ -0,0 +1,13 @@
+check:
+ disabled_extensions: false
+ interval_days: 1
+fetch:
+ url: ''
+ max_attempts: 2
+ timeout: 30
+notification:
+ emails:
+ - mysheikh08@gmail.com
+ threshold: all
+_core:
+ default_config_hash: 2QzULf0zovJQx3J06Y9rufzzfi-CY2CTTlEfJJh2Qyw
diff --git a/config/sync/user.flood.yml b/config/sync/user.flood.yml
new file mode 100644
index 00000000..f165c952
--- /dev/null
+++ b/config/sync/user.flood.yml
@@ -0,0 +1,7 @@
+uid_only: false
+ip_limit: 50
+ip_window: 3600
+user_limit: 5
+user_window: 21600
+_core:
+ default_config_hash: UYfMzeP1S8jKm9PSvxf7nQNe8DsNS-3bc2WSNNXBQWs
diff --git a/config/sync/user.mail.yml b/config/sync/user.mail.yml
new file mode 100644
index 00000000..91808449
--- /dev/null
+++ b/config/sync/user.mail.yml
@@ -0,0 +1,30 @@
+cancel_confirm:
+ body: "[user:display-name],\n\nA request to cancel your account has been made at [site:name].\n\nYou may now cancel your account on [site:url-brief] by clicking this link or copying and pasting it into your browser:\n\n[user:cancel-url]\n\nNOTE: The cancellation of your account is not reversible.\n\nThis link expires in one day and nothing will happen if it is not used.\n\n-- [site:name] team"
+ subject: 'Account cancellation request for [user:display-name] at [site:name]'
+password_reset:
+ body: "[user:display-name],\n\nA request to reset the password for your account has been made at [site:name].\n\nYou may now log in by clicking this link or copying and pasting it into your browser:\n\n[user:one-time-login-url]\n\nThis link can only be used once to log in and will lead you to a page where you can set your password. It expires after one day and nothing will happen if it's not used.\n\n-- [site:name] team"
+ subject: 'Replacement login information for [user:display-name] at [site:name]'
+register_admin_created:
+ body: "[user:display-name],\n\nA site administrator at [site:name] has created an account for you. You may now log in by clicking this link or copying and pasting it into your browser:\n\n[user:one-time-login-url]\n\nThis link can only be used once to log in and will lead you to a page where you can set your password.\n\nAfter setting your password, you will be able to log in at [site:login-url] in the future using:\n\nusername: [user:name]\npassword: Your password\n\n-- [site:name] team"
+ subject: 'An administrator created an account for you at [site:name]'
+register_no_approval_required:
+ body: "[user:display-name],\n\nThank you for registering at [site:name]. You may now log in by clicking this link or copying and pasting it into your browser:\n\n[user:one-time-login-url]\n\nThis link can only be used once to log in and will lead you to a page where you can set your password.\n\nAfter setting your password, you will be able to log in at [site:login-url] in the future using:\n\nusername: [user:name]\npassword: Your password\n\n-- [site:name] team"
+ subject: 'Account details for [user:display-name] at [site:name]'
+register_pending_approval:
+ body: "[user:display-name],\n\nThank you for registering at [site:name]. Your application for an account is currently pending approval. Once it has been approved, you will receive another email containing information about how to log in, set your password, and other details.\n\n\n-- [site:name] team"
+ subject: 'Account details for [user:display-name] at [site:name] (pending admin approval)'
+register_pending_approval_admin:
+ body: "[user:display-name] has applied for an account.\n\n[user:edit-url]"
+ subject: 'Account details for [user:display-name] at [site:name] (pending admin approval)'
+status_activated:
+ body: "[user:display-name],\n\nYour account at [site:name] has been activated.\n\nYou may now log in by clicking this link or copying and pasting it into your browser:\n\n[user:one-time-login-url]\n\nThis link can only be used once to log in and will lead you to a page where you can set your password.\n\nAfter setting your password, you will be able to log in at [site:login-url] in the future using:\n\nusername: [user:account-name]\npassword: Your password\n\n-- [site:name] team"
+ subject: 'Account details for [user:display-name] at [site:name] (approved)'
+status_blocked:
+ body: "[user:display-name],\n\nYour account on [site:name] has been blocked.\n\n-- [site:name] team"
+ subject: 'Account details for [user:display-name] at [site:name] (blocked)'
+status_canceled:
+ body: "[user:display-name],\n\nYour account on [site:name] has been canceled.\n\n-- [site:name] team"
+ subject: 'Account details for [user:display-name] at [site:name] (canceled)'
+langcode: en
+_core:
+ default_config_hash: m4J3ROov32OEquRYGLbx3SpdDGuqx9l_zJtNvihqdCg
diff --git a/config/sync/user.role.administrator.yml b/config/sync/user.role.administrator.yml
new file mode 100644
index 00000000..e304a396
--- /dev/null
+++ b/config/sync/user.role.administrator.yml
@@ -0,0 +1,11 @@
+uuid: d75f1714-5cb1-4599-b1ed-9cb6d3b9a86c
+langcode: en
+status: true
+dependencies: { }
+_core:
+ default_config_hash: Om6FEO7vZZMkPIbVvfxtdkWerQ2PvQM4sWUd6Q3ZnfI
+id: administrator
+label: Administrator
+weight: 2
+is_admin: true
+permissions: { }
diff --git a/config/sync/user.role.anonymous.yml b/config/sync/user.role.anonymous.yml
new file mode 100644
index 00000000..45f9454b
--- /dev/null
+++ b/config/sync/user.role.anonymous.yml
@@ -0,0 +1,16 @@
+uuid: a3d651dc-a036-4c99-824e-b22fd5d206e3
+langcode: en
+status: true
+dependencies: { }
+_core:
+ default_config_hash: j5zLMOdJBqC0bMvSdth5UebkprJB8g_2FXHqhfpJzow
+id: anonymous
+label: 'Anonymous user'
+weight: 0
+is_admin: false
+permissions:
+ - 'access content'
+ - 'use text format restricted_html'
+ - 'access comments'
+ - 'access site-wide contact form'
+ - 'search content'
diff --git a/config/sync/user.role.authenticated.yml b/config/sync/user.role.authenticated.yml
new file mode 100644
index 00000000..43fb8312
--- /dev/null
+++ b/config/sync/user.role.authenticated.yml
@@ -0,0 +1,19 @@
+uuid: 1bae1356-2a5c-48c6-9b35-c0c8273600fe
+langcode: en
+status: true
+dependencies: { }
+_core:
+ default_config_hash: dJ0L2DNSj5q6XVZAGsuVDpJTh5UeYkIPwKrUOOpr8YI
+id: authenticated
+label: 'Authenticated user'
+weight: 1
+is_admin: false
+permissions:
+ - 'access content'
+ - 'use text format basic_html'
+ - 'access comments'
+ - 'post comments'
+ - 'skip comment approval'
+ - 'access site-wide contact form'
+ - 'access shortcuts'
+ - 'search content'
diff --git a/config/sync/user.settings.yml b/config/sync/user.settings.yml
new file mode 100644
index 00000000..7627c6ba
--- /dev/null
+++ b/config/sync/user.settings.yml
@@ -0,0 +1,18 @@
+anonymous: Anonymous
+verify_mail: true
+notify:
+ cancel_confirm: true
+ password_reset: true
+ status_activated: true
+ status_blocked: false
+ status_canceled: false
+ register_admin_created: true
+ register_no_approval_required: true
+ register_pending_approval: true
+register: visitors_admin_approval
+cancel_method: user_cancel_block
+password_reset_timeout: 86400
+password_strength: true
+langcode: en
+_core:
+ default_config_hash: r4kwhOM0IWXVMUZDz744Yc16EOh37ZhYbA8kGOhSmLk
diff --git a/config/sync/views.settings.yml b/config/sync/views.settings.yml
new file mode 100644
index 00000000..7c097b38
--- /dev/null
+++ b/config/sync/views.settings.yml
@@ -0,0 +1,48 @@
+display_extenders: { }
+skip_cache: false
+sql_signature: false
+ui:
+ show:
+ additional_queries: false
+ advanced_column: true
+ master_display: true
+ performance_statistics: false
+ preview_information: true
+ sql_query:
+ enabled: false
+ where: above
+ display_embed: false
+ always_live_preview: true
+ exposed_filter_any_label: old_any
+field_rewrite_elements:
+ div: DIV
+ span: SPAN
+ h1: H1
+ h2: H2
+ h3: H3
+ h4: H4
+ h5: H5
+ h6: H6
+ p: P
+ header: HEADER
+ footer: FOOTER
+ article: ARTICLE
+ section: SECTION
+ aside: ASIDE
+ details: DETAILS
+ blockquote: BLOCKQUOTE
+ figure: FIGURE
+ address: ADDRESS
+ code: CODE
+ pre: PRE
+ var: VAR
+ samp: SAMP
+ kbd: KBD
+ strong: STRONG
+ em: EM
+ del: DEL
+ ins: INS
+ q: Q
+ s: S
+_core:
+ default_config_hash: RaRd9EIcwA4u3qCSRLL8EnCicbda1kV__ASmVbyehvQ
diff --git a/config/sync/views.view.archive.yml b/config/sync/views.view.archive.yml
new file mode 100644
index 00000000..0d47a6e1
--- /dev/null
+++ b/config/sync/views.view.archive.yml
@@ -0,0 +1,243 @@
+uuid: 99578ffc-be24-43a4-a512-38f27380772e
+langcode: en
+status: false
+dependencies:
+ config:
+ - core.entity_view_mode.node.teaser
+ module:
+ - node
+ - user
+_core:
+ default_config_hash: SRH1EhxAiIRj01P9xYv0h_LfIfWxjll0Yq-eDfjziFI
+id: archive
+label: Archive
+module: node
+description: 'All content, by month.'
+tag: default
+base_table: node_field_data
+base_field: nid
+core: '8'
+display:
+ default:
+ id: default
+ display_title: Master
+ display_plugin: default
+ position: 0
+ display_options:
+ query:
+ type: views_query
+ options:
+ query_comment: ''
+ disable_sql_rewrite: false
+ distinct: false
+ replica: false
+ query_tags: { }
+ title: 'Monthly archive'
+ access:
+ type: perm
+ options:
+ perm: 'access content'
+ cache:
+ type: tag
+ options: { }
+ 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: 0
+ 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: ››
+ sorts:
+ created:
+ id: created
+ table: node_field_data
+ field: created
+ order: DESC
+ plugin_id: date
+ relationship: none
+ group_type: group
+ admin_label: ''
+ exposed: false
+ expose:
+ label: ''
+ granularity: second
+ entity_type: node
+ entity_field: created
+ arguments:
+ created_year_month:
+ id: created_year_month
+ table: node_field_data
+ field: created_year_month
+ default_action: summary
+ exception:
+ title_enable: true
+ title_enable: true
+ title: '{{ arguments.created_year_month }}'
+ default_argument_type: fixed
+ summary:
+ sort_order: desc
+ format: default_summary
+ summary_options:
+ override: true
+ items_per_page: 30
+ specify_validation: true
+ plugin_id: date_year_month
+ entity_type: node
+ filters:
+ status:
+ id: status
+ table: node_field_data
+ field: status
+ value: '1'
+ group: 0
+ expose:
+ operator: '0'
+ plugin_id: boolean
+ entity_type: node
+ entity_field: status
+ langcode:
+ id: langcode
+ table: node_field_data
+ field: langcode
+ relationship: none
+ group_type: group
+ admin_label: ''
+ operator: in
+ value:
+ '***LANGUAGE_language_content***': '***LANGUAGE_language_content***'
+ group: 1
+ exposed: false
+ expose:
+ operator_id: ''
+ label: ''
+ description: ''
+ use_operator: false
+ operator: ''
+ identifier: ''
+ required: false
+ remember: false
+ multiple: false
+ remember_roles:
+ authenticated: authenticated
+ reduce: false
+ is_grouped: false
+ group_info:
+ label: ''
+ description: ''
+ identifier: ''
+ optional: true
+ widget: select
+ multiple: false
+ remember: false
+ default_group: All
+ default_group_multiple: { }
+ group_items: { }
+ plugin_id: language
+ entity_type: node
+ entity_field: langcode
+ style:
+ type: default
+ options:
+ grouping: { }
+ row_class: ''
+ default_row_class: true
+ uses_fields: false
+ row:
+ type: 'entity:node'
+ options:
+ view_mode: teaser
+ header: { }
+ footer: { }
+ empty: { }
+ relationships: { }
+ fields: { }
+ display_extenders: { }
+ cache_metadata:
+ contexts:
+ - 'languages:language_interface'
+ - url
+ - url.query_args
+ - 'user.node_grants:view'
+ - user.permissions
+ max-age: -1
+ tags: { }
+ block_1:
+ id: block_1
+ display_title: Block
+ display_plugin: block
+ position: 1
+ display_options:
+ query:
+ type: views_query
+ options: { }
+ defaults:
+ arguments: false
+ arguments:
+ created_year_month:
+ id: created_year_month
+ table: node_field_data
+ field: created_year_month
+ default_action: summary
+ exception:
+ title_enable: true
+ title_enable: true
+ title: '{{ arguments.created_year_month }}'
+ default_argument_type: fixed
+ summary:
+ format: default_summary
+ summary_options:
+ items_per_page: 30
+ specify_validation: true
+ plugin_id: date_year_month
+ entity_type: node
+ display_extenders: { }
+ cache_metadata:
+ contexts:
+ - 'languages:language_interface'
+ - url
+ - url.query_args
+ - 'user.node_grants:view'
+ - user.permissions
+ max-age: -1
+ tags: { }
+ page_1:
+ id: page_1
+ display_title: Page
+ display_plugin: page
+ position: 2
+ display_options:
+ query:
+ type: views_query
+ options: { }
+ path: archive
+ display_extenders: { }
+ cache_metadata:
+ contexts:
+ - 'languages:language_interface'
+ - url
+ - url.query_args
+ - 'user.node_grants:view'
+ - user.permissions
+ max-age: -1
+ tags: { }
diff --git a/config/sync/views.view.block_content.yml b/config/sync/views.view.block_content.yml
new file mode 100644
index 00000000..b0c9749f
--- /dev/null
+++ b/config/sync/views.view.block_content.yml
@@ -0,0 +1,500 @@
+uuid: 59e81fae-957c-43f8-a508-eee4e4080eb4
+langcode: en
+status: true
+dependencies:
+ module:
+ - block_content
+ - user
+_core:
+ default_config_hash: msYnighLW1IbiBfyQbwbQwb2cU-5LECiFryt60k0Nfk
+id: block_content
+label: 'Custom block library'
+module: views
+description: 'Find and manage custom blocks.'
+tag: default
+base_table: block_content_field_data
+base_field: id
+core: 8.x
+display:
+ default:
+ display_plugin: default
+ id: default
+ display_title: Master
+ position: 0
+ display_options:
+ access:
+ type: perm
+ options:
+ perm: 'administer blocks'
+ 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: 50
+ offset: 0
+ id: 0
+ total_pages: null
+ tags:
+ previous: '‹ Previous'
+ next: 'Next ›'
+ 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
+ style:
+ type: table
+ options:
+ grouping: { }
+ row_class: ''
+ default_row_class: true
+ override: true
+ sticky: false
+ caption: ''
+ summary: ''
+ description: ''
+ columns:
+ info: info
+ type: type
+ changed: changed
+ operations: operations
+ info:
+ info:
+ 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: ''
+ changed:
+ sortable: true
+ default_sort_order: desc
+ align: ''
+ separator: ''
+ empty_column: false
+ responsive: ''
+ operations:
+ sortable: false
+ default_sort_order: asc
+ align: ''
+ separator: ''
+ empty_column: false
+ responsive: ''
+ default: changed
+ empty_table: true
+ row:
+ type: fields
+ fields:
+ info:
+ id: info
+ table: block_content_field_data
+ field: info
+ relationship: none
+ group_type: group
+ admin_label: ''
+ label: 'Block description'
+ 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: null
+ entity_field: info
+ plugin_id: field
+ type:
+ id: type
+ table: block_content_field_data
+ field: type
+ relationship: none
+ group_type: group
+ admin_label: ''
+ label: 'Block 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: target_id
+ type: entity_reference_label
+ settings:
+ link: false
+ group_column: target_id
+ 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: block_content
+ entity_field: type
+ plugin_id: field
+ changed:
+ id: changed
+ table: block_content_field_data
+ field: changed
+ relationship: none
+ group_type: group
+ admin_label: ''
+ label: Updated
+ 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
+ entity_type: block_content
+ entity_field: changed
+ type: timestamp
+ settings:
+ date_format: short
+ custom_date_format: ''
+ timezone: ''
+ plugin_id: field
+ operations:
+ id: operations
+ table: block_content
+ field: operations
+ relationship: none
+ group_type: group
+ admin_label: ''
+ label: Operations
+ 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
+ destination: true
+ entity_type: block_content
+ plugin_id: entity_operations
+ filters:
+ info:
+ id: info
+ table: block_content_field_data
+ field: info
+ relationship: none
+ group_type: group
+ admin_label: ''
+ operator: contains
+ value: ''
+ group: 1
+ exposed: true
+ expose:
+ operator_id: info_op
+ label: 'Block description'
+ description: ''
+ use_operator: false
+ operator: info_op
+ identifier: info
+ required: false
+ remember: false
+ multiple: false
+ remember_roles:
+ authenticated: authenticated
+ anonymous: '0'
+ administrator: '0'
+ 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: block_content
+ entity_field: info
+ plugin_id: string
+ type:
+ id: type
+ table: block_content_field_data
+ field: type
+ relationship: none
+ group_type: group
+ admin_label: ''
+ operator: in
+ value: { }
+ group: 1
+ exposed: true
+ expose:
+ operator_id: type_op
+ label: 'Block type'
+ description: ''
+ use_operator: false
+ operator: type_op
+ identifier: type
+ required: false
+ remember: false
+ multiple: false
+ remember_roles:
+ authenticated: authenticated
+ anonymous: '0'
+ administrator: '0'
+ reduce: false
+ is_grouped: false
+ group_info:
+ label: ''
+ description: ''
+ identifier: ''
+ optional: true
+ widget: select
+ multiple: false
+ remember: false
+ default_group: All
+ default_group_multiple: { }
+ group_items: { }
+ entity_type: block_content
+ entity_field: type
+ plugin_id: bundle
+ sorts: { }
+ title: 'Custom block library'
+ header: { }
+ footer: { }
+ empty:
+ area_text_custom:
+ id: area_text_custom
+ table: views
+ field: area_text_custom
+ relationship: none
+ group_type: group
+ admin_label: ''
+ empty: true
+ tokenize: false
+ content: 'There are no custom blocks available. '
+ plugin_id: text_custom
+ block_content_listing_empty:
+ admin_label: ''
+ empty: true
+ field: block_content_listing_empty
+ group_type: group
+ id: block_content_listing_empty
+ label: ''
+ relationship: none
+ table: block_content
+ plugin_id: block_content_listing_empty
+ entity_type: block_content
+ relationships: { }
+ arguments: { }
+ display_extenders: { }
+ cache_metadata:
+ contexts:
+ - 'languages:language_content'
+ - 'languages:language_interface'
+ - url
+ - url.query_args
+ - user.permissions
+ max-age: 0
+ tags: { }
+ page_1:
+ display_plugin: page
+ id: page_1
+ display_title: Page
+ position: 1
+ display_options:
+ display_extenders: { }
+ path: admin/structure/block/block-content
+ menu:
+ type: tab
+ title: 'Custom block library'
+ description: ''
+ parent: block.admin_display
+ weight: 0
+ context: '0'
+ menu_name: admin
+ cache_metadata:
+ contexts:
+ - 'languages:language_content'
+ - 'languages:language_interface'
+ - url
+ - url.query_args
+ - user.permissions
+ max-age: 0
+ tags: { }
diff --git a/config/sync/views.view.comments_recent.yml b/config/sync/views.view.comments_recent.yml
new file mode 100644
index 00000000..26288a86
--- /dev/null
+++ b/config/sync/views.view.comments_recent.yml
@@ -0,0 +1,267 @@
+uuid: 7dd2ca28-115c-4d0f-950b-18991064fab4
+langcode: en
+status: true
+dependencies:
+ module:
+ - comment
+ - node
+ - user
+_core:
+ default_config_hash: HDMjKTBWeuHvsV6i6VvULmfhiSjNzIH1hCoy5GuZD0E
+id: comments_recent
+label: 'Recent comments'
+module: views
+description: 'Recent comments.'
+tag: default
+base_table: comment_field_data
+base_field: cid
+core: 8.x
+display:
+ default:
+ display_plugin: default
+ id: default
+ display_title: Master
+ position: 0
+ display_options:
+ access:
+ type: perm
+ options:
+ perm: 'access comments'
+ cache:
+ type: tag
+ query:
+ type: views_query
+ exposed_form:
+ type: basic
+ pager:
+ type: some
+ options:
+ items_per_page: 10
+ offset: 0
+ style:
+ type: html_list
+ options:
+ grouping: { }
+ row_class: ''
+ default_row_class: true
+ type: ul
+ wrapper_class: item-list
+ class: ''
+ row:
+ type: fields
+ options:
+ default_field_elements: true
+ inline:
+ subject: subject
+ changed: changed
+ separator: ' '
+ hide_empty: false
+ relationships:
+ node:
+ field: node
+ id: node
+ table: comment_field_data
+ required: true
+ plugin_id: standard
+ fields:
+ subject:
+ id: subject
+ table: comment_field_data
+ field: subject
+ relationship: none
+ type: string
+ settings:
+ link_to_entity: true
+ plugin_id: field
+ group_type: group
+ admin_label: ''
+ label: ''
+ 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: false
+ ellipsis: false
+ 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: false
+ element_wrapper_type: ''
+ element_wrapper_class: ''
+ element_default_classes: true
+ empty: ''
+ hide_empty: false
+ empty_zero: false
+ hide_alter_empty: true
+ entity_type: comment
+ entity_field: subject
+ changed:
+ id: changed
+ table: comment_field_data
+ field: changed
+ relationship: none
+ plugin_id: field
+ group_type: group
+ admin_label: ''
+ label: ''
+ 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: false
+ element_wrapper_type: ''
+ element_wrapper_class: ''
+ element_default_classes: true
+ empty: ''
+ hide_empty: false
+ empty_zero: false
+ hide_alter_empty: true
+ type: timestamp_ago
+ settings:
+ future_format: '@interval hence'
+ past_format: '@interval ago'
+ granularity: 2
+ entity_type: comment
+ entity_field: changed
+ filters:
+ status:
+ value: '1'
+ table: comment_field_data
+ field: status
+ id: status
+ plugin_id: boolean
+ expose:
+ operator: ''
+ group: 1
+ entity_type: comment
+ entity_field: status
+ status_node:
+ value: '1'
+ table: node_field_data
+ field: status
+ relationship: node
+ id: status_node
+ plugin_id: boolean
+ expose:
+ operator: ''
+ group: 1
+ entity_type: node
+ entity_field: status
+ sorts:
+ created:
+ id: created
+ table: comment_field_data
+ field: created
+ relationship: none
+ group_type: group
+ admin_label: ''
+ order: DESC
+ exposed: false
+ expose:
+ label: ''
+ plugin_id: date
+ entity_type: comment
+ entity_field: created
+ cid:
+ id: cid
+ table: comment_field_data
+ field: cid
+ relationship: none
+ group_type: group
+ admin_label: ''
+ order: DESC
+ exposed: false
+ plugin_id: field
+ entity_type: comment
+ entity_field: cid
+ title: 'Recent comments'
+ empty:
+ area_text_custom:
+ id: area_text_custom
+ table: views
+ field: area_text_custom
+ relationship: none
+ group_type: group
+ admin_label: ''
+ label: ''
+ empty: true
+ content: 'No comments available.'
+ tokenize: false
+ plugin_id: text_custom
+ display_extenders: { }
+ cache_metadata:
+ contexts:
+ - 'languages:language_content'
+ - 'languages:language_interface'
+ - user.permissions
+ max-age: -1
+ tags: { }
+ block_1:
+ display_plugin: block
+ id: block_1
+ display_title: Block
+ position: 1
+ display_options:
+ block_description: 'Recent comments'
+ block_category: 'Lists (Views)'
+ allow:
+ items_per_page: true
+ display_extenders: { }
+ cache_metadata:
+ contexts:
+ - 'languages:language_content'
+ - 'languages:language_interface'
+ - user.permissions
+ max-age: -1
+ tags: { }
diff --git a/config/sync/views.view.content.yml b/config/sync/views.view.content.yml
new file mode 100644
index 00000000..ab0a07b8
--- /dev/null
+++ b/config/sync/views.view.content.yml
@@ -0,0 +1,607 @@
+uuid: a2f08afc-9f41-4910-8670-2e7e1daf2d83
+langcode: en
+status: true
+dependencies:
+ module:
+ - node
+ - user
+_core:
+ default_config_hash: fUDNcSYKNw6cTMPsX3G9VhsUGov5yUe6_TBHbcnZHyo
+id: content
+label: Content
+module: node
+description: 'Find and manage content.'
+tag: default
+base_table: node_field_data
+base_field: nid
+core: 8.x
+display:
+ default:
+ display_options:
+ access:
+ type: perm
+ options:
+ perm: 'access content overview'
+ cache:
+ type: tag
+ query:
+ type: views_query
+ exposed_form:
+ type: basic
+ options:
+ submit_button: Filter
+ reset_button: true
+ reset_button_label: Reset
+ exposed_sorts_label: 'Sort by'
+ expose_sort_order: true
+ sort_asc_label: Asc
+ sort_desc_label: Desc
+ pager:
+ type: full
+ options:
+ items_per_page: 50
+ tags:
+ previous: '‹ Previous'
+ next: 'Next ›'
+ first: '« First'
+ last: 'Last »'
+ style:
+ type: table
+ options:
+ grouping: { }
+ row_class: ''
+ default_row_class: true
+ override: true
+ sticky: true
+ caption: ''
+ summary: ''
+ description: ''
+ columns:
+ node_bulk_form: node_bulk_form
+ title: title
+ type: type
+ name: name
+ status: status
+ changed: changed
+ edit_node: edit_node
+ delete_node: delete_node
+ dropbutton: dropbutton
+ timestamp: title
+ info:
+ node_bulk_form:
+ align: ''
+ separator: ''
+ empty_column: false
+ responsive: ''
+ title:
+ 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: ''
+ name:
+ sortable: false
+ default_sort_order: asc
+ align: ''
+ separator: ''
+ empty_column: false
+ responsive: priority-low
+ status:
+ sortable: true
+ default_sort_order: asc
+ align: ''
+ separator: ''
+ empty_column: false
+ responsive: ''
+ changed:
+ sortable: true
+ default_sort_order: desc
+ align: ''
+ separator: ''
+ empty_column: false
+ responsive: priority-low
+ edit_node:
+ sortable: false
+ default_sort_order: asc
+ align: ''
+ separator: ''
+ empty_column: false
+ responsive: ''
+ delete_node:
+ sortable: false
+ default_sort_order: asc
+ align: ''
+ separator: ''
+ empty_column: false
+ responsive: ''
+ dropbutton:
+ sortable: false
+ default_sort_order: asc
+ align: ''
+ separator: ''
+ empty_column: false
+ responsive: ''
+ timestamp:
+ sortable: false
+ default_sort_order: asc
+ align: ''
+ separator: ''
+ empty_column: false
+ responsive: ''
+ default: changed
+ empty_table: true
+ row:
+ type: fields
+ fields:
+ node_bulk_form:
+ id: node_bulk_form
+ table: node
+ field: node_bulk_form
+ label: ''
+ exclude: false
+ alter:
+ alter_text: false
+ element_class: ''
+ element_default_classes: true
+ empty: ''
+ hide_empty: false
+ empty_zero: false
+ hide_alter_empty: true
+ plugin_id: node_bulk_form
+ entity_type: node
+ title:
+ id: title
+ table: node_field_data
+ field: title
+ label: Title
+ exclude: false
+ alter:
+ alter_text: false
+ element_class: ''
+ element_default_classes: true
+ empty: ''
+ hide_empty: false
+ empty_zero: false
+ hide_alter_empty: true
+ entity_type: node
+ entity_field: title
+ type: string
+ settings:
+ link_to_entity: true
+ plugin_id: field
+ type:
+ id: type
+ table: node_field_data
+ field: type
+ relationship: none
+ group_type: group
+ admin_label: ''
+ label: 'Content 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: target_id
+ type: entity_reference_label
+ settings:
+ link: false
+ group_column: target_id
+ 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: type
+ plugin_id: field
+ name:
+ id: name
+ table: users_field_data
+ field: name
+ relationship: uid
+ label: Author
+ exclude: false
+ alter:
+ alter_text: false
+ element_class: ''
+ element_default_classes: true
+ empty: ''
+ hide_empty: false
+ empty_zero: false
+ hide_alter_empty: true
+ plugin_id: field
+ type: user_name
+ entity_type: user
+ entity_field: name
+ status:
+ id: status
+ table: node_field_data
+ field: status
+ label: Status
+ exclude: false
+ alter:
+ alter_text: false
+ element_class: ''
+ element_default_classes: true
+ empty: ''
+ hide_empty: false
+ empty_zero: false
+ hide_alter_empty: true
+ type: boolean
+ settings:
+ format: custom
+ format_custom_true: Published
+ format_custom_false: Unpublished
+ plugin_id: field
+ entity_type: node
+ entity_field: status
+ changed:
+ id: changed
+ table: node_field_data
+ field: changed
+ label: Updated
+ exclude: false
+ alter:
+ alter_text: false
+ element_class: ''
+ element_default_classes: true
+ empty: ''
+ hide_empty: false
+ empty_zero: false
+ hide_alter_empty: true
+ type: timestamp
+ settings:
+ date_format: short
+ custom_date_format: ''
+ timezone: ''
+ plugin_id: field
+ entity_type: node
+ entity_field: changed
+ operations:
+ id: operations
+ table: node
+ field: operations
+ relationship: none
+ group_type: group
+ admin_label: ''
+ label: Operations
+ 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
+ destination: true
+ plugin_id: entity_operations
+ filters:
+ status_extra:
+ id: status_extra
+ table: node_field_data
+ field: status_extra
+ operator: '='
+ value: false
+ plugin_id: node_status
+ group: 1
+ entity_type: node
+ status:
+ id: status
+ table: node_field_data
+ field: status
+ relationship: none
+ group_type: group
+ admin_label: ''
+ operator: '='
+ value: '1'
+ group: 1
+ exposed: true
+ expose:
+ operator_id: ''
+ label: Status
+ description: ''
+ use_operator: false
+ operator: status_op
+ identifier: status
+ required: false
+ remember: false
+ multiple: false
+ remember_roles:
+ authenticated: authenticated
+ is_grouped: true
+ group_info:
+ label: 'Published status'
+ description: ''
+ identifier: status
+ optional: true
+ widget: select
+ multiple: false
+ remember: false
+ default_group: All
+ default_group_multiple: { }
+ group_items:
+ 1:
+ title: Published
+ operator: '='
+ value: '1'
+ 2:
+ title: Unpublished
+ operator: '='
+ value: '0'
+ plugin_id: boolean
+ entity_type: node
+ entity_field: status
+ type:
+ id: type
+ table: node_field_data
+ field: type
+ relationship: none
+ group_type: group
+ admin_label: ''
+ operator: in
+ value: { }
+ group: 1
+ exposed: true
+ expose:
+ operator_id: type_op
+ label: 'Content type'
+ description: ''
+ use_operator: false
+ operator: type_op
+ identifier: type
+ required: false
+ remember: false
+ multiple: false
+ remember_roles:
+ authenticated: authenticated
+ anonymous: '0'
+ administrator: '0'
+ reduce: false
+ is_grouped: false
+ group_info:
+ label: ''
+ description: ''
+ identifier: ''
+ optional: true
+ widget: select
+ multiple: false
+ remember: false
+ default_group: All
+ default_group_multiple: { }
+ group_items: { }
+ plugin_id: bundle
+ entity_type: node
+ entity_field: type
+ title:
+ id: title
+ table: node_field_data
+ field: title
+ relationship: none
+ group_type: group
+ admin_label: ''
+ operator: contains
+ value: ''
+ group: 1
+ exposed: true
+ expose:
+ operator_id: title_op
+ label: Title
+ description: ''
+ use_operator: false
+ operator: title_op
+ identifier: title
+ required: false
+ remember: false
+ multiple: false
+ remember_roles:
+ authenticated: authenticated
+ anonymous: '0'
+ administrator: '0'
+ is_grouped: false
+ group_info:
+ label: ''
+ description: ''
+ identifier: ''
+ optional: true
+ widget: select
+ multiple: false
+ remember: false
+ default_group: All
+ default_group_multiple: { }
+ group_items: { }
+ plugin_id: string
+ entity_type: node
+ entity_field: title
+ langcode:
+ id: langcode
+ table: node_field_data
+ field: langcode
+ relationship: none
+ group_type: group
+ admin_label: ''
+ operator: in
+ value: { }
+ group: 1
+ exposed: true
+ expose:
+ operator_id: langcode_op
+ label: Language
+ description: ''
+ use_operator: false
+ operator: langcode_op
+ identifier: langcode
+ required: false
+ remember: false
+ multiple: false
+ remember_roles:
+ authenticated: authenticated
+ anonymous: '0'
+ administrator: '0'
+ reduce: false
+ is_grouped: false
+ group_info:
+ label: ''
+ description: ''
+ identifier: ''
+ optional: true
+ widget: select
+ multiple: false
+ remember: false
+ default_group: All
+ default_group_multiple: { }
+ group_items: { }
+ plugin_id: language
+ entity_type: node
+ entity_field: langcode
+ sorts: { }
+ title: Content
+ empty:
+ area_text_custom:
+ id: area_text_custom
+ table: views
+ field: area_text_custom
+ empty: true
+ content: 'No content available.'
+ plugin_id: text_custom
+ arguments: { }
+ relationships:
+ uid:
+ id: uid
+ table: node_field_data
+ field: uid
+ admin_label: author
+ required: true
+ plugin_id: standard
+ show_admin_links: false
+ filter_groups:
+ operator: AND
+ groups:
+ 1: AND
+ display_extenders: { }
+ display_plugin: default
+ display_title: Master
+ id: default
+ position: 0
+ cache_metadata:
+ contexts:
+ - 'languages:language_content'
+ - 'languages:language_interface'
+ - url
+ - url.query_args
+ - user
+ - 'user.node_grants:view'
+ - user.permissions
+ max-age: 0
+ tags: { }
+ page_1:
+ display_options:
+ path: admin/content/node
+ menu:
+ type: 'default tab'
+ title: Content
+ description: ''
+ menu_name: admin
+ weight: -10
+ context: ''
+ tab_options:
+ type: normal
+ title: Content
+ description: 'Find and manage content'
+ menu_name: admin
+ weight: -10
+ display_extenders: { }
+ display_plugin: page
+ display_title: Page
+ id: page_1
+ position: 1
+ cache_metadata:
+ contexts:
+ - 'languages:language_content'
+ - 'languages:language_interface'
+ - url
+ - url.query_args
+ - user
+ - 'user.node_grants:view'
+ - user.permissions
+ max-age: 0
+ tags: { }
diff --git a/config/sync/views.view.content_recent.yml b/config/sync/views.view.content_recent.yml
new file mode 100644
index 00000000..309a8709
--- /dev/null
+++ b/config/sync/views.view.content_recent.yml
@@ -0,0 +1,319 @@
+uuid: cba3a2f2-e127-44d7-892a-67b0a5e919ee
+langcode: en
+status: true
+dependencies:
+ module:
+ - node
+ - user
+_core:
+ default_config_hash: tDcmzGfShE0XJbfwJzyA6lJTUYC6X4iVu887dgoFfDg
+id: content_recent
+label: 'Recent content'
+module: node
+description: 'Recent content.'
+tag: default
+base_table: node_field_data
+base_field: nid
+core: 8.x
+display:
+ default:
+ display_plugin: default
+ id: default
+ display_title: Master
+ position: 0
+ display_options:
+ access:
+ type: perm
+ options:
+ perm: 'access content'
+ cache:
+ type: tag
+ options: { }
+ query:
+ type: views_query
+ options:
+ disable_sql_rewrite: false
+ distinct: false
+ replica: false
+ query_comment: ''
+ query_tags: { }
+ exposed_form:
+ type: basic
+ options:
+ submit_button: Apply
+ reset_button: false
+ reset_button_label: Reset
+ exposed_sorts_label: 'Sort by'
+ expose_sort_order: true
+ sort_asc_label: Asc
+ sort_desc_label: Desc
+ pager:
+ type: some
+ options:
+ items_per_page: 10
+ offset: 0
+ style:
+ type: html_list
+ options:
+ grouping: { }
+ row_class: ''
+ default_row_class: true
+ type: ul
+ wrapper_class: item-list
+ class: ''
+ row:
+ type: fields
+ fields:
+ title:
+ id: title
+ table: node_field_data
+ field: title
+ entity_type: node
+ entity_field: title
+ label: ''
+ exclude: false
+ alter:
+ alter_text: false
+ make_link: false
+ absolute: false
+ trim: false
+ word_boundary: false
+ ellipsis: false
+ strip_tags: false
+ html: false
+ hide_empty: false
+ empty_zero: false
+ relationship: none
+ group_type: group
+ admin_label: ''
+ element_type: ''
+ element_class: ''
+ element_label_type: ''
+ element_label_class: ''
+ element_label_colon: false
+ element_wrapper_type: ''
+ element_wrapper_class: ''
+ element_default_classes: true
+ empty: ''
+ hide_alter_empty: true
+ type: string
+ settings:
+ link_to_entity: true
+ plugin_id: field
+ changed:
+ id: changed
+ table: node_field_data
+ field: changed
+ relationship: none
+ group_type: group
+ admin_label: ''
+ label: ''
+ 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: false
+ 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: timestamp_ago
+ settings: { }
+ 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: changed
+ plugin_id: field
+ filters:
+ status_extra:
+ id: status_extra
+ table: node_field_data
+ field: status_extra
+ relationship: none
+ group_type: group
+ admin_label: ''
+ operator: '='
+ value: false
+ group: 1
+ exposed: false
+ expose:
+ operator_id: ''
+ label: ''
+ description: ''
+ use_operator: false
+ operator: ''
+ identifier: ''
+ required: false
+ remember: false
+ multiple: false
+ remember_roles:
+ authenticated: authenticated
+ is_grouped: false
+ group_info:
+ label: ''
+ description: ''
+ identifier: ''
+ optional: true
+ widget: select
+ multiple: false
+ remember: false
+ default_group: All
+ default_group_multiple: { }
+ group_items: { }
+ entity_type: node
+ plugin_id: node_status
+ langcode:
+ id: langcode
+ table: node_field_data
+ field: langcode
+ relationship: none
+ group_type: group
+ admin_label: ''
+ operator: in
+ value:
+ '***LANGUAGE_language_content***': '***LANGUAGE_language_content***'
+ group: 1
+ exposed: false
+ expose:
+ operator_id: ''
+ label: ''
+ description: ''
+ use_operator: false
+ operator: ''
+ identifier: ''
+ required: false
+ remember: false
+ multiple: false
+ remember_roles:
+ authenticated: authenticated
+ reduce: false
+ is_grouped: false
+ group_info:
+ label: ''
+ description: ''
+ identifier: ''
+ optional: true
+ widget: select
+ multiple: false
+ remember: false
+ default_group: All
+ default_group_multiple: { }
+ group_items: { }
+ entity_type: node
+ entity_field: langcode
+ plugin_id: language
+ sorts:
+ changed:
+ id: changed
+ table: node_field_data
+ field: changed
+ relationship: none
+ group_type: group
+ admin_label: ''
+ order: DESC
+ exposed: false
+ expose:
+ label: ''
+ granularity: second
+ entity_type: node
+ entity_field: changed
+ plugin_id: date
+ title: 'Recent content'
+ header: { }
+ footer: { }
+ empty:
+ area_text_custom:
+ id: area_text_custom
+ table: views
+ field: area_text_custom
+ relationship: none
+ group_type: group
+ admin_label: ''
+ empty: true
+ tokenize: false
+ content: 'No content available.'
+ plugin_id: text_custom
+ relationships:
+ uid:
+ id: uid
+ table: node_field_data
+ field: uid
+ relationship: none
+ group_type: group
+ admin_label: author
+ required: true
+ entity_type: node
+ entity_field: uid
+ plugin_id: standard
+ arguments: { }
+ display_extenders: { }
+ use_more: false
+ use_more_always: false
+ use_more_text: More
+ link_url: ''
+ link_display: '0'
+ cache_metadata:
+ contexts:
+ - 'languages:language_content'
+ - 'languages:language_interface'
+ - user
+ - 'user.node_grants:view'
+ - user.permissions
+ max-age: -1
+ tags: { }
+ block_1:
+ display_plugin: block
+ id: block_1
+ display_title: Block
+ position: 1
+ display_options:
+ display_extenders: { }
+ cache_metadata:
+ contexts:
+ - 'languages:language_content'
+ - 'languages:language_interface'
+ - user
+ - 'user.node_grants:view'
+ - user.permissions
+ max-age: -1
+ tags: { }
diff --git a/config/sync/views.view.files.yml b/config/sync/views.view.files.yml
new file mode 100644
index 00000000..cdda1192
--- /dev/null
+++ b/config/sync/views.view.files.yml
@@ -0,0 +1,1124 @@
+uuid: 0ae75ce9-375f-4342-a104-a22a796a51d4
+langcode: en
+status: true
+dependencies:
+ module:
+ - file
+ - user
+_core:
+ default_config_hash: rRWxAX-IQkJ5viACQRovRkC784EyCl9493GU_G23n2Q
+id: files
+label: Files
+module: file
+description: 'Find and manage files.'
+tag: default
+base_table: file_managed
+base_field: fid
+core: 8.x
+display:
+ default:
+ display_plugin: default
+ id: default
+ display_title: Master
+ position: 0
+ display_options:
+ access:
+ type: perm
+ options:
+ perm: 'access files overview'
+ 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: Filter
+ 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: 50
+ offset: 0
+ id: 0
+ total_pages: 0
+ tags:
+ previous: '‹ Previous'
+ next: 'Next ›'
+ 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
+ style:
+ type: table
+ options:
+ grouping: { }
+ row_class: ''
+ default_row_class: true
+ override: true
+ sticky: false
+ caption: ''
+ summary: ''
+ description: ''
+ columns:
+ fid: fid
+ filename: filename
+ filemime: filemime
+ filesize: filesize
+ status: status
+ created: created
+ changed: changed
+ count: count
+ info:
+ fid:
+ sortable: false
+ default_sort_order: asc
+ align: ''
+ separator: ''
+ empty_column: false
+ responsive: ''
+ filename:
+ sortable: true
+ default_sort_order: asc
+ align: ''
+ separator: ''
+ empty_column: false
+ responsive: ''
+ filemime:
+ sortable: true
+ default_sort_order: asc
+ align: ''
+ separator: ''
+ empty_column: false
+ responsive: priority-medium
+ filesize:
+ sortable: true
+ default_sort_order: asc
+ align: ''
+ separator: ''
+ empty_column: false
+ responsive: priority-low
+ status:
+ sortable: false
+ default_sort_order: asc
+ align: ''
+ separator: ''
+ empty_column: false
+ responsive: priority-low
+ created:
+ sortable: true
+ default_sort_order: desc
+ align: ''
+ separator: ''
+ empty_column: false
+ responsive: ''
+ changed:
+ sortable: true
+ default_sort_order: desc
+ align: ''
+ separator: ''
+ empty_column: false
+ responsive: ''
+ count:
+ sortable: false
+ default_sort_order: asc
+ align: ''
+ separator: ''
+ empty_column: false
+ responsive: priority-medium
+ default: changed
+ empty_table: true
+ row:
+ type: fields
+ fields:
+ fid:
+ id: fid
+ table: file_managed
+ field: fid
+ alter:
+ alter_text: false
+ make_link: false
+ absolute: false
+ trim: false
+ word_boundary: false
+ ellipsis: false
+ strip_tags: false
+ html: false
+ hide_empty: false
+ empty_zero: false
+ relationship: none
+ group_type: group
+ admin_label: ''
+ label: Fid
+ exclude: true
+ element_type: ''
+ element_class: ''
+ element_label_type: ''
+ element_label_class: ''
+ element_label_colon: true
+ element_wrapper_type: ''
+ element_wrapper_class: ''
+ element_default_classes: true
+ empty: ''
+ hide_alter_empty: true
+ plugin_id: field
+ entity_type: file
+ entity_field: fid
+ filename:
+ id: filename
+ table: file_managed
+ field: filename
+ relationship: none
+ group_type: group
+ admin_label: ''
+ label: Name
+ 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: false
+ ellipsis: false
+ 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: file_link
+ 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
+ plugin_id: field
+ entity_type: file
+ entity_field: filename
+ filemime:
+ id: filemime
+ table: file_managed
+ field: filemime
+ relationship: none
+ group_type: group
+ admin_label: ''
+ label: 'MIME 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
+ type: file_filemime
+ plugin_id: field
+ entity_type: file
+ entity_field: filemime
+ filesize:
+ id: filesize
+ table: file_managed
+ field: filesize
+ relationship: none
+ group_type: group
+ admin_label: ''
+ label: Size
+ 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
+ type: file_size
+ plugin_id: field
+ entity_type: file
+ entity_field: filesize
+ status:
+ id: status
+ table: file_managed
+ field: status
+ relationship: none
+ group_type: group
+ admin_label: ''
+ label: Status
+ 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
+ type: boolean
+ settings:
+ format: custom
+ format_custom_false: Temporary
+ format_custom_true: Permanent
+ plugin_id: field
+ entity_type: file
+ entity_field: status
+ created:
+ id: created
+ table: file_managed
+ field: created
+ relationship: none
+ group_type: group
+ admin_label: ''
+ label: 'Upload date'
+ 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
+ type: timestamp
+ settings:
+ date_format: medium
+ custom_date_format: ''
+ timezone: ''
+ plugin_id: field
+ entity_type: file
+ entity_field: created
+ changed:
+ id: changed
+ table: file_managed
+ field: changed
+ relationship: none
+ group_type: group
+ admin_label: ''
+ label: 'Changed date'
+ 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
+ type: timestamp
+ settings:
+ date_format: medium
+ custom_date_format: ''
+ timezone: ''
+ plugin_id: field
+ entity_type: file
+ entity_field: changed
+ count:
+ id: count
+ table: file_usage
+ field: count
+ relationship: fid
+ group_type: sum
+ admin_label: ''
+ label: 'Used in'
+ exclude: false
+ alter:
+ alter_text: false
+ text: ''
+ make_link: true
+ path: 'admin/content/files/usage/{{ fid }}'
+ 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
+ set_precision: false
+ precision: 0
+ decimal: .
+ separator: ','
+ format_plural: true
+ format_plural_string: "1 place\x03@count places"
+ prefix: ''
+ suffix: ''
+ plugin_id: numeric
+ filters:
+ filename:
+ id: filename
+ table: file_managed
+ field: filename
+ relationship: none
+ group_type: group
+ admin_label: ''
+ operator: word
+ value: ''
+ group: 1
+ exposed: true
+ expose:
+ operator_id: filemime_op
+ label: Filename
+ description: ''
+ use_operator: false
+ operator: filename_op
+ identifier: filename
+ required: false
+ remember: false
+ multiple: false
+ remember_roles:
+ authenticated: authenticated
+ anonymous: '0'
+ administrator: '0'
+ is_grouped: false
+ group_info:
+ label: ''
+ description: ''
+ identifier: ''
+ optional: true
+ widget: select
+ multiple: false
+ remember: false
+ default_group: All
+ default_group_multiple: { }
+ group_items: { }
+ plugin_id: string
+ entity_type: file
+ entity_field: filename
+ filemime:
+ id: filemime
+ table: file_managed
+ field: filemime
+ relationship: none
+ group_type: group
+ admin_label: ''
+ operator: word
+ value: ''
+ group: 1
+ exposed: true
+ expose:
+ operator_id: filemime_op
+ label: 'MIME type'
+ description: ''
+ use_operator: false
+ operator: filemime_op
+ identifier: filemime
+ required: false
+ remember: false
+ multiple: false
+ remember_roles:
+ authenticated: authenticated
+ anonymous: '0'
+ administrator: '0'
+ is_grouped: false
+ group_info:
+ label: ''
+ description: ''
+ identifier: ''
+ optional: true
+ widget: select
+ multiple: false
+ remember: false
+ default_group: All
+ default_group_multiple: { }
+ group_items: { }
+ plugin_id: string
+ entity_type: file
+ entity_field: filemime
+ status:
+ id: status
+ table: file_managed
+ field: status
+ relationship: none
+ group_type: group
+ admin_label: ''
+ operator: in
+ value: { }
+ group: 1
+ exposed: true
+ expose:
+ operator_id: status_op
+ label: Status
+ description: ''
+ use_operator: false
+ operator: status_op
+ identifier: status
+ required: false
+ remember: false
+ multiple: false
+ remember_roles:
+ authenticated: authenticated
+ anonymous: '0'
+ administrator: '0'
+ reduce: false
+ is_grouped: false
+ group_info:
+ label: ''
+ description: ''
+ identifier: ''
+ optional: true
+ widget: select
+ multiple: false
+ remember: false
+ default_group: All
+ default_group_multiple: { }
+ group_items: { }
+ plugin_id: file_status
+ entity_type: file
+ entity_field: status
+ sorts: { }
+ title: Files
+ header: { }
+ footer: { }
+ empty:
+ area_text_custom:
+ id: area_text_custom
+ table: views
+ field: area_text_custom
+ empty: true
+ content: 'No files available.'
+ plugin_id: text_custom
+ relationships:
+ fid:
+ id: fid
+ table: file_managed
+ field: fid
+ relationship: none
+ group_type: group
+ admin_label: 'File usage'
+ required: true
+ arguments: { }
+ group_by: true
+ show_admin_links: true
+ display_extenders: { }
+ cache_metadata:
+ contexts:
+ - 'languages:language_content'
+ - 'languages:language_interface'
+ - url
+ - url.query_args
+ - user.permissions
+ max-age: 0
+ tags: { }
+ page_1:
+ display_plugin: page
+ id: page_1
+ display_title: 'Files overview'
+ position: 1
+ display_options:
+ path: admin/content/files
+ menu:
+ type: tab
+ title: Files
+ description: ''
+ menu_name: admin
+ weight: 0
+ context: ''
+ display_description: ''
+ defaults:
+ pager: true
+ relationships: false
+ relationships:
+ fid:
+ id: fid
+ table: file_managed
+ field: fid
+ relationship: none
+ group_type: group
+ admin_label: 'File usage'
+ required: false
+ display_extenders: { }
+ cache_metadata:
+ contexts:
+ - 'languages:language_content'
+ - 'languages:language_interface'
+ - url
+ - url.query_args
+ - user.permissions
+ max-age: 0
+ tags: { }
+ page_2:
+ display_plugin: page
+ id: page_2
+ display_title: 'File usage'
+ position: 2
+ display_options:
+ display_description: ''
+ path: admin/content/files/usage/%
+ empty: { }
+ defaults:
+ empty: false
+ pager: false
+ filters: false
+ filter_groups: false
+ fields: false
+ group_by: false
+ title: false
+ arguments: false
+ style: false
+ row: false
+ relationships: false
+ pager:
+ type: mini
+ options:
+ items_per_page: 10
+ offset: 0
+ id: 0
+ total_pages: 0
+ tags:
+ previous: '‹ Previous'
+ next: 'Next ›'
+ 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
+ filters: { }
+ filter_groups:
+ operator: AND
+ groups: { }
+ fields:
+ entity_label:
+ id: entity_label
+ table: file_usage
+ field: entity_label
+ relationship: none
+ group_type: group
+ admin_label: ''
+ label: Entity
+ 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
+ link_to_entity: true
+ plugin_id: entity_label
+ type:
+ id: type
+ table: file_usage
+ 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
+ plugin_id: standard
+ module:
+ id: module
+ table: file_usage
+ field: module
+ relationship: none
+ group_type: group
+ admin_label: ''
+ label: 'Registering module'
+ 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
+ plugin_id: standard
+ count:
+ id: count
+ table: file_usage
+ field: count
+ relationship: none
+ group_type: group
+ admin_label: ''
+ label: 'Use count'
+ 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
+ set_precision: false
+ precision: 0
+ decimal: .
+ separator: ','
+ format_plural: false
+ format_plural_string: "1\x03@count"
+ prefix: ''
+ suffix: ''
+ plugin_id: numeric
+ group_by: false
+ title: 'File usage'
+ arguments:
+ fid:
+ id: fid
+ table: file_managed
+ field: fid
+ relationship: none
+ group_type: group
+ admin_label: ''
+ default_action: 'not found'
+ exception:
+ value: all
+ title_enable: false
+ title: All
+ title_enable: true
+ title: 'File usage information for {{ arguments.fid }}'
+ default_argument_type: fixed
+ default_argument_options:
+ argument: ''
+ default_argument_skip_url: false
+ summary_options:
+ base_path: ''
+ count: true
+ items_per_page: 25
+ override: false
+ summary:
+ sort_order: asc
+ number_of_records: 0
+ format: default_summary
+ specify_validation: false
+ validate:
+ type: none
+ fail: 'not found'
+ validate_options: { }
+ break_phrase: false
+ not: false
+ plugin_id: file_fid
+ entity_type: file
+ entity_field: fid
+ style:
+ type: table
+ options:
+ grouping: { }
+ row_class: ''
+ default_row_class: true
+ override: true
+ sticky: false
+ caption: ''
+ summary: ''
+ description: ''
+ columns:
+ entity_label: entity_label
+ type: type
+ module: module
+ count: count
+ info:
+ entity_label:
+ 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: priority-medium
+ module:
+ sortable: false
+ default_sort_order: asc
+ align: ''
+ separator: ''
+ empty_column: false
+ responsive: priority-low
+ count:
+ sortable: false
+ default_sort_order: asc
+ align: ''
+ separator: ''
+ empty_column: false
+ responsive: ''
+ default: entity_label
+ empty_table: true
+ row:
+ type: fields
+ options: { }
+ relationships:
+ fid:
+ id: fid
+ table: file_managed
+ field: fid
+ relationship: none
+ group_type: group
+ admin_label: 'File usage'
+ required: true
+ display_extenders: { }
+ cache_metadata:
+ contexts:
+ - 'languages:language_interface'
+ - url
+ - url.query_args
+ - user.permissions
+ max-age: 0
+ tags: { }
diff --git a/config/sync/views.view.frontpage.yml b/config/sync/views.view.frontpage.yml
new file mode 100644
index 00000000..2cc8f3e3
--- /dev/null
+++ b/config/sync/views.view.frontpage.yml
@@ -0,0 +1,305 @@
+uuid: e78120c7-dab5-44e5-8708-ffc5689d296d
+langcode: en
+status: true
+dependencies:
+ config:
+ - core.entity_view_mode.node.rss
+ - core.entity_view_mode.node.teaser
+ module:
+ - node
+ - user
+_core:
+ default_config_hash: GNfx9kN8-0_KgQ-xf3fjdXCCzZwXCI8T0IPFW8SIe7g
+id: frontpage
+label: Frontpage
+module: node
+description: 'All content promoted to the front page.'
+tag: default
+base_table: node_field_data
+base_field: nid
+core: 8.x
+display:
+ default:
+ display_options:
+ access:
+ type: perm
+ options:
+ perm: 'access content'
+ cache:
+ type: tag
+ options: { }
+ empty:
+ area_text_custom:
+ admin_label: ''
+ content: 'No front page content has been created yet.'
+ empty: true
+ field: area_text_custom
+ group_type: group
+ id: area_text_custom
+ label: ''
+ relationship: none
+ table: views
+ tokenize: false
+ plugin_id: text_custom
+ node_listing_empty:
+ admin_label: ''
+ empty: true
+ field: node_listing_empty
+ group_type: group
+ id: node_listing_empty
+ label: ''
+ relationship: none
+ table: node
+ plugin_id: node_listing_empty
+ entity_type: node
+ title:
+ id: title
+ table: views
+ field: title
+ relationship: none
+ group_type: group
+ admin_label: ''
+ label: ''
+ empty: true
+ title: 'Welcome to [site:name]'
+ plugin_id: title
+ 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
+ filters:
+ promote:
+ admin_label: ''
+ expose:
+ description: ''
+ identifier: ''
+ label: ''
+ multiple: false
+ operator: ''
+ operator_id: ''
+ remember: false
+ remember_roles:
+ authenticated: authenticated
+ required: false
+ use_operator: false
+ exposed: false
+ field: promote
+ group: 1
+ group_info:
+ default_group: All
+ default_group_multiple: { }
+ description: ''
+ group_items: { }
+ identifier: ''
+ label: ''
+ multiple: false
+ optional: true
+ remember: false
+ widget: select
+ group_type: group
+ id: promote
+ is_grouped: false
+ operator: '='
+ relationship: none
+ table: node_field_data
+ value: '1'
+ plugin_id: boolean
+ entity_type: node
+ entity_field: promote
+ status:
+ expose:
+ operator: ''
+ field: status
+ group: 1
+ id: status
+ table: node_field_data
+ value: '1'
+ plugin_id: boolean
+ entity_type: node
+ entity_field: status
+ langcode:
+ id: langcode
+ table: node_field_data
+ field: langcode
+ relationship: none
+ group_type: group
+ admin_label: ''
+ operator: in
+ value:
+ '***LANGUAGE_language_content***': '***LANGUAGE_language_content***'
+ group: 1
+ exposed: false
+ expose:
+ operator_id: ''
+ label: ''
+ description: ''
+ use_operator: false
+ operator: ''
+ identifier: ''
+ required: false
+ remember: false
+ multiple: false
+ remember_roles:
+ authenticated: authenticated
+ reduce: false
+ is_grouped: false
+ group_info:
+ label: ''
+ description: ''
+ identifier: ''
+ optional: true
+ widget: select
+ multiple: false
+ remember: false
+ default_group: All
+ default_group_multiple: { }
+ group_items: { }
+ plugin_id: language
+ entity_type: node
+ entity_field: langcode
+ pager:
+ type: full
+ options:
+ items_per_page: 10
+ offset: 0
+ id: 0
+ total_pages: 0
+ 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: '‹ Previous'
+ next: 'Next ›'
+ first: '« First'
+ last: 'Last »'
+ quantity: 9
+ query:
+ type: views_query
+ options:
+ disable_sql_rewrite: false
+ distinct: false
+ replica: false
+ query_comment: ''
+ query_tags: { }
+ row:
+ type: 'entity:node'
+ options:
+ view_mode: teaser
+ sorts:
+ sticky:
+ admin_label: ''
+ expose:
+ label: ''
+ exposed: false
+ field: sticky
+ group_type: group
+ id: sticky
+ order: DESC
+ relationship: none
+ table: node_field_data
+ plugin_id: boolean
+ entity_type: node
+ entity_field: sticky
+ created:
+ field: created
+ id: created
+ order: DESC
+ table: node_field_data
+ plugin_id: date
+ relationship: none
+ group_type: group
+ admin_label: ''
+ exposed: false
+ expose:
+ label: ''
+ granularity: second
+ entity_type: node
+ entity_field: created
+ style:
+ type: default
+ options:
+ grouping: { }
+ row_class: ''
+ default_row_class: true
+ uses_fields: false
+ title: ''
+ header: { }
+ footer: { }
+ relationships: { }
+ fields: { }
+ arguments: { }
+ display_extenders: { }
+ display_plugin: default
+ display_title: Master
+ id: default
+ position: 0
+ cache_metadata:
+ contexts:
+ - 'languages:language_interface'
+ - url.query_args
+ - 'user.node_grants:view'
+ - user.permissions
+ max-age: -1
+ tags: { }
+ feed_1:
+ display_plugin: feed
+ id: feed_1
+ display_title: Feed
+ position: 2
+ display_options:
+ sitename_title: true
+ path: rss.xml
+ displays:
+ page_1: page_1
+ default: ''
+ pager:
+ type: some
+ options:
+ items_per_page: 10
+ offset: 0
+ style:
+ type: rss
+ options:
+ description: ''
+ grouping: { }
+ uses_fields: false
+ row:
+ type: node_rss
+ options:
+ relationship: none
+ view_mode: rss
+ display_extenders: { }
+ cache_metadata:
+ contexts:
+ - 'languages:language_interface'
+ - 'user.node_grants:view'
+ - user.permissions
+ max-age: -1
+ tags: { }
+ page_1:
+ display_options:
+ path: node
+ display_extenders: { }
+ display_plugin: page
+ display_title: Page
+ id: page_1
+ position: 1
+ cache_metadata:
+ contexts:
+ - 'languages:language_interface'
+ - url.query_args
+ - 'user.node_grants:view'
+ - user.permissions
+ max-age: -1
+ tags: { }
diff --git a/config/sync/views.view.glossary.yml b/config/sync/views.view.glossary.yml
new file mode 100644
index 00000000..9f120e9c
--- /dev/null
+++ b/config/sync/views.view.glossary.yml
@@ -0,0 +1,459 @@
+uuid: a0380ab6-25a3-4058-b9f9-a2693204e074
+langcode: en
+status: false
+dependencies:
+ config:
+ - system.menu.main
+ module:
+ - node
+ - user
+_core:
+ default_config_hash: '-pCFOVfbt__jaohFffTLnVavh4OBC6CjREAnchiRomQ'
+id: glossary
+label: Glossary
+module: node
+description: 'All content, by letter.'
+tag: default
+base_table: node_field_data
+base_field: nid
+core: '8'
+display:
+ default:
+ id: default
+ display_title: Master
+ display_plugin: default
+ position: 0
+ display_options:
+ query:
+ type: views_query
+ options:
+ query_comment: ''
+ disable_sql_rewrite: false
+ distinct: false
+ replica: false
+ query_tags: { }
+ use_ajax: true
+ access:
+ type: perm
+ options:
+ perm: 'access content'
+ cache:
+ type: tag
+ options: { }
+ 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: 36
+ offset: 0
+ id: 0
+ total_pages: 0
+ 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: ››
+ fields:
+ title:
+ id: title
+ table: node_field_data
+ field: title
+ plugin_id: field
+ relationship: none
+ 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
+ entity_type: node
+ entity_field: title
+ name:
+ id: name
+ table: users_field_data
+ field: name
+ label: Author
+ relationship: uid
+ plugin_id: field
+ type: user_name
+ group_type: group
+ admin_label: ''
+ 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
+ entity_type: user
+ entity_field: name
+ changed:
+ id: changed
+ table: node_field_data
+ field: changed
+ label: 'Last update'
+ type: timestamp
+ settings:
+ date_format: long
+ custom_date_format: ''
+ timezone: ''
+ plugin_id: field
+ relationship: none
+ group_type: group
+ admin_label: ''
+ 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
+ entity_type: node
+ entity_field: changed
+ arguments:
+ title:
+ id: title
+ table: node_field_data
+ field: title
+ default_action: default
+ exception:
+ title_enable: true
+ default_argument_type: fixed
+ default_argument_options:
+ argument: a
+ summary:
+ format: default_summary
+ specify_validation: true
+ glossary: true
+ limit: 1
+ case: upper
+ path_case: lower
+ transform_dash: false
+ plugin_id: string
+ relationship: none
+ group_type: group
+ admin_label: ''
+ title_enable: false
+ title: ''
+ default_argument_skip_url: false
+ summary_options: { }
+ validate:
+ type: none
+ fail: 'not found'
+ validate_options: { }
+ break_phrase: false
+ entity_type: node
+ entity_field: title
+ relationships:
+ uid:
+ id: uid
+ table: node_field_data
+ field: uid
+ plugin_id: standard
+ relationship: none
+ group_type: group
+ admin_label: author
+ required: false
+ style:
+ type: table
+ options:
+ columns:
+ title: title
+ name: name
+ changed: changed
+ default: title
+ info:
+ title:
+ sortable: true
+ separator: ''
+ name:
+ sortable: true
+ separator: ''
+ changed:
+ sortable: true
+ separator: ''
+ override: true
+ sticky: false
+ grouping: { }
+ row_class: ''
+ default_row_class: true
+ uses_fields: false
+ order: asc
+ summary: ''
+ empty_table: false
+ row:
+ type: fields
+ options:
+ inline: { }
+ separator: ''
+ hide_empty: false
+ default_field_elements: true
+ header: { }
+ footer: { }
+ empty: { }
+ sorts: { }
+ filters:
+ langcode:
+ id: langcode
+ table: node_field_data
+ field: langcode
+ relationship: none
+ group_type: group
+ admin_label: ''
+ operator: in
+ value:
+ '***LANGUAGE_language_content***': '***LANGUAGE_language_content***'
+ group: 1
+ exposed: false
+ expose:
+ operator_id: ''
+ label: ''
+ description: ''
+ use_operator: false
+ operator: ''
+ identifier: ''
+ required: false
+ remember: false
+ multiple: false
+ remember_roles:
+ authenticated: authenticated
+ reduce: false
+ is_grouped: false
+ group_info:
+ label: ''
+ description: ''
+ identifier: ''
+ optional: true
+ widget: select
+ multiple: false
+ remember: false
+ default_group: All
+ default_group_multiple: { }
+ group_items: { }
+ plugin_id: language
+ entity_type: node
+ entity_field: langcode
+ display_extenders: { }
+ cache_metadata:
+ contexts:
+ - 'languages:language_content'
+ - 'languages:language_interface'
+ - url
+ - url.query_args
+ - 'user.node_grants:view'
+ - user.permissions
+ max-age: 0
+ tags: { }
+ attachment_1:
+ id: attachment_1
+ display_title: Attachment
+ display_plugin: attachment
+ position: 2
+ display_options:
+ query:
+ type: views_query
+ options: { }
+ pager:
+ type: none
+ options:
+ offset: 0
+ items_per_page: 0
+ defaults:
+ arguments: false
+ arguments:
+ title:
+ id: title
+ table: node_field_data
+ field: title
+ default_action: summary
+ exception:
+ title_enable: true
+ default_argument_type: fixed
+ default_argument_options:
+ argument: a
+ summary:
+ format: unformatted_summary
+ summary_options:
+ items_per_page: 25
+ inline: true
+ separator: ' | '
+ specify_validation: true
+ glossary: true
+ limit: 1
+ case: upper
+ path_case: lower
+ transform_dash: false
+ plugin_id: string
+ relationship: none
+ group_type: group
+ admin_label: ''
+ title_enable: false
+ title: ''
+ default_argument_skip_url: false
+ validate:
+ type: none
+ fail: 'not found'
+ validate_options: { }
+ break_phrase: false
+ entity_type: node
+ entity_field: title
+ displays:
+ default: default
+ page_1: page_1
+ inherit_arguments: false
+ display_extenders: { }
+ cache_metadata:
+ contexts:
+ - 'languages:language_content'
+ - 'languages:language_interface'
+ - url
+ - url.query_args
+ - 'user.node_grants:view'
+ - user.permissions
+ max-age: 0
+ tags: { }
+ page_1:
+ id: page_1
+ display_title: Page
+ display_plugin: page
+ position: 1
+ display_options:
+ query:
+ type: views_query
+ options: { }
+ path: glossary
+ menu:
+ type: normal
+ title: Glossary
+ weight: 0
+ menu_name: main
+ parent: ''
+ display_extenders: { }
+ cache_metadata:
+ contexts:
+ - 'languages:language_content'
+ - 'languages:language_interface'
+ - url
+ - url.query_args
+ - 'user.node_grants:view'
+ - user.permissions
+ max-age: 0
+ tags: { }
diff --git a/config/sync/views.view.references.yml b/config/sync/views.view.references.yml
new file mode 100644
index 00000000..1ff2704f
--- /dev/null
+++ b/config/sync/views.view.references.yml
@@ -0,0 +1,360 @@
+uuid: c1de987d-0b3d-4d0f-bf6b-1fe7351ea1ea
+langcode: en
+status: true
+dependencies:
+ config:
+ - field.storage.node.field_organization
+ - field.storage.node.field_re
+ - image.style.large
+ - node.type.reference
+ module:
+ - image
+ - node
+ - user
+id: references
+label: References
+module: views
+description: ''
+tag: ''
+base_table: node_field_data
+base_field: nid
+core: 8.x
+display:
+ default:
+ display_plugin: default
+ id: default
+ display_title: Master
+ position: 0
+ display_options:
+ access:
+ type: perm
+ options:
+ perm: 'access content'
+ cache:
+ type: tag
+ options: { }
+ query:
+ type: views_query
+ options:
+ disable_sql_rewrite: false
+ distinct: false
+ replica: false
+ query_comment: ''
+ query_tags: { }
+ exposed_form:
+ type: basic
+ options:
+ submit_button: Apply
+ reset_button: false
+ reset_button_label: Reset
+ exposed_sorts_label: 'Sort by'
+ expose_sort_order: true
+ sort_asc_label: Asc
+ sort_desc_label: Desc
+ pager:
+ type: mini
+ options:
+ items_per_page: 10
+ offset: 0
+ id: 0
+ total_pages: null
+ expose:
+ items_per_page: false
+ items_per_page_label: 'Items per page'
+ items_per_page_options: '5, 10, 25, 50'
+ items_per_page_options_all: false
+ items_per_page_options_all_label: '- All -'
+ offset: false
+ offset_label: Offset
+ tags:
+ previous: ‹‹
+ next: ››
+ style:
+ type: default
+ row:
+ type: fields
+ options:
+ default_field_elements: true
+ inline: { }
+ separator: ''
+ hide_empty: false
+ fields:
+ title:
+ id: title
+ table: node_field_data
+ field: title
+ entity_type: node
+ entity_field: title
+ label: ''
+ alter:
+ alter_text: false
+ make_link: false
+ absolute: false
+ trim: false
+ word_boundary: false
+ ellipsis: false
+ strip_tags: false
+ html: false
+ hide_empty: false
+ empty_zero: false
+ settings:
+ link_to_entity: true
+ plugin_id: field
+ relationship: none
+ group_type: group
+ admin_label: ''
+ exclude: false
+ element_type: ''
+ element_class: ''
+ element_label_type: ''
+ element_label_class: ''
+ element_label_colon: true
+ element_wrapper_type: ''
+ element_wrapper_class: ''
+ element_default_classes: true
+ empty: ''
+ hide_alter_empty: true
+ click_sort_column: value
+ type: string
+ group_column: value
+ group_columns: { }
+ group_rows: true
+ delta_limit: 0
+ delta_offset: 0
+ delta_reversed: false
+ delta_first_last: false
+ multi_type: separator
+ separator: ', '
+ field_api_classes: false
+ field_organization:
+ id: field_organization
+ table: node__field_organization
+ field: field_organization
+ relationship: none
+ group_type: group
+ admin_label: ''
+ label: ''
+ 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: false
+ 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
+ plugin_id: field
+ field_re:
+ id: field_re
+ table: node__field_re
+ field: field_re
+ relationship: none
+ group_type: group
+ admin_label: ''
+ label: ''
+ 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: false
+ element_wrapper_type: ''
+ element_wrapper_class: ''
+ element_default_classes: true
+ empty: ''
+ hide_empty: false
+ empty_zero: false
+ hide_alter_empty: true
+ click_sort_column: target_id
+ type: image
+ settings:
+ image_style: large
+ image_link: ''
+ group_column: ''
+ 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
+ plugin_id: field
+ filters:
+ status:
+ value: '1'
+ table: node_field_data
+ field: status
+ plugin_id: boolean
+ entity_type: node
+ entity_field: status
+ id: status
+ expose:
+ operator: ''
+ group: 1
+ type:
+ id: type
+ table: node_field_data
+ field: type
+ relationship: none
+ group_type: group
+ admin_label: ''
+ operator: in
+ value:
+ reference: reference
+ group: 1
+ exposed: false
+ expose:
+ operator_id: ''
+ label: ''
+ description: ''
+ use_operator: false
+ operator: ''
+ identifier: ''
+ required: false
+ remember: false
+ multiple: false
+ remember_roles:
+ authenticated: authenticated
+ reduce: false
+ is_grouped: false
+ group_info:
+ label: ''
+ description: ''
+ identifier: ''
+ optional: true
+ widget: select
+ multiple: false
+ remember: false
+ default_group: All
+ default_group_multiple: { }
+ group_items: { }
+ entity_type: node
+ entity_field: type
+ plugin_id: bundle
+ sorts:
+ created:
+ id: created
+ table: node_field_data
+ field: created
+ order: DESC
+ entity_type: node
+ entity_field: created
+ plugin_id: date
+ relationship: none
+ group_type: group
+ admin_label: ''
+ exposed: false
+ expose:
+ label: ''
+ granularity: second
+ title: References
+ header: { }
+ footer: { }
+ empty: { }
+ relationships: { }
+ arguments: { }
+ display_extenders: { }
+ cache_metadata:
+ max-age: -1
+ contexts:
+ - 'languages:language_content'
+ - 'languages:language_interface'
+ - url.query_args
+ - 'user.node_grants:view'
+ - user.permissions
+ tags:
+ - 'config:field.storage.node.field_organization'
+ - 'config:field.storage.node.field_re'
+ page_1:
+ display_plugin: page
+ id: page_1
+ display_title: Page
+ position: 1
+ display_options:
+ display_extenders: { }
+ path: references
+ cache_metadata:
+ max-age: -1
+ contexts:
+ - 'languages:language_content'
+ - 'languages:language_interface'
+ - url.query_args
+ - 'user.node_grants:view'
+ - user.permissions
+ tags:
+ - 'config:field.storage.node.field_organization'
+ - 'config:field.storage.node.field_re'
diff --git a/config/sync/views.view.taxonomy_term.yml b/config/sync/views.view.taxonomy_term.yml
new file mode 100644
index 00000000..bb5e37cd
--- /dev/null
+++ b/config/sync/views.view.taxonomy_term.yml
@@ -0,0 +1,314 @@
+uuid: 19a815e0-9b22-4e4a-8445-1c622e936999
+langcode: en
+status: true
+dependencies:
+ config:
+ - core.entity_view_mode.node.teaser
+ module:
+ - node
+ - taxonomy
+ - user
+_core:
+ default_config_hash: Gy5PaLdfFhtFSRqJxV-DBTF5AocKgNA2CsCNNEbvx4c
+id: taxonomy_term
+label: 'Taxonomy term'
+module: taxonomy
+description: 'Content belonging to a certain taxonomy term.'
+tag: default
+base_table: node_field_data
+base_field: nid
+core: '8'
+display:
+ default:
+ id: default
+ display_title: Master
+ display_plugin: default
+ position: 0
+ display_options:
+ query:
+ type: views_query
+ options:
+ query_comment: ''
+ disable_sql_rewrite: false
+ distinct: false
+ replica: false
+ query_tags: { }
+ access:
+ type: perm
+ options:
+ perm: 'access content'
+ cache:
+ type: tag
+ options: { }
+ 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: 0
+ 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: ››
+ sorts:
+ sticky:
+ id: sticky
+ table: taxonomy_index
+ field: sticky
+ order: DESC
+ plugin_id: standard
+ relationship: none
+ group_type: group
+ admin_label: ''
+ exposed: false
+ expose:
+ label: ''
+ created:
+ id: created
+ table: taxonomy_index
+ field: created
+ order: DESC
+ plugin_id: date
+ relationship: none
+ group_type: group
+ admin_label: ''
+ exposed: false
+ expose:
+ label: ''
+ granularity: second
+ arguments:
+ tid:
+ id: tid
+ table: taxonomy_index
+ field: tid
+ relationship: none
+ group_type: group
+ admin_label: ''
+ default_action: 'not found'
+ exception:
+ value: ''
+ title_enable: false
+ title: All
+ title_enable: true
+ title: '{{ arguments.tid }}'
+ default_argument_type: fixed
+ default_argument_options:
+ argument: ''
+ default_argument_skip_url: false
+ summary_options:
+ base_path: ''
+ count: true
+ items_per_page: 25
+ override: false
+ summary:
+ sort_order: asc
+ number_of_records: 0
+ format: default_summary
+ specify_validation: true
+ validate:
+ type: 'entity:taxonomy_term'
+ fail: 'not found'
+ validate_options:
+ access: true
+ operation: view
+ multiple: 0
+ bundles: { }
+ break_phrase: false
+ add_table: false
+ require_value: false
+ reduce_duplicates: false
+ plugin_id: taxonomy_index_tid
+ filters:
+ langcode:
+ id: langcode
+ table: node_field_data
+ field: langcode
+ relationship: none
+ group_type: group
+ admin_label: ''
+ operator: in
+ value:
+ '***LANGUAGE_language_content***': '***LANGUAGE_language_content***'
+ group: 1
+ exposed: false
+ expose:
+ operator_id: ''
+ label: ''
+ description: ''
+ use_operator: false
+ operator: ''
+ identifier: ''
+ required: false
+ remember: false
+ multiple: false
+ remember_roles:
+ authenticated: authenticated
+ reduce: false
+ is_grouped: false
+ group_info:
+ label: ''
+ description: ''
+ identifier: ''
+ optional: true
+ widget: select
+ multiple: false
+ remember: false
+ default_group: All
+ default_group_multiple: { }
+ group_items: { }
+ plugin_id: language
+ entity_type: node
+ entity_field: langcode
+ status:
+ id: status
+ table: taxonomy_index
+ field: status
+ relationship: none
+ 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
+ is_grouped: false
+ group_info:
+ label: ''
+ description: ''
+ identifier: ''
+ optional: true
+ widget: select
+ multiple: false
+ remember: false
+ default_group: All
+ default_group_multiple: { }
+ group_items: { }
+ plugin_id: boolean
+ style:
+ type: default
+ options:
+ grouping: { }
+ row_class: ''
+ default_row_class: true
+ uses_fields: false
+ row:
+ type: 'entity:node'
+ options:
+ view_mode: teaser
+ header:
+ entity_taxonomy_term:
+ id: entity_taxonomy_term
+ table: views
+ field: entity_taxonomy_term
+ relationship: none
+ group_type: group
+ admin_label: ''
+ empty: true
+ tokenize: true
+ target: '{{ raw_arguments.tid }}'
+ view_mode: full
+ bypass_access: false
+ plugin_id: entity
+ footer: { }
+ empty: { }
+ relationships: { }
+ fields: { }
+ display_extenders: { }
+ link_url: ''
+ link_display: page_1
+ cache_metadata:
+ contexts:
+ - 'languages:language_interface'
+ - url
+ - url.query_args
+ - 'user.node_grants:view'
+ - user.permissions
+ max-age: -1
+ tags: { }
+ feed_1:
+ id: feed_1
+ display_title: Feed
+ display_plugin: feed
+ position: 2
+ display_options:
+ query:
+ type: views_query
+ options: { }
+ pager:
+ type: some
+ options:
+ items_per_page: 10
+ offset: 0
+ path: taxonomy/term/%/feed
+ displays:
+ page_1: page_1
+ default: '0'
+ style:
+ type: rss
+ options:
+ description: ''
+ grouping: { }
+ uses_fields: false
+ row:
+ type: node_rss
+ options:
+ relationship: none
+ view_mode: default
+ display_extenders: { }
+ cache_metadata:
+ contexts:
+ - 'languages:language_interface'
+ - url
+ - 'user.node_grants:view'
+ - user.permissions
+ max-age: -1
+ tags: { }
+ page_1:
+ id: page_1
+ display_title: Page
+ display_plugin: page
+ position: 1
+ display_options:
+ query:
+ type: views_query
+ options: { }
+ path: taxonomy/term/%
+ display_extenders: { }
+ cache_metadata:
+ contexts:
+ - 'languages:language_interface'
+ - url
+ - url.query_args
+ - 'user.node_grants:view'
+ - user.permissions
+ max-age: -1
+ tags: { }
diff --git a/config/sync/views.view.user_admin_people.yml b/config/sync/views.view.user_admin_people.yml
new file mode 100644
index 00000000..544bb9d7
--- /dev/null
+++ b/config/sync/views.view.user_admin_people.yml
@@ -0,0 +1,915 @@
+uuid: 8c9fbbfb-ba74-48af-9d5d-8bfbe900a0c6
+langcode: en
+status: true
+dependencies:
+ module:
+ - user
+_core:
+ default_config_hash: 7kCByILhEFqBK9eFmxHNVbEq2z3-pl-cwWjDnzLn67I
+id: user_admin_people
+label: People
+module: user
+description: 'Find and manage people interacting with your site.'
+tag: default
+base_table: users_field_data
+base_field: uid
+core: 8.x
+display:
+ default:
+ display_plugin: default
+ id: default
+ display_title: Master
+ position: 0
+ display_options:
+ access:
+ type: perm
+ options:
+ perm: 'administer users'
+ cache:
+ type: tag
+ query:
+ type: views_query
+ options:
+ disable_sql_rewrite: false
+ distinct: false
+ replica: false
+ query_comment: ''
+ query_tags: { }
+ exposed_form:
+ type: basic
+ options:
+ submit_button: Filter
+ reset_button: true
+ reset_button_label: Reset
+ exposed_sorts_label: 'Sort by'
+ expose_sort_order: true
+ sort_asc_label: Asc
+ sort_desc_label: Desc
+ pager:
+ type: full
+ options:
+ items_per_page: 50
+ offset: 0
+ id: 0
+ total_pages: 0
+ tags:
+ previous: '‹ Previous'
+ next: 'Next ›'
+ first: '« First'
+ last: 'Last »'
+ 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
+ quantity: 9
+ style:
+ type: table
+ options:
+ grouping: { }
+ row_class: ''
+ default_row_class: true
+ override: true
+ sticky: false
+ summary: ''
+ columns:
+ user_bulk_form: user_bulk_form
+ name: name
+ status: status
+ rid: rid
+ created: created
+ access: access
+ edit_node: edit_node
+ dropbutton: dropbutton
+ info:
+ user_bulk_form:
+ align: ''
+ separator: ''
+ empty_column: false
+ responsive: ''
+ name:
+ sortable: true
+ default_sort_order: asc
+ align: ''
+ separator: ''
+ empty_column: false
+ responsive: ''
+ status:
+ sortable: true
+ default_sort_order: asc
+ align: ''
+ separator: ''
+ empty_column: false
+ responsive: priority-low
+ rid:
+ sortable: false
+ default_sort_order: asc
+ align: ''
+ separator: ''
+ empty_column: false
+ responsive: priority-low
+ created:
+ sortable: true
+ default_sort_order: desc
+ align: ''
+ separator: ''
+ empty_column: false
+ responsive: priority-low
+ access:
+ sortable: true
+ default_sort_order: desc
+ align: ''
+ separator: ''
+ empty_column: false
+ responsive: priority-low
+ edit_node:
+ align: ''
+ separator: ''
+ empty_column: false
+ responsive: priority-low
+ dropbutton:
+ sortable: false
+ default_sort_order: asc
+ align: ''
+ separator: ''
+ empty_column: false
+ responsive: ''
+ default: created
+ empty_table: true
+ row:
+ type: fields
+ fields:
+ user_bulk_form:
+ id: user_bulk_form
+ table: users
+ field: user_bulk_form
+ relationship: none
+ group_type: group
+ admin_label: ''
+ label: 'Bulk update'
+ 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
+ plugin_id: user_bulk_form
+ entity_type: user
+ name:
+ id: name
+ table: users_field_data
+ field: name
+ relationship: none
+ group_type: group
+ admin_label: ''
+ label: Username
+ 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
+ plugin_id: field
+ type: user_name
+ entity_type: user
+ entity_field: name
+ status:
+ id: status
+ table: users_field_data
+ field: status
+ relationship: none
+ group_type: group
+ admin_label: ''
+ label: Status
+ 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
+ plugin_id: field
+ type: boolean
+ settings:
+ format: custom
+ format_custom_true: Active
+ format_custom_false: Blocked
+ entity_type: user
+ entity_field: status
+ roles_target_id:
+ id: roles_target_id
+ table: user__roles
+ field: roles_target_id
+ relationship: none
+ group_type: group
+ admin_label: ''
+ label: Roles
+ 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
+ type: ul
+ separator: ', '
+ plugin_id: user_roles
+ created:
+ id: created
+ table: users_field_data
+ field: created
+ relationship: none
+ group_type: group
+ admin_label: ''
+ label: 'Member for'
+ 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
+ type: timestamp_ago
+ settings:
+ future_format: '@interval'
+ past_format: '@interval'
+ granularity: 2
+ plugin_id: field
+ entity_type: user
+ entity_field: created
+ access:
+ id: access
+ table: users_field_data
+ field: access
+ relationship: none
+ group_type: group
+ admin_label: ''
+ label: 'Last access'
+ 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
+ type: timestamp_ago
+ settings:
+ future_format: '@interval hence'
+ past_format: '@interval ago'
+ granularity: 2
+ plugin_id: field
+ entity_type: user
+ entity_field: access
+ operations:
+ id: operations
+ table: users
+ field: operations
+ relationship: none
+ group_type: group
+ admin_label: ''
+ label: Operations
+ 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
+ destination: true
+ entity_type: user
+ plugin_id: entity_operations
+ mail:
+ id: mail
+ table: users_field_data
+ field: mail
+ relationship: none
+ group_type: group
+ admin_label: ''
+ label: ''
+ 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: false
+ 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: basic_string
+ settings: { }
+ 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
+ plugin_id: field
+ entity_type: user
+ entity_field: mail
+ filters:
+ combine:
+ id: combine
+ table: views
+ field: combine
+ relationship: none
+ group_type: group
+ admin_label: ''
+ operator: contains
+ value: ''
+ group: 1
+ exposed: true
+ expose:
+ operator_id: combine_op
+ label: 'Name or email contains'
+ description: ''
+ use_operator: false
+ operator: combine_op
+ identifier: user
+ required: false
+ remember: false
+ multiple: false
+ remember_roles:
+ authenticated: authenticated
+ anonymous: '0'
+ administrator: '0'
+ is_grouped: false
+ group_info:
+ label: ''
+ description: ''
+ identifier: ''
+ optional: true
+ widget: select
+ multiple: false
+ remember: false
+ default_group: All
+ default_group_multiple: { }
+ group_items: { }
+ fields:
+ name: name
+ mail: mail
+ plugin_id: combine
+ roles_target_id:
+ id: roles_target_id
+ table: user__roles
+ field: roles_target_id
+ relationship: none
+ group_type: group
+ admin_label: ''
+ operator: or
+ value: { }
+ group: 1
+ exposed: true
+ expose:
+ operator_id: roles_target_id_op
+ label: Role
+ description: ''
+ use_operator: false
+ operator: roles_target_id_op
+ identifier: role
+ required: false
+ remember: false
+ multiple: false
+ remember_roles:
+ authenticated: authenticated
+ anonymous: '0'
+ administrator: '0'
+ reduce: false
+ is_grouped: false
+ group_info:
+ label: ''
+ description: ''
+ identifier: ''
+ optional: true
+ widget: select
+ multiple: false
+ remember: false
+ default_group: All
+ default_group_multiple: { }
+ group_items: { }
+ reduce_duplicates: false
+ plugin_id: user_roles
+ permission:
+ id: permission
+ table: user__roles
+ field: permission
+ relationship: none
+ group_type: group
+ admin_label: ''
+ operator: or
+ value: { }
+ group: 1
+ exposed: true
+ expose:
+ operator_id: permission_op
+ label: Permission
+ description: ''
+ use_operator: false
+ operator: permission_op
+ identifier: permission
+ required: false
+ remember: false
+ multiple: false
+ remember_roles:
+ authenticated: authenticated
+ anonymous: '0'
+ administrator: '0'
+ reduce: false
+ is_grouped: false
+ group_info:
+ label: ''
+ description: ''
+ identifier: ''
+ optional: true
+ widget: select
+ multiple: false
+ remember: false
+ default_group: All
+ default_group_multiple: { }
+ group_items: { }
+ reduce_duplicates: false
+ plugin_id: user_permissions
+ status:
+ id: status
+ table: users_field_data
+ field: status
+ relationship: none
+ group_type: group
+ admin_label: ''
+ operator: '='
+ value: '1'
+ group: 1
+ exposed: true
+ expose:
+ operator_id: ''
+ label: ''
+ description: ''
+ use_operator: false
+ operator: status_op
+ identifier: status
+ required: false
+ remember: false
+ multiple: false
+ remember_roles:
+ authenticated: authenticated
+ anonymous: '0'
+ administrator: '0'
+ is_grouped: true
+ group_info:
+ label: Status
+ description: ''
+ identifier: status
+ optional: true
+ widget: select
+ multiple: false
+ remember: false
+ default_group: All
+ default_group_multiple: { }
+ group_items:
+ 1:
+ title: Active
+ operator: '='
+ value: '1'
+ 2:
+ title: Blocked
+ operator: '='
+ value: '0'
+ plugin_id: boolean
+ entity_type: user
+ entity_field: status
+ default_langcode:
+ id: default_langcode
+ table: users_field_data
+ field: default_langcode
+ relationship: none
+ 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
+ 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
+ entity_field: default_langcode
+ plugin_id: boolean
+ uid_raw:
+ id: uid_raw
+ table: users_field_data
+ field: uid_raw
+ relationship: none
+ group_type: group
+ admin_label: ''
+ operator: '!='
+ value:
+ min: ''
+ max: ''
+ value: '0'
+ group: 1
+ exposed: false
+ expose:
+ operator_id: '0'
+ label: ''
+ description: ''
+ use_operator: false
+ operator: ''
+ identifier: ''
+ required: false
+ remember: false
+ multiple: false
+ remember_roles:
+ authenticated: authenticated
+ is_grouped: false
+ group_info:
+ label: ''
+ description: ''
+ identifier: ''
+ optional: true
+ widget: select
+ multiple: false
+ remember: false
+ default_group: All
+ default_group_multiple: { }
+ group_items: { }
+ plugin_id: numeric
+ entity_type: user
+ sorts:
+ created:
+ id: created
+ table: users_field_data
+ field: created
+ relationship: none
+ group_type: group
+ admin_label: ''
+ order: DESC
+ exposed: false
+ expose:
+ label: ''
+ granularity: second
+ plugin_id: date
+ entity_type: user
+ entity_field: created
+ title: People
+ empty:
+ area_text_custom:
+ id: area_text_custom
+ table: views
+ field: area_text_custom
+ relationship: none
+ group_type: group
+ admin_label: ''
+ empty: true
+ tokenize: false
+ content: 'No people available.'
+ plugin_id: text_custom
+ use_more: false
+ use_more_always: false
+ use_more_text: more
+ display_comment: ''
+ use_ajax: false
+ hide_attachment_summary: false
+ show_admin_links: true
+ group_by: false
+ link_url: ''
+ link_display: page_1
+ css_class: ''
+ filter_groups:
+ operator: AND
+ groups:
+ 1: AND
+ display_extenders: { }
+ cache_metadata:
+ contexts:
+ - 'languages:language_content'
+ - 'languages:language_interface'
+ - url
+ - url.query_args
+ - user.permissions
+ max-age: 0
+ tags: { }
+ page_1:
+ display_plugin: page
+ id: page_1
+ display_title: Page
+ position: 1
+ display_options:
+ path: admin/people/list
+ show_admin_links: false
+ menu:
+ type: 'default tab'
+ title: List
+ description: 'Find and manage people interacting with your site.'
+ menu_name: admin
+ weight: -10
+ context: ''
+ tab_options:
+ type: normal
+ title: People
+ description: 'Manage user accounts, roles, and permissions.'
+ menu_name: admin
+ weight: 0
+ defaults:
+ show_admin_links: false
+ display_extenders: { }
+ cache_metadata:
+ contexts:
+ - 'languages:language_content'
+ - 'languages:language_interface'
+ - url
+ - url.query_args
+ - user.permissions
+ max-age: 0
+ tags: { }
diff --git a/config/sync/views.view.view_blog_post.yml b/config/sync/views.view.view_blog_post.yml
new file mode 100644
index 00000000..ca7644f5
--- /dev/null
+++ b/config/sync/views.view.view_blog_post.yml
@@ -0,0 +1,246 @@
+uuid: 4badbd3a-ebc7-4152-9e9a-a8f530aa62b3
+langcode: en
+status: true
+dependencies:
+ config:
+ - node.type.blog
+ module:
+ - node
+ - user
+id: view_blog_post
+label: 'Blog Post'
+module: views
+description: ''
+tag: ''
+base_table: node_field_data
+base_field: nid
+core: 8.x
+display:
+ default:
+ display_plugin: default
+ id: default
+ display_title: Master
+ position: 0
+ display_options:
+ access:
+ type: perm
+ options:
+ perm: 'access content'
+ cache:
+ type: tag
+ options: { }
+ query:
+ type: views_query
+ options:
+ disable_sql_rewrite: false
+ distinct: false
+ replica: false
+ query_comment: ''
+ query_tags: { }
+ exposed_form:
+ type: basic
+ options:
+ submit_button: Apply
+ reset_button: false
+ reset_button_label: Reset
+ exposed_sorts_label: 'Sort by'
+ expose_sort_order: true
+ sort_asc_label: Asc
+ sort_desc_label: Desc
+ pager:
+ type: some
+ options:
+ items_per_page: 3
+ offset: 0
+ style:
+ type: default
+ row:
+ type: fields
+ options:
+ default_field_elements: true
+ inline: { }
+ separator: ''
+ hide_empty: false
+ fields:
+ title:
+ id: title
+ table: node_field_data
+ field: title
+ entity_type: node
+ entity_field: title
+ label: ''
+ alter:
+ alter_text: false
+ make_link: false
+ absolute: false
+ trim: false
+ word_boundary: false
+ ellipsis: false
+ strip_tags: false
+ html: false
+ hide_empty: false
+ empty_zero: false
+ settings:
+ link_to_entity: true
+ plugin_id: field
+ relationship: none
+ group_type: group
+ admin_label: ''
+ exclude: false
+ element_type: ''
+ element_class: ''
+ element_label_type: ''
+ element_label_class: ''
+ element_label_colon: true
+ element_wrapper_type: ''
+ element_wrapper_class: ''
+ element_default_classes: true
+ empty: ''
+ hide_alter_empty: true
+ click_sort_column: value
+ type: string
+ group_column: value
+ group_columns: { }
+ group_rows: true
+ delta_limit: 0
+ delta_offset: 0
+ delta_reversed: false
+ delta_first_last: false
+ multi_type: separator
+ separator: ', '
+ field_api_classes: false
+ created:
+ id: created
+ table: node_field_data
+ field: created
+ relationship: none
+ group_type: group
+ admin_label: ''
+ label: ''
+ 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: false
+ 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: timestamp
+ settings:
+ date_format: medium
+ custom_date_format: ''
+ timezone: ''
+ 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: created
+ plugin_id: field
+ filters:
+ status:
+ value: '1'
+ table: node_field_data
+ field: status
+ plugin_id: boolean
+ entity_type: node
+ entity_field: status
+ id: status
+ expose:
+ operator: ''
+ group: 1
+ type:
+ id: type
+ table: node_field_data
+ field: type
+ value:
+ blog: blog
+ entity_type: node
+ entity_field: type
+ plugin_id: bundle
+ sorts:
+ created:
+ id: created
+ table: node_field_data
+ field: created
+ order: DESC
+ entity_type: node
+ entity_field: created
+ plugin_id: date
+ relationship: none
+ group_type: group
+ admin_label: ''
+ exposed: false
+ expose:
+ label: ''
+ granularity: second
+ title: 'Blog Post'
+ header: { }
+ footer: { }
+ empty: { }
+ relationships: { }
+ arguments: { }
+ display_extenders: { }
+ cache_metadata:
+ max-age: -1
+ contexts:
+ - 'languages:language_content'
+ - 'languages:language_interface'
+ - 'user.node_grants:view'
+ - user.permissions
+ tags: { }
+ page_1:
+ display_plugin: page
+ id: page_1
+ display_title: Page
+ position: 1
+ display_options:
+ display_extenders: { }
+ path: blogs
+ cache_metadata:
+ max-age: -1
+ contexts:
+ - 'languages:language_content'
+ - 'languages:language_interface'
+ - 'user.node_grants:view'
+ - user.permissions
+ tags: { }
diff --git a/config/sync/views.view.view_portfolio.yml b/config/sync/views.view.view_portfolio.yml
new file mode 100644
index 00000000..d7e0fda6
--- /dev/null
+++ b/config/sync/views.view.view_portfolio.yml
@@ -0,0 +1,314 @@
+uuid: 3522b84f-c56b-4268-8f17-a2ad98bdbda5
+langcode: en
+status: true
+dependencies:
+ config:
+ - field.storage.node.field_picture
+ - image.style.large
+ - node.type.portfolio
+ module:
+ - image
+ - node
+ - user
+id: view_portfolio
+label: Portfolio
+module: views
+description: ''
+tag: ''
+base_table: node_field_data
+base_field: nid
+core: 8.x
+display:
+ default:
+ display_plugin: default
+ id: default
+ display_title: Master
+ position: 0
+ display_options:
+ access:
+ type: perm
+ options:
+ perm: 'access content'
+ cache:
+ type: tag
+ options: { }
+ query:
+ type: views_query
+ options:
+ disable_sql_rewrite: false
+ distinct: false
+ replica: false
+ query_comment: ''
+ query_tags: { }
+ exposed_form:
+ type: basic
+ options:
+ submit_button: Apply
+ reset_button: false
+ reset_button_label: Reset
+ exposed_sorts_label: 'Sort by'
+ expose_sort_order: true
+ sort_asc_label: Asc
+ sort_desc_label: Desc
+ pager:
+ type: some
+ options:
+ items_per_page: 4
+ offset: 0
+ style:
+ type: default
+ row:
+ type: fields
+ options:
+ default_field_elements: true
+ inline: { }
+ separator: ''
+ hide_empty: false
+ fields:
+ title:
+ id: title
+ table: node_field_data
+ field: title
+ entity_type: node
+ entity_field: title
+ label: ''
+ alter:
+ alter_text: false
+ make_link: false
+ absolute: false
+ trim: false
+ word_boundary: false
+ ellipsis: false
+ strip_tags: false
+ html: false
+ hide_empty: false
+ empty_zero: false
+ settings:
+ link_to_entity: true
+ plugin_id: field
+ relationship: none
+ group_type: group
+ admin_label: ''
+ exclude: false
+ element_type: ''
+ element_class: ''
+ element_label_type: ''
+ element_label_class: ''
+ element_label_colon: true
+ element_wrapper_type: ''
+ element_wrapper_class: ''
+ element_default_classes: true
+ empty: ''
+ hide_alter_empty: true
+ click_sort_column: value
+ type: string
+ group_column: value
+ group_columns: { }
+ group_rows: true
+ delta_limit: 0
+ delta_offset: 0
+ delta_reversed: false
+ delta_first_last: false
+ multi_type: separator
+ separator: ', '
+ field_api_classes: false
+ field_picture:
+ id: field_picture
+ table: node__field_picture
+ field: field_picture
+ relationship: none
+ group_type: group
+ admin_label: ''
+ label: ''
+ 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: false
+ element_wrapper_type: ''
+ element_wrapper_class: ''
+ element_default_classes: true
+ empty: ''
+ hide_empty: false
+ empty_zero: false
+ hide_alter_empty: true
+ click_sort_column: target_id
+ type: image
+ settings:
+ image_style: large
+ image_link: ''
+ group_column: ''
+ 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
+ plugin_id: field
+ filters:
+ status:
+ value: '1'
+ table: node_field_data
+ field: status
+ plugin_id: boolean
+ entity_type: node
+ entity_field: status
+ id: status
+ expose:
+ operator: ''
+ group: 1
+ type:
+ id: type
+ table: node_field_data
+ field: type
+ value:
+ portfolio: portfolio
+ entity_type: node
+ entity_field: type
+ plugin_id: bundle
+ sorts:
+ created:
+ id: created
+ table: node_field_data
+ field: created
+ order: DESC
+ entity_type: node
+ entity_field: created
+ plugin_id: date
+ relationship: none
+ group_type: group
+ admin_label: ''
+ exposed: false
+ expose:
+ label: ''
+ granularity: second
+ title: Portfolio
+ header:
+ area:
+ id: area
+ table: views
+ field: area
+ relationship: none
+ group_type: group
+ admin_label: ''
+ empty: false
+ tokenize: false
+ content:
+ value: 'Web app & development with a focus quality functionality.'
+ format: basic_html
+ plugin_id: text
+ footer: { }
+ empty: { }
+ relationships: { }
+ arguments: { }
+ display_extenders: { }
+ use_more: true
+ use_more_always: true
+ use_more_text: 'View All Projects'
+ cache_metadata:
+ max-age: -1
+ contexts:
+ - 'languages:language_content'
+ - 'languages:language_interface'
+ - 'user.node_grants:view'
+ - user.permissions
+ tags:
+ - 'config:field.storage.node.field_picture'
+ block_1:
+ display_plugin: block
+ id: block_1
+ display_title: Block
+ position: 2
+ display_options:
+ display_extenders: { }
+ header:
+ area:
+ id: area
+ table: views
+ field: area
+ relationship: none
+ group_type: group
+ admin_label: ''
+ empty: false
+ tokenize: false
+ content:
+ value: 'Web & app development with a focus quality functionality.'
+ format: basic_html
+ plugin_id: text
+ defaults:
+ header: false
+ use_more: false
+ use_more_always: false
+ use_more_text: false
+ link_display: false
+ link_url: false
+ pager: true
+ link_display: page_1
+ link_url: ''
+ use_more: true
+ use_more_always: true
+ use_more_text: 'View All Projects'
+ cache_metadata:
+ max-age: -1
+ contexts:
+ - 'languages:language_content'
+ - 'languages:language_interface'
+ - 'user.node_grants:view'
+ - user.permissions
+ tags:
+ - 'config:field.storage.node.field_picture'
+ page_1:
+ display_plugin: page
+ id: page_1
+ display_title: Page
+ position: 1
+ display_options:
+ display_extenders: { }
+ path: portfolio
+ use_more: false
+ defaults:
+ use_more: false
+ use_more_always: false
+ use_more_text: false
+ use_more_always: true
+ use_more_text: 'View All Projects'
+ cache_metadata:
+ max-age: -1
+ contexts:
+ - 'languages:language_content'
+ - 'languages:language_interface'
+ - 'user.node_grants:view'
+ - user.permissions
+ tags:
+ - 'config:field.storage.node.field_picture'
diff --git a/config/sync/views.view.who_s_new.yml b/config/sync/views.view.who_s_new.yml
new file mode 100644
index 00000000..37aeec7b
--- /dev/null
+++ b/config/sync/views.view.who_s_new.yml
@@ -0,0 +1,193 @@
+uuid: 9cf2015e-4b69-40cd-a82c-629dfa35b1b1
+langcode: en
+status: true
+dependencies:
+ module:
+ - user
+_core:
+ default_config_hash: o_8fSWHZOVIbydZACGsSX09DtuJhqkRmNOzcVj-4bQI
+id: who_s_new
+label: 'Who''s new'
+module: user
+description: 'Shows a list of the newest user accounts on the site.'
+tag: default
+base_table: users_field_data
+base_field: uid
+core: 8.x
+display:
+ default:
+ display_plugin: default
+ id: default
+ display_title: Master
+ position: 0
+ display_options:
+ access:
+ type: perm
+ options:
+ perm: 'access content'
+ cache:
+ type: tag
+ options: { }
+ query:
+ type: views_query
+ options:
+ disable_sql_rewrite: false
+ distinct: false
+ replica: false
+ query_comment: ''
+ query_tags: { }
+ exposed_form:
+ type: basic
+ options:
+ submit_button: Apply
+ reset_button: false
+ reset_button_label: Reset
+ exposed_sorts_label: 'Sort by'
+ expose_sort_order: true
+ sort_asc_label: Asc
+ sort_desc_label: Desc
+ pager:
+ type: some
+ options:
+ items_per_page: 5
+ offset: 0
+ style:
+ type: html_list
+ row:
+ type: fields
+ fields:
+ name:
+ id: name
+ table: users_field_data
+ field: name
+ label: ''
+ plugin_id: field
+ type: user_name
+ alter:
+ alter_text: false
+ make_link: false
+ absolute: false
+ trim: false
+ word_boundary: false
+ ellipsis: false
+ strip_tags: false
+ html: false
+ hide_empty: false
+ empty_zero: false
+ relationship: none
+ group_type: group
+ admin_label: ''
+ exclude: false
+ element_type: ''
+ element_class: ''
+ element_label_type: ''
+ element_label_class: ''
+ element_label_colon: true
+ element_wrapper_type: ''
+ element_wrapper_class: ''
+ element_default_classes: true
+ empty: ''
+ hide_alter_empty: true
+ entity_type: user
+ entity_field: name
+ filters:
+ status:
+ value: '1'
+ table: users_field_data
+ field: status
+ id: status
+ expose:
+ operator: '0'
+ group: 1
+ plugin_id: boolean
+ entity_type: user
+ entity_field: status
+ access:
+ id: access
+ table: users_field_data
+ field: access
+ relationship: none
+ group_type: group
+ admin_label: ''
+ operator: '>'
+ value:
+ min: ''
+ max: ''
+ value: '1970-01-01'
+ type: date
+ group: 1
+ exposed: false
+ expose:
+ operator_id: '0'
+ label: ''
+ description: ''
+ use_operator: false
+ operator: ''
+ identifier: ''
+ required: false
+ remember: false
+ multiple: false
+ remember_roles:
+ authenticated: authenticated
+ is_grouped: false
+ group_info:
+ label: ''
+ description: ''
+ identifier: ''
+ optional: true
+ widget: select
+ multiple: false
+ remember: false
+ default_group: All
+ default_group_multiple: { }
+ group_items: { }
+ plugin_id: date
+ entity_type: user
+ entity_field: access
+ sorts:
+ created:
+ id: created
+ table: users_field_data
+ field: created
+ relationship: none
+ group_type: group
+ admin_label: ''
+ order: DESC
+ exposed: false
+ expose:
+ label: ''
+ granularity: second
+ plugin_id: date
+ entity_type: user
+ entity_field: created
+ title: 'Who''s new'
+ header: { }
+ footer: { }
+ empty: { }
+ relationships: { }
+ arguments: { }
+ display_extenders: { }
+ cache_metadata:
+ contexts:
+ - 'languages:language_content'
+ - 'languages:language_interface'
+ - user.permissions
+ max-age: -1
+ tags: { }
+ block_1:
+ display_plugin: block
+ id: block_1
+ display_title: 'Who''s new'
+ position: 1
+ display_options:
+ display_description: 'A list of new users'
+ block_description: 'Who''s new'
+ block_category: User
+ display_extenders: { }
+ cache_metadata:
+ contexts:
+ - 'languages:language_content'
+ - 'languages:language_interface'
+ - user.permissions
+ max-age: -1
+ tags: { }
diff --git a/config/sync/views.view.who_s_online.yml b/config/sync/views.view.who_s_online.yml
new file mode 100644
index 00000000..a253a838
--- /dev/null
+++ b/config/sync/views.view.who_s_online.yml
@@ -0,0 +1,222 @@
+uuid: 10372d2a-6551-4b44-9000-1eb4bb28ebf4
+langcode: en
+status: true
+dependencies:
+ module:
+ - user
+_core:
+ default_config_hash: m0vmYmhrzMR6S_IC0UlK0Cl-q5lEvL8-EbxbbcDtk34
+id: who_s_online
+label: 'Who''s online block'
+module: user
+description: 'Shows the user names of the most recently active users, and the total number of active users.'
+tag: default
+base_table: users_field_data
+base_field: uid
+core: 8.x
+display:
+ default:
+ display_plugin: default
+ id: default
+ display_title: Master
+ position: 0
+ display_options:
+ access:
+ type: perm
+ options:
+ perm: 'access user profiles'
+ 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: some
+ options:
+ items_per_page: 10
+ offset: 0
+ style:
+ type: html_list
+ options:
+ grouping: { }
+ row_class: ''
+ default_row_class: true
+ type: ul
+ wrapper_class: item-list
+ class: ''
+ row:
+ type: fields
+ fields:
+ name:
+ id: name
+ table: users_field_data
+ field: name
+ label: ''
+ plugin_id: field
+ type: user_name
+ alter:
+ alter_text: false
+ make_link: false
+ absolute: false
+ trim: false
+ word_boundary: false
+ ellipsis: false
+ strip_tags: false
+ html: false
+ hide_empty: false
+ empty_zero: false
+ relationship: none
+ group_type: group
+ admin_label: ''
+ exclude: false
+ element_type: ''
+ element_class: ''
+ element_label_type: ''
+ element_label_class: ''
+ element_label_colon: true
+ element_wrapper_type: ''
+ element_wrapper_class: ''
+ element_default_classes: true
+ empty: ''
+ hide_alter_empty: true
+ entity_type: user
+ entity_field: name
+ filters:
+ status:
+ value: '1'
+ table: users_field_data
+ field: status
+ id: status
+ expose:
+ operator: '0'
+ group: 1
+ plugin_id: boolean
+ entity_type: user
+ entity_field: status
+ access:
+ id: access
+ table: users_field_data
+ field: access
+ relationship: none
+ group_type: group
+ admin_label: ''
+ operator: '>='
+ value:
+ min: ''
+ max: ''
+ value: '-15 minutes'
+ type: offset
+ group: 1
+ exposed: false
+ expose:
+ operator_id: access_op
+ label: 'Last access'
+ description: 'A user is considered online for this long after they have last viewed a page.'
+ use_operator: false
+ operator: access_op
+ identifier: access
+ required: false
+ remember: false
+ multiple: false
+ remember_roles:
+ authenticated: authenticated
+ anonymous: '0'
+ administrator: '0'
+ is_grouped: false
+ group_info:
+ label: ''
+ description: ''
+ identifier: ''
+ optional: true
+ widget: select
+ multiple: false
+ remember: false
+ default_group: All
+ default_group_multiple: { }
+ group_items: { }
+ plugin_id: date
+ entity_type: user
+ entity_field: access
+ sorts:
+ access:
+ id: access
+ table: users_field_data
+ field: access
+ order: DESC
+ relationship: none
+ group_type: group
+ admin_label: ''
+ exposed: false
+ expose:
+ label: ''
+ granularity: second
+ plugin_id: date
+ entity_type: user
+ entity_field: access
+ title: 'Who''s online'
+ header:
+ result:
+ id: result
+ table: views
+ field: result
+ relationship: none
+ group_type: group
+ admin_label: ''
+ empty: false
+ content: 'There are currently @total users online.'
+ plugin_id: result
+ footer: { }
+ empty:
+ area_text_custom:
+ id: area_text_custom
+ table: views
+ field: area_text_custom
+ relationship: none
+ group_type: group
+ admin_label: ''
+ empty: true
+ tokenize: false
+ content: 'There are currently 0 users online.'
+ plugin_id: text_custom
+ relationships: { }
+ arguments: { }
+ display_extenders: { }
+ cache_metadata:
+ contexts:
+ - 'languages:language_content'
+ - 'languages:language_interface'
+ - user.permissions
+ max-age: -1
+ tags: { }
+ who_s_online_block:
+ display_plugin: block
+ id: who_s_online_block
+ display_title: 'Who''s online'
+ position: 1
+ display_options:
+ block_description: 'Who''s online'
+ display_description: 'A list of users that are currently logged in.'
+ display_extenders: { }
+ cache_metadata:
+ contexts:
+ - 'languages:language_content'
+ - 'languages:language_interface'
+ - user.permissions
+ max-age: -1
+ tags: { }
diff --git a/config/sync/webform.settings.yml b/config/sync/webform.settings.yml
new file mode 100644
index 00000000..9339dc2c
--- /dev/null
+++ b/config/sync/webform.settings.yml
@@ -0,0 +1,91 @@
+settings:
+ default_page_base_path: form
+ default_form_closed_message: 'Sorry...This form is closed to new submissions.'
+ default_form_exception_message: 'Unable to display this webform. Please contact the site administrator.'
+ default_form_submit_label: Submit
+ default_form_submit_once: false
+ default_form_confidential_message: 'This form is confidential. You must Log out to submit it.'
+ default_form_disable_back: false
+ default_form_unsaved: false
+ default_form_novalidate: false
+ default_form_details_toggle: true
+ form_classes: "container-inline clearfix\nform--inline clearfix\nmessages messages--error\nmessages messages--warning\nmessages messages--status\n"
+ button_classes: ''
+ default_wizard_prev_button_label: '< Previous Page'
+ default_wizard_next_button_label: 'Next Page >'
+ default_wizard_start_label: Start
+ default_wizard_complete_label: Complete
+ default_preview_next_button_label: Preview
+ default_preview_prev_button_label: '< Previous'
+ default_preview_message: 'Please review your submission. Your submission is not complete until you press the "Submit" button!'
+ default_draft_button_label: 'Save Draft'
+ default_draft_saved_message: 'Submission saved. You may return to this form later and it will restore the current values.'
+ default_draft_loaded_message: 'A partially-completed form was found. Please complete the remaining portions.'
+ default_confirmation_message: 'New submission added to [webform:title].'
+ default_confirmation_back_label: 'Back to form'
+ confirmation_classes: "messages messages--error\nmessages messages--warning\nmessages messages--status\n"
+ confirmation_back_classes: "button\n"
+ default_limit_total_message: 'No more submissions are permitted.'
+ default_limit_user_message: 'No more submissions are permitted.'
+assets:
+ css: ''
+ javascript: ''
+export:
+ exporter: delimited
+ delimiter: ','
+ multiple_delimiter: ;
+ excel: false
+ file_name: 'submission-[webform_submission:serial]'
+ header_format: label
+ header_prefix: true
+ header_prefix_label_delimiter: ': '
+ header_prefix_key_delimiter: __
+ composite_element_item_format: label
+ options_format: compact
+ options_item_format: label
+ entity_reference_format: link
+ likert_answers_format: label
+ signature_format: status
+batch:
+ default_batch_export_size: 500
+ default_batch_update_size: 500
+ default_batch_delete_size: 500
+purge_settings:
+ cron_size: 100
+elements:
+ allowed_tags: admin
+ wrapper_classes: "container-inline clearfix\nform--inline clearfix\nmessages messages--error\nmessages messages--warning\nmessages messages--status\n"
+ classes: "container-inline clearfix\nform--inline clearfix\nmessages messages--error\nmessages messages--warning\nmessages messages--status\n"
+ default_description_display: ''
+ default_google_maps_api_key: ''
+ excluded_types: { }
+file:
+ file_public: false
+ default_max_filesize: ''
+ default_managed_file_extensions: 'gif jpg png bmp eps tif pict psd txt rtf html odf pdf doc docx ppt pptx xls xlsx xml avi mov mp3 ogg wav bz2 dmg gz jar rar sit svg tar zip'
+ default_audio_file_extensions: 'mp3 ogg wav'
+ default_document_file_extensions: 'txt rtf pdf doc docx odt ppt pptx odp xls xlsx ods'
+ default_image_file_extensions: 'gif jpg png svg'
+ default_video_file_extensions: 'avi mov mp4 ogg wav webm'
+format: { }
+mail:
+ default_from_mail: '[site:mail]'
+ default_from_name: '[site:name]'
+ default_subject: 'Webform submission from: [webform_submission:source-entity]'
+ default_body_text: "Submitted on [webform_submission:created]\nSubmitted by: [webform_submission:user]\n\nSubmitted values are:\n[webform_submission:values]\n"
+ default_body_html: "Submitted on [webform_submission:created]
\nSubmitted by: [webform_submission:user]
\nSubmitted values are:
\n[webform_submission:values]\n"
+test:
+ types: "checkbox:\n - true\ncolor:\n - '#ffffcc'\n - '#ffffcc'\n - '#ccffff'\ndate:\n - '1942-06-18'\n - '1940-07-07'\n - '1943-02-25'\n - '1940-10-09'\ndatetime:\n - '1942-06-18'\n - '1940-07-07'\n - '1943-02-25'\n - '1940-10-09'\ndatelist:\n - '1942-06-18'\n - '1940-07-07'\n - '1943-02-25'\n - '1940-10-09'\nemail:\n - 'example@example.com'\n - 'test@test.com'\n - 'random@random.com'\nlanguage_select:\n - en\nmachine_name:\n - 'loremipsum'\n - 'oratione'\n - 'dixisset'\ntel:\n - '123-456-7890'\n - '098-765-4321'\ntextarea:\n - 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Negat esse eam, inquit, propter se expetendam. Primum Theophrasti, Strato, physicum se voluit; Id mihi magnum videtur. Itaque mihi non satis videmini considerare quod iter sit naturae quaeque progressio. Quare hoc videndum est, possitne nobis hoc ratio philosophorum dare. Est enim tanti philosophi tamque nobilis audacter sua decreta defendere.'\n - 'Huius, Lyco, oratione locuples, rebus ipsis ielunior. Duo Reges: constructio interrete. Sed haec in pueris; Sed utrum hortandus es nobis, Luci, inquit, an etiam tua sponte propensus es? Sapiens autem semper beatus est et est aliquando in dolore; Immo videri fortasse. Paulum, cum regem Persem captum adduceret, eodem flumine invectio? Et ille ridens: Video, inquit, quid agas;'\n - 'Quae cum dixisset, finem ille. Quamquam non negatis nos intellegere quid sit voluptas, sed quid ille dicat. Progredientibus autem aetatibus sensim tardeve potius quasi nosmet ipsos cognoscimus. Gloriosa ostentatio in constituendo summo bono. Qui-vere falsone, quaerere mittimus-dicitur oculis se privasse; Duarum enim vitarum nobis erunt instituta capienda. Comprehensum, quod cognitum non habet? Qui enim existimabit posse se miserum esse beatus non erit. Causa autem fuit huc veniendi ut quosdam hinc libros promerem. Nunc omni virtuti vitium contrario nomine opponitur.'\ntext_format:\n - value: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Negat esse eam, inquit, propter se expetendam. Primum Theophrasti, Strato, physicum se voluit; Id mihi magnum videtur. Itaque mihi non satis videmini considerare quod iter sit naturae quaeque progressio. Quare hoc videndum est, possitne nobis hoc ratio philosophorum dare. Est enim tanti philosophi tamque nobilis audacter sua decreta defendere.
'\n - value: 'Huius, Lyco, oratione locuples, rebus ipsis ielunior. Duo Reges: constructio interrete. Sed haec in pueris; Sed utrum hortandus es nobis, Luci, inquit, an etiam tua sponte propensus es? Sapiens autem semper beatus est et est aliquando in dolore; Immo videri fortasse. Paulum, cum regem Persem captum adduceret, eodem flumine invectio? Et ille ridens: Video, inquit, quid agas;
'\n - value: 'Quae cum dixisset, finem ille. Quamquam non negatis nos intellegere quid sit voluptas, sed quid ille dicat. Progredientibus autem aetatibus sensim tardeve potius quasi nosmet ipsos cognoscimus. Gloriosa ostentatio in constituendo summo bono. Qui-vere falsone, quaerere mittimus-dicitur oculis se privasse; Duarum enim vitarum nobis erunt instituta capienda. Comprehensum, quod cognitum non habet? Qui enim existimabit posse se miserum esse beatus non erit. Causa autem fuit huc veniendi ut quosdam hinc libros promerem. Nunc omni virtuti vitium contrario nomine opponitur.
'\nurl:\n - 'http://example.com'\n - 'http://test.com'\nwebform_creditcard_number:\n - '4111111111111111'\nwebform_email_confirm:\n - 'example@example.com'\n - 'test@test.com'\n - 'random@random.com'\nwebform_email_multiple:\n - 'example@example.com, test@test.com, random@random.com'\nwebform_location:\n - value: 'The White House, 1600 Pennsylvania Ave NW, Washington, DC 20500, USA'\n - value: 'London SW1A 1AA, United Kingdom'\n - value: 'Moscow, Russia, 10307'\nwebform_time:\n - '09:00'\n - '17:00'\n"
+ names: "first_name:\n - 'John'\n - 'Paul'\n - 'Ringo'\n - 'George'\nlast_name:\n - 'Lennon'\n - 'McCartney'\n - 'Starr'\n - 'Harrison'\naddress:\n - '10 Main Street'\n - '11 Brook Alley Road. APT 1'\nzip:\n - '11111'\n - '12345'\n - '12345-6789'\nphone:\n - '123-456-7890'\n - '098-765-4321'\ncity:\n - 'Springfield'\n - 'Pleasantville'\n - 'Hill Valley'\nurl:\n - 'http://example.com'\n - 'http://test.com'\ndefault:\n - 'Loremipsum'\n - 'Oratione'\n - 'Dixisset'\n"
+ui:
+ video_display: dialog
+ details_save: true
+ dialog_disabled: false
+ offcanvas_disabled: false
+ html_editor_disabled: false
+library:
+ cdn: false
+langcode: en
+third_party_settings: { }
+_core:
+ default_config_hash: SCMmRNOIlKXCV4kwgZt4A45-lnoRPqsAPKA8T4czegQ
diff --git a/config/sync/webform.webform.contact.yml b/config/sync/webform.webform.contact.yml
new file mode 100644
index 00000000..741250f5
--- /dev/null
+++ b/config/sync/webform.webform.contact.yml
@@ -0,0 +1,161 @@
+uuid: 2e2b2ce4-01d8-4c8b-b105-8ec4e5983a51
+langcode: en
+status: open
+dependencies:
+ enforced:
+ module:
+ - webform
+_core:
+ default_config_hash: 60Y_Mb8Wnw4EJBuq9xuQ0Lsq9IJvjQQfTs-rw4gZ-z8
+open: null
+close: null
+uid: null
+template: false
+id: contact
+title: Contact
+description: 'Basic email contact webform.'
+category: null
+elements: "name:\n '#title': 'Your Name'\n '#type': textfield\n '#required': true\n '#default_value': '[webform-authenticated-user:display-name]'\nemail:\n '#title': 'Your Email'\n '#type': email\n '#required': true\n '#default_value': '[webform-authenticated-user:mail]'\nsubject:\n '#title': Subject\n '#type': textfield\n '#required': true\n '#test': 'Testing contact webform from [site:name]'\nmessage:\n '#title': Message\n '#type': textarea\n '#required': true\n '#test': 'Please ignore this email.'\n"
+css: ''
+javascript: ''
+settings:
+ page: true
+ page_submit_path: ''
+ page_confirm_path: ''
+ form_submit_label: 'Send message'
+ form_submit_once: false
+ form_submit_attributes: { }
+ form_exception_message: ''
+ form_closed_message: ''
+ form_previous_submissions: true
+ form_confidential: false
+ form_confidential_message: ''
+ form_prepopulate: false
+ form_prepopulate_source_entity: false
+ form_disable_autocomplete: false
+ form_novalidate: false
+ form_unsaved: false
+ form_disable_back: false
+ form_autofocus: false
+ form_details_toggle: false
+ wizard_progress_bar: true
+ wizard_progress_pages: false
+ wizard_progress_percentage: false
+ wizard_next_button_label: ''
+ wizard_next_button_attributes: { }
+ wizard_prev_button_label: ''
+ wizard_prev_button_attributes: { }
+ wizard_start_label: ''
+ wizard_complete: true
+ wizard_complete_label: ''
+ preview: 0
+ preview_next_button_label: ''
+ preview_next_button_attributes: { }
+ preview_prev_button_label: ''
+ preview_prev_button_attributes: { }
+ preview_message: ''
+ draft: ''
+ draft_auto_save: false
+ draft_button_label: ''
+ draft_button_attributes: { }
+ draft_saved_message: ''
+ draft_loaded_message: ''
+ confirmation_type: url_message
+ confirmation_title: ''
+ confirmation_message: 'Your message has been sent.'
+ confirmation_url: ''
+ confirmation_attributes: { }
+ confirmation_back: true
+ confirmation_back_label: ''
+ confirmation_back_attributes: { }
+ limit_total: null
+ limit_total_message: ''
+ limit_user: null
+ limit_user_message: ''
+ purge: none
+ purge_days: null
+ entity_limit_total: null
+ entity_limit_user: null
+ results_disabled: false
+ results_disabled_ignore: false
+ token_update: false
+access:
+ create:
+ roles:
+ - anonymous
+ - authenticated
+ users: { }
+ view_any:
+ roles: { }
+ users: { }
+ update_any:
+ roles: { }
+ users: { }
+ delete_any:
+ roles: { }
+ users: { }
+ purge_any:
+ roles: { }
+ users: { }
+ view_own:
+ roles: { }
+ users: { }
+ update_own:
+ roles: { }
+ users: { }
+ delete_own:
+ roles: { }
+ users: { }
+handlers:
+ email_confirmation:
+ id: email
+ label: 'Email confirmation'
+ handler_id: email_confirmation
+ status: true
+ weight: 1
+ settings:
+ to_mail: '[webform_submission:values:email:raw]'
+ cc_mail: ''
+ bcc_mail: ''
+ from_mail: default
+ from_name: default
+ subject: '[webform_submission:values:subject:value]'
+ body: '[webform_submission:values:message:value]'
+ excluded_elements: { }
+ html: true
+ attachments: false
+ debug: false
+ states:
+ - completed
+ to_options: { }
+ cc_options: { }
+ bcc_options: { }
+ from_options: { }
+ reply_to: ''
+ return_path: ''
+ email_notification:
+ id: email
+ label: 'Email notification'
+ handler_id: email_notification
+ status: true
+ weight: 1
+ settings:
+ to_mail: default
+ cc_mail: ''
+ bcc_mail: ''
+ from_mail: '[webform_submission:values:email:raw]'
+ from_name: '[webform_submission:values:name:value]'
+ subject: '[webform_submission:values:subject:value]'
+ body: '[webform_submission:values:message:value]'
+ excluded_elements: { }
+ html: true
+ attachments: false
+ debug: false
+ states:
+ - completed
+ to_options: { }
+ cc_options: { }
+ bcc_options: { }
+ from_options: { }
+ reply_to: ''
+ return_path: ''
diff --git a/config/sync/webform.webform.contact_me.yml b/config/sync/webform.webform.contact_me.yml
new file mode 100644
index 00000000..b4bdb672
--- /dev/null
+++ b/config/sync/webform.webform.contact_me.yml
@@ -0,0 +1,104 @@
+uuid: 19f1be55-53b8-4d8a-a0b9-a88b5227347b
+langcode: en
+status: open
+dependencies: { }
+open: null
+close: null
+uid: 1
+template: false
+id: contact_me
+title: 'Contact Me'
+description: ''
+category: null
+elements: "name:\n '#type': textfield\n '#title': Name\n '#required': true\n '#required_error': 'Type your name'\nemail:\n '#type': email\n '#title': Email\n '#required': true\n '#required_error': 'Type your email'\nphone:\n '#type': tel\n '#title': Phone\nhow_did_you_find_me_:\n '#type': select\n '#title': 'How did you find me?'\n '#options':\n drupal.org: drupal.org\n 'Search Engine': 'Search Engine'\n Recommendation: Recommendation\n 'Meet up': 'Meet up'\n Other: Other\n"
+css: ''
+javascript: ''
+settings:
+ page: true
+ page_submit_path: ''
+ page_confirm_path: ''
+ form_submit_label: ''
+ form_submit_once: false
+ form_submit_attributes: { }
+ form_exception_message: ''
+ form_closed_message: ''
+ form_previous_submissions: true
+ form_confidential: false
+ form_confidential_message: ''
+ form_prepopulate: false
+ form_prepopulate_source_entity: false
+ form_disable_autocomplete: false
+ form_novalidate: false
+ form_unsaved: false
+ form_disable_back: false
+ form_autofocus: false
+ form_details_toggle: false
+ wizard_progress_bar: true
+ wizard_progress_pages: false
+ wizard_progress_percentage: false
+ wizard_next_button_label: ''
+ wizard_next_button_attributes: { }
+ wizard_prev_button_label: ''
+ wizard_prev_button_attributes: { }
+ wizard_start_label: ''
+ wizard_complete: true
+ wizard_complete_label: ''
+ preview: 0
+ preview_next_button_label: ''
+ preview_next_button_attributes: { }
+ preview_prev_button_label: ''
+ preview_prev_button_attributes: { }
+ preview_message: ''
+ draft: ''
+ draft_auto_save: false
+ draft_button_label: ''
+ draft_button_attributes: { }
+ draft_saved_message: ''
+ draft_loaded_message: ''
+ confirmation_type: page
+ confirmation_title: ''
+ confirmation_message: ''
+ confirmation_url: ''
+ confirmation_attributes: { }
+ confirmation_back: true
+ confirmation_back_label: ''
+ confirmation_back_attributes: { }
+ limit_total: null
+ limit_total_message: ''
+ limit_user: null
+ limit_user_message: ''
+ purge: none
+ purge_days: null
+ entity_limit_total: null
+ entity_limit_user: null
+ results_disabled: false
+ results_disabled_ignore: false
+ token_update: false
+access:
+ create:
+ roles:
+ - anonymous
+ - authenticated
+ users: { }
+ view_any:
+ roles: { }
+ users: { }
+ update_any:
+ roles: { }
+ users: { }
+ delete_any:
+ roles: { }
+ users: { }
+ purge_any:
+ roles: { }
+ users: { }
+ view_own:
+ roles: { }
+ users: { }
+ update_own:
+ roles: { }
+ users: { }
+ delete_own:
+ roles: { }
+ users: { }
+handlers: { }
diff --git a/config/sync/webform.webform_options.country_codes.yml b/config/sync/webform.webform_options.country_codes.yml
new file mode 100644
index 00000000..8e1ae8d5
--- /dev/null
+++ b/config/sync/webform.webform_options.country_codes.yml
@@ -0,0 +1,13 @@
+uuid: 7f28fc05-7c2c-4d8e-af26-61ba5b498ad8
+langcode: en
+status: true
+dependencies:
+ enforced:
+ module:
+ - webform
+_core:
+ default_config_hash: WKyw6_wHd1Ls-12ra-byuG23rJPOaCO9o6QrLYo0fbY
+id: country_codes
+label: 'Country codes'
+category: null
+options: ''
diff --git a/config/sync/webform.webform_options.country_names.yml b/config/sync/webform.webform_options.country_names.yml
new file mode 100644
index 00000000..8b20e9f2
--- /dev/null
+++ b/config/sync/webform.webform_options.country_names.yml
@@ -0,0 +1,13 @@
+uuid: 68abfbe8-5feb-46b8-a31b-14d3bf530d1f
+langcode: en
+status: true
+dependencies:
+ enforced:
+ module:
+ - webform
+_core:
+ default_config_hash: LcoGYtMhMwy6X5Wryrr_mUqNPzdSCVNcyqZULa_7qo0
+id: country_names
+label: 'Country names'
+category: null
+options: ''
diff --git a/config/sync/webform.webform_options.creditcard_codes.yml b/config/sync/webform.webform_options.creditcard_codes.yml
new file mode 100644
index 00000000..3bca2408
--- /dev/null
+++ b/config/sync/webform.webform_options.creditcard_codes.yml
@@ -0,0 +1,13 @@
+uuid: a831822c-e58b-4f38-8c3c-eab8791fb0e5
+langcode: en
+status: true
+dependencies:
+ enforced:
+ module:
+ - webform
+_core:
+ default_config_hash: Ai9t0SUFQABCrwdqoi8LBqhaMzROfaFHGgsURpEWnm4
+id: creditcard_codes
+label: 'Credit card codes'
+category: null
+options: "VI: 'Visa'\nMC: 'Mastercard'\nAE: 'American Express'\nDC: 'Discover'\n"
diff --git a/config/sync/webform.webform_options.days.yml b/config/sync/webform.webform_options.days.yml
new file mode 100644
index 00000000..7f9c15e2
--- /dev/null
+++ b/config/sync/webform.webform_options.days.yml
@@ -0,0 +1,13 @@
+uuid: 6a13f601-a413-40dc-8ac0-df01312a293a
+langcode: en
+status: true
+dependencies:
+ enforced:
+ module:
+ - webform
+_core:
+ default_config_hash: T744d_CMtx_CsVZD1MNNvyiSNlemzmFgmzVdBKtuKq8
+id: days
+label: Days
+category: null
+options: "Sunday: Sunday\nMonday: Monday\nTuesday: Tuesday\nWednesday: Wednesday\nThursday: Thursday\nFriday: Friday\nSaturday: Saturday\n"
diff --git a/config/sync/webform.webform_options.education.yml b/config/sync/webform.webform_options.education.yml
new file mode 100644
index 00000000..c10f8d68
--- /dev/null
+++ b/config/sync/webform.webform_options.education.yml
@@ -0,0 +1,13 @@
+uuid: 11b80eb2-ebb3-495a-b923-ac38989f9127
+langcode: en
+status: true
+dependencies:
+ enforced:
+ module:
+ - webform
+_core:
+ default_config_hash: cidMez3wHXoTzTg_4KqylNWeDY2lYJ-DRLIAF7xq57M
+id: education
+label: Education
+category: null
+options: "High School: High School\nAssociate Degree: Associate Degree\nAssociate Degree: Associate Degree\nGraduate or Professional Degree: Graduate or Professional Degree\nSome College: Some College\n"
diff --git a/config/sync/webform.webform_options.employment_status.yml b/config/sync/webform.webform_options.employment_status.yml
new file mode 100644
index 00000000..6f42265b
--- /dev/null
+++ b/config/sync/webform.webform_options.employment_status.yml
@@ -0,0 +1,13 @@
+uuid: 83d28b24-ecf1-47e6-935d-996ad704696a
+langcode: en
+status: true
+dependencies:
+ enforced:
+ module:
+ - webform
+_core:
+ default_config_hash: 6iKOLiv3WqdDwbLEYesK2txBl-1W8frLFe3PbT8-AaE
+id: employment_status
+label: 'Employment status'
+category: null
+options: "'Full Time': 'Full Time'\n'Part Time': 'Part Time'\n'Military': 'Military'\nUnemployed: Unemployed\nRetired: Retired\n"
diff --git a/config/sync/webform.webform_options.ethnicity.yml b/config/sync/webform.webform_options.ethnicity.yml
new file mode 100644
index 00000000..f76e7702
--- /dev/null
+++ b/config/sync/webform.webform_options.ethnicity.yml
@@ -0,0 +1,13 @@
+uuid: 07575d75-2bf9-4366-9b91-f79103d506e5
+langcode: en
+status: true
+dependencies:
+ enforced:
+ module:
+ - webform
+_core:
+ default_config_hash: SSV6f9SV3qO5qcz99jSqj7-2eGNaD9RfOYDdMPUffew
+id: ethnicity
+label: Ethnicity
+category: null
+options: "Caucasian: Caucasian\n'Latino/Hispanic': 'Latino/Hispanic'\n'Middle Eastern': 'Middle Eastern'\nAfrican: African\nCaribbean: Caribbean\n'South Asian': 'South Asian'\n'East Asian': 'East Asian'\nMixed: Mixed\n"
diff --git a/config/sync/webform.webform_options.gender.yml b/config/sync/webform.webform_options.gender.yml
new file mode 100644
index 00000000..053aca9d
--- /dev/null
+++ b/config/sync/webform.webform_options.gender.yml
@@ -0,0 +1,13 @@
+uuid: 43ac73be-2347-402a-9805-9d04b4ce25ec
+langcode: en
+status: true
+dependencies:
+ enforced:
+ module:
+ - webform
+_core:
+ default_config_hash: 6WYQFjFAQkeNPRRklUX_i7UaJK_Uw3iNDU7ux2j3pCo
+id: gender
+label: Gender
+category: null
+options: "Male: Male\nFemale: Female\nTransgender: Transgender\n"
diff --git a/config/sync/webform.webform_options.industry.yml b/config/sync/webform.webform_options.industry.yml
new file mode 100644
index 00000000..33907ceb
--- /dev/null
+++ b/config/sync/webform.webform_options.industry.yml
@@ -0,0 +1,13 @@
+uuid: 97f297ac-9719-4ea6-b40b-3dc219d7b232
+langcode: en
+status: true
+dependencies:
+ enforced:
+ module:
+ - webform
+_core:
+ default_config_hash: AkLS04Kjzd3Z8UBlMVBMBYgJdpYZhF9ZVyPIUQs9dRk
+id: industry
+label: Industry
+category: null
+options: "Accounting/Finance: Accounting/Finance\nAdvertising/Public Relations: Advertising/Public Relations\nAerospace/Aviation: Aerospace/Aviation\nArts/Entertainment/Publishing: Arts/Entertainment/Publishing\nAutomotive: Automotive\nBanking/Mortgage: Banking/Mortgage\nBusiness Development: Business Development\nBusiness Opportunity: Business Opportunity\nClerical/Administrative: Clerical/Administrative\nConstruction/Facilities: Construction/Facilities\nConsumer Goods: Consumer Goods\nCustomer Service: Customer Service\nEducation/Training: Education/Training\nEnergy/Utilities: Energy/Utilities\nEngineering: Engineering\nGovernment/Military: Government/Military\nHealthcare: Healthcare\nHospitality/Travel: Hospitality/Travel\nHuman Resources: Human Resources\nInstallation/Maintenance: Installation/Maintenance\nInsurance: Insurance\nInternet: Internet\nLaw Enforcement/Security: Law Enforcement/Security\nLegal: Legal\nManagement/Executive: Management/Executive\nManufacturing/Operations: Manufacturing/Operations\nMarketing: Marketing\nNon-Profit/Volunteer: Non-Profit/Volunteer\nPharmaceutical/Biotech: Pharmaceutical/Biotech\nProfessional Services: Professional Services\nReal Estate: Real Estate\nRestaurant/Food Service: Restaurant/Food Service\nRetail: Retail\nSales: Sales\nScience/Research: Science/Research\nSkilled Labor: Skilled Labor\nTechnology: Technology\nTelecommunications: Telecommunications\nTransportation/Logistics: Transportation/Logistics\n"
diff --git a/config/sync/webform.webform_options.languages.yml b/config/sync/webform.webform_options.languages.yml
new file mode 100644
index 00000000..20d3ca88
--- /dev/null
+++ b/config/sync/webform.webform_options.languages.yml
@@ -0,0 +1,13 @@
+uuid: 3d740136-f03b-475d-a221-165672223546
+langcode: en
+status: true
+dependencies:
+ enforced:
+ module:
+ - webform
+_core:
+ default_config_hash: vDwaQMB485SRDS5QUFJf8awBp0DdlOYSMnYsLiw1l5s
+id: languages
+label: Languages
+category: null
+options: ''
diff --git a/config/sync/webform.webform_options.likert_agreement.yml b/config/sync/webform.webform_options.likert_agreement.yml
new file mode 100644
index 00000000..22fd1b19
--- /dev/null
+++ b/config/sync/webform.webform_options.likert_agreement.yml
@@ -0,0 +1,13 @@
+uuid: 9296df26-8c2b-4193-9804-b0461924291b
+langcode: en
+status: true
+dependencies:
+ enforced:
+ module:
+ - webform
+_core:
+ default_config_hash: kTJEQFpTapkGkf4XD51vPW2-7aZU7awzSenC65YDqGQ
+id: likert_agreement
+label: 'Likert: Agreement'
+category: null
+options: "1: Much Worse\n2: Somewhat Worse\n3: About the Same\n4: Somewhat Better\n5: Much Better\n"
diff --git a/config/sync/webform.webform_options.likert_comparison.yml b/config/sync/webform.webform_options.likert_comparison.yml
new file mode 100644
index 00000000..94bf32f0
--- /dev/null
+++ b/config/sync/webform.webform_options.likert_comparison.yml
@@ -0,0 +1,13 @@
+uuid: 94ce2d94-de69-4246-818c-695a081cf2ad
+langcode: en
+status: true
+dependencies:
+ enforced:
+ module:
+ - webform
+_core:
+ default_config_hash: saeeZhVt98h_n7CVmx4DOg02g7x3cIdctN_E7BYzMgs
+id: likert_comparison
+label: 'Likert: Comparison'
+category: null
+options: "1: Strongly Disagree\n2: Disagree\n3: Neutral\n4: Agree\n5: Strongly Agree\n"
diff --git a/config/sync/webform.webform_options.likert_importance.yml b/config/sync/webform.webform_options.likert_importance.yml
new file mode 100644
index 00000000..9cbaa4fe
--- /dev/null
+++ b/config/sync/webform.webform_options.likert_importance.yml
@@ -0,0 +1,13 @@
+uuid: bbcd3d17-5c1f-4b1d-b1c6-bc7028d2cc1d
+langcode: en
+status: true
+dependencies:
+ enforced:
+ module:
+ - webform
+_core:
+ default_config_hash: UZmRfKwhC1I8mlY5XuVV3DF7MpWAbFxyynhNFR9kuOo
+id: likert_importance
+label: 'Likert: Importance'
+category: null
+options: "1: Not at all Important\n2: Somewhat Important\n3: Neutral\n4: Important\n5: Very Important\n"
diff --git a/config/sync/webform.webform_options.likert_quality.yml b/config/sync/webform.webform_options.likert_quality.yml
new file mode 100644
index 00000000..eb6bd2c0
--- /dev/null
+++ b/config/sync/webform.webform_options.likert_quality.yml
@@ -0,0 +1,13 @@
+uuid: eb7fc3e6-2a91-4e63-a40a-992874234f57
+langcode: en
+status: true
+dependencies:
+ enforced:
+ module:
+ - webform
+_core:
+ default_config_hash: kyCI0E0VJVJXi_Z61m6Mom95_ot1haYPehpPr_IxdcM
+id: likert_quality
+label: 'Likert: Quality'
+category: null
+options: "1: Poor\n2: Fair\n3: Good\n4: Very good\n5: Excellent\n"
diff --git a/config/sync/webform.webform_options.likert_satisfaction.yml b/config/sync/webform.webform_options.likert_satisfaction.yml
new file mode 100644
index 00000000..934ce3ac
--- /dev/null
+++ b/config/sync/webform.webform_options.likert_satisfaction.yml
@@ -0,0 +1,13 @@
+uuid: 65fa39af-c9c5-436a-a017-fb5578bb152b
+langcode: en
+status: true
+dependencies:
+ enforced:
+ module:
+ - webform
+_core:
+ default_config_hash: neOMp5gtbo4DzHTQAmmvrsN8VkSA7LXCl5R1oXTqKX0
+id: likert_satisfaction
+label: 'Likert: Satisfaction'
+category: null
+options: "1: Very Unsatisfied\n2: Unsatisfied\n3: Neutral\n4: Satisfied\n5: Very Satisfied\n"
diff --git a/config/sync/webform.webform_options.likert_ten_scale.yml b/config/sync/webform.webform_options.likert_ten_scale.yml
new file mode 100644
index 00000000..6dce6d5e
--- /dev/null
+++ b/config/sync/webform.webform_options.likert_ten_scale.yml
@@ -0,0 +1,13 @@
+uuid: bea03346-9c14-4095-9333-3994427c60e6
+langcode: en
+status: true
+dependencies:
+ enforced:
+ module:
+ - webform
+_core:
+ default_config_hash: VtI_OJow8fKXIo4jyhi2UF_WmE6MQf94_fR9qctlv7s
+id: likert_ten_scale
+label: 'Likert: Ten Scale'
+category: null
+options: "1: 1\n2: 2\n3: 3\n4: 4\n5: 5\n6: 6\n7: 7\n8: 8\n9: 9\n10: 10\n"
diff --git a/config/sync/webform.webform_options.likert_would_you.yml b/config/sync/webform.webform_options.likert_would_you.yml
new file mode 100644
index 00000000..6f40fc5e
--- /dev/null
+++ b/config/sync/webform.webform_options.likert_would_you.yml
@@ -0,0 +1,13 @@
+uuid: 70fdf95f-ba29-458e-bc6d-8904aa0fb366
+langcode: en
+status: true
+dependencies:
+ enforced:
+ module:
+ - webform
+_core:
+ default_config_hash: 98M-DPZLTuMVYsG1XrXy1h90nf3al-jgdqGJrW8Elcg
+id: likert_would_you
+label: 'Likert: Would You'
+category: null
+options: "1: Definitely Not\n2: Probably Not\n3: Not Sure\n4: Probably\n5: Definitely\n"
diff --git a/config/sync/webform.webform_options.marital_status.yml b/config/sync/webform.webform_options.marital_status.yml
new file mode 100644
index 00000000..2b26d545
--- /dev/null
+++ b/config/sync/webform.webform_options.marital_status.yml
@@ -0,0 +1,13 @@
+uuid: 385c1eb6-9465-4f7e-b190-e3af4d221e67
+langcode: en
+status: true
+dependencies:
+ enforced:
+ module:
+ - webform
+_core:
+ default_config_hash: 0saefTQh-QUbxCT1hBxeNaEN2g63K2R21rRXxGXQoCs
+id: marital_status
+label: 'Marital status'
+category: null
+options: "Single: Single\nMarried: Married\nDivorced: Divorced\nWidowed: Widowed\n"
diff --git a/config/sync/webform.webform_options.months.yml b/config/sync/webform.webform_options.months.yml
new file mode 100644
index 00000000..4b4242b8
--- /dev/null
+++ b/config/sync/webform.webform_options.months.yml
@@ -0,0 +1,13 @@
+uuid: c9652e3b-39c9-4a61-8eb0-dec2147cd23f
+langcode: en
+status: true
+dependencies:
+ enforced:
+ module:
+ - webform
+_core:
+ default_config_hash: Y0ajkmoLjJ568EZRzaBSy_vEejATn3EA2RTymPoGZ5U
+id: months
+label: Months
+category: null
+options: "January: January\nFebruary: February\nMarch: March\nApril: April\nMay: May\nJune: June\nJuly: July\nAugust: August\nSeptember: September\nOctober: October\nNovember: November\nDecember: December\n"
diff --git a/config/sync/webform.webform_options.phone_types.yml b/config/sync/webform.webform_options.phone_types.yml
new file mode 100644
index 00000000..3aac1c01
--- /dev/null
+++ b/config/sync/webform.webform_options.phone_types.yml
@@ -0,0 +1,13 @@
+uuid: 4d13b9f2-a18c-499a-afce-b85b6819c19e
+langcode: en
+status: true
+dependencies:
+ enforced:
+ module:
+ - webform
+_core:
+ default_config_hash: HTQyVQb-cumvmKyHdJ8uUqH8fKnU1YehyNSQ4le0AyA
+id: phone_types
+label: 'Phone type'
+category: null
+options: "Home: Home\nOffice: Office\nCell: Cell\n"
diff --git a/config/sync/webform.webform_options.relationship.yml b/config/sync/webform.webform_options.relationship.yml
new file mode 100644
index 00000000..ef36d26c
--- /dev/null
+++ b/config/sync/webform.webform_options.relationship.yml
@@ -0,0 +1,13 @@
+uuid: be537143-3d4a-489d-b5d2-c7d02e9653bf
+langcode: en
+status: true
+dependencies:
+ enforced:
+ module:
+ - webform
+_core:
+ default_config_hash: y8t4RZdGS6VERGR7rBmSPFIG0fO5OZb87IB6P5A6Avw
+id: relationship
+label: Relationship
+category: null
+options: "Parent: Parent\n'Significant Other': 'Significant Other'\nSibling: Sibling\nChild: Child\nFriend: Friend\n"
diff --git a/config/sync/webform.webform_options.size.yml b/config/sync/webform.webform_options.size.yml
new file mode 100644
index 00000000..32a4e6a1
--- /dev/null
+++ b/config/sync/webform.webform_options.size.yml
@@ -0,0 +1,13 @@
+uuid: 2e8ca1db-ff1f-4768-a321-1220b29ad18c
+langcode: en
+status: true
+dependencies:
+ enforced:
+ module:
+ - webform
+_core:
+ default_config_hash: Tq6nZxoRP6_RwY5Q6Z4ecRFadf4xCmFRgg6PqnBzJLc
+id: size
+label: Size
+category: null
+options: "Extra Small: Extra Small\nSmall: Small\nMedium: Medium\nLarge: Large\nExtra Large: Extra Large\n"
diff --git a/config/sync/webform.webform_options.state_codes.yml b/config/sync/webform.webform_options.state_codes.yml
new file mode 100644
index 00000000..603ecc1d
--- /dev/null
+++ b/config/sync/webform.webform_options.state_codes.yml
@@ -0,0 +1,13 @@
+uuid: 5ca7077a-af36-4c3b-a758-c46874aaafeb
+langcode: en
+status: true
+dependencies:
+ enforced:
+ module:
+ - webform
+_core:
+ default_config_hash: m3g0-QKCeVgtX-uSscYIDojtBBljuRJWq_212R4o-Pg
+id: state_codes
+label: 'State codes'
+category: null
+options: "AL: Alabama\nAK: Alaska\nAZ: Arizona\nAR: Arkansas\nCA: California\nCO: Colorado\nCT: Connecticut\nDE: Delaware\nDC: 'District of Columbia'\nFL: Florida\nGA: Georgia\nGU: Guam\nHI: Hawaii\nID: Idaho\nIL: Illinois\nIN: Indiana\nIA: Iowa\nKS: Kansas\nKY: Kentucky\nLA: Louisiana\nME: Maine\nMD: Maryland\nMA: Massachusetts\nMI: Michigan\nMN: Minnesota\nMS: Mississippi\nMO: Missouri\nMT: Montana\nNE: Nebraska\nNV: Nevada\nNH: 'New Hampshire'\nNJ: 'New Jersey'\nNM: 'New Mexico'\nNY: 'New York'\nNC: 'North Carolina'\nND: 'North Dakota'\nOH: Ohio\nOK: Oklahoma\nOR: Oregon\nPA: Pennsylvania\nRI: 'Rhode Island'\nSC: 'South Carolina'\nSD: 'South Dakota'\nTN: Tennessee\nTX: Texas\nUT: Utah\nVT: Vermont\nVA: Virginia\nWA: Washington\nWV: 'West Virginia'\nWI: Wisconsin\nWY: Wyoming\n"
diff --git a/config/sync/webform.webform_options.state_names.yml b/config/sync/webform.webform_options.state_names.yml
new file mode 100644
index 00000000..934109e8
--- /dev/null
+++ b/config/sync/webform.webform_options.state_names.yml
@@ -0,0 +1,13 @@
+uuid: 2e07886d-5ba5-4a34-9b19-2255940e1928
+langcode: en
+status: true
+dependencies:
+ enforced:
+ module:
+ - webform
+_core:
+ default_config_hash: I5ixKB0YwXXr8YCu-8oSY3lAuC7NEnBGuL0SHm2eRfY
+id: state_names
+label: 'State names'
+category: null
+options: "Alabama: Alabama\nAlaska: Alaska\nArizona: Arizona\nArkansas: Arkansas\nCalifornia: California\nColorado: Colorado\nConnecticut: Connecticut\nDelaware: Delaware\n'District of Columbia': 'District of Columbia'\nFlorida: Florida\nGeorgia: Georgia\nHawaii: Hawaii\nIdaho: Idaho\nIllinois: Illinois\nIndiana: Indiana\nIowa: Iowa\nKansas: Kansas\nKentucky: Kentucky\nLouisiana: Louisiana\nMaine: Maine\nMaryland: Maryland\nMassachusetts: Massachusetts\nMichigan: Michigan\nMinnesota: Minnesota\nMississippi: Mississippi\nMissouri: Missouri\nMontana: Montana\nNebraska: Nebraska\nNevada: Nevada\n'New Hampshire': 'New Hampshire'\n'New Jersey': 'New Jersey'\n'New Mexico': 'New Mexico'\n'New York': 'New York'\n'North Carolina': 'North Carolina'\n'North Dakota': 'North Dakota'\nOhio: Ohio\nOklahoma: Oklahoma\nOregon: Oregon\nPennsylvania: Pennsylvania\n'Rhode Island': 'Rhode Island'\n'South Carolina': 'South Carolina'\n'South Dakota': 'South Dakota'\nTennessee: Tennessee\nTexas: Texas\nUtah: Utah\nVermont: Vermont\nVirginia: Virginia\nWashington: Washington\n'West Virginia': 'West Virginia'\nWisconsin: Wisconsin\nWyoming: Wyoming\n"
diff --git a/config/sync/webform.webform_options.state_province_codes.yml b/config/sync/webform.webform_options.state_province_codes.yml
new file mode 100644
index 00000000..9a014503
--- /dev/null
+++ b/config/sync/webform.webform_options.state_province_codes.yml
@@ -0,0 +1,13 @@
+uuid: cc2993b1-8fce-4913-b94f-02345e94b5b0
+langcode: en
+status: true
+dependencies:
+ enforced:
+ module:
+ - webform
+_core:
+ default_config_hash: qHBCN68U1lClhKHP06dP4gjeZa3bZTSPbTSNIpW3Y98
+id: state_province_codes
+label: 'State/Province codes'
+category: null
+options: "AL: Alabama\nAK: Alaska\nAS: 'American Samoa'\nAZ: Arizona\nAR: Arkansas\nAE: 'Armed Forces (Canada, Europe, Africa, or Middle East'\nAA: 'Armed Forces Americas'\nAP: 'Armed Forces Pacific'\nCA: California\nCO: Colorado\nCT: Connecticut\nDE: Delaware\nDC: 'District of Columbia'\nFM: 'Federate States of Micronesia'\nFL: Florida\nGA: Georgia\nGU: Guam\nHI: Hawaii\nID: Idaho\nIL: Illinois\nIN: Indiana\nIA: Iowa\nKS: Kansas\nKY: Kentucky\nLA: Louisiana\nME: Maine\nMH: 'Marshall Islands'\nMD: Maryland\nMA: Massachusetts\nMI: Michigan\nMN: Minnesota\nMS: Mississippi\nMO: Missouri\nMT: Montana\nNE: Nebraska\nNV: Nevada\nNH: 'New Hampshire'\nNJ: 'New Jersey'\nNM: 'New Mexico'\nNY: 'New York'\nNC: 'North Carolina'\nND: 'North Dakota'\nMP: 'Northern Mariana Islands'\nOH: Ohio\nOK: Oklahoma\nOR: Oregon\nPW: Palau\nPA: Pennsylvania\nPR: 'Puerto Rico'\nRI: 'Rhode Island'\nSC: 'South Carolina'\nSD: 'South Dakota'\nTN: Tennessee\nTX: Texas\nUT: Utah\nVT: Vermont\nVI: 'Virgin Islands'\nVA: Virginia\nWA: Washington\nWV: 'West Virginia'\nWI: Wisconsin\nWY: Wyoming\n"
diff --git a/config/sync/webform.webform_options.state_province_names.yml b/config/sync/webform.webform_options.state_province_names.yml
new file mode 100644
index 00000000..a1b0006c
--- /dev/null
+++ b/config/sync/webform.webform_options.state_province_names.yml
@@ -0,0 +1,13 @@
+uuid: b34ea773-9179-41ca-bd27-47ddfac3d1aa
+langcode: en
+status: true
+dependencies:
+ enforced:
+ module:
+ - webform
+_core:
+ default_config_hash: Dsbo0h8kGlwB0RgwOOPBhnQzwgoJXwsiqxznsQADipI
+id: state_province_names
+label: 'State/Province names'
+category: null
+options: "Alabama: Alabama\nAlaska: Alaska\n'American Samoa': 'American Samoa'\nArizona: Arizona\nArkansas: Arkansas\n'Armed Forces (Canada, Europe, Africa, or Middle East': 'Armed Forces (Canada, Europe, Africa, or Middle East'\n'Armed Forces Americas': 'Armed Forces Americas'\n'Armed Forces Pacific': 'Armed Forces Pacific'\nCalifornia: California\nColorado: Colorado\nConnecticut: Connecticut\nDelaware: Delaware\n'District of Columbia': 'District of Columbia'\n'Federate States of Micronesia': 'Federate States of Micronesia'\nFlorida: Florida\nGeorgia: Georgia\nGuam: Guam\nHawaii: Hawaii\nIdaho: Idaho\nIllinois: Illinois\nIndiana: Indiana\nIowa: Iowa\nKansas: Kansas\nKentucky: Kentucky\nLouisiana: Louisiana\nMaine: Maine\n'Marshall Islands': 'Marshall Islands'\nMaryland: Maryland\nMassachusetts: Massachusetts\nMichigan: Michigan\nMinnesota: Minnesota\nMississippi: Mississippi\nMissouri: Missouri\nMontana: Montana\nNebraska: Nebraska\nNevada: Nevada\n'New Hampshire': 'New Hampshire'\n'New Jersey': 'New Jersey'\n'New Mexico': 'New Mexico'\n'New York': 'New York'\n'North Carolina': 'North Carolina'\n'North Dakota': 'North Dakota'\n'Northern Mariana Islands': 'Northern Mariana Islands'\nOhio: Ohio\nOklahoma: Oklahoma\nOregon: Oregon\nPalau: Palau\nPennsylvania: Pennsylvania\n'Puerto Rico': 'Puerto Rico'\n'Rhode Island': 'Rhode Island'\n'South Carolina': 'South Carolina'\n'South Dakota': 'South Dakota'\nTennessee: Tennessee\nTexas: Texas\nUtah: Utah\nVermont: Vermont\n'Virgin Islands': 'Virgin Islands'\nVirginia: Virginia\nWashington: Washington\n'West Virginia': 'West Virginia'\nWisconsin: Wisconsin\nWyoming: Wyoming\n"
diff --git a/config/sync/webform.webform_options.time_zones.yml b/config/sync/webform.webform_options.time_zones.yml
new file mode 100644
index 00000000..c9e17084
--- /dev/null
+++ b/config/sync/webform.webform_options.time_zones.yml
@@ -0,0 +1,13 @@
+uuid: ad6a5d85-2a8c-4cbb-99cd-b3f573dae981
+langcode: en
+status: true
+dependencies:
+ enforced:
+ module:
+ - webform
+_core:
+ default_config_hash: egUVOkBF8Rfzd-cuycbVPEBBfN8PpBQAyq_8iRd7Nns
+id: time_zones
+label: 'Time zones'
+category: null
+options: ''
diff --git a/config/sync/webform.webform_options.titles.yml b/config/sync/webform.webform_options.titles.yml
new file mode 100644
index 00000000..911d6500
--- /dev/null
+++ b/config/sync/webform.webform_options.titles.yml
@@ -0,0 +1,13 @@
+uuid: 294e7096-3b6d-45a6-ad4b-c53cce444e71
+langcode: en
+status: true
+dependencies:
+ enforced:
+ module:
+ - webform
+_core:
+ default_config_hash: Onwyr2kH5zCeHvMfSSPDJIKUKrvX7x7tAr-7Uv_-k-c
+id: titles
+label: Titles
+category: null
+options: "Miss: Miss\nMs: Ms\nMr: Mr\nMrs: Mrs\nDr: Dr\n"
diff --git a/config/sync/webform.webform_options.yes_no.yml b/config/sync/webform.webform_options.yes_no.yml
new file mode 100644
index 00000000..8ba64dc6
--- /dev/null
+++ b/config/sync/webform.webform_options.yes_no.yml
@@ -0,0 +1,13 @@
+uuid: f0a98c20-283c-4129-80df-3fdb77486179
+langcode: en
+status: true
+dependencies:
+ enforced:
+ module:
+ - webform
+_core:
+ default_config_hash: KAEJv6Gks8rU-P0XcmUfjRuk-92T32qbkBCn1LQgKr8
+id: yes_no
+label: Yes/No
+category: null
+options: "Yes: Yes\nNo: No\n"
diff --git a/web/modules/custom/portfolio_feature/config/install/core.entity_form_display.node.portfolio.default.yml b/web/modules/custom/portfolio_feature/config/install/core.entity_form_display.node.portfolio.default.yml
new file mode 100644
index 00000000..00fd1a67
--- /dev/null
+++ b/web/modules/custom/portfolio_feature/config/install/core.entity_form_display.node.portfolio.default.yml
@@ -0,0 +1,79 @@
+langcode: en
+status: true
+dependencies:
+ config:
+ - field.field.node.portfolio.body
+ - field.field.node.portfolio.field_picture
+ - field.field.node.portfolio.field_technologies
+ - image.style.thumbnail
+ - node.type.portfolio
+ module:
+ - image
+ - path
+ - text
+id: node.portfolio.default
+targetEntityType: node
+bundle: portfolio
+mode: default
+content:
+ body:
+ type: text_textarea_with_summary
+ weight: 31
+ settings:
+ rows: 9
+ summary_rows: 3
+ placeholder: ''
+ third_party_settings: { }
+ created:
+ type: datetime_timestamp
+ weight: 10
+ settings: { }
+ third_party_settings: { }
+ field_picture:
+ weight: 32
+ settings:
+ progress_indicator: throbber
+ preview_image_style: thumbnail
+ third_party_settings: { }
+ type: image_image
+ field_technologies:
+ weight: 33
+ settings:
+ match_operator: CONTAINS
+ size: 60
+ placeholder: ''
+ third_party_settings: { }
+ type: entity_reference_autocomplete
+ path:
+ type: path
+ weight: 30
+ settings: { }
+ third_party_settings: { }
+ promote:
+ type: boolean_checkbox
+ settings:
+ display_label: true
+ weight: 15
+ third_party_settings: { }
+ sticky:
+ type: boolean_checkbox
+ settings:
+ display_label: true
+ weight: 16
+ third_party_settings: { }
+ title:
+ type: string_textfield
+ weight: -5
+ settings:
+ size: 60
+ placeholder: ''
+ third_party_settings: { }
+ uid:
+ type: entity_reference_autocomplete
+ weight: 5
+ settings:
+ match_operator: CONTAINS
+ size: 60
+ placeholder: ''
+ third_party_settings: { }
+hidden: { }
diff --git a/web/modules/custom/portfolio_feature/config/install/core.entity_view_display.node.portfolio.default.yml b/web/modules/custom/portfolio_feature/config/install/core.entity_view_display.node.portfolio.default.yml
new file mode 100644
index 00000000..7deb8518
--- /dev/null
+++ b/web/modules/custom/portfolio_feature/config/install/core.entity_view_display.node.portfolio.default.yml
@@ -0,0 +1,44 @@
+langcode: en
+status: true
+dependencies:
+ config:
+ - field.field.node.portfolio.body
+ - field.field.node.portfolio.field_picture
+ - field.field.node.portfolio.field_technologies
+ - image.style.medium
+ - node.type.portfolio
+ module:
+ - image
+ - text
+ - user
+id: node.portfolio.default
+targetEntityType: node
+bundle: portfolio
+mode: default
+content:
+ body:
+ label: hidden
+ type: text_default
+ weight: 101
+ settings: { }
+ third_party_settings: { }
+ field_picture:
+ weight: 102
+ label: above
+ settings:
+ image_style: medium
+ image_link: ''
+ third_party_settings: { }
+ type: image
+ field_technologies:
+ weight: 103
+ label: above
+ settings:
+ link: true
+ third_party_settings: { }
+ type: entity_reference_label
+ links:
+ weight: 100
+ settings: { }
+ third_party_settings: { }
+hidden: { }
diff --git a/web/modules/custom/portfolio_feature/config/install/core.entity_view_display.node.portfolio.teaser.yml b/web/modules/custom/portfolio_feature/config/install/core.entity_view_display.node.portfolio.teaser.yml
new file mode 100644
index 00000000..28cb8e08
--- /dev/null
+++ b/web/modules/custom/portfolio_feature/config/install/core.entity_view_display.node.portfolio.teaser.yml
@@ -0,0 +1,25 @@
+langcode: en
+status: true
+dependencies:
+ config:
+ - core.entity_view_mode.node.teaser
+ - field.field.node.portfolio.body
+ - node.type.portfolio
+ module:
+ - text
+ - user
+id: node.portfolio.teaser
+targetEntityType: node
+bundle: portfolio
+mode: teaser
+content:
+ body:
+ label: hidden
+ type: text_summary_or_trimmed
+ weight: 101
+ settings:
+ trim_length: 600
+ third_party_settings: { }
+ links:
+ weight: 100
+hidden: { }
diff --git a/web/modules/custom/portfolio_feature/config/install/field.field.node.portfolio.body.yml b/web/modules/custom/portfolio_feature/config/install/field.field.node.portfolio.body.yml
new file mode 100644
index 00000000..0725638a
--- /dev/null
+++ b/web/modules/custom/portfolio_feature/config/install/field.field.node.portfolio.body.yml
@@ -0,0 +1,21 @@
+langcode: en
+status: true
+dependencies:
+ config:
+ - field.storage.node.body
+ - node.type.portfolio
+ module:
+ - text
+id: node.portfolio.body
+field_name: body
+entity_type: node
+bundle: portfolio
+label: Description
+description: ''
+required: true
+translatable: true
+default_value: { }
+default_value_callback: ''
+settings:
+ display_summary: true
+field_type: text_with_summary
diff --git a/web/modules/custom/portfolio_feature/config/install/field.field.node.portfolio.field_picture.yml b/web/modules/custom/portfolio_feature/config/install/field.field.node.portfolio.field_picture.yml
new file mode 100644
index 00000000..7297140b
--- /dev/null
+++ b/web/modules/custom/portfolio_feature/config/install/field.field.node.portfolio.field_picture.yml
@@ -0,0 +1,37 @@
+langcode: en
+status: true
+dependencies:
+ config:
+ - field.storage.node.field_picture
+ - node.type.portfolio
+ module:
+ - image
+id: node.portfolio.field_picture
+field_name: field_picture
+entity_type: node
+bundle: portfolio
+label: Picture
+description: ''
+required: false
+translatable: false
+default_value: { }
+default_value_callback: ''
+settings:
+ file_extensions: 'png gif jpg jpeg'
+ alt_field: true
+ alt_field_required: true
+ title_field: false
+ title_field_required: false
+ max_resolution: ''
+ min_resolution: ''
+ default_image:
+ uuid: null
+ alt: ''
+ title: ''
+ width: null
+ height: null
+ file_directory: '[date:custom:Y]-[date:custom:m]'
+ max_filesize: ''
+ handler: 'default:file'
+ handler_settings: { }
+field_type: image
diff --git a/web/modules/custom/portfolio_feature/config/install/field.field.node.portfolio.field_technologies.yml b/web/modules/custom/portfolio_feature/config/install/field.field.node.portfolio.field_technologies.yml
new file mode 100644
index 00000000..27ec64b7
--- /dev/null
+++ b/web/modules/custom/portfolio_feature/config/install/field.field.node.portfolio.field_technologies.yml
@@ -0,0 +1,27 @@
+langcode: en
+status: true
+dependencies:
+ config:
+ - field.storage.node.field_technologies
+ - node.type.portfolio
+ - taxonomy.vocabulary.technologies
+id: node.portfolio.field_technologies
+field_name: field_technologies
+entity_type: node
+bundle: portfolio
+label: Technologies
+description: ''
+required: false
+translatable: false
+default_value: { }
+default_value_callback: ''
+settings:
+ handler: 'default:taxonomy_term'
+ handler_settings:
+ target_bundles:
+ technologies: technologies
+ sort:
+ field: _none
+ auto_create: false
+ auto_create_bundle: ''
+field_type: entity_reference
diff --git a/web/modules/custom/portfolio_feature/config/install/node.type.portfolio.yml b/web/modules/custom/portfolio_feature/config/install/node.type.portfolio.yml
new file mode 100644
index 00000000..c3f58d91
--- /dev/null
+++ b/web/modules/custom/portfolio_feature/config/install/node.type.portfolio.yml
@@ -0,0 +1,17 @@
+langcode: en
+status: true
+dependencies:
+ module:
+ - menu_ui
+third_party_settings:
+ menu_ui:
+ available_menus:
+ - main
+ parent: 'main:'
+name: Portfolio
+type: portfolio
+description: ''
+help: ''
+new_revision: true
+preview_mode: 1
+display_submitted: true
diff --git a/web/modules/custom/portfolio_feature/config/install/views.view.view_portfolio.yml b/web/modules/custom/portfolio_feature/config/install/views.view.view_portfolio.yml
new file mode 100644
index 00000000..576b94ee
--- /dev/null
+++ b/web/modules/custom/portfolio_feature/config/install/views.view.view_portfolio.yml
@@ -0,0 +1,247 @@
+langcode: en
+status: true
+dependencies:
+ config:
+ - field.storage.node.field_picture
+ - image.style.large
+ - node.type.portfolio
+ module:
+ - image
+ - node
+ - user
+id: view_portfolio
+label: Portfolio
+module: views
+description: ''
+tag: ''
+base_table: node_field_data
+base_field: nid
+core: 8.x
+display:
+ default:
+ display_plugin: default
+ id: default
+ display_title: Master
+ position: 0
+ display_options:
+ access:
+ type: perm
+ options:
+ perm: 'access content'
+ cache:
+ type: tag
+ options: { }
+ query:
+ type: views_query
+ options:
+ disable_sql_rewrite: false
+ distinct: false
+ replica: false
+ query_comment: ''
+ query_tags: { }
+ exposed_form:
+ type: basic
+ options:
+ submit_button: Apply
+ reset_button: false
+ reset_button_label: Reset
+ exposed_sorts_label: 'Sort by'
+ expose_sort_order: true
+ sort_asc_label: Asc
+ sort_desc_label: Desc
+ pager:
+ type: some
+ options:
+ items_per_page: 4
+ offset: 0
+ style:
+ type: default
+ row:
+ type: fields
+ options:
+ default_field_elements: true
+ inline: { }
+ separator: ''
+ hide_empty: false
+ fields:
+ title:
+ id: title
+ table: node_field_data
+ field: title
+ entity_type: node
+ entity_field: title
+ label: ''
+ alter:
+ alter_text: false
+ make_link: false
+ absolute: false
+ trim: false
+ word_boundary: false
+ ellipsis: false
+ strip_tags: false
+ html: false
+ hide_empty: false
+ empty_zero: false
+ settings:
+ link_to_entity: true
+ plugin_id: field
+ relationship: none
+ group_type: group
+ admin_label: ''
+ exclude: false
+ element_type: ''
+ element_class: ''
+ element_label_type: ''
+ element_label_class: ''
+ element_label_colon: true
+ element_wrapper_type: ''
+ element_wrapper_class: ''
+ element_default_classes: true
+ empty: ''
+ hide_alter_empty: true
+ click_sort_column: value
+ type: string
+ group_column: value
+ group_columns: { }
+ group_rows: true
+ delta_limit: 0
+ delta_offset: 0
+ delta_reversed: false
+ delta_first_last: false
+ multi_type: separator
+ separator: ', '
+ field_api_classes: false
+ field_picture:
+ id: field_picture
+ table: node__field_picture
+ field: field_picture
+ relationship: none
+ group_type: group
+ admin_label: ''
+ label: ''
+ 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: false
+ element_wrapper_type: ''
+ element_wrapper_class: ''
+ element_default_classes: true
+ empty: ''
+ hide_empty: false
+ empty_zero: false
+ hide_alter_empty: true
+ click_sort_column: target_id
+ type: image
+ settings:
+ image_style: large
+ image_link: ''
+ group_column: ''
+ 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
+ plugin_id: field
+ filters:
+ status:
+ value: '1'
+ table: node_field_data
+ field: status
+ plugin_id: boolean
+ entity_type: node
+ entity_field: status
+ id: status
+ expose:
+ operator: ''
+ group: 1
+ type:
+ id: type
+ table: node_field_data
+ field: type
+ value:
+ portfolio: portfolio
+ entity_type: node
+ entity_field: type
+ plugin_id: bundle
+ sorts:
+ created:
+ id: created
+ table: node_field_data
+ field: created
+ order: DESC
+ entity_type: node
+ entity_field: created
+ plugin_id: date
+ relationship: none
+ group_type: group
+ admin_label: ''
+ exposed: false
+ expose:
+ label: ''
+ granularity: second
+ title: Portfolio
+ header: { }
+ footer: { }
+ empty: { }
+ relationships: { }
+ arguments: { }
+ display_extenders: { }
+ cache_metadata:
+ max-age: -1
+ contexts:
+ - 'languages:language_content'
+ - 'languages:language_interface'
+ - 'user.node_grants:view'
+ - user.permissions
+ tags:
+ - 'config:field.storage.node.field_picture'
+ page_1:
+ display_plugin: page
+ id: page_1
+ display_title: Page
+ position: 1
+ display_options:
+ display_extenders: { }
+ path: portfolio
+ cache_metadata:
+ max-age: -1
+ contexts:
+ - 'languages:language_content'
+ - 'languages:language_interface'
+ - 'user.node_grants:view'
+ - user.permissions
+ tags:
+ - 'config:field.storage.node.field_picture'
diff --git a/web/modules/custom/portfolio_feature/portfolio_feature.features.yml b/web/modules/custom/portfolio_feature/portfolio_feature.features.yml
new file mode 100644
index 00000000..060a98e7
--- /dev/null
+++ b/web/modules/custom/portfolio_feature/portfolio_feature.features.yml
@@ -0,0 +1 @@
+required: true
diff --git a/web/modules/custom/portfolio_feature/portfolio_feature.info.yml b/web/modules/custom/portfolio_feature/portfolio_feature.info.yml
new file mode 100644
index 00000000..2bdfe119
--- /dev/null
+++ b/web/modules/custom/portfolio_feature/portfolio_feature.info.yml
@@ -0,0 +1,12 @@
+name: 'Portfolio Feature'
+type: module
+core: 8.x
+dependencies:
+ - field
+ - image
+ - menu_ui
+ - node
+ - path
+ - text
+ - user
+ - views
diff --git a/web/modules/custom/proj_me_core/proj_me_core.info.yml b/web/modules/custom/proj_me_core/proj_me_core.info.yml
new file mode 100644
index 00000000..a6d54e90
--- /dev/null
+++ b/web/modules/custom/proj_me_core/proj_me_core.info.yml
@@ -0,0 +1,5 @@
+name: Proj-me Core
+type: module
+description: Custom module containing custom blocks
+core: 8.x
+package: Custom
diff --git a/web/modules/custom/proj_me_core/proj_me_core.module b/web/modules/custom/proj_me_core/proj_me_core.module
new file mode 100644
index 00000000..ae23f8aa
--- /dev/null
+++ b/web/modules/custom/proj_me_core/proj_me_core.module
@@ -0,0 +1,24 @@
+' . t('About') . '';
+ $output .= '' . t('Custom module containing custom blocks') . '
';
+ return $output;
+
+ default:
+ }
+}
diff --git a/web/modules/custom/proj_me_core/src/Plugin/Block/ContactInformation.php b/web/modules/custom/proj_me_core/src/Plugin/Block/ContactInformation.php
new file mode 100644
index 00000000..7483e0e8
--- /dev/null
+++ b/web/modules/custom/proj_me_core/src/Plugin/Block/ContactInformation.php
@@ -0,0 +1,32 @@
+
+ Email | mysheikh08@gmail.com
+ Skype | m.sheikh2
+ Phone | (571) 294-4768
+ Linedin | Resume
+ ';
+
+ return $build;
+ }
+
+}
diff --git a/web/themes/custom/proj_me_theme/.gitignore b/web/themes/custom/proj_me_theme/.gitignore
new file mode 100644
index 00000000..d94cbc6c
--- /dev/null
+++ b/web/themes/custom/proj_me_theme/.gitignore
@@ -0,0 +1,2 @@
+.sass-cache/
+style.css.map
diff --git a/web/themes/custom/proj_me_theme/README.md b/web/themes/custom/proj_me_theme/README.md
new file mode 100755
index 00000000..c483e9ab
--- /dev/null
+++ b/web/themes/custom/proj_me_theme/README.md
@@ -0,0 +1,58 @@
+
+
+
+# Sass Starterkit
+
+Below are instructions on how to create a Bootstrap sub-theme using a Sass
+preprocessor.
+
+- [Prerequisites](#prerequisites)
+- [Additional Setup](#setup)
+- [Overrides](#overrides)
+
+## Prerequisites
+- Read the @link getting_started Getting Started @endlink and @link sub_theming Sub-theming @endlink documentation topics.
+- You must understand the basic concept of using the [Sass] CSS pre-processor.
+- You must use a **[local Sass compiler](https://www.google.com/search?q=sass+compiler)**.
+- You must use the [Bootstrap Framework Source Files] ending in the `.scss`
+ extension, not files ending in `.css`.
+
+## Additional Setup {#setup}
+Download and extract the **latest** 3.x.x version of
+[Bootstrap Framework Source Files] into the root of your new sub-theme. After
+it has been extracted, the directory should be renamed (if needed) so it reads
+`./THEMENAME/bootstrap`.
+
+If for whatever reason you have an additional `bootstrap` directory wrapping the
+first `bootstrap` directory (e.g. `./THEMENAME/bootstrap/bootstrap`), remove the
+wrapping `bootstrap` directory. You will only ever need to touch these files if
+or when you upgrade your version of the [Bootstrap Framework].
+
+{.alert.alert-warning} **WARNING:** Do not modify the files inside of
+`./THEMENAME/bootstrap` directly. Doing so may cause issues when upgrading the
+[Bootstrap Framework] in the future.
+
+## Overrides {#overrides}
+The `./THEMENAME/sass/_default-variables.scss` file is generally where you will
+spend the majority of your time providing any default variables that should be
+used by the [Bootstrap Framework] instead of its own.
+
+The `./THEMENAME/sass/overrides.scss` file contains various Drupal overrides to
+properly integrate with the [Bootstrap Framework]. It may contain a few
+enhancements, feel free to edit this file as you see fit.
+
+The `./THEMENAME/scss/style.scss` file is the glue that combines:
+`_default-variables.scss`, [Bootstrap Framework Source Files] and the
+`overrides.scss` file together. Generally, you will not need to modify this
+file unless you need to add or remove files to be imported. This is the file
+that you should compile to `./THEMENAME/css/style.css` (note the same file
+name, using a different extension of course).
+
+#### See also:
+- @link theme_settings Theme Settings @endlink
+- @link templates Templates @endlink
+- @link plugins Plugin System @endlink
+
+[Bootstrap Framework]: http://getbootstrap.com
+[Bootstrap Framework Source Files]: https://github.com/twbs/bootstrap-sass
+[Sass]: http://sass-lang.com
diff --git a/web/themes/custom/proj_me_theme/bootstrap/.gitignore b/web/themes/custom/proj_me_theme/bootstrap/.gitignore
new file mode 100644
index 00000000..009d0e4d
--- /dev/null
+++ b/web/themes/custom/proj_me_theme/bootstrap/.gitignore
@@ -0,0 +1,20 @@
+*.gem
+.sass-cache
+bootstrap.css
+bootstrap-responsive.css
+Gemfile.lock
+*.gemfile.lock
+.rvmrc
+.rbenv-version
+
+# Ignore bundler config
+/.bundle
+/vendor/cache
+/vendor/bundle
+tmp/
+test/screenshots/
+test/dummy_rails/log/*.log
+test/dummy_rails/public/assets/
+.DS_Store
+node_modules
+/.idea
diff --git a/web/themes/custom/proj_me_theme/bootstrap/.travis.yml b/web/themes/custom/proj_me_theme/bootstrap/.travis.yml
new file mode 100644
index 00000000..b371001d
--- /dev/null
+++ b/web/themes/custom/proj_me_theme/bootstrap/.travis.yml
@@ -0,0 +1,25 @@
+language: ruby
+cache: bundler
+bundler_args: --path ../../vendor/bundle --without debug
+rvm:
+ - 2.2.3
+gemfile:
+ - test/gemfiles/rails_head.gemfile
+ - test/gemfiles/sass_3_3.gemfile
+ - test/gemfiles/sass_3_4.gemfile
+ - test/gemfiles/sass_head.gemfile
+before_install:
+ - "nvm install stable"
+ - "npm install"
+matrix:
+ allow_failures:
+ - gemfile: test/gemfiles/rails_head.gemfile
+ - gemfile: test/gemfiles/sass_head.gemfile
+notifications:
+ slack: heybb:3n88HHilXn76ji9vV4gL819Y
+env:
+ global:
+ - VERBOSE=1
+script:
+ bundle exec rake && sh test/*.sh
+sudo: false
diff --git a/web/themes/custom/proj_me_theme/bootstrap/CHANGELOG.md b/web/themes/custom/proj_me_theme/bootstrap/CHANGELOG.md
new file mode 100644
index 00000000..a18bae06
--- /dev/null
+++ b/web/themes/custom/proj_me_theme/bootstrap/CHANGELOG.md
@@ -0,0 +1,210 @@
+# Changelog
+
+## 3.3.7
+
+* Allows jQuery 3.x in bower.json. [#1048](https://github.com/twbs/bootstrap-sass/issues/1048)
+* Adds the `style` and `sass` fields to package.json. [#1045](https://github.com/twbs/bootstrap-sass/issues/1045)
+* Adds Eyeglass support. [#1007](https://github.com/twbs/bootstrap-sass/pull/1007)
+
+## 3.3.6
+
+* Bumps Sass dependency to 3.3.4+ to avoid compatibility issues with @at-root.
+* Bumps node-sass dependency to ~3.4.2 for Node.js v5 compatibility. [#986](https://github.com/twbs/bootstrap-sass/issues/986)
+* Fixes breadcrumb content issues on libsass. [#919](https://github.com/twbs/bootstrap-sass/issues/919)
+* Fixes a Rails 5 compatibility issue. [#965](https://github.com/twbs/bootstrap-sass/pull/965)
+
+Framework version: Bootstrap **v3.3.6**
+
+## 3.3.5
+
+Fix for standalone Compass extension compatibility. [#914](https://github.com/twbs/bootstrap-sass/issues/914)
+
+Framework version: Bootstrap **v3.3.5**
+
+## 3.3.4
+
+No Sass-specific changes.
+
+Framework version: Bootstrap **v3.3.4**
+
+## 3.3.3
+
+This is a re-packaged release of 3.3.2.1 (v3.3.2+1).
+
+Versions are now strictly semver.
+The PATCH version may be ahead of the upstream.
+
+Framework version: Bootstrap **v3.3.2**.
+
+## 3.3.2.1
+
+* Fix glyphicons regression (revert 443d5b49eac84aec1cb2f8ea173554327bfc8c14)
+
+## 3.3.2.0
+
+* Autoprefixer is now required, and `autoprefixer-rails` is now a dependency for the ruby gem. [#824](https://github.com/twbs/bootstrap-sass/issues/824)
+* Minimum precision reduced from 10 to 8 [#821](https://github.com/twbs/bootstrap-sass/issues/821)
+* Requiring bootstrap JS from npm now works [#812](https://github.com/twbs/bootstrap-sass/issues/812)
+* Fix Sass 3.4.x + IE10 compatibility issue [#803](https://github.com/twbs/bootstrap-sass/issues/803)
+* Provide minified JS bundle [#777](https://github.com/twbs/bootstrap-sass/issues/777)
+* Bower package is now at bootstrap-sass [#813](https://github.com/twbs/bootstrap-sass/issues/813)
+
+
+## 3.3.1.0
+
+* Variables override template at templates/project/_bootstrap-variables.sass
+* Readme: Bower + Rails configuration
+
+## 3.3.0.1
+
+* Fix loading issue with the ruby gem version
+
+## 3.3.0
+
+* Improve libsass compatibility
+* Support using Bower package with Rails
+
+## 3.2.0.2
+
+Main bootstrap file is now a partial (_bootstrap.scss), for compatibility with Compass 1+.
+
+Fixed a number of bugs. [Issues closed in v3.2.0.2](https://github.com/twbs/bootstrap-sass/issues?q=is%3Aissue+is%3Aclosed+milestone%3Av3.2.0.2).
+
+## 3.2.0.1
+
+Fixed a number of bugs: [Issues closed in v3.2.0.1](https://github.com/twbs/bootstrap-sass/issues?q=is%3Aissue+is%3Aclosed+milestone%3Av3.2.0.1).
+
+## 3.2.0.0
+
+- Assets (Sass, JS, fonts) moved from `vendor/assets` to `assets`. `bootstrap.js` now contains concatenated JS.
+- Compass generator now copies JS and fonts, and provides a better default `styles.sass`.
+- Compass, Sprockets, and Mincer asset path helpers are now provided in pure Sass: `bootstrap-compass`, `bootstrap-sprockets`, and `bootstrap-mincer`.
+Asset path helpers must be imported before `bootstrap`, more in Readme.
+- Sprockets / Mincer JS manifest has been moved to `bootstrap-sprockets.js`.
+It can be required without adding Bootstrap JS directory to load path, as it now uses relative paths.
+- Sprockets: `depend_on_asset` (`glyphicons.scss`) has been changed to `depend_on` to work around an issue with `depend_on_asset`.
+[More information](https://github.com/twbs/bootstrap-sass/issues/592#issuecomment-46570286).
+
+## 3.1.1.0
+
+- Updated Bower docs
+
+## 3.1.0.2
+
+- #523: Rails 3.2 compatibility
+- Bugfixes from upstream up to 7eb532262fbd1112215b5a547b9285794b5360ab.
+
+## 3.1.0.1
+
+- #518: `scale` mixin Sass compatibility issue
+
+## 3.1.0.0
+
+* compiles with libsass master
+
+## 3.0.2.1
+
+* fix vendor paths for compass
+
+## 3.0.0.0
+
+* Fully automated (lots of string juggling) LESS -> Sass conversion. - *Gleb Mazovetskiy*
+* Ported rake task from vwall/compass-twitter-bootstrap to convert Bootstrap upstream - *Peter Gumeson*
+* Moved javascripts to us `bootstrap-component.js` to `bootstrap/component.js` - *Peter Gumeson*
+
+## 2.3.2.2
+
+* Allow sass-rails `>= 3.2` - *Thomas McDonald*
+
+## 2.3.2.1
+
+## 2.3.2.0
+
+* Update to Bootstrap 2.3.2 - *Dan Allen*
+
+## 2.3.1.3
+
+* Find the correct Sprockets context for the `image_path` function - *Tristan Harward, Gleb Mazovetskiy*
+
+## 2.3.1.2
+
+* Fix changes to image url - *Gleb Mazovetskiy*
+* Copy _variables into project on Compass install - *Phil Thompson*
+* Add `bootstrap-affix` to the Compass template file - *brief*
+
+## 2.3.1.1 (yanked)
+
+* Change how image_url is handled internally - *Tristan Harward*
+* Fix some font variables not having `!default` - *Thomas McDonald*
+
+## 2.3.0.0
+* [#290] Update to Bootstrap 2.3.0 - *Tristan Harward*
+* Fix `rake:debug` with new file locations - *Thomas McDonald*
+* Add draft contributing document - *Thomas McDonald*
+* [#260] Add our load path to the global Sass load path - *Tristan Harward*
+* [#275] Use GitHub notation in Sass head testing gemfile - *Timo Schilling*
+* [#279, #283] Readme improvements - *theverything, Philip Arndt*
+
+## 2.2.2.0
+* [#270] Update to Bootstrap 2.2.2 - *Tristan Harward*
+* [#266] Add license to gemspec - *Peter Marsh*
+
+## 2.2.1.1
+* [#258] Use `bootstrap` prefix for `@import`ing files in `bootstrap/bootstrap.scss` - *Umair Siddique*
+
+## 2.2.1.0
+* [#246] Update to Bootstrap 2.2.1 - *Tristan Harward*
+* [#246] Pull Bootstrap updates from jlong/sass-twitter-bootstrap - *Tristan Harward*
+
+## 2.1.1.0
+* Update to Bootstrap 2.1.1
+* [#222] Remove 100% multiplier in vertical-three-colours
+* [#227] Fix IE component animation collapse
+* [#228] Fix variables documentation link
+* [#231] Made .input-block-level a class as well as mixin
+
+## 2.1.0.1
+* [#219] Fix expected a color. Got: transparent.
+* [#207] Add missing warning style for table row highlighting
+* [#208] Use grid-input-span for input spans
+
+## 2.1.0.0
+* Updated to Bootstrap 2.1
+* Changed some mixin names to be more consistent. Nested mixins in Less are separated by a `-` when they are flattened in Sass.
+
+## 2.0.4.1
+* Fix `.row-fluid > spanX` nesting
+* Small Javascript fixes for those staying on the 2.0.4 release
+* Add `!default` to z-index variables.
+
+## 2.0.4.0
+* Updated to Bootstrap 2.0.4
+* Switched to Bootstrap 2.0.3+'s method of separating responsive files
+* [#149, #150] Fix off by one error introduced with manual revert of media query breakpoints
+* `rake debug` and `rake test` both compile bootstrap & bootstrap-responsive
+
+## 2.0.3.1
+* [#145, #146] Fix button alignment in collapsing navbar as a result of an incorrect variable
+
+## 2.0.3
+* Updated to Bootstrap 2.0.3
+* [#106] Support for Rails < 3.1 through Compass
+* [#132] Add CI testing
+* [#106] Support Rails w/Compass
+* [#134] Fix support for Rails w/Compass
+
+## 2.0.2
+* [#86] Updated to Bootstrap 2.0.2
+Things of note: static navbars now have full width. (to be fixed in 2.0.3) `.navbar-inner > .container { width:940px; }` seems to work in the meanwhile
+* [#62] Fixed asset compilation taking a *very* long time.
+* [#69, #79, #80] \(Hopefully) clarified README. Now with less cat humour.
+* [#91] Removed doubled up Sass extensions for Rails.
+* [#63, #73] Allow for overriding of image-path
+* [[SO](http://stackoverflow.com/a/9909626/241212)] Added makeFluidColumn mixin for defining fluid columns. Fluid rows must use `@extend .row-fluid`, and any column inside it can use `@include makeFluidColumn(num)`, where `num` is the number of columns. Unfortunately, there is a rather major limitation to this: margins on first-child elements must be overriden. See the attached Stack Overflow answer for more information.
+
+## 2.0.1
+* Updated to Bootstrap 2.0.1
+* Modified `@mixin opacity()` to take an argument `0...1` rather than `0...100` to be consistent with Compass.
+
+## 2.0.0
+* Updated to Bootstrap 2.0.0
diff --git a/web/themes/custom/proj_me_theme/bootstrap/CONTRIBUTING.md b/web/themes/custom/proj_me_theme/bootstrap/CONTRIBUTING.md
new file mode 100644
index 00000000..246b96df
--- /dev/null
+++ b/web/themes/custom/proj_me_theme/bootstrap/CONTRIBUTING.md
@@ -0,0 +1,86 @@
+# Contributing to bootstrap-sass
+
+## Asset Changes
+
+Any changes to `bootstrap-sass` assets (scss, javascripts, fonts) should be checked against the `convert` rake task.
+For usage instructions, see the [README](/README.md).
+
+If something is broken in the converter, it's preferable to update the converter along with the asset itself.
+
+
+## Bugs
+
+A bug is a _demonstrable problem_ that is caused by the code in the
+repository. Good bug reports are extremely helpful - thank you!
+
+Guidelines for bug reports:
+
+1. **Does it belong here?** — is this a problem with bootstrap-sass, or
+ it an issue with [twbs/bootstrap](https://github.com/twbs/bootstrap)?
+ We only distribute a direct port and will not modify files if they're not
+ changed upstream.
+
+2. **Use the GitHub issue search** — check if the issue has already been
+ reported.
+
+3. **Isolate the problem** — ideally create a [reduced test
+ case](http://css-tricks.com/6263-reduced-test-cases/) and a live example.
+
+A good bug report shouldn't leave others needing to chase you up for more
+information. Please try to be as detailed as possible in your report. What is
+your environment? What steps will reproduce the issue? What browser(s) and OS
+experience the problem? What would you expect to be the outcome? All these
+details will help people to fix any potential bugs.
+
+Example:
+
+> Short and descriptive example bug report title
+>
+> A summary of the issue and the browser/OS environment in which it occurs. If
+> suitable, include the steps required to reproduce the bug.
+>
+> 1. This is the first step
+> 2. This is the second step
+> 3. Further steps, etc.
+>
+> `` (a link to the reduced test case)
+>
+> Any other information you want to share that is relevant to the issue being
+> reported. This might include the lines of code that you have identified as
+> causing the bug, and potential solutions (and your opinions on their
+> merits).
+
+**[File a bug report](https://github.com/twbs/bootstrap-sass/issues/)**
+
+
+## Pull requests
+
+**We will not accept pull requests that modify the SCSS beyond fixing bugs caused by *our* code!**
+
+We use a [converter script][converter-readme] to automatically convert upstream bootstrap, written in LESS, to Sass.
+
+Issues related to styles or javascript but unrelated to the conversion process should go to [twbs/bootstrap][upstream].
+
+Pull requests that fix bugs caused by our code should not modify the SCSS directly, but should patch the converter instead.
+
+Good pull requests - patches, improvements, new features - are a fantastic
+help. They should remain focused in scope and avoid containing unrelated
+commits. If your contribution involves a significant amount of work or substantial
+changes to any part of the project, please open an issue to discuss it first.
+
+Make sure to adhere to the coding conventions used throughout a project
+(indentation, accurate comments, etc.). Please update any documentation that is
+relevant to the change you're making.
+
+## Do not…
+
+Please **do not** use the issue tracker for personal support requests (use
+[Stack Overflow](http://stackoverflow.com/)).
+
+Please **do not** derail or troll issues. Keep the
+discussion on topic and respect the opinions of others.
+
+*props [html5-boilerplate](https://github.com/h5bp/html5-boilerplate/blob/master/CONTRIBUTING.md)*
+
+[upstream]: https://github.com/twbs/bootstrap
+[converter-readme]: https://github.com/twbs/bootstrap-sass/blob/master/README.md#upstream-converter
diff --git a/web/themes/custom/proj_me_theme/bootstrap/Gemfile b/web/themes/custom/proj_me_theme/bootstrap/Gemfile
new file mode 100644
index 00000000..38da900a
--- /dev/null
+++ b/web/themes/custom/proj_me_theme/bootstrap/Gemfile
@@ -0,0 +1,10 @@
+source 'https://rubygems.org'
+
+gemspec
+
+# Compass for the dummy app
+gem 'compass', require: false
+
+group :development do
+ gem 'byebug', platforms: [:mri_21, :mri_22], require: false
+end
diff --git a/web/themes/custom/proj_me_theme/bootstrap/LICENSE b/web/themes/custom/proj_me_theme/bootstrap/LICENSE
new file mode 100644
index 00000000..a3827b59
--- /dev/null
+++ b/web/themes/custom/proj_me_theme/bootstrap/LICENSE
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2011-2016 Twitter, Inc
+Copyright (c) 2011-2016 The Bootstrap Authors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/web/themes/custom/proj_me_theme/bootstrap/README.md b/web/themes/custom/proj_me_theme/bootstrap/README.md
new file mode 100644
index 00000000..685a7da5
--- /dev/null
+++ b/web/themes/custom/proj_me_theme/bootstrap/README.md
@@ -0,0 +1,390 @@
+# Bootstrap for Sass
+[![Gem Version](https://badge.fury.io/rb/bootstrap-sass.svg)](http://badge.fury.io/rb/bootstrap-sass)
+[![npm version](https://img.shields.io/npm/v/bootstrap-sass.svg?style=flat)](https://www.npmjs.com/package/bootstrap-sass)
+[![Bower Version](https://badge.fury.io/bo/bootstrap-sass.svg)](http://badge.fury.io/bo/bootstrap-sass)
+[![Build Status](https://img.shields.io/travis/twbs/bootstrap-sass.svg)](https://travis-ci.org/twbs/bootstrap-sass)
+
+`bootstrap-sass` is a Sass-powered version of [Bootstrap](https://github.com/twbs/bootstrap) 3, ready to drop right into your Sass powered applications.
+
+This is Bootstrap 3. For Bootstrap 4 use the [Bootstrap Ruby gem](http://github.com/twbs/bootstrap-rubygem) if you use Ruby, and the [main repo](http://github.com/twbs/bootstrap) otherwise.
+
+## Installation
+
+Please see the appropriate guide for your environment of choice:
+
+* [Ruby on Rails](#a-ruby-on-rails).
+* [Compass](#b-compass-without-rails) not on Rails.
+* [Bower](#c-bower).
+* [npm / Node.js](#d-npm--nodejs).
+
+### a. Ruby on Rails
+
+`bootstrap-sass` is easy to drop into Rails with the asset pipeline.
+
+In your Gemfile you need to add the `bootstrap-sass` gem, and ensure that the `sass-rails` gem is present - it is added to new Rails applications by default.
+
+```ruby
+gem 'bootstrap-sass', '~> 3.3.6'
+gem 'sass-rails', '>= 3.2'
+```
+
+`bundle install` and restart your server to make the files available through the pipeline.
+
+Import Bootstrap styles in `app/assets/stylesheets/application.scss`:
+
+```scss
+// "bootstrap-sprockets" must be imported before "bootstrap" and "bootstrap/variables"
+@import "bootstrap-sprockets";
+@import "bootstrap";
+```
+
+`bootstrap-sprockets` must be imported before `bootstrap` for the icon fonts to work.
+
+Make sure the file has `.scss` extension (or `.sass` for Sass syntax). If you have just generated a new Rails app,
+it may come with a `.css` file instead. If this file exists, it will be served instead of Sass, so rename it:
+
+```console
+$ mv app/assets/stylesheets/application.css app/assets/stylesheets/application.scss
+```
+
+Then, remove all the `*= require_self` and `*= require_tree .` statements from the sass file. Instead, use `@import` to import Sass files.
+
+Do not use `*= require` in Sass or your other stylesheets will not be [able to access][antirequire] the Bootstrap mixins or variables.
+
+Require Bootstrap Javascripts in `app/assets/javascripts/application.js`:
+
+```js
+//= require jquery
+//= require bootstrap-sprockets
+```
+
+`bootstrap-sprockets` and `bootstrap` [should not both be included](https://github.com/twbs/bootstrap-sass/issues/829#issuecomment-75153827) in `application.js`.
+
+`bootstrap-sprockets` provides individual Bootstrap Javascript files (`alert.js` or `dropdown.js`, for example), while
+`bootstrap` provides a concatenated file containing all Bootstrap Javascripts.
+
+#### Bower with Rails
+
+When using [bootstrap-sass Bower package](#c-bower) instead of the gem in Rails, configure assets in `config/application.rb`:
+
+```ruby
+# Bower asset paths
+root.join('vendor', 'assets', 'bower_components').to_s.tap do |bower_path|
+ config.sass.load_paths << bower_path
+ config.assets.paths << bower_path
+end
+# Precompile Bootstrap fonts
+config.assets.precompile << %r(bootstrap-sass/assets/fonts/bootstrap/[\w-]+\.(?:eot|svg|ttf|woff2?)$)
+# Minimum Sass number precision required by bootstrap-sass
+::Sass::Script::Value::Number.precision = [8, ::Sass::Script::Value::Number.precision].max
+```
+
+Replace Bootstrap `@import` statements in `application.scss` with:
+
+```scss
+$icon-font-path: "bootstrap-sass/assets/fonts/bootstrap/";
+@import "bootstrap-sass/assets/stylesheets/bootstrap-sprockets";
+@import "bootstrap-sass/assets/stylesheets/bootstrap";
+```
+
+Replace Bootstrap `require` directive in `application.js` with:
+
+```js
+//= require bootstrap-sass/assets/javascripts/bootstrap-sprockets
+```
+
+#### Rails 4.x
+
+Please make sure `sprockets-rails` is at least v2.1.4.
+
+#### Rails 3.2.x
+
+bootstrap-sass is no longer compatible with Rails 3. The latest version of bootstrap-sass compatible with Rails 3.2 is v3.1.1.0.
+
+### b. Compass without Rails
+
+Install the gem:
+
+```console
+$ gem install bootstrap-sass
+```
+
+If you have an existing Compass project:
+
+1. Require `bootstrap-sass` in `config.rb`:
+
+ ```ruby
+ require 'bootstrap-sass'
+ ```
+
+2. Install Bootstrap with:
+
+ ```console
+ $ bundle exec compass install bootstrap -r bootstrap-sass
+ ```
+
+If you are creating a new Compass project, you can generate it with bootstrap-sass support:
+
+```console
+$ bundle exec compass create my-new-project -r bootstrap-sass --using bootstrap
+```
+
+or, alternatively, if you're not using a Gemfile for your dependencies:
+
+```console
+$ compass create my-new-project -r bootstrap-sass --using bootstrap
+```
+
+This will create a new Compass project with the following files in it:
+
+* [styles.sass](/templates/project/styles.sass) - main project Sass file, imports Bootstrap and variables.
+* [_bootstrap-variables.sass](/templates/project/_bootstrap-variables.sass) - all of Bootstrap variables, override them here.
+
+Some bootstrap-sass mixins may conflict with the Compass ones.
+If this happens, change the import order so that Compass mixins are loaded later.
+
+### c. Bower
+
+bootstrap-sass Bower package is compatible with node-sass 3.2.0+. You can install it with:
+
+```console
+$ bower install bootstrap-sass
+```
+
+Sass, JS, and all other assets are located at [assets](/assets).
+
+By default, `bower.json` main field list only the main `_bootstrap.scss` and all the static assets (fonts and JS).
+This is compatible by default with asset managers such as [wiredep](https://github.com/taptapship/wiredep).
+
+#### Node.js Mincer
+
+If you use [mincer][mincer] with node-sass, import Bootstrap like so:
+
+In `application.css.ejs.scss` (NB **.css.ejs.scss**):
+
+```scss
+// Import mincer asset paths helper integration
+@import "bootstrap-mincer";
+@import "bootstrap";
+```
+
+In `application.js`:
+
+```js
+//= require bootstrap-sprockets
+```
+
+See also this [example manifest.js](/test/dummy_node_mincer/manifest.js) for mincer.
+
+### d. npm / Node.js
+```console
+$ npm install bootstrap-sass
+```
+
+
+## Configuration
+
+### Sass
+
+By default all of Bootstrap is imported.
+
+You can also import components explicitly. To start with a full list of modules copy
+[`_bootstrap.scss`](assets/stylesheets/_bootstrap.scss) file into your assets as `_bootstrap-custom.scss`.
+Then comment out components you do not want from `_bootstrap-custom`.
+In the application Sass file, replace `@import 'bootstrap'` with:
+
+```scss
+@import 'bootstrap-custom';
+```
+
+### Sass: Number Precision
+
+bootstrap-sass [requires](https://github.com/twbs/bootstrap-sass/issues/409) minimum [Sass number precision][sass-precision] of 8 (default is 5).
+
+Precision is set for Rails and Compass automatically.
+When using Ruby Sass compiler standalone or with the Bower version you can set it with:
+
+```ruby
+::Sass::Script::Value::Number.precision = [8, ::Sass::Script::Value::Number.precision].max
+```
+
+### Sass: Autoprefixer
+
+Bootstrap requires the use of [Autoprefixer][autoprefixer].
+[Autoprefixer][autoprefixer] adds vendor prefixes to CSS rules using values from [Can I Use](http://caniuse.com/).
+
+To match [upstream Bootstrap's level of browser compatibility](http://getbootstrap.com/getting-started/#support), set Autoprefixer's `browsers` option to:
+```json
+[
+ "Android 2.3",
+ "Android >= 4",
+ "Chrome >= 20",
+ "Firefox >= 24",
+ "Explorer >= 8",
+ "iOS >= 6",
+ "Opera >= 12",
+ "Safari >= 6"
+]
+```
+
+### JavaScript
+
+[`assets/javascripts/bootstrap.js`](/assets/javascripts/bootstrap.js) contains all of Bootstrap's JavaScript,
+concatenated in the [correct order](/assets/javascripts/bootstrap-sprockets.js).
+
+
+#### JavaScript with Sprockets or Mincer
+
+If you use Sprockets or Mincer, you can require `bootstrap-sprockets` instead to load the individual modules:
+
+```js
+// Load all Bootstrap JavaScript
+//= require bootstrap-sprockets
+```
+
+You can also load individual modules, provided you also require any dependencies.
+You can check dependencies in the [Bootstrap JS documentation][jsdocs].
+
+```js
+//= require bootstrap/scrollspy
+//= require bootstrap/modal
+//= require bootstrap/dropdown
+```
+
+### Fonts
+
+The fonts are referenced as:
+
+```scss
+"#{$icon-font-path}#{$icon-font-name}.eot"
+```
+
+`$icon-font-path` defaults to `bootstrap/` if asset path helpers are used, and `../fonts/bootstrap/` otherwise.
+
+When using bootstrap-sass with Compass, Sprockets, or Mincer, you **must** import the relevant path helpers before Bootstrap itself, for example:
+
+```scss
+@import "bootstrap-compass";
+@import "bootstrap";
+```
+
+## Usage
+
+### Sass
+
+Import Bootstrap into a Sass file (for example, `application.scss`) to get all of Bootstrap's styles, mixins and variables!
+
+```scss
+@import "bootstrap";
+```
+
+You can also include optional Bootstrap theme:
+
+```scss
+@import "bootstrap/theme";
+```
+
+The full list of Bootstrap variables can be found [here](http://getbootstrap.com/customize/#less-variables). You can override these by simply redefining the variable before the `@import` directive, e.g.:
+
+```scss
+$navbar-default-bg: #312312;
+$light-orange: #ff8c00;
+$navbar-default-color: $light-orange;
+
+@import "bootstrap";
+```
+
+### Eyeglass
+
+Bootstrap is available as an [Eyeglass](https://github.com/sass-eyeglass/eyeglass) module. After installing Bootstrap via NPM you can import the Bootstrap library via:
+
+```scss
+@import "bootstrap-sass/bootstrap"
+```
+
+or import only the parts of Bootstrap you need:
+
+```scss
+@import "bootstrap-sass/bootstrap/variables";
+@import "bootstrap-sass/bootstrap/mixins";
+@import "bootstrap-sass/bootstrap/carousel";
+```
+
+## Version
+
+Bootstrap for Sass version may differ from the upstream version in the last number, known as
+[PATCH](http://semver.org/spec/v2.0.0.html). The patch version may be ahead of the corresponding upstream minor.
+This happens when we need to release Sass-specific changes.
+
+Before v3.3.2, Bootstrap for Sass version used to reflect the upstream version, with an additional number for
+Sass-specific changes. This was changed due to Bower and npm compatibility issues.
+
+The upstream versions vs the Bootstrap for Sass versions are:
+
+| Upstream | Sass |
+|---------:|--------:|
+| 3.3.4+ | same |
+| 3.3.2 | 3.3.3 |
+| <= 3.3.1 | 3.3.1.x |
+
+Always refer to [CHANGELOG.md](/CHANGELOG.md) when upgrading.
+
+---
+
+## Development and Contributing
+
+If you'd like to help with the development of bootstrap-sass itself, read this section.
+
+### Upstream Converter
+
+Keeping bootstrap-sass in sync with upstream changes from Bootstrap used to be an error prone and time consuming manual process. With Bootstrap 3 we have introduced a converter that automates this.
+
+**Note: if you're just looking to *use* Bootstrap 3, see the [installation](#installation) section above.**
+
+Upstream changes to the Bootstrap project can now be pulled in using the `convert` rake task.
+
+Here's an example run that would pull down the master branch from the main [twbs/bootstrap](https://github.com/twbs/bootstrap) repo:
+
+ rake convert
+
+This will convert the latest LESS to Sass and update to the latest JS.
+To convert a specific branch or version, pass the branch name or the commit hash as the first task argument:
+
+ rake convert[e8a1df5f060bf7e6631554648e0abde150aedbe4]
+
+The latest converter script is located [here][converter] and does the following:
+
+* Converts upstream Bootstrap LESS files to its matching SCSS file.
+* Copies all upstream JavaScript into `assets/javascripts/bootstrap`, a Sprockets manifest at `assets/javascripts/bootstrap-sprockets.js`, and a concatenation at `assets/javascripts/bootstrap.js`.
+* Copies all upstream font files into `assets/fonts/bootstrap`.
+* Sets `Bootstrap::BOOTSTRAP_SHA` in [version.rb][version] to the branch sha.
+
+This converter fully converts original LESS to SCSS. Conversion is automatic but requires instructions for certain transformations (see converter output).
+Please submit GitHub issues tagged with `conversion`.
+
+## Credits
+
+bootstrap-sass has a number of major contributors:
+
+
+* [Thomas McDonald](https://twitter.com/thomasmcdonald_)
+* [Tristan Harward](http://www.trisweb.com)
+* Peter Gumeson
+* [Gleb Mazovetskiy](https://github.com/glebm)
+
+and a [significant number of other contributors][contrib].
+
+## You're in good company
+bootstrap-sass is used to build some awesome projects all over the web, including
+[Diaspora](https://diasporafoundation.org/), [rails_admin](https://github.com/sferik/rails_admin),
+Michael Hartl's [Rails Tutorial](https://www.railstutorial.org/), [gitlabhq](http://gitlabhq.com/) and
+[kandan](http://getkandan.com/).
+
+[converter]: https://github.com/twbs/bootstrap-sass/blob/master/tasks/converter/less_conversion.rb
+[version]: https://github.com/twbs/bootstrap-sass/blob/master/lib/bootstrap-sass/version.rb
+[contrib]: https://github.com/twbs/bootstrap-sass/graphs/contributors
+[antirequire]: https://github.com/twbs/bootstrap-sass/issues/79#issuecomment-4428595
+[jsdocs]: http://getbootstrap.com/javascript/#transitions
+[sass-precision]: http://sass-lang.com/documentation/Sass/Script/Value/Number.html#precision%3D-class_method
+[mincer]: https://github.com/nodeca/mincer
+[autoprefixer]: https://github.com/postcss/autoprefixer
diff --git a/web/themes/custom/proj_me_theme/bootstrap/Rakefile b/web/themes/custom/proj_me_theme/bootstrap/Rakefile
new file mode 100644
index 00000000..3e88526d
--- /dev/null
+++ b/web/themes/custom/proj_me_theme/bootstrap/Rakefile
@@ -0,0 +1,94 @@
+lib_path = File.join(File.dirname(__FILE__), 'lib')
+$:.unshift(lib_path) unless $:.include?(lib_path)
+
+load './tasks/bower.rake'
+
+require 'rake/testtask'
+Rake::TestTask.new do |t|
+ t.libs << 'test'
+ t.test_files = FileList['test/**/*_test.rb']
+ t.verbose = true
+end
+
+desc 'Test all Gemfiles from test/*.gemfile'
+task :test_all_gemfiles do
+ require 'term/ansicolor'
+ require 'pty'
+ require 'shellwords'
+ cmd = 'bundle install --quiet && bundle exec rake --trace'
+ statuses = Dir.glob('./test/gemfiles/*{[!.lock]}').map do |gemfile|
+ env = {'BUNDLE_GEMFILE' => gemfile}
+ cmd_with_env = " (#{env.map { |k, v| "export #{k}=#{Shellwords.escape v}" } * ' '}; #{cmd})"
+ $stderr.puts Term::ANSIColor.cyan("Testing\n#{cmd_with_env}")
+ PTY.spawn(env, cmd) do |r, _w, pid|
+ begin
+ r.each_line { |l| puts l }
+ rescue Errno::EIO
+ # Errno:EIO error means that the process has finished giving output.
+ ensure
+ ::Process.wait pid
+ end
+ end
+ [$? && $?.exitstatus == 0, cmd_with_env]
+ end
+ failed_cmds = statuses.reject(&:first).map { |(_status, cmd_with_env)| cmd_with_env }
+ if failed_cmds.empty?
+ $stderr.puts Term::ANSIColor.green('Tests pass with all gemfiles')
+ else
+ $stderr.puts Term::ANSIColor.red("Failing (#{failed_cmds.size} / #{statuses.size})\n#{failed_cmds * "\n"}")
+ exit 1
+ end
+end
+
+desc 'Dumps output to a CSS file for testing'
+task :debug do
+ require 'sass'
+ path = Bootstrap.stylesheets_path
+ %w(bootstrap).each do |file|
+ engine = Sass::Engine.for_file("#{path}/#{file}.scss", syntax: :scss, load_paths: [path])
+ File.open("./#{file}.css", 'w') { |f| f.write(engine.render) }
+ end
+end
+
+desc 'Convert bootstrap to bootstrap-sass'
+task :convert, :branch do |t, args|
+ require './tasks/converter'
+ Converter.new(branch: args[:branch]).process_bootstrap
+end
+
+desc 'LESS to stdin -> Sass to stdout'
+task :less_to_scss, :branch do |t, args|
+ require './tasks/converter'
+ puts Converter.new(branch: args[:branch]).convert_less(STDIN.read)
+end
+
+desc 'Compile bootstrap-sass to tmp/ (or first arg)'
+task :compile, :css_path do |t, args|
+ require 'sass'
+ require 'term/ansicolor'
+
+ path = 'assets/stylesheets'
+ css_path = args.with_defaults(css_path: 'tmp')[:css_path]
+ puts Term::ANSIColor.bold "Compiling SCSS in #{path}"
+ Dir.mkdir(css_path) unless File.directory?(css_path)
+ %w(_bootstrap bootstrap/_theme).each do |file|
+ save_path = "#{css_path}/#{file.sub(/(^|\/)?_+/, '\1').sub('/', '-')}.css"
+ puts Term::ANSIColor.cyan(" #{save_path}") + '...'
+ engine = Sass::Engine.for_file("#{path}/#{file}.scss", syntax: :scss, load_paths: [path])
+ css = engine.render
+ File.open(save_path, 'w') { |f| f.write css }
+ end
+end
+
+desc 'Start a dummy (test) Rails app server'
+task :dummy_rails do
+ require 'rack'
+ require 'term/ansicolor'
+ port = ENV['PORT'] || 9292
+ puts %Q(Starting on #{Term::ANSIColor.cyan "http://localhost:#{port}"})
+ Rack::Server.start(
+ config: 'test/dummy_rails/config.ru',
+ Port: port)
+end
+
+task default: :test
diff --git a/web/themes/custom/proj_me_theme/bootstrap/assets/fonts/bootstrap/glyphicons-halflings-regular.eot b/web/themes/custom/proj_me_theme/bootstrap/assets/fonts/bootstrap/glyphicons-halflings-regular.eot
new file mode 100644
index 00000000..b93a4953
Binary files /dev/null and b/web/themes/custom/proj_me_theme/bootstrap/assets/fonts/bootstrap/glyphicons-halflings-regular.eot differ
diff --git a/web/themes/custom/proj_me_theme/bootstrap/assets/fonts/bootstrap/glyphicons-halflings-regular.svg b/web/themes/custom/proj_me_theme/bootstrap/assets/fonts/bootstrap/glyphicons-halflings-regular.svg
new file mode 100644
index 00000000..94fb5490
--- /dev/null
+++ b/web/themes/custom/proj_me_theme/bootstrap/assets/fonts/bootstrap/glyphicons-halflings-regular.svg
@@ -0,0 +1,288 @@
+
+
+
\ No newline at end of file
diff --git a/web/themes/custom/proj_me_theme/bootstrap/assets/fonts/bootstrap/glyphicons-halflings-regular.ttf b/web/themes/custom/proj_me_theme/bootstrap/assets/fonts/bootstrap/glyphicons-halflings-regular.ttf
new file mode 100644
index 00000000..1413fc60
Binary files /dev/null and b/web/themes/custom/proj_me_theme/bootstrap/assets/fonts/bootstrap/glyphicons-halflings-regular.ttf differ
diff --git a/web/themes/custom/proj_me_theme/bootstrap/assets/fonts/bootstrap/glyphicons-halflings-regular.woff b/web/themes/custom/proj_me_theme/bootstrap/assets/fonts/bootstrap/glyphicons-halflings-regular.woff
new file mode 100644
index 00000000..9e612858
Binary files /dev/null and b/web/themes/custom/proj_me_theme/bootstrap/assets/fonts/bootstrap/glyphicons-halflings-regular.woff differ
diff --git a/web/themes/custom/proj_me_theme/bootstrap/assets/fonts/bootstrap/glyphicons-halflings-regular.woff2 b/web/themes/custom/proj_me_theme/bootstrap/assets/fonts/bootstrap/glyphicons-halflings-regular.woff2
new file mode 100644
index 00000000..64539b54
Binary files /dev/null and b/web/themes/custom/proj_me_theme/bootstrap/assets/fonts/bootstrap/glyphicons-halflings-regular.woff2 differ
diff --git a/web/themes/custom/proj_me_theme/bootstrap/assets/images/.keep b/web/themes/custom/proj_me_theme/bootstrap/assets/images/.keep
new file mode 100644
index 00000000..e69de29b
diff --git a/web/themes/custom/proj_me_theme/bootstrap/assets/javascripts/bootstrap-sprockets.js b/web/themes/custom/proj_me_theme/bootstrap/assets/javascripts/bootstrap-sprockets.js
new file mode 100644
index 00000000..fb01d63f
--- /dev/null
+++ b/web/themes/custom/proj_me_theme/bootstrap/assets/javascripts/bootstrap-sprockets.js
@@ -0,0 +1,12 @@
+//= require ./bootstrap/transition
+//= require ./bootstrap/alert
+//= require ./bootstrap/button
+//= require ./bootstrap/carousel
+//= require ./bootstrap/collapse
+//= require ./bootstrap/dropdown
+//= require ./bootstrap/modal
+//= require ./bootstrap/tab
+//= require ./bootstrap/affix
+//= require ./bootstrap/scrollspy
+//= require ./bootstrap/tooltip
+//= require ./bootstrap/popover
diff --git a/web/themes/custom/proj_me_theme/bootstrap/assets/javascripts/bootstrap.js b/web/themes/custom/proj_me_theme/bootstrap/assets/javascripts/bootstrap.js
new file mode 100644
index 00000000..8a2e99a5
--- /dev/null
+++ b/web/themes/custom/proj_me_theme/bootstrap/assets/javascripts/bootstrap.js
@@ -0,0 +1,2377 @@
+/*!
+ * Bootstrap v3.3.7 (http://getbootstrap.com)
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under the MIT license
+ */
+
+if (typeof jQuery === 'undefined') {
+ throw new Error('Bootstrap\'s JavaScript requires jQuery')
+}
+
++function ($) {
+ 'use strict';
+ var version = $.fn.jquery.split(' ')[0].split('.')
+ if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) {
+ throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4')
+ }
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: transition.js v3.3.7
+ * http://getbootstrap.com/javascript/#transitions
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
+ // ============================================================
+
+ function transitionEnd() {
+ var el = document.createElement('bootstrap')
+
+ var transEndEventNames = {
+ WebkitTransition : 'webkitTransitionEnd',
+ MozTransition : 'transitionend',
+ OTransition : 'oTransitionEnd otransitionend',
+ transition : 'transitionend'
+ }
+
+ for (var name in transEndEventNames) {
+ if (el.style[name] !== undefined) {
+ return { end: transEndEventNames[name] }
+ }
+ }
+
+ return false // explicit for ie8 ( ._.)
+ }
+
+ // http://blog.alexmaccaw.com/css-transitions
+ $.fn.emulateTransitionEnd = function (duration) {
+ var called = false
+ var $el = this
+ $(this).one('bsTransitionEnd', function () { called = true })
+ var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
+ setTimeout(callback, duration)
+ return this
+ }
+
+ $(function () {
+ $.support.transition = transitionEnd()
+
+ if (!$.support.transition) return
+
+ $.event.special.bsTransitionEnd = {
+ bindType: $.support.transition.end,
+ delegateType: $.support.transition.end,
+ handle: function (e) {
+ if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
+ }
+ }
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: alert.js v3.3.7
+ * http://getbootstrap.com/javascript/#alerts
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // ALERT CLASS DEFINITION
+ // ======================
+
+ var dismiss = '[data-dismiss="alert"]'
+ var Alert = function (el) {
+ $(el).on('click', dismiss, this.close)
+ }
+
+ Alert.VERSION = '3.3.7'
+
+ Alert.TRANSITION_DURATION = 150
+
+ Alert.prototype.close = function (e) {
+ var $this = $(this)
+ var selector = $this.attr('data-target')
+
+ if (!selector) {
+ selector = $this.attr('href')
+ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
+ }
+
+ var $parent = $(selector === '#' ? [] : selector)
+
+ if (e) e.preventDefault()
+
+ if (!$parent.length) {
+ $parent = $this.closest('.alert')
+ }
+
+ $parent.trigger(e = $.Event('close.bs.alert'))
+
+ if (e.isDefaultPrevented()) return
+
+ $parent.removeClass('in')
+
+ function removeElement() {
+ // detach from parent, fire event then clean up data
+ $parent.detach().trigger('closed.bs.alert').remove()
+ }
+
+ $.support.transition && $parent.hasClass('fade') ?
+ $parent
+ .one('bsTransitionEnd', removeElement)
+ .emulateTransitionEnd(Alert.TRANSITION_DURATION) :
+ removeElement()
+ }
+
+
+ // ALERT PLUGIN DEFINITION
+ // =======================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.alert')
+
+ if (!data) $this.data('bs.alert', (data = new Alert(this)))
+ if (typeof option == 'string') data[option].call($this)
+ })
+ }
+
+ var old = $.fn.alert
+
+ $.fn.alert = Plugin
+ $.fn.alert.Constructor = Alert
+
+
+ // ALERT NO CONFLICT
+ // =================
+
+ $.fn.alert.noConflict = function () {
+ $.fn.alert = old
+ return this
+ }
+
+
+ // ALERT DATA-API
+ // ==============
+
+ $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: button.js v3.3.7
+ * http://getbootstrap.com/javascript/#buttons
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // BUTTON PUBLIC CLASS DEFINITION
+ // ==============================
+
+ var Button = function (element, options) {
+ this.$element = $(element)
+ this.options = $.extend({}, Button.DEFAULTS, options)
+ this.isLoading = false
+ }
+
+ Button.VERSION = '3.3.7'
+
+ Button.DEFAULTS = {
+ loadingText: 'loading...'
+ }
+
+ Button.prototype.setState = function (state) {
+ var d = 'disabled'
+ var $el = this.$element
+ var val = $el.is('input') ? 'val' : 'html'
+ var data = $el.data()
+
+ state += 'Text'
+
+ if (data.resetText == null) $el.data('resetText', $el[val]())
+
+ // push to event loop to allow forms to submit
+ setTimeout($.proxy(function () {
+ $el[val](data[state] == null ? this.options[state] : data[state])
+
+ if (state == 'loadingText') {
+ this.isLoading = true
+ $el.addClass(d).attr(d, d).prop(d, true)
+ } else if (this.isLoading) {
+ this.isLoading = false
+ $el.removeClass(d).removeAttr(d).prop(d, false)
+ }
+ }, this), 0)
+ }
+
+ Button.prototype.toggle = function () {
+ var changed = true
+ var $parent = this.$element.closest('[data-toggle="buttons"]')
+
+ if ($parent.length) {
+ var $input = this.$element.find('input')
+ if ($input.prop('type') == 'radio') {
+ if ($input.prop('checked')) changed = false
+ $parent.find('.active').removeClass('active')
+ this.$element.addClass('active')
+ } else if ($input.prop('type') == 'checkbox') {
+ if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false
+ this.$element.toggleClass('active')
+ }
+ $input.prop('checked', this.$element.hasClass('active'))
+ if (changed) $input.trigger('change')
+ } else {
+ this.$element.attr('aria-pressed', !this.$element.hasClass('active'))
+ this.$element.toggleClass('active')
+ }
+ }
+
+
+ // BUTTON PLUGIN DEFINITION
+ // ========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.button')
+ var options = typeof option == 'object' && option
+
+ if (!data) $this.data('bs.button', (data = new Button(this, options)))
+
+ if (option == 'toggle') data.toggle()
+ else if (option) data.setState(option)
+ })
+ }
+
+ var old = $.fn.button
+
+ $.fn.button = Plugin
+ $.fn.button.Constructor = Button
+
+
+ // BUTTON NO CONFLICT
+ // ==================
+
+ $.fn.button.noConflict = function () {
+ $.fn.button = old
+ return this
+ }
+
+
+ // BUTTON DATA-API
+ // ===============
+
+ $(document)
+ .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
+ var $btn = $(e.target).closest('.btn')
+ Plugin.call($btn, 'toggle')
+ if (!($(e.target).is('input[type="radio"], input[type="checkbox"]'))) {
+ // Prevent double click on radios, and the double selections (so cancellation) on checkboxes
+ e.preventDefault()
+ // The target component still receive the focus
+ if ($btn.is('input,button')) $btn.trigger('focus')
+ else $btn.find('input:visible,button:visible').first().trigger('focus')
+ }
+ })
+ .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
+ $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: carousel.js v3.3.7
+ * http://getbootstrap.com/javascript/#carousel
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // CAROUSEL CLASS DEFINITION
+ // =========================
+
+ var Carousel = function (element, options) {
+ this.$element = $(element)
+ this.$indicators = this.$element.find('.carousel-indicators')
+ this.options = options
+ this.paused = null
+ this.sliding = null
+ this.interval = null
+ this.$active = null
+ this.$items = null
+
+ this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))
+
+ this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element
+ .on('mouseenter.bs.carousel', $.proxy(this.pause, this))
+ .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
+ }
+
+ Carousel.VERSION = '3.3.7'
+
+ Carousel.TRANSITION_DURATION = 600
+
+ Carousel.DEFAULTS = {
+ interval: 5000,
+ pause: 'hover',
+ wrap: true,
+ keyboard: true
+ }
+
+ Carousel.prototype.keydown = function (e) {
+ if (/input|textarea/i.test(e.target.tagName)) return
+ switch (e.which) {
+ case 37: this.prev(); break
+ case 39: this.next(); break
+ default: return
+ }
+
+ e.preventDefault()
+ }
+
+ Carousel.prototype.cycle = function (e) {
+ e || (this.paused = false)
+
+ this.interval && clearInterval(this.interval)
+
+ this.options.interval
+ && !this.paused
+ && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
+
+ return this
+ }
+
+ Carousel.prototype.getItemIndex = function (item) {
+ this.$items = item.parent().children('.item')
+ return this.$items.index(item || this.$active)
+ }
+
+ Carousel.prototype.getItemForDirection = function (direction, active) {
+ var activeIndex = this.getItemIndex(active)
+ var willWrap = (direction == 'prev' && activeIndex === 0)
+ || (direction == 'next' && activeIndex == (this.$items.length - 1))
+ if (willWrap && !this.options.wrap) return active
+ var delta = direction == 'prev' ? -1 : 1
+ var itemIndex = (activeIndex + delta) % this.$items.length
+ return this.$items.eq(itemIndex)
+ }
+
+ Carousel.prototype.to = function (pos) {
+ var that = this
+ var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))
+
+ if (pos > (this.$items.length - 1) || pos < 0) return
+
+ if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
+ if (activeIndex == pos) return this.pause().cycle()
+
+ return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))
+ }
+
+ Carousel.prototype.pause = function (e) {
+ e || (this.paused = true)
+
+ if (this.$element.find('.next, .prev').length && $.support.transition) {
+ this.$element.trigger($.support.transition.end)
+ this.cycle(true)
+ }
+
+ this.interval = clearInterval(this.interval)
+
+ return this
+ }
+
+ Carousel.prototype.next = function () {
+ if (this.sliding) return
+ return this.slide('next')
+ }
+
+ Carousel.prototype.prev = function () {
+ if (this.sliding) return
+ return this.slide('prev')
+ }
+
+ Carousel.prototype.slide = function (type, next) {
+ var $active = this.$element.find('.item.active')
+ var $next = next || this.getItemForDirection(type, $active)
+ var isCycling = this.interval
+ var direction = type == 'next' ? 'left' : 'right'
+ var that = this
+
+ if ($next.hasClass('active')) return (this.sliding = false)
+
+ var relatedTarget = $next[0]
+ var slideEvent = $.Event('slide.bs.carousel', {
+ relatedTarget: relatedTarget,
+ direction: direction
+ })
+ this.$element.trigger(slideEvent)
+ if (slideEvent.isDefaultPrevented()) return
+
+ this.sliding = true
+
+ isCycling && this.pause()
+
+ if (this.$indicators.length) {
+ this.$indicators.find('.active').removeClass('active')
+ var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])
+ $nextIndicator && $nextIndicator.addClass('active')
+ }
+
+ var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
+ if ($.support.transition && this.$element.hasClass('slide')) {
+ $next.addClass(type)
+ $next[0].offsetWidth // force reflow
+ $active.addClass(direction)
+ $next.addClass(direction)
+ $active
+ .one('bsTransitionEnd', function () {
+ $next.removeClass([type, direction].join(' ')).addClass('active')
+ $active.removeClass(['active', direction].join(' '))
+ that.sliding = false
+ setTimeout(function () {
+ that.$element.trigger(slidEvent)
+ }, 0)
+ })
+ .emulateTransitionEnd(Carousel.TRANSITION_DURATION)
+ } else {
+ $active.removeClass('active')
+ $next.addClass('active')
+ this.sliding = false
+ this.$element.trigger(slidEvent)
+ }
+
+ isCycling && this.cycle()
+
+ return this
+ }
+
+
+ // CAROUSEL PLUGIN DEFINITION
+ // ==========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.carousel')
+ var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
+ var action = typeof option == 'string' ? option : options.slide
+
+ if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
+ if (typeof option == 'number') data.to(option)
+ else if (action) data[action]()
+ else if (options.interval) data.pause().cycle()
+ })
+ }
+
+ var old = $.fn.carousel
+
+ $.fn.carousel = Plugin
+ $.fn.carousel.Constructor = Carousel
+
+
+ // CAROUSEL NO CONFLICT
+ // ====================
+
+ $.fn.carousel.noConflict = function () {
+ $.fn.carousel = old
+ return this
+ }
+
+
+ // CAROUSEL DATA-API
+ // =================
+
+ var clickHandler = function (e) {
+ var href
+ var $this = $(this)
+ var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
+ if (!$target.hasClass('carousel')) return
+ var options = $.extend({}, $target.data(), $this.data())
+ var slideIndex = $this.attr('data-slide-to')
+ if (slideIndex) options.interval = false
+
+ Plugin.call($target, options)
+
+ if (slideIndex) {
+ $target.data('bs.carousel').to(slideIndex)
+ }
+
+ e.preventDefault()
+ }
+
+ $(document)
+ .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)
+ .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)
+
+ $(window).on('load', function () {
+ $('[data-ride="carousel"]').each(function () {
+ var $carousel = $(this)
+ Plugin.call($carousel, $carousel.data())
+ })
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: collapse.js v3.3.7
+ * http://getbootstrap.com/javascript/#collapse
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+/* jshint latedef: false */
+
++function ($) {
+ 'use strict';
+
+ // COLLAPSE PUBLIC CLASS DEFINITION
+ // ================================
+
+ var Collapse = function (element, options) {
+ this.$element = $(element)
+ this.options = $.extend({}, Collapse.DEFAULTS, options)
+ this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' +
+ '[data-toggle="collapse"][data-target="#' + element.id + '"]')
+ this.transitioning = null
+
+ if (this.options.parent) {
+ this.$parent = this.getParent()
+ } else {
+ this.addAriaAndCollapsedClass(this.$element, this.$trigger)
+ }
+
+ if (this.options.toggle) this.toggle()
+ }
+
+ Collapse.VERSION = '3.3.7'
+
+ Collapse.TRANSITION_DURATION = 350
+
+ Collapse.DEFAULTS = {
+ toggle: true
+ }
+
+ Collapse.prototype.dimension = function () {
+ var hasWidth = this.$element.hasClass('width')
+ return hasWidth ? 'width' : 'height'
+ }
+
+ Collapse.prototype.show = function () {
+ if (this.transitioning || this.$element.hasClass('in')) return
+
+ var activesData
+ var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')
+
+ if (actives && actives.length) {
+ activesData = actives.data('bs.collapse')
+ if (activesData && activesData.transitioning) return
+ }
+
+ var startEvent = $.Event('show.bs.collapse')
+ this.$element.trigger(startEvent)
+ if (startEvent.isDefaultPrevented()) return
+
+ if (actives && actives.length) {
+ Plugin.call(actives, 'hide')
+ activesData || actives.data('bs.collapse', null)
+ }
+
+ var dimension = this.dimension()
+
+ this.$element
+ .removeClass('collapse')
+ .addClass('collapsing')[dimension](0)
+ .attr('aria-expanded', true)
+
+ this.$trigger
+ .removeClass('collapsed')
+ .attr('aria-expanded', true)
+
+ this.transitioning = 1
+
+ var complete = function () {
+ this.$element
+ .removeClass('collapsing')
+ .addClass('collapse in')[dimension]('')
+ this.transitioning = 0
+ this.$element
+ .trigger('shown.bs.collapse')
+ }
+
+ if (!$.support.transition) return complete.call(this)
+
+ var scrollSize = $.camelCase(['scroll', dimension].join('-'))
+
+ this.$element
+ .one('bsTransitionEnd', $.proxy(complete, this))
+ .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])
+ }
+
+ Collapse.prototype.hide = function () {
+ if (this.transitioning || !this.$element.hasClass('in')) return
+
+ var startEvent = $.Event('hide.bs.collapse')
+ this.$element.trigger(startEvent)
+ if (startEvent.isDefaultPrevented()) return
+
+ var dimension = this.dimension()
+
+ this.$element[dimension](this.$element[dimension]())[0].offsetHeight
+
+ this.$element
+ .addClass('collapsing')
+ .removeClass('collapse in')
+ .attr('aria-expanded', false)
+
+ this.$trigger
+ .addClass('collapsed')
+ .attr('aria-expanded', false)
+
+ this.transitioning = 1
+
+ var complete = function () {
+ this.transitioning = 0
+ this.$element
+ .removeClass('collapsing')
+ .addClass('collapse')
+ .trigger('hidden.bs.collapse')
+ }
+
+ if (!$.support.transition) return complete.call(this)
+
+ this.$element
+ [dimension](0)
+ .one('bsTransitionEnd', $.proxy(complete, this))
+ .emulateTransitionEnd(Collapse.TRANSITION_DURATION)
+ }
+
+ Collapse.prototype.toggle = function () {
+ this[this.$element.hasClass('in') ? 'hide' : 'show']()
+ }
+
+ Collapse.prototype.getParent = function () {
+ return $(this.options.parent)
+ .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
+ .each($.proxy(function (i, element) {
+ var $element = $(element)
+ this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)
+ }, this))
+ .end()
+ }
+
+ Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {
+ var isOpen = $element.hasClass('in')
+
+ $element.attr('aria-expanded', isOpen)
+ $trigger
+ .toggleClass('collapsed', !isOpen)
+ .attr('aria-expanded', isOpen)
+ }
+
+ function getTargetFromTrigger($trigger) {
+ var href
+ var target = $trigger.attr('data-target')
+ || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
+
+ return $(target)
+ }
+
+
+ // COLLAPSE PLUGIN DEFINITION
+ // ==========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.collapse')
+ var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
+
+ if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false
+ if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.collapse
+
+ $.fn.collapse = Plugin
+ $.fn.collapse.Constructor = Collapse
+
+
+ // COLLAPSE NO CONFLICT
+ // ====================
+
+ $.fn.collapse.noConflict = function () {
+ $.fn.collapse = old
+ return this
+ }
+
+
+ // COLLAPSE DATA-API
+ // =================
+
+ $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
+ var $this = $(this)
+
+ if (!$this.attr('data-target')) e.preventDefault()
+
+ var $target = getTargetFromTrigger($this)
+ var data = $target.data('bs.collapse')
+ var option = data ? 'toggle' : $this.data()
+
+ Plugin.call($target, option)
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: dropdown.js v3.3.7
+ * http://getbootstrap.com/javascript/#dropdowns
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // DROPDOWN CLASS DEFINITION
+ // =========================
+
+ var backdrop = '.dropdown-backdrop'
+ var toggle = '[data-toggle="dropdown"]'
+ var Dropdown = function (element) {
+ $(element).on('click.bs.dropdown', this.toggle)
+ }
+
+ Dropdown.VERSION = '3.3.7'
+
+ function getParent($this) {
+ var selector = $this.attr('data-target')
+
+ if (!selector) {
+ selector = $this.attr('href')
+ selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
+ }
+
+ var $parent = selector && $(selector)
+
+ return $parent && $parent.length ? $parent : $this.parent()
+ }
+
+ function clearMenus(e) {
+ if (e && e.which === 3) return
+ $(backdrop).remove()
+ $(toggle).each(function () {
+ var $this = $(this)
+ var $parent = getParent($this)
+ var relatedTarget = { relatedTarget: this }
+
+ if (!$parent.hasClass('open')) return
+
+ if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return
+
+ $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
+
+ if (e.isDefaultPrevented()) return
+
+ $this.attr('aria-expanded', 'false')
+ $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))
+ })
+ }
+
+ Dropdown.prototype.toggle = function (e) {
+ var $this = $(this)
+
+ if ($this.is('.disabled, :disabled')) return
+
+ var $parent = getParent($this)
+ var isActive = $parent.hasClass('open')
+
+ clearMenus()
+
+ if (!isActive) {
+ if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
+ // if mobile we use a backdrop because click events don't delegate
+ $(document.createElement('div'))
+ .addClass('dropdown-backdrop')
+ .insertAfter($(this))
+ .on('click', clearMenus)
+ }
+
+ var relatedTarget = { relatedTarget: this }
+ $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
+
+ if (e.isDefaultPrevented()) return
+
+ $this
+ .trigger('focus')
+ .attr('aria-expanded', 'true')
+
+ $parent
+ .toggleClass('open')
+ .trigger($.Event('shown.bs.dropdown', relatedTarget))
+ }
+
+ return false
+ }
+
+ Dropdown.prototype.keydown = function (e) {
+ if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return
+
+ var $this = $(this)
+
+ e.preventDefault()
+ e.stopPropagation()
+
+ if ($this.is('.disabled, :disabled')) return
+
+ var $parent = getParent($this)
+ var isActive = $parent.hasClass('open')
+
+ if (!isActive && e.which != 27 || isActive && e.which == 27) {
+ if (e.which == 27) $parent.find(toggle).trigger('focus')
+ return $this.trigger('click')
+ }
+
+ var desc = ' li:not(.disabled):visible a'
+ var $items = $parent.find('.dropdown-menu' + desc)
+
+ if (!$items.length) return
+
+ var index = $items.index(e.target)
+
+ if (e.which == 38 && index > 0) index-- // up
+ if (e.which == 40 && index < $items.length - 1) index++ // down
+ if (!~index) index = 0
+
+ $items.eq(index).trigger('focus')
+ }
+
+
+ // DROPDOWN PLUGIN DEFINITION
+ // ==========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.dropdown')
+
+ if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
+ if (typeof option == 'string') data[option].call($this)
+ })
+ }
+
+ var old = $.fn.dropdown
+
+ $.fn.dropdown = Plugin
+ $.fn.dropdown.Constructor = Dropdown
+
+
+ // DROPDOWN NO CONFLICT
+ // ====================
+
+ $.fn.dropdown.noConflict = function () {
+ $.fn.dropdown = old
+ return this
+ }
+
+
+ // APPLY TO STANDARD DROPDOWN ELEMENTS
+ // ===================================
+
+ $(document)
+ .on('click.bs.dropdown.data-api', clearMenus)
+ .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
+ .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
+ .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)
+ .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: modal.js v3.3.7
+ * http://getbootstrap.com/javascript/#modals
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // MODAL CLASS DEFINITION
+ // ======================
+
+ var Modal = function (element, options) {
+ this.options = options
+ this.$body = $(document.body)
+ this.$element = $(element)
+ this.$dialog = this.$element.find('.modal-dialog')
+ this.$backdrop = null
+ this.isShown = null
+ this.originalBodyPad = null
+ this.scrollbarWidth = 0
+ this.ignoreBackdropClick = false
+
+ if (this.options.remote) {
+ this.$element
+ .find('.modal-content')
+ .load(this.options.remote, $.proxy(function () {
+ this.$element.trigger('loaded.bs.modal')
+ }, this))
+ }
+ }
+
+ Modal.VERSION = '3.3.7'
+
+ Modal.TRANSITION_DURATION = 300
+ Modal.BACKDROP_TRANSITION_DURATION = 150
+
+ Modal.DEFAULTS = {
+ backdrop: true,
+ keyboard: true,
+ show: true
+ }
+
+ Modal.prototype.toggle = function (_relatedTarget) {
+ return this.isShown ? this.hide() : this.show(_relatedTarget)
+ }
+
+ Modal.prototype.show = function (_relatedTarget) {
+ var that = this
+ var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
+
+ this.$element.trigger(e)
+
+ if (this.isShown || e.isDefaultPrevented()) return
+
+ this.isShown = true
+
+ this.checkScrollbar()
+ this.setScrollbar()
+ this.$body.addClass('modal-open')
+
+ this.escape()
+ this.resize()
+
+ this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
+
+ this.$dialog.on('mousedown.dismiss.bs.modal', function () {
+ that.$element.one('mouseup.dismiss.bs.modal', function (e) {
+ if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true
+ })
+ })
+
+ this.backdrop(function () {
+ var transition = $.support.transition && that.$element.hasClass('fade')
+
+ if (!that.$element.parent().length) {
+ that.$element.appendTo(that.$body) // don't move modals dom position
+ }
+
+ that.$element
+ .show()
+ .scrollTop(0)
+
+ that.adjustDialog()
+
+ if (transition) {
+ that.$element[0].offsetWidth // force reflow
+ }
+
+ that.$element.addClass('in')
+
+ that.enforceFocus()
+
+ var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
+
+ transition ?
+ that.$dialog // wait for modal to slide in
+ .one('bsTransitionEnd', function () {
+ that.$element.trigger('focus').trigger(e)
+ })
+ .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
+ that.$element.trigger('focus').trigger(e)
+ })
+ }
+
+ Modal.prototype.hide = function (e) {
+ if (e) e.preventDefault()
+
+ e = $.Event('hide.bs.modal')
+
+ this.$element.trigger(e)
+
+ if (!this.isShown || e.isDefaultPrevented()) return
+
+ this.isShown = false
+
+ this.escape()
+ this.resize()
+
+ $(document).off('focusin.bs.modal')
+
+ this.$element
+ .removeClass('in')
+ .off('click.dismiss.bs.modal')
+ .off('mouseup.dismiss.bs.modal')
+
+ this.$dialog.off('mousedown.dismiss.bs.modal')
+
+ $.support.transition && this.$element.hasClass('fade') ?
+ this.$element
+ .one('bsTransitionEnd', $.proxy(this.hideModal, this))
+ .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
+ this.hideModal()
+ }
+
+ Modal.prototype.enforceFocus = function () {
+ $(document)
+ .off('focusin.bs.modal') // guard against infinite focus loop
+ .on('focusin.bs.modal', $.proxy(function (e) {
+ if (document !== e.target &&
+ this.$element[0] !== e.target &&
+ !this.$element.has(e.target).length) {
+ this.$element.trigger('focus')
+ }
+ }, this))
+ }
+
+ Modal.prototype.escape = function () {
+ if (this.isShown && this.options.keyboard) {
+ this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {
+ e.which == 27 && this.hide()
+ }, this))
+ } else if (!this.isShown) {
+ this.$element.off('keydown.dismiss.bs.modal')
+ }
+ }
+
+ Modal.prototype.resize = function () {
+ if (this.isShown) {
+ $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))
+ } else {
+ $(window).off('resize.bs.modal')
+ }
+ }
+
+ Modal.prototype.hideModal = function () {
+ var that = this
+ this.$element.hide()
+ this.backdrop(function () {
+ that.$body.removeClass('modal-open')
+ that.resetAdjustments()
+ that.resetScrollbar()
+ that.$element.trigger('hidden.bs.modal')
+ })
+ }
+
+ Modal.prototype.removeBackdrop = function () {
+ this.$backdrop && this.$backdrop.remove()
+ this.$backdrop = null
+ }
+
+ Modal.prototype.backdrop = function (callback) {
+ var that = this
+ var animate = this.$element.hasClass('fade') ? 'fade' : ''
+
+ if (this.isShown && this.options.backdrop) {
+ var doAnimate = $.support.transition && animate
+
+ this.$backdrop = $(document.createElement('div'))
+ .addClass('modal-backdrop ' + animate)
+ .appendTo(this.$body)
+
+ this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
+ if (this.ignoreBackdropClick) {
+ this.ignoreBackdropClick = false
+ return
+ }
+ if (e.target !== e.currentTarget) return
+ this.options.backdrop == 'static'
+ ? this.$element[0].focus()
+ : this.hide()
+ }, this))
+
+ if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
+
+ this.$backdrop.addClass('in')
+
+ if (!callback) return
+
+ doAnimate ?
+ this.$backdrop
+ .one('bsTransitionEnd', callback)
+ .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
+ callback()
+
+ } else if (!this.isShown && this.$backdrop) {
+ this.$backdrop.removeClass('in')
+
+ var callbackRemove = function () {
+ that.removeBackdrop()
+ callback && callback()
+ }
+ $.support.transition && this.$element.hasClass('fade') ?
+ this.$backdrop
+ .one('bsTransitionEnd', callbackRemove)
+ .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
+ callbackRemove()
+
+ } else if (callback) {
+ callback()
+ }
+ }
+
+ // these following methods are used to handle overflowing modals
+
+ Modal.prototype.handleUpdate = function () {
+ this.adjustDialog()
+ }
+
+ Modal.prototype.adjustDialog = function () {
+ var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
+
+ this.$element.css({
+ paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
+ paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
+ })
+ }
+
+ Modal.prototype.resetAdjustments = function () {
+ this.$element.css({
+ paddingLeft: '',
+ paddingRight: ''
+ })
+ }
+
+ Modal.prototype.checkScrollbar = function () {
+ var fullWindowWidth = window.innerWidth
+ if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8
+ var documentElementRect = document.documentElement.getBoundingClientRect()
+ fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)
+ }
+ this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth
+ this.scrollbarWidth = this.measureScrollbar()
+ }
+
+ Modal.prototype.setScrollbar = function () {
+ var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
+ this.originalBodyPad = document.body.style.paddingRight || ''
+ if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
+ }
+
+ Modal.prototype.resetScrollbar = function () {
+ this.$body.css('padding-right', this.originalBodyPad)
+ }
+
+ Modal.prototype.measureScrollbar = function () { // thx walsh
+ var scrollDiv = document.createElement('div')
+ scrollDiv.className = 'modal-scrollbar-measure'
+ this.$body.append(scrollDiv)
+ var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
+ this.$body[0].removeChild(scrollDiv)
+ return scrollbarWidth
+ }
+
+
+ // MODAL PLUGIN DEFINITION
+ // =======================
+
+ function Plugin(option, _relatedTarget) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.modal')
+ var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
+
+ if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
+ if (typeof option == 'string') data[option](_relatedTarget)
+ else if (options.show) data.show(_relatedTarget)
+ })
+ }
+
+ var old = $.fn.modal
+
+ $.fn.modal = Plugin
+ $.fn.modal.Constructor = Modal
+
+
+ // MODAL NO CONFLICT
+ // =================
+
+ $.fn.modal.noConflict = function () {
+ $.fn.modal = old
+ return this
+ }
+
+
+ // MODAL DATA-API
+ // ==============
+
+ $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
+ var $this = $(this)
+ var href = $this.attr('href')
+ var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
+ var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
+
+ if ($this.is('a')) e.preventDefault()
+
+ $target.one('show.bs.modal', function (showEvent) {
+ if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
+ $target.one('hidden.bs.modal', function () {
+ $this.is(':visible') && $this.trigger('focus')
+ })
+ })
+ Plugin.call($target, option, this)
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: tooltip.js v3.3.7
+ * http://getbootstrap.com/javascript/#tooltip
+ * Inspired by the original jQuery.tipsy by Jason Frame
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // TOOLTIP PUBLIC CLASS DEFINITION
+ // ===============================
+
+ var Tooltip = function (element, options) {
+ this.type = null
+ this.options = null
+ this.enabled = null
+ this.timeout = null
+ this.hoverState = null
+ this.$element = null
+ this.inState = null
+
+ this.init('tooltip', element, options)
+ }
+
+ Tooltip.VERSION = '3.3.7'
+
+ Tooltip.TRANSITION_DURATION = 150
+
+ Tooltip.DEFAULTS = {
+ animation: true,
+ placement: 'top',
+ selector: false,
+ template: '',
+ trigger: 'hover focus',
+ title: '',
+ delay: 0,
+ html: false,
+ container: false,
+ viewport: {
+ selector: 'body',
+ padding: 0
+ }
+ }
+
+ Tooltip.prototype.init = function (type, element, options) {
+ this.enabled = true
+ this.type = type
+ this.$element = $(element)
+ this.options = this.getOptions(options)
+ this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))
+ this.inState = { click: false, hover: false, focus: false }
+
+ if (this.$element[0] instanceof document.constructor && !this.options.selector) {
+ throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')
+ }
+
+ var triggers = this.options.trigger.split(' ')
+
+ for (var i = triggers.length; i--;) {
+ var trigger = triggers[i]
+
+ if (trigger == 'click') {
+ this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
+ } else if (trigger != 'manual') {
+ var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'
+ var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
+
+ this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
+ this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
+ }
+ }
+
+ this.options.selector ?
+ (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
+ this.fixTitle()
+ }
+
+ Tooltip.prototype.getDefaults = function () {
+ return Tooltip.DEFAULTS
+ }
+
+ Tooltip.prototype.getOptions = function (options) {
+ options = $.extend({}, this.getDefaults(), this.$element.data(), options)
+
+ if (options.delay && typeof options.delay == 'number') {
+ options.delay = {
+ show: options.delay,
+ hide: options.delay
+ }
+ }
+
+ return options
+ }
+
+ Tooltip.prototype.getDelegateOptions = function () {
+ var options = {}
+ var defaults = this.getDefaults()
+
+ this._options && $.each(this._options, function (key, value) {
+ if (defaults[key] != value) options[key] = value
+ })
+
+ return options
+ }
+
+ Tooltip.prototype.enter = function (obj) {
+ var self = obj instanceof this.constructor ?
+ obj : $(obj.currentTarget).data('bs.' + this.type)
+
+ if (!self) {
+ self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
+ $(obj.currentTarget).data('bs.' + this.type, self)
+ }
+
+ if (obj instanceof $.Event) {
+ self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true
+ }
+
+ if (self.tip().hasClass('in') || self.hoverState == 'in') {
+ self.hoverState = 'in'
+ return
+ }
+
+ clearTimeout(self.timeout)
+
+ self.hoverState = 'in'
+
+ if (!self.options.delay || !self.options.delay.show) return self.show()
+
+ self.timeout = setTimeout(function () {
+ if (self.hoverState == 'in') self.show()
+ }, self.options.delay.show)
+ }
+
+ Tooltip.prototype.isInStateTrue = function () {
+ for (var key in this.inState) {
+ if (this.inState[key]) return true
+ }
+
+ return false
+ }
+
+ Tooltip.prototype.leave = function (obj) {
+ var self = obj instanceof this.constructor ?
+ obj : $(obj.currentTarget).data('bs.' + this.type)
+
+ if (!self) {
+ self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
+ $(obj.currentTarget).data('bs.' + this.type, self)
+ }
+
+ if (obj instanceof $.Event) {
+ self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false
+ }
+
+ if (self.isInStateTrue()) return
+
+ clearTimeout(self.timeout)
+
+ self.hoverState = 'out'
+
+ if (!self.options.delay || !self.options.delay.hide) return self.hide()
+
+ self.timeout = setTimeout(function () {
+ if (self.hoverState == 'out') self.hide()
+ }, self.options.delay.hide)
+ }
+
+ Tooltip.prototype.show = function () {
+ var e = $.Event('show.bs.' + this.type)
+
+ if (this.hasContent() && this.enabled) {
+ this.$element.trigger(e)
+
+ var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])
+ if (e.isDefaultPrevented() || !inDom) return
+ var that = this
+
+ var $tip = this.tip()
+
+ var tipId = this.getUID(this.type)
+
+ this.setContent()
+ $tip.attr('id', tipId)
+ this.$element.attr('aria-describedby', tipId)
+
+ if (this.options.animation) $tip.addClass('fade')
+
+ var placement = typeof this.options.placement == 'function' ?
+ this.options.placement.call(this, $tip[0], this.$element[0]) :
+ this.options.placement
+
+ var autoToken = /\s?auto?\s?/i
+ var autoPlace = autoToken.test(placement)
+ if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
+
+ $tip
+ .detach()
+ .css({ top: 0, left: 0, display: 'block' })
+ .addClass(placement)
+ .data('bs.' + this.type, this)
+
+ this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
+ this.$element.trigger('inserted.bs.' + this.type)
+
+ var pos = this.getPosition()
+ var actualWidth = $tip[0].offsetWidth
+ var actualHeight = $tip[0].offsetHeight
+
+ if (autoPlace) {
+ var orgPlacement = placement
+ var viewportDim = this.getPosition(this.$viewport)
+
+ placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' :
+ placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' :
+ placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' :
+ placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' :
+ placement
+
+ $tip
+ .removeClass(orgPlacement)
+ .addClass(placement)
+ }
+
+ var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
+
+ this.applyPlacement(calculatedOffset, placement)
+
+ var complete = function () {
+ var prevHoverState = that.hoverState
+ that.$element.trigger('shown.bs.' + that.type)
+ that.hoverState = null
+
+ if (prevHoverState == 'out') that.leave(that)
+ }
+
+ $.support.transition && this.$tip.hasClass('fade') ?
+ $tip
+ .one('bsTransitionEnd', complete)
+ .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
+ complete()
+ }
+ }
+
+ Tooltip.prototype.applyPlacement = function (offset, placement) {
+ var $tip = this.tip()
+ var width = $tip[0].offsetWidth
+ var height = $tip[0].offsetHeight
+
+ // manually read margins because getBoundingClientRect includes difference
+ var marginTop = parseInt($tip.css('margin-top'), 10)
+ var marginLeft = parseInt($tip.css('margin-left'), 10)
+
+ // we must check for NaN for ie 8/9
+ if (isNaN(marginTop)) marginTop = 0
+ if (isNaN(marginLeft)) marginLeft = 0
+
+ offset.top += marginTop
+ offset.left += marginLeft
+
+ // $.fn.offset doesn't round pixel values
+ // so we use setOffset directly with our own function B-0
+ $.offset.setOffset($tip[0], $.extend({
+ using: function (props) {
+ $tip.css({
+ top: Math.round(props.top),
+ left: Math.round(props.left)
+ })
+ }
+ }, offset), 0)
+
+ $tip.addClass('in')
+
+ // check to see if placing tip in new offset caused the tip to resize itself
+ var actualWidth = $tip[0].offsetWidth
+ var actualHeight = $tip[0].offsetHeight
+
+ if (placement == 'top' && actualHeight != height) {
+ offset.top = offset.top + height - actualHeight
+ }
+
+ var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
+
+ if (delta.left) offset.left += delta.left
+ else offset.top += delta.top
+
+ var isVertical = /top|bottom/.test(placement)
+ var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
+ var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'
+
+ $tip.offset(offset)
+ this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)
+ }
+
+ Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {
+ this.arrow()
+ .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')
+ .css(isVertical ? 'top' : 'left', '')
+ }
+
+ Tooltip.prototype.setContent = function () {
+ var $tip = this.tip()
+ var title = this.getTitle()
+
+ $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
+ $tip.removeClass('fade in top bottom left right')
+ }
+
+ Tooltip.prototype.hide = function (callback) {
+ var that = this
+ var $tip = $(this.$tip)
+ var e = $.Event('hide.bs.' + this.type)
+
+ function complete() {
+ if (that.hoverState != 'in') $tip.detach()
+ if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.
+ that.$element
+ .removeAttr('aria-describedby')
+ .trigger('hidden.bs.' + that.type)
+ }
+ callback && callback()
+ }
+
+ this.$element.trigger(e)
+
+ if (e.isDefaultPrevented()) return
+
+ $tip.removeClass('in')
+
+ $.support.transition && $tip.hasClass('fade') ?
+ $tip
+ .one('bsTransitionEnd', complete)
+ .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
+ complete()
+
+ this.hoverState = null
+
+ return this
+ }
+
+ Tooltip.prototype.fixTitle = function () {
+ var $e = this.$element
+ if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {
+ $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
+ }
+ }
+
+ Tooltip.prototype.hasContent = function () {
+ return this.getTitle()
+ }
+
+ Tooltip.prototype.getPosition = function ($element) {
+ $element = $element || this.$element
+
+ var el = $element[0]
+ var isBody = el.tagName == 'BODY'
+
+ var elRect = el.getBoundingClientRect()
+ if (elRect.width == null) {
+ // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
+ elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
+ }
+ var isSvg = window.SVGElement && el instanceof window.SVGElement
+ // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.
+ // See https://github.com/twbs/bootstrap/issues/20280
+ var elOffset = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())
+ var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
+ var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
+
+ return $.extend({}, elRect, scroll, outerDims, elOffset)
+ }
+
+ Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
+ return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
+ placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
+ placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
+ /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
+
+ }
+
+ Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
+ var delta = { top: 0, left: 0 }
+ if (!this.$viewport) return delta
+
+ var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
+ var viewportDimensions = this.getPosition(this.$viewport)
+
+ if (/right|left/.test(placement)) {
+ var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll
+ var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
+ if (topEdgeOffset < viewportDimensions.top) { // top overflow
+ delta.top = viewportDimensions.top - topEdgeOffset
+ } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
+ delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
+ }
+ } else {
+ var leftEdgeOffset = pos.left - viewportPadding
+ var rightEdgeOffset = pos.left + viewportPadding + actualWidth
+ if (leftEdgeOffset < viewportDimensions.left) { // left overflow
+ delta.left = viewportDimensions.left - leftEdgeOffset
+ } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow
+ delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
+ }
+ }
+
+ return delta
+ }
+
+ Tooltip.prototype.getTitle = function () {
+ var title
+ var $e = this.$element
+ var o = this.options
+
+ title = $e.attr('data-original-title')
+ || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
+
+ return title
+ }
+
+ Tooltip.prototype.getUID = function (prefix) {
+ do prefix += ~~(Math.random() * 1000000)
+ while (document.getElementById(prefix))
+ return prefix
+ }
+
+ Tooltip.prototype.tip = function () {
+ if (!this.$tip) {
+ this.$tip = $(this.options.template)
+ if (this.$tip.length != 1) {
+ throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')
+ }
+ }
+ return this.$tip
+ }
+
+ Tooltip.prototype.arrow = function () {
+ return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
+ }
+
+ Tooltip.prototype.enable = function () {
+ this.enabled = true
+ }
+
+ Tooltip.prototype.disable = function () {
+ this.enabled = false
+ }
+
+ Tooltip.prototype.toggleEnabled = function () {
+ this.enabled = !this.enabled
+ }
+
+ Tooltip.prototype.toggle = function (e) {
+ var self = this
+ if (e) {
+ self = $(e.currentTarget).data('bs.' + this.type)
+ if (!self) {
+ self = new this.constructor(e.currentTarget, this.getDelegateOptions())
+ $(e.currentTarget).data('bs.' + this.type, self)
+ }
+ }
+
+ if (e) {
+ self.inState.click = !self.inState.click
+ if (self.isInStateTrue()) self.enter(self)
+ else self.leave(self)
+ } else {
+ self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
+ }
+ }
+
+ Tooltip.prototype.destroy = function () {
+ var that = this
+ clearTimeout(this.timeout)
+ this.hide(function () {
+ that.$element.off('.' + that.type).removeData('bs.' + that.type)
+ if (that.$tip) {
+ that.$tip.detach()
+ }
+ that.$tip = null
+ that.$arrow = null
+ that.$viewport = null
+ that.$element = null
+ })
+ }
+
+
+ // TOOLTIP PLUGIN DEFINITION
+ // =========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.tooltip')
+ var options = typeof option == 'object' && option
+
+ if (!data && /destroy|hide/.test(option)) return
+ if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.tooltip
+
+ $.fn.tooltip = Plugin
+ $.fn.tooltip.Constructor = Tooltip
+
+
+ // TOOLTIP NO CONFLICT
+ // ===================
+
+ $.fn.tooltip.noConflict = function () {
+ $.fn.tooltip = old
+ return this
+ }
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: popover.js v3.3.7
+ * http://getbootstrap.com/javascript/#popovers
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // POPOVER PUBLIC CLASS DEFINITION
+ // ===============================
+
+ var Popover = function (element, options) {
+ this.init('popover', element, options)
+ }
+
+ if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
+
+ Popover.VERSION = '3.3.7'
+
+ Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
+ placement: 'right',
+ trigger: 'click',
+ content: '',
+ template: ''
+ })
+
+
+ // NOTE: POPOVER EXTENDS tooltip.js
+ // ================================
+
+ Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
+
+ Popover.prototype.constructor = Popover
+
+ Popover.prototype.getDefaults = function () {
+ return Popover.DEFAULTS
+ }
+
+ Popover.prototype.setContent = function () {
+ var $tip = this.tip()
+ var title = this.getTitle()
+ var content = this.getContent()
+
+ $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
+ $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events
+ this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
+ ](content)
+
+ $tip.removeClass('fade top bottom left right in')
+
+ // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
+ // this manually by checking the contents.
+ if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
+ }
+
+ Popover.prototype.hasContent = function () {
+ return this.getTitle() || this.getContent()
+ }
+
+ Popover.prototype.getContent = function () {
+ var $e = this.$element
+ var o = this.options
+
+ return $e.attr('data-content')
+ || (typeof o.content == 'function' ?
+ o.content.call($e[0]) :
+ o.content)
+ }
+
+ Popover.prototype.arrow = function () {
+ return (this.$arrow = this.$arrow || this.tip().find('.arrow'))
+ }
+
+
+ // POPOVER PLUGIN DEFINITION
+ // =========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.popover')
+ var options = typeof option == 'object' && option
+
+ if (!data && /destroy|hide/.test(option)) return
+ if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.popover
+
+ $.fn.popover = Plugin
+ $.fn.popover.Constructor = Popover
+
+
+ // POPOVER NO CONFLICT
+ // ===================
+
+ $.fn.popover.noConflict = function () {
+ $.fn.popover = old
+ return this
+ }
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: scrollspy.js v3.3.7
+ * http://getbootstrap.com/javascript/#scrollspy
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // SCROLLSPY CLASS DEFINITION
+ // ==========================
+
+ function ScrollSpy(element, options) {
+ this.$body = $(document.body)
+ this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)
+ this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
+ this.selector = (this.options.target || '') + ' .nav li > a'
+ this.offsets = []
+ this.targets = []
+ this.activeTarget = null
+ this.scrollHeight = 0
+
+ this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))
+ this.refresh()
+ this.process()
+ }
+
+ ScrollSpy.VERSION = '3.3.7'
+
+ ScrollSpy.DEFAULTS = {
+ offset: 10
+ }
+
+ ScrollSpy.prototype.getScrollHeight = function () {
+ return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
+ }
+
+ ScrollSpy.prototype.refresh = function () {
+ var that = this
+ var offsetMethod = 'offset'
+ var offsetBase = 0
+
+ this.offsets = []
+ this.targets = []
+ this.scrollHeight = this.getScrollHeight()
+
+ if (!$.isWindow(this.$scrollElement[0])) {
+ offsetMethod = 'position'
+ offsetBase = this.$scrollElement.scrollTop()
+ }
+
+ this.$body
+ .find(this.selector)
+ .map(function () {
+ var $el = $(this)
+ var href = $el.data('target') || $el.attr('href')
+ var $href = /^#./.test(href) && $(href)
+
+ return ($href
+ && $href.length
+ && $href.is(':visible')
+ && [[$href[offsetMethod]().top + offsetBase, href]]) || null
+ })
+ .sort(function (a, b) { return a[0] - b[0] })
+ .each(function () {
+ that.offsets.push(this[0])
+ that.targets.push(this[1])
+ })
+ }
+
+ ScrollSpy.prototype.process = function () {
+ var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
+ var scrollHeight = this.getScrollHeight()
+ var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height()
+ var offsets = this.offsets
+ var targets = this.targets
+ var activeTarget = this.activeTarget
+ var i
+
+ if (this.scrollHeight != scrollHeight) {
+ this.refresh()
+ }
+
+ if (scrollTop >= maxScroll) {
+ return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)
+ }
+
+ if (activeTarget && scrollTop < offsets[0]) {
+ this.activeTarget = null
+ return this.clear()
+ }
+
+ for (i = offsets.length; i--;) {
+ activeTarget != targets[i]
+ && scrollTop >= offsets[i]
+ && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])
+ && this.activate(targets[i])
+ }
+ }
+
+ ScrollSpy.prototype.activate = function (target) {
+ this.activeTarget = target
+
+ this.clear()
+
+ var selector = this.selector +
+ '[data-target="' + target + '"],' +
+ this.selector + '[href="' + target + '"]'
+
+ var active = $(selector)
+ .parents('li')
+ .addClass('active')
+
+ if (active.parent('.dropdown-menu').length) {
+ active = active
+ .closest('li.dropdown')
+ .addClass('active')
+ }
+
+ active.trigger('activate.bs.scrollspy')
+ }
+
+ ScrollSpy.prototype.clear = function () {
+ $(this.selector)
+ .parentsUntil(this.options.target, '.active')
+ .removeClass('active')
+ }
+
+
+ // SCROLLSPY PLUGIN DEFINITION
+ // ===========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.scrollspy')
+ var options = typeof option == 'object' && option
+
+ if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.scrollspy
+
+ $.fn.scrollspy = Plugin
+ $.fn.scrollspy.Constructor = ScrollSpy
+
+
+ // SCROLLSPY NO CONFLICT
+ // =====================
+
+ $.fn.scrollspy.noConflict = function () {
+ $.fn.scrollspy = old
+ return this
+ }
+
+
+ // SCROLLSPY DATA-API
+ // ==================
+
+ $(window).on('load.bs.scrollspy.data-api', function () {
+ $('[data-spy="scroll"]').each(function () {
+ var $spy = $(this)
+ Plugin.call($spy, $spy.data())
+ })
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: tab.js v3.3.7
+ * http://getbootstrap.com/javascript/#tabs
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // TAB CLASS DEFINITION
+ // ====================
+
+ var Tab = function (element) {
+ // jscs:disable requireDollarBeforejQueryAssignment
+ this.element = $(element)
+ // jscs:enable requireDollarBeforejQueryAssignment
+ }
+
+ Tab.VERSION = '3.3.7'
+
+ Tab.TRANSITION_DURATION = 150
+
+ Tab.prototype.show = function () {
+ var $this = this.element
+ var $ul = $this.closest('ul:not(.dropdown-menu)')
+ var selector = $this.data('target')
+
+ if (!selector) {
+ selector = $this.attr('href')
+ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
+ }
+
+ if ($this.parent('li').hasClass('active')) return
+
+ var $previous = $ul.find('.active:last a')
+ var hideEvent = $.Event('hide.bs.tab', {
+ relatedTarget: $this[0]
+ })
+ var showEvent = $.Event('show.bs.tab', {
+ relatedTarget: $previous[0]
+ })
+
+ $previous.trigger(hideEvent)
+ $this.trigger(showEvent)
+
+ if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return
+
+ var $target = $(selector)
+
+ this.activate($this.closest('li'), $ul)
+ this.activate($target, $target.parent(), function () {
+ $previous.trigger({
+ type: 'hidden.bs.tab',
+ relatedTarget: $this[0]
+ })
+ $this.trigger({
+ type: 'shown.bs.tab',
+ relatedTarget: $previous[0]
+ })
+ })
+ }
+
+ Tab.prototype.activate = function (element, container, callback) {
+ var $active = container.find('> .active')
+ var transition = callback
+ && $.support.transition
+ && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)
+
+ function next() {
+ $active
+ .removeClass('active')
+ .find('> .dropdown-menu > .active')
+ .removeClass('active')
+ .end()
+ .find('[data-toggle="tab"]')
+ .attr('aria-expanded', false)
+
+ element
+ .addClass('active')
+ .find('[data-toggle="tab"]')
+ .attr('aria-expanded', true)
+
+ if (transition) {
+ element[0].offsetWidth // reflow for transition
+ element.addClass('in')
+ } else {
+ element.removeClass('fade')
+ }
+
+ if (element.parent('.dropdown-menu').length) {
+ element
+ .closest('li.dropdown')
+ .addClass('active')
+ .end()
+ .find('[data-toggle="tab"]')
+ .attr('aria-expanded', true)
+ }
+
+ callback && callback()
+ }
+
+ $active.length && transition ?
+ $active
+ .one('bsTransitionEnd', next)
+ .emulateTransitionEnd(Tab.TRANSITION_DURATION) :
+ next()
+
+ $active.removeClass('in')
+ }
+
+
+ // TAB PLUGIN DEFINITION
+ // =====================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.tab')
+
+ if (!data) $this.data('bs.tab', (data = new Tab(this)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.tab
+
+ $.fn.tab = Plugin
+ $.fn.tab.Constructor = Tab
+
+
+ // TAB NO CONFLICT
+ // ===============
+
+ $.fn.tab.noConflict = function () {
+ $.fn.tab = old
+ return this
+ }
+
+
+ // TAB DATA-API
+ // ============
+
+ var clickHandler = function (e) {
+ e.preventDefault()
+ Plugin.call($(this), 'show')
+ }
+
+ $(document)
+ .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler)
+ .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler)
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: affix.js v3.3.7
+ * http://getbootstrap.com/javascript/#affix
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // AFFIX CLASS DEFINITION
+ // ======================
+
+ var Affix = function (element, options) {
+ this.options = $.extend({}, Affix.DEFAULTS, options)
+
+ this.$target = $(this.options.target)
+ .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
+ .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
+
+ this.$element = $(element)
+ this.affixed = null
+ this.unpin = null
+ this.pinnedOffset = null
+
+ this.checkPosition()
+ }
+
+ Affix.VERSION = '3.3.7'
+
+ Affix.RESET = 'affix affix-top affix-bottom'
+
+ Affix.DEFAULTS = {
+ offset: 0,
+ target: window
+ }
+
+ Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {
+ var scrollTop = this.$target.scrollTop()
+ var position = this.$element.offset()
+ var targetHeight = this.$target.height()
+
+ if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false
+
+ if (this.affixed == 'bottom') {
+ if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'
+ return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'
+ }
+
+ var initializing = this.affixed == null
+ var colliderTop = initializing ? scrollTop : position.top
+ var colliderHeight = initializing ? targetHeight : height
+
+ if (offsetTop != null && scrollTop <= offsetTop) return 'top'
+ if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'
+
+ return false
+ }
+
+ Affix.prototype.getPinnedOffset = function () {
+ if (this.pinnedOffset) return this.pinnedOffset
+ this.$element.removeClass(Affix.RESET).addClass('affix')
+ var scrollTop = this.$target.scrollTop()
+ var position = this.$element.offset()
+ return (this.pinnedOffset = position.top - scrollTop)
+ }
+
+ Affix.prototype.checkPositionWithEventLoop = function () {
+ setTimeout($.proxy(this.checkPosition, this), 1)
+ }
+
+ Affix.prototype.checkPosition = function () {
+ if (!this.$element.is(':visible')) return
+
+ var height = this.$element.height()
+ var offset = this.options.offset
+ var offsetTop = offset.top
+ var offsetBottom = offset.bottom
+ var scrollHeight = Math.max($(document).height(), $(document.body).height())
+
+ if (typeof offset != 'object') offsetBottom = offsetTop = offset
+ if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
+ if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
+
+ var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)
+
+ if (this.affixed != affix) {
+ if (this.unpin != null) this.$element.css('top', '')
+
+ var affixType = 'affix' + (affix ? '-' + affix : '')
+ var e = $.Event(affixType + '.bs.affix')
+
+ this.$element.trigger(e)
+
+ if (e.isDefaultPrevented()) return
+
+ this.affixed = affix
+ this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
+
+ this.$element
+ .removeClass(Affix.RESET)
+ .addClass(affixType)
+ .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')
+ }
+
+ if (affix == 'bottom') {
+ this.$element.offset({
+ top: scrollHeight - height - offsetBottom
+ })
+ }
+ }
+
+
+ // AFFIX PLUGIN DEFINITION
+ // =======================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.affix')
+ var options = typeof option == 'object' && option
+
+ if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.affix
+
+ $.fn.affix = Plugin
+ $.fn.affix.Constructor = Affix
+
+
+ // AFFIX NO CONFLICT
+ // =================
+
+ $.fn.affix.noConflict = function () {
+ $.fn.affix = old
+ return this
+ }
+
+
+ // AFFIX DATA-API
+ // ==============
+
+ $(window).on('load', function () {
+ $('[data-spy="affix"]').each(function () {
+ var $spy = $(this)
+ var data = $spy.data()
+
+ data.offset = data.offset || {}
+
+ if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom
+ if (data.offsetTop != null) data.offset.top = data.offsetTop
+
+ Plugin.call($spy, data)
+ })
+ })
+
+}(jQuery);
diff --git a/web/themes/custom/proj_me_theme/bootstrap/assets/javascripts/bootstrap.min.js b/web/themes/custom/proj_me_theme/bootstrap/assets/javascripts/bootstrap.min.js
new file mode 100644
index 00000000..9bcd2fcc
--- /dev/null
+++ b/web/themes/custom/proj_me_theme/bootstrap/assets/javascripts/bootstrap.min.js
@@ -0,0 +1,7 @@
+/*!
+ * Bootstrap v3.3.7 (http://getbootstrap.com)
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under the MIT license
+ */
+if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>3)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){if(a(b.target).is(this))return b.handleObj.handler.apply(this,arguments)}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.7",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a("#"===f?[]:f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.7",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c).prop(c,!0)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c).prop(c,!1))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target).closest(".btn");b.call(d,"toggle"),a(c.target).is('input[type="radio"], input[type="checkbox"]')||(c.preventDefault(),d.is("input,button")?d.trigger("focus"):d.find("input:visible,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.7",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(a>this.$items.length-1||a<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){if(!this.sliding)return this.slide("next")},c.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.7",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger(a.Event("hidden.bs.dropdown",f)))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.7",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger(a.Event("shown.bs.dropdown",h))}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&jdocument.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);if(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),!c.isInStateTrue())return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-mo.width?"left":"left"==h&&k.left-lg.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;jg.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null,a.$element=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.7",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.7",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b=e[a]&&(void 0===e[a+1]||b .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.7",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return e=a-d&&"bottom"},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);
\ No newline at end of file
diff --git a/web/themes/custom/proj_me_theme/bootstrap/assets/javascripts/bootstrap/affix.js b/web/themes/custom/proj_me_theme/bootstrap/assets/javascripts/bootstrap/affix.js
new file mode 100644
index 00000000..7f651681
--- /dev/null
+++ b/web/themes/custom/proj_me_theme/bootstrap/assets/javascripts/bootstrap/affix.js
@@ -0,0 +1,162 @@
+/* ========================================================================
+ * Bootstrap: affix.js v3.3.7
+ * http://getbootstrap.com/javascript/#affix
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // AFFIX CLASS DEFINITION
+ // ======================
+
+ var Affix = function (element, options) {
+ this.options = $.extend({}, Affix.DEFAULTS, options)
+
+ this.$target = $(this.options.target)
+ .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
+ .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
+
+ this.$element = $(element)
+ this.affixed = null
+ this.unpin = null
+ this.pinnedOffset = null
+
+ this.checkPosition()
+ }
+
+ Affix.VERSION = '3.3.7'
+
+ Affix.RESET = 'affix affix-top affix-bottom'
+
+ Affix.DEFAULTS = {
+ offset: 0,
+ target: window
+ }
+
+ Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {
+ var scrollTop = this.$target.scrollTop()
+ var position = this.$element.offset()
+ var targetHeight = this.$target.height()
+
+ if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false
+
+ if (this.affixed == 'bottom') {
+ if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'
+ return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'
+ }
+
+ var initializing = this.affixed == null
+ var colliderTop = initializing ? scrollTop : position.top
+ var colliderHeight = initializing ? targetHeight : height
+
+ if (offsetTop != null && scrollTop <= offsetTop) return 'top'
+ if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'
+
+ return false
+ }
+
+ Affix.prototype.getPinnedOffset = function () {
+ if (this.pinnedOffset) return this.pinnedOffset
+ this.$element.removeClass(Affix.RESET).addClass('affix')
+ var scrollTop = this.$target.scrollTop()
+ var position = this.$element.offset()
+ return (this.pinnedOffset = position.top - scrollTop)
+ }
+
+ Affix.prototype.checkPositionWithEventLoop = function () {
+ setTimeout($.proxy(this.checkPosition, this), 1)
+ }
+
+ Affix.prototype.checkPosition = function () {
+ if (!this.$element.is(':visible')) return
+
+ var height = this.$element.height()
+ var offset = this.options.offset
+ var offsetTop = offset.top
+ var offsetBottom = offset.bottom
+ var scrollHeight = Math.max($(document).height(), $(document.body).height())
+
+ if (typeof offset != 'object') offsetBottom = offsetTop = offset
+ if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
+ if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
+
+ var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)
+
+ if (this.affixed != affix) {
+ if (this.unpin != null) this.$element.css('top', '')
+
+ var affixType = 'affix' + (affix ? '-' + affix : '')
+ var e = $.Event(affixType + '.bs.affix')
+
+ this.$element.trigger(e)
+
+ if (e.isDefaultPrevented()) return
+
+ this.affixed = affix
+ this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
+
+ this.$element
+ .removeClass(Affix.RESET)
+ .addClass(affixType)
+ .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')
+ }
+
+ if (affix == 'bottom') {
+ this.$element.offset({
+ top: scrollHeight - height - offsetBottom
+ })
+ }
+ }
+
+
+ // AFFIX PLUGIN DEFINITION
+ // =======================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.affix')
+ var options = typeof option == 'object' && option
+
+ if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.affix
+
+ $.fn.affix = Plugin
+ $.fn.affix.Constructor = Affix
+
+
+ // AFFIX NO CONFLICT
+ // =================
+
+ $.fn.affix.noConflict = function () {
+ $.fn.affix = old
+ return this
+ }
+
+
+ // AFFIX DATA-API
+ // ==============
+
+ $(window).on('load', function () {
+ $('[data-spy="affix"]').each(function () {
+ var $spy = $(this)
+ var data = $spy.data()
+
+ data.offset = data.offset || {}
+
+ if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom
+ if (data.offsetTop != null) data.offset.top = data.offsetTop
+
+ Plugin.call($spy, data)
+ })
+ })
+
+}(jQuery);
diff --git a/web/themes/custom/proj_me_theme/bootstrap/assets/javascripts/bootstrap/alert.js b/web/themes/custom/proj_me_theme/bootstrap/assets/javascripts/bootstrap/alert.js
new file mode 100644
index 00000000..db97f3b0
--- /dev/null
+++ b/web/themes/custom/proj_me_theme/bootstrap/assets/javascripts/bootstrap/alert.js
@@ -0,0 +1,94 @@
+/* ========================================================================
+ * Bootstrap: alert.js v3.3.7
+ * http://getbootstrap.com/javascript/#alerts
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // ALERT CLASS DEFINITION
+ // ======================
+
+ var dismiss = '[data-dismiss="alert"]'
+ var Alert = function (el) {
+ $(el).on('click', dismiss, this.close)
+ }
+
+ Alert.VERSION = '3.3.7'
+
+ Alert.TRANSITION_DURATION = 150
+
+ Alert.prototype.close = function (e) {
+ var $this = $(this)
+ var selector = $this.attr('data-target')
+
+ if (!selector) {
+ selector = $this.attr('href')
+ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
+ }
+
+ var $parent = $(selector === '#' ? [] : selector)
+
+ if (e) e.preventDefault()
+
+ if (!$parent.length) {
+ $parent = $this.closest('.alert')
+ }
+
+ $parent.trigger(e = $.Event('close.bs.alert'))
+
+ if (e.isDefaultPrevented()) return
+
+ $parent.removeClass('in')
+
+ function removeElement() {
+ // detach from parent, fire event then clean up data
+ $parent.detach().trigger('closed.bs.alert').remove()
+ }
+
+ $.support.transition && $parent.hasClass('fade') ?
+ $parent
+ .one('bsTransitionEnd', removeElement)
+ .emulateTransitionEnd(Alert.TRANSITION_DURATION) :
+ removeElement()
+ }
+
+
+ // ALERT PLUGIN DEFINITION
+ // =======================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.alert')
+
+ if (!data) $this.data('bs.alert', (data = new Alert(this)))
+ if (typeof option == 'string') data[option].call($this)
+ })
+ }
+
+ var old = $.fn.alert
+
+ $.fn.alert = Plugin
+ $.fn.alert.Constructor = Alert
+
+
+ // ALERT NO CONFLICT
+ // =================
+
+ $.fn.alert.noConflict = function () {
+ $.fn.alert = old
+ return this
+ }
+
+
+ // ALERT DATA-API
+ // ==============
+
+ $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
+
+}(jQuery);
diff --git a/web/themes/custom/proj_me_theme/bootstrap/assets/javascripts/bootstrap/button.js b/web/themes/custom/proj_me_theme/bootstrap/assets/javascripts/bootstrap/button.js
new file mode 100644
index 00000000..843b39c9
--- /dev/null
+++ b/web/themes/custom/proj_me_theme/bootstrap/assets/javascripts/bootstrap/button.js
@@ -0,0 +1,125 @@
+/* ========================================================================
+ * Bootstrap: button.js v3.3.7
+ * http://getbootstrap.com/javascript/#buttons
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // BUTTON PUBLIC CLASS DEFINITION
+ // ==============================
+
+ var Button = function (element, options) {
+ this.$element = $(element)
+ this.options = $.extend({}, Button.DEFAULTS, options)
+ this.isLoading = false
+ }
+
+ Button.VERSION = '3.3.7'
+
+ Button.DEFAULTS = {
+ loadingText: 'loading...'
+ }
+
+ Button.prototype.setState = function (state) {
+ var d = 'disabled'
+ var $el = this.$element
+ var val = $el.is('input') ? 'val' : 'html'
+ var data = $el.data()
+
+ state += 'Text'
+
+ if (data.resetText == null) $el.data('resetText', $el[val]())
+
+ // push to event loop to allow forms to submit
+ setTimeout($.proxy(function () {
+ $el[val](data[state] == null ? this.options[state] : data[state])
+
+ if (state == 'loadingText') {
+ this.isLoading = true
+ $el.addClass(d).attr(d, d).prop(d, true)
+ } else if (this.isLoading) {
+ this.isLoading = false
+ $el.removeClass(d).removeAttr(d).prop(d, false)
+ }
+ }, this), 0)
+ }
+
+ Button.prototype.toggle = function () {
+ var changed = true
+ var $parent = this.$element.closest('[data-toggle="buttons"]')
+
+ if ($parent.length) {
+ var $input = this.$element.find('input')
+ if ($input.prop('type') == 'radio') {
+ if ($input.prop('checked')) changed = false
+ $parent.find('.active').removeClass('active')
+ this.$element.addClass('active')
+ } else if ($input.prop('type') == 'checkbox') {
+ if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false
+ this.$element.toggleClass('active')
+ }
+ $input.prop('checked', this.$element.hasClass('active'))
+ if (changed) $input.trigger('change')
+ } else {
+ this.$element.attr('aria-pressed', !this.$element.hasClass('active'))
+ this.$element.toggleClass('active')
+ }
+ }
+
+
+ // BUTTON PLUGIN DEFINITION
+ // ========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.button')
+ var options = typeof option == 'object' && option
+
+ if (!data) $this.data('bs.button', (data = new Button(this, options)))
+
+ if (option == 'toggle') data.toggle()
+ else if (option) data.setState(option)
+ })
+ }
+
+ var old = $.fn.button
+
+ $.fn.button = Plugin
+ $.fn.button.Constructor = Button
+
+
+ // BUTTON NO CONFLICT
+ // ==================
+
+ $.fn.button.noConflict = function () {
+ $.fn.button = old
+ return this
+ }
+
+
+ // BUTTON DATA-API
+ // ===============
+
+ $(document)
+ .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
+ var $btn = $(e.target).closest('.btn')
+ Plugin.call($btn, 'toggle')
+ if (!($(e.target).is('input[type="radio"], input[type="checkbox"]'))) {
+ // Prevent double click on radios, and the double selections (so cancellation) on checkboxes
+ e.preventDefault()
+ // The target component still receive the focus
+ if ($btn.is('input,button')) $btn.trigger('focus')
+ else $btn.find('input:visible,button:visible').first().trigger('focus')
+ }
+ })
+ .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
+ $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))
+ })
+
+}(jQuery);
diff --git a/web/themes/custom/proj_me_theme/bootstrap/assets/javascripts/bootstrap/carousel.js b/web/themes/custom/proj_me_theme/bootstrap/assets/javascripts/bootstrap/carousel.js
new file mode 100644
index 00000000..6ff954c9
--- /dev/null
+++ b/web/themes/custom/proj_me_theme/bootstrap/assets/javascripts/bootstrap/carousel.js
@@ -0,0 +1,237 @@
+/* ========================================================================
+ * Bootstrap: carousel.js v3.3.7
+ * http://getbootstrap.com/javascript/#carousel
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // CAROUSEL CLASS DEFINITION
+ // =========================
+
+ var Carousel = function (element, options) {
+ this.$element = $(element)
+ this.$indicators = this.$element.find('.carousel-indicators')
+ this.options = options
+ this.paused = null
+ this.sliding = null
+ this.interval = null
+ this.$active = null
+ this.$items = null
+
+ this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))
+
+ this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element
+ .on('mouseenter.bs.carousel', $.proxy(this.pause, this))
+ .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
+ }
+
+ Carousel.VERSION = '3.3.7'
+
+ Carousel.TRANSITION_DURATION = 600
+
+ Carousel.DEFAULTS = {
+ interval: 5000,
+ pause: 'hover',
+ wrap: true,
+ keyboard: true
+ }
+
+ Carousel.prototype.keydown = function (e) {
+ if (/input|textarea/i.test(e.target.tagName)) return
+ switch (e.which) {
+ case 37: this.prev(); break
+ case 39: this.next(); break
+ default: return
+ }
+
+ e.preventDefault()
+ }
+
+ Carousel.prototype.cycle = function (e) {
+ e || (this.paused = false)
+
+ this.interval && clearInterval(this.interval)
+
+ this.options.interval
+ && !this.paused
+ && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
+
+ return this
+ }
+
+ Carousel.prototype.getItemIndex = function (item) {
+ this.$items = item.parent().children('.item')
+ return this.$items.index(item || this.$active)
+ }
+
+ Carousel.prototype.getItemForDirection = function (direction, active) {
+ var activeIndex = this.getItemIndex(active)
+ var willWrap = (direction == 'prev' && activeIndex === 0)
+ || (direction == 'next' && activeIndex == (this.$items.length - 1))
+ if (willWrap && !this.options.wrap) return active
+ var delta = direction == 'prev' ? -1 : 1
+ var itemIndex = (activeIndex + delta) % this.$items.length
+ return this.$items.eq(itemIndex)
+ }
+
+ Carousel.prototype.to = function (pos) {
+ var that = this
+ var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))
+
+ if (pos > (this.$items.length - 1) || pos < 0) return
+
+ if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
+ if (activeIndex == pos) return this.pause().cycle()
+
+ return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))
+ }
+
+ Carousel.prototype.pause = function (e) {
+ e || (this.paused = true)
+
+ if (this.$element.find('.next, .prev').length && $.support.transition) {
+ this.$element.trigger($.support.transition.end)
+ this.cycle(true)
+ }
+
+ this.interval = clearInterval(this.interval)
+
+ return this
+ }
+
+ Carousel.prototype.next = function () {
+ if (this.sliding) return
+ return this.slide('next')
+ }
+
+ Carousel.prototype.prev = function () {
+ if (this.sliding) return
+ return this.slide('prev')
+ }
+
+ Carousel.prototype.slide = function (type, next) {
+ var $active = this.$element.find('.item.active')
+ var $next = next || this.getItemForDirection(type, $active)
+ var isCycling = this.interval
+ var direction = type == 'next' ? 'left' : 'right'
+ var that = this
+
+ if ($next.hasClass('active')) return (this.sliding = false)
+
+ var relatedTarget = $next[0]
+ var slideEvent = $.Event('slide.bs.carousel', {
+ relatedTarget: relatedTarget,
+ direction: direction
+ })
+ this.$element.trigger(slideEvent)
+ if (slideEvent.isDefaultPrevented()) return
+
+ this.sliding = true
+
+ isCycling && this.pause()
+
+ if (this.$indicators.length) {
+ this.$indicators.find('.active').removeClass('active')
+ var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])
+ $nextIndicator && $nextIndicator.addClass('active')
+ }
+
+ var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
+ if ($.support.transition && this.$element.hasClass('slide')) {
+ $next.addClass(type)
+ $next[0].offsetWidth // force reflow
+ $active.addClass(direction)
+ $next.addClass(direction)
+ $active
+ .one('bsTransitionEnd', function () {
+ $next.removeClass([type, direction].join(' ')).addClass('active')
+ $active.removeClass(['active', direction].join(' '))
+ that.sliding = false
+ setTimeout(function () {
+ that.$element.trigger(slidEvent)
+ }, 0)
+ })
+ .emulateTransitionEnd(Carousel.TRANSITION_DURATION)
+ } else {
+ $active.removeClass('active')
+ $next.addClass('active')
+ this.sliding = false
+ this.$element.trigger(slidEvent)
+ }
+
+ isCycling && this.cycle()
+
+ return this
+ }
+
+
+ // CAROUSEL PLUGIN DEFINITION
+ // ==========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.carousel')
+ var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
+ var action = typeof option == 'string' ? option : options.slide
+
+ if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
+ if (typeof option == 'number') data.to(option)
+ else if (action) data[action]()
+ else if (options.interval) data.pause().cycle()
+ })
+ }
+
+ var old = $.fn.carousel
+
+ $.fn.carousel = Plugin
+ $.fn.carousel.Constructor = Carousel
+
+
+ // CAROUSEL NO CONFLICT
+ // ====================
+
+ $.fn.carousel.noConflict = function () {
+ $.fn.carousel = old
+ return this
+ }
+
+
+ // CAROUSEL DATA-API
+ // =================
+
+ var clickHandler = function (e) {
+ var href
+ var $this = $(this)
+ var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
+ if (!$target.hasClass('carousel')) return
+ var options = $.extend({}, $target.data(), $this.data())
+ var slideIndex = $this.attr('data-slide-to')
+ if (slideIndex) options.interval = false
+
+ Plugin.call($target, options)
+
+ if (slideIndex) {
+ $target.data('bs.carousel').to(slideIndex)
+ }
+
+ e.preventDefault()
+ }
+
+ $(document)
+ .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)
+ .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)
+
+ $(window).on('load', function () {
+ $('[data-ride="carousel"]').each(function () {
+ var $carousel = $(this)
+ Plugin.call($carousel, $carousel.data())
+ })
+ })
+
+}(jQuery);
diff --git a/web/themes/custom/proj_me_theme/bootstrap/assets/javascripts/bootstrap/collapse.js b/web/themes/custom/proj_me_theme/bootstrap/assets/javascripts/bootstrap/collapse.js
new file mode 100644
index 00000000..12038693
--- /dev/null
+++ b/web/themes/custom/proj_me_theme/bootstrap/assets/javascripts/bootstrap/collapse.js
@@ -0,0 +1,212 @@
+/* ========================================================================
+ * Bootstrap: collapse.js v3.3.7
+ * http://getbootstrap.com/javascript/#collapse
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+/* jshint latedef: false */
+
++function ($) {
+ 'use strict';
+
+ // COLLAPSE PUBLIC CLASS DEFINITION
+ // ================================
+
+ var Collapse = function (element, options) {
+ this.$element = $(element)
+ this.options = $.extend({}, Collapse.DEFAULTS, options)
+ this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' +
+ '[data-toggle="collapse"][data-target="#' + element.id + '"]')
+ this.transitioning = null
+
+ if (this.options.parent) {
+ this.$parent = this.getParent()
+ } else {
+ this.addAriaAndCollapsedClass(this.$element, this.$trigger)
+ }
+
+ if (this.options.toggle) this.toggle()
+ }
+
+ Collapse.VERSION = '3.3.7'
+
+ Collapse.TRANSITION_DURATION = 350
+
+ Collapse.DEFAULTS = {
+ toggle: true
+ }
+
+ Collapse.prototype.dimension = function () {
+ var hasWidth = this.$element.hasClass('width')
+ return hasWidth ? 'width' : 'height'
+ }
+
+ Collapse.prototype.show = function () {
+ if (this.transitioning || this.$element.hasClass('in')) return
+
+ var activesData
+ var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')
+
+ if (actives && actives.length) {
+ activesData = actives.data('bs.collapse')
+ if (activesData && activesData.transitioning) return
+ }
+
+ var startEvent = $.Event('show.bs.collapse')
+ this.$element.trigger(startEvent)
+ if (startEvent.isDefaultPrevented()) return
+
+ if (actives && actives.length) {
+ Plugin.call(actives, 'hide')
+ activesData || actives.data('bs.collapse', null)
+ }
+
+ var dimension = this.dimension()
+
+ this.$element
+ .removeClass('collapse')
+ .addClass('collapsing')[dimension](0)
+ .attr('aria-expanded', true)
+
+ this.$trigger
+ .removeClass('collapsed')
+ .attr('aria-expanded', true)
+
+ this.transitioning = 1
+
+ var complete = function () {
+ this.$element
+ .removeClass('collapsing')
+ .addClass('collapse in')[dimension]('')
+ this.transitioning = 0
+ this.$element
+ .trigger('shown.bs.collapse')
+ }
+
+ if (!$.support.transition) return complete.call(this)
+
+ var scrollSize = $.camelCase(['scroll', dimension].join('-'))
+
+ this.$element
+ .one('bsTransitionEnd', $.proxy(complete, this))
+ .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])
+ }
+
+ Collapse.prototype.hide = function () {
+ if (this.transitioning || !this.$element.hasClass('in')) return
+
+ var startEvent = $.Event('hide.bs.collapse')
+ this.$element.trigger(startEvent)
+ if (startEvent.isDefaultPrevented()) return
+
+ var dimension = this.dimension()
+
+ this.$element[dimension](this.$element[dimension]())[0].offsetHeight
+
+ this.$element
+ .addClass('collapsing')
+ .removeClass('collapse in')
+ .attr('aria-expanded', false)
+
+ this.$trigger
+ .addClass('collapsed')
+ .attr('aria-expanded', false)
+
+ this.transitioning = 1
+
+ var complete = function () {
+ this.transitioning = 0
+ this.$element
+ .removeClass('collapsing')
+ .addClass('collapse')
+ .trigger('hidden.bs.collapse')
+ }
+
+ if (!$.support.transition) return complete.call(this)
+
+ this.$element
+ [dimension](0)
+ .one('bsTransitionEnd', $.proxy(complete, this))
+ .emulateTransitionEnd(Collapse.TRANSITION_DURATION)
+ }
+
+ Collapse.prototype.toggle = function () {
+ this[this.$element.hasClass('in') ? 'hide' : 'show']()
+ }
+
+ Collapse.prototype.getParent = function () {
+ return $(this.options.parent)
+ .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
+ .each($.proxy(function (i, element) {
+ var $element = $(element)
+ this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)
+ }, this))
+ .end()
+ }
+
+ Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {
+ var isOpen = $element.hasClass('in')
+
+ $element.attr('aria-expanded', isOpen)
+ $trigger
+ .toggleClass('collapsed', !isOpen)
+ .attr('aria-expanded', isOpen)
+ }
+
+ function getTargetFromTrigger($trigger) {
+ var href
+ var target = $trigger.attr('data-target')
+ || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
+
+ return $(target)
+ }
+
+
+ // COLLAPSE PLUGIN DEFINITION
+ // ==========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.collapse')
+ var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
+
+ if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false
+ if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.collapse
+
+ $.fn.collapse = Plugin
+ $.fn.collapse.Constructor = Collapse
+
+
+ // COLLAPSE NO CONFLICT
+ // ====================
+
+ $.fn.collapse.noConflict = function () {
+ $.fn.collapse = old
+ return this
+ }
+
+
+ // COLLAPSE DATA-API
+ // =================
+
+ $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
+ var $this = $(this)
+
+ if (!$this.attr('data-target')) e.preventDefault()
+
+ var $target = getTargetFromTrigger($this)
+ var data = $target.data('bs.collapse')
+ var option = data ? 'toggle' : $this.data()
+
+ Plugin.call($target, option)
+ })
+
+}(jQuery);
diff --git a/web/themes/custom/proj_me_theme/bootstrap/assets/javascripts/bootstrap/dropdown.js b/web/themes/custom/proj_me_theme/bootstrap/assets/javascripts/bootstrap/dropdown.js
new file mode 100644
index 00000000..04e9c2de
--- /dev/null
+++ b/web/themes/custom/proj_me_theme/bootstrap/assets/javascripts/bootstrap/dropdown.js
@@ -0,0 +1,165 @@
+/* ========================================================================
+ * Bootstrap: dropdown.js v3.3.7
+ * http://getbootstrap.com/javascript/#dropdowns
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // DROPDOWN CLASS DEFINITION
+ // =========================
+
+ var backdrop = '.dropdown-backdrop'
+ var toggle = '[data-toggle="dropdown"]'
+ var Dropdown = function (element) {
+ $(element).on('click.bs.dropdown', this.toggle)
+ }
+
+ Dropdown.VERSION = '3.3.7'
+
+ function getParent($this) {
+ var selector = $this.attr('data-target')
+
+ if (!selector) {
+ selector = $this.attr('href')
+ selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
+ }
+
+ var $parent = selector && $(selector)
+
+ return $parent && $parent.length ? $parent : $this.parent()
+ }
+
+ function clearMenus(e) {
+ if (e && e.which === 3) return
+ $(backdrop).remove()
+ $(toggle).each(function () {
+ var $this = $(this)
+ var $parent = getParent($this)
+ var relatedTarget = { relatedTarget: this }
+
+ if (!$parent.hasClass('open')) return
+
+ if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return
+
+ $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
+
+ if (e.isDefaultPrevented()) return
+
+ $this.attr('aria-expanded', 'false')
+ $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))
+ })
+ }
+
+ Dropdown.prototype.toggle = function (e) {
+ var $this = $(this)
+
+ if ($this.is('.disabled, :disabled')) return
+
+ var $parent = getParent($this)
+ var isActive = $parent.hasClass('open')
+
+ clearMenus()
+
+ if (!isActive) {
+ if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
+ // if mobile we use a backdrop because click events don't delegate
+ $(document.createElement('div'))
+ .addClass('dropdown-backdrop')
+ .insertAfter($(this))
+ .on('click', clearMenus)
+ }
+
+ var relatedTarget = { relatedTarget: this }
+ $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
+
+ if (e.isDefaultPrevented()) return
+
+ $this
+ .trigger('focus')
+ .attr('aria-expanded', 'true')
+
+ $parent
+ .toggleClass('open')
+ .trigger($.Event('shown.bs.dropdown', relatedTarget))
+ }
+
+ return false
+ }
+
+ Dropdown.prototype.keydown = function (e) {
+ if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return
+
+ var $this = $(this)
+
+ e.preventDefault()
+ e.stopPropagation()
+
+ if ($this.is('.disabled, :disabled')) return
+
+ var $parent = getParent($this)
+ var isActive = $parent.hasClass('open')
+
+ if (!isActive && e.which != 27 || isActive && e.which == 27) {
+ if (e.which == 27) $parent.find(toggle).trigger('focus')
+ return $this.trigger('click')
+ }
+
+ var desc = ' li:not(.disabled):visible a'
+ var $items = $parent.find('.dropdown-menu' + desc)
+
+ if (!$items.length) return
+
+ var index = $items.index(e.target)
+
+ if (e.which == 38 && index > 0) index-- // up
+ if (e.which == 40 && index < $items.length - 1) index++ // down
+ if (!~index) index = 0
+
+ $items.eq(index).trigger('focus')
+ }
+
+
+ // DROPDOWN PLUGIN DEFINITION
+ // ==========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.dropdown')
+
+ if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
+ if (typeof option == 'string') data[option].call($this)
+ })
+ }
+
+ var old = $.fn.dropdown
+
+ $.fn.dropdown = Plugin
+ $.fn.dropdown.Constructor = Dropdown
+
+
+ // DROPDOWN NO CONFLICT
+ // ====================
+
+ $.fn.dropdown.noConflict = function () {
+ $.fn.dropdown = old
+ return this
+ }
+
+
+ // APPLY TO STANDARD DROPDOWN ELEMENTS
+ // ===================================
+
+ $(document)
+ .on('click.bs.dropdown.data-api', clearMenus)
+ .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
+ .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
+ .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)
+ .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)
+
+}(jQuery);
diff --git a/web/themes/custom/proj_me_theme/bootstrap/assets/javascripts/bootstrap/modal.js b/web/themes/custom/proj_me_theme/bootstrap/assets/javascripts/bootstrap/modal.js
new file mode 100644
index 00000000..f84142d8
--- /dev/null
+++ b/web/themes/custom/proj_me_theme/bootstrap/assets/javascripts/bootstrap/modal.js
@@ -0,0 +1,339 @@
+/* ========================================================================
+ * Bootstrap: modal.js v3.3.7
+ * http://getbootstrap.com/javascript/#modals
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // MODAL CLASS DEFINITION
+ // ======================
+
+ var Modal = function (element, options) {
+ this.options = options
+ this.$body = $(document.body)
+ this.$element = $(element)
+ this.$dialog = this.$element.find('.modal-dialog')
+ this.$backdrop = null
+ this.isShown = null
+ this.originalBodyPad = null
+ this.scrollbarWidth = 0
+ this.ignoreBackdropClick = false
+
+ if (this.options.remote) {
+ this.$element
+ .find('.modal-content')
+ .load(this.options.remote, $.proxy(function () {
+ this.$element.trigger('loaded.bs.modal')
+ }, this))
+ }
+ }
+
+ Modal.VERSION = '3.3.7'
+
+ Modal.TRANSITION_DURATION = 300
+ Modal.BACKDROP_TRANSITION_DURATION = 150
+
+ Modal.DEFAULTS = {
+ backdrop: true,
+ keyboard: true,
+ show: true
+ }
+
+ Modal.prototype.toggle = function (_relatedTarget) {
+ return this.isShown ? this.hide() : this.show(_relatedTarget)
+ }
+
+ Modal.prototype.show = function (_relatedTarget) {
+ var that = this
+ var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
+
+ this.$element.trigger(e)
+
+ if (this.isShown || e.isDefaultPrevented()) return
+
+ this.isShown = true
+
+ this.checkScrollbar()
+ this.setScrollbar()
+ this.$body.addClass('modal-open')
+
+ this.escape()
+ this.resize()
+
+ this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
+
+ this.$dialog.on('mousedown.dismiss.bs.modal', function () {
+ that.$element.one('mouseup.dismiss.bs.modal', function (e) {
+ if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true
+ })
+ })
+
+ this.backdrop(function () {
+ var transition = $.support.transition && that.$element.hasClass('fade')
+
+ if (!that.$element.parent().length) {
+ that.$element.appendTo(that.$body) // don't move modals dom position
+ }
+
+ that.$element
+ .show()
+ .scrollTop(0)
+
+ that.adjustDialog()
+
+ if (transition) {
+ that.$element[0].offsetWidth // force reflow
+ }
+
+ that.$element.addClass('in')
+
+ that.enforceFocus()
+
+ var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
+
+ transition ?
+ that.$dialog // wait for modal to slide in
+ .one('bsTransitionEnd', function () {
+ that.$element.trigger('focus').trigger(e)
+ })
+ .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
+ that.$element.trigger('focus').trigger(e)
+ })
+ }
+
+ Modal.prototype.hide = function (e) {
+ if (e) e.preventDefault()
+
+ e = $.Event('hide.bs.modal')
+
+ this.$element.trigger(e)
+
+ if (!this.isShown || e.isDefaultPrevented()) return
+
+ this.isShown = false
+
+ this.escape()
+ this.resize()
+
+ $(document).off('focusin.bs.modal')
+
+ this.$element
+ .removeClass('in')
+ .off('click.dismiss.bs.modal')
+ .off('mouseup.dismiss.bs.modal')
+
+ this.$dialog.off('mousedown.dismiss.bs.modal')
+
+ $.support.transition && this.$element.hasClass('fade') ?
+ this.$element
+ .one('bsTransitionEnd', $.proxy(this.hideModal, this))
+ .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
+ this.hideModal()
+ }
+
+ Modal.prototype.enforceFocus = function () {
+ $(document)
+ .off('focusin.bs.modal') // guard against infinite focus loop
+ .on('focusin.bs.modal', $.proxy(function (e) {
+ if (document !== e.target &&
+ this.$element[0] !== e.target &&
+ !this.$element.has(e.target).length) {
+ this.$element.trigger('focus')
+ }
+ }, this))
+ }
+
+ Modal.prototype.escape = function () {
+ if (this.isShown && this.options.keyboard) {
+ this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {
+ e.which == 27 && this.hide()
+ }, this))
+ } else if (!this.isShown) {
+ this.$element.off('keydown.dismiss.bs.modal')
+ }
+ }
+
+ Modal.prototype.resize = function () {
+ if (this.isShown) {
+ $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))
+ } else {
+ $(window).off('resize.bs.modal')
+ }
+ }
+
+ Modal.prototype.hideModal = function () {
+ var that = this
+ this.$element.hide()
+ this.backdrop(function () {
+ that.$body.removeClass('modal-open')
+ that.resetAdjustments()
+ that.resetScrollbar()
+ that.$element.trigger('hidden.bs.modal')
+ })
+ }
+
+ Modal.prototype.removeBackdrop = function () {
+ this.$backdrop && this.$backdrop.remove()
+ this.$backdrop = null
+ }
+
+ Modal.prototype.backdrop = function (callback) {
+ var that = this
+ var animate = this.$element.hasClass('fade') ? 'fade' : ''
+
+ if (this.isShown && this.options.backdrop) {
+ var doAnimate = $.support.transition && animate
+
+ this.$backdrop = $(document.createElement('div'))
+ .addClass('modal-backdrop ' + animate)
+ .appendTo(this.$body)
+
+ this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
+ if (this.ignoreBackdropClick) {
+ this.ignoreBackdropClick = false
+ return
+ }
+ if (e.target !== e.currentTarget) return
+ this.options.backdrop == 'static'
+ ? this.$element[0].focus()
+ : this.hide()
+ }, this))
+
+ if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
+
+ this.$backdrop.addClass('in')
+
+ if (!callback) return
+
+ doAnimate ?
+ this.$backdrop
+ .one('bsTransitionEnd', callback)
+ .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
+ callback()
+
+ } else if (!this.isShown && this.$backdrop) {
+ this.$backdrop.removeClass('in')
+
+ var callbackRemove = function () {
+ that.removeBackdrop()
+ callback && callback()
+ }
+ $.support.transition && this.$element.hasClass('fade') ?
+ this.$backdrop
+ .one('bsTransitionEnd', callbackRemove)
+ .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
+ callbackRemove()
+
+ } else if (callback) {
+ callback()
+ }
+ }
+
+ // these following methods are used to handle overflowing modals
+
+ Modal.prototype.handleUpdate = function () {
+ this.adjustDialog()
+ }
+
+ Modal.prototype.adjustDialog = function () {
+ var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
+
+ this.$element.css({
+ paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
+ paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
+ })
+ }
+
+ Modal.prototype.resetAdjustments = function () {
+ this.$element.css({
+ paddingLeft: '',
+ paddingRight: ''
+ })
+ }
+
+ Modal.prototype.checkScrollbar = function () {
+ var fullWindowWidth = window.innerWidth
+ if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8
+ var documentElementRect = document.documentElement.getBoundingClientRect()
+ fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)
+ }
+ this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth
+ this.scrollbarWidth = this.measureScrollbar()
+ }
+
+ Modal.prototype.setScrollbar = function () {
+ var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
+ this.originalBodyPad = document.body.style.paddingRight || ''
+ if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
+ }
+
+ Modal.prototype.resetScrollbar = function () {
+ this.$body.css('padding-right', this.originalBodyPad)
+ }
+
+ Modal.prototype.measureScrollbar = function () { // thx walsh
+ var scrollDiv = document.createElement('div')
+ scrollDiv.className = 'modal-scrollbar-measure'
+ this.$body.append(scrollDiv)
+ var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
+ this.$body[0].removeChild(scrollDiv)
+ return scrollbarWidth
+ }
+
+
+ // MODAL PLUGIN DEFINITION
+ // =======================
+
+ function Plugin(option, _relatedTarget) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.modal')
+ var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
+
+ if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
+ if (typeof option == 'string') data[option](_relatedTarget)
+ else if (options.show) data.show(_relatedTarget)
+ })
+ }
+
+ var old = $.fn.modal
+
+ $.fn.modal = Plugin
+ $.fn.modal.Constructor = Modal
+
+
+ // MODAL NO CONFLICT
+ // =================
+
+ $.fn.modal.noConflict = function () {
+ $.fn.modal = old
+ return this
+ }
+
+
+ // MODAL DATA-API
+ // ==============
+
+ $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
+ var $this = $(this)
+ var href = $this.attr('href')
+ var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
+ var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
+
+ if ($this.is('a')) e.preventDefault()
+
+ $target.one('show.bs.modal', function (showEvent) {
+ if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
+ $target.one('hidden.bs.modal', function () {
+ $this.is(':visible') && $this.trigger('focus')
+ })
+ })
+ Plugin.call($target, option, this)
+ })
+
+}(jQuery);
diff --git a/web/themes/custom/proj_me_theme/bootstrap/assets/javascripts/bootstrap/popover.js b/web/themes/custom/proj_me_theme/bootstrap/assets/javascripts/bootstrap/popover.js
new file mode 100644
index 00000000..efe19567
--- /dev/null
+++ b/web/themes/custom/proj_me_theme/bootstrap/assets/javascripts/bootstrap/popover.js
@@ -0,0 +1,108 @@
+/* ========================================================================
+ * Bootstrap: popover.js v3.3.7
+ * http://getbootstrap.com/javascript/#popovers
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // POPOVER PUBLIC CLASS DEFINITION
+ // ===============================
+
+ var Popover = function (element, options) {
+ this.init('popover', element, options)
+ }
+
+ if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
+
+ Popover.VERSION = '3.3.7'
+
+ Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
+ placement: 'right',
+ trigger: 'click',
+ content: '',
+ template: ''
+ })
+
+
+ // NOTE: POPOVER EXTENDS tooltip.js
+ // ================================
+
+ Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
+
+ Popover.prototype.constructor = Popover
+
+ Popover.prototype.getDefaults = function () {
+ return Popover.DEFAULTS
+ }
+
+ Popover.prototype.setContent = function () {
+ var $tip = this.tip()
+ var title = this.getTitle()
+ var content = this.getContent()
+
+ $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
+ $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events
+ this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
+ ](content)
+
+ $tip.removeClass('fade top bottom left right in')
+
+ // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
+ // this manually by checking the contents.
+ if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
+ }
+
+ Popover.prototype.hasContent = function () {
+ return this.getTitle() || this.getContent()
+ }
+
+ Popover.prototype.getContent = function () {
+ var $e = this.$element
+ var o = this.options
+
+ return $e.attr('data-content')
+ || (typeof o.content == 'function' ?
+ o.content.call($e[0]) :
+ o.content)
+ }
+
+ Popover.prototype.arrow = function () {
+ return (this.$arrow = this.$arrow || this.tip().find('.arrow'))
+ }
+
+
+ // POPOVER PLUGIN DEFINITION
+ // =========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.popover')
+ var options = typeof option == 'object' && option
+
+ if (!data && /destroy|hide/.test(option)) return
+ if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.popover
+
+ $.fn.popover = Plugin
+ $.fn.popover.Constructor = Popover
+
+
+ // POPOVER NO CONFLICT
+ // ===================
+
+ $.fn.popover.noConflict = function () {
+ $.fn.popover = old
+ return this
+ }
+
+}(jQuery);
diff --git a/web/themes/custom/proj_me_theme/bootstrap/assets/javascripts/bootstrap/scrollspy.js b/web/themes/custom/proj_me_theme/bootstrap/assets/javascripts/bootstrap/scrollspy.js
new file mode 100644
index 00000000..fe198095
--- /dev/null
+++ b/web/themes/custom/proj_me_theme/bootstrap/assets/javascripts/bootstrap/scrollspy.js
@@ -0,0 +1,172 @@
+/* ========================================================================
+ * Bootstrap: scrollspy.js v3.3.7
+ * http://getbootstrap.com/javascript/#scrollspy
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // SCROLLSPY CLASS DEFINITION
+ // ==========================
+
+ function ScrollSpy(element, options) {
+ this.$body = $(document.body)
+ this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)
+ this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
+ this.selector = (this.options.target || '') + ' .nav li > a'
+ this.offsets = []
+ this.targets = []
+ this.activeTarget = null
+ this.scrollHeight = 0
+
+ this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))
+ this.refresh()
+ this.process()
+ }
+
+ ScrollSpy.VERSION = '3.3.7'
+
+ ScrollSpy.DEFAULTS = {
+ offset: 10
+ }
+
+ ScrollSpy.prototype.getScrollHeight = function () {
+ return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
+ }
+
+ ScrollSpy.prototype.refresh = function () {
+ var that = this
+ var offsetMethod = 'offset'
+ var offsetBase = 0
+
+ this.offsets = []
+ this.targets = []
+ this.scrollHeight = this.getScrollHeight()
+
+ if (!$.isWindow(this.$scrollElement[0])) {
+ offsetMethod = 'position'
+ offsetBase = this.$scrollElement.scrollTop()
+ }
+
+ this.$body
+ .find(this.selector)
+ .map(function () {
+ var $el = $(this)
+ var href = $el.data('target') || $el.attr('href')
+ var $href = /^#./.test(href) && $(href)
+
+ return ($href
+ && $href.length
+ && $href.is(':visible')
+ && [[$href[offsetMethod]().top + offsetBase, href]]) || null
+ })
+ .sort(function (a, b) { return a[0] - b[0] })
+ .each(function () {
+ that.offsets.push(this[0])
+ that.targets.push(this[1])
+ })
+ }
+
+ ScrollSpy.prototype.process = function () {
+ var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
+ var scrollHeight = this.getScrollHeight()
+ var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height()
+ var offsets = this.offsets
+ var targets = this.targets
+ var activeTarget = this.activeTarget
+ var i
+
+ if (this.scrollHeight != scrollHeight) {
+ this.refresh()
+ }
+
+ if (scrollTop >= maxScroll) {
+ return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)
+ }
+
+ if (activeTarget && scrollTop < offsets[0]) {
+ this.activeTarget = null
+ return this.clear()
+ }
+
+ for (i = offsets.length; i--;) {
+ activeTarget != targets[i]
+ && scrollTop >= offsets[i]
+ && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])
+ && this.activate(targets[i])
+ }
+ }
+
+ ScrollSpy.prototype.activate = function (target) {
+ this.activeTarget = target
+
+ this.clear()
+
+ var selector = this.selector +
+ '[data-target="' + target + '"],' +
+ this.selector + '[href="' + target + '"]'
+
+ var active = $(selector)
+ .parents('li')
+ .addClass('active')
+
+ if (active.parent('.dropdown-menu').length) {
+ active = active
+ .closest('li.dropdown')
+ .addClass('active')
+ }
+
+ active.trigger('activate.bs.scrollspy')
+ }
+
+ ScrollSpy.prototype.clear = function () {
+ $(this.selector)
+ .parentsUntil(this.options.target, '.active')
+ .removeClass('active')
+ }
+
+
+ // SCROLLSPY PLUGIN DEFINITION
+ // ===========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.scrollspy')
+ var options = typeof option == 'object' && option
+
+ if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.scrollspy
+
+ $.fn.scrollspy = Plugin
+ $.fn.scrollspy.Constructor = ScrollSpy
+
+
+ // SCROLLSPY NO CONFLICT
+ // =====================
+
+ $.fn.scrollspy.noConflict = function () {
+ $.fn.scrollspy = old
+ return this
+ }
+
+
+ // SCROLLSPY DATA-API
+ // ==================
+
+ $(window).on('load.bs.scrollspy.data-api', function () {
+ $('[data-spy="scroll"]').each(function () {
+ var $spy = $(this)
+ Plugin.call($spy, $spy.data())
+ })
+ })
+
+}(jQuery);
diff --git a/web/themes/custom/proj_me_theme/bootstrap/assets/javascripts/bootstrap/tab.js b/web/themes/custom/proj_me_theme/bootstrap/assets/javascripts/bootstrap/tab.js
new file mode 100644
index 00000000..c4a86354
--- /dev/null
+++ b/web/themes/custom/proj_me_theme/bootstrap/assets/javascripts/bootstrap/tab.js
@@ -0,0 +1,155 @@
+/* ========================================================================
+ * Bootstrap: tab.js v3.3.7
+ * http://getbootstrap.com/javascript/#tabs
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // TAB CLASS DEFINITION
+ // ====================
+
+ var Tab = function (element) {
+ // jscs:disable requireDollarBeforejQueryAssignment
+ this.element = $(element)
+ // jscs:enable requireDollarBeforejQueryAssignment
+ }
+
+ Tab.VERSION = '3.3.7'
+
+ Tab.TRANSITION_DURATION = 150
+
+ Tab.prototype.show = function () {
+ var $this = this.element
+ var $ul = $this.closest('ul:not(.dropdown-menu)')
+ var selector = $this.data('target')
+
+ if (!selector) {
+ selector = $this.attr('href')
+ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
+ }
+
+ if ($this.parent('li').hasClass('active')) return
+
+ var $previous = $ul.find('.active:last a')
+ var hideEvent = $.Event('hide.bs.tab', {
+ relatedTarget: $this[0]
+ })
+ var showEvent = $.Event('show.bs.tab', {
+ relatedTarget: $previous[0]
+ })
+
+ $previous.trigger(hideEvent)
+ $this.trigger(showEvent)
+
+ if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return
+
+ var $target = $(selector)
+
+ this.activate($this.closest('li'), $ul)
+ this.activate($target, $target.parent(), function () {
+ $previous.trigger({
+ type: 'hidden.bs.tab',
+ relatedTarget: $this[0]
+ })
+ $this.trigger({
+ type: 'shown.bs.tab',
+ relatedTarget: $previous[0]
+ })
+ })
+ }
+
+ Tab.prototype.activate = function (element, container, callback) {
+ var $active = container.find('> .active')
+ var transition = callback
+ && $.support.transition
+ && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)
+
+ function next() {
+ $active
+ .removeClass('active')
+ .find('> .dropdown-menu > .active')
+ .removeClass('active')
+ .end()
+ .find('[data-toggle="tab"]')
+ .attr('aria-expanded', false)
+
+ element
+ .addClass('active')
+ .find('[data-toggle="tab"]')
+ .attr('aria-expanded', true)
+
+ if (transition) {
+ element[0].offsetWidth // reflow for transition
+ element.addClass('in')
+ } else {
+ element.removeClass('fade')
+ }
+
+ if (element.parent('.dropdown-menu').length) {
+ element
+ .closest('li.dropdown')
+ .addClass('active')
+ .end()
+ .find('[data-toggle="tab"]')
+ .attr('aria-expanded', true)
+ }
+
+ callback && callback()
+ }
+
+ $active.length && transition ?
+ $active
+ .one('bsTransitionEnd', next)
+ .emulateTransitionEnd(Tab.TRANSITION_DURATION) :
+ next()
+
+ $active.removeClass('in')
+ }
+
+
+ // TAB PLUGIN DEFINITION
+ // =====================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.tab')
+
+ if (!data) $this.data('bs.tab', (data = new Tab(this)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.tab
+
+ $.fn.tab = Plugin
+ $.fn.tab.Constructor = Tab
+
+
+ // TAB NO CONFLICT
+ // ===============
+
+ $.fn.tab.noConflict = function () {
+ $.fn.tab = old
+ return this
+ }
+
+
+ // TAB DATA-API
+ // ============
+
+ var clickHandler = function (e) {
+ e.preventDefault()
+ Plugin.call($(this), 'show')
+ }
+
+ $(document)
+ .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler)
+ .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler)
+
+}(jQuery);
diff --git a/web/themes/custom/proj_me_theme/bootstrap/assets/javascripts/bootstrap/tooltip.js b/web/themes/custom/proj_me_theme/bootstrap/assets/javascripts/bootstrap/tooltip.js
new file mode 100644
index 00000000..e35d9c7c
--- /dev/null
+++ b/web/themes/custom/proj_me_theme/bootstrap/assets/javascripts/bootstrap/tooltip.js
@@ -0,0 +1,520 @@
+/* ========================================================================
+ * Bootstrap: tooltip.js v3.3.7
+ * http://getbootstrap.com/javascript/#tooltip
+ * Inspired by the original jQuery.tipsy by Jason Frame
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // TOOLTIP PUBLIC CLASS DEFINITION
+ // ===============================
+
+ var Tooltip = function (element, options) {
+ this.type = null
+ this.options = null
+ this.enabled = null
+ this.timeout = null
+ this.hoverState = null
+ this.$element = null
+ this.inState = null
+
+ this.init('tooltip', element, options)
+ }
+
+ Tooltip.VERSION = '3.3.7'
+
+ Tooltip.TRANSITION_DURATION = 150
+
+ Tooltip.DEFAULTS = {
+ animation: true,
+ placement: 'top',
+ selector: false,
+ template: '',
+ trigger: 'hover focus',
+ title: '',
+ delay: 0,
+ html: false,
+ container: false,
+ viewport: {
+ selector: 'body',
+ padding: 0
+ }
+ }
+
+ Tooltip.prototype.init = function (type, element, options) {
+ this.enabled = true
+ this.type = type
+ this.$element = $(element)
+ this.options = this.getOptions(options)
+ this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))
+ this.inState = { click: false, hover: false, focus: false }
+
+ if (this.$element[0] instanceof document.constructor && !this.options.selector) {
+ throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')
+ }
+
+ var triggers = this.options.trigger.split(' ')
+
+ for (var i = triggers.length; i--;) {
+ var trigger = triggers[i]
+
+ if (trigger == 'click') {
+ this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
+ } else if (trigger != 'manual') {
+ var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'
+ var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
+
+ this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
+ this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
+ }
+ }
+
+ this.options.selector ?
+ (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
+ this.fixTitle()
+ }
+
+ Tooltip.prototype.getDefaults = function () {
+ return Tooltip.DEFAULTS
+ }
+
+ Tooltip.prototype.getOptions = function (options) {
+ options = $.extend({}, this.getDefaults(), this.$element.data(), options)
+
+ if (options.delay && typeof options.delay == 'number') {
+ options.delay = {
+ show: options.delay,
+ hide: options.delay
+ }
+ }
+
+ return options
+ }
+
+ Tooltip.prototype.getDelegateOptions = function () {
+ var options = {}
+ var defaults = this.getDefaults()
+
+ this._options && $.each(this._options, function (key, value) {
+ if (defaults[key] != value) options[key] = value
+ })
+
+ return options
+ }
+
+ Tooltip.prototype.enter = function (obj) {
+ var self = obj instanceof this.constructor ?
+ obj : $(obj.currentTarget).data('bs.' + this.type)
+
+ if (!self) {
+ self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
+ $(obj.currentTarget).data('bs.' + this.type, self)
+ }
+
+ if (obj instanceof $.Event) {
+ self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true
+ }
+
+ if (self.tip().hasClass('in') || self.hoverState == 'in') {
+ self.hoverState = 'in'
+ return
+ }
+
+ clearTimeout(self.timeout)
+
+ self.hoverState = 'in'
+
+ if (!self.options.delay || !self.options.delay.show) return self.show()
+
+ self.timeout = setTimeout(function () {
+ if (self.hoverState == 'in') self.show()
+ }, self.options.delay.show)
+ }
+
+ Tooltip.prototype.isInStateTrue = function () {
+ for (var key in this.inState) {
+ if (this.inState[key]) return true
+ }
+
+ return false
+ }
+
+ Tooltip.prototype.leave = function (obj) {
+ var self = obj instanceof this.constructor ?
+ obj : $(obj.currentTarget).data('bs.' + this.type)
+
+ if (!self) {
+ self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
+ $(obj.currentTarget).data('bs.' + this.type, self)
+ }
+
+ if (obj instanceof $.Event) {
+ self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false
+ }
+
+ if (self.isInStateTrue()) return
+
+ clearTimeout(self.timeout)
+
+ self.hoverState = 'out'
+
+ if (!self.options.delay || !self.options.delay.hide) return self.hide()
+
+ self.timeout = setTimeout(function () {
+ if (self.hoverState == 'out') self.hide()
+ }, self.options.delay.hide)
+ }
+
+ Tooltip.prototype.show = function () {
+ var e = $.Event('show.bs.' + this.type)
+
+ if (this.hasContent() && this.enabled) {
+ this.$element.trigger(e)
+
+ var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])
+ if (e.isDefaultPrevented() || !inDom) return
+ var that = this
+
+ var $tip = this.tip()
+
+ var tipId = this.getUID(this.type)
+
+ this.setContent()
+ $tip.attr('id', tipId)
+ this.$element.attr('aria-describedby', tipId)
+
+ if (this.options.animation) $tip.addClass('fade')
+
+ var placement = typeof this.options.placement == 'function' ?
+ this.options.placement.call(this, $tip[0], this.$element[0]) :
+ this.options.placement
+
+ var autoToken = /\s?auto?\s?/i
+ var autoPlace = autoToken.test(placement)
+ if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
+
+ $tip
+ .detach()
+ .css({ top: 0, left: 0, display: 'block' })
+ .addClass(placement)
+ .data('bs.' + this.type, this)
+
+ this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
+ this.$element.trigger('inserted.bs.' + this.type)
+
+ var pos = this.getPosition()
+ var actualWidth = $tip[0].offsetWidth
+ var actualHeight = $tip[0].offsetHeight
+
+ if (autoPlace) {
+ var orgPlacement = placement
+ var viewportDim = this.getPosition(this.$viewport)
+
+ placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' :
+ placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' :
+ placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' :
+ placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' :
+ placement
+
+ $tip
+ .removeClass(orgPlacement)
+ .addClass(placement)
+ }
+
+ var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
+
+ this.applyPlacement(calculatedOffset, placement)
+
+ var complete = function () {
+ var prevHoverState = that.hoverState
+ that.$element.trigger('shown.bs.' + that.type)
+ that.hoverState = null
+
+ if (prevHoverState == 'out') that.leave(that)
+ }
+
+ $.support.transition && this.$tip.hasClass('fade') ?
+ $tip
+ .one('bsTransitionEnd', complete)
+ .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
+ complete()
+ }
+ }
+
+ Tooltip.prototype.applyPlacement = function (offset, placement) {
+ var $tip = this.tip()
+ var width = $tip[0].offsetWidth
+ var height = $tip[0].offsetHeight
+
+ // manually read margins because getBoundingClientRect includes difference
+ var marginTop = parseInt($tip.css('margin-top'), 10)
+ var marginLeft = parseInt($tip.css('margin-left'), 10)
+
+ // we must check for NaN for ie 8/9
+ if (isNaN(marginTop)) marginTop = 0
+ if (isNaN(marginLeft)) marginLeft = 0
+
+ offset.top += marginTop
+ offset.left += marginLeft
+
+ // $.fn.offset doesn't round pixel values
+ // so we use setOffset directly with our own function B-0
+ $.offset.setOffset($tip[0], $.extend({
+ using: function (props) {
+ $tip.css({
+ top: Math.round(props.top),
+ left: Math.round(props.left)
+ })
+ }
+ }, offset), 0)
+
+ $tip.addClass('in')
+
+ // check to see if placing tip in new offset caused the tip to resize itself
+ var actualWidth = $tip[0].offsetWidth
+ var actualHeight = $tip[0].offsetHeight
+
+ if (placement == 'top' && actualHeight != height) {
+ offset.top = offset.top + height - actualHeight
+ }
+
+ var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
+
+ if (delta.left) offset.left += delta.left
+ else offset.top += delta.top
+
+ var isVertical = /top|bottom/.test(placement)
+ var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
+ var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'
+
+ $tip.offset(offset)
+ this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)
+ }
+
+ Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {
+ this.arrow()
+ .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')
+ .css(isVertical ? 'top' : 'left', '')
+ }
+
+ Tooltip.prototype.setContent = function () {
+ var $tip = this.tip()
+ var title = this.getTitle()
+
+ $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
+ $tip.removeClass('fade in top bottom left right')
+ }
+
+ Tooltip.prototype.hide = function (callback) {
+ var that = this
+ var $tip = $(this.$tip)
+ var e = $.Event('hide.bs.' + this.type)
+
+ function complete() {
+ if (that.hoverState != 'in') $tip.detach()
+ if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.
+ that.$element
+ .removeAttr('aria-describedby')
+ .trigger('hidden.bs.' + that.type)
+ }
+ callback && callback()
+ }
+
+ this.$element.trigger(e)
+
+ if (e.isDefaultPrevented()) return
+
+ $tip.removeClass('in')
+
+ $.support.transition && $tip.hasClass('fade') ?
+ $tip
+ .one('bsTransitionEnd', complete)
+ .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
+ complete()
+
+ this.hoverState = null
+
+ return this
+ }
+
+ Tooltip.prototype.fixTitle = function () {
+ var $e = this.$element
+ if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {
+ $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
+ }
+ }
+
+ Tooltip.prototype.hasContent = function () {
+ return this.getTitle()
+ }
+
+ Tooltip.prototype.getPosition = function ($element) {
+ $element = $element || this.$element
+
+ var el = $element[0]
+ var isBody = el.tagName == 'BODY'
+
+ var elRect = el.getBoundingClientRect()
+ if (elRect.width == null) {
+ // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
+ elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
+ }
+ var isSvg = window.SVGElement && el instanceof window.SVGElement
+ // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.
+ // See https://github.com/twbs/bootstrap/issues/20280
+ var elOffset = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())
+ var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
+ var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
+
+ return $.extend({}, elRect, scroll, outerDims, elOffset)
+ }
+
+ Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
+ return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
+ placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
+ placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
+ /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
+
+ }
+
+ Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
+ var delta = { top: 0, left: 0 }
+ if (!this.$viewport) return delta
+
+ var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
+ var viewportDimensions = this.getPosition(this.$viewport)
+
+ if (/right|left/.test(placement)) {
+ var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll
+ var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
+ if (topEdgeOffset < viewportDimensions.top) { // top overflow
+ delta.top = viewportDimensions.top - topEdgeOffset
+ } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
+ delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
+ }
+ } else {
+ var leftEdgeOffset = pos.left - viewportPadding
+ var rightEdgeOffset = pos.left + viewportPadding + actualWidth
+ if (leftEdgeOffset < viewportDimensions.left) { // left overflow
+ delta.left = viewportDimensions.left - leftEdgeOffset
+ } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow
+ delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
+ }
+ }
+
+ return delta
+ }
+
+ Tooltip.prototype.getTitle = function () {
+ var title
+ var $e = this.$element
+ var o = this.options
+
+ title = $e.attr('data-original-title')
+ || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
+
+ return title
+ }
+
+ Tooltip.prototype.getUID = function (prefix) {
+ do prefix += ~~(Math.random() * 1000000)
+ while (document.getElementById(prefix))
+ return prefix
+ }
+
+ Tooltip.prototype.tip = function () {
+ if (!this.$tip) {
+ this.$tip = $(this.options.template)
+ if (this.$tip.length != 1) {
+ throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')
+ }
+ }
+ return this.$tip
+ }
+
+ Tooltip.prototype.arrow = function () {
+ return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
+ }
+
+ Tooltip.prototype.enable = function () {
+ this.enabled = true
+ }
+
+ Tooltip.prototype.disable = function () {
+ this.enabled = false
+ }
+
+ Tooltip.prototype.toggleEnabled = function () {
+ this.enabled = !this.enabled
+ }
+
+ Tooltip.prototype.toggle = function (e) {
+ var self = this
+ if (e) {
+ self = $(e.currentTarget).data('bs.' + this.type)
+ if (!self) {
+ self = new this.constructor(e.currentTarget, this.getDelegateOptions())
+ $(e.currentTarget).data('bs.' + this.type, self)
+ }
+ }
+
+ if (e) {
+ self.inState.click = !self.inState.click
+ if (self.isInStateTrue()) self.enter(self)
+ else self.leave(self)
+ } else {
+ self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
+ }
+ }
+
+ Tooltip.prototype.destroy = function () {
+ var that = this
+ clearTimeout(this.timeout)
+ this.hide(function () {
+ that.$element.off('.' + that.type).removeData('bs.' + that.type)
+ if (that.$tip) {
+ that.$tip.detach()
+ }
+ that.$tip = null
+ that.$arrow = null
+ that.$viewport = null
+ that.$element = null
+ })
+ }
+
+
+ // TOOLTIP PLUGIN DEFINITION
+ // =========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.tooltip')
+ var options = typeof option == 'object' && option
+
+ if (!data && /destroy|hide/.test(option)) return
+ if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.tooltip
+
+ $.fn.tooltip = Plugin
+ $.fn.tooltip.Constructor = Tooltip
+
+
+ // TOOLTIP NO CONFLICT
+ // ===================
+
+ $.fn.tooltip.noConflict = function () {
+ $.fn.tooltip = old
+ return this
+ }
+
+}(jQuery);
diff --git a/web/themes/custom/proj_me_theme/bootstrap/assets/javascripts/bootstrap/transition.js b/web/themes/custom/proj_me_theme/bootstrap/assets/javascripts/bootstrap/transition.js
new file mode 100644
index 00000000..db76596e
--- /dev/null
+++ b/web/themes/custom/proj_me_theme/bootstrap/assets/javascripts/bootstrap/transition.js
@@ -0,0 +1,59 @@
+/* ========================================================================
+ * Bootstrap: transition.js v3.3.7
+ * http://getbootstrap.com/javascript/#transitions
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
+ // ============================================================
+
+ function transitionEnd() {
+ var el = document.createElement('bootstrap')
+
+ var transEndEventNames = {
+ WebkitTransition : 'webkitTransitionEnd',
+ MozTransition : 'transitionend',
+ OTransition : 'oTransitionEnd otransitionend',
+ transition : 'transitionend'
+ }
+
+ for (var name in transEndEventNames) {
+ if (el.style[name] !== undefined) {
+ return { end: transEndEventNames[name] }
+ }
+ }
+
+ return false // explicit for ie8 ( ._.)
+ }
+
+ // http://blog.alexmaccaw.com/css-transitions
+ $.fn.emulateTransitionEnd = function (duration) {
+ var called = false
+ var $el = this
+ $(this).one('bsTransitionEnd', function () { called = true })
+ var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
+ setTimeout(callback, duration)
+ return this
+ }
+
+ $(function () {
+ $.support.transition = transitionEnd()
+
+ if (!$.support.transition) return
+
+ $.event.special.bsTransitionEnd = {
+ bindType: $.support.transition.end,
+ delegateType: $.support.transition.end,
+ handle: function (e) {
+ if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
+ }
+ }
+ })
+
+}(jQuery);
diff --git a/web/themes/custom/proj_me_theme/bootstrap/assets/stylesheets/_bootstrap-compass.scss b/web/themes/custom/proj_me_theme/bootstrap/assets/stylesheets/_bootstrap-compass.scss
new file mode 100644
index 00000000..8fbc3cda
--- /dev/null
+++ b/web/themes/custom/proj_me_theme/bootstrap/assets/stylesheets/_bootstrap-compass.scss
@@ -0,0 +1,9 @@
+@function twbs-font-path($path) {
+ @return font-url($path, true);
+}
+
+@function twbs-image-path($path) {
+ @return image-url($path, true);
+}
+
+$bootstrap-sass-asset-helper: true;
diff --git a/web/themes/custom/proj_me_theme/bootstrap/assets/stylesheets/_bootstrap-mincer.scss b/web/themes/custom/proj_me_theme/bootstrap/assets/stylesheets/_bootstrap-mincer.scss
new file mode 100644
index 00000000..0c4655e3
--- /dev/null
+++ b/web/themes/custom/proj_me_theme/bootstrap/assets/stylesheets/_bootstrap-mincer.scss
@@ -0,0 +1,19 @@
+// Mincer asset helper functions
+//
+// This must be imported into a .css.ejs.scss file.
+// Then, <% %>-interpolations will be parsed as strings by Sass, and evaluated by EJS after Sass compilation.
+
+
+@function twbs-font-path($path) {
+ // do something like following
+ // from "path/to/font.ext#suffix" to "<%- asset_path(path/to/font.ext)) + #suffix %>"
+ // from "path/to/font.ext?#suffix" to "<%- asset_path(path/to/font.ext)) + ?#suffix %>"
+ // or from "path/to/font.ext" just "<%- asset_path(path/to/font.ext)) %>"
+ @return "<%- asset_path("#{$path}".replace(/[#?].*$/, '')) + "#{$path}".replace(/(^[^#?]*)([#?]?.*$)/, '$2') %>";
+}
+
+@function twbs-image-path($file) {
+ @return "<%- asset_path("#{$file}") %>";
+}
+
+$bootstrap-sass-asset-helper: true;
diff --git a/web/themes/custom/proj_me_theme/bootstrap/assets/stylesheets/_bootstrap-sprockets.scss b/web/themes/custom/proj_me_theme/bootstrap/assets/stylesheets/_bootstrap-sprockets.scss
new file mode 100644
index 00000000..9fffc1eb
--- /dev/null
+++ b/web/themes/custom/proj_me_theme/bootstrap/assets/stylesheets/_bootstrap-sprockets.scss
@@ -0,0 +1,9 @@
+@function twbs-font-path($path) {
+ @return font-path($path);
+}
+
+@function twbs-image-path($path) {
+ @return image-path($path);
+}
+
+$bootstrap-sass-asset-helper: true;
diff --git a/web/themes/custom/proj_me_theme/bootstrap/assets/stylesheets/_bootstrap.scss b/web/themes/custom/proj_me_theme/bootstrap/assets/stylesheets/_bootstrap.scss
new file mode 100644
index 00000000..e72d1def
--- /dev/null
+++ b/web/themes/custom/proj_me_theme/bootstrap/assets/stylesheets/_bootstrap.scss
@@ -0,0 +1,56 @@
+/*!
+ * Bootstrap v3.3.7 (http://getbootstrap.com)
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+
+// Core variables and mixins
+@import "bootstrap/variables";
+@import "bootstrap/mixins";
+
+// Reset and dependencies
+@import "bootstrap/normalize";
+@import "bootstrap/print";
+@import "bootstrap/glyphicons";
+
+// Core CSS
+@import "bootstrap/scaffolding";
+@import "bootstrap/type";
+@import "bootstrap/code";
+@import "bootstrap/grid";
+@import "bootstrap/tables";
+@import "bootstrap/forms";
+@import "bootstrap/buttons";
+
+// Components
+@import "bootstrap/component-animations";
+@import "bootstrap/dropdowns";
+@import "bootstrap/button-groups";
+@import "bootstrap/input-groups";
+@import "bootstrap/navs";
+@import "bootstrap/navbar";
+@import "bootstrap/breadcrumbs";
+@import "bootstrap/pagination";
+@import "bootstrap/pager";
+@import "bootstrap/labels";
+@import "bootstrap/badges";
+@import "bootstrap/jumbotron";
+@import "bootstrap/thumbnails";
+@import "bootstrap/alerts";
+@import "bootstrap/progress-bars";
+@import "bootstrap/media";
+@import "bootstrap/list-group";
+@import "bootstrap/panels";
+@import "bootstrap/responsive-embed";
+@import "bootstrap/wells";
+@import "bootstrap/close";
+
+// Components w/ JavaScript
+@import "bootstrap/modals";
+@import "bootstrap/tooltip";
+@import "bootstrap/popovers";
+@import "bootstrap/carousel";
+
+// Utility classes
+@import "bootstrap/utilities";
+@import "bootstrap/responsive-utilities";
diff --git a/web/themes/custom/proj_me_theme/bootstrap/assets/stylesheets/bootstrap/_alerts.scss b/web/themes/custom/proj_me_theme/bootstrap/assets/stylesheets/bootstrap/_alerts.scss
new file mode 100644
index 00000000..7d1e1fdd
--- /dev/null
+++ b/web/themes/custom/proj_me_theme/bootstrap/assets/stylesheets/bootstrap/_alerts.scss
@@ -0,0 +1,73 @@
+//
+// Alerts
+// --------------------------------------------------
+
+
+// Base styles
+// -------------------------
+
+.alert {
+ padding: $alert-padding;
+ margin-bottom: $line-height-computed;
+ border: 1px solid transparent;
+ border-radius: $alert-border-radius;
+
+ // Headings for larger alerts
+ h4 {
+ margin-top: 0;
+ // Specified for the h4 to prevent conflicts of changing $headings-color
+ color: inherit;
+ }
+
+ // Provide class for links that match alerts
+ .alert-link {
+ font-weight: $alert-link-font-weight;
+ }
+
+ // Improve alignment and spacing of inner content
+ > p,
+ > ul {
+ margin-bottom: 0;
+ }
+
+ > p + p {
+ margin-top: 5px;
+ }
+}
+
+// Dismissible alerts
+//
+// Expand the right padding and account for the close button's positioning.
+
+.alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0.
+.alert-dismissible {
+ padding-right: ($alert-padding + 20);
+
+ // Adjust close link position
+ .close {
+ position: relative;
+ top: -2px;
+ right: -21px;
+ color: inherit;
+ }
+}
+
+// Alternate styles
+//
+// Generate contextual modifier classes for colorizing the alert.
+
+.alert-success {
+ @include alert-variant($alert-success-bg, $alert-success-border, $alert-success-text);
+}
+
+.alert-info {
+ @include alert-variant($alert-info-bg, $alert-info-border, $alert-info-text);
+}
+
+.alert-warning {
+ @include alert-variant($alert-warning-bg, $alert-warning-border, $alert-warning-text);
+}
+
+.alert-danger {
+ @include alert-variant($alert-danger-bg, $alert-danger-border, $alert-danger-text);
+}
diff --git a/web/themes/custom/proj_me_theme/bootstrap/assets/stylesheets/bootstrap/_badges.scss b/web/themes/custom/proj_me_theme/bootstrap/assets/stylesheets/bootstrap/_badges.scss
new file mode 100644
index 00000000..70002e08
--- /dev/null
+++ b/web/themes/custom/proj_me_theme/bootstrap/assets/stylesheets/bootstrap/_badges.scss
@@ -0,0 +1,68 @@
+//
+// Badges
+// --------------------------------------------------
+
+
+// Base class
+.badge {
+ display: inline-block;
+ min-width: 10px;
+ padding: 3px 7px;
+ font-size: $font-size-small;
+ font-weight: $badge-font-weight;
+ color: $badge-color;
+ line-height: $badge-line-height;
+ vertical-align: middle;
+ white-space: nowrap;
+ text-align: center;
+ background-color: $badge-bg;
+ border-radius: $badge-border-radius;
+
+ // Empty badges collapse automatically (not available in IE8)
+ &:empty {
+ display: none;
+ }
+
+ // Quick fix for badges in buttons
+ .btn & {
+ position: relative;
+ top: -1px;
+ }
+
+ .btn-xs &,
+ .btn-group-xs > .btn & {
+ top: 0;
+ padding: 1px 5px;
+ }
+
+ // [converter] extracted a& to a.badge
+
+ // Account for badges in navs
+ .list-group-item.active > &,
+ .nav-pills > .active > a > & {
+ color: $badge-active-color;
+ background-color: $badge-active-bg;
+ }
+
+ .list-group-item > & {
+ float: right;
+ }
+
+ .list-group-item > & + & {
+ margin-right: 5px;
+ }
+
+ .nav-pills > li > a > & {
+ margin-left: 3px;
+ }
+}
+
+// Hover state, but only for links
+a.badge {
+ &:hover,
+ &:focus {
+ color: $badge-link-hover-color;
+ text-decoration: none;
+ cursor: pointer;
+ }
+}
diff --git a/web/themes/custom/proj_me_theme/bootstrap/assets/stylesheets/bootstrap/_breadcrumbs.scss b/web/themes/custom/proj_me_theme/bootstrap/assets/stylesheets/bootstrap/_breadcrumbs.scss
new file mode 100644
index 00000000..b61f0c73
--- /dev/null
+++ b/web/themes/custom/proj_me_theme/bootstrap/assets/stylesheets/bootstrap/_breadcrumbs.scss
@@ -0,0 +1,28 @@
+//
+// Breadcrumbs
+// --------------------------------------------------
+
+
+.breadcrumb {
+ padding: $breadcrumb-padding-vertical $breadcrumb-padding-horizontal;
+ margin-bottom: $line-height-computed;
+ list-style: none;
+ background-color: $breadcrumb-bg;
+ border-radius: $border-radius-base;
+
+ > li {
+ display: inline-block;
+
+ + li:before {
+ // [converter] Workaround for https://github.com/sass/libsass/issues/1115
+ $nbsp: "\00a0";
+ content: "#{$breadcrumb-separator}#{$nbsp}"; // Unicode space added since inline-block means non-collapsing white-space
+ padding: 0 5px;
+ color: $breadcrumb-color;
+ }
+ }
+
+ > .active {
+ color: $breadcrumb-active-color;
+ }
+}
diff --git a/web/themes/custom/proj_me_theme/bootstrap/assets/stylesheets/bootstrap/_button-groups.scss b/web/themes/custom/proj_me_theme/bootstrap/assets/stylesheets/bootstrap/_button-groups.scss
new file mode 100644
index 00000000..4b385f56
--- /dev/null
+++ b/web/themes/custom/proj_me_theme/bootstrap/assets/stylesheets/bootstrap/_button-groups.scss
@@ -0,0 +1,244 @@
+//
+// Button groups
+// --------------------------------------------------
+
+// Make the div behave like a button
+.btn-group,
+.btn-group-vertical {
+ position: relative;
+ display: inline-block;
+ vertical-align: middle; // match .btn alignment given font-size hack above
+ > .btn {
+ position: relative;
+ float: left;
+ // Bring the "active" button to the front
+ &:hover,
+ &:focus,
+ &:active,
+ &.active {
+ z-index: 2;
+ }
+ }
+}
+
+// Prevent double borders when buttons are next to each other
+.btn-group {
+ .btn + .btn,
+ .btn + .btn-group,
+ .btn-group + .btn,
+ .btn-group + .btn-group {
+ margin-left: -1px;
+ }
+}
+
+// Optional: Group multiple button groups together for a toolbar
+.btn-toolbar {
+ margin-left: -5px; // Offset the first child's margin
+ @include clearfix;
+
+ .btn,
+ .btn-group,
+ .input-group {
+ float: left;
+ }
+ > .btn,
+ > .btn-group,
+ > .input-group {
+ margin-left: 5px;
+ }
+}
+
+.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
+ border-radius: 0;
+}
+
+// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match
+.btn-group > .btn:first-child {
+ margin-left: 0;
+ &:not(:last-child):not(.dropdown-toggle) {
+ @include border-right-radius(0);
+ }
+}
+// Need .dropdown-toggle since :last-child doesn't apply, given that a .dropdown-menu is used immediately after it
+.btn-group > .btn:last-child:not(:first-child),
+.btn-group > .dropdown-toggle:not(:first-child) {
+ @include border-left-radius(0);
+}
+
+// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)
+.btn-group > .btn-group {
+ float: left;
+}
+.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
+ border-radius: 0;
+}
+.btn-group > .btn-group:first-child:not(:last-child) {
+ > .btn:last-child,
+ > .dropdown-toggle {
+ @include border-right-radius(0);
+ }
+}
+.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {
+ @include border-left-radius(0);
+}
+
+// On active and open, don't show outline
+.btn-group .dropdown-toggle:active,
+.btn-group.open .dropdown-toggle {
+ outline: 0;
+}
+
+
+// Sizing
+//
+// Remix the default button sizing classes into new ones for easier manipulation.
+
+.btn-group-xs > .btn { @extend .btn-xs; }
+.btn-group-sm > .btn { @extend .btn-sm; }
+.btn-group-lg > .btn { @extend .btn-lg; }
+
+
+// Split button dropdowns
+// ----------------------
+
+// Give the line between buttons some depth
+.btn-group > .btn + .dropdown-toggle {
+ padding-left: 8px;
+ padding-right: 8px;
+}
+.btn-group > .btn-lg + .dropdown-toggle {
+ padding-left: 12px;
+ padding-right: 12px;
+}
+
+// The clickable button for toggling the menu
+// Remove the gradient and set the same inset shadow as the :active state
+.btn-group.open .dropdown-toggle {
+ @include box-shadow(inset 0 3px 5px rgba(0,0,0,.125));
+
+ // Show no shadow for `.btn-link` since it has no other button styles.
+ &.btn-link {
+ @include box-shadow(none);
+ }
+}
+
+
+// Reposition the caret
+.btn .caret {
+ margin-left: 0;
+}
+// Carets in other button sizes
+.btn-lg .caret {
+ border-width: $caret-width-large $caret-width-large 0;
+ border-bottom-width: 0;
+}
+// Upside down carets for .dropup
+.dropup .btn-lg .caret {
+ border-width: 0 $caret-width-large $caret-width-large;
+}
+
+
+// Vertical button groups
+// ----------------------
+
+.btn-group-vertical {
+ > .btn,
+ > .btn-group,
+ > .btn-group > .btn {
+ display: block;
+ float: none;
+ width: 100%;
+ max-width: 100%;
+ }
+
+ // Clear floats so dropdown menus can be properly placed
+ > .btn-group {
+ @include clearfix;
+ > .btn {
+ float: none;
+ }
+ }
+
+ > .btn + .btn,
+ > .btn + .btn-group,
+ > .btn-group + .btn,
+ > .btn-group + .btn-group {
+ margin-top: -1px;
+ margin-left: 0;
+ }
+}
+
+.btn-group-vertical > .btn {
+ &:not(:first-child):not(:last-child) {
+ border-radius: 0;
+ }
+ &:first-child:not(:last-child) {
+ @include border-top-radius($btn-border-radius-base);
+ @include border-bottom-radius(0);
+ }
+ &:last-child:not(:first-child) {
+ @include border-top-radius(0);
+ @include border-bottom-radius($btn-border-radius-base);
+ }
+}
+.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
+ border-radius: 0;
+}
+.btn-group-vertical > .btn-group:first-child:not(:last-child) {
+ > .btn:last-child,
+ > .dropdown-toggle {
+ @include border-bottom-radius(0);
+ }
+}
+.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
+ @include border-top-radius(0);
+}
+
+
+// Justified button groups
+// ----------------------
+
+.btn-group-justified {
+ display: table;
+ width: 100%;
+ table-layout: fixed;
+ border-collapse: separate;
+ > .btn,
+ > .btn-group {
+ float: none;
+ display: table-cell;
+ width: 1%;
+ }
+ > .btn-group .btn {
+ width: 100%;
+ }
+
+ > .btn-group .dropdown-menu {
+ left: auto;
+ }
+}
+
+
+// Checkbox and radio options
+//
+// In order to support the browser's form validation feedback, powered by the
+// `required` attribute, we have to "hide" the inputs via `clip`. We cannot use
+// `display: none;` or `visibility: hidden;` as that also hides the popover.
+// Simply visually hiding the inputs via `opacity` would leave them clickable in
+// certain cases which is prevented by using `clip` and `pointer-events`.
+// This way, we ensure a DOM element is visible to position the popover from.
+//
+// See https://github.com/twbs/bootstrap/pull/12794 and
+// https://github.com/twbs/bootstrap/pull/14559 for more information.
+
+[data-toggle="buttons"] {
+ > .btn,
+ > .btn-group > .btn {
+ input[type="radio"],
+ input[type="checkbox"] {
+ position: absolute;
+ clip: rect(0,0,0,0);
+ pointer-events: none;
+ }
+ }
+}
diff --git a/web/themes/custom/proj_me_theme/bootstrap/assets/stylesheets/bootstrap/_buttons.scss b/web/themes/custom/proj_me_theme/bootstrap/assets/stylesheets/bootstrap/_buttons.scss
new file mode 100644
index 00000000..6452b709
--- /dev/null
+++ b/web/themes/custom/proj_me_theme/bootstrap/assets/stylesheets/bootstrap/_buttons.scss
@@ -0,0 +1,168 @@
+//
+// Buttons
+// --------------------------------------------------
+
+
+// Base styles
+// --------------------------------------------------
+
+.btn {
+ display: inline-block;
+ margin-bottom: 0; // For input.btn
+ font-weight: $btn-font-weight;
+ text-align: center;
+ vertical-align: middle;
+ touch-action: manipulation;
+ cursor: pointer;
+ background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214
+ border: 1px solid transparent;
+ white-space: nowrap;
+ @include button-size($padding-base-vertical, $padding-base-horizontal, $font-size-base, $line-height-base, $btn-border-radius-base);
+ @include user-select(none);
+
+ &,
+ &:active,
+ &.active {
+ &:focus,
+ &.focus {
+ @include tab-focus;
+ }
+ }
+
+ &:hover,
+ &:focus,
+ &.focus {
+ color: $btn-default-color;
+ text-decoration: none;
+ }
+
+ &:active,
+ &.active {
+ outline: 0;
+ background-image: none;
+ @include box-shadow(inset 0 3px 5px rgba(0,0,0,.125));
+ }
+
+ &.disabled,
+ &[disabled],
+ fieldset[disabled] & {
+ cursor: $cursor-disabled;
+ @include opacity(.65);
+ @include box-shadow(none);
+ }
+
+ // [converter] extracted a& to a.btn
+}
+
+a.btn {
+ &.disabled,
+ fieldset[disabled] & {
+ pointer-events: none; // Future-proof disabling of clicks on `` elements
+ }
+}
+
+
+// Alternate buttons
+// --------------------------------------------------
+
+.btn-default {
+ @include button-variant($btn-default-color, $btn-default-bg, $btn-default-border);
+}
+.btn-primary {
+ @include button-variant($btn-primary-color, $btn-primary-bg, $btn-primary-border);
+}
+// Success appears as green
+.btn-success {
+ @include button-variant($btn-success-color, $btn-success-bg, $btn-success-border);
+}
+// Info appears as blue-green
+.btn-info {
+ @include button-variant($btn-info-color, $btn-info-bg, $btn-info-border);
+}
+// Warning appears as orange
+.btn-warning {
+ @include button-variant($btn-warning-color, $btn-warning-bg, $btn-warning-border);
+}
+// Danger and error appear as red
+.btn-danger {
+ @include button-variant($btn-danger-color, $btn-danger-bg, $btn-danger-border);
+}
+
+
+// Link buttons
+// -------------------------
+
+// Make a button look and behave like a link
+.btn-link {
+ color: $link-color;
+ font-weight: normal;
+ border-radius: 0;
+
+ &,
+ &:active,
+ &.active,
+ &[disabled],
+ fieldset[disabled] & {
+ background-color: transparent;
+ @include box-shadow(none);
+ }
+ &,
+ &:hover,
+ &:focus,
+ &:active {
+ border-color: transparent;
+ }
+ &:hover,
+ &:focus {
+ color: $link-hover-color;
+ text-decoration: $link-hover-decoration;
+ background-color: transparent;
+ }
+ &[disabled],
+ fieldset[disabled] & {
+ &:hover,
+ &:focus {
+ color: $btn-link-disabled-color;
+ text-decoration: none;
+ }
+ }
+}
+
+
+// Button Sizes
+// --------------------------------------------------
+
+.btn-lg {
+ // line-height: ensure even-numbered height of button next to large input
+ @include button-size($padding-large-vertical, $padding-large-horizontal, $font-size-large, $line-height-large, $btn-border-radius-large);
+}
+.btn-sm {
+ // line-height: ensure proper height of button next to small input
+ @include button-size($padding-small-vertical, $padding-small-horizontal, $font-size-small, $line-height-small, $btn-border-radius-small);
+}
+.btn-xs {
+ @include button-size($padding-xs-vertical, $padding-xs-horizontal, $font-size-small, $line-height-small, $btn-border-radius-small);
+}
+
+
+// Block button
+// --------------------------------------------------
+
+.btn-block {
+ display: block;
+ width: 100%;
+}
+
+// Vertically space out multiple block buttons
+.btn-block + .btn-block {
+ margin-top: 5px;
+}
+
+// Specificity overrides
+input[type="submit"],
+input[type="reset"],
+input[type="button"] {
+ &.btn-block {
+ width: 100%;
+ }
+}
diff --git a/web/themes/custom/proj_me_theme/bootstrap/assets/stylesheets/bootstrap/_carousel.scss b/web/themes/custom/proj_me_theme/bootstrap/assets/stylesheets/bootstrap/_carousel.scss
new file mode 100644
index 00000000..753d881f
--- /dev/null
+++ b/web/themes/custom/proj_me_theme/bootstrap/assets/stylesheets/bootstrap/_carousel.scss
@@ -0,0 +1,270 @@
+//
+// Carousel
+// --------------------------------------------------
+
+
+// Wrapper for the slide container and indicators
+.carousel {
+ position: relative;
+}
+
+.carousel-inner {
+ position: relative;
+ overflow: hidden;
+ width: 100%;
+
+ > .item {
+ display: none;
+ position: relative;
+ @include transition(.6s ease-in-out left);
+
+ // Account for jankitude on images
+ > img,
+ > a > img {
+ @include img-responsive;
+ line-height: 1;
+ }
+
+ // WebKit CSS3 transforms for supported devices
+ @media all and (transform-3d), (-webkit-transform-3d) {
+ @include transition-transform(0.6s ease-in-out);
+ @include backface-visibility(hidden);
+ @include perspective(1000px);
+
+ &.next,
+ &.active.right {
+ @include translate3d(100%, 0, 0);
+ left: 0;
+ }
+ &.prev,
+ &.active.left {
+ @include translate3d(-100%, 0, 0);
+ left: 0;
+ }
+ &.next.left,
+ &.prev.right,
+ &.active {
+ @include translate3d(0, 0, 0);
+ left: 0;
+ }
+ }
+ }
+
+ > .active,
+ > .next,
+ > .prev {
+ display: block;
+ }
+
+ > .active {
+ left: 0;
+ }
+
+ > .next,
+ > .prev {
+ position: absolute;
+ top: 0;
+ width: 100%;
+ }
+
+ > .next {
+ left: 100%;
+ }
+ > .prev {
+ left: -100%;
+ }
+ > .next.left,
+ > .prev.right {
+ left: 0;
+ }
+
+ > .active.left {
+ left: -100%;
+ }
+ > .active.right {
+ left: 100%;
+ }
+
+}
+
+// Left/right controls for nav
+// ---------------------------
+
+.carousel-control {
+ position: absolute;
+ top: 0;
+ left: 0;
+ bottom: 0;
+ width: $carousel-control-width;
+ @include opacity($carousel-control-opacity);
+ font-size: $carousel-control-font-size;
+ color: $carousel-control-color;
+ text-align: center;
+ text-shadow: $carousel-text-shadow;
+ background-color: rgba(0, 0, 0, 0); // Fix IE9 click-thru bug
+ // We can't have this transition here because WebKit cancels the carousel
+ // animation if you trip this while in the middle of another animation.
+
+ // Set gradients for backgrounds
+ &.left {
+ @include gradient-horizontal($start-color: rgba(0,0,0,.5), $end-color: rgba(0,0,0,.0001));
+ }
+ &.right {
+ left: auto;
+ right: 0;
+ @include gradient-horizontal($start-color: rgba(0,0,0,.0001), $end-color: rgba(0,0,0,.5));
+ }
+
+ // Hover/focus state
+ &:hover,
+ &:focus {
+ outline: 0;
+ color: $carousel-control-color;
+ text-decoration: none;
+ @include opacity(.9);
+ }
+
+ // Toggles
+ .icon-prev,
+ .icon-next,
+ .glyphicon-chevron-left,
+ .glyphicon-chevron-right {
+ position: absolute;
+ top: 50%;
+ margin-top: -10px;
+ z-index: 5;
+ display: inline-block;
+ }
+ .icon-prev,
+ .glyphicon-chevron-left {
+ left: 50%;
+ margin-left: -10px;
+ }
+ .icon-next,
+ .glyphicon-chevron-right {
+ right: 50%;
+ margin-right: -10px;
+ }
+ .icon-prev,
+ .icon-next {
+ width: 20px;
+ height: 20px;
+ line-height: 1;
+ font-family: serif;
+ }
+
+
+ .icon-prev {
+ &:before {
+ content: '\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)
+ }
+ }
+ .icon-next {
+ &:before {
+ content: '\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)
+ }
+ }
+}
+
+// Optional indicator pips
+//
+// Add an unordered list with the following class and add a list item for each
+// slide your carousel holds.
+
+.carousel-indicators {
+ position: absolute;
+ bottom: 10px;
+ left: 50%;
+ z-index: 15;
+ width: 60%;
+ margin-left: -30%;
+ padding-left: 0;
+ list-style: none;
+ text-align: center;
+
+ li {
+ display: inline-block;
+ width: 10px;
+ height: 10px;
+ margin: 1px;
+ text-indent: -999px;
+ border: 1px solid $carousel-indicator-border-color;
+ border-radius: 10px;
+ cursor: pointer;
+
+ // IE8-9 hack for event handling
+ //
+ // Internet Explorer 8-9 does not support clicks on elements without a set
+ // `background-color`. We cannot use `filter` since that's not viewed as a
+ // background color by the browser. Thus, a hack is needed.
+ // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Internet_Explorer
+ //
+ // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we
+ // set alpha transparency for the best results possible.
+ background-color: #000 \9; // IE8
+ background-color: rgba(0,0,0,0); // IE9
+ }
+ .active {
+ margin: 0;
+ width: 12px;
+ height: 12px;
+ background-color: $carousel-indicator-active-bg;
+ }
+}
+
+// Optional captions
+// -----------------------------
+// Hidden by default for smaller viewports
+.carousel-caption {
+ position: absolute;
+ left: 15%;
+ right: 15%;
+ bottom: 20px;
+ z-index: 10;
+ padding-top: 20px;
+ padding-bottom: 20px;
+ color: $carousel-caption-color;
+ text-align: center;
+ text-shadow: $carousel-text-shadow;
+ & .btn {
+ text-shadow: none; // No shadow for button elements in carousel-caption
+ }
+}
+
+
+// Scale up controls for tablets and up
+@media screen and (min-width: $screen-sm-min) {
+
+ // Scale up the controls a smidge
+ .carousel-control {
+ .glyphicon-chevron-left,
+ .glyphicon-chevron-right,
+ .icon-prev,
+ .icon-next {
+ width: ($carousel-control-font-size * 1.5);
+ height: ($carousel-control-font-size * 1.5);
+ margin-top: ($carousel-control-font-size / -2);
+ font-size: ($carousel-control-font-size * 1.5);
+ }
+ .glyphicon-chevron-left,
+ .icon-prev {
+ margin-left: ($carousel-control-font-size / -2);
+ }
+ .glyphicon-chevron-right,
+ .icon-next {
+ margin-right: ($carousel-control-font-size / -2);
+ }
+ }
+
+ // Show and left align the captions
+ .carousel-caption {
+ left: 20%;
+ right: 20%;
+ padding-bottom: 30px;
+ }
+
+ // Move up the indicators
+ .carousel-indicators {
+ bottom: 20px;
+ }
+}
diff --git a/web/themes/custom/proj_me_theme/bootstrap/assets/stylesheets/bootstrap/_close.scss b/web/themes/custom/proj_me_theme/bootstrap/assets/stylesheets/bootstrap/_close.scss
new file mode 100644
index 00000000..3b74d8a9
--- /dev/null
+++ b/web/themes/custom/proj_me_theme/bootstrap/assets/stylesheets/bootstrap/_close.scss
@@ -0,0 +1,36 @@
+//
+// Close icons
+// --------------------------------------------------
+
+
+.close {
+ float: right;
+ font-size: ($font-size-base * 1.5);
+ font-weight: $close-font-weight;
+ line-height: 1;
+ color: $close-color;
+ text-shadow: $close-text-shadow;
+ @include opacity(.2);
+
+ &:hover,
+ &:focus {
+ color: $close-color;
+ text-decoration: none;
+ cursor: pointer;
+ @include opacity(.5);
+ }
+
+ // [converter] extracted button& to button.close
+}
+
+// Additional properties for button version
+// iOS requires the button element instead of an anchor tag.
+// If you want the anchor version, it requires `href="#"`.
+// See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile
+button.close {
+ padding: 0;
+ cursor: pointer;
+ background: transparent;
+ border: 0;
+ -webkit-appearance: none;
+}
diff --git a/web/themes/custom/proj_me_theme/bootstrap/assets/stylesheets/bootstrap/_code.scss b/web/themes/custom/proj_me_theme/bootstrap/assets/stylesheets/bootstrap/_code.scss
new file mode 100644
index 00000000..caa5f063
--- /dev/null
+++ b/web/themes/custom/proj_me_theme/bootstrap/assets/stylesheets/bootstrap/_code.scss
@@ -0,0 +1,69 @@
+//
+// Code (inline and block)
+// --------------------------------------------------
+
+
+// Inline and block code styles
+code,
+kbd,
+pre,
+samp {
+ font-family: $font-family-monospace;
+}
+
+// Inline code
+code {
+ padding: 2px 4px;
+ font-size: 90%;
+ color: $code-color;
+ background-color: $code-bg;
+ border-radius: $border-radius-base;
+}
+
+// User input typically entered via keyboard
+kbd {
+ padding: 2px 4px;
+ font-size: 90%;
+ color: $kbd-color;
+ background-color: $kbd-bg;
+ border-radius: $border-radius-small;
+ box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);
+
+ kbd {
+ padding: 0;
+ font-size: 100%;
+ font-weight: bold;
+ box-shadow: none;
+ }
+}
+
+// Blocks of code
+pre {
+ display: block;
+ padding: (($line-height-computed - 1) / 2);
+ margin: 0 0 ($line-height-computed / 2);
+ font-size: ($font-size-base - 1); // 14px to 13px
+ line-height: $line-height-base;
+ word-break: break-all;
+ word-wrap: break-word;
+ color: $pre-color;
+ background-color: $pre-bg;
+ border: 1px solid $pre-border-color;
+ border-radius: $border-radius-base;
+
+ // Account for some code outputs that place code tags in pre tags
+ code {
+ padding: 0;
+ font-size: inherit;
+ color: inherit;
+ white-space: pre-wrap;
+ background-color: transparent;
+ border-radius: 0;
+ }
+}
+
+// Enable scrollable blocks of code
+.pre-scrollable {
+ max-height: $pre-scrollable-max-height;
+ overflow-y: scroll;
+}
diff --git a/web/themes/custom/proj_me_theme/bootstrap/assets/stylesheets/bootstrap/_component-animations.scss b/web/themes/custom/proj_me_theme/bootstrap/assets/stylesheets/bootstrap/_component-animations.scss
new file mode 100644
index 00000000..ca3b43ca
--- /dev/null
+++ b/web/themes/custom/proj_me_theme/bootstrap/assets/stylesheets/bootstrap/_component-animations.scss
@@ -0,0 +1,37 @@
+//
+// Component animations
+// --------------------------------------------------
+
+// Heads up!
+//
+// We don't use the `.opacity()` mixin here since it causes a bug with text
+// fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552.
+
+.fade {
+ opacity: 0;
+ @include transition(opacity .15s linear);
+ &.in {
+ opacity: 1;
+ }
+}
+
+.collapse {
+ display: none;
+
+ &.in { display: block; }
+ // [converter] extracted tr&.in to tr.collapse.in
+ // [converter] extracted tbody&.in to tbody.collapse.in
+}
+
+tr.collapse.in { display: table-row; }
+
+tbody.collapse.in { display: table-row-group; }
+
+.collapsing {
+ position: relative;
+ height: 0;
+ overflow: hidden;
+ @include transition-property(height, visibility);
+ @include transition-duration(.35s);
+ @include transition-timing-function(ease);
+}
diff --git a/web/themes/custom/proj_me_theme/bootstrap/assets/stylesheets/bootstrap/_dropdowns.scss b/web/themes/custom/proj_me_theme/bootstrap/assets/stylesheets/bootstrap/_dropdowns.scss
new file mode 100644
index 00000000..aac84597
--- /dev/null
+++ b/web/themes/custom/proj_me_theme/bootstrap/assets/stylesheets/bootstrap/_dropdowns.scss
@@ -0,0 +1,216 @@
+//
+// Dropdown menus
+// --------------------------------------------------
+
+
+// Dropdown arrow/caret
+.caret {
+ display: inline-block;
+ width: 0;
+ height: 0;
+ margin-left: 2px;
+ vertical-align: middle;
+ border-top: $caret-width-base dashed;
+ border-top: $caret-width-base solid \9; // IE8
+ border-right: $caret-width-base solid transparent;
+ border-left: $caret-width-base solid transparent;
+}
+
+// The dropdown wrapper (div)
+.dropup,
+.dropdown {
+ position: relative;
+}
+
+// Prevent the focus on the dropdown toggle when closing dropdowns
+.dropdown-toggle:focus {
+ outline: 0;
+}
+
+// The dropdown menu (ul)
+.dropdown-menu {
+ position: absolute;
+ top: 100%;
+ left: 0;
+ z-index: $zindex-dropdown;
+ display: none; // none by default, but block on "open" of the menu
+ float: left;
+ min-width: 160px;
+ padding: 5px 0;
+ margin: 2px 0 0; // override default ul
+ list-style: none;
+ font-size: $font-size-base;
+ text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)
+ background-color: $dropdown-bg;
+ border: 1px solid $dropdown-fallback-border; // IE8 fallback
+ border: 1px solid $dropdown-border;
+ border-radius: $border-radius-base;
+ @include box-shadow(0 6px 12px rgba(0,0,0,.175));
+ background-clip: padding-box;
+
+ // Aligns the dropdown menu to right
+ //
+ // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`
+ &.pull-right {
+ right: 0;
+ left: auto;
+ }
+
+ // Dividers (basically an hr) within the dropdown
+ .divider {
+ @include nav-divider($dropdown-divider-bg);
+ }
+
+ // Links within the dropdown menu
+ > li > a {
+ display: block;
+ padding: 3px 20px;
+ clear: both;
+ font-weight: normal;
+ line-height: $line-height-base;
+ color: $dropdown-link-color;
+ white-space: nowrap; // prevent links from randomly breaking onto new lines
+ }
+}
+
+// Hover/Focus state
+.dropdown-menu > li > a {
+ &:hover,
+ &:focus {
+ text-decoration: none;
+ color: $dropdown-link-hover-color;
+ background-color: $dropdown-link-hover-bg;
+ }
+}
+
+// Active state
+.dropdown-menu > .active > a {
+ &,
+ &:hover,
+ &:focus {
+ color: $dropdown-link-active-color;
+ text-decoration: none;
+ outline: 0;
+ background-color: $dropdown-link-active-bg;
+ }
+}
+
+// Disabled state
+//
+// Gray out text and ensure the hover/focus state remains gray
+
+.dropdown-menu > .disabled > a {
+ &,
+ &:hover,
+ &:focus {
+ color: $dropdown-link-disabled-color;
+ }
+
+ // Nuke hover/focus effects
+ &:hover,
+ &:focus {
+ text-decoration: none;
+ background-color: transparent;
+ background-image: none; // Remove CSS gradient
+ @include reset-filter;
+ cursor: $cursor-disabled;
+ }
+}
+
+// Open state for the dropdown
+.open {
+ // Show the menu
+ > .dropdown-menu {
+ display: block;
+ }
+
+ // Remove the outline when :focus is triggered
+ > a {
+ outline: 0;
+ }
+}
+
+// Menu positioning
+//
+// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown
+// menu with the parent.
+.dropdown-menu-right {
+ left: auto; // Reset the default from `.dropdown-menu`
+ right: 0;
+}
+// With v3, we enabled auto-flipping if you have a dropdown within a right
+// aligned nav component. To enable the undoing of that, we provide an override
+// to restore the default dropdown menu alignment.
+//
+// This is only for left-aligning a dropdown menu within a `.navbar-right` or
+// `.pull-right` nav component.
+.dropdown-menu-left {
+ left: 0;
+ right: auto;
+}
+
+// Dropdown section headers
+.dropdown-header {
+ display: block;
+ padding: 3px 20px;
+ font-size: $font-size-small;
+ line-height: $line-height-base;
+ color: $dropdown-header-color;
+ white-space: nowrap; // as with > li > a
+}
+
+// Backdrop to catch body clicks on mobile, etc.
+.dropdown-backdrop {
+ position: fixed;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ top: 0;
+ z-index: ($zindex-dropdown - 10);
+}
+
+// Right aligned dropdowns
+.pull-right > .dropdown-menu {
+ right: 0;
+ left: auto;
+}
+
+// Allow for dropdowns to go bottom up (aka, dropup-menu)
+//
+// Just add .dropup after the standard .dropdown class and you're set, bro.
+// TODO: abstract this so that the navbar fixed styles are not placed here?
+
+.dropup,
+.navbar-fixed-bottom .dropdown {
+ // Reverse the caret
+ .caret {
+ border-top: 0;
+ border-bottom: $caret-width-base dashed;
+ border-bottom: $caret-width-base solid \9; // IE8
+ content: "";
+ }
+ // Different positioning for bottom up menu
+ .dropdown-menu {
+ top: auto;
+ bottom: 100%;
+ margin-bottom: 2px;
+ }
+}
+
+
+// Component alignment
+//
+// Reiterate per navbar.less and the modified component alignment there.
+
+@media (min-width: $grid-float-breakpoint) {
+ .navbar-right {
+ .dropdown-menu {
+ right: 0; left: auto;
+ }
+ // Necessary for overrides of the default right aligned menu.
+ // Will remove come v4 in all likelihood.
+ .dropdown-menu-left {
+ left: 0; right: auto;
+ }
+ }
+}
diff --git a/web/themes/custom/proj_me_theme/bootstrap/assets/stylesheets/bootstrap/_forms.scss b/web/themes/custom/proj_me_theme/bootstrap/assets/stylesheets/bootstrap/_forms.scss
new file mode 100644
index 00000000..ac26a6ad
--- /dev/null
+++ b/web/themes/custom/proj_me_theme/bootstrap/assets/stylesheets/bootstrap/_forms.scss
@@ -0,0 +1,617 @@
+//
+// Forms
+// --------------------------------------------------
+
+
+// Normalize non-controls
+//
+// Restyle and baseline non-control form elements.
+
+fieldset {
+ padding: 0;
+ margin: 0;
+ border: 0;
+ // Chrome and Firefox set a `min-width: min-content;` on fieldsets,
+ // so we reset that to ensure it behaves more like a standard block element.
+ // See https://github.com/twbs/bootstrap/issues/12359.
+ min-width: 0;
+}
+
+legend {
+ display: block;
+ width: 100%;
+ padding: 0;
+ margin-bottom: $line-height-computed;
+ font-size: ($font-size-base * 1.5);
+ line-height: inherit;
+ color: $legend-color;
+ border: 0;
+ border-bottom: 1px solid $legend-border-color;
+}
+
+label {
+ display: inline-block;
+ max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)
+ margin-bottom: 5px;
+ font-weight: bold;
+}
+
+
+// Normalize form controls
+//
+// While most of our form styles require extra classes, some basic normalization
+// is required to ensure optimum display with or without those classes to better
+// address browser inconsistencies.
+
+// Override content-box in Normalize (* isn't specific enough)
+input[type="search"] {
+ @include box-sizing(border-box);
+}
+
+// Position radios and checkboxes better
+input[type="radio"],
+input[type="checkbox"] {
+ margin: 4px 0 0;
+ margin-top: 1px \9; // IE8-9
+ line-height: normal;
+}
+
+input[type="file"] {
+ display: block;
+}
+
+// Make range inputs behave like textual form controls
+input[type="range"] {
+ display: block;
+ width: 100%;
+}
+
+// Make multiple select elements height not fixed
+select[multiple],
+select[size] {
+ height: auto;
+}
+
+// Focus for file, radio, and checkbox
+input[type="file"]:focus,
+input[type="radio"]:focus,
+input[type="checkbox"]:focus {
+ @include tab-focus;
+}
+
+// Adjust output element
+output {
+ display: block;
+ padding-top: ($padding-base-vertical + 1);
+ font-size: $font-size-base;
+ line-height: $line-height-base;
+ color: $input-color;
+}
+
+
+// Common form controls
+//
+// Shared size and type resets for form controls. Apply `.form-control` to any
+// of the following form controls:
+//
+// select
+// textarea
+// input[type="text"]
+// input[type="password"]
+// input[type="datetime"]
+// input[type="datetime-local"]
+// input[type="date"]
+// input[type="month"]
+// input[type="time"]
+// input[type="week"]
+// input[type="number"]
+// input[type="email"]
+// input[type="url"]
+// input[type="search"]
+// input[type="tel"]
+// input[type="color"]
+
+.form-control {
+ display: block;
+ width: 100%;
+ height: $input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)
+ padding: $padding-base-vertical $padding-base-horizontal;
+ font-size: $font-size-base;
+ line-height: $line-height-base;
+ color: $input-color;
+ background-color: $input-bg;
+ background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214
+ border: 1px solid $input-border;
+ border-radius: $input-border-radius; // Note: This has no effect on