mirror of https://github.com/keeweb/keeweb.git
displaying extra websites as urls
This commit is contained in:
parent
7794c8b89b
commit
5c4cb7ff6d
|
@ -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 };
|
||||||
|
|
|
@ -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));
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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)) {
|
||||||
|
|
Loading…
Reference in New Issue