Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<fieldset ng-disabled="form.readonly"
class="schema-form-fieldset {{ form.htmlClass }}"
ng-init="collapsed = form.collapsed">
ng-init="collapsed = form.required !== true">
<div class="panel panel-default deposit-panel">
<div class="panel-heading"><a ng-click="collapsed = !collapsed"
class="panel-toggle">
Expand Down Expand Up @@ -39,7 +39,7 @@
<div class="help-block"
ng-show="(hasError() && errorMessage(schemaError())) || form.description"
ng-bind-html="(hasError() && errorMessage(schemaError())) || form.description"></div>

<button ng-hide="form.readonly || form.add === null"
ng-click="appendToArray()"
ng-disabled="form.schema.maxItems <= modelArray.length"
Expand All @@ -52,4 +52,4 @@
</div>
</div>
</div>
</fieldset>
</fieldset>
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<fieldset ng-if="$index == None"
ng-disabled="form.readonly"
class="schema-form-fieldset {{ form.htmlClass }}"
ng-init="collapsed = form.collapsed">
ng-init="collapsed = form.required !== true">
<div class="panel panel-default deposit-panel">
<div class="panel-heading"><a ng-click="collapsed = !collapsed"
class="panel-toggle">
Expand Down Expand Up @@ -43,7 +43,7 @@
schema-validate="form"
name="{{ form.key.slice(-1)[0] }}"
aria-describedby="{{ form.key.slice(-1)[0] + 'Status' }}">

<div ng-if="form.fieldAddonLeft || form.fieldAddonRight"
ng-class="{'input-group': (form.fieldAddonLeft || form.fieldAddonRight)}">
<span ng-if="form.fieldAddonLeft"
Expand All @@ -61,21 +61,21 @@
schema-validate="form"
name="{{ form.key.slice(-1)[0] }}"
aria-describedby="{{ form.key.slice(-1)[0] + 'Status' }}">

<span ng-if="form.fieldAddonRight"
class="input-group-addon"
ng-bind-html="form.fieldAddonRight"></span>
</div>

<span ng-if="form.feedback !== false"
class="form-control-feedback"
ng-class="evalInScope(form.feedback) || {'glyphicon': true, 'glyphicon-ok': form.disableSuccessState !== true && hasSuccess(), 'glyphicon-remove': form.disableErrorState !== true && hasError() }"
aria-hidden="true"></span>

<span ng-if="hasError() || hasSuccess()"
id="{{ form.key.slice(-1)[0] + 'Status' }}"
class="sr-only">{{ hasSuccess() ? '(success)' : '(error)' }}</span>

<div class="help-block" sf-message="form.description"></div>
</div>
</div>
Expand Down Expand Up @@ -146,4 +146,4 @@
<div class="help-block" sf-message="form.description"></div>
</div>
</div>
</div>
</div>
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<fieldset ng-disabled="form.readonly"
class="schema-form-fieldset {{ form.htmlClass }}"
ng-init="collapsed = form.collapsed">
ng-init="collapsed = form.required !== true">
<div class="panel panel-default deposit-panel">
<div class="panel-heading"><a ng-click="collapsed = !collapsed"
class="panel-toggle">
Expand Down
133 changes: 45 additions & 88 deletions modules/weko-items-ui/weko_items_ui/static/js/weko_items_ui/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -1807,107 +1807,60 @@ function toObject(arr) {
}

