StyleKit classes wip

This commit is contained in:
Mo Bitar
2018-12-07 14:26:38 -06:00
parent a656918332
commit 285bb76c7a
24 changed files with 2763 additions and 1905 deletions

View File

@@ -6,12 +6,12 @@
z-index: $z-index-footer-bar; z-index: $z-index-footer-bar;
} }
#footer-bar .item { #footer-bar .sk-app-bar-item {
z-index: $z-index-footer-bar-item; z-index: $z-index-footer-bar-item;
position: relative; position: relative;
user-select: none; user-select: none;
.panel { .sk-panel {
max-height: 85vh; max-height: 85vh;
position: absolute; position: absolute;
right: 0px; right: 0px;
@@ -20,16 +20,14 @@
min-width: 300px; min-width: 300px;
z-index: $z-index-footer-bar-item-panel; z-index: $z-index-footer-bar-item-panel;
margin-top: 15px; margin-top: 15px;
background-color: white;
} }
} }
#account-panel { #account-panel {
width: 400px; width: 400px;
} }
.panel { .sk-panel {
cursor: default; cursor: default;
} }

View File

@@ -26,11 +26,11 @@
height: 100%; height: 100%;
} }
.panel { .sk-panel {
width: 315px; width: 315px;
flex-grow: 0; flex-grow: 0;
.header { .sk-panel-header {
justify-content: center; justify-content: center;
} }
} }

View File

@@ -1,5 +1,5 @@
.app-bar { .sk-app-bar {
.item { .sk-app-bar-item {
position: relative; position: relative;
} }
} }
@@ -15,6 +15,4 @@
margin-top: 5px; margin-top: 5px;
width: 280px; width: 280px;
max-height: calc(85vh - 90px); max-height: calc(85vh - 90px);
background-color: white;
color: $selected-text-color;
} }

View File

