diff options
-rw-r--r-- | client/.bootstraprc | 125 | ||||
-rw-r--r-- | client/.gitignore | 10 | ||||
-rw-r--r-- | client/app/shared/index.ts | 2 | ||||
-rw-r--r-- | client/app/videos/index.ts | 4 | ||||
-rw-r--r-- | client/config/helpers.js | 17 | ||||
-rw-r--r-- | client/config/webpack.common.js | 261 | ||||
-rw-r--r-- | client/config/webpack.dev.js | 159 | ||||
-rw-r--r-- | client/config/webpack.prod.js | 0 | ||||
-rw-r--r-- | client/images/loading.gif | bin | 673 -> 0 bytes | |||
-rw-r--r-- | client/index.html | 36 | ||||
-rw-r--r-- | client/package.json | 36 | ||||
-rw-r--r-- | client/src/app/app.component.html (renamed from client/app/app.component.html) | 0 | ||||
-rw-r--r-- | client/src/app/app.component.scss (renamed from client/app/app.component.scss) | 0 | ||||
-rw-r--r-- | client/src/app/app.component.ts (renamed from client/app/app.component.ts) | 12 | ||||
-rw-r--r-- | client/src/app/friends/friend.service.ts (renamed from client/app/friends/friend.service.ts) | 2 | ||||
-rw-r--r-- | client/src/app/friends/index.ts (renamed from client/app/friends/index.ts) | 0 | ||||
-rw-r--r-- | client/src/app/login/index.ts (renamed from client/app/login/index.ts) | 0 | ||||
-rw-r--r-- | client/src/app/login/login.component.html (renamed from client/app/login/login.component.html) | 0 | ||||
-rw-r--r-- | client/src/app/login/login.component.ts (renamed from client/app/login/login.component.ts) | 4 | ||||
-rw-r--r-- | client/src/app/shared/index.ts | 2 | ||||
-rw-r--r-- | client/src/app/shared/search/index.ts (renamed from client/app/shared/search/index.ts) | 0 | ||||
-rw-r--r-- | client/src/app/shared/search/search-field.type.ts (renamed from client/app/shared/search/search-field.type.ts) | 0 | ||||
-rw-r--r-- | client/src/app/shared/search/search.component.html (renamed from client/app/shared/search/search.component.html) | 0 | ||||
-rw-r--r-- | client/src/app/shared/search/search.component.ts (renamed from client/app/shared/search/search.component.ts) | 2 | ||||
-rw-r--r-- | client/src/app/shared/search/search.model.ts (renamed from client/app/shared/search/search.model.ts) | 0 | ||||
-rw-r--r-- | client/src/app/shared/users/auth-status.model.ts (renamed from client/app/shared/users/auth-status.model.ts) | 0 | ||||
-rw-r--r-- | client/src/app/shared/users/auth.service.ts (renamed from client/app/shared/users/auth.service.ts) | 0 | ||||
-rw-r--r-- | client/src/app/shared/users/index.ts (renamed from client/app/shared/users/index.ts) | 0 | ||||
-rw-r--r-- | client/src/app/shared/users/token.model.ts (renamed from client/app/shared/users/token.model.ts) | 0 | ||||
-rw-r--r-- | client/src/app/shared/users/user.model.ts (renamed from client/app/shared/users/user.model.ts) | 0 | ||||
-rw-r--r-- | client/src/app/videos/index.ts | 4 | ||||
-rw-r--r-- | client/src/app/videos/shared/index.ts (renamed from client/app/videos/shared/index.ts) | 2 | ||||
-rw-r--r-- | client/src/app/videos/shared/loader/index.ts (renamed from client/app/videos/shared/loader/index.ts) | 0 | ||||
-rw-r--r-- | client/src/app/videos/shared/loader/loader.component.html (renamed from client/app/videos/shared/loader/loader.component.html) | 0 | ||||
-rw-r--r-- | client/src/app/videos/shared/loader/loader.component.scss (renamed from client/app/videos/shared/loader/loader.component.scss) | 0 | ||||
-rw-r--r-- | client/src/app/videos/shared/loader/loader.component.ts (renamed from client/app/videos/shared/loader/loader.component.ts) | 4 | ||||
-rw-r--r-- | client/src/app/videos/shared/pagination.model.ts (renamed from client/app/videos/shared/pagination.model.ts) | 0 | ||||
-rw-r--r-- | client/src/app/videos/shared/sort-field.type.ts (renamed from client/app/videos/shared/sort-field.type.ts) | 0 | ||||
-rw-r--r-- | client/src/app/videos/shared/video.model.ts (renamed from client/app/videos/shared/video.model.ts) | 0 | ||||
-rw-r--r-- | client/src/app/videos/shared/video.service.ts (renamed from client/app/videos/shared/video.service.ts) | 4 | ||||
-rw-r--r-- | client/src/app/videos/video-add/index.ts (renamed from client/app/videos/video-add/index.ts) | 0 | ||||
-rw-r--r-- | client/src/app/videos/video-add/video-add.component.html (renamed from client/app/videos/video-add/video-add.component.html) | 0 | ||||
-rw-r--r-- | client/src/app/videos/video-add/video-add.component.scss (renamed from client/app/videos/video-add/video-add.component.scss) | 0 | ||||
-rw-r--r-- | client/src/app/videos/video-add/video-add.component.ts (renamed from client/app/videos/video-add/video-add.component.ts) | 10 | ||||
-rw-r--r-- | client/src/app/videos/video-list/index.ts (renamed from client/app/videos/video-list/index.ts) | 0 | ||||
-rw-r--r-- | client/src/app/videos/video-list/video-list.component.html (renamed from client/app/videos/video-list/video-list.component.html) | 0 | ||||
-rw-r--r-- | client/src/app/videos/video-list/video-list.component.scss (renamed from client/app/videos/video-list/video-list.component.scss) | 0 | ||||
-rw-r--r-- | client/src/app/videos/video-list/video-list.component.ts (renamed from client/app/videos/video-list/video-list.component.ts) | 8 | ||||
-rw-r--r-- | client/src/app/videos/video-list/video-miniature.component.html (renamed from client/app/videos/video-list/video-miniature.component.html) | 0 | ||||
-rw-r--r-- | client/src/app/videos/video-list/video-miniature.component.scss (renamed from client/app/videos/video-list/video-miniature.component.scss) | 0 | ||||
-rw-r--r-- | client/src/app/videos/video-list/video-miniature.component.ts (renamed from client/app/videos/video-list/video-miniature.component.ts) | 8 | ||||
-rw-r--r-- | client/src/app/videos/video-list/video-sort.component.html (renamed from client/app/videos/video-list/video-sort.component.html) | 0 | ||||
-rw-r--r-- | client/src/app/videos/video-list/video-sort.component.ts (renamed from client/app/videos/video-list/video-sort.component.ts) | 4 | ||||
-rw-r--r-- | client/src/app/videos/video-watch/index.ts (renamed from client/app/videos/video-watch/index.ts) | 0 | ||||
-rw-r--r-- | client/src/app/videos/video-watch/video-watch.component.html (renamed from client/app/videos/video-watch/video-watch.component.html) | 0 | ||||
-rw-r--r-- | client/src/app/videos/video-watch/video-watch.component.scss (renamed from client/app/videos/video-watch/video-watch.component.scss) | 0 | ||||
-rw-r--r-- | client/src/app/videos/video-watch/video-watch.component.ts (renamed from client/app/videos/video-watch/video-watch.component.ts) | 6 | ||||
-rw-r--r-- | client/src/app/videos/video-watch/webtorrent.service.ts (renamed from client/app/videos/video-watch/webtorrent.service.ts) | 2 | ||||
-rw-r--r-- | client/src/assets/favicon.png (renamed from client/images/favicon.png) | bin | 2335 -> 2335 bytes | |||
-rw-r--r-- | client/src/custom-typings.d.ts | 119 | ||||
-rw-r--r-- | client/src/index.html | 17 | ||||
-rw-r--r-- | client/src/main.ts (renamed from client/main.ts) | 5 | ||||
-rw-r--r-- | client/src/polyfills.ts | 28 | ||||
-rw-r--r-- | client/src/sass/application.scss (renamed from client/stylesheets/base.scss) | 0 | ||||
-rw-r--r-- | client/src/sass/pre-customizations.scss | 1 | ||||
-rw-r--r-- | client/src/vendor.ts | 28 | ||||
-rw-r--r-- | client/stylesheets/application.scss | 5 | ||||
-rw-r--r-- | client/stylesheets/bootstrap-variables.scss | 875 | ||||
-rw-r--r-- | client/systemjs.bundle.js | 15 | ||||
-rw-r--r-- | client/systemjs.config.js | 48 | ||||
-rw-r--r-- | client/tsconfig.json | 69 | ||||
-rw-r--r-- | client/webpack.config.js | 16 | ||||
-rw-r--r-- | server.js | 4 |
73 files changed, 888 insertions, 1066 deletions
diff --git a/client/.bootstraprc b/client/.bootstraprc new file mode 100644 index 000000000..a4d4fe689 --- /dev/null +++ b/client/.bootstraprc | |||
@@ -0,0 +1,125 @@ | |||
1 | --- | ||
2 | # Output debugging info | ||
3 | # loglevel: debug | ||
4 | |||
5 | # Major version of Bootstrap: 3 or 4 | ||
6 | bootstrapVersion: 3 | ||
7 | |||
8 | # If Bootstrap version 3 is used - turn on/off custom icon font path | ||
9 | useCustomIconFontPath: true | ||
10 | |||
11 | # Webpack loaders, order matters | ||
12 | styleLoaders: | ||
13 | - style | ||
14 | - css | ||
15 | - sass | ||
16 | |||
17 | # Extract styles to stand-alone css file | ||
18 | # Different settings for different environments can be used, | ||
19 | # It depends on value of NODE_ENV environment variable | ||
20 | # This param can also be set in webpack config: | ||
21 | # entry: 'bootstrap-loader/extractStyles' | ||
22 | extractStyles: false | ||
23 | # env: | ||
24 | # development: | ||
25 | # extractStyles: false | ||
26 | # production: | ||
27 | # extractStyles: true | ||
28 | |||
29 | # Customize Bootstrap variables that get imported before the original Bootstrap variables. | ||
30 | # Thus original Bootstrap variables can depend on values from here. All the bootstrap | ||
31 | # variables are configured with !default, and thus, if you define the variable here, then | ||
32 | # that value is used, rather than the default. However, many bootstrap variables are derived | ||
33 | # from other bootstrap variables, and thus, you want to set this up before we load the | ||
34 | # official bootstrap versions. | ||
35 | # For example, _variables.scss contains: | ||
36 | # $input-color: $gray !default; | ||
37 | # This means you can define $input-color before we load _variables.scss | ||
38 | preBootstrapCustomizations: ./src/sass/pre-customizations.scss | ||
39 | |||
40 | # This gets loaded after bootstrap/variables is loaded and before bootstrap is loaded. | ||
41 | # A good example of this is when you want to override a bootstrap variable to be based | ||
42 | # on the default value of bootstrap. This is pretty specialized case. Thus, you normally | ||
43 | # just override bootrap variables in preBootstrapCustomizations so that derived | ||
44 | # variables will use your definition. | ||
45 | # | ||
46 | # For example, in _variables.scss: | ||
47 | # $input-height: (($font-size-base * $line-height) + ($input-padding-y * 2) + ($border-width * 2)) !default; | ||
48 | # This means that you could define this yourself in preBootstrapCustomizations. Or you can do | ||
49 | # this in bootstrapCustomizations to make the input height 10% bigger than the default calculation. | ||
50 | # Thus you can leverage the default calculations. | ||
51 | # $input-height: $input-height * 1.10; | ||
52 | # bootstrapCustomizations: ./app/styles/bootstrap/customizations.scss | ||
53 | |||
54 | # Import your custom styles here. You have access to all the bootstrap variables. If you require | ||
55 | # your sass files separately, you will not have access to the bootstrap variables, mixins, clases, etc. | ||
56 | # Usually this endpoint-file contains list of @imports of your application styles. | ||
57 | appStyles: ./src/sass/application.scss | ||
58 | |||
59 | ### Bootstrap styles | ||
60 | styles: | ||
61 | |||
62 | # Mixins | ||
63 | mixins: true | ||
64 | |||
65 | # Reset and dependencies | ||
66 | normalize: true | ||
67 | print: true | ||
68 | glyphicons: true | ||
69 | |||
70 | # Core CSS | ||
71 | scaffolding: true | ||
72 | type: true | ||
73 | code: false | ||
74 | grid: true | ||
75 | tables: true | ||
76 | forms: true | ||
77 | buttons: true | ||
78 | |||
79 | # Components | ||
80 | component-animations: false | ||
81 | dropdowns: true | ||
82 | button-groups: true | ||
83 | input-groups: true | ||
84 | navs: false | ||
85 | navbar: false | ||
86 | breadcrumbs: false | ||
87 | pagination: true | ||
88 | pager: false | ||
89 | labels: false | ||
90 | badges: false | ||
91 | jumbotron: false | ||
92 | thumbnails: true | ||
93 | alerts: false | ||
94 | progress-bars: true | ||
95 | media: true | ||
96 | list-group: false | ||
97 | panels: false | ||
98 | wells: false | ||
99 | responsive-embed: false | ||
100 | close: false | ||
101 | |||
102 | # Components w/ JavaScript | ||
103 | modals: false | ||
104 | tooltip: false | ||
105 | popovers: false | ||
106 | carousel: false | ||
107 | |||
108 | # Utility classes | ||
109 | utilities: true | ||
110 | responsive-utilities: true | ||
111 | |||
112 | ### Bootstrap scripts | ||
113 | scripts: | ||
114 | transition: false | ||
115 | alert: false | ||
116 | button: false | ||
117 | carousel: false | ||
118 | collapse: false | ||
119 | dropdown: false | ||
120 | modal: false | ||
121 | tooltip: false | ||
122 | popover: false | ||
123 | scrollspy: false | ||
124 | tab: false | ||
125 | affix: false | ||
diff --git a/client/.gitignore b/client/.gitignore index 81e4a1cf7..b20541002 100644 --- a/client/.gitignore +++ b/client/.gitignore | |||
@@ -1,8 +1,2 @@ | |||
1 | typings | 1 | dist/ |
2 | app/**/*.js | 2 | typings/ |
3 | app/**/*.map | ||
4 | app/**/*.css | ||
5 | stylesheets/index.css | ||
6 | bundles | ||
7 | main.js | ||
8 | main.js.map | ||
diff --git a/client/app/shared/index.ts b/client/app/shared/index.ts deleted file mode 100644 index ad3ee0098..000000000 --- a/client/app/shared/index.ts +++ /dev/null | |||
@@ -1,2 +0,0 @@ | |||
1 | export * from './search/index'; | ||
2 | export * from './users/index' | ||
diff --git a/client/app/videos/index.ts b/client/app/videos/index.ts deleted file mode 100644 index 1c80ac5e5..000000000 --- a/client/app/videos/index.ts +++ /dev/null | |||
@@ -1,4 +0,0 @@ | |||
1 | export * from './shared/index'; | ||
2 | export * from './video-add/index'; | ||
3 | export * from './video-list/index'; | ||
4 | export * from './video-watch/index'; | ||
diff --git a/client/config/helpers.js b/client/config/helpers.js new file mode 100644 index 000000000..24d7dae9f --- /dev/null +++ b/client/config/helpers.js | |||
@@ -0,0 +1,17 @@ | |||
1 | const path = require('path') | ||
2 | |||
3 | const ROOT = path.resolve(__dirname, '..') | ||
4 | |||
5 | console.log('root directory:', root() + '\n') | ||
6 | |||
7 | function hasProcessFlag (flag) { | ||
8 | return process.argv.join('').indexOf(flag) > -1 | ||
9 | } | ||
10 | |||
11 | function root (args) { | ||
12 | args = Array.prototype.slice.call(arguments, 0) | ||
13 | return path.join.apply(path, [ROOT].concat(args)) | ||
14 | } | ||
15 | |||
16 | exports.hasProcessFlag = hasProcessFlag | ||
17 | exports.root = root | ||
diff --git a/client/config/webpack.common.js b/client/config/webpack.common.js new file mode 100644 index 000000000..5f3f44bb1 --- /dev/null +++ b/client/config/webpack.common.js | |||
@@ -0,0 +1,261 @@ | |||
1 | const webpack = require('webpack') | ||
2 | const helpers = require('./helpers') | ||
3 | |||
4 | /* | ||
5 | * Webpack Plugins | ||
6 | */ | ||
7 | |||
8 | var CopyWebpackPlugin = (CopyWebpackPlugin = require('copy-webpack-plugin'), CopyWebpackPlugin.default || CopyWebpackPlugin) | ||
9 | const HtmlWebpackPlugin = require('html-webpack-plugin') | ||
10 | const ForkCheckerPlugin = require('awesome-typescript-loader').ForkCheckerPlugin | ||
11 | |||
12 | /* | ||
13 | * Webpack Constants | ||
14 | */ | ||
15 | const METADATA = { | ||
16 | title: 'PeerTube', | ||
17 | baseUrl: '/' | ||
18 | } | ||
19 | |||
20 | /* | ||
21 | * Webpack configuration | ||
22 | * | ||
23 | * See: http://webpack.github.io/docs/configuration.html#cli | ||
24 | */ | ||
25 | module.exports = { | ||
26 | /* | ||
27 | * Static metadata for index.html | ||
28 | * | ||
29 | * See: (custom attribute) | ||
30 | */ | ||
31 | metadata: METADATA, | ||
32 | |||
33 | /* | ||
34 | * Cache generated modules and chunks to improve performance for multiple incremental builds. | ||
35 | * This is enabled by default in watch mode. | ||
36 | * You can pass false to disable it. | ||
37 | * | ||
38 | * See: http://webpack.github.io/docs/configuration.html#cache | ||
39 | */ | ||
40 | // cache: false, | ||
41 | |||
42 | /* | ||
43 | * The entry point for the bundle | ||
44 | * Our Angular.js app | ||
45 | * | ||
46 | * See: http://webpack.github.io/docs/configuration.html#entry | ||
47 | */ | ||
48 | entry: { | ||
49 | 'polyfills': './src/polyfills.ts', | ||
50 | 'vendor': './src/vendor.ts', | ||
51 | 'main': './src/main.ts' | ||
52 | }, | ||
53 | |||
54 | /* | ||
55 | * Options affecting the resolving of modules. | ||
56 | * | ||
57 | * See: http://webpack.github.io/docs/configuration.html#resolve | ||
58 | */ | ||
59 | resolve: { | ||
60 | /* | ||
61 | * An array of extensions that should be used to resolve modules. | ||
62 | * | ||
63 | * See: http://webpack.github.io/docs/configuration.html#resolve-extensions | ||
64 | */ | ||
65 | extensions: [ '', '.ts', '.js', '.scss' ], | ||
66 | |||
67 | // Make sure root is src | ||
68 | root: helpers.root('src'), | ||
69 | |||
70 | // remove other default values | ||
71 | modulesDirectories: [ 'node_modules' ] | ||
72 | |||
73 | }, | ||
74 | |||
75 | /* | ||
76 | * Options affecting the normal modules. | ||
77 | * | ||
78 | * See: http://webpack.github.io/docs/configuration.html#module | ||
79 | */ | ||
80 | module: { | ||
81 | /* | ||
82 | * An array of applied pre and post loaders. | ||
83 | * | ||
84 | * See: http://webpack.github.io/docs/configuration.html#module-preloaders-module-postloaders | ||
85 | */ | ||
86 | preLoaders: [ | ||
87 | |||
88 | /* | ||
89 | * Tslint loader support for *.ts files | ||
90 | * | ||
91 | * See: https://github.com/wbuchwalter/tslint-loader | ||
92 | */ | ||
93 | // { test: /\.ts$/, loader: 'tslint-loader', exclude: [ helpers.root('node_modules') ] }, | ||
94 | |||
95 | /* | ||
96 | * Source map loader support for *.js files | ||
97 | * Extracts SourceMaps for source files that as added as sourceMappingURL comment. | ||
98 | * | ||
99 | * See: https://github.com/webpack/source-map-loader | ||
100 | */ | ||
101 | { | ||
102 | test: /\.js$/, | ||
103 | loader: 'source-map-loader', | ||
104 | exclude: [ | ||
105 | // these packages have problems with their sourcemaps | ||
106 | helpers.root('node_modules/rxjs'), | ||
107 | helpers.root('node_modules/@angular') | ||
108 | ] | ||
109 | } | ||
110 | |||
111 | ], | ||
112 | |||
113 | /* | ||
114 | * An array of automatically applied loaders. | ||
115 | * | ||
116 | * IMPORTANT: The loaders here are resolved relative to the resource which they are applied to. | ||
117 | * This means they are not resolved relative to the configuration file. | ||
118 | * | ||
119 | * See: http://webpack.github.io/docs/configuration.html#module-loaders | ||
120 | */ | ||
121 | loaders: [ | ||
122 | |||
123 | /* | ||
124 | * Typescript loader support for .ts and Angular 2 async routes via .async.ts | ||
125 | * | ||
126 | * See: https://github.com/s-panferov/awesome-typescript-loader | ||
127 | */ | ||
128 | { | ||
129 | test: /\.ts$/, | ||
130 | loader: 'awesome-typescript-loader', | ||
131 | exclude: [/\.(spec|e2e)\.ts$/] | ||
132 | }, | ||
133 | |||
134 | /* | ||
135 | * Json loader support for *.json files. | ||
136 | * | ||
137 | * See: https://github.com/webpack/json-loader | ||
138 | */ | ||
139 | { | ||
140 | test: /\.json$/, | ||
141 | loader: 'json-loader' | ||
142 | }, | ||
143 | |||
144 | /* | ||
145 | * Raw loader support for *.css files | ||
146 | * Returns file content as string | ||
147 | * | ||
148 | * See: https://github.com/webpack/raw-loader | ||
149 | */ | ||
150 | { | ||
151 | test: /\.scss$/, | ||
152 | exclude: /node_modules/, | ||
153 | loaders: [ 'raw-loader', 'sass-loader' ] | ||
154 | }, | ||
155 | |||
156 | { | ||
157 | test: /\.(woff2?|ttf|eot|svg)$/, | ||
158 | loader: 'url?limit=10000&name=assets/fonts/[hash].[ext]' | ||
159 | }, | ||
160 | |||
161 | /* Raw loader support for *.html | ||
162 | * Returns file content as string | ||
163 | * | ||
164 | * See: https://github.com/webpack/raw-loader | ||
165 | */ | ||
166 | { | ||
167 | test: /\.html$/, | ||
168 | loader: 'raw-loader', | ||
169 | exclude: [ helpers.root('src/index.html') ] | ||
170 | } | ||
171 | |||
172 | ] | ||
173 | |||
174 | }, | ||
175 | |||
176 | /* | ||
177 | * Add additional plugins to the compiler. | ||
178 | * | ||
179 | * See: http://webpack.github.io/docs/configuration.html#plugins | ||
180 | */ | ||
181 | plugins: [ | ||
182 | |||
183 | /* | ||
184 | * Plugin: ForkCheckerPlugin | ||
185 | * Description: Do type checking in a separate process, so webpack don't need to wait. | ||
186 | * | ||
187 | * See: https://github.com/s-panferov/awesome-typescript-loader#forkchecker-boolean-defaultfalse | ||
188 | */ | ||
189 | new ForkCheckerPlugin(), | ||
190 | |||
191 | /* | ||
192 | * Plugin: OccurenceOrderPlugin | ||
193 | * Description: Varies the distribution of the ids to get the smallest id length | ||
194 | * for often used ids. | ||
195 | * | ||
196 | * See: https://webpack.github.io/docs/list-of-plugins.html#occurrenceorderplugin | ||
197 | * See: https://github.com/webpack/docs/wiki/optimization#minimize | ||
198 | */ | ||
199 | new webpack.optimize.OccurenceOrderPlugin(true), | ||
200 | |||
201 | /* | ||
202 | * Plugin: CommonsChunkPlugin | ||
203 | * Description: Shares common code between the pages. | ||
204 | * It identifies common modules and put them into a commons chunk. | ||
205 | * | ||
206 | * See: https://webpack.github.io/docs/list-of-plugins.html#commonschunkplugin | ||
207 | * See: https://github.com/webpack/docs/wiki/optimization#multi-page-app | ||
208 | */ | ||
209 | new webpack.optimize.CommonsChunkPlugin({ | ||
210 | name: [ 'polyfills', 'vendor' ].reverse() | ||
211 | }), | ||
212 | |||
213 | /* | ||
214 | * Plugin: CopyWebpackPlugin | ||
215 | * Description: Copy files and directories in webpack. | ||
216 | * | ||
217 | * Copies project static assets. | ||
218 | * | ||
219 | * See: https://www.npmjs.com/package/copy-webpack-plugin | ||
220 | */ | ||
221 | new CopyWebpackPlugin([{ | ||
222 | from: 'src/assets', | ||
223 | to: 'assets' | ||
224 | }]), | ||
225 | |||
226 | /* | ||
227 | * Plugin: HtmlWebpackPlugin | ||
228 | * Description: Simplifies creation of HTML files to serve your webpack bundles. | ||
229 | * This is especially useful for webpack bundles that include a hash in the filename | ||
230 | * which changes every compilation. | ||
231 | * | ||
232 | * See: https://github.com/ampedandwired/html-webpack-plugin | ||
233 | */ | ||
234 | new HtmlWebpackPlugin({ | ||
235 | template: 'src/index.html', | ||
236 | chunksSortMode: 'dependency' | ||
237 | }), | ||
238 | |||
239 | new webpack.ProvidePlugin({ | ||
240 | jQuery: 'jquery', | ||
241 | $: 'jquery', | ||
242 | jquery: 'jquery' | ||
243 | }) | ||
244 | |||
245 | ], | ||
246 | |||
247 | /* | ||
248 | * Include polyfills or mocks for various node stuff | ||
249 | * Description: Node configuration | ||
250 | * | ||
251 | * See: https://webpack.github.io/docs/configuration.html#node | ||
252 | */ | ||
253 | node: { | ||
254 | global: 'window', | ||
255 | crypto: 'empty', | ||
256 | module: false, | ||
257 | clearImmediate: false, | ||
258 | setImmediate: false | ||
259 | } | ||
260 | |||
261 | } | ||
diff --git a/client/config/webpack.dev.js b/client/config/webpack.dev.js new file mode 100644 index 000000000..19768d872 --- /dev/null +++ b/client/config/webpack.dev.js | |||
@@ -0,0 +1,159 @@ | |||
1 | const helpers = require('./helpers') | ||
2 | const webpackMerge = require('webpack-merge') // used to merge webpack configs | ||
3 | const commonConfig = require('./webpack.common.js') // the settings that are common to prod and dev | ||
4 | |||
5 | /** | ||
6 | * Webpack Plugins | ||
7 | */ | ||
8 | const DefinePlugin = require('webpack/lib/DefinePlugin') | ||
9 | |||
10 | /** | ||
11 | * Webpack Constants | ||
12 | */ | ||
13 | const ENV = process.env.ENV = process.env.NODE_ENV = 'development' | ||
14 | const HMR = helpers.hasProcessFlag('hot') | ||
15 | const METADATA = webpackMerge(commonConfig.metadata, { | ||
16 | host: 'localhost', | ||
17 | port: 3000, | ||
18 | ENV: ENV, | ||
19 | HMR: HMR | ||
20 | }) | ||
21 | |||
22 | /** | ||
23 | * Webpack configuration | ||
24 | * | ||
25 | * See: http://webpack.github.io/docs/configuration.html#cli | ||
26 | */ | ||
27 | module.exports = webpackMerge(commonConfig, { | ||
28 | /** | ||
29 | * Merged metadata from webpack.common.js for index.html | ||
30 | * | ||
31 | * See: (custom attribute) | ||
32 | */ | ||
33 | metadata: METADATA, | ||
34 | |||
35 | /** | ||
36 | * Switch loaders to debug mode. | ||
37 | * | ||
38 | * See: http://webpack.github.io/docs/configuration.html#debug | ||
39 | */ | ||
40 | debug: true, | ||
41 | |||
42 | /** | ||
43 | * Developer tool to enhance debugging | ||
44 | * | ||
45 | * See: http://webpack.github.io/docs/configuration.html#devtool | ||
46 | * See: https://github.com/webpack/docs/wiki/build-performance#sourcemaps | ||
47 | */ | ||
48 | devtool: 'cheap-module-source-map', | ||
49 | |||
50 | /** | ||
51 | * Options affecting the output of the compilation. | ||
52 | * | ||
53 | * See: http://webpack.github.io/docs/configuration.html#output | ||
54 | */ | ||
55 | output: { | ||
56 | /** | ||
57 | * The output directory as absolute path (required). | ||
58 | * | ||
59 | * See: http://webpack.github.io/docs/configuration.html#output-path | ||
60 | */ | ||
61 | path: helpers.root('dist'), | ||
62 | |||
63 | /** | ||
64 | * Specifies the name of each output file on disk. | ||
65 | * IMPORTANT: You must not specify an absolute path here! | ||
66 | * | ||
67 | * See: http://webpack.github.io/docs/configuration.html#output-filename | ||
68 | */ | ||
69 | filename: '[name].bundle.js', | ||
70 | |||
71 | /** | ||
72 | * The filename of the SourceMaps for the JavaScript files. | ||
73 | * They are inside the output.path directory. | ||
74 | * | ||
75 | * See: http://webpack.github.io/docs/configuration.html#output-sourcemapfilename | ||
76 | */ | ||
77 | sourceMapFilename: '[name].map', | ||
78 | |||
79 | /** The filename of non-entry chunks as relative path | ||
80 | * inside the output.path directory. | ||
81 | * | ||
82 | * See: http://webpack.github.io/docs/configuration.html#output-chunkfilename | ||
83 | */ | ||
84 | chunkFilename: '[id].chunk.js', | ||
85 | |||
86 | publicPath: '/client/' | ||
87 | |||
88 | }, | ||
89 | |||
90 | plugins: [ | ||
91 | |||
92 | /** | ||
93 | * Plugin: DefinePlugin | ||
94 | * Description: Define free variables. | ||
95 | * Useful for having development builds with debug logging or adding global constants. | ||
96 | * | ||
97 | * Environment helpers | ||
98 | * | ||
99 | * See: https://webpack.github.io/docs/list-of-plugins.html#defineplugin | ||
100 | */ | ||
101 | // NOTE: when adding more properties, make sure you include them in custom-typings.d.ts | ||
102 | new DefinePlugin({ | ||
103 | 'ENV': JSON.stringify(METADATA.ENV), | ||
104 | 'HMR': METADATA.HMR, | ||
105 | 'process.env': { | ||
106 | 'ENV': JSON.stringify(METADATA.ENV), | ||
107 | 'NODE_ENV': JSON.stringify(METADATA.ENV), | ||
108 | 'HMR': METADATA.HMR | ||
109 | } | ||
110 | }) | ||
111 | ], | ||
112 | |||
113 | /** | ||
114 | * Static analysis linter for TypeScript advanced options configuration | ||
115 | * Description: An extensible linter for the TypeScript language. | ||
116 | * | ||
117 | * See: https://github.com/wbuchwalter/tslint-loader | ||
118 | */ | ||
119 | tslint: { | ||
120 | emitErrors: false, | ||
121 | failOnHint: false, | ||
122 | resourcePath: 'src' | ||
123 | }, | ||
124 | |||
125 | /** | ||
126 | * Webpack Development Server configuration | ||
127 | * Description: The webpack-dev-server is a little node.js Express server. | ||
128 | * The server emits information about the compilation state to the client, | ||
129 | * which reacts to those events. | ||
130 | * | ||
131 | * See: https://webpack.github.io/docs/webpack-dev-server.html | ||
132 | */ | ||
133 | devServer: { | ||
134 | port: METADATA.port, | ||
135 | host: METADATA.host, | ||
136 | historyApiFallback: true, | ||
137 | watchOptions: { | ||
138 | aggregateTimeout: 300, | ||
139 | poll: 1000 | ||
140 | }, | ||
141 | outputPath: helpers.root('dist') | ||
142 | }, | ||
143 | |||
144 | /* | ||
145 | * Include polyfills or mocks for various node stuff | ||
146 | * Description: Node configuration | ||
147 | * | ||
148 | * See: https://webpack.github.io/docs/configuration.html#node | ||
149 | */ | ||
150 | node: { | ||
151 | global: 'window', | ||
152 | crypto: 'empty', | ||
153 | process: true, | ||
154 | module: false, | ||
155 | clearImmediate: false, | ||
156 | setImmediate: false | ||
157 | } | ||
158 | |||
159 | }) | ||
diff --git a/client/config/webpack.prod.js b/client/config/webpack.prod.js new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/client/config/webpack.prod.js | |||
diff --git a/client/images/loading.gif b/client/images/loading.gif deleted file mode 100644 index f2a1bc0c6..000000000 --- a/client/images/loading.gif +++ /dev/null | |||
Binary files differ | |||
diff --git a/client/index.html b/client/index.html deleted file mode 100644 index 6fbcd1fa6..000000000 --- a/client/index.html +++ /dev/null | |||
@@ -1,36 +0,0 @@ | |||
1 | <html> | ||
2 | <head> | ||
3 | <base href="/"> | ||
4 | |||
5 | <title>PeerTube</title> | ||
6 | |||
7 | <meta charset="UTF-8"> | ||
8 | <meta name="viewport" content="width=device-width, initial-scale=1"> | ||
9 | |||
10 | <link rel="stylesheet" href="client/stylesheets/index.css"> | ||
11 | |||
12 | <!-- 1. Load libraries --> | ||
13 | <!-- IE required polyfills, in this exact order --> | ||
14 | <script src="client/node_modules/es6-shim/es6-shim.min.js"></script> | ||
15 | <script src="client/node_modules/zone.js/dist/zone.js"></script> | ||
16 | <script src="client/node_modules/reflect-metadata/Reflect.js"></script> | ||
17 | <script src="client/node_modules/systemjs/dist/system.src.js"></script> | ||
18 | |||
19 | <script src="client/node_modules/jquery/dist/jquery.js"></script> | ||
20 | <script src="client/node_modules/jquery.ui.widget/jquery.ui.widget.js"></script> | ||
21 | <script src="client/node_modules/blueimp-file-upload/js/jquery.fileupload.js"></script> | ||
22 | |||
23 | <script src="client/node_modules/webtorrent/webtorrent.min.js"></script> | ||
24 | |||
25 | <!-- 2. Configure SystemJS --> | ||
26 | <script src="client/systemjs.config.js"></script> | ||
27 | <script> | ||
28 | System.import('client').catch(function(err){ console.error(err); }); | ||
29 | </script> | ||
30 | </head> | ||
31 | |||
32 | <!-- 3. Display the application --> | ||
33 | <body> | ||
34 | <my-app>Loading...</my-app> | ||
35 | </body> | ||
36 | </html> | ||
diff --git a/client/package.json b/client/package.json index dea673357..bfdfe5574 100644 --- a/client/package.json +++ b/client/package.json | |||
@@ -13,11 +13,11 @@ | |||
13 | "url": "git://github.com/Chocobozzz/PeerTube.git" | 13 | "url": "git://github.com/Chocobozzz/PeerTube.git" |
14 | }, | 14 | }, |
15 | "scripts": { | 15 | "scripts": { |
16 | "tsc": "tsc", | ||
17 | "tsc:w": "tsc -w", | ||
18 | "typings": "typings", | 16 | "typings": "typings", |
19 | "postinstall": "typings install", | 17 | "postinstall": "typings install", |
20 | "test": "standard && tslint -c ./tslint.json angular/**/*.ts" | 18 | "test": "standard && tslint -c ./tslint.json angular/**/*.ts", |
19 | "build": "webpack --config config/webpack.dev.js --progress --profile --colors --display-error-details --display-cached", | ||
20 | "watch": "npm run build -- --watch" | ||
21 | }, | 21 | }, |
22 | "license": "GPLv3", | 22 | "license": "GPLv3", |
23 | "dependencies": { | 23 | "dependencies": { |
@@ -30,12 +30,15 @@ | |||
30 | "@angular/router-deprecated": "2.0.0-rc.1", | 30 | "@angular/router-deprecated": "2.0.0-rc.1", |
31 | "angular-pipes": "^2.0.0", | 31 | "angular-pipes": "^2.0.0", |
32 | "blueimp-file-upload": "^9.12.1", | 32 | "blueimp-file-upload": "^9.12.1", |
33 | "bootstrap-loader": "^1.0.8", | ||
33 | "bootstrap-sass": "^3.3.6", | 34 | "bootstrap-sass": "^3.3.6", |
35 | "core-js": "^2.4.0", | ||
34 | "es6-promise": "^3.0.2", | 36 | "es6-promise": "^3.0.2", |
35 | "es6-shim": "^0.35.0", | 37 | "es6-shim": "^0.35.0", |
36 | "jquery": "^2.2.3", | 38 | "jquery": "^2.2.3", |
37 | "jquery.ui.widget": "^1.10.3", | 39 | "jquery.ui.widget": "^1.10.3", |
38 | "ng2-bootstrap": "^1.0.16", | 40 | "ng2-bootstrap": "^1.0.16", |
41 | "normalize.css": "^4.1.1", | ||
39 | "reflect-metadata": "0.1.3", | 42 | "reflect-metadata": "0.1.3", |
40 | "rxjs": "5.0.0-beta.6", | 43 | "rxjs": "5.0.0-beta.6", |
41 | "systemjs": "0.19.27", | 44 | "systemjs": "0.19.27", |
@@ -43,12 +46,37 @@ | |||
43 | "zone.js": "0.6.12" | 46 | "zone.js": "0.6.12" |
44 | }, | 47 | }, |
45 | "devDependencies": { | 48 | "devDependencies": { |
49 | "awesome-typescript-loader": "^0.17.0", | ||
46 | "codelyzer": "0.0.19", | 50 | "codelyzer": "0.0.19", |
51 | "compression-webpack-plugin": "^0.3.1", | ||
52 | "copy-webpack-plugin": "^3.0.1", | ||
53 | "css-loader": "^0.23.1", | ||
54 | "es6-promise-loader": "^1.0.1", | ||
55 | "exports-loader": "^0.6.3", | ||
56 | "expose-loader": "^0.7.1", | ||
57 | "file-loader": "^0.8.5", | ||
58 | "html-webpack-plugin": "^2.19.0", | ||
59 | "imports-loader": "^0.6.5", | ||
60 | "json-loader": "^0.5.4", | ||
61 | "node-sass": "^3.7.0", | ||
62 | "raw-loader": "^0.5.1", | ||
63 | "resolve-url-loader": "^1.4.3", | ||
64 | "sass-loader": "^3.2.0", | ||
65 | "source-map-loader": "^0.1.5", | ||
47 | "standard": "^7.0.1", | 66 | "standard": "^7.0.1", |
67 | "style-loader": "^0.13.1", | ||
48 | "systemjs-builder": "^0.15.16", | 68 | "systemjs-builder": "^0.15.16", |
69 | "ts-helpers": "^1.1.1", | ||
70 | "ts-node": "^0.7.3", | ||
49 | "tslint": "^3.7.4", | 71 | "tslint": "^3.7.4", |
72 | "tslint-loader": "^2.1.4", | ||
50 | "typescript": "^1.8.10", | 73 | "typescript": "^1.8.10", |
51 | "typings": "^1.0.4" | 74 | "typings": "^1.0.4", |
75 | "url-loader": "^0.5.7", | ||
76 | "webpack": "^1.13.1", | ||
77 | "webpack-dev-server": "^1.14.1", | ||
78 | "webpack-md5-hash": "0.0.5", | ||
79 | "webpack-merge": "^0.13.0" | ||
52 | }, | 80 | }, |
53 | "standard": { | 81 | "standard": { |
54 | "ignore": [ | 82 | "ignore": [ |
diff --git a/client/app/app.component.html b/client/src/app/app.component.html index 48e97d523..48e97d523 100644 --- a/client/app/app.component.html +++ b/client/src/app/app.component.html | |||
diff --git a/client/app/app.component.scss b/client/src/app/app.component.scss index e02c2d5b0..e02c2d5b0 100644 --- a/client/app/app.component.scss +++ b/client/src/app/app.component.scss | |||
diff --git a/client/app/app.component.ts b/client/src/app/app.component.ts index 94924a47a..81b700a21 100644 --- a/client/app/app.component.ts +++ b/client/src/app/app.component.ts | |||
@@ -2,20 +2,20 @@ import { Component } from '@angular/core'; | |||
2 | import { HTTP_PROVIDERS } from '@angular/http'; | 2 | import { HTTP_PROVIDERS } from '@angular/http'; |
3 | import { RouteConfig, Router, ROUTER_DIRECTIVES, ROUTER_PROVIDERS } from '@angular/router-deprecated'; | 3 | import { RouteConfig, Router, ROUTER_DIRECTIVES, ROUTER_PROVIDERS } from '@angular/router-deprecated'; |
4 | 4 | ||
5 | import { FriendService } from './friends/index'; | 5 | import { FriendService } from './friends'; |
6 | import { LoginComponent } from './login/index'; | 6 | import { LoginComponent } from './login'; |
7 | import { | 7 | import { |
8 | AuthService, | 8 | AuthService, |
9 | AuthStatus, | 9 | AuthStatus, |
10 | Search, | 10 | Search, |
11 | SearchComponent | 11 | SearchComponent |
12 | } from './shared/index'; | 12 | } from './shared'; |
13 | import { | 13 | import { |
14 | VideoAddComponent, | 14 | VideoAddComponent, |
15 | VideoListComponent, | 15 | VideoListComponent, |
16 | VideoWatchComponent, | 16 | VideoWatchComponent, |
17 | VideoService | 17 | VideoService |
18 | } from './videos/index'; | 18 | } from './videos'; |
19 | 19 | ||
20 | @RouteConfig([ | 20 | @RouteConfig([ |
21 | { | 21 | { |
@@ -43,8 +43,8 @@ import { | |||
43 | 43 | ||
44 | @Component({ | 44 | @Component({ |
45 | selector: 'my-app', | 45 | selector: 'my-app', |
46 | templateUrl: 'client/app/app.component.html', | 46 | template: require('./app.component.html'), |
47 | styleUrls: [ 'client/app/app.component.css' ], | 47 | styles: [ require('./app.component.scss') ], |
48 | directives: [ ROUTER_DIRECTIVES, SearchComponent ], | 48 | directives: [ ROUTER_DIRECTIVES, SearchComponent ], |
49 | providers: [ AuthService, FriendService, HTTP_PROVIDERS, ROUTER_PROVIDERS, VideoService ] | 49 | providers: [ AuthService, FriendService, HTTP_PROVIDERS, ROUTER_PROVIDERS, VideoService ] |
50 | }) | 50 | }) |
diff --git a/client/app/friends/friend.service.ts b/client/src/app/friends/friend.service.ts index d3684f08d..a8b1a1bd3 100644 --- a/client/app/friends/friend.service.ts +++ b/client/src/app/friends/friend.service.ts | |||
@@ -2,7 +2,7 @@ import { Injectable } from '@angular/core'; | |||
2 | import { Http, Response } from '@angular/http'; | 2 | import { Http, Response } from '@angular/http'; |
3 | import { Observable } from 'rxjs/Rx'; | 3 | import { Observable } from 'rxjs/Rx'; |
4 | 4 | ||
5 | import { AuthService } from '../shared/index'; | 5 | import { AuthService } from '../shared'; |
6 | 6 | ||
7 | @Injectable() | 7 | @Injectable() |
8 | export class FriendService { | 8 | export class FriendService { |
diff --git a/client/app/friends/index.ts b/client/src/app/friends/index.ts index 0adc256c4..0adc256c4 100644 --- a/client/app/friends/index.ts +++ b/client/src/app/friends/index.ts | |||
diff --git a/client/app/login/index.ts b/client/src/app/login/index.ts index 69c16441f..69c16441f 100644 --- a/client/app/login/index.ts +++ b/client/src/app/login/index.ts | |||
diff --git a/client/app/login/login.component.html b/client/src/app/login/login.component.html index 940694515..940694515 100644 --- a/client/app/login/login.component.html +++ b/client/src/app/login/login.component.html | |||
diff --git a/client/app/login/login.component.ts b/client/src/app/login/login.component.ts index 50f598d92..9d88536ca 100644 --- a/client/app/login/login.component.ts +++ b/client/src/app/login/login.component.ts | |||
@@ -1,11 +1,11 @@ | |||
1 | import { Component } from '@angular/core'; | 1 | import { Component } from '@angular/core'; |
2 | import { Router } from '@angular/router-deprecated'; | 2 | import { Router } from '@angular/router-deprecated'; |
3 | 3 | ||
4 | import { AuthService, AuthStatus, User } from '../shared/index'; | 4 | import { AuthService, AuthStatus, User } from '../shared'; |
5 | 5 | ||
6 | @Component({ | 6 | @Component({ |
7 | selector: 'my-login', | 7 | selector: 'my-login', |
8 | templateUrl: 'client/app/login/login.component.html' | 8 | template: require('./login.component.html') |
9 | }) | 9 | }) |
10 | 10 | ||
11 | export class LoginComponent { | 11 | export class LoginComponent { |
diff --git a/client/src/app/shared/index.ts b/client/src/app/shared/index.ts new file mode 100644 index 000000000..0cab7dad0 --- /dev/null +++ b/client/src/app/shared/index.ts | |||
@@ -0,0 +1,2 @@ | |||
1 | export * from './search'; | ||
2 | export * from './users' | ||
diff --git a/client/app/shared/search/index.ts b/client/src/app/shared/search/index.ts index a49a4f1a9..a49a4f1a9 100644 --- a/client/app/shared/search/index.ts +++ b/client/src/app/shared/search/index.ts | |||
diff --git a/client/app/shared/search/search-field.type.ts b/client/src/app/shared/search/search-field.type.ts index 846236290..846236290 100644 --- a/client/app/shared/search/search-field.type.ts +++ b/client/src/app/shared/search/search-field.type.ts | |||
diff --git a/client/app/shared/search/search.component.html b/client/src/app/shared/search/search.component.html index fb13ac72e..fb13ac72e 100644 --- a/client/app/shared/search/search.component.html +++ b/client/src/app/shared/search/search.component.html | |||
diff --git a/client/app/shared/search/search.component.ts b/client/src/app/shared/search/search.component.ts index d541cd0d6..31f8b1535 100644 --- a/client/app/shared/search/search.component.ts +++ b/client/src/app/shared/search/search.component.ts | |||
@@ -7,7 +7,7 @@ import { SearchField } from './search-field.type'; | |||
7 | 7 | ||
8 | @Component({ | 8 | @Component({ |
9 | selector: 'my-search', | 9 | selector: 'my-search', |
10 | templateUrl: 'client/app/shared/search/search.component.html', | 10 | template: require('./search.component.html'), |
11 | directives: [ DROPDOWN_DIRECTIVES ] | 11 | directives: [ DROPDOWN_DIRECTIVES ] |
12 | }) | 12 | }) |
13 | 13 | ||
diff --git a/client/app/shared/search/search.model.ts b/client/src/app/shared/search/search.model.ts index 932a6566c..932a6566c 100644 --- a/client/app/shared/search/search.model.ts +++ b/client/src/app/shared/search/search.model.ts | |||
diff --git a/client/app/shared/users/auth-status.model.ts b/client/src/app/shared/users/auth-status.model.ts index f646bd4cf..f646bd4cf 100644 --- a/client/app/shared/users/auth-status.model.ts +++ b/client/src/app/shared/users/auth-status.model.ts | |||
diff --git a/client/app/shared/users/auth.service.ts b/client/src/app/shared/users/auth.service.ts index d63fe38f3..d63fe38f3 100644 --- a/client/app/shared/users/auth.service.ts +++ b/client/src/app/shared/users/auth.service.ts | |||
diff --git a/client/app/shared/users/index.ts b/client/src/app/shared/users/index.ts index c6816b3c6..c6816b3c6 100644 --- a/client/app/shared/users/index.ts +++ b/client/src/app/shared/users/index.ts | |||
diff --git a/client/app/shared/users/token.model.ts b/client/src/app/shared/users/token.model.ts index 021c83fad..021c83fad 100644 --- a/client/app/shared/users/token.model.ts +++ b/client/src/app/shared/users/token.model.ts | |||
diff --git a/client/app/shared/users/user.model.ts b/client/src/app/shared/users/user.model.ts index ca0a5f26c..ca0a5f26c 100644 --- a/client/app/shared/users/user.model.ts +++ b/client/src/app/shared/users/user.model.ts | |||
diff --git a/client/src/app/videos/index.ts b/client/src/app/videos/index.ts new file mode 100644 index 000000000..9a92fa57a --- /dev/null +++ b/client/src/app/videos/index.ts | |||
@@ -0,0 +1,4 @@ | |||
1 | export * from './shared'; | ||
2 | export * from './video-add'; | ||
3 | export * from './video-list'; | ||
4 | export * from './video-watch'; | ||
diff --git a/client/app/videos/shared/index.ts b/client/src/app/videos/shared/index.ts index c535c46fc..a54120f5d 100644 --- a/client/app/videos/shared/index.ts +++ b/client/src/app/videos/shared/index.ts | |||
@@ -1,4 +1,4 @@ | |||
1 | export * from './loader/index'; | 1 | export * from './loader'; |
2 | export * from './pagination.model'; | 2 | export * from './pagination.model'; |
3 | export * from './sort-field.type'; | 3 | export * from './sort-field.type'; |
4 | export * from './video.model'; | 4 | export * from './video.model'; |
diff --git a/client/app/videos/shared/loader/index.ts b/client/src/app/videos/shared/loader/index.ts index ab22584e4..ab22584e4 100644 --- a/client/app/videos/shared/loader/index.ts +++ b/client/src/app/videos/shared/loader/index.ts | |||
diff --git a/client/app/videos/shared/loader/loader.component.html b/client/src/app/videos/shared/loader/loader.component.html index d02296a2d..d02296a2d 100644 --- a/client/app/videos/shared/loader/loader.component.html +++ b/client/src/app/videos/shared/loader/loader.component.html | |||
diff --git a/client/app/videos/shared/loader/loader.component.scss b/client/src/app/videos/shared/loader/loader.component.scss index 454195811..454195811 100644 --- a/client/app/videos/shared/loader/loader.component.scss +++ b/client/src/app/videos/shared/loader/loader.component.scss | |||
diff --git a/client/app/videos/shared/loader/loader.component.ts b/client/src/app/videos/shared/loader/loader.component.ts index 666d43bc3..cdd07d1b4 100644 --- a/client/app/videos/shared/loader/loader.component.ts +++ b/client/src/app/videos/shared/loader/loader.component.ts | |||
@@ -2,8 +2,8 @@ import { Component, Input } from '@angular/core'; | |||
2 | 2 | ||
3 | @Component({ | 3 | @Component({ |
4 | selector: 'my-loader', | 4 | selector: 'my-loader', |
5 | styleUrls: [ 'client/app/videos/shared/loader/loader.component.css' ], | 5 | styles: [ require('./loader.component.scss') ], |
6 | templateUrl: 'client/app/videos/shared/loader/loader.component.html' | 6 | template: require('./loader.component.html') |
7 | }) | 7 | }) |
8 | 8 | ||
9 | export class LoaderComponent { | 9 | export class LoaderComponent { |
diff --git a/client/app/videos/shared/pagination.model.ts b/client/src/app/videos/shared/pagination.model.ts index 06f7a7875..06f7a7875 100644 --- a/client/app/videos/shared/pagination.model.ts +++ b/client/src/app/videos/shared/pagination.model.ts | |||
diff --git a/client/app/videos/shared/sort-field.type.ts b/client/src/app/videos/shared/sort-field.type.ts index 6e8cc7936..6e8cc7936 100644 --- a/client/app/videos/shared/sort-field.type.ts +++ b/client/src/app/videos/shared/sort-field.type.ts | |||
diff --git a/client/app/videos/shared/video.model.ts b/client/src/app/videos/shared/video.model.ts index 614403d79..614403d79 100644 --- a/client/app/videos/shared/video.model.ts +++ b/client/src/app/videos/shared/video.model.ts | |||
diff --git a/client/app/videos/shared/video.service.ts b/client/src/app/videos/shared/video.service.ts index a786b2ab2..76d46cbb4 100644 --- a/client/app/videos/shared/video.service.ts +++ b/client/src/app/videos/shared/video.service.ts | |||
@@ -3,9 +3,9 @@ import { Http, Response, URLSearchParams } from '@angular/http'; | |||
3 | import { Observable } from 'rxjs/Rx'; | 3 | import { Observable } from 'rxjs/Rx'; |
4 | 4 | ||
5 | import { Pagination } from './pagination.model'; | 5 | import { Pagination } from './pagination.model'; |
6 | import { Search } from '../../shared/index'; | 6 | import { Search } from '../../shared'; |
7 | import { SortField } from './sort-field.type'; | 7 | import { SortField } from './sort-field.type'; |
8 | import { AuthService } from '../../shared/index'; | 8 | import { AuthService } from '../../shared'; |
9 | import { Video } from './video.model'; | 9 | import { Video } from './video.model'; |
10 | 10 | ||
11 | @Injectable() | 11 | @Injectable() |
diff --git a/client/app/videos/video-add/index.ts b/client/src/app/videos/video-add/index.ts index 79488e851..79488e851 100644 --- a/client/app/videos/video-add/index.ts +++ b/client/src/app/videos/video-add/index.ts | |||
diff --git a/client/app/videos/video-add/video-add.component.html b/client/src/app/videos/video-add/video-add.component.html index 80d229cb8..80d229cb8 100644 --- a/client/app/videos/video-add/video-add.component.html +++ b/client/src/app/videos/video-add/video-add.component.html | |||
diff --git a/client/app/videos/video-add/video-add.component.scss b/client/src/app/videos/video-add/video-add.component.scss index 01195f017..01195f017 100644 --- a/client/app/videos/video-add/video-add.component.scss +++ b/client/src/app/videos/video-add/video-add.component.scss | |||
diff --git a/client/app/videos/video-add/video-add.component.ts b/client/src/app/videos/video-add/video-add.component.ts index e17b1b0f6..8df4f951b 100644 --- a/client/app/videos/video-add/video-add.component.ts +++ b/client/src/app/videos/video-add/video-add.component.ts | |||
@@ -1,5 +1,5 @@ | |||
1 | /// <reference path="../../../typings/globals/jquery/index.d.ts" /> | 1 | /// <reference path="../../../../typings/globals/jquery/index.d.ts" /> |
2 | /// <reference path="../../../typings/globals/jquery.fileupload/index.d.ts" /> | 2 | /// <reference path="../../../../typings/globals/jquery.fileupload/index.d.ts" /> |
3 | 3 | ||
4 | import { Component, ElementRef, OnInit } from '@angular/core'; | 4 | import { Component, ElementRef, OnInit } from '@angular/core'; |
5 | import { Router } from '@angular/router-deprecated'; | 5 | import { Router } from '@angular/router-deprecated'; |
@@ -7,12 +7,12 @@ import { Router } from '@angular/router-deprecated'; | |||
7 | import { BytesPipe } from 'angular-pipes/src/math/bytes.pipe'; | 7 | import { BytesPipe } from 'angular-pipes/src/math/bytes.pipe'; |
8 | import { PROGRESSBAR_DIRECTIVES } from 'ng2-bootstrap/components/progressbar'; | 8 | import { PROGRESSBAR_DIRECTIVES } from 'ng2-bootstrap/components/progressbar'; |
9 | 9 | ||
10 | import { AuthService, User } from '../../shared/index'; | 10 | import { AuthService, User } from '../../shared'; |
11 | 11 | ||
12 | @Component({ | 12 | @Component({ |
13 | selector: 'my-videos-add', | 13 | selector: 'my-videos-add', |
14 | styleUrls: [ 'client/app/videos/video-add/video-add.component.css' ], | 14 | styles: [ require('./video-add.component.scss') ], |
15 | templateUrl: 'client/app/videos/video-add/video-add.component.html', | 15 | template: require('./video-add.component.html'), |
16 | directives: [ PROGRESSBAR_DIRECTIVES ], | 16 | directives: [ PROGRESSBAR_DIRECTIVES ], |
17 | pipes: [ BytesPipe ] | 17 | pipes: [ BytesPipe ] |
18 | }) | 18 | }) |
diff --git a/client/app/videos/video-list/index.ts b/client/src/app/videos/video-list/index.ts index 1f6d6a4e7..1f6d6a4e7 100644 --- a/client/app/videos/video-list/index.ts +++ b/client/src/app/videos/video-list/index.ts | |||
diff --git a/client/app/videos/video-list/video-list.component.html b/client/src/app/videos/video-list/video-list.component.html index 80b1e7b1b..80b1e7b1b 100644 --- a/client/app/videos/video-list/video-list.component.html +++ b/client/src/app/videos/video-list/video-list.component.html | |||
diff --git a/client/app/videos/video-list/video-list.component.scss b/client/src/app/videos/video-list/video-list.component.scss index 9441d80c3..9441d80c3 100644 --- a/client/app/videos/video-list/video-list.component.scss +++ b/client/src/app/videos/video-list/video-list.component.scss | |||
diff --git a/client/app/videos/video-list/video-list.component.ts b/client/src/app/videos/video-list/video-list.component.ts index baca00deb..b1ce55845 100644 --- a/client/app/videos/video-list/video-list.component.ts +++ b/client/src/app/videos/video-list/video-list.component.ts | |||
@@ -9,15 +9,15 @@ import { | |||
9 | SortField, | 9 | SortField, |
10 | Video, | 10 | Video, |
11 | VideoService | 11 | VideoService |
12 | } from '../shared/index'; | 12 | } from '../shared'; |
13 | import { AuthService, Search, SearchField, User } from '../../shared/index'; | 13 | import { AuthService, Search, SearchField, User } from '../../shared'; |
14 | import { VideoMiniatureComponent } from './video-miniature.component'; | 14 | import { VideoMiniatureComponent } from './video-miniature.component'; |
15 | import { VideoSortComponent } from './video-sort.component'; | 15 | import { VideoSortComponent } from './video-sort.component'; |
16 | 16 | ||
17 | @Component({ | 17 | @Component({ |
18 | selector: 'my-videos-list', | 18 | selector: 'my-videos-list', |
19 | styleUrls: [ 'client/app/videos/video-list/video-list.component.css' ], | 19 | styles: [ require('./video-list.component.scss') ], |
20 | templateUrl: 'client/app/videos/video-list/video-list.component.html', | 20 | template: require('./video-list.component.html'), |
21 | directives: [ LoaderComponent, PAGINATION_DIRECTIVES, ROUTER_DIRECTIVES, VideoMiniatureComponent, VideoSortComponent ] | 21 | directives: [ LoaderComponent, PAGINATION_DIRECTIVES, ROUTER_DIRECTIVES, VideoMiniatureComponent, VideoSortComponent ] |
22 | }) | 22 | }) |
23 | 23 | ||
diff --git a/client/app/videos/video-list/video-miniature.component.html b/client/src/app/videos/video-list/video-miniature.component.html index 244254b5a..244254b5a 100644 --- a/client/app/videos/video-list/video-miniature.component.html +++ b/client/src/app/videos/video-list/video-miniature.component.html | |||
diff --git a/client/app/videos/video-list/video-miniature.component.scss b/client/src/app/videos/video-list/video-miniature.component.scss index 4488abe22..4488abe22 100644 --- a/client/app/videos/video-list/video-miniature.component.scss +++ b/client/src/app/videos/video-list/video-miniature.component.scss | |||
diff --git a/client/app/videos/video-list/video-miniature.component.ts b/client/src/app/videos/video-list/video-miniature.component.ts index 11b828ca6..639339b44 100644 --- a/client/app/videos/video-list/video-miniature.component.ts +++ b/client/src/app/videos/video-list/video-miniature.component.ts | |||
@@ -2,13 +2,13 @@ import { DatePipe } from '@angular/common'; | |||
2 | import { Component, Input, Output, EventEmitter } from '@angular/core'; | 2 | import { Component, Input, Output, EventEmitter } from '@angular/core'; |
3 | import { ROUTER_DIRECTIVES } from '@angular/router-deprecated'; | 3 | import { ROUTER_DIRECTIVES } from '@angular/router-deprecated'; |
4 | 4 | ||
5 | import { Video, VideoService } from '../shared/index'; | 5 | import { Video, VideoService } from '../shared'; |
6 | import { User } from '../../shared/index'; | 6 | import { User } from '../../shared'; |
7 | 7 | ||
8 | @Component({ | 8 | @Component({ |
9 | selector: 'my-video-miniature', | 9 | selector: 'my-video-miniature', |
10 | styleUrls: [ 'client/app/videos/video-list/video-miniature.component.css' ], | 10 | styles: [ require('./video-miniature.component.scss') ], |
11 | templateUrl: 'client/app/videos/video-list/video-miniature.component.html', | 11 | template: require('./video-miniature.component.html'), |
12 | directives: [ ROUTER_DIRECTIVES ], | 12 | directives: [ ROUTER_DIRECTIVES ], |
13 | pipes: [ DatePipe ] | 13 | pipes: [ DatePipe ] |
14 | }) | 14 | }) |
diff --git a/client/app/videos/video-list/video-sort.component.html b/client/src/app/videos/video-list/video-sort.component.html index 3bece0b22..3bece0b22 100644 --- a/client/app/videos/video-list/video-sort.component.html +++ b/client/src/app/videos/video-list/video-sort.component.html | |||
diff --git a/client/app/videos/video-list/video-sort.component.ts b/client/src/app/videos/video-list/video-sort.component.ts index 2cb810ff5..0d76b54b7 100644 --- a/client/app/videos/video-list/video-sort.component.ts +++ b/client/src/app/videos/video-list/video-sort.component.ts | |||
@@ -1,10 +1,10 @@ | |||
1 | import { Component, EventEmitter, Input, Output } from '@angular/core'; | 1 | import { Component, EventEmitter, Input, Output } from '@angular/core'; |
2 | 2 | ||
3 | import { SortField } from '../shared/index'; | 3 | import { SortField } from '../shared'; |
4 | 4 | ||
5 | @Component({ | 5 | @Component({ |
6 | selector: 'my-video-sort', | 6 | selector: 'my-video-sort', |
7 | templateUrl: 'client/app/videos/video-list/video-sort.component.html' | 7 | template: require('./video-sort.component.html') |
8 | }) | 8 | }) |
9 | 9 | ||
10 | export class VideoSortComponent { | 10 | export class VideoSortComponent { |
diff --git a/client/app/videos/video-watch/index.ts b/client/src/app/videos/video-watch/index.ts index b17aaacf2..b17aaacf2 100644 --- a/client/app/videos/video-watch/index.ts +++ b/client/src/app/videos/video-watch/index.ts | |||
diff --git a/client/app/videos/video-watch/video-watch.component.html b/client/src/app/videos/video-watch/video-watch.component.html index 6c36b27e2..6c36b27e2 100644 --- a/client/app/videos/video-watch/video-watch.component.html +++ b/client/src/app/videos/video-watch/video-watch.component.html | |||
diff --git a/client/app/videos/video-watch/video-watch.component.scss b/client/src/app/videos/video-watch/video-watch.component.scss index 1228d42f4..1228d42f4 100644 --- a/client/app/videos/video-watch/video-watch.component.scss +++ b/client/src/app/videos/video-watch/video-watch.component.scss | |||
diff --git a/client/app/videos/video-watch/video-watch.component.ts b/client/src/app/videos/video-watch/video-watch.component.ts index 71fb4f634..db82283b4 100644 --- a/client/app/videos/video-watch/video-watch.component.ts +++ b/client/src/app/videos/video-watch/video-watch.component.ts | |||
@@ -3,13 +3,13 @@ import { CanDeactivate, ComponentInstruction, RouteParams } from '@angular/route | |||
3 | 3 | ||
4 | import { BytesPipe } from 'angular-pipes/src/math/bytes.pipe'; | 4 | import { BytesPipe } from 'angular-pipes/src/math/bytes.pipe'; |
5 | 5 | ||
6 | import { LoaderComponent, Video, VideoService } from '../shared/index'; | 6 | import { LoaderComponent, Video, VideoService } from '../shared'; |
7 | import { WebTorrentService } from './webtorrent.service'; | 7 | import { WebTorrentService } from './webtorrent.service'; |
8 | 8 | ||
9 | @Component({ | 9 | @Component({ |
10 | selector: 'my-video-watch', | 10 | selector: 'my-video-watch', |
11 | templateUrl: 'client/app/videos/video-watch/video-watch.component.html', | 11 | template: require('./video-watch.component.html'), |
12 | styleUrls: [ 'client/app/videos/video-watch/video-watch.component.css' ], | 12 | styles: [ require('./video-watch.component.scss') ], |
13 | providers: [ WebTorrentService ], | 13 | providers: [ WebTorrentService ], |
14 | directives: [ LoaderComponent ], | 14 | directives: [ LoaderComponent ], |
15 | pipes: [ BytesPipe ] | 15 | pipes: [ BytesPipe ] |
diff --git a/client/app/videos/video-watch/webtorrent.service.ts b/client/src/app/videos/video-watch/webtorrent.service.ts index 0c73ab4f4..bf38b5aaa 100644 --- a/client/app/videos/video-watch/webtorrent.service.ts +++ b/client/src/app/videos/video-watch/webtorrent.service.ts | |||
@@ -1,6 +1,6 @@ | |||
1 | // Don't use webtorrent typings for now | 1 | // Don't use webtorrent typings for now |
2 | // It misses some little things I'll fix later | 2 | // It misses some little things I'll fix later |
3 | // <reference path="../../../typings/globals/webtorrent/index.d.ts" /> | 3 | // <reference path="../../../../typings/globals/webtorrent/index.d.ts" /> |
4 | 4 | ||
5 | import { Injectable } from '@angular/core'; | 5 | import { Injectable } from '@angular/core'; |
6 | 6 | ||
diff --git a/client/images/favicon.png b/client/src/assets/favicon.png index bb57ee6b0..bb57ee6b0 100644 --- a/client/images/favicon.png +++ b/client/src/assets/favicon.png | |||
Binary files differ | |||
diff --git a/client/src/custom-typings.d.ts b/client/src/custom-typings.d.ts new file mode 100644 index 000000000..14c7d8ade --- /dev/null +++ b/client/src/custom-typings.d.ts | |||
@@ -0,0 +1,119 @@ | |||
1 | /* | ||
2 | * Custom Type Definitions | ||
3 | * When including 3rd party modules you also need to include the type definition for the module | ||
4 | * if they don't provide one within the module. You can try to install it with typings | ||
5 | |||
6 | typings install node --save | ||
7 | |||
8 | * If you can't find the type definition in the registry we can make an ambient definition in | ||
9 | * this file for now. For example | ||
10 | |||
11 | declare module "my-module" { | ||
12 | export function doesSomething(value: string): string; | ||
13 | } | ||
14 | |||
15 | * | ||
16 | * If you're prototying and you will fix the types later you can also declare it as type any | ||
17 | * | ||
18 | |||
19 | declare var assert: any; | ||
20 | |||
21 | * | ||
22 | * If you're importing a module that uses Node.js modules which are CommonJS you need to import as | ||
23 | * | ||
24 | |||
25 | import * as _ from 'lodash' | ||
26 | |||
27 | * You can include your type definitions in this file until you create one for the typings registry | ||
28 | * see https://github.com/typings/registry | ||
29 | * | ||
30 | */ | ||
31 | |||
32 | |||
33 | // Extra variables that live on Global that will be replaced by webpack DefinePlugin | ||
34 | declare var ENV: string; | ||
35 | declare var HMR: boolean; | ||
36 | interface GlobalEnvironment { | ||
37 | ENV; | ||
38 | HMR; | ||
39 | } | ||
40 | |||
41 | interface WebpackModule { | ||
42 | hot: { | ||
43 | data?: any, | ||
44 | idle: any, | ||
45 | accept(dependencies?: string | string[], callback?: (updatedDependencies?: any) => void): void; | ||
46 | decline(dependencies?: string | string[]): void; | ||
47 | dispose(callback?: (data?: any) => void): void; | ||
48 | addDisposeHandler(callback?: (data?: any) => void): void; | ||
49 | removeDisposeHandler(callback?: (data?: any) => void): void; | ||
50 | check(autoApply?: any, callback?: (err?: Error, outdatedModules?: any[]) => void): void; | ||
51 | apply(options?: any, callback?: (err?: Error, outdatedModules?: any[]) => void): void; | ||
52 | status(callback?: (status?: string) => void): void | string; | ||
53 | removeStatusHandler(callback?: (status?: string) => void): void; | ||
54 | }; | ||
55 | } | ||
56 | |||
57 | interface WebpackRequire { | ||
58 | context(file: string, flag?: boolean, exp?: RegExp): any; | ||
59 | } | ||
60 | |||
61 | |||
62 | interface ErrorStackTraceLimit { | ||
63 | stackTraceLimit: number; | ||
64 | } | ||
65 | |||
66 | |||
67 | |||
68 | // Extend typings | ||
69 | interface NodeRequire extends WebpackRequire {} | ||
70 | interface ErrorConstructor extends ErrorStackTraceLimit {} | ||
71 | interface NodeModule extends WebpackModule {} | ||
72 | interface Global extends GlobalEnvironment {} | ||
73 | |||
74 | |||
75 | declare namespace Reflect { | ||
76 | function decorate(decorators: ClassDecorator[], target: Function): Function; | ||
77 | function decorate( | ||
78 | decorators: (PropertyDecorator | MethodDecorator)[], | ||
79 | target: Object, | ||
80 | targetKey: string | symbol, | ||
81 | descriptor?: PropertyDescriptor): PropertyDescriptor; | ||
82 | |||
83 | function metadata(metadataKey: any, metadataValue: any): { | ||
84 | (target: Function): void; | ||
85 | (target: Object, propertyKey: string | symbol): void; | ||
86 | }; | ||
87 | function defineMetadata(metadataKey: any, metadataValue: any, target: Object): void; | ||
88 | function defineMetadata( | ||
89 | metadataKey: any, | ||
90 | metadataValue: any, | ||
91 | target: Object, | ||
92 | targetKey: string | symbol): void; | ||
93 | function hasMetadata(metadataKey: any, target: Object): boolean; | ||
94 | function hasMetadata(metadataKey: any, target: Object, targetKey: string | symbol): boolean; | ||
95 | function hasOwnMetadata(metadataKey: any, target: Object): boolean; | ||
96 | function hasOwnMetadata(metadataKey: any, target: Object, targetKey: string | symbol): boolean; | ||
97 | function getMetadata(metadataKey: any, target: Object): any; | ||
98 | function getMetadata(metadataKey: any, target: Object, targetKey: string | symbol): any; | ||
99 | function getOwnMetadata(metadataKey: any, target: Object): any; | ||
100 | function getOwnMetadata(metadataKey: any, target: Object, targetKey: string | symbol): any; | ||
101 | function getMetadataKeys(target: Object): any[]; | ||
102 | function getMetadataKeys(target: Object, targetKey: string | symbol): any[]; | ||
103 | function getOwnMetadataKeys(target: Object): any[]; | ||
104 | function getOwnMetadataKeys(target: Object, targetKey: string | symbol): any[]; | ||
105 | function deleteMetadata(metadataKey: any, target: Object): boolean; | ||
106 | function deleteMetadata(metadataKey: any, target: Object, targetKey: string | symbol): boolean; | ||
107 | } | ||
108 | |||
109 | |||
110 | // We need this here since there is a problem with Zone.js typings | ||
111 | interface Thenable<T> { | ||
112 | then<U>( | ||
113 | onFulfilled?: (value: T) => U | Thenable<U>, | ||
114 | onRejected?: (error: any) => U | Thenable<U>): Thenable<U>; | ||
115 | then<U>( | ||
116 | onFulfilled?: (value: T) => U | Thenable<U>, | ||
117 | onRejected?: (error: any) => void): Thenable<U>; | ||
118 | catch<U>(onRejected?: (error: any) => U | Thenable<U>): Thenable<U>; | ||
119 | } | ||
diff --git a/client/src/index.html b/client/src/index.html new file mode 100644 index 000000000..83f4cc8f0 --- /dev/null +++ b/client/src/index.html | |||
@@ -0,0 +1,17 @@ | |||
1 | <html> | ||
2 | <head> | ||
3 | <base href="/"> | ||
4 | |||
5 | <title>PeerTube</title> | ||
6 | |||
7 | <meta charset="UTF-8"> | ||
8 | <meta name="viewport" content="width=device-width, initial-scale=1"> | ||
9 | |||
10 | <link rel="icon" href="/client/assets/favicon.ico" /> | ||
11 | </head> | ||
12 | |||
13 | <!-- 3. Display the application --> | ||
14 | <body> | ||
15 | <my-app>Loading...</my-app> | ||
16 | </body> | ||
17 | </html> | ||
diff --git a/client/main.ts b/client/src/main.ts index 5e2ea0de0..76b3f498a 100644 --- a/client/main.ts +++ b/client/src/main.ts | |||
@@ -1,5 +1,10 @@ | |||
1 | import { enableProdMode } from '@angular/core'; | ||
1 | import { bootstrap } from '@angular/platform-browser-dynamic'; | 2 | import { bootstrap } from '@angular/platform-browser-dynamic'; |
2 | 3 | ||
3 | import { AppComponent } from './app/app.component'; | 4 | import { AppComponent } from './app/app.component'; |
4 | 5 | ||
6 | if (process.env.ENV === 'production') { | ||
7 | enableProdMode(); | ||
8 | } | ||
9 | |||
5 | bootstrap(AppComponent); | 10 | bootstrap(AppComponent); |
diff --git a/client/src/polyfills.ts b/client/src/polyfills.ts new file mode 100644 index 000000000..3395eed76 --- /dev/null +++ b/client/src/polyfills.ts | |||
@@ -0,0 +1,28 @@ | |||
1 | // Polyfills | ||
2 | // (these modules are what are in 'angular2/bundles/angular2-polyfills' so don't use that here) | ||
3 | |||
4 | // import 'ie-shim'; // Internet Explorer | ||
5 | // import 'es6-shim'; | ||
6 | // import 'es6-promise'; | ||
7 | // import 'es7-reflect-metadata'; | ||
8 | |||
9 | // Prefer CoreJS over the polyfills above | ||
10 | import 'core-js/es6'; | ||
11 | import 'core-js/es7/reflect'; | ||
12 | require('zone.js/dist/zone'); | ||
13 | |||
14 | // Typescript emit helpers polyfill | ||
15 | import 'ts-helpers'; | ||
16 | |||
17 | if ('production' === ENV) { | ||
18 | // Production | ||
19 | |||
20 | |||
21 | } else { | ||
22 | // Development | ||
23 | |||
24 | Error.stackTraceLimit = Infinity; | ||
25 | |||
26 | require('zone.js/dist/long-stack-trace-zone'); | ||
27 | |||
28 | } | ||
diff --git a/client/stylesheets/base.scss b/client/src/sass/application.scss index 5c56e9507..5c56e9507 100644 --- a/client/stylesheets/base.scss +++ b/client/src/sass/application.scss | |||
diff --git a/client/src/sass/pre-customizations.scss b/client/src/sass/pre-customizations.scss new file mode 100644 index 000000000..e92004128 --- /dev/null +++ b/client/src/sass/pre-customizations.scss | |||
@@ -0,0 +1 @@ | |||
// $icon-font-path: "/assets/fonts/"; | |||
diff --git a/client/src/vendor.ts b/client/src/vendor.ts new file mode 100644 index 000000000..0f82c59a4 --- /dev/null +++ b/client/src/vendor.ts | |||
@@ -0,0 +1,28 @@ | |||
1 | // For vendors for example jQuery, Lodash, angular2-jwt just import them here unless you plan on | ||
2 | // chunking vendors files for async loading. You would need to import the async loaded vendors | ||
3 | // at the entry point of the async loaded file. Also see custom-typings.d.ts as you also need to | ||
4 | // run `typings install x` where `x` is your module | ||
5 | |||
6 | // Angular 2 | ||
7 | import '@angular/platform-browser'; | ||
8 | import '@angular/platform-browser-dynamic'; | ||
9 | import '@angular/core'; | ||
10 | import '@angular/common'; | ||
11 | import '@angular/http'; | ||
12 | import '@angular/router-deprecated'; | ||
13 | |||
14 | // RxJS | ||
15 | import 'rxjs/add/operator/map'; | ||
16 | import 'rxjs/add/operator/mergeMap'; | ||
17 | |||
18 | import 'jquery'; | ||
19 | import 'bootstrap-loader'; | ||
20 | |||
21 | if ('production' === ENV) { | ||
22 | // Production | ||
23 | |||
24 | |||
25 | } else { | ||
26 | // Development | ||
27 | |||
28 | } | ||
diff --git a/client/stylesheets/application.scss b/client/stylesheets/application.scss deleted file mode 100644 index 98c1e37ad..000000000 --- a/client/stylesheets/application.scss +++ /dev/null | |||
@@ -1,5 +0,0 @@ | |||
1 | $icon-font-path: "/client/node_modules/bootstrap-sass/assets/fonts/bootstrap/"; | ||
2 | |||
3 | @import "bootstrap-variables"; | ||
4 | @import "_bootstrap"; | ||
5 | @import "base.scss"; | ||
diff --git a/client/stylesheets/bootstrap-variables.scss b/client/stylesheets/bootstrap-variables.scss deleted file mode 100644 index a2472f357..000000000 --- a/client/stylesheets/bootstrap-variables.scss +++ /dev/null | |||
@@ -1,875 +0,0 @@ | |||
1 | // Override Bootstrap variables here (defaults from bootstrap-sass v3.3.6): | ||
2 | |||
3 | // | ||
4 | // Variables | ||
5 | // -------------------------------------------------- | ||
6 | |||
7 | |||
8 | //== Colors | ||
9 | // | ||
10 | //## Gray and brand colors for use across Bootstrap. | ||
11 | |||
12 | // $gray-base: #000 | ||
13 | // $gray-darker: lighten($gray-base, 13.5%) // #222 | ||
14 | // $gray-dark: lighten($gray-base, 20%) // #333 | ||
15 | // $gray: lighten($gray-base, 33.5%) // #555 | ||
16 | // $gray-light: lighten($gray-base, 46.7%) // #777 | ||
17 | // $gray-lighter: lighten($gray-base, 93.5%) // #eee | ||
18 | |||
19 | // $brand-primary: darken(#428bca, 6.5%) // #337ab7 | ||
20 | // $brand-success: #5cb85c | ||
21 | // $brand-info: #5bc0de | ||
22 | // $brand-warning: #f0ad4e | ||
23 | // $brand-danger: #d9534f | ||
24 | |||
25 | |||
26 | //== Scaffolding | ||
27 | // | ||
28 | //## Settings for some of the most global styles. | ||
29 | |||
30 | //** Background color for `<body>`. | ||
31 | // $body-bg: #fff | ||
32 | //** Global text color on `<body>`. | ||
33 | // $text-color: $gray-dark | ||
34 | |||
35 | //** Global textual link color. | ||
36 | // $link-color: $brand-primary | ||
37 | //** Link hover color set via `darken()` function. | ||
38 | // $link-hover-color: darken($link-color, 15%) | ||
39 | //** Link hover decoration. | ||
40 | // $link-hover-decoration: underline | ||
41 | |||
42 | |||
43 | //== Typography | ||
44 | // | ||
45 | //## Font, line-height, and color for body text, headings, and more. | ||
46 | |||
47 | // $font-family-sans-serif: "Helvetica Neue", Helvetica, Arial, sans-serif | ||
48 | // $font-family-serif: Georgia, "Times New Roman", Times, serif | ||
49 | //** Default monospace fonts for `<code>`, `<kbd>`, and `<pre>`. | ||
50 | // $font-family-monospace: Menlo, Monaco, Consolas, "Courier New", monospace | ||
51 | // $font-family-base: $font-family-sans-serif | ||
52 | |||
53 | // $font-size-base: 14px | ||
54 | // $font-size-large: ceil(($font-size-base * 1.25)) // ~18px | ||
55 | // $font-size-small: ceil(($font-size-base * 0.85)) // ~12px | ||
56 | |||
57 | // $font-size-h1: floor(($font-size-base * 2.6)) // ~36px | ||
58 | // $font-size-h2: floor(($font-size-base * 2.15)) // ~30px | ||
59 | // $font-size-h3: ceil(($font-size-base * 1.7)) // ~24px | ||
60 | // $font-size-h4: ceil(($font-size-base * 1.25)) // ~18px | ||
61 | // $font-size-h5: $font-size-base | ||
62 | // $font-size-h6: ceil(($font-size-base * 0.85)) // ~12px | ||
63 | |||
64 | //** Unit-less `line-height` for use in components like buttons. | ||
65 | // $line-height-base: 1.428571429 // 20/14 | ||
66 | //** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc. | ||
67 | // $line-height-computed: floor(($font-size-base * $line-height-base)) // ~20px | ||
68 | |||
69 | //** By default, this inherits from the `<body>`. | ||
70 | // $headings-font-family: inherit | ||
71 | // $headings-font-weight: 500 | ||
72 | // $headings-line-height: 1.1 | ||
73 | // $headings-color: inherit | ||
74 | |||
75 | |||
76 | //== Iconography | ||
77 | // | ||
78 | //## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower. | ||
79 | |||
80 | //** Load fonts from this directory. | ||
81 | |||
82 | // [converter] If $bootstrap-sass-asset-helper if used, provide path relative to the assets load path. | ||
83 | // [converter] This is because some asset helpers, such as Sprockets, do not work with file-relative paths. | ||
84 | // $icon-font-path: if($bootstrap-sass-asset-helper, "bootstrap/", "../fonts/bootstrap/") | ||
85 | |||
86 | //** File name for all font files. | ||
87 | // $icon-font-name: "glyphicons-halflings-regular" | ||
88 | //** Element ID within SVG icon file. | ||
89 | // $icon-font-svg-id: "glyphicons_halflingsregular" | ||
90 | |||
91 | |||
92 | //== Components | ||
93 | // | ||
94 | //## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start). | ||
95 | |||
96 | // $padding-base-vertical: 6px | ||
97 | // $padding-base-horizontal: 12px | ||
98 | |||
99 | // $padding-large-vertical: 10px | ||
100 | // $padding-large-horizontal: 16px | ||
101 | |||
102 | // $padding-small-vertical: 5px | ||
103 | // $padding-small-horizontal: 10px | ||
104 | |||
105 | // $padding-xs-vertical: 1px | ||
106 | // $padding-xs-horizontal: 5px | ||
107 | |||
108 | // $line-height-large: 1.3333333 // extra decimals for Win 8.1 Chrome | ||
109 | // $line-height-small: 1.5 | ||
110 | |||
111 | // $border-radius-base: 0; | ||
112 | // $border-radius-large: 0; | ||
113 | // $border-radius-small: 0; | ||
114 | |||
115 | //** Global color for active items (e.g., navs or dropdowns). | ||
116 | // $component-active-color: #fff | ||
117 | //** Global background color for active items (e.g., navs or dropdowns). | ||
118 | // $component-active-bg: $brand-primary | ||
119 | |||
120 | //** Width of the `border` for generating carets that indicator dropdowns. | ||
121 | // $caret-width-base: 4px | ||
122 | //** Carets increase slightly in size for larger components. | ||
123 | // $caret-width-large: 5px | ||
124 | |||
125 | |||
126 | //== Tables | ||
127 | // | ||
128 | //## Customizes the `.table` component with basic values, each used across all table variations. | ||
129 | |||
130 | //** Padding for `<th>`s and `<td>`s. | ||
131 | // $table-cell-padding: 8px | ||
132 | //** Padding for cells in `.table-condensed`. | ||
133 | // $table-condensed-cell-padding: 5px | ||
134 | |||
135 | //** Default background color used for all tables. | ||
136 | // $table-bg: transparent | ||
137 | //** Background color used for `.table-striped`. | ||
138 | // $table-bg-accent: #f9f9f9 | ||
139 | //** Background color used for `.table-hover`. | ||
140 | // $table-bg-hover: #f5f5f5 | ||
141 | // $table-bg-active: $table-bg-hover | ||
142 | |||
143 | //** Border color for table and cell borders. | ||
144 | // $table-border-color: #ddd | ||
145 | |||
146 | |||
147 | //== Buttons | ||
148 | // | ||
149 | //## For each of Bootstrap's buttons, define text, background and border color. | ||
150 | |||
151 | // $btn-font-weight: normal | ||
152 | |||
153 | // $btn-default-color: #333 | ||
154 | // $btn-default-bg: #fff | ||
155 | // $btn-default-border: #ccc | ||
156 | |||
157 | // $btn-primary-color: #fff | ||
158 | // $btn-primary-bg: $brand-primary | ||
159 | // $btn-primary-border: darken($btn-primary-bg, 5%) | ||
160 | |||
161 | // $btn-success-color: #fff | ||
162 | // $btn-success-bg: $brand-success | ||
163 | // $btn-success-border: darken($btn-success-bg, 5%) | ||
164 | |||
165 | // $btn-info-color: #fff | ||
166 | // $btn-info-bg: $brand-info | ||
167 | // $btn-info-border: darken($btn-info-bg, 5%) | ||
168 | |||
169 | // $btn-warning-color: #fff | ||
170 | // $btn-warning-bg: $brand-warning | ||
171 | // $btn-warning-border: darken($btn-warning-bg, 5%) | ||
172 | |||
173 | // $btn-danger-color: #fff | ||
174 | // $btn-danger-bg: $brand-danger | ||
175 | // $btn-danger-border: darken($btn-danger-bg, 5%) | ||
176 | |||
177 | // $btn-link-disabled-color: $gray-light | ||
178 | |||
179 | // Allows for customizing button radius independently from global border radius | ||
180 | // $btn-border-radius-base: $border-radius-base | ||
181 | // $btn-border-radius-large: $border-radius-large | ||
182 | // $btn-border-radius-small: $border-radius-small | ||
183 | |||
184 | |||
185 | //== Forms | ||
186 | // | ||
187 | //## | ||
188 | |||
189 | //** `<input>` background color | ||
190 | // $input-bg: #fff | ||
191 | //** `<input disabled>` background color | ||
192 | // $input-bg-disabled: $gray-lighter | ||
193 | |||
194 | //** Text color for `<input>`s | ||
195 | // $input-color: $gray | ||
196 | //** `<input>` border color | ||
197 | // $input-border: #ccc | ||
198 | |||
199 | // TODO: Rename `$input-border-radius` to `$input-border-radius-base` in v4 | ||
200 | //** Default `.form-control` border radius | ||
201 | // This has no effect on `<select>`s in some browsers, due to the limited stylability of `<select>`s in CSS. | ||
202 | // $input-border-radius: $border-radius-base | ||
203 | //** Large `.form-control` border radius | ||
204 | // $input-border-radius-large: $border-radius-large | ||
205 | //** Small `.form-control` border radius | ||
206 | // $input-border-radius-small: $border-radius-small | ||
207 | |||
208 | //** Border color for inputs on focus | ||
209 | // $input-border-focus: #66afe9 | ||
210 | |||
211 | //** Placeholder text color | ||
212 | // $input-color-placeholder: #999 | ||
213 | |||
214 | //** Default `.form-control` height | ||
215 | // $input-height-base: ($line-height-computed + ($padding-base-vertical * 2) + 2) | ||
216 | //** Large `.form-control` height | ||
217 | // $input-height-large: (ceil($font-size-large * $line-height-large) + ($padding-large-vertical * 2) + 2) | ||
218 | //** Small `.form-control` height | ||
219 | // $input-height-small: (floor($font-size-small * $line-height-small) + ($padding-small-vertical * 2) + 2) | ||
220 | |||
221 | //** `.form-group` margin | ||
222 | // $form-group-margin-bottom: 15px | ||
223 | |||
224 | // $legend-color: $gray-dark | ||
225 | // $legend-border-color: #e5e5e5 | ||
226 | |||
227 | //** Background color for textual input addons | ||
228 | // $input-group-addon-bg: $gray-lighter | ||
229 | //** Border color for textual input addons | ||
230 | // $input-group-addon-border-color: $input-border | ||
231 | |||
232 | //** Disabled cursor for form controls and buttons. | ||
233 | // $cursor-disabled: not-allowed | ||
234 | |||
235 | |||
236 | //== Dropdowns | ||
237 | // | ||
238 | //## Dropdown menu container and contents. | ||
239 | |||
240 | //** Background for the dropdown menu. | ||
241 | // $dropdown-bg: #fff | ||
242 | //** Dropdown menu `border-color`. | ||
243 | // $dropdown-border: rgba(0,0,0,.15) | ||
244 | //** Dropdown menu `border-color` **for IE8**. | ||
245 | // $dropdown-fallback-border: #ccc | ||
246 | //** Divider color for between dropdown items. | ||
247 | // $dropdown-divider-bg: #e5e5e5 | ||
248 | |||
249 | //** Dropdown link text color. | ||
250 | // $dropdown-link-color: $gray-dark | ||
251 | //** Hover color for dropdown links. | ||
252 | // $dropdown-link-hover-color: darken($gray-dark, 5%) | ||
253 | //** Hover background for dropdown links. | ||
254 | // $dropdown-link-hover-bg: #f5f5f5 | ||
255 | |||
256 | //** Active dropdown menu item text color. | ||
257 | // $dropdown-link-active-color: $component-active-color | ||
258 | //** Active dropdown menu item background color. | ||
259 | // $dropdown-link-active-bg: $component-active-bg | ||
260 | |||
261 | //** Disabled dropdown menu item background color. | ||
262 | // $dropdown-link-disabled-color: $gray-light | ||
263 | |||
264 | //** Text color for headers within dropdown menus. | ||
265 | // $dropdown-header-color: $gray-light | ||
266 | |||
267 | //** Deprecated `$dropdown-caret-color` as of v3.1.0 | ||
268 | // $dropdown-caret-color: #000 | ||
269 | |||
270 | |||
271 | //-- Z-index master list | ||
272 | // | ||
273 | // Warning: Avoid customizing these values. They're used for a bird's eye view | ||
274 | // of components dependent on the z-axis and are designed to all work together. | ||
275 | // | ||
276 | // Note: These variables are not generated into the Customizer. | ||
277 | |||
278 | // $zindex-navbar: 1000 | ||
279 | // $zindex-dropdown: 1000 | ||
280 | // $zindex-popover: 1060 | ||
281 | // $zindex-tooltip: 1070 | ||
282 | // $zindex-navbar-fixed: 1030 | ||
283 | // $zindex-modal-background: 1040 | ||
284 | // $zindex-modal: 1050 | ||
285 | |||
286 | |||
287 | //== Media queries breakpoints | ||
288 | // | ||
289 | //## Define the breakpoints at which your layout will change, adapting to different screen sizes. | ||
290 | |||
291 | // Extra small screen / phone | ||
292 | //** Deprecated `$screen-xs` as of v3.0.1 | ||
293 | // $screen-xs: 480px | ||
294 | //** Deprecated `$screen-xs-min` as of v3.2.0 | ||
295 | // $screen-xs-min: $screen-xs | ||
296 | //** Deprecated `$screen-phone` as of v3.0.1 | ||
297 | // $screen-phone: $screen-xs-min | ||
298 | |||
299 | // Small screen / tablet | ||
300 | //** Deprecated `$screen-sm` as of v3.0.1 | ||
301 | // $screen-sm: 768px | ||
302 | // $screen-sm-min: $screen-sm | ||
303 | //** Deprecated `$screen-tablet` as of v3.0.1 | ||
304 | // $screen-tablet: $screen-sm-min | ||
305 | |||
306 | // Medium screen / desktop | ||
307 | //** Deprecated `$screen-md` as of v3.0.1 | ||
308 | // $screen-md: 992px | ||
309 | // $screen-md-min: $screen-md | ||
310 | //** Deprecated `$screen-desktop` as of v3.0.1 | ||
311 | // $screen-desktop: $screen-md-min | ||
312 | |||
313 | // Large screen / wide desktop | ||
314 | //** Deprecated `$screen-lg` as of v3.0.1 | ||
315 | // $screen-lg: 1200px | ||
316 | // $screen-lg-min: $screen-lg | ||
317 | //** Deprecated `$screen-lg-desktop` as of v3.0.1 | ||
318 | // $screen-lg-desktop: $screen-lg-min | ||
319 | |||
320 | // So media queries don't overlap when required, provide a maximum | ||
321 | // $screen-xs-max: ($screen-sm-min - 1) | ||
322 | // $screen-sm-max: ($screen-md-min - 1) | ||
323 | // $screen-md-max: ($screen-lg-min - 1) | ||
324 | |||
325 | |||
326 | //== Grid system | ||
327 | // | ||
328 | //## Define your custom responsive grid. | ||
329 | |||
330 | //** Number of columns in the grid. | ||
331 | // $grid-columns: 12 | ||
332 | //** Padding between columns. Gets divided in half for the left and right. | ||
333 | // $grid-gutter-width: 30px | ||
334 | // Navbar collapse | ||
335 | //** Point at which the navbar becomes uncollapsed. | ||
336 | // $grid-float-breakpoint: $screen-sm-min | ||
337 | //** Point at which the navbar begins collapsing. | ||
338 | // $grid-float-breakpoint-max: ($grid-float-breakpoint - 1) | ||
339 | |||
340 | |||
341 | //== Container sizes | ||
342 | // | ||
343 | //## Define the maximum width of `.container` for different screen sizes. | ||
344 | |||
345 | // Small screen / tablet | ||
346 | // $container-tablet: (720px + $grid-gutter-width) | ||
347 | //** For `$screen-sm-min` and up. | ||
348 | // $container-sm: $container-tablet | ||
349 | |||
350 | // Medium screen / desktop | ||
351 | // $container-desktop: (940px + $grid-gutter-width) | ||
352 | //** For `$screen-md-min` and up. | ||
353 | // $container-md: $container-desktop | ||
354 | |||
355 | // Large screen / wide desktop | ||
356 | // $container-large-desktop: (1140px + $grid-gutter-width) | ||
357 | //** For `$screen-lg-min` and up. | ||
358 | // $container-lg: $container-large-desktop | ||
359 | |||
360 | |||
361 | //== Navbar | ||
362 | // | ||
363 | //## | ||
364 | |||
365 | // Basics of a navbar | ||
366 | // $navbar-height: 50px | ||
367 | // $navbar-margin-bottom: $line-height-computed | ||
368 | // $navbar-border-radius: $border-radius-base | ||
369 | // $navbar-padding-horizontal: floor(($grid-gutter-width / 2)) | ||
370 | // $navbar-padding-vertical: (($navbar-height - $line-height-computed) / 2) | ||
371 | // $navbar-collapse-max-height: 340px | ||
372 | |||
373 | // $navbar-default-color: #777 | ||
374 | // $navbar-default-bg: #f8f8f8 | ||
375 | // $navbar-default-border: darken($navbar-default-bg, 6.5%) | ||
376 | |||
377 | // Navbar links | ||
378 | // $navbar-default-link-color: #777 | ||
379 | // $navbar-default-link-hover-color: #333 | ||
380 | // $navbar-default-link-hover-bg: transparent | ||
381 | // $navbar-default-link-active-color: #555 | ||
382 | // $navbar-default-link-active-bg: darken($navbar-default-bg, 6.5%) | ||
383 | // $navbar-default-link-disabled-color: #ccc | ||
384 | // $navbar-default-link-disabled-bg: transparent | ||
385 | |||
386 | // Navbar brand label | ||
387 | // $navbar-default-brand-color: $navbar-default-link-color | ||
388 | // $navbar-default-brand-hover-color: darken($navbar-default-brand-color, 10%) | ||
389 | // $navbar-default-brand-hover-bg: transparent | ||
390 | |||
391 | // Navbar toggle | ||
392 | // $navbar-default-toggle-hover-bg: #ddd | ||
393 | // $navbar-default-toggle-icon-bar-bg: #888 | ||
394 | // $navbar-default-toggle-border-color: #ddd | ||
395 | |||
396 | |||
397 | //=== Inverted navbar | ||
398 | // Reset inverted navbar basics | ||
399 | // $navbar-inverse-color: lighten($gray-light, 15%) | ||
400 | // $navbar-inverse-bg: #222 | ||
401 | // $navbar-inverse-border: darken($navbar-inverse-bg, 10%) | ||
402 | |||
403 | // Inverted navbar links | ||
404 | // $navbar-inverse-link-color: lighten($gray-light, 15%) | ||
405 | // $navbar-inverse-link-hover-color: #fff | ||
406 | // $navbar-inverse-link-hover-bg: transparent | ||
407 | // $navbar-inverse-link-active-color: $navbar-inverse-link-hover-color | ||
408 | // $navbar-inverse-link-active-bg: darken($navbar-inverse-bg, 10%) | ||
409 | // $navbar-inverse-link-disabled-color: #444 | ||
410 | // $navbar-inverse-link-disabled-bg: transparent | ||
411 | |||
412 | // Inverted navbar brand label | ||
413 | // $navbar-inverse-brand-color: $navbar-inverse-link-color | ||
414 | // $navbar-inverse-brand-hover-color: #fff | ||
415 | // $navbar-inverse-brand-hover-bg: transparent | ||
416 | |||
417 | // Inverted navbar toggle | ||
418 | // $navbar-inverse-toggle-hover-bg: #333 | ||
419 | // $navbar-inverse-toggle-icon-bar-bg: #fff | ||
420 | // $navbar-inverse-toggle-border-color: #333 | ||
421 | |||
422 | |||
423 | //== Navs | ||
424 | // | ||
425 | //## | ||
426 | |||
427 | //=== Shared nav styles | ||
428 | // $nav-link-padding: 10px 15px | ||
429 | // $nav-link-hover-bg: $gray-lighter | ||
430 | |||
431 | // $nav-disabled-link-color: $gray-light | ||
432 | // $nav-disabled-link-hover-color: $gray-light | ||
433 | |||
434 | //== Tabs | ||
435 | // $nav-tabs-border-color: #ddd | ||
436 | |||
437 | // $nav-tabs-link-hover-border-color: $gray-lighter | ||
438 | |||
439 | // $nav-tabs-active-link-hover-bg: $body-bg | ||
440 | // $nav-tabs-active-link-hover-color: $gray | ||
441 | // $nav-tabs-active-link-hover-border-color: #ddd | ||
442 | |||
443 | // $nav-tabs-justified-link-border-color: #ddd | ||
444 | // $nav-tabs-justified-active-link-border-color: $body-bg | ||
445 | |||
446 | //== Pills | ||
447 | // $nav-pills-border-radius: $border-radius-base | ||
448 | // $nav-pills-active-link-hover-bg: $component-active-bg | ||
449 | // $nav-pills-active-link-hover-color: $component-active-color | ||
450 | |||
451 | |||
452 | //== Pagination | ||
453 | // | ||
454 | //## | ||
455 | |||
456 | // $pagination-color: $link-color | ||
457 | // $pagination-bg: #fff | ||
458 | // $pagination-border: #ddd | ||
459 | |||
460 | // $pagination-hover-color: $link-hover-color | ||
461 | // $pagination-hover-bg: $gray-lighter | ||
462 | // $pagination-hover-border: #ddd | ||
463 | |||
464 | // $pagination-active-color: #fff | ||
465 | // $pagination-active-bg: $brand-primary | ||
466 | // $pagination-active-border: $brand-primary | ||
467 | |||
468 | // $pagination-disabled-color: $gray-light | ||
469 | // $pagination-disabled-bg: #fff | ||
470 | // $pagination-disabled-border: #ddd | ||
471 | |||
472 | |||
473 | //== Pager | ||
474 | // | ||
475 | //## | ||
476 | |||
477 | // $pager-bg: $pagination-bg | ||
478 | // $pager-border: $pagination-border | ||
479 | // $pager-border-radius: 15px | ||
480 | |||
481 | // $pager-hover-bg: $pagination-hover-bg | ||
482 | |||
483 | // $pager-active-bg: $pagination-active-bg | ||
484 | // $pager-active-color: $pagination-active-color | ||
485 | |||
486 | // $pager-disabled-color: $pagination-disabled-color | ||
487 | |||
488 | |||
489 | //== Jumbotron | ||
490 | // | ||
491 | //## | ||
492 | |||
493 | // $jumbotron-padding: 30px | ||
494 | // $jumbotron-color: inherit | ||
495 | // $jumbotron-bg: $gray-lighter | ||
496 | // $jumbotron-heading-color: inherit | ||
497 | // $jumbotron-font-size: ceil(($font-size-base * 1.5)) | ||
498 | // $jumbotron-heading-font-size: ceil(($font-size-base * 4.5)) | ||
499 | |||
500 | |||
501 | //== Form states and alerts | ||
502 | // | ||
503 | //## Define colors for form feedback states and, by default, alerts. | ||
504 | |||
505 | // $state-success-text: #3c763d | ||
506 | // $state-success-bg: #dff0d8 | ||
507 | // $state-success-border: darken(adjust-hue($state-success-bg, -10), 5%) | ||
508 | |||
509 | // $state-info-text: #31708f | ||
510 | // $state-info-bg: #d9edf7 | ||
511 | // $state-info-border: darken(adjust-hue($state-info-bg, -10), 7%) | ||
512 | |||
513 | // $state-warning-text: #8a6d3b | ||
514 | // $state-warning-bg: #fcf8e3 | ||
515 | // $state-warning-border: darken(adjust-hue($state-warning-bg, -10), 5%) | ||
516 | |||
517 | // $state-danger-text: #a94442 | ||
518 | // $state-danger-bg: #f2dede | ||
519 | // $state-danger-border: darken(adjust-hue($state-danger-bg, -10), 5%) | ||
520 | |||
521 | |||
522 | //== Tooltips | ||
523 | // | ||
524 | //## | ||
525 | |||
526 | //** Tooltip max width | ||
527 | // $tooltip-max-width: 200px | ||
528 | //** Tooltip text color | ||
529 | // $tooltip-color: #fff | ||
530 | //** Tooltip background color | ||
531 | // $tooltip-bg: #000 | ||
532 | // $tooltip-opacity: .9 | ||
533 | |||
534 | //** Tooltip arrow width | ||
535 | // $tooltip-arrow-width: 5px | ||
536 | //** Tooltip arrow color | ||
537 | // $tooltip-arrow-color: $tooltip-bg | ||
538 | |||
539 | |||
540 | //== Popovers | ||
541 | // | ||
542 | //## | ||
543 | |||
544 | //** Popover body background color | ||
545 | // $popover-bg: #fff | ||
546 | //** Popover maximum width | ||
547 | // $popover-max-width: 276px | ||
548 | //** Popover border color | ||
549 | // $popover-border-color: rgba(0,0,0,.2) | ||
550 | //** Popover fallback border color | ||
551 | // $popover-fallback-border-color: #ccc | ||
552 | |||
553 | //** Popover title background color | ||
554 | // $popover-title-bg: darken($popover-bg, 3%) | ||
555 | |||
556 | //** Popover arrow width | ||
557 | // $popover-arrow-width: 10px | ||
558 | //** Popover arrow color | ||
559 | // $popover-arrow-color: $popover-bg | ||
560 | |||
561 | //** Popover outer arrow width | ||
562 | // $popover-arrow-outer-width: ($popover-arrow-width + 1) | ||
563 | //** Popover outer arrow color | ||
564 | // $popover-arrow-outer-color: fade_in($popover-border-color, 0.05) | ||
565 | //** Popover outer arrow fallback color | ||
566 | // $popover-arrow-outer-fallback-color: darken($popover-fallback-border-color, 20%) | ||
567 | |||
568 | |||
569 | //== Labels | ||
570 | // | ||
571 | //## | ||
572 | |||
573 | //** Default label background color | ||
574 | // $label-default-bg: $gray-light | ||
575 | //** Primary label background color | ||
576 | // $label-primary-bg: $brand-primary | ||
577 | //** Success label background color | ||
578 | // $label-success-bg: $brand-success | ||
579 | //** Info label background color | ||
580 | // $label-info-bg: $brand-info | ||
581 | //** Warning label background color | ||
582 | // $label-warning-bg: $brand-warning | ||
583 | //** Danger label background color | ||
584 | // $label-danger-bg: $brand-danger | ||
585 | |||
586 | //** Default label text color | ||
587 | // $label-color: #fff | ||
588 | //** Default text color of a linked label | ||
589 | // $label-link-hover-color: #fff | ||
590 | |||
591 | |||
592 | //== Modals | ||
593 | // | ||
594 | //## | ||
595 | |||
596 | //** Padding applied to the modal body | ||
597 | // $modal-inner-padding: 15px | ||
598 | |||
599 | //** Padding applied to the modal title | ||
600 | // $modal-title-padding: 15px | ||
601 | //** Modal title line-height | ||
602 | // $modal-title-line-height: $line-height-base | ||
603 | |||
604 | //** Background color of modal content area | ||
605 | // $modal-content-bg: #fff | ||
606 | //** Modal content border color | ||
607 | // $modal-content-border-color: rgba(0,0,0,.2) | ||
608 | //** Modal content border color **for IE8** | ||
609 | // $modal-content-fallback-border-color: #999 | ||
610 | |||
611 | //** Modal backdrop background color | ||
612 | // $modal-backdrop-bg: #000 | ||
613 | //** Modal backdrop opacity | ||
614 | // $modal-backdrop-opacity: .5 | ||
615 | //** Modal header border color | ||
616 | // $modal-header-border-color: #e5e5e5 | ||
617 | //** Modal footer border color | ||
618 | // $modal-footer-border-color: $modal-header-border-color | ||
619 | |||
620 | // $modal-lg: 900px | ||
621 | // $modal-md: 600px | ||
622 | // $modal-sm: 300px | ||
623 | |||
624 | |||
625 | //== Alerts | ||
626 | // | ||
627 | //## Define alert colors, border radius, and padding. | ||
628 | |||
629 | // $alert-padding: 15px | ||
630 | // $alert-border-radius: $border-radius-base | ||
631 | // $alert-link-font-weight: bold | ||
632 | |||
633 | // $alert-success-bg: $state-success-bg | ||
634 | // $alert-success-text: $state-success-text | ||
635 | // $alert-success-border: $state-success-border | ||
636 | |||
637 | // $alert-info-bg: $state-info-bg | ||
638 | // $alert-info-text: $state-info-text | ||
639 | // $alert-info-border: $state-info-border | ||
640 | |||
641 | // $alert-warning-bg: $state-warning-bg | ||
642 | // $alert-warning-text: $state-warning-text | ||
643 | // $alert-warning-border: $state-warning-border | ||
644 | |||
645 | // $alert-danger-bg: $state-danger-bg | ||
646 | // $alert-danger-text: $state-danger-text | ||
647 | // $alert-danger-border: $state-danger-border | ||
648 | |||
649 | |||
650 | //== Progress bars | ||
651 | // | ||
652 | //## | ||
653 | |||
654 | //** Background color of the whole progress component | ||
655 | // $progress-bg: #f5f5f5 | ||
656 | //** Progress bar text color | ||
657 | // $progress-bar-color: #fff | ||
658 | //** Variable for setting rounded corners on progress bar. | ||
659 | // $progress-border-radius: $border-radius-base | ||
660 | |||
661 | //** Default progress bar color | ||
662 | // $progress-bar-bg: $brand-primary | ||
663 | //** Success progress bar color | ||
664 | // $progress-bar-success-bg: $brand-success | ||
665 | //** Warning progress bar color | ||
666 | // $progress-bar-warning-bg: $brand-warning | ||
667 | //** Danger progress bar color | ||
668 | // $progress-bar-danger-bg: $brand-danger | ||
669 | //** Info progress bar color | ||
670 | // $progress-bar-info-bg: $brand-info | ||
671 | |||
672 | |||
673 | //== List group | ||
674 | // | ||
675 | //## | ||
676 | |||
677 | //** Background color on `.list-group-item` | ||
678 | // $list-group-bg: #fff | ||
679 | //** `.list-group-item` border color | ||
680 | // $list-group-border: #ddd | ||
681 | //** List group border radius | ||
682 | // $list-group-border-radius: $border-radius-base | ||
683 | |||
684 | //** Background color of single list items on hover | ||
685 | // $list-group-hover-bg: #f5f5f5 | ||
686 | //** Text color of active list items | ||
687 | // $list-group-active-color: $component-active-color | ||
688 | //** Background color of active list items | ||
689 | // $list-group-active-bg: $component-active-bg | ||
690 | //** Border color of active list elements | ||
691 | // $list-group-active-border: $list-group-active-bg | ||
692 | //** Text color for content within active list items | ||
693 | // $list-group-active-text-color: lighten($list-group-active-bg, 40%) | ||
694 | |||
695 | //** Text color of disabled list items | ||
696 | // $list-group-disabled-color: $gray-light | ||
697 | //** Background color of disabled list items | ||
698 | // $list-group-disabled-bg: $gray-lighter | ||
699 | //** Text color for content within disabled list items | ||
700 | // $list-group-disabled-text-color: $list-group-disabled-color | ||
701 | |||
702 | // $list-group-link-color: #555 | ||
703 | // $list-group-link-hover-color: $list-group-link-color | ||
704 | // $list-group-link-heading-color: #333 | ||
705 | |||
706 | |||
707 | //== Panels | ||
708 | // | ||
709 | //## | ||
710 | |||
711 | // $panel-bg: #fff | ||
712 | // $panel-body-padding: 15px | ||
713 | // $panel-heading-padding: 10px 15px | ||
714 | // $panel-footer-padding: $panel-heading-padding | ||
715 | // $panel-border-radius: $border-radius-base | ||
716 | |||
717 | //** Border color for elements within panels | ||
718 | // $panel-inner-border: #ddd | ||
719 | // $panel-footer-bg: #f5f5f5 | ||
720 | |||
721 | // $panel-default-text: $gray-dark | ||
722 | // $panel-default-border: #ddd | ||
723 | // $panel-default-heading-bg: #f5f5f5 | ||
724 | |||
725 | // $panel-primary-text: #fff | ||
726 | // $panel-primary-border: $brand-primary | ||
727 | // $panel-primary-heading-bg: $brand-primary | ||
728 | |||
729 | // $panel-success-text: $state-success-text | ||
730 | // $panel-success-border: $state-success-border | ||
731 | // $panel-success-heading-bg: $state-success-bg | ||
732 | |||
733 | // $panel-info-text: $state-info-text | ||
734 | // $panel-info-border: $state-info-border | ||
735 | // $panel-info-heading-bg: $state-info-bg | ||
736 | |||
737 | // $panel-warning-text: $state-warning-text | ||
738 | // $panel-warning-border: $state-warning-border | ||
739 | // $panel-warning-heading-bg: $state-warning-bg | ||
740 | |||
741 | // $panel-danger-text: $state-danger-text | ||
742 | // $panel-danger-border: $state-danger-border | ||
743 | // $panel-danger-heading-bg: $state-danger-bg | ||
744 | |||
745 | |||
746 | //== Thumbnails | ||
747 | // | ||
748 | //## | ||
749 | |||
750 | //** Padding around the thumbnail image | ||
751 | // $thumbnail-padding: 4px | ||
752 | //** Thumbnail background color | ||
753 | // $thumbnail-bg: $body-bg | ||
754 | //** Thumbnail border color | ||
755 | // $thumbnail-border: #ddd | ||
756 | //** Thumbnail border radius | ||
757 | // $thumbnail-border-radius: $border-radius-base | ||
758 | |||
759 | //** Custom text color for thumbnail captions | ||
760 | // $thumbnail-caption-color: $text-color | ||
761 | //** Padding around the thumbnail caption | ||
762 | // $thumbnail-caption-padding: 9px | ||
763 | |||
764 | |||
765 | //== Wells | ||
766 | // | ||
767 | //## | ||
768 | |||
769 | // $well-bg: #f5f5f5 | ||
770 | // $well-border: darken($well-bg, 7%) | ||
771 | |||
772 | |||
773 | //== Badges | ||
774 | // | ||
775 | //## | ||
776 | |||
777 | // $badge-color: #fff | ||
778 | //** Linked badge text color on hover | ||
779 | // $badge-link-hover-color: #fff | ||
780 | // $badge-bg: $gray-light | ||
781 | |||
782 | //** Badge text color in active nav link | ||
783 | // $badge-active-color: $link-color | ||
784 | //** Badge background color in active nav link | ||
785 | // $badge-active-bg: #fff | ||
786 | |||
787 | // $badge-font-weight: bold | ||
788 | // $badge-line-height: 1 | ||
789 | // $badge-border-radius: 10px | ||
790 | |||
791 | |||
792 | //== Breadcrumbs | ||
793 | // | ||
794 | //## | ||
795 | |||
796 | // $breadcrumb-padding-vertical: 8px | ||
797 | // $breadcrumb-padding-horizontal: 15px | ||
798 | //** Breadcrumb background color | ||
799 | // $breadcrumb-bg: #f5f5f5 | ||
800 | //** Breadcrumb text color | ||
801 | // $breadcrumb-color: #ccc | ||
802 | //** Text color of current page in the breadcrumb | ||
803 | // $breadcrumb-active-color: $gray-light | ||
804 | //** Textual separator for between breadcrumb elements | ||
805 | // $breadcrumb-separator: "/" | ||
806 | |||
807 | |||
808 | //== Carousel | ||
809 | // | ||
810 | //## | ||
811 | |||
812 | // $carousel-text-shadow: 0 1px 2px rgba(0,0,0,.6) | ||
813 | |||
814 | // $carousel-control-color: #fff | ||
815 | // $carousel-control-width: 15% | ||
816 | // $carousel-control-opacity: .5 | ||
817 | // $carousel-control-font-size: 20px | ||
818 | |||
819 | // $carousel-indicator-active-bg: #fff | ||
820 | // $carousel-indicator-border-color: #fff | ||
821 | |||
822 | // $carousel-caption-color: #fff | ||
823 | |||
824 | |||
825 | //== Close | ||
826 | // | ||
827 | //## | ||
828 | |||
829 | // $close-font-weight: bold | ||
830 | // $close-color: #000 | ||
831 | // $close-text-shadow: 0 1px 0 #fff | ||
832 | |||
833 | |||
834 | //== Code | ||
835 | // | ||
836 | //## | ||
837 | |||
838 | // $code-color: #c7254e | ||
839 | // $code-bg: #f9f2f4 | ||
840 | |||
841 | // $kbd-color: #fff | ||
842 | // $kbd-bg: #333 | ||
843 | |||
844 | // $pre-bg: #f5f5f5 | ||
845 | // $pre-color: $gray-dark | ||
846 | // $pre-border-color: #ccc | ||
847 | // $pre-scrollable-max-height: 340px | ||
848 | |||
849 | |||
850 | //== Type | ||
851 | // | ||
852 | //## | ||
853 | |||
854 | //** Horizontal offset for forms and lists. | ||
855 | // $component-offset-horizontal: 180px | ||
856 | //** Text muted color | ||
857 | // $text-muted: $gray-light | ||
858 | //** Abbreviations and acronyms border color | ||
859 | // $abbr-border-color: $gray-light | ||
860 | //** Headings small color | ||
861 | // $headings-small-color: $gray-light | ||
862 | //** Blockquote small color | ||
863 | // $blockquote-small-color: $gray-light | ||
864 | //** Blockquote font size | ||
865 | // $blockquote-font-size: ($font-size-base * 1.25) | ||
866 | //** Blockquote border color | ||
867 | // $blockquote-border-color: $gray-lighter | ||
868 | //** Page header border color | ||
869 | // $page-header-border-color: $gray-lighter | ||
870 | //** Width of horizontal description list titles | ||
871 | // $dl-horizontal-offset: $component-offset-horizontal | ||
872 | //** Point at which .dl-horizontal becomes horizontal | ||
873 | // $dl-horizontal-breakpoint: $grid-float-breakpoint | ||
874 | //** Horizontal line color. | ||
875 | // $hr-border: $gray-lighter | ||
diff --git a/client/systemjs.bundle.js b/client/systemjs.bundle.js deleted file mode 100644 index 2fd45156a..000000000 --- a/client/systemjs.bundle.js +++ /dev/null | |||
@@ -1,15 +0,0 @@ | |||
1 | var SystemBuilder = require('systemjs-builder') | ||
2 | var builder = new SystemBuilder('node_modules', 'systemjs.config.js') | ||
3 | |||
4 | var toBundle = [ | ||
5 | 'rxjs/Rx', | ||
6 | '@angular/common', | ||
7 | '@angular/compiler', | ||
8 | '@angular/core', | ||
9 | '@angular/http', | ||
10 | '@angular/platform-browser', | ||
11 | '@angular/platform-browser-dynamic', | ||
12 | '@angular/router-deprecated' | ||
13 | ] | ||
14 | |||
15 | builder.bundle(toBundle.join(' + '), 'bundles/angular-rxjs.bundle.js') | ||
diff --git a/client/systemjs.config.js b/client/systemjs.config.js deleted file mode 100644 index d04bc4107..000000000 --- a/client/systemjs.config.js +++ /dev/null | |||
@@ -1,48 +0,0 @@ | |||
1 | ;(function (global) { | ||
2 | var map = { | ||
3 | 'angular-pipes': 'client/node_modules/angular-pipes', | ||
4 | 'ng2-bootstrap': 'client/node_modules/ng2-bootstrap', | ||
5 | 'angular-rxjs.bundle': 'client/bundles/angular-rxjs.bundle.js' | ||
6 | } | ||
7 | |||
8 | var packages = { | ||
9 | 'client': { main: 'main.js', defaultExtension: 'js' }, | ||
10 | 'ng2-bootstrap': { defaultExtension: 'js' }, | ||
11 | 'rxjs': { defaultExtension: 'js' } | ||
12 | } | ||
13 | var packageNames = [ | ||
14 | '@angular/common', | ||
15 | '@angular/compiler', | ||
16 | '@angular/core', | ||
17 | '@angular/http', | ||
18 | '@angular/platform-browser', | ||
19 | '@angular/platform-browser-dynamic', | ||
20 | '@angular/router-deprecated', | ||
21 | 'angular-pipes' | ||
22 | ] | ||
23 | |||
24 | packageNames.forEach(function (pkgName) { | ||
25 | packages[pkgName] = { main: 'index.js', defaultExtension: 'js' } | ||
26 | }) | ||
27 | |||
28 | var config = { | ||
29 | map: map, | ||
30 | packages: packages, | ||
31 | bundles: { | ||
32 | 'angular-rxjs.bundle': [ | ||
33 | 'rxjs/Rx.js', | ||
34 | '@angular/common/index.js', | ||
35 | '@angular/compiler/index.js', | ||
36 | '@angular/core/index.js', | ||
37 | '@angular/http/index.js', | ||
38 | '@angular/platform-browser/index.js', | ||
39 | '@angular/platform-browser-dynamic/index.js', | ||
40 | '@angular/router-deprecated/index.js' | ||
41 | ] | ||
42 | } | ||
43 | } | ||
44 | |||
45 | // filterSystemConfig - index.html's chance to modify config before we register it. | ||
46 | if (global.filterSystemConfig) global.filterSystemConfig(config) | ||
47 | System.config(config) | ||
48 | })(this) | ||
diff --git a/client/tsconfig.json b/client/tsconfig.json index a8b8269a4..1832d7b7e 100644 --- a/client/tsconfig.json +++ b/client/tsconfig.json | |||
@@ -20,39 +20,42 @@ | |||
20 | ], | 20 | ], |
21 | "compileOnSave": false, | 21 | "compileOnSave": false, |
22 | "files": [ | 22 | "files": [ |
23 | "app/app.component.ts", | 23 | "src/app/app.component.ts", |
24 | "app/friends/friend.service.ts", | 24 | "src/app/friends/friend.service.ts", |
25 | "app/friends/index.ts", | 25 | "src/app/friends/index.ts", |
26 | "app/login/index.ts", | 26 | "src/app/login/index.ts", |
27 | "app/login/login.component.ts", | 27 | "src/app/login/login.component.ts", |
28 | "app/shared/index.ts", | 28 | "src/app/shared/index.ts", |
29 | "app/shared/search/index.ts", | 29 | "src/app/shared/search/index.ts", |
30 | "app/shared/search/search-field.type.ts", | 30 | "src/app/shared/search/search-field.type.ts", |
31 | "app/shared/search/search.component.ts", | 31 | "src/app/shared/search/search.component.ts", |
32 | "app/shared/search/search.model.ts", | 32 | "src/app/shared/search/search.model.ts", |
33 | "app/shared/users/auth-status.model.ts", | 33 | "src/app/shared/users/auth-status.model.ts", |
34 | "app/shared/users/auth.service.ts", | 34 | "src/app/shared/users/auth.service.ts", |
35 | "app/shared/users/index.ts", | 35 | "src/app/shared/users/index.ts", |
36 | "app/shared/users/token.model.ts", | 36 | "src/app/shared/users/token.model.ts", |
37 | "app/shared/users/user.model.ts", | 37 | "src/app/shared/users/user.model.ts", |
38 | "app/videos/index.ts", | 38 | "src/app/videos/index.ts", |
39 | "app/videos/shared/index.ts", | 39 | "src/app/videos/shared/index.ts", |
40 | "app/videos/shared/loader/index.ts", | 40 | "src/app/videos/shared/loader/index.ts", |
41 | "app/videos/shared/loader/loader.component.ts", | 41 | "src/app/videos/shared/loader/loader.component.ts", |
42 | "app/videos/shared/pagination.model.ts", | 42 | "src/app/videos/shared/pagination.model.ts", |
43 | "app/videos/shared/sort-field.type.ts", | 43 | "src/app/videos/shared/sort-field.type.ts", |
44 | "app/videos/shared/video.model.ts", | 44 | "src/app/videos/shared/video.model.ts", |
45 | "app/videos/shared/video.service.ts", | 45 | "src/app/videos/shared/video.service.ts", |
46 | "app/videos/video-add/index.ts", | 46 | "src/app/videos/video-add/index.ts", |
47 | "app/videos/video-add/video-add.component.ts", | 47 | "src/app/videos/video-add/video-add.component.ts", |
48 | "app/videos/video-list/index.ts", | 48 | "src/app/videos/video-list/index.ts", |
49 | "app/videos/video-list/video-list.component.ts", | 49 | "src/app/videos/video-list/video-list.component.ts", |
50 | "app/videos/video-list/video-miniature.component.ts", | 50 | "src/app/videos/video-list/video-miniature.component.ts", |
51 | "app/videos/video-list/video-sort.component.ts", | 51 | "src/app/videos/video-list/video-sort.component.ts", |
52 | "app/videos/video-watch/index.ts", | 52 | "src/app/videos/video-watch/index.ts", |
53 | "app/videos/video-watch/video-watch.component.ts", | 53 | "src/app/videos/video-watch/video-watch.component.ts", |
54 | "app/videos/video-watch/webtorrent.service.ts", | 54 | "src/app/videos/video-watch/webtorrent.service.ts", |
55 | "main.ts", | 55 | "src/custom-typings.d.ts", |
56 | "src/main.ts", | ||
57 | "src/polyfills.ts", | ||
58 | "src/vendor.ts", | ||
56 | "typings/globals/es6-shim/index.d.ts", | 59 | "typings/globals/es6-shim/index.d.ts", |
57 | "typings/globals/jasmine/index.d.ts", | 60 | "typings/globals/jasmine/index.d.ts", |
58 | "typings/globals/jquery.fileupload/index.d.ts", | 61 | "typings/globals/jquery.fileupload/index.d.ts", |
diff --git a/client/webpack.config.js b/client/webpack.config.js new file mode 100644 index 000000000..8f54d88e5 --- /dev/null +++ b/client/webpack.config.js | |||
@@ -0,0 +1,16 @@ | |||
1 | switch (process.env.NODE_ENV) { | ||
2 | case 'prod': | ||
3 | case 'production': | ||
4 | module.exports = require('./config/webpack.prod') | ||
5 | break | ||
6 | |||
7 | case 'test': | ||
8 | case 'testing': | ||
9 | module.exports = require('./config/webpack.test') | ||
10 | break | ||
11 | |||
12 | case 'dev': | ||
13 | case 'development': | ||
14 | default: | ||
15 | module.exports = require('./config/webpack.dev') | ||
16 | } | ||
@@ -64,7 +64,7 @@ const apiRoute = '/api/' + constants.API_VERSION | |||
64 | app.use(apiRoute, routes.api) | 64 | app.use(apiRoute, routes.api) |
65 | 65 | ||
66 | // Static files | 66 | // Static files |
67 | app.use('/client', express.static(path.join(__dirname, '/client'), { maxAge: 0 })) | 67 | app.use('/client', express.static(path.join(__dirname, '/client/dist'), { maxAge: 0 })) |
68 | // 404 for static files not found | 68 | // 404 for static files not found |
69 | app.use('/client/*', function (req, res, next) { | 69 | app.use('/client/*', function (req, res, next) { |
70 | res.sendStatus(404) | 70 | res.sendStatus(404) |
@@ -76,7 +76,7 @@ app.use(constants.THUMBNAILS_STATIC_PATH, express.static(thumbnailsPhysicalPath, | |||
76 | 76 | ||
77 | // Client application | 77 | // Client application |
78 | app.use('/*', function (req, res, next) { | 78 | app.use('/*', function (req, res, next) { |
79 | res.sendFile(path.join(__dirname, 'client/index.html')) | 79 | res.sendFile(path.join(__dirname, 'client/dist/index.html')) |
80 | }) | 80 | }) |
81 | 81 | ||
82 | // ----------- Tracker ----------- | 82 | // ----------- Tracker ----------- |