Merge branch '004' into develop
This commit is contained in:
@@ -75,6 +75,7 @@
|
||||
input.sk-input.mt-5.sk-base(
|
||||
name='server',
|
||||
ng-model='self.state.formData.url',
|
||||
ng-change='self.onHostInputChange()'
|
||||
placeholder='Server URL',
|
||||
required='',
|
||||
type='text'
|
||||
@@ -122,14 +123,14 @@
|
||||
)
|
||||
p.sk-p Stay signed in
|
||||
label.sk-panel-row.justify-left(ng-if='self.notesAndTagsCount() > 0')
|
||||
.sk-panel-row
|
||||
input(
|
||||
ng-bind='true',
|
||||
ng-change='self.mergeLocalChanged()',
|
||||
ng-model='self.state.formData.mergeLocal',
|
||||
type='checkbox'
|
||||
)
|
||||
| Merge local data ({{self.notesAndTagsCount()}} notes and tags)
|
||||
.sk-horizontal-group.tight
|
||||
input(
|
||||
ng-bind='true',
|
||||
ng-change='self.mergeLocalChanged()',
|
||||
ng-model='self.state.formData.mergeLocal',
|
||||
type='checkbox'
|
||||
)
|
||||
p.sk-p Merge local data ({{self.notesAndTagsCount()}} notes and tags)
|
||||
.sk-panel-section(ng-if='self.state.formData.mfa')
|
||||
form.sk-panel-form(ng-submit='self.submitMfaForm()')
|
||||
.sk-p.sk-panel-row {{self.state.formData.mfa.message}}
|
||||
@@ -188,7 +189,7 @@
|
||||
) {{self.syncStatus.current}}/{{self.syncStatus.total}}
|
||||
.sk-panel-row
|
||||
a.sk-a.info.sk-panel-row.condensed(
|
||||
ng-click="self.openPasswordWizard('change-pw')"
|
||||
ng-click="self.openPasswordWizard()"
|
||||
)
|
||||
| Change Password
|
||||
a.sk-a.info.sk-panel-row.condensed(
|
||||
@@ -196,21 +197,15 @@
|
||||
ng-show='self.state.user'
|
||||
)
|
||||
| Manage Privileges
|
||||
a.sk-panel-row.justify-left.condensed.success(
|
||||
ng-click="self.openPasswordWizard('upgrade-security')",
|
||||
ng-if='self.state.securityUpdateAvailable'
|
||||
)
|
||||
.inline.sk-circle.small.success.mr-8
|
||||
.inline Security Update Available
|
||||
.sk-panel-section
|
||||
.sk-panel-section-title Encryption
|
||||
.sk-panel-section-subtitle.info(ng-if='self.encryptionEnabled()')
|
||||
.sk-panel-section-subtitle.info(ng-if='self.state.encryptionEnabled')
|
||||
| {{self.encryptionStatusForNotes()}}
|
||||
p.sk-p
|
||||
| {{self.encryptionStatusString()}}
|
||||
| {{self.state.encryptionStatusString}}
|
||||
.sk-panel-section
|
||||
.sk-panel-section-title Passcode Lock
|
||||
div(ng-if='!self.hasPasscode()')
|
||||
div(ng-if='!self.state.hasPasscode')
|
||||
div(ng-if='self.state.canAddPasscode')
|
||||
.sk-panel-row(ng-if='!self.state.formData.showPasscodeForm')
|
||||
.sk-button.info(
|
||||
@@ -247,7 +242,7 @@
|
||||
a.neutral.sk-a.sk-panel-row(
|
||||
ng-click='self.state.formData.showPasscodeForm = false'
|
||||
) Cancel
|
||||
div(ng-if='self.hasPasscode() && !self.state.formData.showPasscodeForm')
|
||||
div(ng-if='self.state.hasPasscode && !self.state.formData.showPasscodeForm')
|
||||
.sk-p
|
||||
| Passcode lock is enabled.
|
||||
.sk-notification.contrast
|
||||
@@ -281,7 +276,7 @@
|
||||
.sk-p
|
||||
| Download a backup of all your data.
|
||||
.sk-panel-row
|
||||
form.sk-panel-form.sk-panel-row(ng-if='self.encryptedBackupsAvailable()')
|
||||
form.sk-panel-form.sk-panel-row(ng-if='self.state.encryptionEnabled')
|
||||
.sk-input-group
|
||||
label.sk-horizontal-group.tight
|
||||
input(
|
||||
|
||||
@@ -7,19 +7,24 @@
|
||||
target='blank'
|
||||
)
|
||||
menu-row(label="'Download Actions'")
|
||||
div(ng-repeat='extension in self.state.extensions')
|
||||
div(ng-if='self.loadingExtensions')
|
||||
.sk-menu-panel-header
|
||||
.sk-menu-panel-column
|
||||
.sk-menu-panel-header-title Loading...
|
||||
.sk-spinner.small.loading
|
||||
div(ng-repeat='extension in self.state.extensions track by extension.uuid; self.loadingExtensions = false')
|
||||
.sk-menu-panel-header(
|
||||
ng-click='extension.hide = !extension.hide; $event.stopPropagation();'
|
||||
ng-click='self.updateExtension(extension, { hidden: !extension.hidden }); $event.stopPropagation();'
|
||||
)
|
||||
.sk-menu-panel-column
|
||||
.sk-menu-panel-header-title {{extension.name}}
|
||||
.sk-spinner.small.loading(ng-if='extension.loading')
|
||||
div(ng-if='extension.hide') …
|
||||
div(ng-if='extension.hidden') …
|
||||
menu-row(
|
||||
action='self.executeAction(action, extension);',
|
||||
action='self.executeAction(action, extension)',
|
||||
label='action.label',
|
||||
ng-if='!extension.hide',
|
||||
ng-repeat='action in extension.actionsWithContextForItem(self.props.item)',
|
||||
ng-if='!extension.hidden',
|
||||
ng-repeat='action in extension.actionsWithContextForItem(self.props.item) track by $index',
|
||||
disabled='action.running'
|
||||
spinner-class="action.running ? 'info' : null",
|
||||
sub-rows='action.subrows',
|
||||
subtitle='action.desc'
|
||||
|
||||
@@ -11,5 +11,7 @@
|
||||
| {{ctrl.component.name}}
|
||||
a.sk-a.info.close-button(ng-click="ctrl.dismiss()") Close
|
||||
component-view.component-view(
|
||||
component="ctrl.component"
|
||||
ng-if='ctrl.component.active'
|
||||
component-uuid="ctrl.component.uuid",
|
||||
application='ctrl.application'
|
||||
)
|
||||
|
||||
@@ -4,19 +4,9 @@
|
||||
.sk-app-bar-item
|
||||
.sk-label.warning There was an issue loading {{ctrl.component.name}}.
|
||||
.right
|
||||
.sk-app-bar-item(ng-click='ctrl.reloadComponent()')
|
||||
.sk-app-bar-item(ng-click='ctrl.reloadIframe()')
|
||||
.sk-button.info
|
||||
.sk-label Reload
|
||||
.sn-component(ng-if='ctrl.showNoThemesMessage')
|
||||
.sk-app-bar.no-edges.no-top-edge.dynamic-height
|
||||
.left
|
||||
.sk-app-bar-item
|
||||
.sk-label.warning This extension does not support themes.
|
||||
.right
|
||||
.sk-app-bar-item(ng-click='ctrl.dismissNoThemesMessage()')
|
||||
.sk-label Dismiss
|
||||
.sk-app-bar-item(ng-click='ctrl.disableActiveTheme()')
|
||||
.sk-label Disable Active Theme
|
||||
.sn-component(ng-if='ctrl.expired')
|
||||
.sk-app-bar.no-edges.no-top-edge.dynamic-height
|
||||
.left
|
||||
@@ -84,10 +74,11 @@
|
||||
| version of the app.
|
||||
| Ensure you are running at least version 2.1 on all platforms.
|
||||
iframe(
|
||||
data-component-id='{{ctrl.component.uuid}}',
|
||||
data-component-id='{{ctrl.componentUuid}}',
|
||||
frameborder='0',
|
||||
ng-attr-id='component-iframe-{{ctrl.component.uuid}}',
|
||||
ng-if='ctrl.component && ctrl.componentValid',
|
||||
ng-init='ctrl.onIframeInit()'
|
||||
ng-attr-id='component-iframe-{{ctrl.componentUuid}}',
|
||||
ng-if='ctrl.componentUuid && !ctrl.reloading && ctrl.componentValid',
|
||||
ng-src='{{ctrl.getUrl() | trusted}}',
|
||||
sandbox='allow-scripts allow-top-navigation-by-user-activation allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-modals allow-forms allow-downloads'
|
||||
)
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
.sn-component
|
||||
#conflict-resolution-modal.sk-modal.large
|
||||
.sk-modal-background
|
||||
.sk-modal-content
|
||||
.sk-panel
|
||||
.sk-panel-header
|
||||
h1.sk-panel-header-title Conflicted items — choose which version to keep
|
||||
.sk-horizontal-group
|
||||
a.sk-a.info.close-button(ng-click="ctrl.keepItem1()") Keep left
|
||||
a.sk-a.info.close-button(ng-click="ctrl.keepItem2()") Keep right
|
||||
a.sk-a.info.close-button(ng-click="ctrl.keepBoth()") Keep both
|
||||
a.sk-a.info.close-button(ng-click="ctrl.export()") Export
|
||||
a.sk-a.info.close-button(
|
||||
ng-click="ctrl.dismiss(); $event.stopPropagation()"
|
||||
) Close
|
||||
.sk-panel-content.selectable
|
||||
.sk-panel-section
|
||||
h3
|
||||
strong Content type:
|
||||
| {{ctrl.contentType}}
|
||||
p
|
||||
| You may wish to look at the "created_at" and "updated_at" fields
|
||||
| of the items to gain better context in deciding which to keep.
|
||||
#items
|
||||
#item1.sk-panel.static.item
|
||||
p.normal(style="white-space: pre-wrap; font-size: 16px;")
|
||||
| {{ctrl.item1Content}}
|
||||
.border
|
||||
#item2.sk-panel.static.item
|
||||
p.normal(style="white-space: pre-wrap; font-size: 16px;")
|
||||
| {{ctrl.item2Content}}
|
||||
@@ -5,28 +5,25 @@
|
||||
.sk-menu-panel-header-title Note Editor
|
||||
menu-row(
|
||||
action='self.selectComponent(null)',
|
||||
circle="self.selectedEditor == null && 'success'",
|
||||
circle="!self.selectedEditorUuid && 'success'",
|
||||
label="'Plain Editor'"
|
||||
)
|
||||
menu-row(
|
||||
ng-repeat='editor in self.state.editors'
|
||||
ng-repeat='editor in self.state.editors track by editor.uuid'
|
||||
action='self.selectComponent(editor)',
|
||||
button-action='self.toggleDefaultForEditor(editor)',
|
||||
button-class="self.state.defaultEditor == editor ? 'warning' : 'info'",
|
||||
button-text="self.state.defaultEditor == editor ? 'Undefault' : 'Set Default'",
|
||||
circle="self.selectedEditor === editor && 'success'",
|
||||
has-button='self.selectedEditor == editor || self.state.defaultEditor == editor',
|
||||
button-class="self.isEditorSelected(editor) ? 'warning' : 'info'",
|
||||
button-text="self.isEditorDefault(editor) ? 'Undefault' : 'Set Default'",
|
||||
circle="self.isEditorSelected(editor) && 'success'",
|
||||
has-button='self.isEditorSelected(editor) || isEditorDefault(editor)',
|
||||
label='editor.name',
|
||||
)
|
||||
.sk-menu-panel-column(
|
||||
ng-if='editor.content.conflict_of || self.shouldDisplayRunningLocallyLabel(editor)'
|
||||
ng-if='editor.conflictOf'
|
||||
)
|
||||
strong.danger.medium-text(
|
||||
ng-if='editor.content.conflict_of'
|
||||
.info(
|
||||
ng-if='editor.conflictOf'
|
||||
) Conflicted copy
|
||||
.sk-sublabel(
|
||||
ng-if='self.shouldDisplayRunningLocallyLabel(editor)'
|
||||
) Running Locally
|
||||
a.no-decoration(
|
||||
href='https://standardnotes.org/extensions',
|
||||
ng-if='self.state.editors.length == 0',
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
form(ng-submit="ctrl.submit()")
|
||||
input.sk-input.contrast(
|
||||
ng-model="ctrl.formData.input"
|
||||
placeholder="{{ctrl.placeholder}}"
|
||||
should-focus="true"
|
||||
sn-autofocus="true"
|
||||
type="{{ctrl.type}}"
|
||||
|
||||
@@ -5,133 +5,45 @@
|
||||
.sn-component
|
||||
.sk-panel
|
||||
.sk-panel-header
|
||||
.sk-panel-header-title {{ctrl.title}}
|
||||
.sk-panel-header-title {{ctrl.state.title}}
|
||||
a.sk-a.info.close-button(ng-click='ctrl.dismiss()') Close
|
||||
.sk-panel-content
|
||||
div(ng-if='ctrl.step == 0')
|
||||
div(ng-if='ctrl.changePassword')
|
||||
p.sk-p.sk-panel-row
|
||||
| Changing your password involves changing your encryption key,
|
||||
| which requires your data to be re-encrypted and synced.
|
||||
| If you have many items, syncing your data can take several minutes.
|
||||
p.sk-p.sk-panel-row
|
||||
| You must keep the application window open during this process.
|
||||
div(ng-if='ctrl.securityUpdate')
|
||||
p.sk-p.sk-panel-row
|
||||
| A new update is available for your account. Updates address
|
||||
| improvements and enhancements to our security specification.
|
||||
| This process will guide you through the update, and perform the
|
||||
| steps necessary with your supervision.
|
||||
.sk-panel-row
|
||||
.sk-panel-column
|
||||
p.sk-p For more information about security updates, please visit
|
||||
a.sk-a.info(
|
||||
href='https://standardnotes.org/help/security',
|
||||
rel='noopener',
|
||||
target='_blank'
|
||||
) standardnotes.org/help/security.
|
||||
p.sk-panel-row.sk-p
|
||||
.info Press Continue to proceed.
|
||||
p
|
||||
.sk-panel-section(ng-if='ctrl.step > 0')
|
||||
.sk-panel-section-title Step {{ctrl.step}} — {{ctrl.titleForStep(ctrl.step)}}
|
||||
div(ng-if='ctrl.step == 1')
|
||||
p.sk-panel-row.sk-p
|
||||
| As a result of this process, the entirety of your data will be
|
||||
| re-encrypted and synced to your account. This is a generally safe
|
||||
| process, but unforeseen factors like poor network connectivity or a
|
||||
| sudden shutdown of your computer may cause this process to fail. It's
|
||||
| best to be on the safe side before large operations such as this one.
|
||||
.sk-panel-row
|
||||
.sk-panel-row
|
||||
.sk-button-group
|
||||
.sk-button.info(ng-click='ctrl.downloadBackup(true)')
|
||||
.sk-label Download Encrypted Backup
|
||||
.sk-button.info(ng-click='ctrl.downloadBackup(false)')
|
||||
.sk-label Download Decrypted Backup
|
||||
div(ng-if='ctrl.step == 2')
|
||||
p.sk-p.sk-panel-row
|
||||
| As a result of this process, your encryption keys will change. Any
|
||||
| device on which you use Standard Notes will need to end its session.
|
||||
| After this process completes, you will be asked to sign back in.
|
||||
p.sk-p.bold.sk-panel-row.info-i
|
||||
| Please sign out of all applications (excluding this one), including:
|
||||
ul
|
||||
li.sk-p Desktop
|
||||
li.sk-p Web (Chrome, Firefox, Safari)
|
||||
li.sk-p Mobile (iOS and Android)
|
||||
p.sk-p.sk-panel-row
|
||||
| If you do not currently have access to a device you're signed in on,
|
||||
| you may proceed, but must make signing out and back in the first step
|
||||
| upon gaining access to that device.
|
||||
p.sk-p.sk-panel-row
|
||||
| Press Continue only when you have
|
||||
| completed signing out of all your devices.
|
||||
div(ng-if='ctrl.step == 3')
|
||||
div(ng-if='ctrl.changePassword')
|
||||
div(ng-if='ctrl.securityUpdate')
|
||||
p.sk-panel-row
|
||||
| Enter your current password. We'll run this through our encryption
|
||||
| scheme to generate strong new encryption keys.
|
||||
.sk-panel-row
|
||||
.sk-panel-row
|
||||
.sk-panel-column.stretch
|
||||
form.sk-panel-form
|
||||
input.sk-input.contrast(
|
||||
ng-model='ctrl.formData.currentPassword',
|
||||
placeholder='Current Password',
|
||||
should-focus='true',
|
||||
sn-autofocus='true',
|
||||
type='password'
|
||||
)
|
||||
input.sk-input.contrast(
|
||||
ng-if='ctrl.changePassword',
|
||||
ng-model='ctrl.formData.newPassword',
|
||||
placeholder='New Password',
|
||||
type='password'
|
||||
)
|
||||
input.sk-input.contrast(
|
||||
ng-if='ctrl.changePassword',
|
||||
ng-model='ctrl.formData.newPasswordConfirmation',
|
||||
placeholder='Confirm New Password',
|
||||
type='password'
|
||||
)
|
||||
div(ng-if='ctrl.step == 4')
|
||||
p.sk-panel-row
|
||||
| Your data is being re-encrypted with your new
|
||||
| keys and synced to your account.
|
||||
p.sk-panel-row.danger(ng-if='ctrl.lockContinue')
|
||||
| Do not close this window until this process completes.
|
||||
.sk-panel-row
|
||||
.sk-panel-column
|
||||
.sk-spinner.small.inline.info.mr-5(ng-if='ctrl.formData.processing')
|
||||
.inline.bold(
|
||||
ng-class="{'info' : !ctrl.formData.statusError, 'error' : ctrl.formData.statusError}"
|
||||
.sk-panel-section(ng-if='ctrl.state.step == 1')
|
||||
.sk-panel-row
|
||||
.sk-panel-column.stretch
|
||||
form.sk-panel-form
|
||||
input.sk-input.contrast(
|
||||
ng-model='ctrl.state.formData.currentPassword',
|
||||
placeholder='Current Password',
|
||||
should-focus='true',
|
||||
sn-autofocus='true',
|
||||
type='password'
|
||||
)
|
||||
| {{ctrl.formData.status}}
|
||||
.sk-panel-column(
|
||||
delay='1000',
|
||||
delay-hide='true',
|
||||
show='ctrl.syncStatus.syncOpInProgress || ctrl.syncStatus.needsMoreSync'
|
||||
)
|
||||
p.info
|
||||
| Syncing {{ctrl.syncStatus.current}}/{{ctrl.syncStatus.total}}
|
||||
div(ng-if='ctrl.step == 5')
|
||||
div(ng-if='ctrl.changePassword')
|
||||
p.sk-p.sk-panel-row.info-i Your password has been successfully changed.
|
||||
div(ng-if='ctrl.securityUpdate')
|
||||
p.sk-p.sk-panel-row.info-i
|
||||
| The security update has been successfully applied to your account.
|
||||
p.sk-p.sk-panel-row
|
||||
| Please ensure you are running the latest version of Standard Notes
|
||||
| on all platforms to ensure maximum compatibility.
|
||||
p.sk-p.sk-panel-row
|
||||
| You may now sign back in on all your devices and close this window.
|
||||
input.sk-input.contrast(
|
||||
ng-if='ctrl.props.changePassword',
|
||||
ng-model='ctrl.state.formData.newPassword',
|
||||
placeholder='New Password',
|
||||
type='password'
|
||||
)
|
||||
input.sk-input.contrast(
|
||||
ng-if='ctrl.props.changePassword',
|
||||
ng-model='ctrl.state.formData.newPasswordConfirmation',
|
||||
placeholder='Confirm New Password',
|
||||
type='password'
|
||||
)
|
||||
.sk-panel-section(ng-if='ctrl.state.step == 2')
|
||||
div(ng-if='ctrl.props.changePassword')
|
||||
p.sk-p.sk-panel-row.info-i Your password has been successfully changed.
|
||||
div(ng-if='ctrl.props.securityUpdate')
|
||||
p.sk-p.sk-panel-row.info-i
|
||||
| The account update has been successfully applied to your account.
|
||||
p.sk-p.sk-panel-row
|
||||
| Please ensure you are running the latest version of Standard Notes
|
||||
| on all platforms to ensure maximum compatibility.
|
||||
.sk-panel-footer
|
||||
.empty
|
||||
a.sk-a.info.right(
|
||||
ng-class="{'disabled' : ctrl.lockContinue}",
|
||||
ng-click='ctrl.nextStep()',
|
||||
ng-disabled='ctrl.lockContinue')
|
||||
.sk-spinner.small.inline.info.mr-5(ng-if='ctrl.showSpinner')
|
||||
| {{ctrl.continueTitle}}
|
||||
ng-disabled='ctrl.state.lockContinue')
|
||||
.sk-spinner.small.inline.info.mr-5(ng-if='ctrl.state.showSpinner')
|
||||
| {{ctrl.state.continueTitle}}
|
||||
|
||||
@@ -46,6 +46,6 @@
|
||||
| an unlocked application, but do not affect data encryption state.
|
||||
p.sk-p
|
||||
| Privileges sync across your other devices; however, note that if you
|
||||
| require a "Local Passcode" privilege, and another device does not have
|
||||
| a local passcode set up, the local passcode requirement will be ignored
|
||||
| require an "Application Passcode" privilege, and another device does not have
|
||||
| an application passcode set up, the application passcode requirement will be ignored
|
||||
| on that device.
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
style="white-space: pre-wrap; font-size: 16px;"
|
||||
) {{ctrl.content.text}}
|
||||
component-view.component-view(
|
||||
component="ctrl.editor"
|
||||
ng-if="ctrl.editor"
|
||||
component-uuid="ctrl.editor.uuid"
|
||||
ng-if="ctrl.editor",
|
||||
application='ctrl.application'
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user