@@ -1,13 +1,13 @@
#permissions-modal { #permissions-modal {
width: 350px; width: 350px;
.panel { .sk-panel {
border-radius: 0; border-radius: 0;
background-color: white; background-color: white;
} }
.content { .sk-panel-content {
padding-top: 1.1rem; padding-top: 1.1rem;
} }
.footer { .sk-panel-footer {
padding-bottom: 1.4rem; padding-bottom: 1.4rem;
} }
} }
@@ -43,9 +43,9 @@
} }
} }
.panel { // .sk-panel {
background-color: white; // background-color: white;
} // }
.header .subtitle { .header .subtitle {
font-size: 1.1rem; font-size: 1.1rem;
@@ -70,7 +70,7 @@
.sn-component { .sn-component {
height: 100%; height: 100%;
.panel { .sk-panel {
height: 100%; height: 100%;
} }
} }

View File

@@ -1,6 +1,6 @@
.sn-component { .sn-component {
.notification { .sk-notification {
&.unpadded { &.unpadded {
padding: 0; padding: 0;
padding-bottom: 0 !important; padding-bottom: 0 !important;
@@ -18,7 +18,7 @@
} }
.app-bar { .sk-app-bar {
&.no-top-edge { &.no-top-edge {
border-top: 0; border-top: 0;
} }
@@ -26,10 +26,8 @@
} }
.panel { .sk-panel {
color: black; .sk-panel-header {
.header {
.close-button { .close-button {
&:hover { &:hover {
text-decoration: none; text-decoration: none;
@@ -42,20 +40,16 @@
} }
.button-group.stretch { .sk-button-group.stretch {
.button:not(.featured) { .sk-button:not(.featured) {
// Default buttons that are not featured and stretched should have larger vertical padding // Default buttons that are not featured and stretched should have larger vertical padding
padding: 9px; padding: 9px;
} }
} }
a {
color: $blue-color;
}
} }
#session-history-menu { #session-history-menu {
.menu-panel .row .sublabel.opaque { .sk-menu-panel .sk-menu-panel-row .sk-sublabel.opaque {
opacity: 1.0 opacity: 1.0
} }
} }

View File

@@ -1,52 +1,51 @@
.sn-component .sn-component
.panel#account-panel .sk-panel#account-panel
.header .sk-panel-header
%h1.title Account .sk-panel-header-title Account
%a.close-button{"ng-click" => "close()"} Close %a.sk-a.infoclose-button{"ng-click" => "close()"} Close
.content .sk-panel-content
.sk-panel-section.hero{"ng-if" => "!user && !formData.showLogin && !formData.showRegister && !formData.mfa"}
.panel-section.hero{"ng-if" => "!user && !formData.showLogin && !formData.showRegister && !formData.mfa"} .sk-panel-section-title Sign in or register to enable sync and end-to-end encryption.
%h1.title Sign in or register to enable sync and end-to-end encryption. .sk-panel-row
.panel-row .sk-panel-row
.panel-row .sk-button-group.stretch
.button-group.stretch .sk-button.info.featured{"ng-click" => "formData.showLogin = true"}
.button.info.featured{"ng-click" => "formData.showLogin = true"} .sk-label Sign In
.label Sign In .sk-button.info.featured{"ng-click" => "formData.showRegister = true"}
.button.info.featured{"ng-click" => "formData.showRegister = true"} .sk-label Register
.label Register
%p %p
Standard Notes is free on every platform, and comes standard with sync and encryption. Standard Notes is free on every platform, and comes standard with sync and encryption.
.panel-section{"ng-if" => "formData.showLogin || formData.showRegister"} .sk-panel-section{"ng-if" => "formData.showLogin || formData.showRegister"}
%h3.title.panel-row .sk-panel-section-title
{{formData.showLogin ? "Sign In" : "Register"}} {{formData.showLogin ? "Sign In" : "Register"}}
%form.panel-form{"ng-submit" => "submitAuthForm()"} %form.sk-panel-form{"ng-submit" => "submitAuthForm()"}
%input{:placeholder => 'Email', "sn-autofocus" => 'true', "should-focus" => "true", :name => 'email', :required => true, :type => 'email', 'ng-model' => 'formData.email'} %input{:placeholder => 'Email', "sn-autofocus" => 'true', "should-focus" => "true", :name => 'email', :required => true, :type => 'email', 'ng-model' => 'formData.email'}
%input{:placeholder => 'Password', :name => 'password', :required => true, :type => 'password', 'ng-model' => 'formData.user_password'} %input{:placeholder => 'Password', :name => 'password', :required => true, :type => 'password', 'ng-model' => 'formData.user_password'}
%input{:placeholder => 'Confirm Password', "ng-if" => "formData.showRegister", :name => 'password', :required => true, :type => 'password', 'ng-model' => 'formData.password_conf'} %input{:placeholder => 'Confirm Password', "ng-if" => "formData.showRegister", :name => 'password', :required => true, :type => 'password', 'ng-model' => 'formData.password_conf'}
%a.panel-row{"ng-click" => "formData.showAdvanced = !formData.showAdvanced"} %a.sk-panel-row{"ng-click" => "formData.showAdvanced = !formData.showAdvanced"}
Advanced Options Advanced Options
.notification.info{"ng-if" => "formData.showRegister"} .sk-notification.info{"ng-if" => "formData.showRegister"}
%h2.title No Password Reset. .sk-notification-title No Password Reset.
.text Because your notes are encrypted using your password, Standard Notes does not have a password reset option. You cannot forget your password. .sk-notification-text Because your notes are encrypted using your password, Standard Notes does not have a password reset option. You cannot forget your password.
.notification.unpadded.default.advanced-options.panel-row{"ng-if" => "formData.showAdvanced"} .sk-notification.unpadded.default.advanced-options.sk-panel-row{"ng-if" => "formData.showAdvanced"}
.panel-column.stretch .sk-panel-column.stretch
%h4.title.panel-row.padded-row Advanced Options .sk-notification-title.sk-panel-row.padded-row Advanced Options
%div.bordered-row.padded-row %div.bordered-row.padded-row
%label Sync Server Domain %label.sk-label Sync Server Domain
%input.form-control.mt-5{:name => 'server', :placeholder => 'Server URL', :required => true, :type => 'text', 'ng-model' => 'formData.url'} %input.sk-input.mt-5.sk-input{:name => 'server', :placeholder => 'Server URL', :required => true, :type => 'text', 'ng-model' => 'formData.url'}
%label.padded-row{"ng-if" => "formData.showLogin"} %label.sk-label.padded-row{"ng-if" => "formData.showLogin"}
%input{"type" => "checkbox", "ng-model" => "formData.strictSignin"} %input.sk-input{"type" => "checkbox", "ng-model" => "formData.strictSignin"}
Use strict sign in Use strict sign in
%span %span
%a{"href" => "https://standardnotes.org/help/security", "target" => "_blank"} (Learn more) %a{"href" => "https://standardnotes.org/help/security", "target" => "_blank"} (Learn more)
.button-group.stretch.panel-row.form-submit .sk-button-group.stretch.sk-panel-row.form-submit
%button.button.info.featured{"type" => "submit", "ng-disabled" => "formData.authenticating"} %button.sk-button.info.featured{"type" => "submit", "ng-disabled" => "formData.authenticating"}
.label {{formData.showLogin ? "Sign In" : "Register"}} .sk-label {{formData.showLogin ? "Sign In" : "Register"}}
%label %label
%input{"type" => "checkbox", "ng-model" => "formData.ephemeral", "ng-true-value" => "false", "ng-false-value" => "true"} %input{"type" => "checkbox", "ng-model" => "formData.ephemeral", "ng-true-value" => "false", "ng-false-value" => "true"}
@@ -58,82 +57,85 @@
%em.block.center-align.mt-10{"ng-if" => "formData.status", "style" => "font-size: 14px;"} %em.block.center-align.mt-10{"ng-if" => "formData.status", "style" => "font-size: 14px;"}
{{formData.status}} {{formData.status}}
.panel-section{"ng-if" => "formData.mfa"} .sk-panel-section{"ng-if" => "formData.mfa"}
%form{"ng-submit" => "submitMfaForm()"} %form{"ng-submit" => "submitMfaForm()"}
%p {{formData.mfa.message}} %p {{formData.mfa.message}}
%input.form-control.mt-10{:placeholder => "Enter Code", "sn-autofocus" => "true", "should-focus" => "true", :autofocus => "true", :name => 'mfa', :required => true, 'ng-model' => 'formData.userMfaCode'} %input.sk-input.mt-10{:placeholder => "Enter Code", "sn-autofocus" => "true", "should-focus" => "true", :autofocus => "true", :name => 'mfa', :required => true, 'ng-model' => 'formData.userMfaCode'}
.button-group.stretch.panel-row.form-submit .sk-button-group.stretch.sk-panel-row.form-submit
%button.button.info.featured{"type" => "submit"} %button.button.info.featured{"type" => "submit"}
.label Sign In .sk-label Sign In
%div{"ng-if" => "!formData.showLogin && !formData.showRegister && !formData.mfa"} %div{"ng-if" => "!formData.showLogin && !formData.showRegister && !formData.mfa"}
.panel-section{"ng-if" => "user"} .sk-panel-section{"ng-if" => "user"}
.notification.danger{"ng-if" => "syncStatus.error"} .sk-notification.danger{"ng-if" => "syncStatus.error"}
%h2.title Sync Unreachable .sk-notification-title Sync Unreachable
.text Hmm...we can't seem to sync your account. The reason: {{syncStatus.error.message}} .sk-notification-text Hmm...we can't seem to sync your account. The reason: {{syncStatus.error.message}}
%p %p
%a{"href" => "https://standardnotes.org/help", "target" => "_blank"} Need help? %a{"href" => "https://standardnotes.org/help", "target" => "_blank"} Need help?
.panel-row
%h2.title.wrap {{user.email}} .sk-panel-row
.horizontal-group{"delay-hide" => "true", "show" => "syncStatus.syncOpInProgress || syncStatus.needsMoreSync", "delay" => "1000"} .sk-panel-column
.spinner.small.info .sk-h1.sk-bold.wrap {{user.email}}
.sublabel .sk-subtitle.subtle.normal {{server}}
.sk-horizontal-group{"delay-hide" => "true", "show" => "syncStatus.syncOpInProgress || syncStatus.needsMoreSync", "delay" => "1000"}
.sk-spinner.small.info
.sk-sublabel
{{"Syncing" + (syncStatus.total > 0 ? ":" : "")}} {{"Syncing" + (syncStatus.total > 0 ? ":" : "")}}
%span{"ng-if" => "syncStatus.total > 0"} {{syncStatus.current}}/{{syncStatus.total}} %span{"ng-if" => "syncStatus.total > 0"} {{syncStatus.current}}/{{syncStatus.total}}
.subtitle.subtle.normal {{server}}
.panel-row .sk-panel-row
%a.panel-row.condensed{"ng-click" => "openPasswordWizard('change-pw')"} Change Password %a.sk-a.info.sk-panel-row.condensed{"ng-click" => "openPasswordWizard('change-pw')"} Change Password
%a.panel-row.justify-left.condensed.success{"ng-if" => "securityUpdateAvailable", "ng-click" => "openPasswordWizard('upgrade-security')"} %a.sk-panel-row.justify-left.condensed.success{"ng-if" => "securityUpdateAvailable", "ng-click" => "openPasswordWizard('upgrade-security')"}
.inline.circle.small.success.mr-8 .inline.sk-circle.small.success.mr-8
.inline Security Update Available .inline Security Update Available
.panel-section .sk-panel-section
%h3.title.panel-row Encryption .sk-panel-section-title Encryption
%h5.subtitle.info.panel-row{"ng-if" => "encryptionEnabled()"} .sk-panel-section-subtitle.info{"ng-if" => "encryptionEnabled()"}
{{encryptionStatusForNotes()}} {{encryptionStatusForNotes()}}
%p %p.sk-p
{{encryptionStatusString()}} {{encryptionStatusString()}}
.panel-section .sk-panel-section
%h3.title.panel-row Passcode Lock .sk-panel-section-title Passcode Lock
%div{"ng-if" => "!hasPasscode()"} %div{"ng-if" => "!hasPasscode()"}
%div{"ng-if" => "canAddPasscode"} %div{"ng-if" => "canAddPasscode"}
.panel-row{"ng-if" => "!formData.showPasscodeForm"} .sk-panel-row{"ng-if" => "!formData.showPasscodeForm"}
.button.info{"ng-click" => "addPasscodeClicked(); $event.stopPropagation();"} .sk-button.info{"ng-click" => "addPasscodeClicked(); $event.stopPropagation();"}
.label Add Passcode .sk-label Add Passcode
%p Add an app passcode to lock the app and encrypt on-device key storage. %p.sk-p Add an app passcode to lock the app and encrypt on-device key storage.
%div{"ng-if" => "!canAddPasscode"} %div{"ng-if" => "!canAddPasscode"}
%p Adding a passcode is not supported in temporary sessions. Please sign out, then sign back in with the "Stay signed in" option checked. %p.sk-p Adding a passcode is not supported in temporary sessions. Please sign out, then sign back in with the "Stay signed in" option checked.
%form{"ng-if" => "formData.showPasscodeForm", "ng-submit" => "submitPasscodeForm()"} %form.sk-panel-form{"ng-if" => "formData.showPasscodeForm", "ng-submit" => "submitPasscodeForm()"}
%input.form-control{:type => 'password', "ng-model" => "formData.passcode", "placeholder" => "Passcode", "sn-autofocus" => "true", "should-focus" => "true"} .sk-panel-row
%input.form-control{:type => 'password', "ng-model" => "formData.confirmPasscode", "placeholder" => "Confirm Passcode"} %input.sk-input{:type => 'password', "ng-model" => "formData.passcode", "placeholder" => "Passcode", "sn-autofocus" => "true", "should-focus" => "true"}
.button-group.stretch.panel-row.form-submit %input.sk-input{:type => 'password', "ng-model" => "formData.confirmPasscode", "placeholder" => "Confirm Passcode"}
%button.button.info{"type" => "submit"} .sk-button-group.stretch.sk-panel-row.form-submit
.label Set Passcode %button.sk-button.info{"type" => "submit"}
%a.panel-row{"ng-click" => "formData.showPasscodeForm = false"} Cancel .sk-label Set Passcode
%a.neutral.sk-a.sk-panel-row{"ng-click" => "formData.showPasscodeForm = false"} Cancel
%div{"ng-if" => "hasPasscode() && !formData.showPasscodeForm"} %div{"ng-if" => "hasPasscode() && !formData.showPasscodeForm"}
.panel-row .sk-panel-row
%p %p.sk-p
Passcode lock is enabled. Passcode lock is enabled.
%span{"ng-if" => "isDesktopApplication()"} Your passcode will be required on new sessions after app quit. %span{"ng-if" => "isDesktopApplication()"} Your passcode will be required on new sessions after app quit.
.panel-row.justify-left .sk-panel-row.justify-left
.horizontal-group .sk-horizontal-group
%a.info{"ng-click" => "changePasscodePressed()"} Change Passcode %a.sk-a.info{"ng-click" => "changePasscodePressed()"} Change Passcode
%a.danger{"ng-click" => "removePasscodePressed()"} Remove Passcode %a.sk-a.danger{"ng-click" => "removePasscodePressed()"} Remove Passcode
.panel-section{"ng-if" => "!importData.loading"} .sk-panel-section{"ng-if" => "!importData.loading"}
%h3.title Data Backups .sk-panel-section-title Data Backups
%form.panel-form{"ng-if" => "encryptedBackupsAvailable()"} %form.sk-panel-form.sk-panel-row{"ng-if" => "encryptedBackupsAvailable()"}
.input-group .sk-input-group
%label %label
%input{"type" => "radio", "ng-model" => "archiveFormData.encrypted", "ng-value" => "true", "ng-change" => "archiveFormData.encrypted = true"} %input{"type" => "radio", "ng-model" => "archiveFormData.encrypted", "ng-value" => "true", "ng-change" => "archiveFormData.encrypted = true"}
Encrypted Encrypted
@@ -141,30 +143,30 @@
%input{"type" => "radio", "ng-model" => "archiveFormData.encrypted", "ng-value" => "false", "ng-change" => "archiveFormData.encrypted = false"} %input{"type" => "radio", "ng-model" => "archiveFormData.encrypted", "ng-value" => "false", "ng-change" => "archiveFormData.encrypted = false"}
Decrypted Decrypted
.button-group .sk-button-group.sk-panel-row.justify-left
.button.info{"ng-click" => "downloadDataArchive()"} .sk-button.info{"ng-click" => "downloadDataArchive()"}
.label Download Backup .sk-label Download Backup
%label.button.info %label.sk-button.info
%input{"type" => "file", "style" => "display: none;", "file-change" => "->", "handler" => "importFileSelected(files)"} %input{"type" => "file", "style" => "display: none;", "file-change" => "->", "handler" => "importFileSelected(files)"}
.label Import From Backup .sk-label Import From Backup
%span{"ng-if" => "isDesktopApplication()"} Backups are automatically created on desktop and can be managed via the "Backups" top-level menu. %span{"ng-if" => "isDesktopApplication()"} Backups are automatically created on desktop and can be managed via the "Backups" top-level menu.
#import-password-request{"ng-if" => "importData.requestPassword"} #import-password-request{"ng-if" => "importData.requestPassword"}
%form.panel-form.stretch{"ng-submit" => "submitImportPassword()"} %form.sk-panel-form.stretch{"ng-submit" => "submitImportPassword()"}
%p Enter the account password associated with the import file. %p Enter the account password associated with the import file.
%input.form-control.mt-5{:type => 'password', "placeholder" => "Enter File Account Password", "ng-model" => "importData.password", "autofocus" => "true"} %input.sk-input.mt-5{:type => 'password', "placeholder" => "Enter File Account Password", "ng-model" => "importData.password", "autofocus" => "true"}
.button-group.stretch.panel-row.form-submit .sk-button-group.stretch.sk-panel-row.form-submit
%button.button.info{"type" => "submit"} %button.sk-button.info{"type" => "submit"}
.label Decrypt & Import .sk-label Decrypt & Import
%p %p
Importing from backup will not overwrite existing data, but instead create a duplicate of any differing data. Importing from backup will not overwrite existing data, but instead create a duplicate of any differing data.
%p If you'd like to import only a selection of items instead of the whole file, please use the Batch Manager extension. %p If you'd like to import only a selection of items instead of the whole file, please use the Batch Manager extension.
.panel-row .sk-panel-row
.spinner.small.info{"ng-if" => "importData.loading"} .sk-spinner.small.info{"ng-if" => "importData.loading"}
.footer .sk-panel-footer
%a.right{"ng-if" => "formData.showLogin || formData.showRegister", "ng-click" => "formData.showLogin = false; formData.showRegister = false;"} %a.sk-a.right{"ng-if" => "formData.showLogin || formData.showRegister", "ng-click" => "formData.showLogin = false; formData.showRegister = false;"}
Cancel Cancel
%a.right{"ng-if" => "!formData.showLogin && !formData.showRegister", "ng-click" => "destroyLocalData()"} %a.sk-a.right.danger{"ng-if" => "!formData.showLogin && !formData.showRegister", "ng-click" => "destroyLocalData()"}
{{ user ? "Sign out and clear local data" : "Clear all local data" }} {{ user ? "Sign out and clear local data" : "Clear all local data" }}

View File

@@ -1,20 +1,20 @@
.sn-component .sn-component
.menu-panel.dropdown-menu .sk-menu-panel.dropdown-menu
%a.no-decoration{"ng-if" => "extensions.length == 0", "href" => "https://standardnotes.org/extensions", "target" => "blank"} %a.no-decoration{"ng-if" => "extensions.length == 0", "href" => "https://standardnotes.org/extensions", "target" => "blank"}
%menu-row{"label" => "'Download Actions'"} %menu-row{"label" => "'Download Actions'"}
%div{"ng-repeat" => "extension in extensions"} %div{"ng-repeat" => "extension in extensions"}
.header{"ng-click" => "extension.hide = !extension.hide; $event.stopPropagation();"} .sk-menu-panel-header{"ng-click" => "extension.hide = !extension.hide; $event.stopPropagation();"}
.column .sk-menu-panel-column
%h4.title {{extension.name}} .sk-menu-panel-header-title {{extension.name}}
.spinner.small.loading{"ng-if" => "extension.loading"} .sk-spinner.small.loading{"ng-if" => "extension.loading"}
%div{"ng-if" => "extension.hide"} … %div{"ng-if" => "extension.hide"} …
%menu-row{"ng-if" => "!extension.hide", "ng-repeat" => "action in extension.actionsWithContextForItem(item)", %menu-row{"ng-if" => "!extension.hide", "ng-repeat" => "action in extension.actionsWithContextForItem(item)",
"action" => "executeAction(action, extension);", "label" => "action.label", "subtitle" => "action.desc", "action" => "executeAction(action, extension);", "label" => "action.label", "subtitle" => "action.desc",
"spinner-class" => "action.running ? 'info' : null", "sub-rows" => "action.subrows"} "spinner-class" => "action.running ? 'info' : null", "sub-rows" => "action.subrows"}
.sublabel{"ng-if" => "action.access_type"} .sk-sublabel{"ng-if" => "action.access_type"}
Uses Uses
%strong {{action.access_type}} %strong {{action.access_type}}
access to this note. access to this note.

View File

@@ -2,9 +2,9 @@
.content{"ng-attr-id" => "component-content-outer-{{component.uuid}}"} .content{"ng-attr-id" => "component-content-outer-{{component.uuid}}"}
.sn-component .sn-component
.panel{"ng-attr-id" => "component-content-inner-{{component.uuid}}"} .sk-panel{"ng-attr-id" => "component-content-inner-{{component.uuid}}"}
.header .sk-panel-header
%h1.title .sk-panel-header-title
{{component.name}} {{component.name}}
%a.close-button.info{"ng-click" => "dismiss()"} Close %a.sk-a.info.close-button{"ng-click" => "dismiss()"} Close
%component-view.component-view{"component" => "component"} %component-view.component-view{"component" => "component"}

View File

@@ -1,35 +1,35 @@
.sn-component{"ng-if" => "issueLoading"} .sn-component{"ng-if" => "issueLoading"}
.app-bar.no-edges.no-top-edge .sk-app-bar.no-edges.no-top-edge
.left .left
.item .sk-app-bar-item
.label.warning There was an issue loading {{component.name}}. .sk-label.warning There was an issue loading {{component.name}}.
.right .right
.item{"ng-click" => "reloadComponent()"} .sk-app-bar-item{"ng-click" => "reloadComponent()"}
.label Reload .sk-label Reload
.sn-component{"ng-if" => "showNoThemesMessage"} .sn-component{"ng-if" => "showNoThemesMessage"}
.app-bar.no-edges.no-top-edge .sk-app-bar.no-edges.no-top-edge
.left .left
.item .sk-app-bar-item
.label.warning This extension does not support themes. .sk-label.warning This extension does not support themes.
.right .right
.item{"ng-click" => "noThemesMessageDismiss()"} .sk-app-bar-item{"ng-click" => "noThemesMessageDismiss()"}
.label Dismiss .sk-label Dismiss
.item{"ng-click" => "disableActiveTheme()"} .sk-app-bar-item{"ng-click" => "disableActiveTheme()"}
.label Disable Active Theme .sk-label Disable Active Theme
.sn-component{"ng-if" => "error == 'expired'"} .sn-component{"ng-if" => "error == 'expired'"}
.panel.static .sk-panel.static
.content .sk-panel-content
.panel-section.stretch .sk-panel-section.stretch
%h2.title Unable to load Standard Notes Extended .sk-panel-sectin-title Unable to load Standard Notes Extended
%p Your Extended subscription expired on {{component.dateToLocalizedString(component.valid_until)}}. %p Your Extended subscription expired on {{component.dateToLocalizedString(component.valid_until)}}.
%p %p
Please visit Please visit
%a{"href" => "https://dashboard.standardnotes.org", "target" => "_blank"} dashboard.standardnotes.org %a{"href" => "https://dashboard.standardnotes.org", "target" => "_blank"} dashboard.standardnotes.org
to renew your subscription. to renew your subscription.
.panel-row .sk-panel-row
.panel-column .sk-panel-column
%p %p
%strong To reload your account status: %strong To reload your account status:
%p %p
@@ -40,25 +40,25 @@
menu located in the lower left corner of the app to refresh your account status. menu located in the lower left corner of the app to refresh your account status.
%li Click Reload below. %li Click Reload below.
.panel-row .sk-panel-row
.button.info{"ng-if" => "!reloading", "ng-click" => "reloadStatus()"} .sk-button.info{"ng-if" => "!reloading", "ng-click" => "reloadStatus()"}
.label Reload .sk-label Reload
.spinner.info.small{"ng-if" => "reloading"} .sk-spinner.info.small{"ng-if" => "reloading"}
.panel-row .sk-panel-row
.panel-section .sk-panel-section
%p{"ng-if" => "component.isEditor()"} %p{"ng-if" => "component.isEditor()"}
<strong>Otherwise</strong>, please follow the steps below to disable any external editors, <strong>Otherwise</strong>, please follow the steps below to disable any external editors,
so you can edit your note using the plain text editor instead. so you can edit your note using the plain text editor instead.
%p To temporarily disable this extension: %p To temporarily disable this extension:
.panel-row .sk-panel-row
.button.info{"ng-click" => "destroy()"} .sk-button.info{"ng-click" => "destroy()"}
.label Disable Extension .sk-label Disable Extension
.spinner.info.small{"ng-if" => "reloading"} .sk-spinner.info.small{"ng-if" => "reloading"}
.panel-row .sk-panel-row
%div{"ng-if" => "component.isEditor()"} %div{"ng-if" => "component.isEditor()"}
%p To disassociate this note from this editor: %p To disassociate this note from this editor:
@@ -76,28 +76,28 @@
page. page.
.sn-component{"ng-if" => "error == 'offline-restricted'"} .sn-component{"ng-if" => "error == 'offline-restricted'"}
.panel.static .sk-panel.static
.content .sk-panel-content
.panel-section.stretch .sk-panel-section.stretch
%h2.title You have restricted this extension to be used offline only. .sk-panel-section-title You have restricted this extension to be used offline only.
%p Offline extensions are not available in the Web app. %p Offline extensions are not available in the Web app.
.panel-row .sk-panel-row
.panel-column .sk-panel-column
%p You can either: %p You can either:
%p %p
%ul %ul
%li <strong>Enable the Hosted option</strong> for this extension by opening the 'Extensions' menu and toggling 'Use hosted when local is unavailable' under this extension's options. Then press Reload below. %li <strong>Enable the Hosted option</strong> for this extension by opening the 'Extensions' menu and toggling 'Use hosted when local is unavailable' under this extension's options. Then press Reload below.
%li <strong>Use the Desktop application.</strong> %li <strong>Use the Desktop application.</strong>
.panel-row .sk-panel-row
.button.info{"ng-if" => "!reloading", "ng-click" => "reloadStatus()"} .sk-button.info{"ng-if" => "!reloading", "ng-click" => "reloadStatus()"}
.label Reload .sk-label Reload
.spinner.info.small{"ng-if" => "reloading"} .sk-spinner.info.small{"ng-if" => "reloading"}
.sn-component{"ng-if" => "error == 'url-missing'"} .sn-component{"ng-if" => "error == 'url-missing'"}
.panel.static .sk-panel.static
.content .sk-panel-content
.panel-section.stretch .sk-panel-section.stretch
%h2.title This extension is not installed correctly. .sk-panel-section-title This extension is not installed correctly.
%p Please uninstall {{component.name}}, then re-install it. %p Please uninstall {{component.name}}, then re-install it.
%p %p

View File

@@ -1,26 +1,26 @@
.modal.large#conflict-resolution-modal .modal.large#conflict-resolution-modal
.content .content
.sn-component .sn-component
.panel .sk-panel
.header .sk-panel-header
%h1.title Conflicted items — choose which version to keep %h1.sk-panel-header-title Conflicted items — choose which version to keep
.horizontal-group .sk-horizontal-group
%a.close-button.info{"ng-click" => "keepItem1()"} Keep left %a.sk-a.info.close-button{"ng-click" => "keepItem1()"} Keep left
%a.close-button.info{"ng-click" => "keepItem2()"} Keep right %a.sk-a.info.close-button{"ng-click" => "keepItem2()"} Keep right
%a.close-button.info{"ng-click" => "keepBoth()"} Keep both %a.sk-a.info.close-button{"ng-click" => "keepBoth()"} Keep both
%a.close-button.info{"ng-click" => "export()"} Export %a.sk-a.info.close-button{"ng-click" => "export()"} Export
%a.close-button.info{"ng-click" => "dismiss(); $event.stopPropagation()"} Close %a.sk-a.info.close-button{"ng-click" => "dismiss(); $event.stopPropagation()"} Close
.content.selectable .sk-panel-content.selectable
.panel-section .sk-panel-section
%h3 %h3
%strong Content type: %strong Content type:
{{contentType}} {{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. %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 #items
.panel.static#item1.item.border-color .sk-panel.static#item1.item.border-color
%p.normal{"style" => "white-space: pre-wrap; font-size: 16px;"} {{item1Content}} %p.normal{"style" => "white-space: pre-wrap; font-size: 16px;"} {{item1Content}}
.border .border
.panel.static#item2.item .sk-panel.static#item2.item
%p.normal{"style" => "white-space: pre-wrap; font-size: 16px;"} {{item2Content}} %p.normal{"style" => "white-space: pre-wrap; font-size: 16px;"} {{item2Content}}

View File

@@ -1,26 +1,26 @@
.sn-component .sn-component
.menu-panel.dropdown-menu .sk-menu-panel.dropdown-menu
.section .sk-menu-panel-section
.header .sk-menu-panel-header
%h4.title Note Editor .sk-menu-panel-header-title Note Editor
%menu-row{"label" => "'Plain Editor'", "circle" => "selectedEditor == null && 'success'", "action" => "selectComponent(null)"} %menu-row{"label" => "'Plain Editor'", "circle" => "selectedEditor == null && 'success'", "action" => "selectComponent(null)"}
%menu-row{"ng-repeat" => "editor in editors", "action" => "selectComponent(editor)", "label" => "editor.name", %menu-row{"ng-repeat" => "editor in editors", "action" => "selectComponent(editor)", "label" => "editor.name",
"circle" => "selectedEditor === editor && 'success'", "circle" => "selectedEditor === editor && 'success'",
"has-button" => "selectedEditor == editor || defaultEditor == editor", "button-text" => "defaultEditor == editor ? 'Undefault' : 'Set Default'", "has-button" => "selectedEditor == editor || defaultEditor == editor", "button-text" => "defaultEditor == editor ? 'Undefault' : 'Set Default'",
"button-action" => "toggleDefaultForEditor(editor)", "button-class" => "defaultEditor == editor ? 'warning' : 'info'"} "button-action" => "toggleDefaultForEditor(editor)", "button-class" => "defaultEditor == editor ? 'warning' : 'info'"}
.column{"ng-if" => "component.conflict_of || shouldDisplayRunningLocallyLabel(editor)"} .sk-menu-panel-column{"ng-if" => "component.conflict_of || shouldDisplayRunningLocallyLabel(editor)"}
%strong.red.medium-text{"ng-if" => "editor.conflict_of"} Conflicted copy %strong.danger.medium-text{"ng-if" => "editor.conflict_of"} Conflicted copy
.sublabel{"ng-if" => "shouldDisplayRunningLocallyLabel(editor)"} Running Locally .sk-sublabel{"ng-if" => "shouldDisplayRunningLocallyLabel(editor)"} Running Locally
%a.no-decoration{"ng-if" => "editors.length == 0", "href" => "https://standardnotes.org/extensions", "target" => "blank"} %a.no-decoration{"ng-if" => "editors.length == 0", "href" => "https://standardnotes.org/extensions", "target" => "blank"}
%menu-row{"label" => "'Download More Editors'"} %menu-row{"label" => "'Download More Editors'"}
.section{"ng-if" => "stack.length > 0"} .sk-menu-panel-section{"ng-if" => "stack.length > 0"}
.header .sk-menu-panel-header
%h4.title Editor Stack .sk-menu-panel-header-title Editor Stack
%menu-row{"ng-repeat" => "component in stack", "action" => "selectComponent(component)", "label" => "component.name", %menu-row{"ng-repeat" => "component in stack", "action" => "selectComponent(component)", "label" => "component.name",
"circle" => "stackComponentEnabled(component) ? 'success' : 'danger'"} "circle" => "stackComponentEnabled(component) ? 'success' : 'danger'"}
.column{"ng-if" => "component.conflict_of || shouldDisplayRunningLocallyLabel(component)"} .sk-menu-panel-column{"ng-if" => "component.conflict_of || shouldDisplayRunningLocallyLabel(component)"}
%strong.red.medium-text{"ng-if" => "component.conflict_of"} Conflicted copy %strong.danger.medium-text{"ng-if" => "component.conflict_of"} Conflicted copy
.sublabel{"ng-if" => "shouldDisplayRunningLocallyLabel(component)"} Running Locally .sk-sublabel{"ng-if" => "shouldDisplayRunningLocallyLabel(component)"} Running Locally

View File

@@ -1,18 +1,18 @@
.modal.small.auto-height .modal.small.auto-height
.content .content
.sn-component .sn-component
.panel .sk-panel
.header .sk-panel-header
%h1.title {{title}} %h1.sk-panel-header-title {{title}}
%a.close-button{"ng-click" => "dismiss()"} Close %a.sk-a.info.close-button{"ng-click" => "dismiss()"} Close
.content .sk-panel-content
.panel-section .sk-panel-section
%p.panel-row {{message}} %p.sk-panel-row {{message}}
.panel-row .sk-panel-row
.panel-column.stretch .sk-panel-column.stretch
%form{"ng-submit" => "submit()"} %form{"ng-submit" => "submit()"}
%input.form-control{:type => '{{type}}', "ng-model" => "formData.input", "placeholder" => "{{placeholder}}", "sn-autofocus" => "true", "should-focus" => "true"} %input.sk-input{:type => '{{type}}', "ng-model" => "formData.input", "placeholder" => "{{placeholder}}", "sn-autofocus" => "true", "should-focus" => "true"}
.footer .sk-panel-footer
%a.right{"ng-click" => "submit()"} %a.sk-a.info.right{"ng-click" => "submit()"}
Submit Submit

View File

@@ -1,21 +1,21 @@
.row{"ng-attr-title" => "{{desc}}", "ng-click" => "onClick($event)"} .sk-menu-panel-row.row{"ng-attr-title" => "{{desc}}", "ng-click" => "onClick($event)"}
.column .sk-menu-panel-column
.left .left
.column{"ng-if" => "circle"} .sk-menu-panel-column{"ng-if" => "circle"}
.circle.small{"ng-class" => "circle"} .sk-circle.small{"ng-class" => "circle"}
.column{"ng-class" => "{'faded' : faded || disabled}"} .sk-menu-panel-column{"ng-class" => "{'faded' : faded || disabled}"}
.label .sk-label
{{label}} {{label}}
.sublabel{"ng-if" => "subtitle"} .sk-sublabel{"ng-if" => "subtitle"}
{{subtitle}} {{subtitle}}
%ng-transclude %ng-transclude
.subrows{"ng-if" => "subRows && subRows.length > 0"} .sk-menu-panel-subrows{"ng-if" => "subRows && subRows.length > 0"}
%menu-row{"ng-repeat" => "row in subRows", "action" => "row.onClick()", %menu-row{"ng-repeat" => "row in subRows", "action" => "row.onClick()",
"label" => "row.label", "subtitle" => "row.subtitle", "spinner-class" => "row.spinnerClass"} "label" => "row.label", "subtitle" => "row.subtitle", "spinner-class" => "row.spinnerClass"}
.column{"ng-if" => "hasButton"} .sk-menu-panel-column{"ng-if" => "hasButton"}
.button.info{"ng-click" => "clickButton($event)", "ng-class" => "buttonClass"} .sk-button{"ng-click" => "clickButton($event)", "ng-class" => "buttonClass"}
{{buttonText}} .sk-label {{buttonText}}
.column{"ng-if" => "spinnerClass"} .sk-menu-panel-column{"ng-if" => "spinnerClass"}
.spinner.small{"ng-class" => "spinnerClass"} .sk-spinner.small{"ng-class" => "spinnerClass"}

View File

@@ -1,108 +1,103 @@
#password-wizard.modal.small.auto-height #password-wizard.modal.small.auto-height
.content .content
.sn-component .sn-component
.panel .sk-panel
.header .sk-panel-header
%h1.title {{title}} .sk-panel-header-title {{title}}
%a.close-button{"ng-click" => "dismiss()"} Close %a.sk-a.info.close-button{"ng-click" => "dismiss()"} Close
.content .sk-panel-content
%div{"ng-if" => "step == 0"} %div{"ng-if" => "step == 0"}
%div{"ng-if" => "changePassword"} %div{"ng-if" => "changePassword"}
%h2.title.panel-row Change your password %p.sk-p
%p
Changing your password involves changing your encryption key, which requires your data to be re-encrypted and synced. 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. If you have many items, syncing your data can take several minutes.
%p.panel-row %p.sk-p
%strong You must keep the application window open during this process. %strong You must keep the application window open during this process.
%div{"ng-if" => "securityUpdate"} %div{"ng-if" => "securityUpdate"}
%h2.title.panel-row Perform security update %p.sk-p
%p
A new update is available for your account. Updates address improvements and enhancements to our security specification. 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. This process will guide you through the update, and perform the steps necessary with your supervision.
%p %p.sk-p
For more information about security updates, please visit For more information about security updates, please visit
%a{"href" => "https://standardnotes.org/help/security", "target" => "_blank"} standardnotes.org/help/security. %a.sk-a.info{"href" => "https://standardnotes.org/help/security", "target" => "_blank"} standardnotes.org/help/security.
%p.panel-row %p.sk-panel-row.sk-p
.info Press Continue to proceed. .info Press Continue to proceed.
.panel-row .sk-panel-section{"ng-if" => "step > 0"}
.panel-row
.panel-section{"ng-if" => "step > 0"} .sk-panel-section-title Step {{step}} — {{titleForStep(step)}}
%h3.title.panel-row Step {{step}} — {{titleForStep(step)}}
%div{"ng-if" => "step == 1"} %div{"ng-if" => "step == 1"}
%p.panel-row %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, 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. 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. It's best to be on the safe side before large operations such as this one.
.panel-row .sk-panel-row
.panel-row .sk-panel-row
.button-group .sk-button-group
.button.info{"ng-click" => "downloadBackup(true)"} .sk-button.info{"ng-click" => "downloadBackup(true)"}
.label Download Encrypted Backup .sk-label Download Encrypted Backup
.button.info{"ng-click" => "downloadBackup(false)"} .sk-button.info{"ng-click" => "downloadBackup(false)"}
.label Download Decrypted Backup .sk-label Download Decrypted Backup
%div{"ng-if" => "step == 2"} %div{"ng-if" => "step == 2"}
%p.panel-row %p.sk-p.sk-panel-row
As a result of this process, your encryption keys will change. 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. 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.bold.panel-row.info-i Please sign out of all applications (excluding this one), including: %p.sk-p.bold.sk-panel-row.info-i Please sign out of all applications (excluding this one), including:
%ul %ul
%li Desktop %li Desktop
%li Web (Chrome, Firefox, Safari) %li Web (Chrome, Firefox, Safari)
%li Mobile (iOS and Android) %li Mobile (iOS and Android)
%p.panel-row %p.sk-p.sk-panel-row
If you do not currently have access to a device you're signed in on, you may proceed, 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. but must make signing out and back in the first step upon gaining access to that device.
%p.panel-row Press Continue only when you have completed signing out of all your devices. %p.sk-p.sk-panel-row Press Continue only when you have completed signing out of all your devices.
%div{"ng-if" => "step == 3"} %div{"ng-if" => "step == 3"}
%div{"ng-if" => "changePassword"} %div{"ng-if" => "changePassword"}
%div{"ng-if" => "securityUpdate"} %div{"ng-if" => "securityUpdate"}
%p.panel-row Enter your current password. We'll run this through our encryption scheme to generate strong new encryption keys. %p.sk-panel-row Enter your current password. We'll run this through our encryption scheme to generate strong new encryption keys.
.panel-row .sk-panel-row
.panel-row .sk-panel-row
.panel-column.stretch .sk-panel-column.stretch
%form %form.sk-panel-form
%input.form-control{:type => 'password', "ng-model" => "formData.currentPassword", "placeholder" => "Current Password", "sn-autofocus" => "true", "should-focus" => "true"} %input.sk-input{:type => 'password', "ng-model" => "formData.currentPassword", "placeholder" => "Current Password", "sn-autofocus" => "true", "should-focus" => "true"}
%input.form-control{"ng-if" => "changePassword", :type => 'password', "ng-model" => "formData.newPassword", "placeholder" => "New Password"} %input.sk-input{"ng-if" => "changePassword", :type => 'password', "ng-model" => "formData.newPassword", "placeholder" => "New Password"}
%input.form-control{"ng-if" => "changePassword", :type => 'password', "ng-model" => "formData.newPasswordConfirmation", "placeholder" => "Confirm New Password"} %input.sk-input{"ng-if" => "changePassword", :type => 'password', "ng-model" => "formData.newPasswordConfirmation", "placeholder" => "Confirm New Password"}
%div{"ng-if" => "step == 4"} %div{"ng-if" => "step == 4"}
%p.panel-row %p.sk-panel-row
Your data is being re-encrypted with your new keys and synced to your account. Your data is being re-encrypted with your new keys and synced to your account.
%p.panel-row.danger %p.sk-panel-row.danger
Do not close this window until this process completes. Do not close this window until this process completes.
.panel-row .sk-panel-row
.panel-column .sk-panel-column
.spinner.small.inline.info.mr-5{"ng-if" => "formData.processing"} .sk-spinner.small.inline.info.mr-5{"ng-if" => "formData.processing"}
.inline.bold{"ng-class" => "{'info' : !formData.statusError, 'error' : formData.statusError}"} .inline.bold{"ng-class" => "{'info' : !formData.statusError, 'error' : formData.statusError}"}
{{formData.status}} {{formData.status}}
.panel-column{"delay-hide" => "true", "show" => "syncStatus.syncOpInProgress || syncStatus.needsMoreSync", "delay" => "1000"} .sk-panel-column{"delay-hide" => "true", "show" => "syncStatus.syncOpInProgress || syncStatus.needsMoreSync", "delay" => "1000"}
%p.info %p.info
Syncing {{syncStatus.current}}/{{syncStatus.total}} Syncing {{syncStatus.current}}/{{syncStatus.total}}
%div{"ng-if" => "step == 5"} %div{"ng-if" => "step == 5"}
%div{"ng-if" => "changePassword"} %div{"ng-if" => "changePassword"}
%p.panel-row Your password has been successfully changed. %p.sk-panel-row Your password has been successfully changed.
%div{"ng-if" => "securityUpdate"} %div{"ng-if" => "securityUpdate"}
%p.panel-row %p.sk-panel-row
The security update has been successfully applied to your account. The security update has been successfully applied to your account.
%p.panel-row %p.sk-panel-row
%strong Please ensure you are running the latest version of Standard Notes on all platforms to ensure maximum compatibility. %strong Please ensure you are running the latest version of Standard Notes on all platforms to ensure maximum compatibility.
%p.panel-row You may now sign back in on all your devices and close this window. %p.sk-panel-row You may now sign back in on all your devices and close this window.
.footer .sk-panel-footer
.empty .empty
%a.right{"ng-click" => "continue()", "ng-disabled" => "lockContinue", "ng-class" => "{'disabled' : lockContinue}"} %a.sk-a.info.right{"ng-click" => "continue()", "ng-disabled" => "lockContinue", "ng-class" => "{'disabled' : lockContinue}"}
.spinner.small.inline.info.mr-5{"ng-if" => "showSpinner"} .sk-spinner.small.inline.info.mr-5{"ng-if" => "showSpinner"}
{{continueTitle}} {{continueTitle}}

View File

@@ -2,21 +2,22 @@
.content#permissions-modal .content#permissions-modal
.sn-component .sn-component
.panel .sk-panel
.header .sk-panel-header
%h1.title Activate Extension %h1.sk-panel-header-title Activate Extension
%a.close-button.info{"ng-click" => "deny()"} Cancel %a.sk-a.info.close-button{"ng-click" => "deny()"} Cancel
.content .sk-panel-content
.panel-section .sk-panel-section
.panel-row .sk-panel-row
%h3 %h3
%strong {{component.name}} %strong {{component.name}}
would like to interact with your would like to interact with your
{{permissionsString()}} {{permissionsString()}}
.panel-row .sk-panel-row
%p %p
Extensions use an offline messaging system to communicate. Learn more at Extensions use an offline messaging system to communicate. Learn more at
%a{"href" => "https://standardnotes.org/permissions", "target" => "_blank"} https://standardnotes.org/permissions. %a.sk-a.info{"href" => "https://standardnotes.org/permissions", "target" => "_blank"} https://standardnotes.org/permissions.
.footer .sk-panel-footer
.button.info.big.block.bold{"ng-click" => "accept()"} Continue .sk-button.info.big.block.bold{"ng-click" => "accept()"}
.sk-label Continue

View File

@@ -1,13 +1,13 @@
.modal.medium#item-preview-modal .modal.medium#item-preview-modal
.content .content
.sn-component .sn-component
.panel .sk-panel
.header .sk-panel-header
%h1.title Preview .sk-panel-header-title Preview
.horizontal-group .sk-horizontal-group
%a.close-button.info{"ng-click" => "restore(false)"} Restore %a.sk-a.info.close-button{"ng-click" => "restore(false)"} Restore
%a.close-button.info{"ng-click" => "restore(true)"} Restore as copy %a.sk-a.info.close-button{"ng-click" => "restore(true)"} Restore as copy
%a.close-button.info{"ng-click" => "dismiss(); $event.stopPropagation()"} Close %a.sk-a.info.close-button{"ng-click" => "dismiss(); $event.stopPropagation()"} Close
.content.selectable .sk-panel-content.selectable
%h2 {{content.title}} .sk-h2 {{content.title}}
%p.normal{"style" => "white-space: pre-wrap; font-size: 16px;"} {{content.text}} %p.normal.sk-p{"style" => "white-space: pre-wrap; font-size: 16px;"} {{content.text}}

View File

@@ -1,23 +1,23 @@
.sn-component#session-history-menu .sn-component#session-history-menu
.menu-panel.dropdown-menu .sk-menu-panel.dropdown-menu
.header .sk-menu-panel-header
.column .sk-menu-panel-column
%h4.title {{history.entries.length || 'No'}} revisions .sk-menu-panel-header-title {{history.entries.length || 'No'}} revisions
%h4{"ng-click" => "showOptions = !showOptions; $event.stopPropagation();"} .sk-menu-panel-column{"ng-click" => "showOptions = !showOptions; $event.stopPropagation();"}
%a Options %a.sk-a.info.sk-menu-panel-header-title Options
%div{"ng-if" => "showOptions"} %div{"ng-if" => "showOptions"}
%menu-row{"label" => "'Clear note local history'", "action" => "clearItemHistory()"} %menu-row{"label" => "'Clear note local history'", "action" => "clearItemHistory()"}
%menu-row{"label" => "'Clear all local history'", "action" => "clearAllHistory()"} %menu-row{"label" => "'Clear all local history'", "action" => "clearAllHistory()"}
%menu-row{"label" => "(autoOptimize ? 'Disable' : 'Enable') + ' auto cleanup'", "action" => "toggleAutoOptimize()"} %menu-row{"label" => "(autoOptimize ? 'Disable' : 'Enable') + ' auto cleanup'", "action" => "toggleAutoOptimize()"}
.sublabel .sk-sublabel
Automatically cleans up small revisions to conserve space. Automatically cleans up small revisions to conserve space.
%menu-row{"label" => "(diskEnabled ? 'Disable' : 'Enable') + ' saving history to disk'", "action" => "toggleDiskSaving()"} %menu-row{"label" => "(diskEnabled ? 'Disable' : 'Enable') + ' saving history to disk'", "action" => "toggleDiskSaving()"}
.sublabel .sk-sublabel
Saving to disk may increase app loading time and memory footprint. Saving to disk may increase app loading time and memory footprint.
%menu-row{"ng-repeat" => "revision in entries", %menu-row{"ng-repeat" => "revision in entries",
"action" => "openRevision(revision);", "action" => "openRevision(revision);",
"label" => "revision.previewTitle()"} "label" => "revision.previewTitle()"}
.sublabel.opaque{"ng-class" => "classForRevision(revision)"} .sk-sublabel.opaque{"ng-class" => "classForRevision(revision)"}
{{revision.previewSubTitle()}} {{revision.previewSubTitle()}}

View File

@@ -1,9 +1,9 @@
.section.editor#editor-column{"aria-label" => "Note"} .section.editor#editor-column{"aria-label" => "Note"}
.sn-component .sn-component
.app-bar.no-edges{"ng-if" => "ctrl.note.locked", "ng-init" => "ctrl.lockText = 'Note Locked'", "ng-mouseover" => "ctrl.lockText = 'Unlock'", "ng-mouseleave" => "ctrl.lockText = 'Note Locked'"} .sk-app-bar.no-edges{"ng-if" => "ctrl.note.locked", "ng-init" => "ctrl.lockText = 'Note Locked'", "ng-mouseover" => "ctrl.lockText = 'Unlock'", "ng-mouseleave" => "ctrl.lockText = 'Note Locked'"}
.left .left
.item{"ng-click" => "ctrl.toggleLockNote()"} .sk-app-bar-item{"ng-click" => "ctrl.toggleLockNote()"}
.label.warning .sk-label.warning
%i.icon.ion-locked %i.icon.ion-locked
{{ctrl.lockText}} {{ctrl.lockText}}
@@ -23,23 +23,23 @@
"spellcheck" => "false", "ng-disabled" => "ctrl.note.locked"} "spellcheck" => "false", "ng-disabled" => "ctrl.note.locked"}
.sn-component{"ng-if" => "ctrl.note"} .sn-component{"ng-if" => "ctrl.note"}
.app-bar.no-edges .sk-app-bar.no-edges
.left .left
.item{"ng-click" => "ctrl.showMenu = !ctrl.showMenu; ctrl.showExtensions = false; ctrl.showEditorMenu = false;", "ng-class" => "{'selected' : ctrl.showMenu}", "click-outside" => "ctrl.showMenu = false;", "is-open" => "ctrl.showMenu"} .sk-app-bar-item{"ng-click" => "ctrl.showMenu = !ctrl.showMenu; ctrl.showExtensions = false; ctrl.showEditorMenu = false;", "ng-class" => "{'selected' : ctrl.showMenu}", "click-outside" => "ctrl.showMenu = false;", "is-open" => "ctrl.showMenu"}
.label Options .sk-label Options
.menu-panel.dropdown-menu{"ng-if" => "ctrl.showMenu"} .sk-menu-panel.dropdown-menu{"ng-if" => "ctrl.showMenu"}
.section .sk-menu-panel-section
.header .sk-menu-panel-header
%h4.title Note Options .sk-menu-panel-header-title Note Options
%menu-row{"label" => "ctrl.note.pinned ? 'Unpin' : 'Pin'", "action" => "ctrl.selectedMenuItem(true); ctrl.togglePin()", "desc" => "'Pin or unpin a note from the top of your list'"} %menu-row{"label" => "ctrl.note.pinned ? 'Unpin' : 'Pin'", "action" => "ctrl.selectedMenuItem(true); ctrl.togglePin()", "desc" => "'Pin or unpin a note from the top of your list'"}
%menu-row{"label" => "ctrl.note.archived ? 'Unarchive' : 'Archive'", "action" => "ctrl.selectedMenuItem(true); ctrl.toggleArchiveNote()", "desc" => "'Archive or unarchive a note from your Archived system tag'"} %menu-row{"label" => "ctrl.note.archived ? 'Unarchive' : 'Archive'", "action" => "ctrl.selectedMenuItem(true); ctrl.toggleArchiveNote()", "desc" => "'Archive or unarchive a note from your Archived system tag'"}
%menu-row{"label" => "ctrl.note.locked ? 'Unlock' : 'Lock'", "action" => "ctrl.selectedMenuItem(true); ctrl.toggleLockNote()", "desc" => "'Locking notes prevents unintentional editing'"} %menu-row{"label" => "ctrl.note.locked ? 'Unlock' : 'Lock'", "action" => "ctrl.selectedMenuItem(true); ctrl.toggleLockNote()", "desc" => "'Locking notes prevents unintentional editing'"}
%menu-row{"label" => "ctrl.note.content.hidePreview ? 'Unhide Preview' : 'Hide Preview'", "action" => "ctrl.selectedMenuItem(true); ctrl.toggleNotePreview()", "desc" => "'Hide or unhide the note preview from the list of notes'"} %menu-row{"label" => "ctrl.note.content.hidePreview ? 'Unhide Preview' : 'Hide Preview'", "action" => "ctrl.selectedMenuItem(true); ctrl.toggleNotePreview()", "desc" => "'Hide or unhide the note preview from the list of notes'"}
%menu-row{"label" => "'Delete'", "action" => "ctrl.selectedMenuItem(); ctrl.deleteNote()", "desc" => "'Delete this note permanently from all your devices'"} %menu-row{"label" => "'Delete'", "action" => "ctrl.selectedMenuItem(); ctrl.deleteNote()", "desc" => "'Delete this note permanently from all your devices'"}
.section .sk-menu-panel-section
.header .sk-menu-panel-header
%h4.title Global Display .sk-menu-panel-header-title Global Display
%menu-row{"label" => "'Monospace Font'", "circle" => "ctrl.monospaceFont ? 'success' : 'default'", "action" => "ctrl.selectedMenuItem(true); ctrl.toggleKey('monospaceFont')", %menu-row{"label" => "'Monospace Font'", "circle" => "ctrl.monospaceFont ? 'success' : 'default'", "action" => "ctrl.selectedMenuItem(true); ctrl.toggleKey('monospaceFont')",
"desc" => "'Toggles the font style for the default editor'", "subtitle" => "ctrl.selectedEditor ? 'Not available with editor extensions' : null", "disabled" => "ctrl.selectedEditor"} "desc" => "'Toggles the font style for the default editor'", "subtitle" => "ctrl.selectedEditor ? 'Not available with editor extensions' : null", "disabled" => "ctrl.selectedEditor"}
@@ -50,16 +50,16 @@
%menu-row{"label" => "'Margin Resizers'", "circle" => "ctrl.marginResizersEnabled ? 'success' : 'default'", "action" => "ctrl.selectedMenuItem(true); ctrl.toggleKey('marginResizersEnabled')", %menu-row{"label" => "'Margin Resizers'", "circle" => "ctrl.marginResizersEnabled ? 'success' : 'default'", "action" => "ctrl.selectedMenuItem(true); ctrl.toggleKey('marginResizersEnabled')",
"desc" => "'Allows for editor left and right margins to be resized'", "faded" => "!ctrl.marginResizersEnabled"} "desc" => "'Allows for editor left and right margins to be resized'", "faded" => "!ctrl.marginResizersEnabled"}
.item{"ng-click" => "ctrl.onEditorMenuClick()", "ng-class" => "{'selected' : ctrl.showEditorMenu}", "click-outside" => "ctrl.showEditorMenu = false;", "is-open" => "ctrl.showEditorMenu"} .sk-app-bar-item{"ng-click" => "ctrl.onEditorMenuClick()", "ng-class" => "{'selected' : ctrl.showEditorMenu}", "click-outside" => "ctrl.showEditorMenu = false;", "is-open" => "ctrl.showEditorMenu"}
.label Editor .sk-label Editor
%editor-menu{"ng-if" => "ctrl.showEditorMenu", "callback" => "ctrl.editorMenuOnSelect", "selected-editor" => "ctrl.selectedEditor", "current-item" => "ctrl.note"} %editor-menu{"ng-if" => "ctrl.showEditorMenu", "callback" => "ctrl.editorMenuOnSelect", "selected-editor" => "ctrl.selectedEditor", "current-item" => "ctrl.note"}
.item{"ng-click" => "ctrl.showExtensions = !ctrl.showExtensions; ctrl.showMenu = false; ctrl.showEditorMenu = false;", "ng-class" => "{'selected' : ctrl.showExtensions}", "click-outside" => "ctrl.showExtensions = false;", "is-open" => "ctrl.showExtensions"} .sk-app-bar-item{"ng-click" => "ctrl.showExtensions = !ctrl.showExtensions; ctrl.showMenu = false; ctrl.showEditorMenu = false;", "ng-class" => "{'selected' : ctrl.showExtensions}", "click-outside" => "ctrl.showExtensions = false;", "is-open" => "ctrl.showExtensions"}
.label Actions .sk-label Actions
%actions-menu{"ng-if" => "ctrl.showExtensions", "item" => "ctrl.note"} %actions-menu{"ng-if" => "ctrl.showExtensions", "item" => "ctrl.note"}
.item{"ng-click" => "ctrl.showSessionHistory = !ctrl.showSessionHistory; ctrl.showMenu = false; ctrl.showEditorMenu = false;", "click-outside" => "ctrl.showSessionHistory = false;", "is-open" => "ctrl.showSessionHistory"} .sk-app-bar-item{"ng-click" => "ctrl.showSessionHistory = !ctrl.showSessionHistory; ctrl.showMenu = false; ctrl.showEditorMenu = false;", "click-outside" => "ctrl.showSessionHistory = false;", "is-open" => "ctrl.showSessionHistory"}
.label Session History .sk-label Session History
%session-history-menu{"ng-if" => "ctrl.showSessionHistory", "item" => "ctrl.note"} %session-history-menu{"ng-if" => "ctrl.showSessionHistory", "item" => "ctrl.note"}
.editor-content#editor-content{"ng-if" => "ctrl.noteReady && !ctrl.note.errorDecrypting"} .editor-content#editor-content{"ng-if" => "ctrl.noteReady && !ctrl.note.errorDecrypting"}

View File

@@ -1,44 +1,44 @@
.sn-component .sn-component
#footer-bar.app-bar.no-edges #footer-bar.sk-app-bar.no-edges
.left .left
.item{"ng-click" => "ctrl.accountMenuPressed()", "click-outside" => "ctrl.showAccountMenu = false;", "is-open" => "ctrl.showAccountMenu"} .sk-app-bar-item{"ng-click" => "ctrl.accountMenuPressed()", "click-outside" => "ctrl.showAccountMenu = false;", "is-open" => "ctrl.showAccountMenu"}
.column .sk-app-bar-item-column
.circle.small{"ng-class" => "ctrl.error ? 'danger' : (ctrl.getUser() ? 'info' : 'default')"} .sk-circle.small{"ng-class" => "ctrl.error ? 'danger' : (ctrl.getUser() ? 'info' : 'default')"}
.column .sk-app-bar-item-column
.label.title{"ng-class" => "{red: ctrl.error}"} Account .sk-label.title{"ng-class" => "{red: ctrl.error}"} Account
%account-menu{"ng-click" => "$event.stopPropagation()", "ng-if" => "ctrl.showAccountMenu", "on-successful-auth" => "ctrl.onAuthSuccess", "close-function" => "ctrl.closeAccountMenu"} %account-menu{"ng-click" => "$event.stopPropagation()", "ng-if" => "ctrl.showAccountMenu", "on-successful-auth" => "ctrl.onAuthSuccess", "close-function" => "ctrl.closeAccountMenu"}
.item .sk-app-bar-item
%a.no-decoration.label.title{"href" => "https://standardnotes.org/help", "target" => "_blank"} %a.no-decoration.sk-label.title{"href" => "https://standardnotes.org/help", "target" => "_blank"}
Help Help
.item.border .sk-app-bar-item.border
.item{"ng-repeat" => "room in ctrl.rooms track by room.uuid"} .sk-app-bar-item{"ng-repeat" => "room in ctrl.rooms track by room.uuid"}
.column{"ng-click" => "ctrl.selectRoom(room)"} .sk-app-bar-item-column{"ng-click" => "ctrl.selectRoom(room)"}
.label {{room.name}} .sk-label {{room.name}}
%component-modal{"ng-if" => "room.showRoom", "component" => "room", "on-dismiss" => "ctrl.onRoomDismiss"} %component-modal{"ng-if" => "room.showRoom", "component" => "room", "on-dismiss" => "ctrl.onRoomDismiss"}
.right .right
.item{"ng-if" => "ctrl.securityUpdateAvailable", "ng-click" => "ctrl.openSecurityUpdate()"} .sk-app-bar-item{"ng-if" => "ctrl.securityUpdateAvailable", "ng-click" => "ctrl.openSecurityUpdate()"}
%span.success.label Security update available. %span.success.sk-label Security update available.
.item{"ng-if" => "ctrl.newUpdateAvailable == true", "ng-click" => "ctrl.clickedNewUpdateAnnouncement()"} .sk-app-bar-item{"ng-if" => "ctrl.newUpdateAvailable == true", "ng-click" => "ctrl.clickedNewUpdateAnnouncement()"}
%span.info.label New update available. %span.info.sk-label New update available.
.item.no-pointer{"ng-if" => "ctrl.lastSyncDate && !ctrl.isRefreshing"} .sk-app-bar-item.no-pointer{"ng-if" => "ctrl.lastSyncDate && !ctrl.isRefreshing"}
.label.subtle .sk-label.subtle
Last refreshed {{ctrl.lastSyncDate | appDateTime}} Last refreshed {{ctrl.lastSyncDate | appDateTime}}
.item{"ng-if" => "ctrl.lastSyncDate && ctrl.isRefreshing"} .sk-app-bar-item{"ng-if" => "ctrl.lastSyncDate && ctrl.isRefreshing"}
.spinner.small .sk-spinner.small
.item{"ng-if" => "ctrl.offline"} .sk-app-bar-item{"ng-if" => "ctrl.offline"}
.label Offline .sk-label Offline
.item{"ng-if" => "!ctrl.offline", "ng-click" => "ctrl.refreshData()"} .sk-app-bar-item{"ng-if" => "!ctrl.offline", "ng-click" => "ctrl.refreshData()"}
.label Refresh .sk-label Refresh
.item#lock-item{"ng-if" => "ctrl.hasPasscode()"} .sk-app-bar-item#lock-item{"ng-if" => "ctrl.hasPasscode()"}
.label .sk-label
%i.icon.ion-locked#footer-lock-icon{"ng-if" => "ctrl.hasPasscode()", "ng-click" => "ctrl.lockApp()"} %i.icon.ion-locked#footer-lock-icon{"ng-if" => "ctrl.hasPasscode()", "ng-click" => "ctrl.lockApp()"}

View File

@@ -1,23 +1,23 @@
#lock-screen.sn-component #lock-screen.sn-component
.panel .sk-panel
.header .sk-panel-header
%h1.title Passcode Required .sk-panel-header-title Passcode Required
.content .sk-panel-content
.panel-section .sk-panel-section
%form.panel-form.panel-row{"ng-submit" => "submitPasscodeForm()"} %form.sk-panel-form.sk-panel-row{"ng-submit" => "submitPasscodeForm()"}
.panel-column.stretch .sk-panel-column.stretch
%input.panel-row{:type => 'password', %input.sk-panel-row.sk-input{:type => 'password',
"ng-model" => "formData.passcode", "autofocus" => "true", "sn-autofocus" => "true", "should-focus" => "true", "ng-model" => "formData.passcode", "autofocus" => "true", "sn-autofocus" => "true", "should-focus" => "true",
"placeholder" => "Enter Passcode", "autocomplete" => "new-password"} "placeholder" => "Enter Passcode", "autocomplete" => "new-password"}
.button-group.stretch.panel-row.form-submit .sk-button-group.stretch.sk-panel-row.form-submit
%button.button.info{"type" => "submit"} %button.sk-button.info{"type" => "submit"}
.label Unlock .sk-label Unlock
#passcode-reset #passcode-reset
%a.default{"ng-if" => "!formData.showRecovery", "ng-click" => "forgotPasscode()"} Forgot Passcode? %a.sk-a.neutral{"ng-if" => "!formData.showRecovery", "ng-click" => "forgotPasscode()"} Forgot Passcode?
%div{"ng-if" => "formData.showRecovery"} %div{"ng-if" => "formData.showRecovery"}
%p %p
If you forgot your local passcode, your only option is to clear all your local data from this device If you forgot your local passcode, your only option is to clear all your local data from this device
and sign back in to your account. and sign back in to your account.
%a.danger{"ng-click" => "beginDeleteData()"} Delete Local Data %a.sk-a.danger{"ng-click" => "beginDeleteData()"} Delete Local Data

View File

@@ -11,28 +11,26 @@
"title" => "Searches notes in the currently selected tag"} "title" => "Searches notes in the currently selected tag"}
#search-clear-button{"ng-if" => "ctrl.noteFilter.text", "ng-click" => "ctrl.clearFilterText();"} ✕ #search-clear-button{"ng-if" => "ctrl.noteFilter.text", "ng-click" => "ctrl.clearFilterText();"} ✕
.sn-component#notes-menu-bar .sn-component#notes-menu-bar
.app-bar.no-edges .sk-app-bar.no-edges
.left .left
.item{"ng-click" => "ctrl.showMenu = !ctrl.showMenu", "ng-class" => "{'selected' : ctrl.showMenu}"} .sk-app-bar-item{"ng-click" => "ctrl.showMenu = !ctrl.showMenu", "ng-class" => "{'selected' : ctrl.showMenu}"}
.column .sk-app-bar-item-column
.label .sk-label
Options Options
.column .sk-app-bar-item-column
.sublabel {{ctrl.optionsSubtitle()}} .sk-sublabel {{ctrl.optionsSubtitle()}}
.sn-component{"ng-if" => "ctrl.showMenu"} .sk-menu-panel.dropdown-menu{"ng-if" => "ctrl.showMenu"}
.menu-panel.dropdown-menu .sk-menu-panel-header
.section .sk-menu-panel-header-title Sort By
.header
%h4.title Sort By
%menu-row{"label" => "'Date Added'", "circle" => "ctrl.sortBy == 'created_at' && 'success'", "action" => "ctrl.selectedMenuItem(); ctrl.selectedSortByCreated()", "desc" => "'Sort notes by newest first'"} %menu-row{"label" => "'Date Added'", "circle" => "ctrl.sortBy == 'created_at' && 'success'", "action" => "ctrl.selectedMenuItem(); ctrl.selectedSortByCreated()", "desc" => "'Sort notes by newest first'"}
%menu-row{"label" => "'Date Modified'", "circle" => "ctrl.sortBy == 'client_updated_at' && 'success'", "action" => "ctrl.selectedMenuItem(); ctrl.selectedSortByUpdated()", "desc" => "'Sort notes with the most recently updated first'"} %menu-row{"label" => "'Date Modified'", "circle" => "ctrl.sortBy == 'client_updated_at' && 'success'", "action" => "ctrl.selectedMenuItem(); ctrl.selectedSortByUpdated()", "desc" => "'Sort notes with the most recently updated first'"}
%menu-row{"label" => "'Title'", "circle" => "ctrl.sortBy == 'title' && 'success'", "action" => "ctrl.selectedMenuItem(); ctrl.selectedSortByTitle()", "desc" => "'Sort notes alphabetically by their title'"} %menu-row{"label" => "'Title'", "circle" => "ctrl.sortBy == 'title' && 'success'", "action" => "ctrl.selectedMenuItem(); ctrl.selectedSortByTitle()", "desc" => "'Sort notes alphabetically by their title'"}
.section{"ng-if" => "!ctrl.tag.isSmartTag()"} .sk-menu-panel-section{"ng-if" => "!ctrl.tag.isSmartTag()"}
.header .sk-menu-panel-header
%h4.title Display .sk-menu-panel-header-title Display
%menu-row{"label" => "'Archived Notes'", "circle" => "ctrl.showArchived ? 'success' : 'danger'", "faded" => "!ctrl.showArchived", "action" => "ctrl.selectedMenuItem(); ctrl.toggleKey('showArchived')", "desc" => "'Archived notes are usually hidden. You can explicitly show them with this option.'"} %menu-row{"label" => "'Archived Notes'", "circle" => "ctrl.showArchived ? 'success' : 'danger'", "faded" => "!ctrl.showArchived", "action" => "ctrl.selectedMenuItem(); ctrl.toggleKey('showArchived')", "desc" => "'Archived notes are usually hidden. You can explicitly show them with this option.'"}
%menu-row{"label" => "'Pinned Notes'", "circle" => "ctrl.hidePinned ? 'danger' : 'success'", "faded" => "ctrl.hidePinned", "action" => "ctrl.selectedMenuItem(); ctrl.toggleKey('hidePinned')", "desc" => "'Pinned notes always appear on top. You can hide them temporarily with this option so you can focus on other notes in the list.'"} %menu-row{"label" => "'Pinned Notes'", "circle" => "ctrl.hidePinned ? 'danger' : 'success'", "faded" => "ctrl.hidePinned", "action" => "ctrl.selectedMenuItem(); ctrl.toggleKey('hidePinned')", "desc" => "'Pinned notes always appear on top. You can hide them temporarily with this option so you can focus on other notes in the list.'"}

3910
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -44,7 +44,7 @@
"mocha": "^5.2.0", "mocha": "^5.2.0",
"serve-static": "^1.13.2", "serve-static": "^1.13.2",
"sn-models": "0.1.9", "sn-models": "0.1.9",
"sn-stylekit": "1.0.15", "sn-stylekit": "file:~/Desktop/sn/dev/stylekit",
"standard-file-js": "0.3.19" "standard-file-js": "0.3.19"
} }
} }