Skip to content

Commit b76b915

Browse files
author
Mat Brown
committed
Merge branch 'master' into ibrand-863
* master: (133 commits) fixed css error removed static files Updated project preview Remove remaining use of data URIs Instructions component Move remaining dashboard functionality into top bar hamburger menu Add tests for restoring dehydrated projects Remove functioning by inlining it Pull project restore grace period into a constant Refactor logic for restoring from localStorage Rename 'projectStorage.js' to 'localStorage.js' Abstract project hydration logic into a client Remove no longer used warning from translations Only rehydrate a project if it was recently closed Don't create a new key when rehydrating a project Save current editor state on tab close New getCurrentProjectInstructions selector project.readme -> project.instructions Make order of like-file concatenation deterministic loading markdown into dashboard! ...
2 parents e7e057e + 8ab0a74 commit b76b915

153 files changed

Lines changed: 5418 additions & 3279 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.eslintrc

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33
"accessor-pairs": [
44
2
55
],
6+
"array-bracket-newline": [
7+
2,
8+
{"multiline": true}
9+
],
610
"array-bracket-spacing": [
711
2,
812
"never"
@@ -49,8 +53,7 @@
4953
{"before": false, "after": true}
5054
],
5155
"complexity": [
52-
2,
53-
{"max": 30}
56+
2
5457
],
5558
"computed-property-spacing": [
5659
2,
@@ -94,6 +97,9 @@
9497
"after": true
9598
}
9699
],
100+
"getter-return": [
101+
2
102+
],
97103
"global-require": [
98104
2
99105
],
@@ -208,7 +214,7 @@
208214
],
209215
"new-cap": [
210216
2,
211-
{"capIsNewExceptions": ["Slowparse.HTML"]}
217+
{"capIsNewExceptions": ["Slowparse.HTML", "Record"]}
212218
],
213219
"new-parens": [
214220
2
@@ -219,6 +225,9 @@
219225
"no-array-constructor": [
220226
2
221227
],
228+
"no-await-in-loop": [
229+
2
230+
],
222231
"no-caller": [
223232
2
224233
],
@@ -424,6 +433,9 @@
424433
"no-return-assign": [
425434
2
426435
],
436+
"no-return-await": [
437+
2
438+
],
427439
"no-script-url": [
428440
2
429441
],
@@ -497,6 +509,9 @@
497509
"no-useless-constructor": [
498510
2
499511
],
512+
"no-useless-return": [
513+
2
514+
],
500515
"no-var": [
501516
2
502517
],
@@ -542,6 +557,12 @@
542557
"prefer-const": [
543558
2
544559
],
560+
"prefer-destructuring": [
561+
2
562+
],
563+
"prefer-promise-reject-errors": [
564+
2
565+
],
545566
"prefer-reflect": [
546567
2
547568
],
@@ -770,6 +791,9 @@
770791
2,
771792
"never"
772793
],
794+
"switch-colon-spacing": [
795+
2,
796+
],
773797
"use-isnan": [
774798
2
775799
],

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
dist
2+
static/compiled
23
node_modules
34
npm-debug.log
45
bower_components

.projections.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,14 @@
77
"type": "container",
88
"template": "import {open}connect{close} from 'react-redux';\nimport {open}{}{close} from '../components';\nimport {open}{close} from '../actions';\n\nfunction mapStateToProps(state) {open}\n return {open}\n {close};\n{close}\n\nfunction mapDispatchToProps(dispatch) {open}\n return {open}\n {close};\n{close}\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps,\n)({});\n"
99
},
10+
"src/selectors/*.js": {
11+
"type": "selector",
12+
"template": "import {open}createSelector{close} from 'reselect';\n\nexport default createSelector(\n [],\n () => {open}\n {close},\n);"
13+
},
14+
"src/records/*.js": {
15+
"type": "record",
16+
"template": "import {open}Record{close} from 'immutable';\n\nexport default Record({open}\n{close}, '{}');"
17+
},
1018
"src/store.js": {
1119
"type": "store"
1220
},

