diff --git a/js/lang_dropdown.js b/js/lang_dropdown.js
index e66cae2..311c4a6 100644
--- a/js/lang_dropdown.js
+++ b/js/lang_dropdown.js
@@ -6,22 +6,22 @@ Drupal.behaviors.lang_dropdown = {
if (settings.lang_dropdown) {
var flags, msddSettings;
for (key in settings.lang_dropdown) {
- msddSettings = settings.lang_dropdown[key].jsWidget;
+ msddSettings = settings.lang_dropdown[key];
flags = msddSettings.languageicons;
if (flags) {
$.each(flags, function(index, value) {
if (msddSettings.widget == "msdropdown") {
- $('select#lang-dropdown-select-' + key + ' option[value="' + index + '"]').attr('data-image', value);
+ $('select#lang-dropdown-select-' + msddSettings.key + ' option[value="' + index + '"]').attr('data-image', value);
}
else if (msddSettings.widget == "ddslick" && Boolean(msddSettings.showSelectedHTML)) {
- $('select#lang-dropdown-select-' + key + ' option[value="' + index + '"]').attr('data-imagesrc', value);
+ $('select#lang-dropdown-select-' + msddSettings.key + ' option[value="' + index + '"]').attr('data-imagesrc', value);
}
});
}
if (msddSettings.widget == "msdropdown") {
try {
- $('select#lang-dropdown-select-' + key).msDropDown({
+ $('select#lang-dropdown-select-' + msddSettings.key).msDropDown({
visibleRows: msddSettings.visibleRows,
roundedCorner: Boolean(msddSettings.roundedCorner),
animStyle: msddSettings.animStyle,
@@ -34,14 +34,14 @@ Drupal.behaviors.lang_dropdown = {
}
}
else if (msddSettings.widget == "chosen") {
- $('select#lang-dropdown-select-' + key).chosen({
+ $('select#lang-dropdown-select-' + msddSettings.key).chosen({
disable_search: msddSettings.disable_search,
no_results_text: msddSettings.no_results_text
});
}
else if (msddSettings.widget == "ddslick") {
$.data(document.body, 'ddslick'+key+'flag', 0);
- $('select#lang-dropdown-select-' + key).ddslick({
+ $('select#lang-dropdown-select-' + msddSettings.key).ddslick({
width: msddSettings.width,
height: (msddSettings.height == 0) ? null : msddSettings.height,
showSelectedHTML: Boolean(msddSettings.showSelectedHTML),
@@ -51,7 +51,7 @@ Drupal.behaviors.lang_dropdown = {
if (i) {
$.data(document.body, 'ddslick'+key+'flag', 0);
var lang = data.selectedData.value;
- var href = $('#lang-dropdown-select-'+key).parents('form').find('input[name="' + lang + '"]').val();
+ var href = $('#lang-dropdown-select-' + msddSettings.key).parents('form').find('input[name="' + lang + '"]').val();
window.location.href = href;
}
$.data(document.body, 'ddslick'+key+'flag', 1);
diff --git a/lang_dropdown.libraries.yml b/lang_dropdown.libraries.yml
index 9b4d2be..45e520e 100644
--- a/lang_dropdown.libraries.yml
+++ b/lang_dropdown.libraries.yml
@@ -15,10 +15,10 @@ ms-dropdown:
title: 'Marghoob Suleman Dropdown jquery library'
website: 'https://github.com/marghoobsuleman/ms-Dropdown'
js:
- /sites/all/libraries/ms-Dropdown/js/msdropdown/jquery.dd.min.js: {}
+ /libraries/ms-Dropdown/js/msdropdown/jquery.dd.min.js: {}
css:
component:
- /sites/all/libraries/ms-Dropdown/css/msdropdown/dd.css: {}
+ /libraries/ms-Dropdown/css/msdropdown/dd.css: {}
dependencies:
- core/jquery
@@ -27,10 +27,10 @@ chosen:
title: 'Chosen'
website: http://harvesthq.github.com/chosen
js:
- /sites/all/libraries/chosen/chosen.jquery.min.js: {}
+ /libraries/chosen/chosen.jquery.min.js: {}
css:
component:
- /sites/all/libraries/chosen/chosen.css: {}
+ /libraries/chosen/chosen.css: {}
dependencies:
- core/jquery
@@ -39,6 +39,97 @@ ddslick:
title: ddSlick
website: http://designwithpc.com/Plugins/ddSlick
js:
- /sites/all/libraries/ddslick/jquery.ddslick.min.js: {}
+ /libraries/ddslick/jquery.ddslick.min.js: {}
dependencies:
- core/jquery
+
+#skins
+ldsSkin:
+ version: 1.x
+ css:
+ theme:
+ css/msdropdown/ldsSkin.css: {}
+
+ldsSkinAfter:
+ version: 1.x
+ css:
+ theme:
+ css/msdropdown/ldsSkin.css: {}
+
+ldsSkinNoIcon:
+ version: 1.x
+ css:
+ theme:
+ css/msdropdown/ldsSkin.css: {}
+
+ldsSkinNoLabel:
+ version: 1.x
+ css:
+ theme:
+ css/msdropdown/ldsSkin.css: {}
+
+ldsDark:
+ version: 1.x
+ css:
+ theme:
+ css/msdropdown/ldsDark.css: {}
+
+ldsDarkAfter:
+ version: 1.x
+ css:
+ theme:
+ css/msdropdown/ldsDark.css: {}
+
+ldsDarkNoIcon:
+ version: 1.x
+ css:
+ theme:
+ css/msdropdown/ldsDark.css: {}
+
+ldsDarkNoLabel:
+ version: 1.x
+ css:
+ theme:
+ css/msdropdown/ldsDark.css: {}
+
+ldsBlue:
+ version: 1.x
+ css:
+ theme:
+ css/msdropdown/ldsBlue.css: {}
+
+ldsBlueAfter:
+ version: 1.x
+ css:
+ theme:
+ css/msdropdown/ldsBlue.css: {}
+
+ldsBlueNoIcon:
+ version: 1.x
+ css:
+ theme:
+ css/msdropdown/ldsBlue.css: {}
+
+ldsBlueNoLabel:
+ version: 1.x
+ css:
+ theme:
+ css/msdropdown/ldsBlue.css: {}
+
+ddsDefault:
+ version: 1.x
+ css:
+ theme:
+ css/ddslick/ddsDefault.css: {}
+
+ddsDark:
+ version: 1.x
+ css:
+ theme:
+ css/ddslick/ddsDark.css: {}
+
+ddsBlue:
+ version: 1.x
+ css:
+ theme:
+ css/ddslick/ddsBlue.css: {}
diff --git a/lang_dropdown.module b/lang_dropdown.module
index 6cfebf4..5cb3e22 100644
--- a/lang_dropdown.module
+++ b/lang_dropdown.module
@@ -68,7 +68,6 @@ function lang_dropdown_help($path, $arg) {
}
}
-
/**
* Helper function to handle msdropdown skins data
*/
@@ -168,63 +167,3 @@ function _lang_dropdown_get_ddslick_skins() {
),
);
}
-
-/**
- * Get the location of the msdropdown library.
- *
- * @return
- * The location of the library, or FALSE if the library isn't installed.
- */
-function _lang_dropdown_get_msdropdown_path() {
- $path = FALSE;
- if (function_exists('libraries_get_path') && libraries_get_path('msdropdown')) {
- $path = libraries_get_path('msdropdown');
- if (!file_exists($path)) {
- $path = FALSE;
- }
- }
- elseif (file_exists('sites/all/libraries/ms-Dropdown/js/msdropdown/jquery.dd.min.js')) {
- $path = 'sites/all/libraries/ms-Dropdown';
- }
- return $path;
-}
-
-/**
- * Get the location of the chosen library.
- *
- * @return
- * The location of the library, or FALSE if the library isn't installed.
- */
-function _lang_dropdown_get_chosen_path() {
- $path = FALSE;
- if (function_exists('libraries_get_path') && libraries_get_path('chosen')) {
- $path = libraries_get_path('chosen');
- if (!file_exists($path)) {
- $path = FALSE;
- }
- }
- elseif (file_exists('sites/all/libraries/chosen/chosen.jquery.min.js')) {
- $path = 'sites/all/libraries/chosen';
- }
- return $path;
-}
-
-/**
- * Get the location of the ddslick library.
- *
- * @return
- * The location of the library, or FALSE if the library isn't installed.
- */
-function _lang_dropdown_get_ddslick_path() {
- $path = FALSE;
- if (function_exists('libraries_get_path') && libraries_get_path('ddslick')) {
- $path = libraries_get_path('ddslick');
- if (!file_exists($path)) {
- $path = FALSE;
- }
- }
- elseif (file_exists('sites/all/libraries/ddslick/jquery.ddslick.min.js')) {
- $path = 'sites/all/libraries/ddslick';
- }
- return $path;
-}
diff --git a/src/Form/LanguageDropdownForm.php b/src/Form/LanguageDropdownForm.php
index b273fbd..d87bfaa 100755
--- a/src/Form/LanguageDropdownForm.php
+++ b/src/Form/LanguageDropdownForm.php
@@ -54,7 +54,11 @@ class LanguageDropdownForm extends FormBase {
$unique_id = uniqid();
- $options = $js_settings = $hidden_elements = array();
+ $options = $hidden_elements = array();
+ $js_settings = array(
+ 'key' => $unique_id,
+ );
+
$selected_option_language_icon = $language_selected = $language_session_selected = '';
$form['lang_dropdown_type'] = array(
@@ -78,7 +82,7 @@ class LanguageDropdownForm extends FormBase {
foreach ($this->languages as $lang_code => $lang_options) {
// The language is not enabled on this domain
- if ($domain_locale_exists && !array_key_exists($lang_code, $domain_languages)) continue;
+ //if ($domain_locale_exists && !array_key_exists($lang_code, $domain_languages)) continue;
// There is no translation for this language and not all languages are shown
if (in_array('locale-untranslated', $lang_options['attributes']['class']) && !$this->settings['showall']) continue;
@@ -87,10 +91,10 @@ class LanguageDropdownForm extends FormBase {
switch ($this->settings['display']) {
case LANGDROPDOWN_DISPLAY_TRANSLATED:
default:
- $options += array($lang_code => $this->t($language_objects[$lang_code]->getName()));
+ $options += array($lang_code => $this->t($lang_options['language']->getName()));
break;
case LANGDROPDOWN_DISPLAY_NATIVE:
- $options += array($lang_code => $lang_options['title']);
+ $options += array($lang_code => $lang_options['language']->getName());
break;
case LANGDROPDOWN_DISPLAY_LANGCODE:
$options += array($lang_code => $lang_code);
@@ -132,7 +136,6 @@ class LanguageDropdownForm extends FormBase {
$languageicons_path = $languageicons_config->get('path');
$js_settings['languageicons'][$lang_code] = file_create_url(str_replace('*', $lang_code, $languageicons_path));
}
-
}
// If session-active is set that's the selected language otherwise rely on $language_selected
@@ -149,8 +152,6 @@ class LanguageDropdownForm extends FormBase {
// Add required files and settings for JS widget.
if ($this->settings['widget'] == LANGDROPDOWN_MSDROPDOWN) {
- $form['#attached']['library'][] = 'lang_dropdown/msdropdown';
-
$js_settings += array(
'widget' => 'msdropdown',
'visibleRows' => $this->settings['msdropdown']['visible_rows'],
@@ -162,51 +163,34 @@ class LanguageDropdownForm extends FormBase {
$selected_skin = $this->settings['msdropdown']['skin'];
if ($selected_skin == 'custom') {
$custom_skin = Html::escape($this->settings['msdropdown']['custom_skin']);
- drupal_add_css(_lang_dropdown_get_msdropdown_path() . '/css/msdropdown/' . $custom_skin . '.css');
+ $form['#attached']['library'][] = 'ms-dropdown';
$js_settings += array(
'mainCSS' => $custom_skin,
);
} else {
$skins = _lang_dropdown_get_msdropdown_skins();
$skin_data = $skins[$selected_skin];
- drupal_add_css($skin_data['file']);
+ $form['#attached']['library'][] = 'lang_dropdown/' . $selected_skin;
$js_settings += array(
'mainCSS' => $skin_data['mainCSS'],
);
}
-
- drupal_add_js(array('lang_dropdown' => array( $unique_id => array('jsWidget' => $js_settings))), 'setting');
-
+ $form['#attached']['library'][] = 'lang_dropdown/ms-dropdown';
+ $form['#attached']['drupalSettings']['lang_dropdown']['ms-dropdown'] = $js_settings;
}
else if ($this->settings['widget'] == LANGDROPDOWN_CHOSEN) {
-
- drupal_add_library('lang_dropdown', 'chosen');
-
$js_settings += array(
'widget' => 'chosen',
'disable_search' => $this->settings['chosen']['disable_search'],
'no_results_text' => $this->settings['chosen']['no_results_text'],
);
- drupal_add_js(array('lang_dropdown' => array( $unique_id => array('jsWidget' => $js_settings))), 'setting');
-
+ $form['#attached']['library'][] = 'lang_dropdown/chosen';
+ $form['#attached']['drupalSettings']['lang_dropdown']['chosen'] = $js_settings;
}
else if ($this->settings['widget'] == LANGDROPDOWN_DDSLICK) {
-
- drupal_add_library('lang_dropdown', 'ddslick');
-
+ $form['#attached']['library'][] = 'lang_dropdown/ddslick';
$selected_skin = $this->settings['ddslick']['skin'];
- if ($selected_skin == 'custom') {
- $custom_skin = check_plain($this->settings['ddslick']['custom_skin']);
- drupal_add_css(_lang_dropdown_get_ddslick_path() . '/' . $custom_skin . '.css');
- $ddsSkin = $custom_skin;
- } else {
- $skins = _lang_dropdown_get_ddslick_skins();
- $skin_data = $skins[$selected_skin];
- drupal_add_css($skin_data['file']);
- $ddsSkin = $selected_skin;
- }
-
$js_settings += array(
'widget' => 'ddslick',
'width' => $this->settings['width'],
@@ -214,12 +198,13 @@ class LanguageDropdownForm extends FormBase {
'showSelectedHTML' => $this->settings['ddslick']['showSelectedHTML'],
'imagePosition' => $this->settings['ddslick']['imagePosition'],
);
-
- drupal_add_js(array('lang_dropdown' => array( $unique_id => array('jsWidget' => $js_settings))), 'setting');
-
+ $form['#attributes']['class'][] = ($selected_skin == 'custom') ?
+ Html::escape($this->settings['ddslick']['custom_skin']) : $selected_skin;
+ $form['#attached']['library'][] = 'lang_dropdown/' . $selected_skin;
+ $form['#attached']['drupalSettings']['lang_dropdown']['ddslick'] = $js_settings;
}
- ($this->settings['languageicons']['flag_position']) ? $flag_position = '#suffix' : $flag_position = '#prefix';
+ $flag_position = ($this->settings['languageicons']['flag_position']) ? '#suffix' : '#prefix';
// Now we build the $form array.
$form['lang_dropdown_select'] = array(
@@ -245,13 +230,8 @@ class LanguageDropdownForm extends FormBase {
$form['lang_dropdown_select'][$flag_position] = $selected_option_language_icon;
}
- $form['#attributes']['class'] = array('lang_dropdown_form', $this->type);
+ $form['#attributes']['class']['lang_dropdown_form'][] = $this->type;
$form['#attributes']['id'] = 'lang_dropdown_form_' . $unique_id;
-
- if ($this->settings['widget'] == LANGDROPDOWN_DDSLICK) {
- $form['#attributes']['class'][] = $ddsSkin;
- }
-
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Go'),
diff --git a/src/Plugin/Block/LanguageDropdownBlock.php b/src/Plugin/Block/LanguageDropdownBlock.php
index c2363f9..ad1a40f 100644
--- a/src/Plugin/Block/LanguageDropdownBlock.php
+++ b/src/Plugin/Block/LanguageDropdownBlock.php
@@ -207,7 +207,8 @@ class LanguageDropdownBlock extends BlockBase implements ContainerFactoryPluginI
$form['lang_dropdown']['msdropdown']['#description'] = $this->t('This looks better with language icons module.', array(':link' => LANGDROPDOWN_LANGUAGEICONS_MOD_URL));
}
- if (_lang_dropdown_get_msdropdown_path()) {
+ $library = \Drupal::service('library.discovery')->getLibraryByName('lang_dropdown', 'ms-dropdown');
+ if (!empty($library)) {
$num_rows = array(2, 3, 4, 5 , 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20);
$form['lang_dropdown']['msdropdown']['visible_rows'] = array(
'#type' => 'select',
@@ -266,7 +267,7 @@ class LanguageDropdownBlock extends BlockBase implements ContainerFactoryPluginI
}
else {
// todo: fix instructions
- $form['lang_dropdown']['msdropdown']['#description'] = $this->t('You need to download the Marghoob Suleman Dropdown JavaScript library and extract the entire contents of the archive into the %path directory on your server.', array(':link' => LANGDROPDOWN_MSDROPDOWN_URL, '%path' => 'sites/all/libraries'));
+ $form['lang_dropdown']['msdropdown']['#description'] = $this->t('You need to download the Marghoob Suleman Dropdown JavaScript library and extract the entire contents of the archive into the %path directory on your server.', array(':link' => LANGDROPDOWN_MSDROPDOWN_URL, '%path' => 'drupal_root/libraries'));
$form['lang_dropdown']['msdropdown']['visible_rows'] = array(
'#type' => 'hidden',
'#value' => $this->configuration['msdropdown']['visible_rows'],
@@ -334,7 +335,8 @@ class LanguageDropdownBlock extends BlockBase implements ContainerFactoryPluginI
),
);
- if (!$this->moduleHandler->moduleExists('chosen') && _lang_dropdown_get_chosen_path()) {
+ $library = \Drupal::service('library.discovery')->getLibraryByName('lang_dropdown', 'chosen');
+ if (!$this->moduleHandler->moduleExists('chosen') && !empty($library)) {
$form['lang_dropdown']['chosen']['disable_search'] = array(
'#type' => 'checkbox',
'#title' => t('Disable search box'),
@@ -366,7 +368,7 @@ class LanguageDropdownBlock extends BlockBase implements ContainerFactoryPluginI
$form['lang_dropdown']['chosen']['#description'] = t('If you are already using the !chosenmod you must just choose to output language dropdown as a simple HTML select and allow Chosen module to turn it into a chosen style select.', array(':link' => LANGDROPDOWN_CHOSEN_MOD_URL));
} else {
// todo: fix instructions
- $form['lang_dropdown']['chosen']['#description'] = t('You need to download the Chosen library and extract the entire contents of the archive into the %path directory on your server.', array(':link' => LANGDROPDOWN_CHOSEN_WEB_URL, '%path' => 'sites/all/libraries'));
+ $form['lang_dropdown']['chosen']['#description'] = t('You need to download the Chosen library and extract the entire contents of the archive into the %path directory on your server.', array(':link' => LANGDROPDOWN_CHOSEN_WEB_URL, '%path' => 'drupal_root/libraries'));
}
}
@@ -381,7 +383,8 @@ class LanguageDropdownBlock extends BlockBase implements ContainerFactoryPluginI
),
);
- if (_lang_dropdown_get_ddslick_path()) {
+ $library = \Drupal::service('library.discovery')->getLibraryByName('lang_dropdown', 'ddslick');
+ if (!empty($library)) {
$form['lang_dropdown']['ddslick']['ddslick_height'] = array(
'#type' => 'number',
'#title' => t('Height'),
@@ -545,38 +548,32 @@ class LanguageDropdownBlock extends BlockBase implements ContainerFactoryPluginI
* Overrides \Drupal\block\BlockBase::blockValidate().
*/
public function blockValidate($form, FormStateInterface $form_state) {
-
$widget = $form_state->getValue('lang_dropdown')['widget'];
switch ($widget) {
-
case LANGDROPDOWN_MSDROPDOWN:
- if (!_lang_dropdown_get_msdropdown_path()) {
- $form_state->setError($form['settings']['lang_dropdown']['widget'], $this->t('You can\'t use Marghoob Suleman Dropdown output. You don\'t have the library installed.', array(':link' => LANGDROPDOWN_MSDROPDOWN_URL)));
+ $library = \Drupal::service('library.discovery')->getLibraryByName('lang_dropdown', 'ms-dropdown');
+ if (empty($library) || (isset($library['js']) && !file_exists($library['js'][0]['data']))) {
+ $form_state->setErrorByName('settings', $this->t('You can\'t use Marghoob Suleman Dropdown output. You don\'t have the library installed.', array(':link' => LANGDROPDOWN_MSDROPDOWN_URL)));
}
break;
case LANGDROPDOWN_CHOSEN:
- if ($this->moduleHandler->moduleExists('chosen')) {
- //$form_state->setError($form['settings']['lang_dropdown']['widget'], $this->t('You can\'t use !chosen output directly on language dropdown switcher. You have !chosenmod installed. Use simple HTML select as output and !chosenmod will render it with the !chosen library.', array('!chosen' => l(t('Chosen'), LANGDROPDOWN_CHOSEN_WEB_URL), '!chosenmod' => l(t('Chosen module'), LANGDROPDOWN_CHOSEN_MOD_URL))));
- }
- else {
- if (!_lang_dropdown_get_chosen_path()) {
- //$form_state->setError($form['settings']['lang_dropdown']['widget'], $this->t('You can\'t use !chosen output. You don\'t have !chosen library installed.', array('!chosen' => l(t('Chosen'), LANGDROPDOWN_CHOSEN_WEB_URL))));
- }
+ $library = \Drupal::service('library.discovery')->getLibraryByName('lang_dropdown', 'chosen');
+ if (empty($library) || (isset($library['js']) && !file_exists($library['js'][0]['data']))) {
+ $form_state->setErrorByName('settings', $this->t('You can\'t use Chosen output. You don\'t have the library installed.', array(':link' => LANGDROPDOWN_CHOSEN_MOD_URL)));
}
break;
case LANGDROPDOWN_DDSLICK:
- if (!_lang_dropdown_get_ddslick_path()) {
- //$form_state->setError($form['settings']['lang_dropdown']['widget'], $this->t('You can\'t use !ddslick output. You don\'t have !ddslick library installed.', array('!ddslick' => l(t('ddSlick'), LANGDROPDOWN_DDSLICK_WEB_URL))));
+ $library = \Drupal::service('library.discovery')->getLibraryByName('lang_dropdown', 'ddslick');
+ if (empty($library) || (isset($library['js']) && !file_exists($library['js'][0]['data']))) {
+ $form_state->setErrorByName('settings', $this->t('You can\'t use ddSlick output. You don\'t have the library installed.', array(':link' => LANGDROPDOWN_DDSLICK_WEB_URL)));
}
break;
-
+
default:
break;
-
}
-
}
/**
@@ -626,19 +623,30 @@ class LanguageDropdownBlock extends BlockBase implements ContainerFactoryPluginI
* {@inheritdoc}
*/
public function build() {
+ $library = array();
+ switch ($this->configuration['widget']) {
+ case LANGDROPDOWN_MSDROPDOWN:
+ $library = \Drupal::service('library.discovery')->getLibraryByName('lang_dropdown', 'ms-dropdown');
+ break;
+
+ case LANGDROPDOWN_CHOSEN:
+ $library = \Drupal::service('library.discovery')->getLibraryByName('lang_dropdown', 'chosen');
+ break;
- // prevent erroneous configuration
- if ($this->configuration['widget'] == LANGDROPDOWN_MSDROPDOWN && !_lang_dropdown_get_msdropdown_path()) { return array(); }
- if ($this->configuration['widget'] == LANGDROPDOWN_CHOSEN && !_lang_dropdown_get_chosen_path()) { return array(); }
- if ($this->configuration['widget'] == LANGDROPDOWN_DDSLICK && !_lang_dropdown_get_ddslick_path()) { return array(); }
+ case LANGDROPDOWN_DDSLICK:
+ $library = \Drupal::service('library.discovery')->getLibraryByName('lang_dropdown', 'ddslick');
+ break;
+ }
+
+ if (empty($library) && ($this->configuration['widget'] != LANGDROPDOWN_SIMPLE_SELECT)) {
+ return array();
+ }
$route = $this->pathMatcher->isFrontPage() ? '' : '';
$url = Url::fromRoute($route);
list(, $type) = explode(':', $this->getPluginId());
$languages = $this->languageManager->getLanguageSwitchLinks($type, $url);
-
$user = \Drupal::currentUser();
-
$roles = $user->getRoles();
foreach ($languages->links as $langcode => $link) {