displaying extra websites as urls

This commit is contained in:
antelle 2021-04-26 13:26:27 +02:00
parent 7794c8b89b
commit 5c4cb7ff6d
No known key found for this signature in database
GPG Key ID: 63C9777AAB7C563C
4 changed files with 64 additions and 32 deletions

View File

@ -240,18 +240,30 @@ function createDetailsFields(detailsView) {
} }
} else { } else {
const isUrl = field.startsWith(ExtraUrlFieldName); const isUrl = field.startsWith(ExtraUrlFieldName);
fieldViews.push( if (isUrl) {
new FieldViewCustom({ fieldViews.push(
name: '$' + field, new FieldViewUrl({
title: isUrl ? StringFormat.capFirst(Locale.website) : field, name: '$' + field,
multiline: !isUrl, title: StringFormat.capFirst(Locale.website),
titleEditable: !isUrl, value() {
value() { return model.fields[field];
return model.fields[field]; },
}, sequence: `{S:${field}}`
sequence: `{S:${field}}` })
}) );
); } else {
fieldViews.push(
new FieldViewCustom({
name: '$' + field,
title: field,
multiline: true,
value() {
return model.fields[field];
},
sequence: `{S:${field}}`
})
);
}
} }
} }
} }
@ -259,4 +271,31 @@ function createDetailsFields(detailsView) {
return { fieldViews, fieldViewsAside }; return { fieldViews, fieldViewsAside };
} }
export { createDetailsFields }; function createNewCustomField(newFieldTitle, newFieldOptions, model) {
const isUrl = newFieldTitle.startsWith(ExtraUrlFieldName);
if (isUrl) {
return new FieldViewUrl(
{
name: '$' + newFieldTitle,
title: StringFormat.capFirst(Locale.website),
newField: newFieldTitle,
value: () => model.fields[newFieldTitle]
},
newFieldOptions
);
} else {
return new FieldViewCustom(
{
name: '$' + newFieldTitle,
title: newFieldTitle,
newField: newFieldTitle,
multiline: true,
value: () => ''
},
newFieldOptions
);
}
}
export { createDetailsFields, createNewCustomField };

View File

@ -22,7 +22,7 @@ import { DetailsAutoTypeView } from 'views/details/details-auto-type-view';
import { DetailsHistoryView } from 'views/details/details-history-view'; import { DetailsHistoryView } from 'views/details/details-history-view';
import { DetailsIssuesView } from 'views/details/details-issues-view'; import { DetailsIssuesView } from 'views/details/details-issues-view';
import { DropdownView } from 'views/dropdown-view'; import { DropdownView } from 'views/dropdown-view';
import { createDetailsFields } from 'views/details/details-fields'; import { createDetailsFields, createNewCustomField } from 'views/details/details-fields';
import { FieldViewCustom } from 'views/fields/field-view-custom'; import { FieldViewCustom } from 'views/fields/field-view-custom';
import { IconSelectView } from 'views/icon-select-view'; import { IconSelectView } from 'views/icon-select-view';
import { isEqual } from 'util/fn'; import { isEqual } from 'util/fn';
@ -30,8 +30,6 @@ import template from 'templates/details/details.hbs';
import emptyTemplate from 'templates/details/details-empty.hbs'; import emptyTemplate from 'templates/details/details-empty.hbs';
import groupTemplate from 'templates/details/details-group.hbs'; import groupTemplate from 'templates/details/details-group.hbs';
import { Launcher } from 'comp/launcher'; import { Launcher } from 'comp/launcher';
import { ExtraUrlFieldName } from 'models/entry-model';
import { StringFormat } from '../../util/formatting/string-format';
class DetailsView extends View { class DetailsView extends View {
parent = '.app__details'; parent = '.app__details';
@ -212,21 +210,12 @@ class DetailsView extends View {
} }
} }
const isUrl = newFieldTitle.startsWith(ExtraUrlFieldName); const fieldView = createNewCustomField(
const fieldView = new FieldViewCustom( newFieldTitle,
{
name: '$' + newFieldTitle,
title: isUrl ? StringFormat.capFirst(Locale.website) : newFieldTitle,
newField: newFieldTitle,
multiline: !isUrl,
titleEditable: !isUrl,
value() {
return '';
}
},
{ {
parent: this.$el.find('.details__body-fields')[0] parent: this.$el.find('.details__body-fields')[0]
} },
this.model
); );
fieldView.on('change', this.fieldChanged.bind(this)); fieldView.on('change', this.fieldChanged.bind(this));

View File

@ -38,7 +38,7 @@ class FieldViewCustom extends FieldViewText {
endEdit(newVal, extra) { endEdit(newVal, extra) {
this.$el.removeClass('details__field--can-edit-title'); this.$el.removeClass('details__field--can-edit-title');
extra = { ...extra }; extra = { ...extra };
if (this.model.titleChanged || this.model.newField) { if (this.model.titleChanged) {
extra.newField = this.model.title; extra.newField = this.model.title;
} }
if (!this.editing) { if (!this.editing) {
@ -97,9 +97,9 @@ class FieldViewCustom extends FieldViewText {
fieldLabelClick(e) { fieldLabelClick(e) {
e.stopImmediatePropagation(); e.stopImmediatePropagation();
if (this.model.titleEditable && this.model.newField) { if (this.model.newField) {
this.startEditTitle(true); this.startEditTitle(true);
} else if (this.model.titleEditable && this.editing) { } else if (this.editing) {
this.startEditTitle(); this.startEditTitle();
} else { } else {
super.fieldLabelClick.call(this, e); super.fieldLabelClick.call(this, e);

View File

@ -188,6 +188,10 @@ class FieldView extends View {
} }
const protectedEqual = const protectedEqual =
(newVal && newVal.isProtected) === (this.value && this.value.isProtected); (newVal && newVal.isProtected) === (this.value && this.value.isProtected);
if (!extra?.newField && this.model.newField) {
extra ??= {};
extra.newField = this.model.newField;
}
const nameChanged = extra && extra.newField; const nameChanged = extra && extra.newField;
let arg; let arg;
if (newVal !== undefined && (!textEqual || !protectedEqual || nameChanged)) { if (newVal !== undefined && (!textEqual || !protectedEqual || nameChanged)) {