Skip to content

Commit 6f4e79a

Browse files
authored
Admin / Source / Improve dirty state (geonetwork#8222)
* Admin / Source / Improve dirty state Due to wrong `form` tag placement, dirty state was only set when changing portal id and filter - not UI config, service or logo. Reorganize the form to improve this, so that save action is enabled when changing the form. Also keep the logo form upload not nested (because it would not work) * Update SourcesController.js * Admin / Source / Hide logo if not available.
1 parent dc0f78a commit 6f4e79a

File tree

2 files changed

+112
-111
lines changed

2 files changed

+112
-111
lines changed

web-ui/src/main/resources/catalog/js/admin/SourcesController.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@
211211

212212
$scope.deleteSourceLogo = function () {
213213
$scope.source.logo = null;
214-
// $scope.updateSource();
214+
$scope.gnSourceForm.$setDirty();
215215
};
216216

217217
// upload directive options

web-ui/src/main/resources/catalog/templates/admin/settings/sources.html

Lines changed: 111 additions & 110 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
{{::s.name}}
5151
<img
5252
class="gn-source-logo"
53+
onerror="this.style.display='none'"
5354
data-ng-src="{{'../../images/' + (s.type === 'subportal' ? 'harvesting/' + s.logo : 'logos/' + s.uuid + '.png')}}"
5455
/>
5556
</a>
@@ -169,6 +170,20 @@
169170
</p>
170171
</div>
171172

173+
<table class="table table-striped">
174+
<tr data-ng-repeat="(key, value) in source.label">
175+
<td>{{key | translate}}</td>
176+
<td>
177+
<input
178+
type="text"
179+
class="form-control"
180+
value="{{value}}"
181+
data-ng-model="source.label[key]"
182+
/>
183+
</td>
184+
</tr>
185+
</table>
186+
172187
<label data-translate="">sourceFilter</label>
173188
<input type="text" class="form-control" data-ng-model="source.filter" />
174189
<p class="help-block" data-translate="">sourceFilter-help</p>
@@ -177,130 +192,116 @@
177192
<span data-translate="">displayInHeaderSwitcher</span>
178193
</label>
179194
<p class="help-block" data-translate="">displayInHeaderSwitcher-help</p>
180-
</form>
181195

182-
<div>
183-
<label data-translate="">sourceLogo</label>
196+
<label data-translate="">sourceUiConfig</label>
197+
<select
198+
id="uiConfigurationList"
199+
class="form-control"
200+
data-ng-options="c.id as c.id for (key, c) in uiConfigurations | orderBy: 'id'"
201+
data-ng-model="source.uiConfig"
202+
></select>
203+
<p class="help-block" data-translate="">sourceUiConfig-help</p>
184204

185-
<div class="row" data-ng-show="source.logo">
186-
<div class="col-md-6 gn-nopadding-left">
187-
<img
188-
data-ng-show="source.logo"
189-
src="../../images/harvesting/{{ source.logo }}"
190-
class="img-thumbnail form-group"
191-
data-ng-attr-title="{{ source.logo }}"
192-
/>
193-
</div>
194-
<div class="col-md-6 gn-nopadding-left">
195-
<a href="" data-ng-click="deleteSourceLogo()" class="text-danger">
196-
<i data-ng-show="source.logo" class="fa fa-times delete"></i>
197-
</a>
198-
</div>
205+
<div>
206+
<label for="serviceList"
207+
>{{'system/csw/capabilityRecordUuid' | translate}}</label
208+
>
209+
210+
<div
211+
data-gn-suggest="serviceRecordSearchObj"
212+
data-gn-suggest-model="source.serviceRecord"
213+
data-gn-suggest-property="_id"
214+
data-gn-suggest-display-title="span"
215+
></div>
216+
217+
<p class="help-block">
218+
{{'system/csw/capabilityRecordUuid-help' | translate}}
219+
</p>
199220
</div>
200221

201-
<!--Display logo picker from harvester logos-->
202-
<div class="row" data-ng-show="queue.length == 0">
203-
<div class="col-md-12 gn-nopadding-left gn-margin-bottom" translate>
204-
selectExistingLogo
205-
</div>
206-
<div class="col-md-12 gn-nopadding-left gn-margin-bottom">
207-
<div class="form-group" gn-logo-picker="source.logo"></div>
208-
</div>
222+
<div data-ng-show="groups.length">
223+
<label class="control-label" data-translate="">subPortalGroupOwner</label>
224+
<div
225+
data-groups-combo=""
226+
data-owner-group="source.groupOwner"
227+
data-set-default-value="false"
228+
data-optional="{{::$parent.user.isAdministrator()}}"
229+
lang="lang"
230+
groups="groups"
231+
data-exclude-special-groups="true"
232+
></div>
233+
234+
<p class="help-block" data-translate="">subPortalGroupOwnerHelp</p>
209235
</div>
210236

211-
<!--Display logo upload input-->
212-
<form
213-
id="gn-group-edit"
214-
name="gnGroupEdit"
215-
method="POST"
216-
data-file-upload="logoUploadOptions"
217-
role="form"
218-
>
219-
<input type="hidden" name="_csrf" value="{{csrf}}" />
220-
<div class="row" data-ng-show="!source.logo" id="group-logo-upload">
221-
<div class="col-md-12 gn-nopadding-left gn-margin-bottom" translate>
222-
addNewLogo
237+
<div>
238+
<label data-translate="">sourceLogo</label>
239+
240+
<div class="row" data-ng-show="source.logo">
241+
<div class="col-md-6 gn-nopadding-left">
242+
<img
243+
data-ng-show="source.logo"
244+
src="../../images/harvesting/{{ source.logo }}"
245+
class="img-thumbnail form-group"
246+
data-ng-attr-title="{{ source.logo }}"
247+
/>
223248
</div>
224-
<div class="col-md-12 gn-nopadding-left gn-nopadding-right">
225-
<div class="panel panel-default">
226-
<div class="panel-heading" data-translate="">upload</div>
227-
<div class="panel-body">
228-
<span class="btn btn-success btn-block fileinput-button">
229-
<i class="fa fa-plus fa-white"></i>
230-
<span data-translate="">chooseLogos</span>
231-
<input type="file" id="source-logo" name="file" />
232-
</span>
233-
<ul style="list-style: none">
234-
<li data-ng-repeat="file in queue">
235-
<div class="preview" data-file-upload-preview="file"></div>
236-
{{file.name}} ({{file.type}} / {{file.size | formatFileSize}})
237-
<i class="fa fa-trash-o" data-ng-click="clear(file)"></i>
238-
</li>
239-
</ul>
240-
</div>
241-
</div>
249+
<div class="col-md-6 gn-nopadding-left">
250+
<a href="" data-ng-click="deleteSourceLogo()" class="text-danger">
251+
<i data-ng-show="source.logo" class="fa fa-times delete"></i>
252+
</a>
242253
</div>
243254
</div>
244-
</form>
245-
246-
<p class="help-block" data-translate="">sourceLogo-help</p>
247-
</div>
248-
249-
<label data-translate="">sourceUiConfig</label>
250-
<select
251-
id="uiConfigurationList"
252-
class="form-control"
253-
data-ng-options="c.id as c.id for (key, c) in uiConfigurations | orderBy: 'id'"
254-
data-ng-model="source.uiConfig"
255-
></select>
256-
<p class="help-block" data-translate="">sourceUiConfig-help</p>
257-
258-
<div>
259-
<label for="serviceList"
260-
>{{'system/csw/capabilityRecordUuid' | translate}}</label
261-
>
262-
263-
<div
264-
data-gn-suggest="serviceRecordSearchObj"
265-
data-gn-suggest-model="source.serviceRecord"
266-
data-gn-suggest-property="_id"
267-
data-gn-suggest-display-title="span"
268-
></div>
255+
</div>
256+
</form>
269257

270-
<p class="help-block">
271-
{{'system/csw/capabilityRecordUuid-help' | translate}}
272-
</p>
258+
<!--Display logo picker from harvester logos-->
259+
<div class="row" data-ng-show="queue.length == 0">
260+
<div class="col-md-12 gn-nopadding-left gn-margin-bottom" translate>
261+
selectExistingLogo
262+
</div>
263+
<div class="col-md-12 gn-nopadding-left gn-margin-bottom">
264+
<div class="form-group" gn-logo-picker="source.logo"></div>
265+
</div>
273266
</div>
274267

275-
<div data-ng-show="groups.length">
276-
<label class="control-label" data-translate="">subPortalGroupOwner</label>
277-
<div
278-
data-groups-combo=""
279-
data-owner-group="source.groupOwner"
280-
data-set-default-value="false"
281-
data-optional="{{::$parent.user.isAdministrator()}}"
282-
lang="lang"
283-
groups="groups"
284-
data-exclude-special-groups="true"
285-
></div>
268+
<!--Display logo upload input-->
269+
<form
270+
id="gn-group-edit"
271+
name="gnGroupEdit"
272+
method="POST"
273+
data-file-upload="logoUploadOptions"
274+
role="form"
275+
>
276+
<input type="hidden" name="_csrf" value="{{csrf}}" />
277+
<div class="row" data-ng-show="!source.logo" id="group-logo-upload">
278+
<div class="col-md-12 gn-nopadding-left gn-margin-bottom" translate>
279+
addNewLogo
280+
</div>
281+
<div class="col-md-12 gn-nopadding-left gn-nopadding-right">
282+
<div class="panel panel-default">
283+
<div class="panel-heading" data-translate="">upload</div>
284+
<div class="panel-body">
285+
<span class="btn btn-success btn-block fileinput-button">
286+
<i class="fa fa-plus fa-white"></i>
287+
<span data-translate="">chooseLogos</span>
288+
<input type="file" id="source-logo" name="file" />
289+
</span>
290+
<ul style="list-style: none">
291+
<li data-ng-repeat="file in queue">
292+
<div class="preview" data-file-upload-preview="file"></div>
293+
{{file.name}} ({{file.type}} / {{file.size | formatFileSize}})
294+
<i class="fa fa-trash-o" data-ng-click="clear(file)"></i>
295+
</li>
296+
</ul>
297+
</div>
298+
</div>
299+
</div>
300+
</div>
301+
</form>
286302

287-
<p class="help-block" data-translate="">subPortalGroupOwnerHelp</p>
288-
</div>
303+
<p class="help-block" data-translate="">sourceLogo-help</p>
289304
</div>
290-
291-
<table class="table table-striped">
292-
<tr data-ng-repeat="(key, value) in source.label">
293-
<td>{{key | translate}}</td>
294-
<td>
295-
<input
296-
type="text"
297-
class="form-control"
298-
value="{{value}}"
299-
data-ng-model="source.label[key]"
300-
/>
301-
</td>
302-
</tr>
303-
</table>
304305
</div>
305306
</div>
306307
</div>

0 commit comments

Comments
 (0)