/**
* Set required and collapsed for all sub item.
* If form required, setting "required" is true and "collapsed" is false.
* If root panel collapse, sub panel will collapse.
* @param {Boolean} isCollapsed.
* @param {object} forms is item of form.
* When "Item Registration" screen init, validated controls are remove.
*/
$scope.recursiveSetCollapsedForForm = function (isCollapsed, forms) {
angular.forEach(forms, function(val, key){
if ("key" in val && val.key) {
let sub_item;
if (val.key instanceof Array) {
sub_item = val.key.pop();
} else if (typeof(val.key) === 'string') {
sub_item = val.key.split(".").pop()
}
val["collapsed"] = isCollapsed && $scope.required_list.indexOf(sub_item) === -1;
} else {
val["collapsed"] = isCollapsed;
}
if(val.hasOwnProperty('items') && val['items'] && val['items'].length > 0){
$scope.recursiveSetCollapsedForForm(isCollapsed, val["items"]);
}
});
$scope.removeValidateControlsWhenInit = function () {
//Fix init controls on "Item Registration" => not validate controls.
$('*[ng-controller="WekoRecordsCtrl"] select').removeClass('ng-invalid');
$('*[ng-controller="WekoRecordsCtrl"] input').removeClass('ng-invalid');
$('*[ng-controller="WekoRecordsCtrl"] textarea').removeClass('ng-invalid');
}

/**
* Set required and collapsed for all root item.
* Expand all parent panels when child or grandchild controls required.
*/
$scope.setCollapsedAndRequiredForForm = function(){
$scope.prepareRequiredList();
let requiredList = $rootScope.recordsVM.invenioRecordsSchema.required;
let forms = $rootScope.recordsVM.invenioRecordsForm;
let isCollapsed;
angular.forEach(forms, function(val, key){
isCollapsed = requiredList.indexOf(val.key) == -1;
val["collapsed"] = isCollapsed && $scope.required_list.indexOf(val.key) === -1;
if(val.hasOwnProperty('items') && val['items'] && val['items'].length > 0){
$scope.recursiveSetCollapsedForForm(isCollapsed, val["items"]);
$scope.expandAllParentPanel = function () {
let requiredControls = $('.field-required');
for (let i = 0; i < requiredControls.length; i++) {
let control = requiredControls[i];
let panels = $(control).parents('.panel.panel-default.deposit-panel');
for (let j = 0; j < panels.length; j++) {
let panel = panels[j];
let panelBodyList = $(panel).children('.panel-body');
panelBodyList.removeClass('ng-hide');
}
}
});
}

/**
* Prepare required list for expand/collapse panel.
* 1. Set attribute required for root panel if setting required.
* 2. If root panel is required, child or grandchild panels is required and expand.
*/
$scope.prepareRequiredList = function () {
let prepareRequiredList = function (json_data) {
let temp_key;

let pushToRequiredList = function (key) {
if ($scope.required_list.indexOf(key) === -1) {
$scope.required_list.push(key);
}

temp_key = key;
};

angular.forEach(json_data, function (val, key) {
if (val.required) {
return pushToRequiredList(key);
} else if (val.items) {
if (val.items.required) {
return pushToRequiredList(key);
} else if (prepareRequiredList(val.items.properties)) {
return pushToRequiredList(key);
}
} else if (val.properties) {
if (prepareRequiredList(val.properties)) {
return pushToRequiredList(key);
}
$scope.setCollapsedForForm = function () {
let forms = $rootScope.recordsVM.invenioRecordsForm;
let requiredList = $rootScope.recordsVM.invenioRecordsSchema.required;
angular.forEach(forms, function (val) {
//Set attribute 'required' for all parent form.
if (requiredList.indexOf(val['key']) != -1) {
val['required'] = true;
}
//Root panel is required => all sub items is required.
if (val['required']) {
$scope.setRequiredForAllSubItems(val["items"], true);
}
});
}

return temp_key;
}

let json_data = $rootScope.recordsVM.invenioRecordsSchema;
if (json_data.required) {
$scope.required_list = $scope.required_list.concat(json_data.required);
}

if ($scope.error_list && $scope.error_list['either']) {
angular.forEach($scope.error_list['either'], function (val, key) {
let ids = [];
if (val instanceof Array) {
val.map(function(x) {
return x.split('.');
}).forEach(function(x) {
ids = ids.concat(x);
});
} else {
ids = val.split('.');
}
angular.forEach(ids, function (_val, _key) {
if ($scope.required_list.indexOf(_val) === -1) {
$scope.required_list.push(_val);
/**
* Set 'required' attribute for all sub items by 'isRequired' param.
*/
$scope.setRequiredForAllSubItems = function (forms, isRequired) {
angular.forEach(forms, function (val) {
val['required'] = isRequired;
if (val['items'] && val['items'].length > 0) {
$scope.setRequiredForAllSubItems(val["items"], isRequired);
}
});
});
}

prepareRequiredList(json_data.properties);
}

$scope.loadFilesFromSession = function () {
Expand Down Expand Up @@ -2036,12 +1989,16 @@ function toObject(arr) {
//Case edit: fill data to fields when page loaded.
let model = $rootScope.recordsVM.invenioRecordsModel;
CustomBSDatePicker.setDataFromFieldToModel(model, true);
//When "Item Registration" screen init, validated controls are remove.
$scope.removeValidateControlsWhenInit();
//Expand all parent panels when child or grandchild controls required.
$scope.expandAllParentPanel();
}, 3000);
// Auto fill user profile
$scope.autoFillProfileInfo();
$scope.autoSetCorrespondingUsageAppId();
//Set required and collapsed for all root and sub item.
$scope.setCollapsedAndRequiredForForm();
$scope.setCollapsedForForm();

// Delay 0.5s after page render
$scope.changePositionFileInterval = setInterval(function () {
Expand Down