Improve mode detection for relations by using an event target
This commit is contained in:
parent
165d2f86e0
commit
e48963b1e9
|
|
@ -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' })
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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">
|
||||
|
|
|
|||
|
|
@ -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">
|
||||
|
|
|
|||
|
|
@ -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">
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
<a
|
||||
data-control="popup"
|
||||
data-size="huge"
|
||||
data-handler="onRelationButtonUpdate"
|
||||
data-request-data="manage_id: '<?= $relationManageId ?>'"
|
||||
href="javascript:;"
|
||||
|
|
|
|||
|
|
@ -11,9 +11,9 @@
|
|||
<button type="button" class="close" data-dismiss="popup">×</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">×</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">
|
||||
|
|
|
|||
|
|
@ -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() ?>
|
||||
|
|
|
|||
Loading…
Reference in New Issue