Skip to content

Commit

Permalink
GH-47: Add config option to open indivdual page in new browser window…
Browse files Browse the repository at this point in the history
…/tab or not
  • Loading branch information
magicsunday committed Dec 28, 2023
1 parent 48a815f commit fe9e7a0
Show file tree
Hide file tree
Showing 11 changed files with 87 additions and 24 deletions.
2 changes: 1 addition & 1 deletion resources/js/descendants-chart.min.js

Large diffs are not rendered by default.

14 changes: 14 additions & 0 deletions resources/js/modules/custom/configuration.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,20 +23,24 @@ export default class Configuration
* @param {String[]} labels
* @param {Number} generations
* @param {String} treeLayout
* @param {Boolean} openNewTabOnIndividualClick
* @param {Boolean} rtl
* @param {Number} direction
*/
constructor(
labels,
generations = 4,
treeLayout = LAYOUT_LEFTRIGHT,
openNewTabOnIndividualClick = true,
rtl = false,
direction = 1
) {
// The layout/orientation of the tree
this._treeLayout = treeLayout;
this._orientations = new OrientationCollection();

this._openNewTabOnIndividualClick = openNewTabOnIndividualClick;

//
this.duration = 750;

Expand Down Expand Up @@ -112,4 +116,14 @@ export default class Configuration
{
return this._orientations.get()[this.treeLayout];
}

/**
* Returns TRUE or FALSE depending on whether to open the current individual's details page in a new tab.
*
* @returns {Boolean}
*/
get openNewTabOnIndividualClick()
{
return this._openNewTabOnIndividualClick;
}
}
2 changes: 2 additions & 0 deletions resources/js/modules/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ export class DescendantsChart
* @param {Boolean} options.rtl
* @param {Number} options.generations
* @param {String} options.treeLayout
* @param {Boolean} options.openNewTabOnIndividualClick
* @param {String[]} options.cssFiles
* @param {Data[]} options.data
*/
Expand All @@ -41,6 +42,7 @@ export class DescendantsChart
options.labels,
options.generations,
options.treeLayout,
options.openNewTabOnIndividualClick,
options.rtl
);

Expand Down
4 changes: 3 additions & 1 deletion resources/js/modules/lib/chart.js
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,9 @@ export default class Chart
*/
redirectToIndividual(url)
{
window.open(url, "_blank");
this._configuration.openNewTabOnIndividualClick
? window.open(url, "_blank")
: window.location = url;
}

/**
Expand Down
4 changes: 4 additions & 0 deletions resources/views/modules/descendants-chart/chart.phtml
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,10 @@ new WebtreesDescendantsChart.DescendantsChart(
return treeLayout ?? <?= json_encode($configuration->getLayout()) ?>;
},

get openNewTabOnIndividualClick() {
return openNewTabOnIndividualClick ?? <?= json_encode($configuration->getOpenNewTabOnIndividualClick()) ?>;
},

data: <?= json_encode($data) ?>
}
);
Expand Down
1 change: 0 additions & 1 deletion resources/views/modules/descendants-chart/config.phtml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@ use MagicSunday\Webtrees\DescendantsChart\Configuration;
<div class="mb-3">
<?= view($moduleName . '::modules/descendants-chart/form/orientation', ['configuration' => $configuration]) ?>
</div>

<div class="mb-3">
<?= view($moduleName . '::modules/descendants-chart/form/layout', ['configuration' => $configuration, 'moduleName' => $moduleName]) ?>
</div>
Expand Down
14 changes: 14 additions & 0 deletions resources/views/modules/descendants-chart/form/layout.phtml
Original file line number Diff line number Diff line change
Expand Up @@ -45,5 +45,19 @@ use MagicSunday\Webtrees\DescendantsChart\Configuration;
<?= I18N::translate('Shows the married name of the partner if this has a separate name entry of the type "MARRIED" or "_MARNM".') ?>
</small>
</div>

<div class="mt-3 form-element-with-description">
<?=
view($moduleName . '::modules/components/checkbox', [
'name' => 'openNewTabOnIndividualClick',
'label' => I18N::translate('Open individual in new browser window/tab'),
'checked' => $configuration->getOpenNewTabOnIndividualClick(),
'unchecked' => '0',
])
?>
<small class="form-text text-muted">
<?= I18N::translate('Open the current individual\'s detail page in a new browser window/tab when it\'s left-clicked, otherwise the current window/tab is used.') ?>
</small>
</div>
</div>
</div>
8 changes: 5 additions & 3 deletions resources/views/modules/descendants-chart/page.phtml
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,7 @@ storage.register("generations");
storage.register("layout");
storage.register("hideSpouses");
storage.register("showMarriedNames");
storage.register("openNewTabOnIndividualClick");

// Handle option toggle button
toggleMoreOptions(storage);
Expand All @@ -176,9 +177,10 @@ toggleMoreOptions(storage);
let formElements = document.getElementById("webtrees-descendants-chart-form").elements;
formElements.namedItem("layout").value = storage.read("layout");

const generations = parseInt(storage.read("generations"));
const treeLayout = storage.read("layout");
const ajaxUrl = getUrl(<?= json_encode($ajaxUrl) ?>, storage.read("generations"));
const generations = parseInt(storage.read("generations"));
const treeLayout = storage.read("layout");
const openNewTabOnIndividualClick = storage.read("openNewTabOnIndividualClick");
const ajaxUrl = getUrl(<?= json_encode($ajaxUrl) ?>, storage.read("generations"));

document.getElementById("descendants-chart-url")
.setAttribute('data-wt-ajax-url', ajaxUrl);
Expand Down
29 changes: 26 additions & 3 deletions src/Configuration.php
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ public function getLayout(): string
->string(
'layout',
$this->module->getPreference(
'default_tree_layout',
'default_layout',
self::DEFAULT_TREE_LAYOUT
)
);
Expand Down Expand Up @@ -199,7 +199,7 @@ public function getHideSpouses(): bool
->boolean(
'hideSpouses',
(bool) $this->module->getPreference(
'default_hide_spouses',
'default_hideSpouses',
'0'
)
);
Expand All @@ -222,9 +222,32 @@ public function getShowMarriedNames(): bool
->boolean(
'showMarriedNames',
(bool) $this->module->getPreference(
'default_show_married_names',
'default_showMarriedNames',
'0'
)
);
}

/**
* Returns whether to open a new browser window/tab on left-click on an individual or not.
*
* @return bool
*/
public function getOpenNewTabOnIndividualClick(): bool
{
if ($this->request->getMethod() === RequestMethodInterface::METHOD_POST) {
$validator = Validator::parsedBody($this->request);
} else {
$validator = Validator::queryParams($this->request);
}

return $validator
->boolean(
'openNewTabOnIndividualClick',
(bool) $this->module->getPreference(
'default_openNewTabOnIndividualClick',
'1'
)
);
}
}
26 changes: 14 additions & 12 deletions src/Module.php
Original file line number Diff line number Diff line change
Expand Up @@ -166,12 +166,13 @@ public function handle(ServerRequestInterface $request): ResponseInterface
route(
self::ROUTE_DEFAULT,
[
'tree' => $tree->name(),
'xref' => $validator->string('xref', ''),
'generations' => $validator->integer('generations', 4),
'hideSpouses' => $validator->boolean('hideSpouses', false),
'showMarriedNames' => $validator->boolean('showMarriedNames', false),
'layout' => $validator->string('layout', Configuration::LAYOUT_LEFTRIGHT),
'tree' => $tree->name(),
'xref' => $validator->string('xref', ''),
'generations' => $validator->integer('generations', 4),
'hideSpouses' => $validator->boolean('hideSpouses', false),
'showMarriedNames' => $validator->boolean('showMarriedNames', false),
'openNewTabOnIndividualClick' => $validator->boolean('openNewTabOnIndividualClick', true),
'layout' => $validator->string('layout', Configuration::LAYOUT_LEFTRIGHT),
]
)
);
Expand Down Expand Up @@ -267,12 +268,13 @@ private function getAjaxRoute(Individual $individual, string $xref): string
return $this->chartUrl(
$individual,
[
'ajax' => true,
'generations' => $this->configuration->getGenerations(),
'hideSpouses' => $this->configuration->getHideSpouses(),
'showMarriedNames' => $this->configuration->getShowMarriedNames(),
'layout' => $this->configuration->getLayout(),
'xref' => $xref,
'ajax' => true,
'generations' => $this->configuration->getGenerations(),
'hideSpouses' => $this->configuration->getHideSpouses(),
'showMarriedNames' => $this->configuration->getShowMarriedNames(),
'openNewTabOnIndividualClick' => $this->configuration->getOpenNewTabOnIndividualClick(),
'layout' => $this->configuration->getLayout(),
'xref' => $xref,
]
);
}
Expand Down
7 changes: 4 additions & 3 deletions src/Traits/ModuleConfigTrait.php
Original file line number Diff line number Diff line change
Expand Up @@ -58,9 +58,10 @@ public function postAdminAction(ServerRequestInterface $request): ResponseInterf
$configuration = new Configuration($request, $this);

$this->setPreference('default_generations', (string) $configuration->getGenerations());
$this->setPreference('default_tree_layout', $configuration->getLayout());
$this->setPreference('default_hide_spouses', (string) $configuration->getHideSpouses());
$this->setPreference('default_show_married_names', (string) $configuration->getShowMarriedNames());
$this->setPreference('default_layout', $configuration->getLayout());
$this->setPreference('default_hideSpouses', (string) $configuration->getHideSpouses());
$this->setPreference('default_showMarriedNames', (string) $configuration->getShowMarriedNames());
$this->setPreference('default_openNewTabOnIndividualClick', (string) $configuration->getOpenNewTabOnIndividualClick());

FlashMessages::addMessage(
I18N::translate(
Expand Down

0 comments on commit fe9e7a0

Please sign in to comment.