Improve mode detection for relations by using an event target

This commit is contained in:
Samuel Georges 2015-02-28 19:33:11 +11:00
parent 165d2f86e0
commit e48963b1e9
9 changed files with 82 additions and 32 deletions

View File

@ -10,6 +10,7 @@
* - data-handler="widget:pluginName" - October ajax request name
* - data-keyboard="false" - Allow popup to be closed with the keyboard
* - data-request-data="file_id: 1" - October ajax request data
* - data-size="large" - Popup size, available sizes: giant, huge, large, small, tiny
*
* JavaScript API:
* $('a#someLink').popup({ ajax: 'popup-content.htm' })

View File

@ -132,6 +132,11 @@ class RelationController extends ControllerBehavior
*/
protected $manageMode;
/**
* @var string The target that triggered an AJAX event (button, list)
*/
protected $eventTarget;
/**
* @var int Primary id of an existing relation record.
*/
@ -307,22 +312,29 @@ class RelationController extends ControllerBehavior
return $mode;
}
switch ($this->eventTarget) {
case 'button-create':
case 'button-update':
return 'form';
case 'button-link':
return 'list';
}
switch ($this->relationType) {
case 'belongsTo':
$mode = 'list';
break;
return 'list';
case 'belongsToMany':
$mode = (isset($this->config->pivot)) ? 'pivot' : 'list';
break;
if (isset($this->config->pivot)) return 'pivot';
elseif ($this->eventTarget == 'list') return 'form';
else return 'list';
case 'hasOne':
case 'hasMany':
$mode = 'form';
break;
if ($this->eventTarget == 'button-add') return 'list';
else return 'form';
}
return $mode;
}
/**
@ -533,13 +545,13 @@ class RelationController extends ControllerBehavior
public function onRelationButtonAdd()
{
$this->manageMode = 'list';
$this->eventTarget = 'button-add';
return $this->onRelationManageForm();
}
public function onRelationButtonCreate()
{
$this->manageMode = 'form';
$this->eventTarget = 'button-create';
return $this->onRelationManageForm();
}
@ -550,7 +562,7 @@ class RelationController extends ControllerBehavior
public function onRelationButtonLink()
{
$this->manageMode = 'list';
$this->eventTarget = 'button-link';
return $this->onRelationManageForm();
}
@ -566,7 +578,27 @@ class RelationController extends ControllerBehavior
public function onRelationButtonUpdate()
{
$this->manageMode = 'form';
$this->eventTarget = 'button-update';
return $this->onRelationManageForm();
}
//
// AJAX (List events)
//
public function onRelationClickManageList()
{
return $this->onRelationManageAdd();
}
public function onRelationClickManageListPivot()
{
return $this->onRelationManagePivotForm();
}
public function onRelationClickViewList()
{
$this->eventTarget = 'list';
return $this->onRelationManageForm();
}

View File

@ -8,7 +8,7 @@
this.clickManageListRecord = function(recordId, relationField, sessionKey) {
var oldPopup = $('#relationManagePopup')
$.request('onRelationManageAdd', {
$.request('onRelationClickManageList', {
data: {
'record_id': recordId,
'_relation_field': relationField,
@ -23,7 +23,8 @@
var newPopup = $('<a />')
newPopup.popup({
handler: 'onRelationManageForm',
handler: 'onRelationClickViewList',
size: 'huge',
extraData: {
'manage_id': recordId,
'_relation_field': relationField,
@ -36,10 +37,13 @@
var oldPopup = $('#relationManagePivotPopup'),
newPopup = $('<a />')
oldPopup.popup('hide')
if (oldPopup.length) {
oldPopup.popup('hide')
}
newPopup.popup({
handler: 'onRelationManagePivotForm',
handler: 'onRelationClickManageListPivot',
size: 'huge',
extraData: {
'foreign_id': foreignId,
'_relation_field': relationField,

View File

@ -1,5 +1,6 @@
<a
data-control="popup"
data-size="huge"
data-handler="onRelationButtonAdd"
href="javascript:;"
class="btn btn-sm btn-primary oc-icon-plus">

View File

@ -1,5 +1,6 @@
<a
data-control="popup"
data-size="huge"
data-handler="onRelationButtonCreate"
href="javascript:;"
class="btn btn-sm btn-primary oc-icon-file">

View File

@ -1,5 +1,6 @@
<a
data-control="popup"
data-size="huge"
data-handler="onRelationButtonLink"
href="javascript:;"
class="btn btn-sm btn-primary oc-icon-link">

View File

@ -1,5 +1,6 @@
<a
data-control="popup"
data-size="huge"
data-handler="onRelationButtonUpdate"
data-request-data="manage_id: '<?= $relationManageId ?>'"
href="javascript:;"

View File

@ -11,9 +11,9 @@
<button type="button" class="close" data-dismiss="popup">&times;</button>
<h4 class="modal-title">
<?php if ($this->readOnly): ?>
<?= e(trans('backend::lang.relation.preview_name', ['name'=>$relationLabel])) ?>
<?= e(trans('backend::lang.relation.preview_name', ['name' => $relationLabel])) ?>
<?php else: ?>
<?= e(trans('backend::lang.relation.update_name', ['name'=>$relationLabel])) ?>
<?= e(trans('backend::lang.relation.update_name', ['name' => $relationLabel])) ?>
<?php endif ?>
</h4>
</div>
@ -58,7 +58,7 @@
<div class="modal-header">
<button type="button" class="close" data-dismiss="popup">&times;</button>
<h4 class="modal-title">
<?= e(trans('backend::lang.relation.create_name', ['name'=>$relationLabel])) ?>
<?= e(trans('backend::lang.relation.create_name', ['name' => $relationLabel])) ?>
</h4>
</div>
<div class="modal-body">

View File

@ -10,21 +10,30 @@
<h4 class="modal-title"><?= e(trans('backend::lang.relation.related_data', ['name'=>$relationLabel])) ?></h4>
</div>
<div class="modal-body">
<?= $relationPivotWidget->render() ?>
<?= $relationPivotWidget->render(['preview' => $this->readOnly]) ?>
</div>
<div class="modal-footer">
<button
type="submit"
class="btn btn-primary"
data-dismiss="popup">
<?= e(trans('backend::lang.relation.update')) ?>
</button>
<button
type="button"
class="btn btn-default"
data-dismiss="popup">
<?= e(trans('backend::lang.relation.cancel')) ?>
</button>
<?php if ($this->readOnly): ?>
<button
type="button"
class="btn btn-default"
data-dismiss="popup">
<?= e(trans('backend::lang.relation.close')) ?>
</button>
<?php else: ?>
<button
type="submit"
class="btn btn-primary"
data-dismiss="popup">
<?= e(trans('backend::lang.relation.update')) ?>
</button>
<button
type="button"
class="btn btn-default"
data-dismiss="popup">
<?= e(trans('backend::lang.relation.cancel')) ?>
</button>
<?php endif ?>
</div>
<?= Form::close() ?>