1
0
mirror of https://github.com/processwire/processwire.git synced 2025-08-20 21:42:23 +02:00

Add PR #244 - remember language tabs focus between requests after a double-click on a language tab

This commit is contained in:
FlipZoomMedia
2022-09-16 11:46:32 -04:00
committed by Ryan Cramer
parent 96848654a4
commit 5fecec74ec
3 changed files with 21 additions and 9 deletions

View File

@@ -24,6 +24,8 @@ function dblclickLanguageTab(e) {
setTimeout(function() { setTimeout(function() {
clickLanguageTabActive = false; clickLanguageTabActive = false;
}, 250); }, 250);
var cfg = ProcessWire.config.LanguageTabs;
jQuery.cookie('langTabsDC', langID + '-' + cfg.requestId);
} }
/** /**
@@ -99,6 +101,12 @@ function setupLanguageTabs($form) {
$links.eq(cfg.activeTab).click(); $links.eq(cfg.activeTab).click();
} }
}); });
var value = jQuery.cookie('langTabsDC'); // DC=DoubleClick
if(value && value.indexOf('-' + cfg.requestId) > 0) {
value = value.split('-'); // i.e. 123-ProcessPageEdit456
$('a.langTab' + value[0], $form).click();
}
} }
/** /**

File diff suppressed because one or more lines are too long

View File

@@ -20,9 +20,9 @@ class LanguageTabs extends WireData implements Module, ConfigurableModule {
public static function getModuleInfo() { public static function getModuleInfo() {
return array( return array(
'title' => 'Languages Support - Tabs', 'title' => 'Languages Support - Tabs',
'version' => 115, 'version' => 116,
'summary' => 'Organizes multi-language fields into tabs for a cleaner easier to use interface.', 'summary' => 'Organizes multi-language fields into tabs for a cleaner easier to use interface.',
'author' => 'adamspruijt, ryan', 'author' => 'adamspruijt, ryan, flipzoom',
'singular' => true, 'singular' => true,
'autoload' => "template=admin", 'autoload' => "template=admin",
'requires' => 'LanguageSupport' 'requires' => 'LanguageSupport'
@@ -74,20 +74,22 @@ class LanguageTabs extends WireData implements Module, ConfigurableModule {
if(!empty($this->settings)) return $this->settings; if(!empty($this->settings)) return $this->settings;
$language = null; $language = null;
$input = $this->wire()->input;
$languages = $this->wire()->languages;
// allow for specifying language in your "edit" page link, from front-end // allow for specifying language in your "edit" page link, from front-end
// so if you want to focus on the Spanish tabs when the user clicks "edit" // so if you want to focus on the Spanish tabs when the user clicks "edit"
// from /es/path/to/page/, then you can by using a page edit link like: // from /es/path/to/page/, then you can by using a page edit link like:
// <a href='{$config->urls->admin}page/edit/?id=$page->id&language=$user->language'>Edit</a> // <a href='{$config->urls->admin}page/edit/?id=$page->id&language=$user->language'>Edit</a>
$id = (int) $this->input->get('language'); $id = (int) $input->get('language');
if($id) $language = $this->languages->get($id); if($id) $language = $languages->get($id);
// if language is not specified as a GET variable, then use the user's language // if language is not specified as a GET variable, then use the user's language
if(!$language || !$language->id) $language = $this->wire()->user->language; if(!$language || !$language->id) $language = $this->wire()->user->language;
// determine the index of the tab for the user's language // determine the index of the tab for the user's language
$activeTab = 0; $activeTab = 0;
foreach($this->wire()->languages as $index => $lang) { foreach($languages as $index => $lang) {
if($lang->id == $language->id) $activeTab = $index; if($lang->id == $language->id) $activeTab = $index;
} }
@@ -105,6 +107,7 @@ class LanguageTabs extends WireData implements Module, ConfigurableModule {
'loadStyles' => true, 'loadStyles' => true,
'loadScripts' => true, 'loadScripts' => true,
'tabField' => $this->get('tabField'), 'tabField' => $this->get('tabField'),
'requestId' => ((string) $this->wire()->process) . (int) $input->get('id'),
); );
$config = $this->wire()->config; $config = $this->wire()->config;
@@ -133,20 +136,21 @@ class LanguageTabs extends WireData implements Module, ConfigurableModule {
$config = $this->wire()->config; $config = $this->wire()->config;
if($settings['jQueryUI']) { if($settings['jQueryUI']) {
$adminTheme = $this->wire('adminTheme'); $adminTheme = $this->wire()->adminTheme;
if($adminTheme) $adminTheme->addBodyClass('LanguageTabsJqueryUI'); if($adminTheme) $adminTheme->addBodyClass('LanguageTabsJqueryUI');
} }
if($settings['loadStyles']) { if($settings['loadStyles']) {
$config->styles->add($config->urls->LanguageTabs . 'LanguageTabs.css'); $config->styles->add($config->urls('LanguageTabs') . 'LanguageTabs.css');
} }
if($settings['loadScripts']) { if($settings['loadScripts']) {
$config->scripts->add($config->urls->LanguageTabs . 'LanguageTabs.js'); $config->scripts->add($config->urls('LanguageTabs') . 'LanguageTabs.js');
} }
/** @var JqueryCore $jQueryCore */ /** @var JqueryCore $jQueryCore */
$jQueryCore = $this->wire()->modules->get('JqueryCore'); $jQueryCore = $this->wire()->modules->get('JqueryCore');
$jQueryCore->use('longclick'); $jQueryCore->use('longclick');
$jQueryCore->use('cookie');
if(strpos($e->return, 'LanguageSupport') === false) return; if(strpos($e->return, 'LanguageSupport') === false) return;