Compare commits
No commits in common. '2.x' and '8.x-1.x' have entirely different histories.
223 changed files with 1335 additions and 4605 deletions
@ -1,26 +0,0 @@
|
||||
name: Mirror and run GitLab CI |
||||
|
||||
on: |
||||
push: |
||||
branches: [2.x] |
||||
tags: '*' |
||||
|
||||
jobs: |
||||
build: |
||||
runs-on: ubuntu-latest |
||||
steps: |
||||
- uses: actions/checkout@v3 |
||||
with: |
||||
fetch-depth: 0 |
||||
- name: Mirror + trigger CI |
||||
uses: SvanBoxel/gitlab-mirror-and-ci-action@master |
||||
with: |
||||
args: "https://git.drupalcode.org/project/islandora" |
||||
env: |
||||
FOLLOW_TAGS: "true" |
||||
FORCE_PUSH: "false" |
||||
GITLAB_HOSTNAME: "git.drupal.org" |
||||
GITLAB_USERNAME: "project_34868_bot" |
||||
GITLAB_PASSWORD: ${{ secrets.GITLAB_PASSWORD }} |
||||
GITLAB_PROJECT_ID: "34868" |
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
@ -1,4 +1,4 @@
|
||||
broker_url: 'tcp://localhost:61613' |
||||
jwt_expiry: '+2 hour' |
||||
delete_media_and_files: TRUE |
||||
gemini_url: '' |
||||
gemini_pseudo_bundles: [] |
||||
|
@ -1,3 +0,0 @@
|
||||
.container .islandora-media-items { |
||||
margin: 0; |
||||
} |
@ -1,5 +0,0 @@
|
||||
islandora: |
||||
version: VERSION |
||||
css: |
||||
theme: |
||||
css/islandora.css: {} |
@ -1,16 +0,0 @@
|
||||
<?php |
||||
|
||||
/** |
||||
* @file |
||||
* Post updates. |
||||
*/ |
||||
|
||||
/** |
||||
* Set default value for delete_media_and_files field in settings. |
||||
*/ |
||||
function islandora_post_update_delete_media_and_files() { |
||||
$config_factory = \Drupal::configFactory(); |
||||
$config = $config_factory->getEditable('islandora.settings'); |
||||
$config->set('delete_media_and_files', TRUE); |
||||
$config->save(TRUE); |
||||
} |
@ -0,0 +1,147 @@
|
||||
//# sourceURL=modules/contrib/islandora/modules/islandora_advanced_search/js/facets/facets-view.ajax.js
|
||||
/** |
||||
* @file |
||||
* Overrides the facets-view-ajax.js behavior from the 'facets' module. |
||||
*/ |
||||
(function ($, Drupal) { |
||||
"use strict"; |
||||
|
||||
// Generate events on push state.
|
||||
(function (history) { |
||||
var pushState = history.pushState; |
||||
history.pushState = function (state, title, url) { |
||||
var ret = pushState.apply(this, arguments); |
||||
var event = new Event("pushstate"); |
||||
window.dispatchEvent(event); |
||||
return ret; |
||||
}; |
||||
})(window.history); |
||||
|
||||
function reload(url) { |
||||
// Update View.
|
||||
if (drupalSettings && drupalSettings.views && drupalSettings.views.ajaxViews) { |
||||
var view_path = drupalSettings.views.ajax_path; |
||||
$.each(drupalSettings.views.ajaxViews, function (views_dom_id) { |
||||
var views_parameters = Drupal.Views.parseQueryString(url); |
||||
var views_arguments = Drupal.Views.parseViewArgs(url, "search"); |
||||
var views_settings = $.extend( |
||||
{}, |
||||
Drupal.views.instances[views_dom_id].settings, |
||||
views_arguments, |
||||
views_parameters |
||||
); |
||||
var views_ajax_settings = |
||||
Drupal.views.instances[views_dom_id].element_settings; |
||||
views_ajax_settings.submit = views_settings; |
||||
views_ajax_settings.url = |
||||
view_path + "?" + $.param(Drupal.Views.parseQueryString(url)); |
||||
Drupal.ajax(views_ajax_settings).execute(); |
||||
}); |
||||
} |
||||
|
||||
// Replace filter, pager, summary, and facet blocks.
|
||||
var blocks = {}; |
||||
$( |
||||
".block[class*='block-plugin-id--islandora-advanced-search-result-pager'], .block[class*='block-plugin-id--views-exposed-filter-block'], .block[class*='block-plugin-id--facet']" |
||||
).each(function () { |
||||
var id = $(this).attr("id"); |
||||
var block_id = id |
||||
.slice("block-".length, id.length) |
||||
.replace(/--.*$/g, "") |
||||
.replace(/-/g, "_"); |
||||
blocks[block_id] = "#" + id; |
||||
}); |
||||
Drupal.ajax({ |
||||
url: Drupal.url("islandora-advanced-search-ajax-blocks"), |
||||
submit: { |
||||
link: url, |
||||
blocks: blocks, |
||||
}, |
||||
}).execute(); |
||||
} |
||||
|
||||
// On location change reload all the blocks / ajax view.
|
||||
window.addEventListener("pushstate", function (e) { |
||||
reload(window.location.href); |
||||
}); |
||||
|
||||
window.addEventListener("popstate", function (e) { |
||||
if (e.state != null) { |
||||
reload(window.location.href); |
||||
} |
||||
}); |
||||
|
||||
/** |
||||
* Push state on form/pager/facet change. |
||||
*/ |
||||
Drupal.behaviors.islandoraAdvancedSearchViewsAjax = { |
||||
attach: function (context, settings) { |
||||
window.historyInitiated = true; |
||||
|
||||
// Remove existing behavior from form.
|
||||
if (settings && settings.views && settings.views.ajaxViews) { |
||||
$.each(settings.views.ajaxViews, function (index, settings) { |
||||
var exposed_form = $( |
||||
"form#views-exposed-form-" + |
||||
settings.view_name.replace(/_/g, "-") + |
||||
"-" + |
||||
settings.view_display_id.replace(/_/g, "-") |
||||
); |
||||
exposed_form |
||||
.once() |
||||
.find("input[type=submit], input[type=image]") |
||||
.not("[data-drupal-selector=edit-reset]") |
||||
.each(function (index) { |
||||
$(this).unbind("click"); |
||||
$(this).click(function (e) { |
||||
// Let ctrl/cmd click open in a new window.
|
||||
if (e.shiftKey || e.ctrlKey || e.metaKey) { |
||||
return; |
||||
} |
||||
e.preventDefault(); |
||||
e.stopPropagation(); |
||||
var href = window.location.href; |
||||
var params = Drupal.Views.parseQueryString(href); |
||||
// Remove the page if set as submitting the form should always take
|
||||
// the user to the first page (facets do the same).
|
||||
delete params.page; |
||||
// Include values from the form in the URL.
|
||||
$.each(exposed_form.serializeArray(), function () { |
||||
params[this.name] = this.value; |
||||
}); |
||||
href = href.split("?")[0] + "?" + $.param(params); |
||||
window.history.pushState(null, document.title, href); |
||||
}); |
||||
}); |
||||
}); |
||||
} |
||||
|
||||
// Attach behavior to pager, summary, facet links.
|
||||
$("[data-drupal-pager-id], [data-drupal-facets-summary-id], [data-drupal-facet-id]") |
||||
.once() |
||||
.find("a:not(.facets-soft-limit-link)") |
||||
.click(function (e) { |
||||
// Let ctrl/cmd click open in a new window.
|
||||
if (e.shiftKey || e.ctrlKey || e.metaKey) { |
||||
return; |
||||
} |
||||
e.preventDefault(); |
||||
window.history.pushState(null, document.title, $(this).attr("href")); |
||||
}); |
||||
|
||||
// Trigger on sort change.
|
||||
$('[data-drupal-pager-id] select[name="order"]') |
||||
.once() |
||||
.change(function () { |
||||
var href = window.location.href; |
||||
var params = Drupal.Views.parseQueryString(href); |
||||
var selection = $(this).val(); |
||||
var option = $('option[value="' + selection + '"]'); |
||||
params.sort_order = option.data("sort_order"); |
||||
params.sort_by = option.data("sort_by"); |
||||
href = href.split("?")[0] + "?" + $.param(params); |
||||
window.history.pushState(null, document.title, href); |
||||
}); |
||||
}, |
||||
}; |
||||
})(jQuery, Drupal); |
@ -0,0 +1,70 @@
|
||||
//# sourceURL=modules/contrib/islandora/modules/islandora_advanced_search/js/facets/soft-limit.js
|
||||
/** |
||||
* @file |
||||
* Overrides the soft-limit.js behavior from the 'facets' module. |
||||
* As when having many facets the original version causes the page to slow down and snap to hidden when rendering. |
||||
*/ |
||||
(function ($) { |
||||
|
||||
'use strict'; |
||||
|
||||
Drupal.behaviors.facetSoftLimit = { |
||||
attach: function (context, settings) { |
||||
if (settings.facets.softLimit !== 'undefined') { |
||||
$.each(settings.facets.softLimit, function (facet, limit) { |
||||
Drupal.facets.applySoftLimit(facet, limit, settings); |
||||
}); |
||||
} |
||||
} |
||||
}; |
||||
|
||||
Drupal.facets = Drupal.facets || {}; |
||||
|
||||
/** |
||||
* Applies the soft limit UI feature to a specific facets list. |
||||
* |
||||
* @param {string} facet |
||||
* The facet id. |
||||
* @param {string} limit |
||||
* The maximum amount of items to show. |
||||
* @param {object} settings |
||||
* Settings. |
||||
*/ |
||||
Drupal.facets.applySoftLimit = function (facet, limit, settings) { |
||||
var zero_based_limit = (limit - 1); |
||||
var facet_id = facet; |
||||
var facetsList = $('ul[data-drupal-facet-id="' + facet_id + '"]'); |
||||
|
||||
// In case of multiple instances of a facet, we need to key them.
|
||||
if (facetsList.length > 1) { |
||||
facetsList.each(function (key, $value) { |
||||
$(this).attr('data-drupal-facet-id', facet_id + '-' + key); |
||||
}); |
||||
} |
||||
|
||||
// Add "Show more" / "Show less" links.
|
||||
facetsList.filter(function () { |
||||
return $(this).next('ul').length == 1; // Has expanding list.
|
||||
}).each(function () { |
||||
var facet = $(this); |
||||
var expand = facet.next('ul'); |
||||
var link = expand.next('a'); |
||||
var showLessLabel = settings.facets.softLimitSettings[facet_id].showLessLabel; |
||||
var showMoreLabel = settings.facets.softLimitSettings[facet_id].showMoreLabel; |
||||
link.text(showMoreLabel) |
||||
.once() |
||||
.on('click', function () { |
||||
if (!expand.is(":visible")) { |
||||
expand.slideDown(); |
||||
$(this).addClass('open').text(showLessLabel); |
||||
} |
||||
else { |
||||
expand.slideUp(); |
||||
$(this).removeClass('open').text(showMoreLabel); |
||||
} |
||||
return false; |
||||
}) |
||||
}); |
||||
}; |
||||
|
||||
})(jQuery); |
@ -1,4 +1,9 @@
|
||||
maxDepth: -1 |
||||
includeSelf: FALSE |
||||
referenceFields: |
||||
- field_member_of |
||||
referenceField: field_member_of |
||||
dependencies: |
||||
module: |
||||
- islandora |
||||
enforced: |
||||
module: |
||||
- islandora_breadcrumbs |
||||
|
@ -1,7 +1,8 @@
|
||||
name: 'Islandora Breadcrumbs' |
||||
type: module |
||||
description: 'Builds breadcrumbs based on field_member_of relationships.' |
||||
core_version_requirement: ^9 || ^10 |
||||
core: 8.x |
||||
core_version_requirement: ^8 || ^9 |
||||
package: Islandora |
||||
dependencies: |
||||
- islandora:islandora |
||||
- drupal:islandora |
||||
|
@ -1,18 +0,0 @@
|
||||
<?php |
||||
|
||||
/** |
||||
* @file |
||||
* Install/update hook implementations. |
||||
*/ |
||||
|
||||
/** |
||||
* Update referenceField config to referenceFields. |
||||
*/ |
||||
function islandora_breadcrumbs_update_8001() { |
||||
$config_factory = \Drupal::configFactory(); |
||||
$config = $config_factory->getEditable('islandora_breadcrumbs.breadcrumbs'); |
||||
$config->set('referenceFields', [$config->get('referenceField')]); |
||||
$config->clear('referenceField'); |
||||
$config->save(); |
||||
return "Updated referenceFields config."; |
||||
} |
@ -1,5 +0,0 @@
|
||||
system.islandora_breadcrumbs_settings: |
||||
title: 'Breadcrumbs Settings' |
||||
parent: system.admin_config_islandora |
||||
route_name: system.islandora_breadcrumbs_settings |
||||
description: 'Configure Islandora breadcrumb settings' |
@ -1,7 +0,0 @@
|
||||
system.islandora_breadcrumbs_settings: |
||||
path: '/admin/config/islandora/breadcrumbs' |
||||
defaults: |
||||
_form: 'Drupal\islandora_breadcrumbs\Form\IslandoraBreadcrumbsSettingsForm' |
||||
_title: 'Islandora Breadcrumbs Settings' |
||||
requirements: |
||||
_permission: 'administer site configuration' |
@ -1,6 +1,6 @@
|
||||
services: |
||||
islandora_breadcrumbs.breadcrumb: |
||||
class: Drupal\islandora_breadcrumbs\IslandoraBreadcrumbBuilder |
||||
arguments: ['@entity_type.manager', '@config.factory', '@islandora.utils'] |
||||
arguments: ['@entity_type.manager', '@config.factory'] |
||||
tags: |
||||
- { name: breadcrumb_builder, priority: 100 } |
||||
|
@ -1,132 +0,0 @@
|
||||
<?php |
||||
|
||||
namespace Drupal\islandora_breadcrumbs\Form; |
||||
|
||||
use Drupal\Core\Form\ConfigFormBase; |
||||
use Drupal\Core\Form\FormStateInterface; |
||||
|
||||
/** |
||||
* Configure islandora_breadcrumbs settings. |
||||
*/ |
||||
class IslandoraBreadcrumbsSettingsForm extends ConfigFormBase { |
||||
|
||||
/** |
||||
* Config settings. |
||||
* |
||||
* @var string |
||||
*/ |
||||
const SETTINGS = 'islandora_breadcrumbs.breadcrumbs'; |
||||
|
||||
/** |
||||
* {@inheritdoc} |
||||
*/ |
||||
public function getFormId() { |
||||
return 'islandora_breadcrumbs_settings'; |
||||
} |
||||
|
||||
/** |
||||
* {@inheritdoc} |
||||
*/ |
||||
protected function getEditableConfigNames() { |
||||
return [ |
||||
static::SETTINGS, |
||||
]; |
||||
} |
||||
|
||||
/** |
||||
* {@inheritdoc} |
||||
*/ |
||||
public function buildForm(array $form, FormStateInterface $form_state) { |
||||
|
||||
$config = $this->config(static::SETTINGS); |
||||
|
||||
$form['maxDepth'] = [ |
||||
'#type' => 'number', |
||||
'#default_value' => $config->get('maxDepth'), |
||||
'#min' => -1, |
||||
'#step' => 1, |
||||
'#title' => $this->t('Maximum number of ancestor breadcrumbs'), |
||||
'#description' => $this->t("Stops adding ancestor references when the chain reaches this number. The count does not include the current node when enabled. The default value, '-1' disables this feature."), |
||||
]; |
||||
|
||||
$form['includeSelf'] = [ |
||||
'#type' => 'checkbox', |
||||
'#title' => $this->t('Include the current node in the breadcrumbs?'), |
||||
'#default_value' => $config->get('includeSelf'), |
||||
]; |
||||
|
||||
// Using the textarea instead of a select so the site maintainer can |
||||
// provide an ordered list of items rather than simply selecting from a |
||||
// list which enforces it's own order. |
||||
$form['referenceFields'] = [ |
||||
'#type' => 'textarea', |
||||
'#title' => $this->t('Entity Reference fields to follow'), |
||||
'#default_value' => implode("\n", $config->get('referenceFields')), |
||||
'#description' => $this->t("Entity Reference field machine names to follow when building the breadcrumbs.<br>One per line.<br>Valid options: @options", |
||||
[ |
||||
"@options" => implode(", ", static::getNodeEntityReferenceFields()), |
||||
] |
||||
), |
||||
'#element_validate' => [[get_class($this), 'validateReferenceFields']], |
||||
|
||||
]; |
||||
|
||||
return parent::buildForm($form, $form_state); |
||||
} |
||||
|
||||
/** |
||||
* Returns a list of node entity reference field machine names. |
||||
* |
||||
* We use this for building the form field description and for |
||||
* validating the reference fields value. |
||||
*/ |
||||
protected static function getNodeEntityReferenceFields() { |
||||
return array_keys(\Drupal::service('entity_field.manager')->getFieldMapByFieldType('entity_reference')['node']); |
||||
} |
||||
|
||||
/** |
||||
* Turns a text area into an array of values. |
||||
* |
||||
* Used for validating the field reference text area |
||||
* and saving the form state. |
||||
*/ |
||||
protected static function textToArray($string) { |
||||
return array_filter(array_map('trim', explode("\n", $string)), 'strlen'); |
||||
} |
||||
|
||||
/** |
||||
* Callback for settings form. |
||||
* |
||||
* @param array $element |
||||
* An associative array containing the properties and children of the |
||||
* generic form element. |
||||
* @param \Drupal\Core\Form\FormStateInterface $form_state |
||||
* The current state of the form for the form this element belongs to. |
||||
* |
||||
* @see \Drupal\Core\Render\Element\FormElement::processPattern() |
||||
*/ |
||||
public static function validateReferenceFields(array $element, FormStateInterface $form_state) { |
||||
|
||||
$valid_fields = static::getNodeEntityReferenceFields(); |
||||
|
||||
foreach (static::textToArray($element['#value']) as $value) { |
||||
if (!in_array($value, $valid_fields)) { |
||||
$form_state->setError($element, t('"@field" is not a valid entity reference field!', ["@field" => $value])); |
||||
} |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* {@inheritdoc} |
||||
*/ |
||||
public function submitForm(array &$form, FormStateInterface $form_state) { |
||||
$this->configFactory->getEditable(static::SETTINGS) |
||||
->set('referenceFields', static::textToArray($form_state->getValue('referenceFields'))) |
||||
->set('maxDepth', $form_state->getValue('maxDepth')) |
||||
->set('includeSelf', $form_state->getValue('includeSelf')) |
||||
->save(); |
||||
|
||||
parent::submitForm($form, $form_state); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,100 @@
|
||||
langcode: en |
||||
status: true |
||||
dependencies: |
||||
enforced: |
||||
module: |
||||
- islandora_core_feature |
||||
name: Islandora |
||||
machine_name: islandora |
||||
description: 'Features for islandora' |
||||
assignments: |
||||
alter: |
||||
core: true |
||||
uuid: true |
||||
user_permissions: true |
||||
enabled: true |
||||
weight: 0 |
||||
base: |
||||
types: |
||||
config: |
||||
comment_type: comment_type |
||||
node_type: node_type |
||||
content: |
||||
user: user |
||||
enabled: true |
||||
weight: -2 |
||||
core: |
||||
types: |
||||
config: |
||||
date_format: date_format |
||||
field_storage_config: field_storage_config |
||||
entity_form_mode: entity_form_mode |
||||
image_style: image_style |
||||
menu: menu |
||||
responsive_image_style: responsive_image_style |
||||
user_role: user_role |
||||
entity_view_mode: entity_view_mode |
||||
enabled: true |
||||
weight: 5 |
||||
dependency: |
||||
enabled: true |
||||
weight: 15 |
||||
exclude: |
||||
types: |
||||
config: |
||||
features_bundle: features_bundle |
||||
curated: true |
||||
module: |
||||
installed: true |
||||
profile: true |
||||
namespace: true |
||||
namespace_any: false |
||||
enabled: true |
||||
weight: -5 |
||||
existing: |
||||
enabled: true |
||||
weight: 12 |
||||
forward_dependency: |
||||
enabled: true |
||||
weight: 4 |
||||
namespace: |
||||
enabled: true |
||||
weight: 0 |
||||
optional: |
||||
types: |
||||
config: { } |
||||
enabled: true |
||||
weight: 0 |
||||
packages: |
||||
enabled: true |
||||
weight: -20 |
||||
profile: |
||||
curated: true |
||||
standard: |
||||
files: true |
||||
dependencies: true |
||||
types: |
||||
config: |
||||
block: block |
||||
language_content_settings: language_content_settings |
||||
configurable_language: configurable_language |
||||
migration: migration |
||||
shortcut_set: shortcut_set |
||||
tour: tour |
||||
enabled: true |
||||
weight: 10 |
||||
site: |
||||
types: |
||||
config: |
||||
action: action |
||||
contact_form: contact_form |
||||
block_content_type: block_content_type |
||||
rdf_mapping: rdf_mapping |
||||
search_page: search_page |
||||
taxonomy_vocabulary: taxonomy_vocabulary |
||||
editor: editor |
||||
filter_format: filter_format |
||||
enabled: true |
||||
weight: 7 |
||||
profile_name: '' |
||||
is_profile: false |
@ -0,0 +1,5 @@
|
||||
algos: |
||||
sha1: sha1 |
||||
md5: '0' |
||||
sha256: '0' |
||||
dedupe: false |
@ -1,24 +0,0 @@
|
||||
algos: |
||||
blake2b_128: '0' |
||||
blake2b_160: '0' |
||||
blake2b_224: '0' |
||||
blake2b_256: '0' |
||||
blake2b_384: '0' |
||||
blake2b_512: '0' |
||||
md5: '0' |
||||
sha1: sha1 |
||||
sha224: '0' |
||||
sha256: '0' |
||||
sha384: '0' |
||||
sha512_224: '0' |
||||
sha512_256: '0' |
||||
sha512: '0' |
||||
sha3_224: '0' |
||||
sha3_256: '0' |
||||
sha3_384: '0' |
||||
sha3_512: '0' |
||||
dedupe: 0 |
||||
rehash: true |
||||
original: true |
||||
dedupe_original: false |
||||
mime_types: { } |
@ -0,0 +1,16 @@
|
||||
bundle: islandora |
||||
excluded: |
||||
- language.content_settings.taxonomy_term.islandora_media_use |
||||
- language.content_settings.taxonomy_term.islandora_models |
||||
required: |
||||
- features.bundle.islandora |
||||
- field.storage.media.field_file_size |
||||
- field.storage.media.field_height |
||||
- field.storage.media.field_media_of |
||||
- field.storage.media.field_media_use |
||||
- field.storage.media.field_mime_type |
||||
- field.storage.media.field_width |
||||
- field.storage.node.field_member_of |
||||
- field.storage.node.field_model |
||||
- field.storage.node.field_weight |
||||
- field.storage.taxonomy_term.field_external_uri |
@ -1,20 +0,0 @@
|
||||
<?php |
||||
|
||||
/** |
||||
* @file |
||||
* Post-update hooks. |
||||
*/ |
||||
|
||||
/** |
||||
* Add index to field_weight. |
||||
*/ |
||||
function islandora_core_feature_post_update_add_index_to_field_weight() { |
||||
$storage = \Drupal::entityTypeManager()->getStorage('field_storage_config'); |
||||
$field = $storage->load('node.field_weight'); |
||||
$indexes = $field->getIndexes(); |
||||
$indexes += [ |
||||
'value' => ['value'], |
||||
]; |
||||
$field->setIndexes($indexes); |
||||
$field->save(); |
||||
} |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue