11 |
12 | You might have to enable accessibility access on macOS in order to use this features. App will ask you once it’s needed.
13 |
14 | Now when all is set you can:
15 |
16 | - Start your presentation by holding next button: from the first slide (if none selected) or from the current slide (if there’s one).
17 | - Exit full screen mode by holding back button. It might be useful when you need to find a certain slide and navigate the list.
18 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Contributing to Shower
2 |
3 | You’re always welcome to contribute! Before contributing to Shower, please read through unified [issues list](https://github.com/shower/shower/issues) to see open bugs and feature requests. If you have any feature to add to Shower or found a bug and want to fix it, please make sure you [file an issue](https://github.com/shower/shower/issues/new) first.
4 |
5 | ## Process
6 |
7 | Fork needed repository, create a branch for each feature or issue you’re dealing with and start making changes. Make sure you code doesn’t break tests if there are any. Once you’re finished, send pull request back to original repository: one feature or bug fix — one pull request, please don’t combine non-relevant changes into one pull request. Supply clear description of your changes and a link to existing issue.
8 |
9 | ## Code style
10 |
11 | Please preserve existing code style while contributing to Shower and be ready for code review by Shower maintainers. It’s strongly recommended to install [EditorConfig](http://editorconfig.org) extension to your editor and validate your JavaScript changes using [JSHint](http://jshint.com/).
12 |
13 | ## Language
14 |
15 | English is the main language for Shower project. All discussions and commit messages should be in English, no matter if it’s good or bad. The second language of Shower is Russian. Official Shower themes are always compatible with Cyrillic and Russian typography. All documentation to Shower is always localized to Russian.
16 |
17 | ---
18 | Licensed under [MIT License](LICENSE.md).
19 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | # The MIT License
2 |
3 | Copyright © 2010–2015 Vadim Makeev, http://pepelsbey.net/
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6 |
7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
8 |
9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
10 |
11 | ---
12 |
13 | # Лицензия MIT
14 |
15 | Copyright © 2010–2015 Вадим Макеев, http://pepelsbey.net/
16 |
17 | Данная лицензия разрешает лицам, получившим копию данного программного обеспечения и сопутствующей документации (в дальнейшем именуемыми «Программное Обеспечение»), безвозмездно использовать Программное Обеспечение без ограничений, включая неограниченное право на использование, копирование, изменение, добавление, публикацию, распространение, сублицензирование и/или продажу копий Программного Обеспечения, также как и лицам, которым предоставляется данное Программное Обеспечение, при соблюдении следующих условий:
18 |
19 | Указанное выше уведомление об авторском праве и данные условия должны быть включены во все копии или значимые части данного Программного Обеспечения.
20 |
21 | ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ГАРАНТИЯМИ ТОВАРНОЙ ПРИГОДНОСТИ, СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И ОТСУТСТВИЯ НАРУШЕНИЙ ПРАВ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО ИСКАМ О ВОЗМЕЩЕНИИ УЩЕРБА, УБЫТКОВ ИЛИ ДРУГИХ ТРЕБОВАНИЙ ПО ДЕЙСТВУЮЩИМ КОНТРАКТАМ, ДЕЛИКТАМ ИЛИ ИНОМУ, ВОЗНИКШИМ ИЗ, ИМЕЮЩИМ ПРИЧИНОЙ ИЛИ СВЯЗАННЫМ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ИНЫМИ ДЕЙСТВИЯМИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # RxJS Subjects
2 |
3 | ## **Важно: пожалуйста, оцените выступлениe**
4 |
5 | Анкета на 5 минут: [https://goo.gl/forms/kkG0QSOviO6yOvRn1](https://goo.gl/forms/kkG0QSOviO6yOvRn1)
6 |
7 |
8 | ## Материалы
9 |
10 | 1. [Видео](https://youtu.be/KFV7IgCU68Q?t=4m20s)
11 | 2. Презентация [https://aalexeev239.github.io/rxjs-subjects/](https://aalexeev239.github.io/rxjs-subjects/)
12 | 3. Пример кода [https://github.com/aalexeev239/rxjs-subjects-example](https://github.com/aalexeev239/rxjs-subjects-example)
13 |
14 | ## Cсылки
15 |
16 | ### Observable
17 |
18 | - Введение в документацию [http://reactivex.io/rxjs/manual/overview.html](http://reactivex.io/rxjs/manual/overview.html)
19 | - Понимание паттернов, из которых состоит Observable [http://anasfirdousi.com/understanding-observable-patterns-behind-observables-rxjs-rx.html](http://anasfirdousi.com/understanding-observable-patterns-behind-observables-rxjs-rx.html)
20 |
21 | ### Subjects и multicast
22 | - Типы subject-ов [https://medium.com/@poudanen/%D0%BF%D0%BE%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D0%B5-rxjava-subject-publish-replay-behavior-%D0%B8-async-subject-35ad50cd1064](https://medium.com/@poudanen/%D0%BF%D0%BE%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D0%B5-rxjava-subject-publish-replay-behavior-%D0%B8-async-subject-35ad50cd1064)
23 | - Hot vs Cold Observables [https://medium.com/@benlesh/hot-vs-cold-observables-f8094ed53339](https://medium.com/@benlesh/hot-vs-cold-observables-f8094ed53339)
24 | - RxJS: Understanding the publish and share Operators [https://blog.angularindepth.com/rxjs-understanding-the-publish-and-share-operators-16ea2f446635](https://blog.angularindepth.com/rxjs-understanding-the-publish-and-share-operators-16ea2f446635)
25 | - Документация multicast оператора [http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-multicast](http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-multicast)
26 |
27 | ### Egghead
28 |
29 | - Use Higher Order Observables in RxJS Effectively [https://egghead.io/courses/use-higher-order-observables-in-rxjs-effectively](https://egghead.io/courses/use-higher-order-observables-in-rxjs-effectively)
30 | - Save time avoiding common mistakes using RxJS [https://egghead.io/courses/save-time-avoiding-common-mistakes-using-rxjs](https://egghead.io/courses/save-time-avoiding-common-mistakes-using-rxjs)
31 | - RxJS Subjects and Multicasting Operators [https://egghead.io/courses/rxjs-subjects-and-multicasting-operators](https://egghead.io/courses/rxjs-subjects-and-multicasting-operators)
32 |
33 | ### Не попали в категории
34 | - Rx Visualizer – песочница по визуализации Observable [https://rxviz.com/](https://rxviz.com/)
35 | - RxJS: Don’t Unsubscribe [https://medium.com/@benlesh/rxjs-dont-unsubscribe-6753ed4fda87](https://medium.com/@benlesh/rxjs-dont-unsubscribe-6753ed4fda87)
36 |
--------------------------------------------------------------------------------
/custom/styles.css:
--------------------------------------------------------------------------------
1 | .shower {
2 | font-size: 20px;
3 | }
4 |
5 | .slide .shout {
6 | font-size: 100px;
7 | }
8 |
9 | .slide small {
10 | margin-top: 10px;
11 | display: block;
12 | font-size: 14px;
13 | }
14 |
15 | .slide p {
16 | font-size: 18px;
17 | margin: 0;
18 | }
19 |
20 | .slide .slide-header {
21 | margin-bottom: 30px;
22 | }
23 |
24 | .slide-description {
25 | min-height: 70px;
26 | position: relative;
27 | padding-right: 35px;
28 | }
29 |
30 | .slide-description.big {
31 | min-height: 175px;
32 | }
33 |
34 | .intro {
35 | text-align: center;
36 | }
37 |
38 | .playground {
39 | padding: 10px 0;
40 | min-height: 10px;
41 | }
42 |
43 | .text-hot {
44 | color: #C0504D;
45 | }
46 |
47 | .text-cold {
48 | color: #4F81BD;
49 | }
50 |
51 | .text-muted {
52 | color: #777;
53 | }
54 |
55 | .relative-container {
56 | position: relative;
57 | }
58 |
59 | .relative-image {
60 | position: absolute;
61 | box-shadow: 0 0 0 2px #434343;
62 | }
63 |
64 | .code-special {
65 | position: absolute;
66 | top: 0;
67 | right: 0;
68 | font-size: 11px;
69 | padding: 10px;
70 | padding-left: 35px;
71 | padding-bottom: 0;
72 | border: 1px solid #787878;
73 | opacity: .7;
74 | }
75 |
76 | .btn {
77 | font-size: 20px;
78 | padding: .3em .7em;
79 | background: #ffcf0f;
80 | color: #000000;
81 | border: none;
82 | cursor: pointer;
83 | transition: background .2s, box-shadow .2s;
84 | }
85 |
86 | .btn:hover {
87 | background: #f5c400;
88 | }
89 |
90 | .btn:active {
91 | background: #dbaf00;
92 | box-shadow: inset 0 0 .1em rgba(0, 0, 0, 0.5);
93 | }
94 |
95 | .btn:focus {
96 | outline: none;
97 | }
98 |
99 | .btn[disabled] {
100 | background: #c29b00;
101 | opacity: .7;
102 | cursor: default;
103 | }
104 |
105 | .btn.hidden {
106 | display: none;
107 | }
108 |
109 | .btn-play {
110 | position: absolute;
111 | right: 0;
112 | top: 0;
113 | }
114 |
115 | .timeline {
116 | color: red;
117 | margin: 15px 0;
118 | height: 4px;
119 | background-color: currentColor;
120 | position: relative;
121 | z-index: 0;
122 | transition: width linear 6s;
123 | width: 0;
124 | }
125 |
126 | .hidden {
127 | display: none !important;
128 | }
129 |
130 | .button {
131 | margin: 20px 0;
132 | display: inline-block;
133 | padding: 8px 16px;
134 | min-width: 120px;
135 | color: #009D91;
136 | border: 4px solid;
137 | font-size: 20px;
138 | font-weight: bold;
139 | text-transform: uppercase;
140 | border-radius: 8px;
141 | }
142 |
143 | .button:active {
144 | color: #FB000D;
145 | }
146 |
147 | .button:focus {
148 | outline: none;
149 | }
150 |
151 | .button .button-text,
152 | .button:active .button-text-active {
153 | display: inline;
154 | }
155 |
156 | .button .button-text-active,
157 | .button:active .button-text {
158 | display: none;
159 | }
160 |
161 | .timeline + .timeline {
162 | margin-top: 40px;
163 | }
164 |
165 | .entry {
166 | background-color: #ffffff;
167 | position: absolute;
168 | top: -14px;
169 | margin-left: -12px;
170 | left: 0;
171 | display: inline-block;
172 | vertical-align: top;
173 | box-sizing: border-box;
174 | width: 30px;
175 | height: 30px;
176 | line-height: 30px;
177 | font-size: 13px;
178 | box-sizing: border-box;
179 | box-shadow: 0 0 0 2px currentColor;
180 | text-align: center;
181 | border-radius: 50%;
182 | z-index: 1;
183 | }
184 |
185 | .entry.shift {
186 | top: -6px;
187 | z-index: 2;
188 | background: rgba(255, 255, 255, 0.6);
189 | }
190 |
191 |
--------------------------------------------------------------------------------
/gulpfile.js:
--------------------------------------------------------------------------------
1 | const del = require('del');
2 | const fs = require('fs');
3 | const gulp = require('gulp');
4 | const merge = require('merge-stream');
5 | const rename = require('gulp-rename');
6 | const replace = require('gulp-replace');
7 | const rsync = require('gulp-rsync');
8 | const sequence = require('run-sequence');
9 | const zip = require('gulp-zip');
10 | const pages = require('gulp-gh-pages');
11 | const browserSync = require('browser-sync').create();
12 |
13 | gulp.task('prepare', () => {
14 |
15 | const shower = gulp.src([
16 | '**',
17 | '!docs{,/**}',
18 | '!node_modules{,/**}',
19 | '!prepared{,/**}',
20 | '!utils{,/**}',
21 | '!CONTRIBUTING.md',
22 | '!LICENSE.md',
23 | '!README.md',
24 | '!gulpfile.js',
25 | '!package.json',
26 | '!package-lock.json'
27 | ])
28 | .pipe(replace(
29 | /(