├── .editorconfig
├── .eslintrc.json
├── .github
├── FUNDING.yml
└── stale.yml
├── .gitignore
├── .npmrc
├── .travis.yml
├── .vscode
├── launch.json
└── tasks.json
├── 0resources
└── Soft_Cover_Book_Mockup_01.png
├── CHANGELOG.md
├── LICENSE.md
├── README.md
├── _config.yml
├── angular.json
├── angular.webpack.js
├── e2e
├── common-setup.ts
├── main.e2e.ts
└── tsconfig.e2e.json
├── icon.icns
├── icon.ico
├── lib
├── ControlToolbar.js
├── ControlToolbar.ts
├── DisplaySlide.js
├── DisplaySlide.ts
├── EpubManager.js
├── EpubManager.ts
└── workers
│ └── ImportEpub.js
├── main.ts
├── package.json
├── src
├── app
│ ├── app.component.html
│ ├── app.component.scss
│ ├── app.component.spec.ts
│ ├── app.component.ts
│ ├── app.module.ts
│ ├── display
│ │ ├── controller
│ │ │ ├── bible
│ │ │ │ ├── controller.component.html
│ │ │ │ ├── controller.component.spec.ts
│ │ │ │ └── controller.component.ts
│ │ │ ├── controller.component.scss
│ │ │ ├── controller.component.ts
│ │ │ ├── pub
│ │ │ │ ├── controller.component.html
│ │ │ │ ├── controller.component.spec.ts
│ │ │ │ └── controller.component.ts
│ │ │ └── toolbar.component.ts
│ │ └── display
│ │ │ ├── display.component.html
│ │ │ ├── display.component.scss
│ │ │ └── display.component.ts
│ ├── home
│ │ ├── home.component.html
│ │ ├── home.component.scss
│ │ ├── home.component.spec.ts
│ │ └── home.component.ts
│ └── shared
│ │ ├── components
│ │ ├── display-controller
│ │ │ ├── display-controller.component.html
│ │ │ ├── display-controller.component.scss
│ │ │ ├── display-controller.component.spec.ts
│ │ │ └── display-controller.component.ts
│ │ └── menu-layout
│ │ │ ├── menu-layout.component.html
│ │ │ ├── menu-layout.component.scss
│ │ │ ├── menu-layout.component.spec.ts
│ │ │ └── menu-layout.component.ts
│ │ ├── modals
│ │ ├── help
│ │ │ ├── help.component.html
│ │ │ ├── help.component.scss
│ │ │ └── help.component.ts
│ │ └── settings
│ │ │ ├── settings.component.html
│ │ │ ├── settings.component.scss
│ │ │ └── settings.component.ts
│ │ ├── pipes
│ │ └── santizer.pipe.ts
│ │ ├── services
│ │ ├── modal.service.ts
│ │ └── slides.service.ts
│ │ └── shared.module.ts
├── assets
│ ├── .gitkeep
│ ├── bible-bg.jpg
│ ├── icons
│ │ ├── favicon.256x256.png
│ │ ├── favicon.512x512.png
│ │ ├── favicon.icns
│ │ ├── favicon.ico
│ │ └── favicon.png
│ ├── semantic
│ │ ├── .versions
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── semantic.min.css
│ │ └── themes
│ │ │ └── default
│ │ │ └── assets
│ │ │ ├── fonts
│ │ │ ├── brand-icons.eot
│ │ │ ├── brand-icons.svg
│ │ │ ├── brand-icons.ttf
│ │ │ ├── brand-icons.woff
│ │ │ ├── brand-icons.woff2
│ │ │ ├── icons.eot
│ │ │ ├── icons.otf
│ │ │ ├── icons.svg
│ │ │ ├── icons.ttf
│ │ │ ├── icons.woff
│ │ │ ├── icons.woff2
│ │ │ ├── outline-icons.eot
│ │ │ ├── outline-icons.svg
│ │ │ ├── outline-icons.ttf
│ │ │ ├── outline-icons.woff
│ │ │ └── outline-icons.woff2
│ │ │ └── images
│ │ │ └── flags.png
│ └── table-bg.jpg
├── environments
│ ├── environment.dev.ts
│ ├── environment.prod.ts
│ ├── environment.ts
│ └── environment.web.ts
├── index.html
├── karma.conf.js
├── main.ts
├── polyfills-test.ts
├── polyfills.ts
├── styles.scss
├── test.ts
├── tsconfig.app.json
├── tsconfig.spec.json
└── typings.d.ts
├── tsconfig-serve.json
└── tsconfig.json
/.editorconfig:
--------------------------------------------------------------------------------
1 | # Editor configuration, see http://editorconfig.org
2 | root = true
3 |
4 | [*]
5 | charset = utf-8
6 | indent_style = space
7 | indent_size = 2
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 |
11 | [*.md]
12 | max_line_length = off
13 | trim_trailing_whitespace = false
14 |
--------------------------------------------------------------------------------
/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": true,
4 | "node": true,
5 | "es6": true,
6 | "es2017": true
7 | },
8 | "overrides": [
9 | {
10 | "files": ["*.ts"],
11 | "extends": [
12 | "eslint:recommended",
13 | "plugin:@typescript-eslint/eslint-recommended",
14 | "plugin:@typescript-eslint/recommended",
15 | "plugin:@typescript-eslint/recommended-requiring-type-checking"
16 | ],
17 | "parser": "@typescript-eslint/parser",
18 | "parserOptions": {
19 | "ecmaVersion": 10,
20 | "project": [
21 | "./src/tsconfig.app.json",
22 | "./src/tsconfig.spec.json",
23 | "./e2e/tsconfig.e2e.json"
24 | ],
25 | "sourceType": "module",
26 | "ecmaFeatures": {
27 | "modules": true
28 | }
29 | },
30 | "plugins": [
31 | "@typescript-eslint",
32 | "@angular-eslint/eslint-plugin"
33 | ],
34 | "rules": {
35 | "@typescript-eslint/indent": [
36 | "error", 2, {
37 | "SwitchCase": 1,
38 | "CallExpression": {"arguments": "first"},
39 | "FunctionExpression": {"parameters": "first"},
40 | "FunctionDeclaration": {"parameters": "first"}
41 | }
42 | ],
43 | "@typescript-eslint/no-empty-function": 0,
44 | "@typescript-eslint/no-var-requires": 0,
45 | "@typescript-eslint/no-explicit-any": 0,
46 | "@typescript-eslint/no-unsafe-call": 0,
47 | "@typescript-eslint/no-unsafe-member-access": 0,
48 | "@typescript-eslint/no-unsafe-assignment": 0,
49 | "@typescript-eslint/no-unsafe-return": 0,
50 | "@typescript-eslint/no-floating-promises": 0,
51 | "@angular-eslint/use-injectable-provided-in": "error",
52 | "@angular-eslint/no-attribute-decorator": "error"
53 | }
54 | },
55 | {
56 | "files": ["*.component.html"],
57 | "parser": "@angular-eslint/template-parser",
58 | "plugins": ["@angular-eslint/template"],
59 | "rules": {
60 | "@angular-eslint/template/banana-in-a-box": "error",
61 | "@angular-eslint/template/no-negated-async": "error"
62 | }
63 | }
64 | ]
65 | }
66 |
--------------------------------------------------------------------------------
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/.github/stale.yml:
--------------------------------------------------------------------------------
1 | # Number of days of inactivity before an issue becomes stale
2 | daysUntilStale: 15
3 | # Number of days of inactivity before a stale issue is closed
4 | daysUntilClose: 7
5 | # Issues with these labels will never be considered stale
6 | exemptLabels:
7 | - pinned
8 | - security
9 | # Label to use when marking an issue as stale
10 | staleLabel: wontfix
11 | # Comment to post when marking an issue as stale. Set to `false` to disable
12 | markComment: >
13 | This issue has been automatically marked as stale because it has not had
14 | recent activity. It will be closed if no further activity occurs. Thank you
15 | for your contributions.
16 | # Comment to post when closing a stale issue. Set to `false` to disable
17 | closeComment: false
18 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # See http://help.github.com/ignore-files/ for more about ignoring files.
2 |
3 | # compiled output
4 | /dist
5 | /tmp
6 | /out-tsc
7 | /app-builds
8 | /release
9 | main.js
10 | src/**/*.js
11 | !src/karma.conf.js
12 | *.js.map
13 |
14 | # dependencies
15 | /node_modules
16 |
17 | # IDEs and editors
18 | /.idea
19 | .project
20 | .classpath
21 | .c9/
22 | *.launch
23 | .settings/
24 | *.sublime-workspace
25 |
26 | # IDE - VSCode
27 | .vscode/*
28 | .vscode/settings.json
29 | !.vscode/tasks.json
30 | !.vscode/launch.json
31 | !.vscode/extensions.json
32 |
33 | # misc
34 | /.sass-cache
35 | /connect.lock
36 | /coverage
37 | /libpeerconnection.log
38 | npm-debug.log
39 | testem.log
40 | /typings
41 | package-lock.json
42 | electron-builder.yml
43 |
44 | # e2e
45 | /e2e/*.js
46 | !/e2e/protractor.conf.js
47 | /e2e/*.map
48 |
49 | # System Files
50 | /config
51 | .DS_Store
52 | Thumbs.db
53 | config
54 |
55 | docs/*
56 |
57 | *.psd
--------------------------------------------------------------------------------
/.npmrc:
--------------------------------------------------------------------------------
1 | save=true
2 | save-exact=true
3 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | os:
2 | - linux
3 | - osx
4 | language: node_js
5 | node_js:
6 | - '12'
7 | - '10'
8 | dist: xenial
9 | sudo: required
10 | services:
11 | - xvfb
12 | before_script:
13 | - export DISPLAY=:99.0
14 | install:
15 | - npm set progress=false
16 | - npm install
17 | script:
18 | - ng lint
19 | - npm run test
20 | - npm run e2e
21 | - npm run build
22 |
--------------------------------------------------------------------------------
/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | // Use IntelliSense to learn about possible attributes.
3 | // Hover to view descriptions of existing attributes.
4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5 | "version": "0.2.0",
6 | "configurations": [
7 | {
8 | "name": "Electron Main Renderer",
9 | "type": "node",
10 | "request": "launch",
11 | "protocol": "inspector",
12 | // Prelaunch task compiles main.ts for Electron & starts Angular dev server.
13 | "preLaunchTask": "Build.All",
14 | "cwd": "${workspaceFolder}",
15 | "runtimeExecutable": "${workspaceFolder}/node_modules/.bin/electron",
16 | "runtimeArgs": [
17 | "--serve",
18 | ".",
19 | "--remote-debugging-port=9222"
20 | ],
21 | "windows": {
22 | "runtimeExecutable": "${workspaceFolder}/node_modules/.bin/electron.cmd"
23 | }
24 | }, {
25 | "name": "Karma Attach Chrome",
26 | "type": "chrome",
27 | "request": "attach",
28 | "port": 9222,
29 | "webRoot": "${workspaceFolder}/",
30 | "sourceMaps": true,
31 | "timeout": 30000,
32 | "trace": true
33 | }
34 |
35 | ]
36 | }
--------------------------------------------------------------------------------
/.vscode/tasks.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "2.0.0",
3 | "tasks": [
4 | {
5 | "label": "Build.All",
6 | "type": "shell",
7 | "command": "npm run electron:serve-tsc && ng serve",
8 | "isBackground": true,
9 | "group": {
10 | "kind": "build",
11 | "isDefault": true
12 | },
13 | "problemMatcher": {
14 | "owner": "typescript",
15 | "source": "ts",
16 | "applyTo": "closedDocuments",
17 | "fileLocation": ["relative", "${cwd}"],
18 | "pattern": "$tsc",
19 | "background": {
20 | "activeOnStart": true,
21 | "beginsPattern": "^.*",
22 | "endsPattern": "^.*Compiled successfully.*"
23 | }
24 | }
25 | }
26 | ]
27 | }
--------------------------------------------------------------------------------
/0resources/Soft_Cover_Book_Mockup_01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/01CodeLT/meeting-display/dce135582e34b70dc518520c6848a19a1e89344b/0resources/Soft_Cover_Book_Mockup_01.png
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | ## 7.2.1 (2020-06-20)
2 |
3 | * ref/ keep only 1 eslint config ([e942747](https://github.com/maximegris/angular-electron/commit/e942747))
4 |
5 |
6 |
7 | ## 7.2.0 (2020-06-20)
8 |
9 | * [Bumped Version] 7.2.0 ([a98a84a](https://github.com/maximegris/angular-electron/commit/a98a84a))
10 | * feat/ merge electron-builder npm scripts ([ddd92b3](https://github.com/maximegris/angular-electron/commit/ddd92b3))
11 | * fix/ ng lint with eslint ([92d7419](https://github.com/maximegris/angular-electron/commit/92d7419))
12 | * misc/ upgrade Electron (9.0.4) / Angular (9.1.11) ([21f7401](https://github.com/maximegris/angular-electron/commit/21f7401))
13 | * ref/ electron remote deprecated ([a8628fc](https://github.com/maximegris/angular-electron/commit/a8628fc))
14 |
15 |
16 |
17 | ## 7.1.0 (2020-05-02)
18 |
19 | * [Bumped Version] 7.1.0 ([8dffcea](https://github.com/maximegris/angular-electron/commit/8dffcea))
20 | * feat/ VSCode : add Debugging config for man process (#465) + Karma ([acc62d9](https://github.com/maximegris/angular-electron/commit/acc62d9)), closes [#465](https://github.com/maximegris/angular-electron/issues/465)
21 | * fix/ Karma configuration to debug easily ([273e752](https://github.com/maximegris/angular-electron/commit/273e752))
22 |
23 |
24 |
25 | ## 7.0.5 (2020-04-26)
26 |
27 | * [Bumped Version] 7.0.5 ([63eed52](https://github.com/maximegris/angular-electron/commit/63eed52))
28 | * Upgrade Angular 9.1.3 & Electron 8.2.3 ([00b9d43](https://github.com/maximegris/angular-electron/commit/00b9d43))
29 |
30 |
31 |
32 | ## 7.0.4 (2020-04-20)
33 |
34 | * [Bumped Version] 7.0.4 ([dbce7a0](https://github.com/maximegris/angular-electron/commit/dbce7a0))
35 | * ref/ make app reloading/working with and without usehash routing strategy ([386ce67](https://github.com/maximegris/angular-electron/commit/386ce67))
36 | * Transparent background issue fix for Linux ([4c0c169](https://github.com/maximegris/angular-electron/commit/4c0c169))
37 |
38 |
39 |
40 | ## 7.0.3 (2020-04-11)
41 |
42 | * [Bumped Version] 7.0.3 ([6206066](https://github.com/maximegris/angular-electron/commit/6206066))
43 | * fix/ polyfills in tsconfig ([cf4f172](https://github.com/maximegris/angular-electron/commit/cf4f172))
44 | * misc/ changelog ([19f6027](https://github.com/maximegris/angular-electron/commit/19f6027))
45 |
46 |
47 |
48 | ## 7.0.2 (2020-04-11)
49 |
50 | * [Bumped Version] 7.0.2 ([c4c36f6](https://github.com/maximegris/angular-electron/commit/c4c36f6))
51 | * Fix a typo in README.md ([86ac910](https://github.com/maximegris/angular-electron/commit/86ac910))
52 | * misc/ Changelog ([67437ba](https://github.com/maximegris/angular-electron/commit/67437ba))
53 | * misc/ maj angular 9.1.1 & electron 8.2.1 ([061e01e](https://github.com/maximegris/angular-electron/commit/061e01e))
54 | * misc/ maj eslint dep ([09fc1f7](https://github.com/maximegris/angular-electron/commit/09fc1f7))
55 | * moved all app icons to assets/icons folder ([7d6bb69](https://github.com/maximegris/angular-electron/commit/7d6bb69))
56 | * ref/ set allowRendererProcessReuse to true ([7c5c43b](https://github.com/maximegris/angular-electron/commit/7c5c43b))
57 |
58 |
59 |
60 | ## 7.0.1 (2020-02-22)
61 |
62 | * [Bumped Version] 7.0.1 ([7a84ca0](https://github.com/maximegris/angular-electron/commit/7a84ca0))
63 | * fix/ README dependencies version ([7276d96](https://github.com/maximegris/angular-electron/commit/7276d96))
64 | * misc/ upgrade Angular 9.0.2 & Electron 8.0.1 ([174b36f](https://github.com/maximegris/angular-electron/commit/174b36f))
65 | * ref/ travis test node 10 & 12 ([8b7ee5b](https://github.com/maximegris/angular-electron/commit/8b7ee5b))
66 |
67 |
68 |
69 | ## 7.0.0 (2020-02-09)
70 |
71 | * [Bumped Version] 7.0.0 ([0f304d2](https://github.com/maximegris/angular-electron/commit/0f304d2))
72 | * cast isElectron to boolean #429 ([ee06695](https://github.com/maximegris/angular-electron/commit/ee06695)), closes [#429](https://github.com/maximegris/angular-electron/issues/429)
73 | * feat/ update angular 8 deps ([7df49ff](https://github.com/maximegris/angular-electron/commit/7df49ff))
74 | * feat/ update to Angular 9 & Electron 8 ([a304034](https://github.com/maximegris/angular-electron/commit/a304034))
75 | * fix/ e2e tests ([395d2da](https://github.com/maximegris/angular-electron/commit/395d2da))
76 | * hot reload note ([28e1854](https://github.com/maximegris/angular-electron/commit/28e1854))
77 | * ref/ upgrade electron to v8 ([320ce2f](https://github.com/maximegris/angular-electron/commit/320ce2f))
78 |
79 |
80 |
81 | ## 6.4.1 (2019-12-25)
82 |
83 | * feat/ update Electron (7.1.2) ([3d76ff5](https://github.com/maximegris/angular-electron/commit/3d76ff5))
84 | * misc/ maj changelog ([eb46727](https://github.com/maximegris/angular-electron/commit/eb46727))
85 | * reef/ update stale bot ([671b7c9](https://github.com/maximegris/angular-electron/commit/671b7c9))
86 | * ref/ remove usunsed files ([9bf5824](https://github.com/maximegris/angular-electron/commit/9bf5824))
87 |
88 |
89 |
90 | ## 6.4.0 (2019-11-19)
91 |
92 | * [Bumped Version] 6.4.0 ([fac9eef](https://github.com/maximegris/angular-electron/commit/fac9eef))
93 | * #412 change selector of WebviewDirective ([76e7918](https://github.com/maximegris/angular-electron/commit/76e7918)), closes [#412](https://github.com/maximegris/angular-electron/issues/412)
94 | * eslint-migration ([7637f45](https://github.com/maximegris/angular-electron/commit/7637f45))
95 | * eslint-migration - disable warnings/errors ([99e7ec0](https://github.com/maximegris/angular-electron/commit/99e7ec0))
96 | * eslint-migration - fix removed translation import ([2f64f37](https://github.com/maximegris/angular-electron/commit/2f64f37))
97 | * eslint-migration - remove tslint.json configuration ([3c1f9f6](https://github.com/maximegris/angular-electron/commit/3c1f9f6))
98 | * karma-electron ([21f97fd](https://github.com/maximegris/angular-electron/commit/21f97fd))
99 | * karma-electron - remove chrome deps for travis ([0f09907](https://github.com/maximegris/angular-electron/commit/0f09907))
100 | * misc/ add npmrc ([9d94f9c](https://github.com/maximegris/angular-electron/commit/9d94f9c))
101 | * misc/ typo README ([d52b03a](https://github.com/maximegris/angular-electron/commit/d52b03a))
102 | * permissive eslint rules to remove linter warnings ([964b57f](https://github.com/maximegris/angular-electron/commit/964b57f))
103 | * require is not defined ([632c454](https://github.com/maximegris/angular-electron/commit/632c454))
104 |
105 |
106 |
107 | ## 6.3.1 (2019-11-01)
108 |
109 | * [Bumped Version] 6.3.1 ([671b6a3](https://github.com/maximegris/angular-electron/commit/671b6a3))
110 | * #395 - require is not defined ([c4b2cb6](https://github.com/maximegris/angular-electron/commit/c4b2cb6)), closes [#395](https://github.com/maximegris/angular-electron/issues/395)
111 | * changelog ([39b0bca](https://github.com/maximegris/angular-electron/commit/39b0bca))
112 |
113 |
114 |
115 | ## 6.3.0 (2019-10-25)
116 |
117 | * [Bumped Version] 6.3.0 ([09f9646](https://github.com/maximegris/angular-electron/commit/09f9646))
118 | * misc/ change Electron version to 7.0.0 in README ([6a4e2de](https://github.com/maximegris/angular-electron/commit/6a4e2de))
119 | * misc/ remove link to dependenciesci ([93d5a8c](https://github.com/maximegris/angular-electron/commit/93d5a8c))
120 | * misc/ upgrade Electron 7 ([d732340](https://github.com/maximegris/angular-electron/commit/d732340))
121 |
122 |
123 |
124 | ## 6.2.0 (2019-09-29)
125 |
126 | * [Bumped Version] 6.2.0 ([8838e0e](https://github.com/maximegris/angular-electron/commit/8838e0e))
127 | * Maj Changelog ([bc4c950](https://github.com/maximegris/angular-electron/commit/bc4c950))
128 | * misc/ add Stale to close unactive issues ([398bdf1](https://github.com/maximegris/angular-electron/commit/398bdf1))
129 | * Upgrade Angular 8.2.8 & Electron 6.0.10 ([2ecda63](https://github.com/maximegris/angular-electron/commit/2ecda63))
130 |
131 |
132 |
133 | ## 6.1.0 (2019-08-15)
134 |
135 | * [Bumped Version] 6.1.0 ([b47c594](https://github.com/maximegris/angular-electron/commit/b47c594))
136 | * [DELETE]: vscode settings removed ([becc9b4](https://github.com/maximegris/angular-electron/commit/becc9b4))
137 | * [UPDATE]: Typescript version fixes ([a284c23](https://github.com/maximegris/angular-electron/commit/a284c23))
138 | * Angular src restructured as modular as per angular official guidelines, .travis.yml support added fo ([5983703](https://github.com/maximegris/angular-electron/commit/5983703))
139 | * bump tslint & codelyzer versions, update tslint rules & alphabetize ([8425cdc](https://github.com/maximegris/angular-electron/commit/8425cdc))
140 | * Corejs path updates ([88056d6](https://github.com/maximegris/angular-electron/commit/88056d6))
141 | * Electron 6.0.0 ([1aef350](https://github.com/maximegris/angular-electron/commit/1aef350))
142 | * fix/ Version Electron in README ([acf0d4f](https://github.com/maximegris/angular-electron/commit/acf0d4f))
143 | * misc/ upgrade Angular 8.2 / Spectron 7 ([6e2211f](https://github.com/maximegris/angular-electron/commit/6e2211f))
144 | * Update dependencies ([bd51f28](https://github.com/maximegris/angular-electron/commit/bd51f28))
145 |
146 |
147 |
148 | ## 6.0.1 (2019-05-31)
149 |
150 | * [Bumped Version] 6.0.1 ([4f9cef3](https://github.com/maximegris/angular-electron/commit/4f9cef3))
151 | * Add CI for macOS. ([3ba02e3](https://github.com/maximegris/angular-electron/commit/3ba02e3))
152 | * ref/ strict version build-angular & zonejs ([5a24b56](https://github.com/maximegris/angular-electron/commit/5a24b56))
153 | * ref/ strict version codelyzer ([6ede0c8](https://github.com/maximegris/angular-electron/commit/6ede0c8))
154 | * Remove Node.js v12. ([ccbf6cd](https://github.com/maximegris/angular-electron/commit/ccbf6cd))
155 | * Run CI for Node.js version 10 ([2538965](https://github.com/maximegris/angular-electron/commit/2538965))
156 | * Use service xvfb. ([4db31e3](https://github.com/maximegris/angular-electron/commit/4db31e3))
157 |
158 |
159 |
160 | ## 6.0.0 (2019-05-31)
161 |
162 | * [Bumped Version] 6.0.0 ([fb719ab](https://github.com/maximegris/angular-electron/commit/fb719ab))
163 | * bump angular version ([7a564a0](https://github.com/maximegris/angular-electron/commit/7a564a0))
164 | * Fix Travis CI link ([10aaa4c](https://github.com/maximegris/angular-electron/commit/10aaa4c))
165 | * Not gitignore src/karma.conf.js ([7599320](https://github.com/maximegris/angular-electron/commit/7599320))
166 | * ref/ upgrade Angular 8 and Electron 5 ([92334cf](https://github.com/maximegris/angular-electron/commit/92334cf))
167 | * update versions and prepare for electron 5 ([07a5786](https://github.com/maximegris/angular-electron/commit/07a5786))
168 | * version bump ([bb1d6bb](https://github.com/maximegris/angular-electron/commit/bb1d6bb))
169 | * feat(CI): update Ubuntu and Node versions in Travis ([e0ff557](https://github.com/maximegris/angular-electron/commit/e0ff557))
170 | * fix: type conflicts ([a2971bf](https://github.com/maximegris/angular-electron/commit/a2971bf))
171 | * fix(e2e): add mocha types ([20e1e89](https://github.com/maximegris/angular-electron/commit/20e1e89))
172 | * fix(e2e): without devTools ([2581983](https://github.com/maximegris/angular-electron/commit/2581983)), closes [/github.com/electron/spectron/issues/174#issuecomment-319242097](https://github.com//github.com/electron/spectron/issues/174/issues/issuecomment-319242097)
173 | * chore: Spectron for e2e tests ([901438a](https://github.com/maximegris/angular-electron/commit/901438a))
174 |
175 |
176 |
177 | ## 5.1.0 (2018-11-30)
178 |
179 | * [Bumped Version] 5.1.0 ([b790e12](https://github.com/maximegris/angular-electron/commit/b790e12))
180 | * fix/ typo Angular 7 ([fde371f](https://github.com/maximegris/angular-electron/commit/fde371f))
181 | * fix/ typo README ([723233c](https://github.com/maximegris/angular-electron/commit/723233c))
182 | * fix/ typo script npm electron:windows ([45bab44](https://github.com/maximegris/angular-electron/commit/45bab44))
183 | * ref/ remve npx - fix vulnerabilities ([41aeb57](https://github.com/maximegris/angular-electron/commit/41aeb57))
184 | * update README ([f146d5d](https://github.com/maximegris/angular-electron/commit/f146d5d))
185 |
186 |
187 |
188 | ## 5.0.0 (2018-11-11)
189 |
190 | * Fix typos in README file ([0440ee9](https://github.com/maximegris/angular-electron/commit/0440ee9))
191 | * ref/ Generate changelog ([a89b3ce](https://github.com/maximegris/angular-electron/commit/a89b3ce))
192 | * ref/ Upgrade to Angular 7 ([315a79b](https://github.com/maximegris/angular-electron/commit/315a79b))
193 | * Update electron-builder.json files rule ([82c7bcf](https://github.com/maximegris/angular-electron/commit/82c7bcf))
194 | * Update Version Electron 2 to 3 #hacktoberfest ([f083328](https://github.com/maximegris/angular-electron/commit/f083328))
195 |
196 |
197 |
198 | ## 4.2.2 (2018-08-22)
199 |
200 | * fix/ build serve & electron with single tsc command ([9106c8f](https://github.com/maximegris/angular-electron/commit/9106c8f))
201 | * fix/ typo README ([a9448aa](https://github.com/maximegris/angular-electron/commit/a9448aa))
202 |
203 |
204 |
205 | ## 4.2.1 (2018-08-22)
206 |
207 | * fix/ jslib in main process error ([ef33f5e](https://github.com/maximegris/angular-electron/commit/ef33f5e))
208 |
209 |
210 |
211 | ## 4.2.0 (2018-08-19)
212 |
213 | * [Bumped Version] V4.2.0 ([0da3856](https://github.com/maximegris/angular-electron/commit/0da3856))
214 | * fix/ electron builder output directories #200 ([f4535e5](https://github.com/maximegris/angular-electron/commit/f4535e5)), closes [#200](https://github.com/maximegris/angular-electron/issues/200)
215 | * Make sure tsconfig be used. ([961c8b1](https://github.com/maximegris/angular-electron/commit/961c8b1))
216 | * ref/ remove some directories of tsconfig.app.json ([1adad4a](https://github.com/maximegris/angular-electron/commit/1adad4a))
217 | * Upgrade Angular (6.1.2) deps ([d8818c1](https://github.com/maximegris/angular-electron/commit/d8818c1))
218 |
219 |
220 |
221 | ## 4.1.0 (2018-06-27)
222 |
223 | * Allow Angular Using Electron Modules ([ec705ee](https://github.com/maximegris/angular-electron/commit/ec705ee))
224 | * fix/ version angular (revert 6.0.6 -> 6.0.5) ([63a41b8](https://github.com/maximegris/angular-electron/commit/63a41b8))
225 | * fix/ version ts-node ([0d8341a](https://github.com/maximegris/angular-electron/commit/0d8341a))
226 | * ref/ postinstall web & electron ([50657d0](https://github.com/maximegris/angular-electron/commit/50657d0))
227 | * update README ([1d48e32](https://github.com/maximegris/angular-electron/commit/1d48e32))
228 | * feat(zone): add zone-patch-electron to patch Electron native APIs in polyfills ([01842e2](https://github.com/maximegris/angular-electron/commit/01842e2))
229 |
230 |
231 |
232 | ## 4.0.0 (2018-05-25)
233 |
234 | * misc/ remove unused packages ([a7e33b6](https://github.com/maximegris/angular-electron/commit/a7e33b6))
235 | * misc/ update Changelog ([b758122](https://github.com/maximegris/angular-electron/commit/b758122))
236 | * ref/ upgrade angular to 6.0.3 ([e7fac6e](https://github.com/maximegris/angular-electron/commit/e7fac6e))
237 | * refactor: update electron, electron-builder to latest (2.0.2, 20.14.7) ([f19e6ee](https://github.com/maximegris/angular-electron/commit/f19e6ee))
238 | * refactor: upgrade to NodeJS 8, Angular 6, CLI 6, Electron 2.0, RxJS 6.1 ([e37efdb](https://github.com/maximegris/angular-electron/commit/e37efdb))
239 | * refactor(hooks): replace hooks to ng-cli fileReplacements logic ([c940037](https://github.com/maximegris/angular-electron/commit/c940037))
240 | * fix(test): create polyfills-test.ts for karma test & setup Travis CI ([7fbc68c](https://github.com/maximegris/angular-electron/commit/7fbc68c))
241 | * fix(travis): set progress to false (speed up npm) ([be48531](https://github.com/maximegris/angular-electron/commit/be48531))
242 |
243 |
244 |
245 | ## 3.4.1 (2018-05-25)
246 |
247 | * misc/ update changelog ([70b359f](https://github.com/maximegris/angular-electron/commit/70b359f))
248 | * Modify electron builder configuration to remove source code and tests ([0cf6899](https://github.com/maximegris/angular-electron/commit/0cf6899))
249 | * version 3.4.1 ([308ea9c](https://github.com/maximegris/angular-electron/commit/308ea9c))
250 |
251 |
252 |
253 | ## 3.4.0 (2018-05-25)
254 |
255 | * misc/ update changelog ([7d5eeb3](https://github.com/maximegris/angular-electron/commit/7d5eeb3))
256 | * ref/ remove contributors ([6dc97a1](https://github.com/maximegris/angular-electron/commit/6dc97a1))
257 | * The file is unused ([05c9e39](https://github.com/maximegris/angular-electron/commit/05c9e39))
258 | * Translation issue ([35354b1](https://github.com/maximegris/angular-electron/commit/35354b1))
259 | * version 3.4.0 ([06d6b0f](https://github.com/maximegris/angular-electron/commit/06d6b0f))
260 |
261 |
262 |
263 | ## 3.3.0 (2018-04-15)
264 |
265 | * add Changelog file ([71083f1](https://github.com/maximegris/angular-electron/commit/71083f1))
266 | * fix/ typo README.md (production variables) ([a8c2b63](https://github.com/maximegris/angular-electron/commit/a8c2b63))
267 | * version 3.3.0 ([a88bda6](https://github.com/maximegris/angular-electron/commit/a88bda6))
268 | * version 3.3.0 changelog ([ddfbbf9](https://github.com/maximegris/angular-electron/commit/ddfbbf9))
269 |
270 |
271 |
272 | ## 3.2.0 (2018-04-15)
273 |
274 | * fix e2e tests based on PR #161 and terminate the npm process after test execution ([fccf348](https://github.com/maximegris/angular-electron/commit/fccf348)), closes [#161](https://github.com/maximegris/angular-electron/issues/161)
275 | * fix/ app e2e spec ([8046b2a](https://github.com/maximegris/angular-electron/commit/8046b2a))
276 | * Including electron to eliminate Electron not found err sg ([d78203f](https://github.com/maximegris/angular-electron/commit/d78203f))
277 | * provide webFrame access ([6bd044e](https://github.com/maximegris/angular-electron/commit/6bd044e))
278 | * ref/ add node/electron module import as exemple : fs and remote ([e3ad12d](https://github.com/maximegris/angular-electron/commit/e3ad12d))
279 | * remove copyfiles ([9af5138](https://github.com/maximegris/angular-electron/commit/9af5138))
280 | * update dependencies ([89963ab](https://github.com/maximegris/angular-electron/commit/89963ab))
281 | * version 3.2.0 ([8dc69fa](https://github.com/maximegris/angular-electron/commit/8dc69fa))
282 |
283 |
284 |
285 | ## 3.1.0 (2018-03-15)
286 |
287 | * Added option -o to script npm run ng:serve so that it really open the browser ([72aff8d](https://github.com/maximegris/angular-electron/commit/72aff8d))
288 | * Fix to change environment ([448d68b](https://github.com/maximegris/angular-electron/commit/448d68b))
289 | * version 3.1.0 ([f7c71e7](https://github.com/maximegris/angular-electron/commit/f7c71e7))
290 |
291 |
292 |
293 | ## 3.0.1 (2018-03-07)
294 |
295 | * fix/ icon app ([22699ef](https://github.com/maximegris/angular-electron/commit/22699ef))
296 | * version 3.0.1 ([5258ff1](https://github.com/maximegris/angular-electron/commit/5258ff1))
297 |
298 |
299 |
300 | ## 3.0.0 (2018-02-25)
301 |
302 | * fix/ TranslateModule test ([7863aa9](https://github.com/maximegris/angular-electron/commit/7863aa9))
303 | * Ng not ejected anymore ([67ab31c](https://github.com/maximegris/angular-electron/commit/67ab31c))
304 | * pin all dependency versions ([0558d6a](https://github.com/maximegris/angular-electron/commit/0558d6a))
305 | * update dependencies and fix unit tests ([4d3ca6e](https://github.com/maximegris/angular-electron/commit/4d3ca6e))
306 |
307 |
308 |
309 | ## 2.7.1 (2018-02-15)
310 |
311 | * ref/ dernière version cli ([3df8158](https://github.com/maximegris/angular-electron/commit/3df8158))
312 | * version 2.7.1 ([1ae6f7a](https://github.com/maximegris/angular-electron/commit/1ae6f7a))
313 |
314 |
315 |
316 | ## 2.7.0 (2018-02-15)
317 |
318 | * Correction of a word. ([d6655c7](https://github.com/maximegris/angular-electron/commit/d6655c7))
319 | * feat/ add webview directive ([e1b5600](https://github.com/maximegris/angular-electron/commit/e1b5600))
320 | * migrate Angular to 5.2.0 ([b8cf343](https://github.com/maximegris/angular-electron/commit/b8cf343))
321 | * ref/ Remove sponsor ([2a28239](https://github.com/maximegris/angular-electron/commit/2a28239))
322 | * ref/ update angular & dep ([e3b1fab](https://github.com/maximegris/angular-electron/commit/e3b1fab))
323 | * ref/ upgrade electron (security issue) ([f6a0c4e](https://github.com/maximegris/angular-electron/commit/f6a0c4e))
324 | * version bump + logo resize ([3545d16](https://github.com/maximegris/angular-electron/commit/3545d16))
325 | * fix: fixes maximegris/angular-electron#118 ([6d21e69](https://github.com/maximegris/angular-electron/commit/6d21e69)), closes [maximegris/angular-electron#118](https://github.com/maximegris/angular-electron/issues/118)
326 | * fix: fixes maximegris/angular-electron#98 ([136344b](https://github.com/maximegris/angular-electron/commit/136344b)), closes [maximegris/angular-electron#98](https://github.com/maximegris/angular-electron/issues/98)
327 |
328 |
329 |
330 | ## 2.4.1 (2017-12-14)
331 |
332 | * fix/ Manage icons for linux binary generation ([ccd0601](https://github.com/maximegris/angular-electron/commit/ccd0601))
333 | * version 2.4.1 ([5fcfca0](https://github.com/maximegris/angular-electron/commit/5fcfca0))
334 |
335 |
336 |
337 | ## 2.4.0 (2017-12-08)
338 |
339 | * Use HttpClientModule ([5704e2e](https://github.com/maximegris/angular-electron/commit/5704e2e))
340 | * version 2.4.0 ([0437b33](https://github.com/maximegris/angular-electron/commit/0437b33))
341 |
342 |
343 |
344 | ## 2.3.0 (2017-12-04)
345 |
346 | * add ngx translate ([facda37](https://github.com/maximegris/angular-electron/commit/facda37))
347 |
348 |
349 |
350 | ## 2.2.0 (2017-11-28)
351 |
352 | * Brought back scripts defined in webpack.config.js ([441da3d](https://github.com/maximegris/angular-electron/commit/441da3d))
353 | * migrate to Angular 5.0.3 ([f4bc5b2](https://github.com/maximegris/angular-electron/commit/f4bc5b2))
354 | * Update LICENSE badge ([fa783aa](https://github.com/maximegris/angular-electron/commit/fa783aa))
355 | * Update to electron-builder ([0e94b52](https://github.com/maximegris/angular-electron/commit/0e94b52))
356 |
357 |
358 |
359 | ## 2.1.1 (2017-11-19)
360 |
361 | * Move codesponsor ([064be4c](https://github.com/maximegris/angular-electron/commit/064be4c))
362 |
363 |
364 |
365 | ## 2.1.0 (2017-11-19)
366 |
367 | * Add codesponsor ([87e695d](https://github.com/maximegris/angular-electron/commit/87e695d))
368 | * Add script for winportable ([2be2dae](https://github.com/maximegris/angular-electron/commit/2be2dae))
369 | * Add support for building a Windows self-contained executable ([7cfa790](https://github.com/maximegris/angular-electron/commit/7cfa790))
370 | * fix/ electron-packager need favicon >= 256x256 on Windows ([d2c253f](https://github.com/maximegris/angular-electron/commit/d2c253f))
371 | * fix/ refact webpack config (inspired by ng eject Angular 5) ([d1c30ac](https://github.com/maximegris/angular-electron/commit/d1c30ac))
372 | * fix/ replace aotPlugin in no prod mode ([a0caf1e](https://github.com/maximegris/angular-electron/commit/a0caf1e))
373 | * fix/ Replace AotPlugin to AngularCompilerPlugin ([bef106e](https://github.com/maximegris/angular-electron/commit/bef106e))
374 | * fix/ Update README Angular 5 ([93c6949](https://github.com/maximegris/angular-electron/commit/93c6949))
375 | * fix/ webpack template path ([518b66b](https://github.com/maximegris/angular-electron/commit/518b66b))
376 | * Mgrate to Angular 5.0.2 ([bd7bed6](https://github.com/maximegris/angular-electron/commit/bd7bed6))
377 | * Update package.json ([b16cf73](https://github.com/maximegris/angular-electron/commit/b16cf73))
378 | * Version 2.1.0 ([fccef2f](https://github.com/maximegris/angular-electron/commit/fccef2f))
379 |
380 |
381 |
382 | ## 2.0.0 (2017-11-13)
383 |
384 | * Add buffer to externals ([7e797f0](https://github.com/maximegris/angular-electron/commit/7e797f0))
385 | * Edit a typo on README ([956a2bc](https://github.com/maximegris/angular-electron/commit/956a2bc))
386 | * Fix #55 , and also added functionality for scripts global building ([012a894](https://github.com/maximegris/angular-electron/commit/012a894)), closes [#55](https://github.com/maximegris/angular-electron/issues/55)
387 | * Fix #55 removed bootstraps.css which for example purpose before. ([41445eb](https://github.com/maximegris/angular-electron/commit/41445eb)), closes [#55](https://github.com/maximegris/angular-electron/issues/55)
388 | * License MIT ([73494b7](https://github.com/maximegris/angular-electron/commit/73494b7))
389 | * Migrate to Angular 5 ([3a3ffe1](https://github.com/maximegris/angular-electron/commit/3a3ffe1))
390 |
391 |
392 |
393 | ## 1.9.0 (2017-09-22)
394 |
395 | * feat/ launch electron & webpack in // (npm run start) ([8c37cc4](https://github.com/maximegris/angular-electron/commit/8c37cc4))
396 | * ref/ Exclude node_modules (tslint) ([412a0a5](https://github.com/maximegris/angular-electron/commit/412a0a5))
397 |
398 |
399 |
400 | ## 1.8.1 (2017-09-22)
401 |
402 | * ref/ add package-lock in gitignore ([4edd98d](https://github.com/maximegris/angular-electron/commit/4edd98d))
403 | * remove package-lock ([8e98627](https://github.com/maximegris/angular-electron/commit/8e98627))
404 | * upgrade angular version 4.4.3 ([10d0f87](https://github.com/maximegris/angular-electron/commit/10d0f87))
405 | * version 1.8.1 ([70879d1](https://github.com/maximegris/angular-electron/commit/70879d1))
406 |
407 |
408 |
409 | ## 1.8.0 (2017-09-09)
410 |
411 | * upgrade lib version ([2ac2aa0](https://github.com/maximegris/angular-electron/commit/2ac2aa0))
412 |
413 |
414 |
415 | ## 1.7.0 (2017-08-18)
416 |
417 | * ref/ Update Angular (4.3.5) / Electron (1.7.2) / Electron Packager (8.7.2) / Typescript (2.5.0) ([f97cd81](https://github.com/maximegris/angular-electron/commit/f97cd81))
418 |
419 |
420 |
421 | ## 1.6.1 (2017-07-27)
422 |
423 | * fix/ angular-cli error in prod compilation with aot ([c26a5ae](https://github.com/maximegris/angular-electron/commit/c26a5ae))
424 | * version 1.6.1 ([899babd](https://github.com/maximegris/angular-electron/commit/899babd))
425 |
426 |
427 |
428 | ## 1.6.0 (2017-07-16)
429 |
430 | * ajout package-lock npm v5 ([09c0840](https://github.com/maximegris/angular-electron/commit/09c0840))
431 | * Change background img ([7e58717](https://github.com/maximegris/angular-electron/commit/7e58717))
432 | * Fix npm run build:prod ([c23bade](https://github.com/maximegris/angular-electron/commit/c23bade))
433 | * fix/ Bindings not updating automatically #44 ([2a90191](https://github.com/maximegris/angular-electron/commit/2a90191)), closes [#44](https://github.com/maximegris/angular-electron/issues/44)
434 | * fix/ e2e test with jasmine2 ([9c51f32](https://github.com/maximegris/angular-electron/commit/9c51f32))
435 | * fix/ typescript issues ([bb0a6ab](https://github.com/maximegris/angular-electron/commit/bb0a6ab))
436 | * increment version deps ([bde452c](https://github.com/maximegris/angular-electron/commit/bde452c))
437 | * Revert last pull request - break production compilation ([ccc9064](https://github.com/maximegris/angular-electron/commit/ccc9064))
438 | * upgrade angular version to 4.3.0 ([ab16959](https://github.com/maximegris/angular-electron/commit/ab16959))
439 |
440 |
441 |
442 | ## 1.5.0 (2017-06-10)
443 |
444 | * fix/ karma Unit test ([ea13d6d](https://github.com/maximegris/angular-electron/commit/ea13d6d))
445 | * fix/ remove yarn because of error with module dep in prod builds ([8a49a45](https://github.com/maximegris/angular-electron/commit/8a49a45))
446 | * update yarn lock ([18c0e62](https://github.com/maximegris/angular-electron/commit/18c0e62))
447 |
448 |
449 |
450 | ## 1.4.4 (2017-06-08)
451 |
452 | * fix/ Fix npm run lint ([db7972a](https://github.com/maximegris/angular-electron/commit/db7972a))
453 | * ref/ electron ./dist more generic ([7e71add](https://github.com/maximegris/angular-electron/commit/7e71add))
454 | * Replace const icon to let icon ([dadf65f](https://github.com/maximegris/angular-electron/commit/dadf65f))
455 |
456 |
457 |
458 | ## 1.4.3 (2017-06-06)
459 |
460 | * fix/ favicon path during packaging ([aa2b012](https://github.com/maximegris/angular-electron/commit/aa2b012))
461 | * remove build node 8 till node-sass failed ([34f201d](https://github.com/maximegris/angular-electron/commit/34f201d))
462 | * v1.4.3 ([4961fb0](https://github.com/maximegris/angular-electron/commit/4961fb0))
463 |
464 |
465 |
466 | ## 1.4.2 (2017-05-31)
467 |
468 | * Change dep versions ([62d08d3](https://github.com/maximegris/angular-electron/commit/62d08d3))
469 | * install npm dep when building ([56948d0](https://github.com/maximegris/angular-electron/commit/56948d0))
470 | * Minor update ([5f282b7](https://github.com/maximegris/angular-electron/commit/5f282b7))
471 | * No hot reload in browser ([7892f0d](https://github.com/maximegris/angular-electron/commit/7892f0d))
472 | * update Electron v1.6.10 ([f2f2080](https://github.com/maximegris/angular-electron/commit/f2f2080))
473 | * upgrade ng/electron dependencies ([78b0f27](https://github.com/maximegris/angular-electron/commit/78b0f27))
474 | * chore(package): bump dependencies ([b62c7b6](https://github.com/maximegris/angular-electron/commit/b62c7b6))
475 |
476 |
477 |
478 | ## 1.4.0 (2017-05-23)
479 |
480 | * 1.4.0 ([23213c4](https://github.com/maximegris/angular-electron/commit/23213c4))
481 | * Change style home page ([93dcc52](https://github.com/maximegris/angular-electron/commit/93dcc52))
482 | * Fixed compiler warnings ([fca6b15](https://github.com/maximegris/angular-electron/commit/fca6b15))
483 | * ref/ electron main from js to ts ([835d32b](https://github.com/maximegris/angular-electron/commit/835d32b))
484 | * Remove caret & tilde ([dd98155](https://github.com/maximegris/angular-electron/commit/dd98155))
485 |
486 |
487 |
488 | ## 1.3.5 (2017-05-18)
489 |
490 | * Add new tags ([cd07a86](https://github.com/maximegris/angular-electron/commit/cd07a86))
491 | * v 1.3.5 ([d528a71](https://github.com/maximegris/angular-electron/commit/d528a71))
492 |
493 |
494 |
495 | ## 1.3.4 (2017-05-12)
496 |
497 | * feat/ add nodejs native lib in webpack config ([27d9bc6](https://github.com/maximegris/angular-electron/commit/27d9bc6))
498 | * Fix issue #15 ([d77cbf1](https://github.com/maximegris/angular-electron/commit/d77cbf1)), closes [#15](https://github.com/maximegris/angular-electron/issues/15)
499 | * Ref/ Electron packager in external file ([17b04e8](https://github.com/maximegris/angular-electron/commit/17b04e8))
500 | * version 1.3.4 ([374af16](https://github.com/maximegris/angular-electron/commit/374af16))
501 |
502 |
503 |
504 | ## 1.3.3 (2017-05-10)
505 |
506 | * Chapters order ([a772b9c](https://github.com/maximegris/angular-electron/commit/a772b9c))
507 | * Chapters order ([06547e5](https://github.com/maximegris/angular-electron/commit/06547e5))
508 | * Delete spec file of electron.service ([083498e](https://github.com/maximegris/angular-electron/commit/083498e))
509 | * Fix issue #15 ([e7cd6e6](https://github.com/maximegris/angular-electron/commit/e7cd6e6)), closes [#15](https://github.com/maximegris/angular-electron/issues/15)
510 | * Move Browser mode chapter ([8818750](https://github.com/maximegris/angular-electron/commit/8818750))
511 | * Version 1.3.3 ([f4db75b](https://github.com/maximegris/angular-electron/commit/f4db75b))
512 |
513 |
514 |
515 | ## 1.3.2 (2017-05-05)
516 |
517 | * Add comments of how conditional import works ([e6c1b3b](https://github.com/maximegris/angular-electron/commit/e6c1b3b))
518 | * Conditional import of Electron/NodeJS libs - The app can be launch in browser mode ([c434f8a](https://github.com/maximegris/angular-electron/commit/c434f8a))
519 | * Fix indentation ([6a9836a](https://github.com/maximegris/angular-electron/commit/6a9836a))
520 | * Fix prepree2e script ([b2af4fd](https://github.com/maximegris/angular-electron/commit/b2af4fd))
521 | * Set e2e tests ([d223974](https://github.com/maximegris/angular-electron/commit/d223974))
522 | * Suround electron browser by try/catch ([88be472](https://github.com/maximegris/angular-electron/commit/88be472))
523 | * Update @types/node ([9d43304](https://github.com/maximegris/angular-electron/commit/9d43304))
524 | * Update readme with e2e info ([01bbf13](https://github.com/maximegris/angular-electron/commit/01bbf13))
525 | * update version ([0849a0a](https://github.com/maximegris/angular-electron/commit/0849a0a))
526 |
527 |
528 |
529 | ## 1.3.1 (2017-05-05)
530 |
531 | * Add routing module ([7334ce8](https://github.com/maximegris/angular-electron/commit/7334ce8))
532 | * Fixed hardcoded path in glob copy, blocking assets after eject ([815d519](https://github.com/maximegris/angular-electron/commit/815d519))
533 | * update comments in dev/prod env files ([7cf6a51](https://github.com/maximegris/angular-electron/commit/7cf6a51))
534 | * Version 1.3.1 ([f18ac77](https://github.com/maximegris/angular-electron/commit/f18ac77))
535 |
536 |
537 |
538 | ## 1.3.0 (2017-05-01)
539 |
540 | * Fix webpack prod/dev env ([8549da1](https://github.com/maximegris/angular-electron/commit/8549da1))
541 |
542 |
543 |
544 | ## 1.2.1 (2017-04-30)
545 |
546 | * allowJs ([4efd188](https://github.com/maximegris/angular-electron/commit/4efd188))
547 | * Example url background in scss ([3705a35](https://github.com/maximegris/angular-electron/commit/3705a35))
548 | * Fix electron build (extract-zip workaround) ([a7ee90e](https://github.com/maximegris/angular-electron/commit/a7ee90e))
549 | * Fix webpack config url in css ([cea4be5](https://github.com/maximegris/angular-electron/commit/cea4be5))
550 | * html loader ([c55558a](https://github.com/maximegris/angular-electron/commit/c55558a))
551 | * update version 1.2.1 ([78e8da7](https://github.com/maximegris/angular-electron/commit/78e8da7))
552 |
553 |
554 |
555 | ## 1.2.0 (2017-04-19)
556 |
557 | * Set one example of css class in app component ([a15775f](https://github.com/maximegris/angular-electron/commit/a15775f))
558 | * Update npm dependencies ([0a93ebe](https://github.com/maximegris/angular-electron/commit/0a93ebe))
559 |
560 |
561 |
562 | ## 1.1.2 (2017-04-18)
563 |
564 | * Fix typo & fix script electron:mac ([bd06859](https://github.com/maximegris/angular-electron/commit/bd06859))
565 | * Set theme jekyll-theme-architect ([644d857](https://github.com/maximegris/angular-electron/commit/644d857))
566 | * update README ([97fa63d](https://github.com/maximegris/angular-electron/commit/97fa63d))
567 | * update README ([23fc0a9](https://github.com/maximegris/angular-electron/commit/23fc0a9))
568 | * update README ([a8dcf6a](https://github.com/maximegris/angular-electron/commit/a8dcf6a))
569 | * v1.1.2 ([e29e467](https://github.com/maximegris/angular-electron/commit/e29e467))
570 |
571 |
572 |
573 | ## 1.1.1 (2017-04-12)
574 |
575 | * Fix webpack.config file path (travisci) ([a172df9](https://github.com/maximegris/angular-electron/commit/a172df9))
576 | * live reload on disk ([7bb2f8b](https://github.com/maximegris/angular-electron/commit/7bb2f8b))
577 | * Remove unused dependency (webpack-dev-server) ([e9150f4](https://github.com/maximegris/angular-electron/commit/e9150f4))
578 |
579 |
580 |
581 | ## 1.1.0 (2017-04-12)
582 |
583 | * add depdencies CI & Licence ([6ceb0f2](https://github.com/maximegris/angular-electron/commit/6ceb0f2))
584 | * Override webpack configuration ([60d6116](https://github.com/maximegris/angular-electron/commit/60d6116))
585 |
586 |
587 |
588 | ## 1.0.3 (2017-04-07)
589 |
590 | * Add TravisCI ([e5640fd](https://github.com/maximegris/angular-electron/commit/e5640fd))
591 | * v1.0.3 ([9866d53](https://github.com/maximegris/angular-electron/commit/9866d53))
592 |
593 |
594 |
595 | ## 1.0.2 (2017-04-07)
596 |
597 | * Add TravisCI ([ef4b80e](https://github.com/maximegris/angular-electron/commit/ef4b80e))
598 | * Fix typo ([f964c3f](https://github.com/maximegris/angular-electron/commit/f964c3f))
599 | * Fix typo ([e42bb5e](https://github.com/maximegris/angular-electron/commit/e42bb5e))
600 | * Update README ([3bb45b3](https://github.com/maximegris/angular-electron/commit/3bb45b3))
601 | * Update README with angular-cli doc ([5a57578](https://github.com/maximegris/angular-electron/commit/5a57578))
602 | * v1.0.2 ([1bd8e0e](https://github.com/maximegris/angular-electron/commit/1bd8e0e))
603 |
604 |
605 |
606 | ## 1.0.1 (2017-04-03)
607 |
608 | * feat/ Add electron-packager scripts ([57891dc](https://github.com/maximegris/angular-electron/commit/57891dc))
609 | * ref/ update README ([7fddc20](https://github.com/maximegris/angular-electron/commit/7fddc20))
610 | * update README ([9a983c1](https://github.com/maximegris/angular-electron/commit/9a983c1))
611 | * v1.0.0 ([7a21eb9](https://github.com/maximegris/angular-electron/commit/7a21eb9))
612 | * v1.0.1 ([68275a3](https://github.com/maximegris/angular-electron/commit/68275a3))
613 | * chore: initial commit from @angular/cli ([616a69e](https://github.com/maximegris/angular-electron/commit/616a69e))
614 |
615 |
616 |
617 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | Copyright 2018 - Maxime GRIS
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
4 |
5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
6 |
7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
8 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # JW Meeting display tool
2 |
3 | This is a useful tool for displaying scriptures, books & magazines in congregation meetings. You can import an epub file for a publication and then display the individual paragraphs along with the cited scriptures from an article/page on a second screen.
4 |
5 | If you have any issues or feature requests for this application please add them in the issues section.
6 |
7 | Click here to download the latest release
8 |
9 | _**Please note:** Some users may experience an issue when downloading the application. Windows does not automatically trust apps which have a small number of downloads, to bypass this issue follow the steps below..._
10 |
11 | 
12 |
13 | ### Features
14 |
15 | - Display scriptures from the bible
16 | - Display paragraphs and cited scriptures from the study watchtower or other study publications
17 | - Customize the font size, font color & background of the display
18 | - Create a slideshow of content to use during the meetings
19 | - Display on a second screen for use with zoom
20 |
21 | ### Coming soon!
22 |
23 | - Display images direct from the selected publication
24 | - Upload your own images for use in talks
25 |
26 | ### Screenshots
27 |
28 | Home screen | Publication display
29 | :-------------------------:|:-------------------------:
30 |  | 
31 |
32 | Select scriptures | Publication display
33 | :-------------------------:|:-------------------------:
34 |  | 
35 |
36 | ### Contributing
37 | Any contributions to this project would be greatly appreciated! Information about how to run it locally is available here https://github.com/01CodeLT/meeting-display/issues/3
38 |
--------------------------------------------------------------------------------
/_config.yml:
--------------------------------------------------------------------------------
1 | theme: jekyll-theme-architect
--------------------------------------------------------------------------------
/angular.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
3 | "version": 1,
4 | "newProjectRoot": "projects",
5 | "projects": {
6 | "angular-electron": {
7 | "root": "",
8 | "sourceRoot": "src",
9 | "projectType": "application",
10 | "architect": {
11 | "build": {
12 | "builder": "@angular-builders/custom-webpack:browser",
13 | "options": {
14 | "outputPath": "dist",
15 | "index": "src/index.html",
16 | "main": "src/main.ts",
17 | "tsConfig": "src/tsconfig.app.json",
18 | "polyfills": "src/polyfills.ts",
19 | "assets": [
20 | "src/assets"
21 | ],
22 | "styles": [
23 | "src/assets/semantic/semantic.min.css",
24 | "src/styles.scss"
25 | ],
26 | "scripts": [],
27 | "customWebpackConfig": {
28 | "path": "./angular.webpack.js"
29 | }
30 | },
31 | "configurations": {
32 | "dev": {
33 | "optimization": false,
34 | "outputHashing": "all",
35 | "sourceMap": true,
36 | "extractCss": true,
37 | "namedChunks": false,
38 | "aot": false,
39 | "extractLicenses": true,
40 | "vendorChunk": false,
41 | "buildOptimizer": false,
42 | "fileReplacements": [
43 | {
44 | "replace": "src/environments/environment.ts",
45 | "with": "src/environments/environment.dev.ts"
46 | }
47 | ]
48 | },
49 | "web": {
50 | "optimization": false,
51 | "outputHashing": "all",
52 | "sourceMap": true,
53 | "extractCss": true,
54 | "namedChunks": false,
55 | "aot": false,
56 | "extractLicenses": true,
57 | "vendorChunk": false,
58 | "buildOptimizer": false,
59 | "fileReplacements": [
60 | {
61 | "replace": "src/environments/environment.ts",
62 | "with": "src/environments/environment.web.ts"
63 | }
64 | ]
65 | },
66 | "production": {
67 | "optimization": true,
68 | "outputHashing": "all",
69 | "sourceMap": false,
70 | "extractCss": true,
71 | "namedChunks": false,
72 | "aot": true,
73 | "extractLicenses": true,
74 | "vendorChunk": false,
75 | "buildOptimizer": true,
76 | "fileReplacements": [
77 | {
78 | "replace": "src/environments/environment.ts",
79 | "with": "src/environments/environment.prod.ts"
80 | }
81 | ]
82 | }
83 | }
84 | },
85 | "serve": {
86 | "builder": "@angular-builders/custom-webpack:dev-server",
87 | "options": {
88 | "browserTarget": "angular-electron:build"
89 | },
90 | "configurations": {
91 | "dev": {
92 | "browserTarget": "angular-electron:build:dev"
93 | },
94 | "web": {
95 | "browserTarget": "angular-electron:build:web"
96 | },
97 | "production": {
98 | "browserTarget": "angular-electron:build:production"
99 | }
100 | }
101 | },
102 | "extract-i18n": {
103 | "builder": "@angular-devkit/build-angular:extract-i18n",
104 | "options": {
105 | "browserTarget": "angular-electron:build"
106 | }
107 | },
108 | "test": {
109 | "builder": "@angular-builders/custom-webpack:karma",
110 | "options": {
111 | "main": "src/test.ts",
112 | "polyfills": "src/polyfills-test.ts",
113 | "tsConfig": "src/tsconfig.spec.json",
114 | "karmaConfig": "src/karma.conf.js",
115 | "scripts": [],
116 | "styles": [
117 | "src/styles.scss"
118 | ],
119 | "assets": [
120 | "src/assets"
121 | ],
122 | "customWebpackConfig": {
123 | "path": "./angular.webpack.js",
124 | "target": "electron-renderer"
125 | }
126 | }
127 | },
128 | "lint": {
129 | "builder": "@angular-eslint/builder:lint",
130 | "options": {
131 | "eslintConfig": ".eslintrc.json",
132 | "tsConfig": [
133 | "src/tsconfig.app.json",
134 | "src/tsconfig.spec.json"
135 | ],
136 | "exclude": [
137 | "**/node_modules/**"
138 | ]
139 | }
140 | }
141 | }
142 | },
143 | "angular-electron-e2e": {
144 | "root": "e2e",
145 | "projectType": "application",
146 | "architect": {
147 | "lint": {
148 | "builder": "@angular-eslint/builder:lint",
149 | "options": {
150 | "eslintConfig": ".eslintrc.json",
151 | "tsConfig": [
152 | "e2e/tsconfig.e2e.json"
153 | ],
154 | "exclude": [
155 | "**/node_modules/**"
156 | ]
157 | }
158 | }
159 | }
160 | }
161 | },
162 | "defaultProject": "angular-electron",
163 | "schematics": {
164 | "@schematics/angular:component": {
165 | "prefix": "app",
166 | "styleext": "scss"
167 | },
168 | "@schematics/angular:directive": {
169 | "prefix": "app"
170 | }
171 | },
172 | "cli": {
173 | "analytics": false
174 | }
175 | }
--------------------------------------------------------------------------------
/angular.webpack.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Custom angular webpack configuration
3 | */
4 |
5 | module.exports = (config, options) => {
6 | config.target = 'electron-renderer';
7 | if (options.customWebpackConfig.target) {
8 | config.target = options.customWebpackConfig.target;
9 | } else if (options.fileReplacements) {
10 | for(let fileReplacement of options.fileReplacements) {
11 | if (fileReplacement.replace !== 'src/environments/environment.ts') {
12 | continue;
13 | }
14 |
15 | let fileReplacementParts = fileReplacement['with'].split('.');
16 | if (['dev', 'prod', 'test', 'electron-renderer'].indexOf(fileReplacementParts[1]) < 0) {
17 | config.target = fileReplacementParts[1];
18 | }
19 | break;
20 | }
21 | }
22 |
23 | return config;
24 | }
25 |
--------------------------------------------------------------------------------
/e2e/common-setup.ts:
--------------------------------------------------------------------------------
1 | const Application = require('spectron').Application;
2 | const electronPath = require('electron'); // Require Electron from the binaries included in node_modules.
3 | const path = require('path');
4 |
5 | export default function setup(): void {
6 | beforeEach(async function () {
7 | this.app = new Application({
8 | // Your electron path can be any binary
9 | // i.e for OSX an example path could be '/Applications/MyApp.app/Contents/MacOS/MyApp'
10 | // But for the sake of the example we fetch it from our node_modules.
11 | path: electronPath,
12 |
13 | // Assuming you have the following directory structure
14 |
15 | // |__ my project
16 | // |__ ...
17 | // |__ main.js
18 | // |__ package.json
19 | // |__ index.html
20 | // |__ ...
21 | // |__ test
22 | // |__ spec.js <- You are here! ~ Well you should be.
23 |
24 | // The following line tells spectron to look and use the main.js file
25 | // and the package.json located 1 level above.
26 | args: [path.join(__dirname, '..')],
27 | webdriverOptions: {}
28 | });
29 | await this.app.start();
30 | const browser = this.app.client;
31 | await browser.waitUntilWindowLoaded();
32 |
33 | browser.timeouts('script', 15000);
34 | });
35 |
36 | afterEach(function () {
37 | if (this.app && this.app.isRunning()) {
38 | return this.app.stop();
39 | }
40 | });
41 | }
42 |
--------------------------------------------------------------------------------
/e2e/main.e2e.ts:
--------------------------------------------------------------------------------
1 | import { expect } from 'chai';
2 | import { SpectronClient } from 'spectron';
3 |
4 | import commonSetup from './common-setup';
5 |
6 | describe('angular-electron App', function () {
7 | commonSetup.apply(this);
8 |
9 | let browser: any;
10 | let client: SpectronClient;
11 |
12 | beforeEach(function () {
13 | client = this.app.client;
14 | browser = client as any;
15 | });
16 |
17 | it('should display message saying App works !', async function () {
18 | const text = await browser.getText('app-home h1');
19 | expect(text).to.equal('App works !');
20 | });
21 |
22 | it('creates initial windows', async function () {
23 | const count = await client.getWindowCount();
24 | expect(count).to.equal(1);
25 | });
26 |
27 | });
28 |
--------------------------------------------------------------------------------
/e2e/tsconfig.e2e.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../out-tsc/e2e",
5 | "module": "commonjs",
6 | "types": [
7 | "mocha"
8 | ]
9 | },
10 | "include": [
11 | "e2e/**/*.ts"
12 | ]
13 | }
14 |
--------------------------------------------------------------------------------
/icon.icns:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/01CodeLT/meeting-display/dce135582e34b70dc518520c6848a19a1e89344b/icon.icns
--------------------------------------------------------------------------------
/icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/01CodeLT/meeting-display/dce135582e34b70dc518520c6848a19a1e89344b/icon.ico
--------------------------------------------------------------------------------
/lib/ControlToolbar.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | var url = require("url");
4 | var path = require("path");
5 | var main_1 = require("../main");
6 | var electron_1 = require("electron");
7 | var toolbarOptions = {
8 | display: true,
9 | x: 0,
10 | y: 0
11 | };
12 | electron_1.app.on('ready', function () {
13 | //Set toolbar options on startup
14 | main_1.optionsStorage.findOne({ _id: 'toolbar' }, function (err, doc) {
15 | toolbarOptions = doc ? doc.values : toolbarOptions;
16 | });
17 | });
18 | function showToolbar() {
19 | //Create toolbar window
20 | if (!exports.toolbarWindow) {
21 | exports.toolbarWindow = new electron_1.BrowserWindow({
22 | width: 370,
23 | height: 52,
24 | x: toolbarOptions.x,
25 | y: toolbarOptions.y,
26 | webPreferences: {
27 | webSecurity: false,
28 | nodeIntegration: true,
29 | allowRunningInsecureContent: (main_1.serve) ? true : false,
30 | },
31 | frame: false,
32 | transparent: true,
33 | alwaysOnTop: true,
34 | resizable: false
35 | });
36 | //Remove menu
37 | exports.toolbarWindow.removeMenu();
38 | //Check that the toolbar isn't out bounds
39 | var winBounds = main_1.mainWindow.getBounds();
40 | var activeScreen = electron_1.screen.getDisplayNearestPoint({ x: winBounds.x, y: winBounds.y });
41 | if ((toolbarOptions.x > activeScreen.bounds.width) || (toolbarOptions.y > activeScreen.bounds.height)) {
42 | exports.toolbarWindow.setBounds({ x: 0, y: 0 });
43 | }
44 | //Electron config
45 | if (main_1.serve) {
46 | require('electron-reload')(__dirname, {
47 | electron: require(__dirname + "/../node_modules/electron")
48 | });
49 | exports.toolbarWindow.loadURL('http://localhost:4200#controller/toolbar');
50 | }
51 | else {
52 | exports.toolbarWindow.loadURL(url.format({
53 | pathname: path.join(__dirname, '../dist/index.html'),
54 | protocol: 'file:',
55 | hash: 'controller/toolbar',
56 | slashes: true
57 | }));
58 | }
59 | //Listen for winow move to launch in same place
60 | exports.toolbarWindow.on('move', function () {
61 | toolbarOptions.x = exports.toolbarWindow.getBounds().x;
62 | toolbarOptions.y = exports.toolbarWindow.getBounds().y;
63 | main_1.optionsStorage.update({ _id: 'toolbar' }, { _id: 'toolbar', values: toolbarOptions }, { upsert: true });
64 | });
65 | }
66 | else {
67 | exports.toolbarWindow.setAlwaysOnTop(true);
68 | exports.toolbarWindow.restore();
69 | }
70 | }
71 | exports.showToolbar = showToolbar;
72 | function hideToolbar() {
73 | exports.toolbarWindow.setAlwaysOnTop(false);
74 | exports.toolbarWindow.minimize();
75 | }
76 | exports.hideToolbar = hideToolbar;
77 | //# sourceMappingURL=ControlToolbar.js.map
--------------------------------------------------------------------------------
/lib/ControlToolbar.ts:
--------------------------------------------------------------------------------
1 | import * as url from 'url';
2 | import * as path from 'path';
3 | import { serve, mainWindow, optionsStorage } from '../main';
4 | import { BrowserWindow, app, screen } from 'electron';
5 |
6 | export let toolbarWindow;
7 | let toolbarOptions = {
8 | display: true,
9 | x: 0,
10 | y: 0
11 | }
12 |
13 | app.on('ready', () => {
14 | //Set toolbar options on startup
15 | optionsStorage.findOne({ _id: 'toolbar' }, (err, doc) => {
16 | toolbarOptions = doc ? doc.values : toolbarOptions;
17 | });
18 | })
19 |
20 | export function showToolbar() {
21 | //Create toolbar window
22 | if (!toolbarWindow) {
23 | toolbarWindow = new BrowserWindow({
24 | width: 370,
25 | height: 52,
26 | x: toolbarOptions.x,
27 | y: toolbarOptions.y,
28 | webPreferences: {
29 | webSecurity: false,
30 | nodeIntegration: true,
31 | allowRunningInsecureContent: (serve) ? true : false,
32 | },
33 | frame: false,
34 | transparent: true,
35 | alwaysOnTop: true,
36 | resizable: false
37 | });
38 |
39 | //Remove menu
40 | toolbarWindow.removeMenu();
41 |
42 | //Check that the toolbar isn't out bounds
43 | let winBounds = mainWindow.getBounds();
44 | let activeScreen = screen.getDisplayNearestPoint({ x: winBounds.x, y: winBounds.y });
45 | if ((toolbarOptions.x > activeScreen.bounds.width) || (toolbarOptions.y > activeScreen.bounds.height)) {
46 | toolbarWindow.setBounds({ x:0, y: 0 });
47 | }
48 |
49 | //Electron config
50 | if (serve) {
51 | require('electron-reload')(__dirname, {
52 | electron: require(`${__dirname}/../node_modules/electron`)
53 | });
54 | toolbarWindow.loadURL('http://localhost:4200#controller/toolbar');
55 | } else {
56 | toolbarWindow.loadURL(url.format({
57 | pathname: path.join(__dirname, '../dist/index.html'),
58 | protocol: 'file:',
59 | hash: 'controller/toolbar',
60 | slashes: true
61 | }));
62 | }
63 |
64 | //Listen for winow move to launch in same place
65 | toolbarWindow.on('move', function () {
66 | toolbarOptions.x = toolbarWindow.getBounds().x;
67 | toolbarOptions.y = toolbarWindow.getBounds().y;
68 | optionsStorage.update({ _id: 'toolbar' }, { _id: 'toolbar', values: toolbarOptions }, { upsert: true });
69 | });
70 | } else {
71 | toolbarWindow.setAlwaysOnTop(true);
72 | toolbarWindow.restore();
73 | }
74 | }
75 |
76 | export function hideToolbar() {
77 | toolbarWindow.setAlwaysOnTop(false);
78 | toolbarWindow.minimize();
79 | }
--------------------------------------------------------------------------------
/lib/DisplaySlide.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | var __spreadArrays = (this && this.__spreadArrays) || function () {
3 | for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
4 | for (var r = Array(s), k = 0, i = 0; i < il; i++)
5 | for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
6 | r[k] = a[j];
7 | return r;
8 | };
9 | Object.defineProperty(exports, "__esModule", { value: true });
10 | var url = require("url");
11 | var path = require("path");
12 | var merge = require("lodash/merge");
13 | var main_1 = require("../main");
14 | var electron_1 = require("electron");
15 | var epub;
16 | var slideshow = { slides: [], active: 0 };
17 | var displayOptions = {
18 | fontSize: 40,
19 | textAlign: 'center',
20 | fontColor: '#696969',
21 | fontLinkColor: '#4271BD',
22 | bgType: 'pub',
23 | bgColor: '#fff',
24 | display: {
25 | windowed: false,
26 | selected: 1,
27 | list: []
28 | }
29 | };
30 | electron_1.app.on('ready', function () {
31 | //Set display options and listen for changes
32 | electron_1.screen.on('display-added', function () { updateDisplayOptions(null); });
33 | electron_1.screen.on('display-removed', function () { updateDisplayOptions(null); });
34 | });
35 | function getDisplayList() {
36 | return Array.from({ length: electron_1.screen.getAllDisplays().length }, function (e, i) { return (i + 1); });
37 | }
38 | function controlDisplay(action) {
39 | var _a;
40 | var args = [];
41 | for (var _i = 1; _i < arguments.length; _i++) {
42 | args[_i - 1] = arguments[_i];
43 | }
44 | (_a = exports.displayWindow.webContents).send.apply(_a, __spreadArrays(['slides-control', action], args));
45 | }
46 | exports.controlDisplay = controlDisplay;
47 | function updateDisplayOptions(updatedOptions) {
48 | if (updatedOptions == null) {
49 | //Get saved options
50 | main_1.optionsStorage.findOne({ _id: 'display' }, function (err, doc) {
51 | console.log(merge(displayOptions, doc.values), doc.values);
52 | displayOptions = doc ? merge(displayOptions, doc.values) : displayOptions;
53 | displayOptions.display.list = getDisplayList();
54 | main_1.mainWindow.webContents.send('slides-options', displayOptions);
55 | if (exports.displayWindow)
56 | exports.displayWindow.webContents.send('slides-options', displayOptions);
57 | });
58 | }
59 | else {
60 | //Move display to selected
61 | if (updatedOptions.display.selected !== displayOptions.display.selected
62 | || updatedOptions.display.windowed !== displayOptions.display.windowed) {
63 | //Set selected display
64 | var displays = electron_1.screen.getAllDisplays();
65 | var externalDisplay = (updatedOptions.display.selected > displays.length) ? displays[0] : displays[updatedOptions.display.selected - 1];
66 | exports.displayWindow.setBounds({
67 | x: externalDisplay.bounds.x,
68 | y: externalDisplay.bounds.y
69 | });
70 | //Change to windowed mode?
71 | exports.displayWindow.setFullScreen(!updatedOptions.display.windowed);
72 | if (updatedOptions.display.windowed == false)
73 | exports.displayWindow.maximize();
74 | }
75 | //Update options
76 | displayOptions = updatedOptions;
77 | main_1.optionsStorage.update({ _id: 'display' }, { _id: 'display', values: updatedOptions }, { upsert: true }, function (err, numReplaced, upsert) {
78 | displayOptions.display.list = getDisplayList();
79 | main_1.mainWindow.webContents.send('slides-options', displayOptions);
80 | if (exports.displayWindow)
81 | exports.displayWindow.webContents.send('slides-options', displayOptions);
82 | });
83 | }
84 | }
85 | exports.updateDisplayOptions = updateDisplayOptions;
86 | function getSlides(event) {
87 | //Send slides to window
88 | event.sender.webContents.send('slides-update', epub, slideshow);
89 | }
90 | exports.getSlides = getSlides;
91 | function updateSlides(event, updatedEpub, updatedSlideshow) {
92 | if (updatedEpub === void 0) { updatedEpub = null; }
93 | if (updatedSlideshow === void 0) { updatedSlideshow = null; }
94 | epub = updatedEpub || epub;
95 | slideshow = updatedSlideshow || slideshow;
96 | //Publish event to other windows
97 | electron_1.BrowserWindow.getAllWindows().forEach(function (window) {
98 | if (window.id !== event.sender.id) {
99 | window.webContents.send('slides-update', epub, slideshow);
100 | }
101 | });
102 | }
103 | exports.updateSlides = updateSlides;
104 | function toggleDisplay() {
105 | if (!exports.displayWindow) {
106 | //Create window if not exists
107 | var displays = electron_1.screen.getAllDisplays();
108 | var externalDisplay = (displayOptions.display.selected > displays.length) ? displays[0] : displays[displayOptions.display.selected - 1];
109 | //Create externalDisplay
110 | if (externalDisplay) {
111 | exports.displayWindow = new electron_1.BrowserWindow({
112 | title: 'Meeting display',
113 | x: externalDisplay.bounds.x,
114 | y: externalDisplay.bounds.y,
115 | webPreferences: {
116 | webSecurity: false,
117 | nodeIntegration: true,
118 | allowRunningInsecureContent: (main_1.serve) ? true : false,
119 | },
120 | fullscreen: !displayOptions.display.windowed,
121 | frame: false
122 | });
123 | //Emitted when window closed
124 | exports.displayWindow.on('closed', function () {
125 | exports.displayWindow = null;
126 | });
127 | //Set as fullscreen
128 | if (displayOptions.display.windowed == false)
129 | exports.displayWindow.maximize();
130 | //Listen for escape
131 | exports.displayWindow.webContents.on('before-input-event', function (event, input) {
132 | if (input.key == 'Escape') {
133 | toggleDisplay();
134 | }
135 | });
136 | //Electron config
137 | if (main_1.serve) {
138 | exports.displayWindow.webContents.openDevTools();
139 | require('electron-reload')(__dirname, {
140 | electron: require(__dirname + "/../node_modules/electron")
141 | });
142 | exports.displayWindow.loadURL('http://localhost:4200#display');
143 | }
144 | else {
145 | exports.displayWindow.loadURL(url.format({
146 | pathname: path.join(__dirname, '../dist/index.html'),
147 | protocol: 'file:',
148 | hash: 'display',
149 | slashes: true
150 | }));
151 | }
152 | }
153 | }
154 | else {
155 | exports.displayWindow.close(); //Close window
156 | exports.displayWindow = null;
157 | }
158 | }
159 | exports.toggleDisplay = toggleDisplay;
160 | //# sourceMappingURL=DisplaySlide.js.map
--------------------------------------------------------------------------------
/lib/DisplaySlide.ts:
--------------------------------------------------------------------------------
1 | import * as url from 'url';
2 | import * as path from 'path';
3 | import merge = require('lodash/merge');
4 | import { serve, mainWindow, optionsStorage } from '../main';
5 | import { BrowserWindow, screen, app } from 'electron';
6 |
7 | interface Settings {
8 | fontSize: number,
9 | textAlign: string,
10 | fontColor: string,
11 | fontLinkColor: string,
12 | bgType: string, //Can be 'color' or 'pub'
13 | bgColor: string,
14 | display: {
15 | windowed: boolean,
16 | selected: number,
17 | list: Array
18 | }
19 | }
20 |
21 | let epub;
22 | let slideshow = { slides: [], active: 0 };
23 |
24 | export let displayWindow: BrowserWindow;
25 | let displayOptions: Settings = {
26 | fontSize: 40,
27 | textAlign: 'center',
28 | fontColor: '#696969',
29 | fontLinkColor: '#4271BD',
30 | bgType: 'pub',
31 | bgColor: '#fff',
32 | display: {
33 | windowed: false,
34 | selected: 1,
35 | list: []
36 | }
37 | }
38 |
39 | app.on('ready', () => {
40 | //Set display options and listen for changes
41 | screen.on('display-added', () => { updateDisplayOptions(null); });
42 | screen.on('display-removed', () => { updateDisplayOptions(null); })
43 | })
44 |
45 | function getDisplayList() {
46 | return Array.from({ length: screen.getAllDisplays().length }, (e, i) => (i + 1));
47 | }
48 |
49 | export function controlDisplay(action, ...args) {
50 | displayWindow.webContents.send('slides-control', action, ...args);
51 | }
52 |
53 | export function updateDisplayOptions(updatedOptions: Settings) {
54 | if (updatedOptions == null) {
55 | //Get saved options
56 | optionsStorage.findOne({ _id: 'display' }, (err, doc) => {
57 | console.log(merge(displayOptions, doc.values), doc.values);
58 | displayOptions = doc ? merge(displayOptions, doc.values) : displayOptions;
59 | displayOptions.display.list = getDisplayList();
60 | mainWindow.webContents.send('slides-options', displayOptions);
61 | if (displayWindow) displayWindow.webContents.send('slides-options', displayOptions);
62 | });
63 | } else {
64 | //Move display to selected
65 | if(
66 | updatedOptions.display.selected !== displayOptions.display.selected
67 | || updatedOptions.display.windowed !== displayOptions.display.windowed
68 | ) {
69 | //Set selected display
70 | let displays = screen.getAllDisplays();
71 | let externalDisplay = (updatedOptions.display.selected > displays.length) ? displays[0] : displays[updatedOptions.display.selected - 1];
72 | displayWindow.setBounds({
73 | x: externalDisplay.bounds.x,
74 | y: externalDisplay.bounds.y
75 | });
76 |
77 | //Change to windowed mode?
78 | displayWindow.setFullScreen(!updatedOptions.display.windowed);
79 | if (updatedOptions.display.windowed == false) displayWindow.maximize();
80 | }
81 |
82 | //Update options
83 | displayOptions = updatedOptions;
84 | optionsStorage.update({ _id: 'display' }, { _id: 'display', values: updatedOptions }, { upsert: true }, (err, numReplaced, upsert) => {
85 | displayOptions.display.list = getDisplayList();
86 | mainWindow.webContents.send('slides-options', displayOptions);
87 | if (displayWindow) displayWindow.webContents.send('slides-options', displayOptions);
88 | });
89 | }
90 | }
91 |
92 | export function getSlides(event) {
93 | //Send slides to window
94 | event.sender.webContents.send('slides-update', epub, slideshow);
95 | }
96 |
97 | export function updateSlides(event, updatedEpub = null, updatedSlideshow = null) {
98 | epub = updatedEpub || epub;
99 | slideshow = updatedSlideshow || slideshow;
100 |
101 | //Publish event to other windows
102 | BrowserWindow.getAllWindows().forEach(window => {
103 | if(window.id !== event.sender.id) {
104 | window.webContents.send('slides-update', epub, slideshow);
105 | }
106 | });
107 | }
108 |
109 | export function toggleDisplay() {
110 | if(!displayWindow) {
111 | //Create window if not exists
112 | let displays = screen.getAllDisplays();
113 | let externalDisplay = (displayOptions.display.selected > displays.length) ? displays[0] : displays[displayOptions.display.selected - 1];
114 |
115 | //Create externalDisplay
116 | if (externalDisplay) {
117 | displayWindow = new BrowserWindow({
118 | title: 'Meeting display',
119 | x: externalDisplay.bounds.x,
120 | y: externalDisplay.bounds.y,
121 | webPreferences: {
122 | webSecurity: false,
123 | nodeIntegration: true,
124 | allowRunningInsecureContent: (serve) ? true : false,
125 | },
126 | fullscreen: !displayOptions.display.windowed,
127 | frame: false
128 | });
129 |
130 | //Emitted when window closed
131 | displayWindow.on('closed', () => {
132 | displayWindow = null;
133 | });
134 |
135 | //Set as fullscreen
136 | if (displayOptions.display.windowed == false) displayWindow.maximize();
137 |
138 | //Listen for escape
139 | displayWindow.webContents.on('before-input-event', (event, input) => {
140 | if (input.key == 'Escape') { toggleDisplay(); }
141 | });
142 |
143 | //Electron config
144 | if (serve) {
145 | displayWindow.webContents.openDevTools();
146 | require('electron-reload')(__dirname, {
147 | electron: require(`${__dirname}/../node_modules/electron`)
148 | });
149 | displayWindow.loadURL('http://localhost:4200#display');
150 | } else {
151 | displayWindow.loadURL(url.format({
152 | pathname: path.join(__dirname, '../dist/index.html'),
153 | protocol: 'file:',
154 | hash: 'display',
155 | slashes: true
156 | }));
157 | }
158 | }
159 | } else {
160 | displayWindow.close(); //Close window
161 | displayWindow = null;
162 | }
163 | }
--------------------------------------------------------------------------------
/lib/EpubManager.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | var fs = require("fs");
4 | var path = require("path");
5 | var NeDB = require("nedb");
6 | var cp = require("child_process");
7 | var main_1 = require("../main");
8 | var node_html_parser_1 = require("node-html-parser");
9 | var electron_1 = require("electron");
10 | var storage = new NeDB({ filename: electron_1.app.getPath('userData') + '/storage/epubs', autoload: true });
11 | function uploadEpub() {
12 | //Open Epub
13 | electron_1.dialog.showOpenDialog({
14 | properties: ['openFile'],
15 | filters: [{ name: 'ePub files', extensions: ['epub'] }],
16 | }).then(function (result) {
17 | try {
18 | if (result.canceled == false) {
19 | //Activate loading state
20 | main_1.mainWindow.webContents.send('epub-upload');
21 | //Setup import process in background
22 | var importProc = cp.fork(path.resolve(__dirname, 'workers/ImportEpub'));
23 | importProc.on('message', function (_a) {
24 | var status = _a.status, _b = _a.data, data = _b === void 0 ? null : _b;
25 | //Show error or insert into db
26 | if (status == false) {
27 | //Log error
28 | console.error(data);
29 | //Show error
30 | electron_1.dialog.showMessageBox(main_1.mainWindow, {
31 | message: 'An error occured whilst importing this publication...'
32 | });
33 | }
34 | else {
35 | //Record event
36 | main_1.Nucleus.track("EPUB_IMPORTED", { title: data.title });
37 | //Add to database
38 | storage.insert(data);
39 | }
40 | //Reload epubs and kill process
41 | listEpubs();
42 | importProc.kill('SIGKILL');
43 | });
44 | //Run import process
45 | importProc.send({
46 | storagePath: main_1.storagePath,
47 | filePath: result.filePaths[0]
48 | });
49 | }
50 | }
51 | catch (e) {
52 | //Log error
53 | console.error(e);
54 | //Show error
55 | electron_1.dialog.showMessageBox(main_1.mainWindow, {
56 | message: 'An error occured whilst importing this publication...'
57 | });
58 | }
59 | });
60 | }
61 | exports.uploadEpub = uploadEpub;
62 | function removeEpub(id) {
63 | //Show confirm dialog and remove
64 | electron_1.dialog.showMessageBox(main_1.mainWindow, {
65 | type: 'question',
66 | buttons: ['Yes', 'No'],
67 | title: 'Confirm',
68 | message: 'Are you sure you want to delete this publication?'
69 | }).then(function (result) {
70 | if (result.response == 0) {
71 | fs.rmdir("" + main_1.storagePath + id, { recursive: true }, function () {
72 | storage.remove({ id: id }, {}, function (err) {
73 | main_1.mainWindow.webContents.send('epub-remove', true);
74 | });
75 | });
76 | }
77 | else {
78 | main_1.mainWindow.webContents.send('epub-remove', false);
79 | }
80 | });
81 | }
82 | exports.removeEpub = removeEpub;
83 | function listEpubs() {
84 | // Find all documents in the collection
85 | storage.find({}, function (err, docs) {
86 | main_1.mainWindow.webContents.send('epub-list', docs || []);
87 | });
88 | }
89 | exports.listEpubs = listEpubs;
90 | function listEpubsFiltered(filters) {
91 | // Find all documents in the collection
92 | storage.find({ title: { $regex: new RegExp(filters.title.toLowerCase(), 'i') } }, function (err, docs) {
93 | main_1.mainWindow.webContents.send('epub-list', docs || []);
94 | });
95 | }
96 | exports.listEpubsFiltered = listEpubsFiltered;
97 | function getEpub(id) {
98 | // Find document by id
99 | storage.find({ id: id }, function (err, docs) {
100 | docs[0].structure = JSON.parse(docs[0].structure);
101 | main_1.mainWindow.webContents.send('epub-get', docs[0]);
102 | });
103 | }
104 | exports.getEpub = getEpub;
105 | function parseEpubPage(id, page) {
106 | //Get all paragraphs in a page
107 | fs.readFile("" + main_1.storagePath + id + "/OEBPS/" + page, { encoding: 'utf8' }, function (err, html) {
108 | //Return error
109 | if (err)
110 | throw err;
111 | //Parse dom
112 | var htmlDom = node_html_parser_1.parse(html);
113 | //Gather scripture footnotes
114 | var scriptures = {};
115 | htmlDom.querySelectorAll('div.extScrpCite').forEach(function (scripture) {
116 | scriptures[scripture.getAttribute('id')] = {
117 | type: 'scripture',
118 | name: scripture.querySelector('strong').text,
119 | text: scripture.querySelector('.extScrpCiteTxt') ? scripture.querySelector('.extScrpCiteTxt').toString().replace(/)/g, '') : ''
120 | };
121 | });
122 | //Gather content
123 | var content = [];
124 | htmlDom.querySelectorAll('.pGroup p').forEach(function (paragraph) {
125 | //Add to final array
126 | content.push({
127 | name: null,
128 | text: paragraph.toString(),
129 | type: paragraph.classNames.includes('qu') ? 'question' : 'paragraph'
130 | });
131 | //Add scriptures below (child elements won't work in dragula)
132 | (paragraph.toString().match(/(href="#citation)([0-9]{0,3})/gm) || []).forEach(function (scripture) {
133 | var citationId = scripture.replace('href="#', '');
134 | content.push(scriptures[citationId]);
135 | delete scriptures[citationId];
136 | });
137 | });
138 | //Dump unused scriptures at end of content array
139 | content = content.concat(Object.values(scriptures));
140 | //Return data
141 | main_1.mainWindow.webContents.send('epub-get-page', { content: content });
142 | });
143 | }
144 | exports.parseEpubPage = parseEpubPage;
145 | function getEpubPageRef(id, ref) {
146 | //Get text by reference (current use for bible only)
147 | fs.readFile("" + main_1.storagePath + id + "/OEBPS/" + ref.bookPath, { encoding: 'utf8' }, function (err, html) {
148 | //Return error
149 | if (err)
150 | throw err;
151 | //Gather chapter path
152 | var htmlDom = node_html_parser_1.parse(html);
153 | var chapters = htmlDom.querySelectorAll('.w_bibleChapter a');
154 | //Check if chapter is valid
155 | if (ref.chapter > (chapters.length == 0 ? 1 : chapters.length - 1)) {
156 | main_1.mainWindow.webContents.send('bibleepub-get-ref', { error: 'The chapter number you have entered does not exist' });
157 | }
158 | //Check for one chapter books
159 | if (chapters.length !== 0) {
160 | //Get chapter path
161 | var chapterNav = chapters.find(function (chapter) {
162 | return chapter.text == ref.chapter;
163 | }).getAttribute('href');
164 | //Get chapter verses html
165 | html = fs.readFileSync("" + main_1.storagePath + id + "/OEBPS/" + chapterNav, { encoding: 'utf8' });
166 | htmlDom = node_html_parser_1.parse(html);
167 | }
168 | //Get chapter verses
169 | var verseHTML = Array.from(htmlDom.querySelectorAll('p')).filter(function (el) { return el.hasAttribute('data-pid'); });
170 | var verseHTMLString = verseHTML.map(function (paragraph) { return paragraph.innerHTML; }).join(" ");
171 | var verses = verseHTMLString.split(/<\/span>/);
172 | //Return selected verses
173 | var selectedVerses = [];
174 | ref.verses = ref.verses.replace(/\s/g, '');
175 | ref.verses.match(/([0-9]{0,3}-[0-9]{0,3})|([0-9]{0,3})/g).forEach(function (match) {
176 | if (match !== "") {
177 | //Create string containing verses
178 | var text = '';
179 | if (match.includes('-')) {
180 | text = verses.slice(parseInt(match.split('-')[0]), parseInt(match.split('-')[1]) + 1).join(' ');
181 | }
182 | else {
183 | text = verses[parseInt(match)];
184 | }
185 | //Check if selection is valid
186 | if (!text)
187 | main_1.mainWindow.webContents.send('bibleepub-get-ref', { error: 'One or more of the entered verses does not exist' });
188 | //Clean text before adding
189 | text = text.replace(/[^]