.travis.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ env:
1212
- GOOGLE_ANALYTICS_TRACKING_ID=UA-90316486-1
1313
- secure: oNSex8CSxFztUhsuIVREJmJTH2H3D+zW1Q8tckp717HyJQQ3j1cVd1FUPJpLYu8sYAxMbf1HrxGPYfXUfXAXPKcXK6eCoWVUfJ9sCjTPgI+IKNYWshOsZxgkpZDELqK02iXfiX2N9IBX9Ucf/QLrtcmVCx4uSOIwU0zlKTnZZKOIaVhZMh9WJl0zetMdnh4zwRwJ0JqN/NDbEq43gKC87BZsk09/j/2kq3soyIqLoTe4kzkOxpnQUYBlQaL0XgrjODnMxiL+7tvmNJXzMgYH5VgfjU8mSrA78JnmrakbQIMtTn53rCXNM+LD67RbvSWwiUwTT6Ve7hYNyriovfXqk3UKL5KoawThn6/SF4zFc8lma395OMbE2NVTU0VaOGZ5wiiQvVeZftg272RRFeAHRSRjERjO5+mAi65nKLEcO7uIIMVG/hVcKVUplo9yfQpLOJyPaVke3iLP74D5s0PLxROM11qwYhrEHk7uE5nhPhc8GADtUbEjIh/HbOeLDpsK0unjwbiQzqQ1P5kxx0Z33ISjraM4aIpMch6bL8kPLKXPxF3i/7J16NkTnbNic6W+O8IOCuHgHgt+7NVdt+NNgQyZJockS4FVdGg3yktgXCFlKwcBcQNMkud3pDhUnivGlK6XV5cZRb3G6Kx/DwpjWqW405lCIFLtyicqKZ/13FI=
1414
- secure: SfrceTUdcPMC9Jk7T9eIFVxDGdoOC9sUUg6nQX+3GerJ+vefoVFjspx/StYPr5Jci7NWqFCGns/8Ctu7eOK7p9lFnHeleuNGxKhotsmV2dfF3DjzkusuTisVhFMNKclVCxSSuQYswBZJ8ZUCdxMYq3XIyl5kfxD7t8Tb09cdeYWPw1SUkSdjMYbVUkL+Q+tidb4FudhIH5hZQ+gAAtRYidxG1esNj0cB1ITyN5eM3UkGM59/TFqvIGfolJEBJFW7gyeqedKlgiavdXVaEOvBk4kqu+2q7waMTYbCMPLBFNBBH7bEdPt4OA5hU5qlVuCMH7y3CKHOikSDiIBzLEIcx1cy1xmHzvxuDya340vW0IK8PnvSV2jp/3uy4XWc0SXq+zWAZTfHwYFObx32byo0pBTnx8CVkxdhwNZYwfCU7KIPHJ++WVpxTyx/BrJT5BkqmTbnccsJrpr75DNfm/lrthWjz66Es2sdZVb5Knn/ezfHyKP92hcl1jNhddkX4YWH1rZt5UYA1paQrsMgolKnt9oRBsaN5/2A5X+2hHzwDRSV20XP7d7ZLwDtUCsUQf7aMo5B4P6p3ElRGpLyA04YRm/x/aegQujVMrgdIKxZ/u/TtM0gPkkoeFcbDSrQq3PVEiOGMiDxKPrKMEE4f0nYqs6mpeyoBn6lSyCXDWhXcAo=
15-
- secure: iMjUVXUDF/AbL0Kz1Ey4QcvhBFG1Z7moAg5erVkXUt9ZX7/GwRj0orZ4S2MHeS5W2vNNzSpgoiCjAp7DWPwxd5yE01bC6rRDLg/2ED2SGb3bB/l47BqN9ZReq0PUf665YggLTKmg5eULqPS8Br9aU12gqWlPVv+pS/ZsBIifkPhaJVl+gH77c+qtQ/JlNGYi4xuHaWgMwJcaenfUgIunDNHMnAjj+GmOXGK8EzHcTzMaFQt14Eb5I7eXIRadWBvNfbY0WbipRlovo1/Gjyse4sQxdb7x1UHbTSVf+dfZhsFVBIhK/+d/rQ4ayo0RvtceCPswpkrt0KoZET4JQ7qgY2HavLZVb2uZ8DNA3SW+BrIAf1/3CkHZoac6PsFPTNWp33+Sy2IRDu0mT24NF6PIAHxrPdvLqlrfk/LxjzOaiajVVrqCZBaU7rqhE/qW81a5gEKNtBqNghTLOwDiSRIKtCyb2bZ7RbRFFj27wluvZQRMRe/SoT8PKUDVNPEvcWTsEPtXacdj0PQ0f3jeUpxbmmU0Tr8W0bv0dG3REsvLJYwphiBxAvr3MZeLhRxpmRTAXo3vTEg45vd35Sr4olevmig+TOfaMVYrAgYdAYkZHMLMGUMGpCqYnkS2l5SpoDAO0+eINw0phT8iyhAM7GnEsIbR/OYYGgJFYgnxVkqadec=
1615
cache:
1716
apt: true
1817
yarn: true
@@ -22,6 +21,9 @@ addons:
2221
- ubuntu-toolchain-r-test
2322
packages:
2423
- g++-4.8
24+
before_install:
25+
- curl -o- -L https://yarnpkg.com/install.sh | bash -s -- --version 0.27.5
26+
- export PATH="$HOME/.yarn/bin:$PATH"
2527
before_script:
2628
- export DISPLAY=:99.0
2729
- sh -e /etc/init.d/xvfb start

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,7 @@ for all the sordid details.
208208
* [Ten-Young Guh](https://github.com/tenyoung795)
209209
* [Ilona Brand](https://github.com/ibrand)
210210
* [Kaylee Knowles](https://github.com/kaylee42)
211+
* [Felicia Wong](https://github.com/quixotically)
211212
* [Katie Conneally](http://www.katieconneally.com/) created the name Popcode
212213
* Logo design, "Pop" concept, and UI by the team at
213214
[Red Peak](http://redpeakgroup.com): Andrew Haug, Aya Kawabata, Jieun Lee,

config/firebase-auth.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,23 @@
66
".write": "$user_id === auth.uid"
77
}
88
},
9+
"snapshots": {
10+
"$snapshotKey": {
11+
".read": true,
12+
".write": "!data.exists()"
13+
}
14+
},
915
"authTokens": {
1016
"$user_id": {
1117
".read": "$user_id === auth.uid",
1218
".write": "$user_id === auth.uid"
1319
}
20+
},
21+
"providerInfo": {
22+
"$user_id": {
23+
".read": "$user_id === auth.uid",
24+
".write": "$user_id === auth.uid"
25+
}
1426
}
1527
}
1628
}

gulpfile.js

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ const postcss = require('gulp-postcss');
1919
const cssnext = require('postcss-cssnext');
2020
const webpack = require('webpack');
2121
const webpackDevMiddleware = require('webpack-dev-middleware');
22-
const CloudFlare = require('cloudflare');
22+
const cloudflare = require('cloudflare');
2323
const BrowserSync = require('browser-sync');
2424
const pify = require('pify');
2525
const config = require('./src/config');
@@ -67,7 +67,7 @@ gulp.task('fonts', () => gulp.
6767
'roboto-webfont-bower/fonts/Roboto-{Bold,Regular}-webfont.*'
6868
),
6969
]).
70-
pipe(gulp.dest(path.join(distDir, 'fonts')))
70+
pipe(gulp.dest(path.join(distDir, 'fonts')))
7171
);
7272

