* feat: (wip) authorize note access
* fix: remove multiEditorEnabled
* refactor: update SNJS + eslint
* refactor: remove privileges in favor of SNJS protections
* fix: do not close editor when editing an archived note
* chore: remove progress indicator for webpack dev server
* fix: add rel="noreferrer" to bugsnag links
* chore(deps): upgrade snjs
* chore(deps): upgrade snjs
* feat: batch manager protection + react challenge modal + eslint fix
* fix: lint errors
* fix: launch state error
* fix: challenge modal: cancel instead of dismiss when pressing escape
* feat: improve focus styles
* fix: cancel session revoking when pressing escape on confirm dialog
* fix: lint warning
* chore(deps): upgrade minor versions
* feat: make SNWebCrypto a constant
* feat: add random identifier to bugsnag reports
* fix: check onKeyUp instead of onKeyDown
* feat: implement SNJS backup file password retrieval
* chore(deps): upgrade snjs
* feat: display warning banner when using the app with no account
* fix: properly color svg button
* fix: wording
* fix: hide account warning after login + improve key storage wording
* chore(deps): upgrade stylekit
* feat: use stylekit fonts for the editor
* chore(deps): bump nokogiri from 1.10.8 to 1.11.1 (#511)
Bumps [nokogiri](https://github.com/sparklemotion/nokogiri) from 1.10.8 to 1.11.1.
- [Release notes](https://github.com/sparklemotion/nokogiri/releases)
- [Changelog](https://github.com/sparklemotion/nokogiri/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sparklemotion/nokogiri/compare/v1.10.8...v1.11.1)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Baptiste Grob <60621355+baptiste-grob@users.noreply.github.com>
* chore(deps): bump ini from 1.3.5 to 1.3.8 (#504)
Bumps [ini](https://github.com/isaacs/ini) from 1.3.5 to 1.3.8.
- [Release notes](https://github.com/isaacs/ini/releases)
- [Commits](https://github.com/isaacs/ini/compare/v1.3.5...v1.3.8)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Baptiste Grob <60621355+baptiste-grob@users.noreply.github.com>
* fix: rename master branch to main
* fix: add missing placeholders for submodules (#516)
Co-authored-by: Baptiste Grob <60621355+baptiste-grob@users.noreply.github.com>
* chore(deps): upgrade snjs, babel, typescript, reach, mobx, preact
* feat: clear protection session
* fix: use correct close icon size
* fix: hide protections paragraph when no account or passcode exist
* chore(deps): remove unused dependencies
* fix: button casing
* feat: implement SNApplication.hasProtectionSources
* chore(version): 3.6.0
* feat: enable sessions management for every build
* feat: make "Protected" flag more subtle
* fix: only match protected note title
* fix: remove inconsistencies between protected note label and date
* feat: show warning when protecting a note with no protection source
* feat: make unprotecting a note a protected action
* chore(deps): upgrade snjs
* chore(version): 3.6.0-beta01
* fix: run docker with root to fix crashing on Linux (undoes 62da387d3a) (#525)
* feat: make encrypted backups protected (#524)
Co-authored-by: Baptiste Grob <60621355+baptiste-grob@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: proletarius101 <54175165+proletarius101@users.noreply.github.com>
Co-authored-by: Darius JJ Chuck <79410894+standarius@users.noreply.github.com>
Co-authored-by: Antonella Sgarlatta <antonella@standardnotes.org>
177 lines
5.0 KiB
TypeScript
177 lines
5.0 KiB
TypeScript
'use strict';
|
|
|
|
declare const __VERSION__: string;
|
|
declare const __WEB__: boolean;
|
|
|
|
import { SNLog } from '@standardnotes/snjs';
|
|
import angular from 'angular';
|
|
import { configRoutes } from './routes';
|
|
|
|
import { ApplicationGroup } from './ui_models/application_group';
|
|
import { AccountSwitcher } from './views/account_switcher/account_switcher';
|
|
|
|
import {
|
|
ApplicationGroupView,
|
|
ApplicationView,
|
|
EditorGroupView,
|
|
EditorView,
|
|
TagsView,
|
|
NotesView,
|
|
FooterView,
|
|
ChallengeModal,
|
|
} from '@/views';
|
|
|
|
import {
|
|
autofocus,
|
|
clickOutside,
|
|
delayHide,
|
|
elemReady,
|
|
fileChange,
|
|
infiniteScroll,
|
|
lowercase,
|
|
selectOnFocus,
|
|
snEnter,
|
|
} from './directives/functional';
|
|
|
|
import {
|
|
AccountMenu,
|
|
ActionsMenu,
|
|
ComponentModal,
|
|
ComponentView,
|
|
EditorMenu,
|
|
InputModal,
|
|
MenuRow,
|
|
PanelResizer,
|
|
PasswordWizard,
|
|
PermissionsModal,
|
|
RevisionPreviewModal,
|
|
HistoryMenu,
|
|
SyncResolutionMenu,
|
|
} from './directives/views';
|
|
|
|
import { trusted } from './filters';
|
|
import { isDev } from './utils';
|
|
import { BrowserBridge } from './services/browserBridge';
|
|
import { startErrorReporting } from './services/errorReporting';
|
|
import { StartApplication } from './startApplication';
|
|
import { Bridge } from './services/bridge';
|
|
import { SessionsModalDirective } from './components/SessionsModal';
|
|
import { NoAccountWarningDirective } from './components/NoAccountWarning';
|
|
|
|
|
|
function reloadHiddenFirefoxTab(): boolean {
|
|
/**
|
|
* For Firefox pinned tab issue:
|
|
* When a new browser session is started, and SN is in a pinned tab,
|
|
* SN exhibits strange behavior until the tab is reloaded.
|
|
*/
|
|
if (
|
|
document.hidden &&
|
|
navigator.userAgent.toLowerCase().includes('firefox') &&
|
|
!localStorage.getItem('reloading')
|
|
) {
|
|
localStorage.setItem('reloading', 'true');
|
|
location.reload();
|
|
return true;
|
|
} else {
|
|
localStorage.removeItem('reloading');
|
|
return false;
|
|
}
|
|
}
|
|
|
|
const startApplication: StartApplication = async function startApplication(
|
|
defaultSyncServerHost: string,
|
|
bridge: Bridge
|
|
) {
|
|
if (reloadHiddenFirefoxTab()) {
|
|
return;
|
|
}
|
|
|
|
SNLog.onLog = console.log;
|
|
startErrorReporting();
|
|
|
|
angular.module('app', ['ngSanitize']);
|
|
|
|
// Config
|
|
angular
|
|
.module('app')
|
|
.config(configRoutes)
|
|
.constant('bridge', bridge)
|
|
.constant('defaultSyncServerHost', defaultSyncServerHost)
|
|
.constant('appVersion', bridge.appVersion);
|
|
|
|
// Controllers
|
|
angular
|
|
.module('app')
|
|
.directive('applicationGroupView', () => new ApplicationGroupView())
|
|
.directive('applicationView', () => new ApplicationView())
|
|
.directive('editorGroupView', () => new EditorGroupView())
|
|
.directive('editorView', () => new EditorView())
|
|
.directive('tagsView', () => new TagsView())
|
|
.directive('notesView', () => new NotesView())
|
|
.directive('footerView', () => new FooterView());
|
|
|
|
// Directives - Functional
|
|
angular
|
|
.module('app')
|
|
.directive('snAutofocus', ['$timeout', autofocus])
|
|
.directive('clickOutside', ['$document', clickOutside])
|
|
.directive('delayHide', delayHide)
|
|
.directive('elemReady', elemReady)
|
|
.directive('fileChange', fileChange)
|
|
.directive('infiniteScroll', [infiniteScroll])
|
|
.directive('lowercase', lowercase)
|
|
.directive('selectOnFocus', ['$window', selectOnFocus])
|
|
.directive('snEnter', snEnter);
|
|
|
|
// Directives - Views
|
|
angular
|
|
.module('app')
|
|
.directive('accountMenu', () => new AccountMenu())
|
|
.directive('accountSwitcher', () => new AccountSwitcher())
|
|
.directive('actionsMenu', () => new ActionsMenu())
|
|
.directive('challengeModal', () => new ChallengeModal())
|
|
.directive('componentModal', () => new ComponentModal())
|
|
.directive('componentView', () => new ComponentView())
|
|
.directive('editorMenu', () => new EditorMenu())
|
|
.directive('inputModal', () => new InputModal())
|
|
.directive('menuRow', () => new MenuRow())
|
|
.directive('panelResizer', () => new PanelResizer())
|
|
.directive('passwordWizard', () => new PasswordWizard())
|
|
.directive('permissionsModal', () => new PermissionsModal())
|
|
.directive('revisionPreviewModal', () => new RevisionPreviewModal())
|
|
.directive('historyMenu', () => new HistoryMenu())
|
|
.directive('syncResolutionMenu', () => new SyncResolutionMenu())
|
|
.directive('sessionsModal', SessionsModalDirective)
|
|
.directive('noAccountWarning', NoAccountWarningDirective);
|
|
|
|
// Filters
|
|
angular.module('app').filter('trusted', ['$sce', trusted]);
|
|
|
|
// Services
|
|
angular.module('app').service('mainApplicationGroup', ApplicationGroup);
|
|
|
|
// Debug
|
|
if (isDev) {
|
|
Object.defineProperties(window, {
|
|
application: {
|
|
get: () =>
|
|
(angular
|
|
.element(document)
|
|
.injector()
|
|
.get('mainApplicationGroup') as any).primaryApplication,
|
|
},
|
|
});
|
|
}
|
|
|
|
angular.element(document).ready(() => {
|
|
angular.bootstrap(document, ['app']);
|
|
});
|
|
};
|
|
|
|
if (__WEB__) {
|
|
startApplication((window as any)._default_sync_server, new BrowserBridge(__VERSION__));
|
|
} else {
|
|
(window as any).startApplication = startApplication;
|
|
}
|