7373
gulp.task('css', () => {
@@ -105,7 +105,7 @@ gulp.task('js', ['env'], () => {
105105

106106
gulp.task('build', ['static', 'fonts', 'css', 'js']);
107107

108-
gulp.task('syncFirebase', async () => {
108+
gulp.task('syncFirebase', async() => {
109109
const data = await pify(fs).readFile(
110110
path.resolve(__dirname, 'config/firebase-auth.json')
111111
);
@@ -144,22 +144,24 @@ gulp.task('browserSync', ['static'], () => {
144144
browserSync.init({
145145
server: {
146146
baseDir: distDir,
147-
middleware: [webpackDevMiddleware(
148-
compiler,
149-
{
150-
lazy: false,
151-
stats: 'errors-only',
152-
}
153-
)],
147+
middleware: [
148+
webpackDevMiddleware(
149+
compiler,
150+
{
151+
lazy: false,
152+
stats: 'errors-only',
153+
}
154+
)
155+
],
154156
},
155157
});
156158
});
157159

158160
gulp.task('purgeCache', () =>
159-
new CloudFlare({
161+
cloudflare({
160162
email: process.env.CLOUDFLARE_EMAIL,
161163
key: process.env.CLOUDFLARE_KEY,
162-
}).deleteCache(
164+
}).zones.purgeCache(
163165
process.env.CLOUDFLARE_ZONE,
164166
{purge_everything: true}
165167
)

locales/en/translation.json

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
{
2-
"dashboard": {
2+
"top-bar": {
3+
"create-snapshot": "Snapshot",
4+
"export-gist": "Export Gist",
5+
"export-repo": "Export Repo",
6+
"libraries": "Libraries",
7+
"load-project": "My Projects",
8+
"new-project": "New Project",
9+
"send-feedback": "Send Feedback",
310
"session": {
4-
"not-logged-in": "Not logged in",
5-
"log-in-prompt": "Sign in",
6-
"log-out-prompt": "Sign out"
7-
},
8-
"menu": {
9-
"new-project": "New Project",
10-
"load-project": "Load Project",
11-
"libraries": "Libraries",
12-
"export-gist": "Export Gist",
13-
"send-feedback": "Send Feedback"
11+
"log-in-prompt": "Log in to save",
12+
"log-out-prompt": "Log out"
1413
}
1514
},
1615
"editors": {
@@ -29,10 +28,17 @@
2928
"empty-gist": "You need some code in your project to export a gist!",
3029
"gist-export-error": "Something went wrong trying to create that gist. Please try again.",
3130
"gist-export-complete": "Your gist export is ready!",
32-
"gist-export-link": "Click here to open it",
31+
"github-export-link": "Click here to open it",
3332
"gist-import-not-found": "Looks like that gist doesn’t exist. Check the URL and try again.",
3433
"gist-import-error": "There was a problem importing that gist.",
35-
"gist-import-link": "Click here to open it"
34+
"gist-import-link": "Click here to open it",
35+
"repo-export-error": "Something went wrong trying to create that repo. Please try again.",
36+
"repo-export-complete": "Your repo export is ready!",
37+
"snapshot-created": "Your snapshot is ready!",
38+
"click-to-copy": "Click here to copy it",
39+
"snapshot-export-error": "Something went wrong trying to create that snapshot. Please try again.",
40+
"snapshot-import-error": "Something went wrong trying to load that snapshot. Please try again.",
41+
"snapshot-not-found": "That snapshot doesn’t seem to exist. Check the link and try again."
3642
},
3743
"languages": {
3844
"html": "HTML",
@@ -41,7 +47,6 @@
4147
},
4248
"workspace": {
4349
"confirmations": {
44-
"unload-unsaved": "If you leave the page, you will lose your work. To save your work, you must log in using your GitHub account.",
4550
"anonymous-gist-export": "Are you sure you want to export this gist anonymously? If you sign in before exporting, the gist will be added to your GitHub account."
4651
},
4752
"loading": "Loading…",
@@ -99,7 +104,6 @@
99104
"empty-title-element": "You have an empty <title> tag. A <title> tag should always contain text.",
100105
"html-in-css-block": "It looks like you typed some HTML code inside a <style> tag. Remember that only CSS code can go inside a <style> tag.",
101106
"invalid-attribute-name": "{{attribute}} isn’t allowed as an attribute name.",
102-
"mismatched-close-tag": "Your <{{open}}> tag needs a closing tag, but instead there’s a </{{close}}> tag where the </{{open}}> tag should be.",
103107
"self-closing-non-void-element": "{{tag, en-handle-an|capitalize}} <{{tag}}> tag always needs a closing </{{tag}}> tag. Writing <{{tag}}/> is not allowed.",
104108
"unclosed-tag": "Your <{{tag}}> tag needs to be closed by an </{{tag}}> tag.",
105109
"unexpected-close-tag": "You have a closing </{{tag}}> tag that doesn’t match any opening <{{tag}}> tag.",
@@ -109,7 +113,8 @@
109113
"unterminated-comment": "You have a comment that never ends. End the comment with -->",
110114
"unbound-attribute-value": "The value {{value}} isn’t attached to an attribute. Are you missing an = sign?",
111115
"invalid-tag-name": "<{{tag}}> isn’t a valid HTML tag. If you want to create a custom tag, make sure the name has a - in it, like <my-tag>",
112-
"space-before-tag-name": "You can’t put any space after the < in an HTML tag. Write <{{tag}}> instead of < {{tag}}>."
116+
"space-before-tag-name": "You can’t put any space after the < in an HTML tag. Write <{{tag}}> instead of < {{tag}}>.",
117+
"misplaced-close-tag": "This closing </{{open}}> tag should go to before the </{{close}}> tag on line {{mismatch}}."
113118
},
114119
"css": {
115120
"missing-opening-curly": "You should have a { at the end of this line.",

0 commit comments

Comments
 (0)