Compare commits

..

76 Commits

Author SHA1 Message Date
dependabot[bot]
6ae59cc2ef Bump ajv from 6.12.2 to 6.12.6
Bumps [ajv](https://github.com/ajv-validator/ajv) from 6.12.2 to 6.12.6.
- [Release notes](https://github.com/ajv-validator/ajv/releases)
- [Commits](https://github.com/ajv-validator/ajv/compare/v6.12.2...v6.12.6)

---
updated-dependencies:
- dependency-name: ajv
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-13 09:33:02 +00:00
wellá
19bface408 Merge pull request #291 from lakuapik/patch-1 2021-11-19 11:47:14 +01:00
David Adi Nugroho
85d98cb877 Add clean code php 2021-11-02 10:31:48 +07:00
wellá
4410e8db02 Merge pull request #289 from lostdesign/add-fathom 2021-10-18 08:29:15 +02:00
wellá
26289dcd95 🐛 fix fathom 2021-10-18 08:28:41 +02:00
wellá
478274536d Merge pull request #281 from tanaybhardwaj24/dev 2021-08-09 22:45:55 +02:00
tanaybhardwaj24
a3029c3c39 removed middleware dir as it was unused + added dribbble 2021-08-08 07:01:45 +00:00
wellá
59e5f7924d Merge pull request #278 from CrazyPython/patch-1
Add Web Periodic Table
2021-06-15 15:47:02 +02:00
James
afa239eb40 Remove Web Periodic Table from General section 2021-06-04 20:12:11 -04:00
James
43239e9f8c Add Web Periodic Table to Frontend 2021-06-01 19:27:12 -04:00
James
0dc9edc1ef Fix syntax error 2021-06-01 19:18:52 -04:00
James
b490ad0e7a Fix web periodic table 2021-06-01 19:16:42 -04:00
James
01d986d3b8 Add Web Periodic Table 2021-06-01 19:15:41 -04:00
wellá
560fc2fe8e Merge pull request #273 from tianheg/dev
Update utility.json
2021-05-31 11:38:50 +02:00
Jim Gao
e17e842032 Update utility.json
Update Postwoman to Hoppscotch https://postwoman.io/
2021-04-17 22:17:35 +08:00
wellá
112d3ff0e1 Merge pull request #270 from tianheg/dev
[resources/fullstack.json] update freeCodeCamp curriculum
2021-04-03 17:07:18 +02:00
Jim Gao
d0b35fa7d7 [resources/fullstack.json] update freeCodeCamp curriculum 2021-04-02 17:34:44 +08:00
wellá
1e2d09415d Create FUNDING.yml 2021-04-01 23:13:46 +02:00
wellá
3813af3ba6 Merge pull request #268 from tianheg/dev
[resources/accessibility.json] fix url
2021-03-17 15:20:20 +01:00
Jim Gao
4f3cc37760 [resources/accessibility.json] fix url 2021-03-17 16:25:14 +08:00
wellá
5b9ea44d2d Merge pull request #258 from austinmccalley/austinmccalley-patch-1
Corrected devcord branding
2021-01-06 15:13:06 +01:00
Austin
b301a694a4 Corrected devcord branding 2021-01-05 12:58:34 -08:00
wellá
2b792abc2a Merge pull request #255 from KenavR/resource-type/content-creators
New Category "Content Creators"
2020-10-29 20:03:33 +01:00
KenavR
03498686ec Added content creators category and added some resources 2020-10-29 19:38:13 +01:00
KenavR
77cec39c4b Spaces in titles are replaced by hyphen for category title matching to support spaces in titles. 2020-10-29 19:37:38 +01:00
wellá
75c49a0787 Merge pull request #252 from webgems/lostdesign-patch-2
Update nuxt.config.js
2020-10-08 17:14:19 +02:00
wellá
520e713c37 Update nuxt.config.js 2020-10-08 17:14:05 +02:00
wellá
66c491ef0c Merge pull request #251 from webgems/lostdesign-patch-1
Update index.vue
2020-10-08 17:12:55 +02:00
wellá
f9f1ae011e Update index.vue 2020-10-08 17:12:42 +02:00
wellá
6e362d106c Merge pull request #249 from bokub/patch-1
Add NoPaste to utility
2020-10-05 15:06:05 +02:00
Boris K
f78140f8d5 Add NoPaste to utility 2020-10-05 11:52:59 +02:00
wellá
0ce189170b Merge pull request #247 from topik0/dev
Made the search bar fit in with the rest of the page better
2020-10-02 11:04:34 +02:00
Topik0
6fb923e8ea Made the searchbar fit in with the rest of the page better 2020-10-01 15:29:32 -05:00
Topik0
53c5a7c12f Updated versions for things 2020-10-01 15:28:57 -05:00
wellá
a338f7457e Merge pull request #245 from richardevcom/patch-1
Add SVG to CSS Base64 background-image tool to CSS resources.
2020-09-22 10:07:43 +02:00
richardevcom
7f514b525a Add SVG to CSS Base64 background-image tool to CSS resources.
This is a quick web tool that will convert your SVG code to CSS background-image compatible Base64 image.
2020-09-21 19:18:31 +03:00
wellá
e429e17f65 Merge pull request #239 from Aaditya-Sahay/dev
feat/rust - adds rust category and resources
2020-08-27 08:52:56 +02:00
Aaditya Sahay
281c68b8d3 feat/rust - adds rust category and resources 2020-08-27 03:14:31 +05:30
wellá
9dc30dd8f7 Merge pull request #236 from webgems/dependabot/npm_and_yarn/elliptic-6.5.3
⬆️ Bump elliptic from 6.5.2 to 6.5.3
2020-08-03 10:12:41 +02:00
dependabot[bot]
435aa0622e ⬆️ Bump elliptic from 6.5.2 to 6.5.3
Bumps [elliptic](https://github.com/indutny/elliptic) from 6.5.2 to 6.5.3.
- [Release notes](https://github.com/indutny/elliptic/releases)
- [Commits](https://github.com/indutny/elliptic/compare/v6.5.2...v6.5.3)

Signed-off-by: dependabot[bot] <support@github.com>
2020-08-01 22:49:43 +00:00
wellá
c1fc2d4748 Merge pull request #234 from ajs256/dev
Add Codesignal, per #200
2020-07-25 22:41:53 +02:00
ajs256
18e10b9a9b Fix JSON syntax 2020-07-25 13:33:46 -07:00
ajs256
2d10c4eeca Update general.json 2020-07-25 13:27:49 -07:00
ajs256
d3703d709a Update general.json 2020-07-25 13:25:27 -07:00
wellá
33240796d2 Merge pull request #233 from webgems/dependabot/npm_and_yarn/lodash-4.17.19
⬆️ Bump lodash from 4.17.15 to 4.17.19
2020-07-20 10:33:12 +02:00
dependabot[bot]
a4d761968b ⬆️ Bump lodash from 4.17.15 to 4.17.19
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.15 to 4.17.19.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.15...4.17.19)

Signed-off-by: dependabot[bot] <support@github.com>
2020-07-20 08:33:00 +00:00
wellá
059263b4b0 lower fontweight on card-titles 2020-07-15 14:27:56 +02:00
wellá
cfc4259209 add !important to fix titles, yikes 2020-07-15 12:37:24 +02:00
wellá
35516bc932 remove margin on titles 2020-07-15 12:32:55 +02:00
wellá
c414b639fd fix card-title styling 2020-07-15 12:32:10 +02:00
wellá
5dbc3cefc3 fix link not being an anchor on cards 2020-07-15 12:30:08 +02:00
wellá
5625999eca make card-titles clickable 2020-07-15 12:26:39 +02:00
wellá
a35ba613f2 Merge pull request #229 from MarcosNASA/patch-1
Added some cool resources!
2020-07-14 20:51:51 +02:00
NASA Graves
3225ca900a Added some cool resources!
Added "Deep JavaScript" book and "Loupe".
Besides, updated the YDKJS description.
2020-07-14 19:23:56 +02:00
wellá
aeddd782b7 Merge pull request #228 from waffln/dev
Add webgems.io to webgems.io
2020-07-13 15:28:24 +02:00
waffeln
949ab79b3f Add webgems.io to webgems.io 2020-07-13 15:04:15 +02:00
wellá
0e88b0c57e Merge pull request #226 from idoshamun/patch-1
 add daily.dev to the daily category
2020-07-09 14:05:28 +02:00
Ido Shamun
431de4eca1 add daily.dev to the daily category 2020-07-09 14:46:13 +03:00
lostdesign
eb38c86ae4 ♻️ remove privacy notice, remove table view 2020-07-06 14:08:47 +02:00
wellá
25eaa6d7b0 Merge pull request #223 from the94air/dev
Add "interneting is hard"
2020-07-06 13:32:37 +02:00
Abdalla Arbab
c81d73e512 Move to frontend 2020-07-06 13:30:51 +02:00
Abdalla Arbab
ab135b6984 Add interneting is hard to HTML and CSS 2020-07-06 13:09:03 +02:00
wellá
9436d68077 ♻️ updates broken link 2020-06-29 14:34:56 +02:00
wellá
fe7a35a346 Merge pull request #220 from ruffCode/fix/broken-link
fixed broken link
2020-06-16 10:07:37 +02:00
ruffCode
0b59e2d7f7 fixed broken link
fixes https://github.com/webgems/webgems/issues/219
2020-06-15 17:20:56 -04:00
lostdesign
3ada0da370 ♻️ updates domain 2020-04-28 18:22:19 +02:00
lostdesign
7ee963313d ♻️ removes matomo, fixes linting errors, adds fathom 2020-04-28 18:17:05 +02:00
wellá
0122e5b8bd Merge pull request #217 from Saghen/search-changes
Search changes
2020-04-18 16:49:33 +02:00
Liam Dyer
11b67a8bfc Enter listener on Search 2020-04-18 10:35:47 -04:00
Liam Dyer
c77e9072f5 Increase debounce time to 300ms
Co-Authored-By: wellá <info@lost.design>
2020-04-18 10:17:09 -04:00
Liam Dyer
3a4f384517 Reduce debounce time to 100ms 2020-04-17 13:01:11 -04:00
Liam Dyer
ee06cb0caf Load search from query 2020-04-17 12:58:51 -04:00
Liam Dyer
b114754da7 Decrease debounce on search to 150ms 2020-04-17 12:37:37 -04:00
lostdesign
cfbd8ef9db ♻️ remove all-contributorsrc temp 2019-11-28 17:03:45 +01:00
lostdesign
3e34dcdf18 🐛 fix search breaking layout 2019-11-28 16:59:49 +01:00
wellá
31e9d598db Merge pull request #214 from webgems/features/tracking
 add better tracking
2019-11-28 16:53:23 +01:00
37 changed files with 19327 additions and 4966 deletions

View File

@@ -1,58 +0,0 @@
{
"files": [
"README.md"
],
"imageSize": 100,
"commit": false,
"contributors": [{
"login": "lostdesign",
"name": "wellá",
"avatar_url": "https://avatars0.githubusercontent.com/u/5164617?v=4",
"profile": "https://lost.design",
"contributions": [
"business",
"infra",
"security",
"dev",
"bug",
"code",
"content",
"ideas",
"maintenance",
"review",
"test"
]
},
{
"login": "S3B4S",
"name": "Kevin van der Werff",
"avatar_url": "https://avatars0.githubusercontent.com/u/17083334?v=4",
"profile": "https://github.com/S3B4S",
"contributions": [
"dev",
"bug",
"code",
"content",
"ideas",
"maintenance",
"review",
"test"
]
},
{
"login": "Banou26",
"name": "Banou",
"avatar_url": "https://avatars0.githubusercontent.com/u/5209149?v=4",
"profile": "https://banou.dev",
"contributions": [
"bug",
"design"
]
}
],
"contributorsPerLine": 7,
"projectName": "webgems",
"projectOwner": "webgems",
"repoType": "github",
"repoHost": "https://github.com"
}

3
.github/FUNDING.yml vendored Normal file
View File

@@ -0,0 +1,3 @@
# These are supported funding model platforms
github: [lostdesign]

View File

@@ -7,3 +7,4 @@ These are lovely people who have helped this project:
- [jacobparis](https://github.com/jacobparis) : Team Devcord
* twitter: @jacobmparis
- [JonasPardon](https://github.com/JonasPardon)
- [AadityaSahay](https://github.com/AadityaSahay) : :crab:

View File

@@ -23,22 +23,4 @@ See also the list of [contributors](https://github.com/webgems/webgems/contribut
## License
This project is licensed under the GNU General Public License v3.0 - see the [LICENSE](https://github.com/webgems/webgems/blob/master/LICENSE) file for details
## Contributors ✨
Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- prettier-ignore -->
<table>
<tr>
<td align="center"><a href="https://lost.design"><img src="https://avatars0.githubusercontent.com/u/5164617?v=4" width="100px;" alt="wellá"/><br /><sub><b>wellá</b></sub></a><br /><a href="#business-lostdesign" title="Business development">💼</a> <a href="#infra-lostdesign" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#security-lostdesign" title="Security">🛡️</a> <a href="https://github.com/webgems/webgems/issues?q=author%3Alostdesign" title="Bug reports">🐛</a> <a href="https://github.com/webgems/webgems/commits?author=lostdesign" title="Code">💻</a> <a href="#content-lostdesign" title="Content">🖋</a> <a href="#ideas-lostdesign" title="Ideas, Planning, & Feedback">🤔</a> <a href="#maintenance-lostdesign" title="Maintenance">🚧</a> <a href="#review-lostdesign" title="Reviewed Pull Requests">👀</a> <a href="https://github.com/webgems/webgems/commits?author=lostdesign" title="Tests">⚠️</a></td>
<td align="center"><a href="https://github.com/S3B4S"><img src="https://avatars0.githubusercontent.com/u/17083334?v=4" width="100px;" alt="Kevin van der Werff"/><br /><sub><b>Kevin van der Werff</b></sub></a><br /><a href="https://github.com/webgems/webgems/issues?q=author%3AS3B4S" title="Bug reports">🐛</a> <a href="https://github.com/webgems/webgems/commits?author=S3B4S" title="Code">💻</a> <a href="#content-S3B4S" title="Content">🖋</a> <a href="#ideas-S3B4S" title="Ideas, Planning, & Feedback">🤔</a> <a href="#maintenance-S3B4S" title="Maintenance">🚧</a> <a href="#review-S3B4S" title="Reviewed Pull Requests">👀</a> <a href="https://github.com/webgems/webgems/commits?author=S3B4S" title="Tests">⚠️</a></td>
<td align="center"><a href="https://banou.dev"><img src="https://avatars0.githubusercontent.com/u/5209149?v=4" width="100px;" alt="Banou"/><br /><sub><b>Banou</b></sub></a><br /><a href="https://github.com/webgems/webgems/issues?q=author%3ABanou26" title="Bug reports">🐛</a> <a href="#design-Banou26" title="Design">🎨</a></td>
</tr>
</table>
<!-- ALL-CONTRIBUTORS-LIST:END -->
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
This project is licensed under the GNU General Public License v3.0 - see the [LICENSE](https://github.com/webgems/webgems/blob/master/LICENSE) file for details

View File

@@ -1,6 +1,10 @@
<!DOCTYPE html>
<html {{ HTML_ATTRS }}>
<head {{ HEAD_ATTRS }}>
<!-- Fathom - beautiful, simple website analytics -->
<script src="https://cdn.usefathom.com/script.js" data-spa="auto" data-site="XVSLUORL" defer></script>
<!-- / Fathom -->
{{ HEAD }}
</head>
<body {{ BODY_ATTRS }}>

View File

@@ -2,7 +2,7 @@
.card(:class="{ cardActive: isActive }")
.card--meta
img.card--favicon(:src="'https://www.google.com/s2/favicons?domain=' + resource.url" aria-hidden="true")
p.card--title {{resource.title}}
a.card--title(:href="resource.url" :target='resource.title' rel='noreferrer') {{resource.title}}
p.card--description {{resource.desc}}
.card--links
a.card--reference(@click='createCopyUrl(resource)') Copy
@@ -68,9 +68,10 @@ export default {
}
}
&--title {
font-weight: 900;
margin: 0;
&--title {
font-size: 16px !important;
font-weight: 600;
margin: 0 !important;
}
&--description {

View File

@@ -1,3 +0,0 @@
<template lang="pug">
iframe(style="border: 0; width: 100%; border-radius: 3px; font-family:Poppins,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif;" src="https://stats.lost.services/index.php?module=CoreAdminHome&action=optOut&language=en&backgroundColor=08e5ff&fontColor=212121&fontSize=&fontFamily=Poppins")
</template>

View File

@@ -1,5 +1,5 @@
<template lang="pug">
input.search(v-model="searchInput" type="text" placeholder="Search")
input.search(v-model="searchInput" @keydown.enter="onEnter" type="text" placeholder="Search")
</template>
<script>
@@ -13,16 +13,6 @@ export default {
searchPath: '/search',
}
},
methods: {
// isTag :: String -> Bool
isTag: R.startsWith('#'),
// removeFirstChar :: String -> String
removeFirstChar: R.compose(
R.join(''),
R.adjust(0, () => '')
),
},
watch: {
searchInput(input) {
const words = R.filter(isNotEmpty, R.split(' ', input))
@@ -32,9 +22,32 @@ export default {
const searchParams = new URLSearchParams()
if (isNotEmpty(titles))
searchParams.append('keywords', titles)
if (isNotEmpty(tags))
if (isNotEmpty(tags))
searchParams.append('tags', R.map(this.removeFirstChar, tags))
this.$router.push(this.searchPath + '?' + searchParams.toString())
},
},
mounted() {
let keywords = this.$route.query.keywords || ''
keywords = keywords.split(',').join(' ')
let tags = this.$route.query.tags || ''
tags = R.filter(this.isTag, tags.split(',')).map(tag => `#${tag}`).join(' ')
this.searchInput = `${tags} ${keywords}`.trim()
},
methods: {
// isTag :: String -> Bool
isTag: R.startsWith('#'),
// removeFirstChar :: String -> String
removeFirstChar: R.compose(
R.join(''),
R.adjust(0, () => ''),
),
onEnter() {
const searchParams = new URLSearchParams({ ...this.$route.query, enter: true })
this.$router.push(this.searchPath + '?' + searchParams.toString())
},
},
@@ -43,10 +56,13 @@ export default {
<style lang="scss">
input {
font-family: "Poppins";
padding: .5rem 1.5rem .5rem 1.5rem;
border-radius: .3rem;
background: #eee;
font-size:12px;
border: none;
background: #2E2E40;
font-size: 14px;
color: #fff;
&:focus {
outline:none;

View File

@@ -5,13 +5,7 @@
//- nuxt-link(:to='$i18n.path(category.slug)') {{ category.title }}
nuxt-link(:to='category.slug') {{ category.title }}
hr
nuxt-link(to='/privacy-policy') Privacy Policy
nuxt-link(to='/cookie-policy') Cookie Policy
nuxt-link(to='/imprint') Imprint
hr
div(class="toggleWrapper" @click="toggleCardsVisible")
div(class="viewToggle" :class="{active: areCardsVisible}") Cards
div(class="viewToggle" :class="{active: !areCardsVisible}") Table
nuxt-link(to='/legal-notice') Legal Notice
</template>
<script>

View File

@@ -1,97 +0,0 @@
<template lang="pug">
tr.tableRow(:class="{ rowActive: isActive }")
td.tableRow--favicon
img(:src="'https://www.google.com/s2/favicons?domain=' + resource.url" aria-hidden="true")
td.tableRow--title {{resource.title}}
td.tableRow--description {{resource.desc}}
td.tableRow--links
tr
td
a.tableRow--reference(@click="createCopyUrl(resource)") Copy
td
a.tableRow--target(:href="resource.url" :target='resource.title' rel='noreferrer') Open
</template>
<script>
export default {
props: {
resource: Object,
isActive: Boolean,
createCopyUrl: Function,
},
}
</script>
<style lang="scss" scoped>
.rowActive {
box-shadow:inset 0px 0px 0px 3px #08e5ff;
}
.tableRow {
background: #2d3748;
margin-bottom: 1rem;
padding: 0.5rem;
border-radius: .3rem;
transition: 0.2s ease-in-out;
width: 1fr;
display: grid;
grid-template-columns: 1.5rem minmax(150px, 2fr) 8fr 125px;
&--title {
color: white;
font-weight: 900;
width: 80%;
}
&--description {
line-height: 1.3;
font-size: 13px;
color: white;
width: 80%;
}
&--links {
cursor: pointer;
tr {
width: 100%;
display: flex;
justify-content: space-between;
}
img {
width: 1rem;
margin-left: 0.5rem;
}
&:hover::before {
opacity: 0.5;
}
}
&--reference {
font-size: 12px;
&::before {
position: absolute;
height: 0.95rem;
width: 0.95rem;
margin-left: -1.15rem;
margin-top: 0.3rem;
content: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0iIzA4ZTVmZiI+PHBhdGggZD0iTSA0IDIgQyAzLjkwNSAyIDMuODE1NjA5NCAyLjAxNDM0MzggMy43MjQ2MDk0IDIuMDI3MzQzOCBDIDMuNDM0NjA5NCAyLjE0MzM0MzggMy4xMzk3MDMxIDIuMjU3MDkzOCAyLjg0NTcwMzEgMi4zNzEwOTM4IEMgMi4zMzQ3MDMxIDIuNzMzMDkzOCAyIDMuMzI2IDIgNCBMIDIgMTggTCA0IDE4IEwgNCA0IEwgMTggNCBMIDE4IDIgTCA0IDIgeiBNIDggNiBDIDYuODk1IDYgNiA2Ljg5NSA2IDggTCA2IDIwIEMgNiAyMS4xMDUgNi44OTUgMjIgOCAyMiBMIDIwIDIyIEMgMjEuMTA1IDIyIDIyIDIxLjEwNSAyMiAyMCBMIDIyIDggQyAyMiA2Ljg5NSAyMS4xMDUgNiAyMCA2IEwgOCA2IHogTSAxNyA4LjAwMTk1MzEgQyAxNy43NjggOC4wMDE5NTMxIDE4LjUzNjA5NCA4LjI5MzkwNjIgMTkuMTIxMDk0IDguODc4OTA2MiBDIDE5LjY4ODA5NCA5LjQ0NDkwNjMgMjAgMTAuMTk5IDIwIDExIEMgMjAgMTEuODAxIDE5LjY4ODA5NCAxMi41NTQwOTQgMTkuMTIxMDk0IDEzLjEyMTA5NCBMIDE3LjIyNDYwOSAxNS4wMTc1NzggTCAxNS44MTA1NDcgMTMuNjAzNTE2IEwgMTcuNzA3MDMxIDExLjcwNzAzMSBDIDE3Ljg5NjAzMSAxMS41MTgwMzEgMTggMTEuMjY3IDE4IDExIEMgMTggMTAuNzMzIDE3Ljg5NjAzMSAxMC40ODE5NjkgMTcuNzA3MDMxIDEwLjI5Mjk2OSBDIDE3LjMxNjAzMSA5LjkwMTk2ODcgMTYuNjgzOTY5IDkuOTAyOTY4OCAxNi4yOTI5NjkgMTAuMjkyOTY5IEwgMTQuMzkwNjI1IDEyLjE5NTMxMiBMIDE1LjgwNDY4OCAxMy42MDkzNzUgTCAxMy44MDA3ODEgMTUuNjEzMjgxIEwgMTUuMjE0ODQ0IDE3LjAyNzM0NCBMIDEzLjExOTE0MSAxOS4xMjEwOTQgQyAxMi41NTQxNDEgMTkuNjg3MDk0IDExLjgwMSAyMCAxMSAyMCBDIDEwLjE5OSAyMCA5LjQ0NDkwNjMgMTkuNjg4MDk0IDguODc4OTA2MiAxOS4xMjEwOTQgQyA4LjMxMjkwNjMgMTguNTU1MDk0IDggMTcuODAxIDggMTcgQyA4IDE2LjE5OSA4LjMxMjkwNjIgMTUuNDQ1OTA2IDguODc4OTA2MiAxNC44Nzg5MDYgTCAxMC45NzI2NTYgMTIuNzg1MTU2IEwgMTIuMzg2NzE5IDE0LjE5OTIxOSBMIDE0LjM2OTE0MSAxMi4yMTY3OTcgTCAxMi45NTUwNzggMTAuODAyNzM0IEwgMTQuODc4OTA2IDguODc4OTA2MiBDIDE1LjQ2MzkwNiA4LjI5MzkwNjIgMTYuMjMyIDguMDAxOTUzMSAxNyA4LjAwMTk1MzEgeiBNIDEyLjM3MzA0NyAxNC4yMTI4OTEgTCAxMC4yOTI5NjkgMTYuMjkyOTY5IEMgMTAuMTAzOTY5IDE2LjQ4MTk2OSAxMCAxNi43MzMgMTAgMTcgQyAxMCAxNy4yNjcgMTAuMTAzOTY5IDE3LjUxODAzMSAxMC4yOTI5NjkgMTcuNzA3MDMxIEMgMTAuNjcxOTY5IDE4LjA4NjAzMSAxMS4zMjgwMzEgMTguMDg1MDMxIDExLjcwNzAzMSAxNy43MDcwMzEgTCAxMy43ODcxMDkgMTUuNjI2OTUzIEwgMTIuMzczMDQ3IDE0LjIxMjg5MSB6IiBmaWxsPSIjMDhlNWZmIi8+PC9zdmc+Cg==");
}
}
&--target {
font-size: 12px;
&::before {
position: absolute;
height: 0.95rem;
width: 0.95rem;
margin-left: -1.15rem;
margin-top: 0.3rem;
content: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0iIzA4ZTVmZiI+PHBhdGggc3R5bGU9ImxpbmUtaGVpZ2h0Om5vcm1hbDt0ZXh0LWluZGVudDowO3RleHQtYWxpZ246c3RhcnQ7dGV4dC1kZWNvcmF0aW9uLWxpbmU6bm9uZTt0ZXh0LWRlY29yYXRpb24tc3R5bGU6c29saWQ7dGV4dC1kZWNvcmF0aW9uLWNvbG9yOiMwMDA7dGV4dC10cmFuc2Zvcm06bm9uZTtibG9jay1wcm9ncmVzc2lvbjp0Yjtpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWwiIGQ9Ik0gNSAzIEMgMy45MDY5MzcyIDMgMyAzLjkwNjkzNzIgMyA1IEwgMyAxOSBDIDMgMjAuMDkzMDYzIDMuOTA2OTM3MiAyMSA1IDIxIEwgMTkgMjEgQyAyMC4wOTMwNjMgMjEgMjEgMjAuMDkzMDYzIDIxIDE5IEwgMjEgMTIgTCAxOSAxMiBMIDE5IDE5IEwgNSAxOSBMIDUgNSBMIDEyIDUgTCAxMiAzIEwgNSAzIHogTSAxNCAzIEwgMTQgNSBMIDE3LjU4NTkzOCA1IEwgOC4yOTI5Njg4IDE0LjI5Mjk2OSBMIDkuNzA3MDMxMiAxNS43MDcwMzEgTCAxOSA2LjQxNDA2MjUgTCAxOSAxMCBMIDIxIDEwIEwgMjEgMyBMIDE0IDMgeiIgZm9udC13ZWlnaHQ9IjQwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIHdoaXRlLXNwYWNlPSJub3JtYWwiIG92ZXJmbG93PSJ2aXNpYmxlIiBmaWxsPSIjMDhlNWZmIi8+PC9zdmc+Cg==");
}
}
}
</style>

View File

@@ -4,14 +4,7 @@
Logo
Search
Sidebar
no-ssr
template(v-if="showNotice")
.cookie
p This site uses cookies, please read our&nbsp;
nuxt-link.highlighted(to="privacy-policy") Privacy policy.
button.highlighted(@click.preventDefault="hideCookieNotice" type="button") X
nuxt.content
</template>
<script>
@@ -44,27 +37,6 @@ export default {
showNotice: false,
}
},
beforeMount() {
this.checkCookieNoticeHidden()
},
methods: {
hideCookieNotice() {
if(typeof(Storage) !== 'undefined'){
localStorage.setItem('cookieNoticeHidden', true)
this.showNotice = false
}
},
checkCookieNoticeHidden() {
if(typeof(Storage) !== 'undefined'){
let cookieNotice = localStorage.getItem('cookieNoticeHidden')
if(cookieNotice) {
this.showNotice = false
} else {
this.showNotice = true
}
}
},
},
}
</script>
@@ -186,6 +158,7 @@ h1 {
grid-template-areas:
'logo'
'sidebar'
'search'
'content';
}
hr {

View File

@@ -1,8 +0,0 @@
# MIDDLEWARE
**This directory is not required, you can delete it if you don't want to use it.**
This directory contains your application middleware.
Middleware let you define custom functions that can be run before rendering either a page or a group of pages.
More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/routing#middleware).

View File

@@ -14,7 +14,7 @@ export default {
{ charset: 'utf-8' },
{ name: 'viewport', content: 'width=device-width, initial-scale=1' },
{ hid: 'description', name: 'description', content: pkg.description },
{ hid: 'keywords', name: 'keywords', content: 'css, html, php, server, resources, design, gems, nuxt, javascript, tutorials, development, software'},
{ hid: 'keywords', name: 'keywords', content: 'css, html, php, server, resources, design, gems, nuxt, javascript, tutorials, development, software, js, vue, seo, rust, sql, databases'},
{ name: 'robots', content: 'index, follow' },
{ name: 'distribution', content: 'global'},
@@ -62,10 +62,6 @@ export default {
plugins: [
'~/plugins/i18n.js',
{
src: '~/plugins/vue-matomo.js',
ssr: false,
},
],
/*
** Nuxt.js modules

11028
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -15,22 +15,21 @@
},
"dependencies": {
"cross-env": "^5.2.0",
"nuxt": "^2.4.0",
"nuxt": "^2.14.6",
"nuxt-clipboard2": "^0.2.1",
"vue-i18n": "^8.11.2",
"ramda": "^0.26.1",
"vue-matomo": "^3.12.0-5"
"vue-i18n": "^8.21.1"
},
"devDependencies": {
"@babel/core": "^7.6.4",
"@babel/preset-env": "^7.6.3",
"@vue/test-utils": "^1.0.0-beta.29",
"@babel/core": "^7.11.6",
"@babel/preset-env": "^7.11.5",
"@vue/test-utils": "^1.1.0",
"autoprefixer": "^8.6.4",
"babel-core": "^7.0.0-bridge.0",
"babel-eslint": "^10.0.3",
"babel-jest": "^24.9.0",
"eslint": "^6.5.1",
"eslint-config-prettier": "^6.3.0",
"eslint-config-prettier": "^6.12.0",
"eslint-loader": "^3.0.2",
"eslint-plugin-prettier": "^3.1.1",
"eslint-plugin-vue": "^5.2.3",
@@ -43,6 +42,6 @@
"pug-plain-loader": "^1.0.0",
"sass-loader": "^7.1.0",
"tailwindcss": "^0.7.0",
"vue-jest": "^3.0.5"
"vue-jest": "^3.0.7"
}
}

View File

@@ -6,18 +6,13 @@
.cards(v-if="areCardsVisible && showCards")
template(v-for='resource in category.resources' )
Card(:resource='resource' :key='resource.title' :createCopyUrl="createCopyUrl" :isActive='activeCard === resource.cleanTitle')
transition(name="fade-card")
table(v-if="!areCardsVisible && showCards")
template(v-for='resource in category.resources' )
TableRow(:resource='resource' :key='resource.title' :createCopyUrl="createCopyUrl" :isActive='activeCard === resource.cleanTitle')
</template>
<script>
import Card from '../components/Card'
import TableRow from '../components/TableRow'
export default {
components: { Card, TableRow },
components: { Card },
data() {
return {
categoryRouteTitle: this.$route.params.category,

View File

@@ -1,56 +0,0 @@
<template lang="pug">
main
h1 Our Cookie Policy
p We believe in being transparent about how we collect and use data. This policy provides information about how and when we use cookies for these purposes. Capitalized terms used in this policy but not defined have the meaning set forth in our&nbsp;
nuxt-link.highlighted(to="privacy-policy") Privacy Policy
| &nbsp;which also includes additional details about the collection and use of information at webgems.
h2 What Is A Cookie?
p Cookies are small text files sent by us to your computer or mobile device, which enables webgems features and functionality. They are unique to your account or your browser. Session-based cookies last only while your browser is open and are automatically deleted when you close your browser. Persistent cookies last until you or your browser delete them or until they expire.
p To find out more about cookies, visit&nbsp;
a.highlighted(href="https://www.allaboutcookies.org/") this
| &nbsp;site.
h2 Does Webgems Use Cookies?
p Yes, unless your browser has "Do Not Track" enabled. Matomo creates a persistent cookie inside your browser which contains a Session ID. This Session ID is being used to analyze the usage of our website. No further cookies are created by webgems.
h2 How Can You Get Rid Of Cookies?
p Browser manufacturers provide help pages relating to cookie management in their products. Please see below for more information.
ul
li
a(href="https://support.google.com/chrome/answer/95647?hl=en-GB", title="Google Chrome") Google Chrome
li
a(href="https://support.apple.com/en-us/guide/safari/manage-cookies-and-website-data-sfri11471/mac", title="Google Chrome") Safari Desktop
li
a(href="https://support.apple.com/en-us/HT201265", title="Google Chrome") Safari Mobile
li
a(href="https://support.mozilla.org/en-US/kb/cookies-information-websites-store-on-your-computer", title="Google Chrome") Mozilla Firefox
li
a(href="http://support.google.com/ics/nexus/bin/answer.py?hl=en&answer=2425067", title="Google Chrome") Android
li
a(href="https://support.microsoft.com/en-us/kb/260971", title="Google Chrome") Internet Explorer
h2 Opt Out From Tracking
OptOutIframe
</template>
<script>
import OptOutIframe from '@/components/OptOutIframe.vue'
export default {
components: {
OptOutIframe,
},
}
</script>
<style lang="scss" scoped>
h2 {
margin-top: 2rem;
margin-bottom: 0.5rem;
}
p {
margin-top: 0;
}
</style>

View File

@@ -3,7 +3,7 @@
main
h1.text-black.font-bold.text-xl.mb-2 What is&nbsp;
span 💎 webgems?
p Webgems is a goto place for devs and designers to find new resources and more. As a beginner, it's sometimes not easy to find what you need since you don't know where to look for what.
p webgems is a goto place for devs and designers to find new resources and more. As a beginner, it's sometimes not easy to find what you need since you don't know where to look for what.
p Therefore we created this project to have the most common and best resources for beginners and veterans in one place kind of like a bookmarks list for devs and designers, containing only the best gems out there.
p If you want to add your gem, go ahead and open a pull request on GitHub (click on that octocat at the top right corner).
p By the way, this project lives by getting shared; if you find this worthy, please share it with others.
@@ -14,7 +14,7 @@
span extends&nbsp;
a(href="https://github.com/S3B4S") @S3B4S&nbsp;
span and&nbsp;
a(href="https://devcord.com") Devcord
a(href="https://devcord.com") devcord
</template>

View File

@@ -1,6 +1,6 @@
<template lang="pug">
div
h1 Imprint
h1 Legal Notice
p Webgems.io is a project of&nbsp;
a.highlighted(href="https://lost.design", title="Visit lost.design") www.lost.design

View File

@@ -1,93 +0,0 @@
<template lang="pug">
main
h1 Our Privacy Policy
p This Privacy Policy describes how webgems collects, uses and discloses information, and what choices you have with respect to the information. We respect the Browser's "Do Not Track" feature, you won't be affected by this policy if enabled.
h2 Information We Collect
p This website uses the web analysis service software Matomo (www.matomo.org), a service of the provider InnoCraft Ltd., 150 Willis St, 6011 Wellington, New Zealand, (Matomo) to collect and store data based on our legitimate interest in the statistical analysis of the user behavior for optimization and marketing purposes as per article 6(1) lit. f GDPR.
p This data can be used to create and evaluate pseudonymized usage profiles for the same purpose. For this purpose, cookies may be used. The data collected with the Matomo technology (including its pseudonymized IP address) is processed on servers, which are hosted by Contabo GmbH.
p Contabo GmbH does not have access to the servers nor the data that is processed (§ 6 Server-administration, Contabo's Terms & Conditions). For more information visit&nbsp;
a.highlighted(href="https://contabo.com/agb.html") Contabo's Terms & Conditions.
p The information generated by the cookie in the pseudonymous user profile will not be used to personally identify the visitor to this website and will not be combined with personal data about the bearer of the pseudonym.
h2 Proccessed Data
p The following information is processed when visiting webgems:
ol(type="I")
li
strong Cookie Information.&nbsp;
| Webgems uses cookies on this website that are necessary for Matomo's analytics. The Websites and Services we provide, do not include cookies and similar tracking technologies of third parties. For more details about how we use these technologies, please see our&nbsp;
nuxt-link.highlighted(to="cookie-policy") Cookie Policy.
li
strong Log data.&nbsp;
| As with most websites and technology services delivered over the Internet, our servers automatically collect information when you access or use our Websites or Services and record it in log files. This log data may include the Internet Protocol (IP) address, the address of the web page visited before using the Website or Services, browser type and settings, the date and time the Services were used, information about browser configuration and plugins, language preferences and cookie data.
li
strong Device information.&nbsp;
| Matomo collects information about devices accessing the Services, including type of device, what operating system is used, device settings, application IDs, unique device identifiers and crash data. Whether we collect some or all of this Other Information often depends on the type of device used and its settings.
li
strong IP information.&nbsp;
| Your IP address will be pseudonymized by 2 byte(s) before any further processing of your data, e.g. 192.168.xxx.xxx.
li
strong Location information.&nbsp;
| Matomo uses your pseudonymized IP address in order to approximate determine your location by country.
h2 Data Retention
p All data that is being processed, will be automatically deleted after 180 days.
h2 How We Disclose and Share Information
p The analytics for this project will not be shared with third parties at any given point. Long time contributors of the project may have access to view analytics interface while not being able to alter the data itself.
h2 Opt Out From Tracking
p If you do not agree to this data from your visit being stored and evaluated, then you can object to the storage and use at any time by clicking below. In this case, an opt-out cookie will be placed in your browser, which means that Matomo does not collect any session data. Please note that the complete deletion of your cookies means that the opt-out cookie will be deleted too and you may need to activate it again.
OptOutIframe
h2 Re-Enable Cookie Banner
p Click&nbsp;
a.highlighted(@click.preventDefault="restoreCookieNotice") here!
h2 Contact Us
p For any data privacy related enquiries, such as requesting a copy of your information or complete deletion, please contact us via mail at&nbsp;
a(href="mailto:dataprivacy@webgems.io") dataprivacy@webgems.io
</template>
<script>
import OptOutIframe from '@/components/OptOutIframe.vue'
export default {
components: {
OptOutIframe,
},
data() {
return {
}
},
methods: {
restoreCookieNotice() {
if(typeof(Storage) !== 'undefined'){
localStorage.removeItem('cookieNoticeHidden')
location.reload()
}
},
checkCookieNoticeRestore() {
if(typeof(Storage) !== 'undefined'){
let cookieNotice = localStorage.getItem('cookieNoticeRestore')
if(cookieNotice === true) {
this.showRestore = true
console.log('as', this.showRestore)
} else {
this.showRestore = false
}
}
},
},
}
</script>
<style lang="scss" scoped>
h2 {
margin-top: 2rem;
margin-bottom: 0.5rem;
}
p {
margin-top: 0;
}
</style>

View File

@@ -8,21 +8,14 @@
template(v-for='resource in resources' )
Card(:resource='resource' :key='resource.title' :createCopyUrl="createCopyUrl" :isActive='activeCard === resource.cleanTitle')
p(v-else) No results
transition(name="fade-card")
table(v-if="!areCardsVisible && showCards")
template(v-if="resources.length")
template(v-for='resource in resources' )
TableRow(:resource='resource' :key='resource.title' :createCopyUrl="createCopyUrl" :isActive='activeCard === resource.cleanTitle')
p(v-else) No results
</template>
<script>
import Card from '../components/Card'
import TableRow from '../components/TableRow'
import * as R from 'ramda'
export default {
components: { Card, TableRow },
components: { Card },
data() {
return {
activeCard: '',
@@ -41,14 +34,19 @@ export default {
watch: {
$route(updatedChanges) {
clearTimeout(this.debounceID)
this.debounceID = setTimeout(() => {
const updateSearch = () => {
const keywords = updatedChanges.query.keywords
const tags = updatedChanges.query.tags
this.searchInput = {
keywords: keywords && R.split(',', keywords),
tags: tags && R.split(',', tags),
}
}, 500)
}
if (updatedChanges.query.enter !== 'true')
this.debounceID = setTimeout(updateSearch, 300)
else
updateSearch()
},
searchInput(searchInput) {
this.resources = this.$store.getters['data/findBySearchInputs'](searchInput.keywords, searchInput.tags)
@@ -56,6 +54,13 @@ export default {
},
mounted() {
this.showTitle = true
const keywords = this.$route.query.keywords
const tags = this.$route.query.tags
this.searchInput = {
keywords: keywords && R.split(',', keywords),
tags: tags && R.split(',', tags),
}
},
methods: {
async createCopyUrl(resource) {

View File

@@ -1,34 +0,0 @@
import Vue from 'vue'
import VueMatomo from 'vue-matomo'
export default ({
app,
}) => {
Vue.use(VueMatomo, {
router: app.router,
// Configure your matomo server and site by providing
host: 'https://stats.lost.services',
siteId: 1,
// Changes the default .js and .php endpoint's filename
// Default: 'piwik'
trackerFileName: 'matomo',
// Enables link tracking on regular links. Note that this won't
// work for routing links (ie. internal Vue router links)
// Default: true
enableLinkTracking: true,
// Require consent before sending tracking information to matomo
// Default: false
requireConsent: false,
// Whether to track the initial page view
// Default: true
trackInitialView: true,
// Whether or not to log debug information
// Default: false
debug: false,
})
}

View File

@@ -23,7 +23,7 @@
{
"title": "The web accessibility basics",
"desc": "The absolute web accessibility basics every web developer should know about.",
"url": "https://www.marcozehe.de/2015/12/14/the-web-accessibility-basics/",
"url": "https://www.marcozehe.de/articles/2015-12-14-the-web-accessibility-basics/",
"tags": ["blog", "video", "semantics", "basics"]
}
]

View File

@@ -0,0 +1,113 @@
{
"title": "Content Creators",
"slug": "/content-creators",
"resources": [
{
"title": "Traversy Media",
"desc": "Traversy Media is owned by Brad Traversy. The channel has a lot of great tutorials to learn full web development and coding. It features online web development and programming tutorials for the latest web technologies including Node.js, Angular 2, React.js, PHP, Rails, HTML, CSS, and more.",
"url": "https://www.youtube.com/user/TechGuyWeb",
"tags": [
"beginner",
"fullstack",
"frontend",
"javascript",
"mongodb",
"node",
"php",
"wordpress",
"tutorial",
"programming"
]
},
{
"title": "The Net Ninja",
"desc": "The Net Ninja is a channel to strengthen your web skills. It has many tutorials for designers and developers.",
"url": "https://www.youtube.com/channel/UCW5YeuERMmlnqo4oq8vwUpg",
"tags": ["javascript", "beginner", "css", "tutorial", "programming"]
},
{
"title": "The Futur",
"desc": "The mission of The Futur is to be the future of online education for creative entrepreneurs. It features design content on identity design and branding, user experience, logos and lettering, typography, the business of design, and plenty of case studies.",
"url": "https://www.youtube.com/channel/UC-b3c7kxa5vU-bnmaROgvog",
"tags": [
"marketing",
"design",
"logo",
"tutorial",
"business",
"ui",
"ux",
"webdesign"
]
},
{
"title": "Tutvid",
"desc": "Nathaniel Dodsons Tutvid is a site to learn advanced graphic design skills, with tutorials in Adobe Photoshop and Adobe Illustrator. Tutvid also includes tutorials to master animation and video with Adobe Premiere Pro, Adobe After Effects, and Adobe Lightroom. Tutvids “Daily Photoshop Tutorials” playlist covers tools, features, and tricks.",
"url": "https://www.youtube.com/user/tutvid",
"tags": [
"photoshop",
"tutorial",
"videoediting",
"webdesign",
"programming"
]
},
{
"title": "CharliMarieTV",
"desc": "Charli Marie TV is a channel from Charli Marie, a web and graphic designer in London. Videos are posted weekly about tools, projects, and concepts. There are also weekly videos about her life as a designer.",
"url": "https://www.youtube.com/user/charlimarieTV",
"tags": ["design", "webdesign", "tutorial"]
},
{
"title": "Funfunfunction",
"desc": "Fun Fun Function is like a show about programming. Not a database of tutorials and courses, a show. A regular show with an different topic every week, with an entertaining host that explains things well, with the purpose of keeping you curious and excited about the programming craft. Basically, the purpose of Fun Fun Function is to keep programming fun.",
"url": "https://www.youtube.com/channel/UCO1cgjhGzsSYb1rsB4bFe4Q",
"tags": ["machinelearning", "testing", "live"]
},
{
"title": "Getify",
"desc": "Getify writes about JavaScript, finding new and useful ways to teach it to more learners, and exploring and researching JavaScript through OSS coding.",
"url": "https://twitter.com/getify",
"tags": ["tips", "programming", "javascript"]
},
{
"title": "Steve Schoger",
"desc": "Steve Schoger is a visual designer from Canada. Many people know him as the guy who shares design tips on Twitter or refactors UIs on YouTube.",
"url": "https://www.youtube.com/channel/UCxqiDtkXtOCNJdckODHk9YA",
"tags": ["tips", "webdesign", "ui"]
},
{
"title": "DevTips",
"desc": "DevTips is a weekly show for YOU who want to be inspired 👍 and learn 🖖 about programming. Hosted by David and MPJ - two notorious bug generators 💖 and teachers 🤗. Exploring code together and learning programming along the way - yay!",
"url": "https://www.youtube.com/user/DevTipsForDesigners",
"tags": ["tips", "webdesign", "ui", "tutorial", "programming"]
},
{
"title": "LevelUpTuts",
"desc": "840+ free video tutorials created, recorded, edited, published and maintained by Scott Tolinski.",
"url": "https://www.youtube.com/user/LevelUpTuts",
"tags": ["tips", "webdesign", "ui", "tutorial", "programming"]
},
{
"title": "Wes Bos",
"desc": "HTML, CSS, JavaScript and WordPress web development tutorials!",
"url": "https://www.youtube.com/user/wesbos",
"tags": [
"tips",
"webdesign",
"ui",
"tutorial",
"programming",
"javascript",
"wordpress"
]
},
{
"title": "Mayuko",
"desc": "Mayuko is a Senior iOS Software Engineer from San Diego. She makes Youtube videos about what life is like as a Software Engineer living and working in Silicon Valley. She aims to make the tech industry feel more accessible to those entering the industry.",
"url": "https://www.youtube.com/user/hellomayuko",
"categories": "Life experiences sharing",
"tags": ["vlog", "techadvice", "programming"]
}
]
}

View File

@@ -35,7 +35,7 @@
{
"title": "30 Seconds of Code",
"desc": "A curated collection of useful CSS snippets you can understand in 30 seconds or less.",
"url": "https://30-seconds.github.io/30-seconds-of-css/",
"url": "https://www.30secondsofcode.org/css/",
"tags": ["tips", "tricks", "collection"]
},
{
@@ -139,6 +139,12 @@
"desc": "This CSS clip-path maker helps you understand the clip-path property and all the cool things you can do with it.",
"url": "https://bennettfeely.com/clippy/",
"tags": ["interactive", "visual", "shapes"]
},
{
"title": "SVG to CSS Base64 background-image",
"desc": "This tool will convert your SVG code to CSS background-image compatible Base64 image.",
"url": "https://yoksel.github.io/url-encoder/",
"tags": ["convert", "generator", "icons"]
}
]
}
}

View File

@@ -43,6 +43,12 @@
"desc": "The five best design links, every day.",
"url": "https://sidebar.io/",
"tags": ["design", "reading", "aggregator"]
},
{
"title": "daily.dev",
"desc": "Daily delivers the best programming news every new tab. It is a browser extension that boosts your professional growth.",
"url": "https://daily.dev/",
"tags": ["development", "reading", "aggregator", "discover"]
}
]
}
}

View File

@@ -14,6 +14,12 @@
"url": "https://undraw.co",
"tags": ["illustration", "svg", "ui"]
},
{
"title": "Dribbble",
"desc": "Gain inspiration and feedback. Basically social media for designers",
"url": "https://dribbble.com/",
"tags": ["career", "ux", "ui"]
},
{
"title": "Practical UI tips",
"desc": "7 Tips to boost your UI design.",

View File

@@ -55,6 +55,39 @@
"desc": "I write tutorials for JavaScript and Web Developers.",
"url": "https://flaviocopes.com/",
"tags": ["mentor", "books", "tutorial"]
},
{
"title": "Interneting is hard",
"desc": "Friendly web development tutorials for complete beginners in HTML and CSS",
"url": "https://www.internetingishard.com/",
"tags": ["html", "semantic", "css", "typography"]
},
{
"title": "Periodic Table of Web APIs",
"desc": "A visual map of almost all browser APIs with links to tutorials and documentation, color-coded by browser support",
"url": "https://wwwperiodictable.surge.sh/",
"tags": [
"resources",
"aggregator",
"fundamentals",
"web",
"visual",
"browser",
"frontend",
"overview",
"guides",
"tutorial",
"compatibility",
"lists",
"obselete",
"reference",
"specification",
"standards",
"comprehensive",
"advanced",
"guides",
"links"
]
}
]
}

View File

@@ -5,7 +5,7 @@
{
"title": "freeCodeCamp curriculum",
"desc": "We have thousands of coding lessons to help you improve your skills. You can earn each certification by completing its 5 final projects. And yes - all of this is 100% free, thanks to the thousands of campers who donate to our nonprofit. If you are new to coding, we recommend you start at the beginning.",
"url": "https://learn.freecodecamp.org",
"url": "https://www.freecodecamp.org/learn/",
"tags": ["design", "javascript", "courses", "security", "interview"]
},
{

View File

@@ -29,7 +29,7 @@
{
"title": "Developer Roadmap",
"desc": "Below you find a set of charts demonstrating the paths that you can take and the technologies that you would want to adopt in order to become a frontend, backend or a devops.",
"url": "https://github.com/kamranahmedse/developer-roadmap/blob/master/readme.md",
"url": "https://github.com/kamranahmedse/developer-roadmap/blob/master/README.md",
"tags": ["roadmaps", "visual", "graphics", "connections"]
},
{
@@ -67,6 +67,18 @@
"desc": "Take a whirlwind tour of your next favorite language. Community-driven!",
"url": "https://learnxinyminutes.com/",
"tags": ["languages", "quick", "resources", "basics"]
},
{
"title": "webgems.io",
"desc": "It's a great collection for learning materials for all sorts of programming topics.",
"url": "https://webgems.io",
"tags": ["quick", "resources", "basics", "search", "aggregator"]
},
{
"title": "Codesignal",
"desc": "Online programming tournaments to practice your skills. Play with random people, your friends, or in the singleplayer arcade mode.",
"url": "https://codesignal.com/developers/",
"tags": ["game", "practice", "multiplayer"]
}
]
}

View File

@@ -14,6 +14,8 @@ import server from './server'
import utility from './utility'
import icons from './icons'
import accessibility from './accessibility'
import rust from './rust'
import contentCreators from './content-creators'
const sortByTitle = ({ title: titleA }, { title: titleB }) => {
if(titleA < titleB) return -1
@@ -38,4 +40,6 @@ export default [
utility,
icons,
accessibility,
rust,
contentCreators,
].sort(sortByTitle)

View File

@@ -40,10 +40,16 @@
},
{
"title": "YDKJS",
"desc": "This is a free series of books diving deep into the core mechanisms of the JavaScript language. The first edition of the series is now complete.",
"desc": "This is a free series of books diving deep into the core mechanisms of the JavaScript language. The first edition of the series is now complete, and the first two chapters of the second edition have already been published.",
"url": "https://github.com/getify/You-Dont-Know-JS",
"tags": ["online", "comprehensive", "courses"]
},
{
"title": "Deep JavaScript",
"desc": "A high-end book by Dr. Axel Rauschmayer which answers some of the questions that experienced JS developers might still encounter through their career.",
"url": "https://exploringjs.com/deep-js/",
"tags": ["book", "basics", "advanced"]
},
{
"title": "Eloquent Javascript 3rd Edition",
"desc": "This is a book about javascript, programming, and the wonders of the digital. You can read it online or get a paperback copy of it.",
@@ -92,6 +98,12 @@
"url": "https://learnjavascript.online/",
"tags": ["flashcards", "challenges", "fundamentals"]
},
{
"title": "Loupe",
"desc": "Loupe is a little visualisation to help you understand how JavaScript's call stack/event loop/callback queue interact with each other.",
"url": "http://latentflip.com/loupe/",
"tags": ["event", "queue", "visualizer"]
},
{
"title": "Code to go",
"desc": "Find up to date snippets for common JavaScript use cases",
@@ -111,4 +123,4 @@
"tags": ["email", "solutions", "detailed"]
}
]
}
}

View File

@@ -67,6 +67,12 @@
"desc": "134 Slides to help fix your code. Performance and testing are just one aspect of code, to really be successful your code needs to be readable, maintainable and generally easier to comprehend and work with.",
"url": "https://www.slideshare.net/rdohms/your-code-sucks-lets-fix-it-15471808",
"tags": ["slides", "readability", "rules"]
},
{
"title": "Clean Code PHP",
"desc": "Software engineering principles, from Robert C. Martin's book Clean Code, adapted for PHP.",
"url": "https://github.com/jupeter/clean-code-php",
"tags": ["book", "guide", "rules", "standards"]
}
]
}
}

114
resources/rust.json Normal file
View File

@@ -0,0 +1,114 @@
{
"title": "Rust",
"slug": "/rust",
"resources": [
{
"title": "The Rust Book",
"desc": "The Rust Programming Language book will give you an overview of the language from first principles.",
"url": "https://doc.rust-lang.org/book/",
"tags": ["official", "reference", "guide"]
},
{
"title": "Rustlings",
"desc": "Small exercises to get you used to reading and writing Rust code.",
"url": "https://github.com/rust-lang/rustlings/",
"tags": ["official", "excercises", "guide"]
},
{
"title": "Rust Playground",
"desc": "An online playground to try out rust.",
"url": "https://play.rust-lang.org/",
"tags": ["official", "playground"]
},
{
"title": "Are we web yet?",
"desc": "List of resources for web development in Rust",
"url": "https://www.arewewebyet.org/",
"tags": ["official", "web"]
},
{
"title": "Rust and WebAssembly",
"desc": "A small book that describes how to use Rust and WebAssembly together.",
"url": "https://rustwasm.github.io/docs/book/",
"tags": ["official", "web", "webassembly"]
},
{
"title": "Rocket",
"desc": "Rocket is a web framework for Rust that makes it simple to write fast, secure web applications without sacrificing flexibility, usability, or type safety.",
"url": "https://rocket.rs/v0.4/guide/",
"tags": ["framework", "web", "application"]
},
{
"title": "Actix",
"desc": "Rust's powerful actor system and most fun web framework",
"url": "https://actix.rs/",
"tags": ["framework", "web", "application"]
},
{
"title": "Rust 101",
"desc": "A small, interactive and hands-on tutorial into the rust language.",
"url": "https://www.ralfj.de/projects/rust-101/main.html",
"tags": ["guide", "tutorial", "basics"]
},
{
"title": "Warp",
"desc": "A super-easy, composable, web server framework for warp speeds.",
"url": "https://github.com/seanmonstar/warp",
"tags": ["web", "framework", "application"]
},
{
"title": "Rust by Example",
"desc": "Rust by Example (RBE) is a collection of runnable examples that illustrate various Rust concepts and standard libraries.",
"url": "https://doc.rust-lang.org/stable/rust-by-example/index.html",
"tags": ["official", "guide", "tutorial"]
},
{
"title": "Yew",
"desc": "A modern Rust framework for creating multi-threaded front-end web apps with WebAssembly.",
"url": "https://yew.rs/docs/en/intro/",
"tags": ["web", "webassembly", "frontend"]
},
{
"title": "Seed",
"desc": "Rust framework for creating fast and reliable web apps",
"url": "https://seed-rs.org/",
"tags": ["web", "webassembly", "frontend"]
},
{
"title": "Rust blog",
"desc": "This is the main Rust blog. The core team uses this blog to announce big developments in the world of Rust.",
"url": "https://blog.rust-lang.org/",
"tags": ["blog", "official", "history", "features"]
},
{
"title": "The Embedded Rust Book",
"desc": "An introductory book about using the Rust Programming Language on \"Bare Metal\" embedded systems, such as Microcontrollers.",
"url": "https://rust-embedded.github.io/book/",
"tags": ["microcontrollers", "embedded", "guide"]
},
{
"title": "Rusoto",
"desc": "An AWS SDK for rust.",
"url": "https://www.rusoto.org/",
"tags": ["aws", "servers", "infrastructure"]
},
{
"title": "Tokio",
"desc": "An asynchronous runtime for the Rust programming language. It provides the building blocks needed for writing network applications.",
"url": "https://tokio.rs/",
"tags": ["networking", "async", "server"]
},
{
"title": "Juniper",
"desc": "Juniper is a GraphQL server library for Rust. Build type-safe and fast API servers with minimal boilerplate and configuration.",
"url": "https://graphql-rust.github.io/juniper/current/",
"tags": ["web", "application", "graphql", "api"]
},
{
"title": "Diesel",
"desc": "Diesel is a Safe, Extensible ORM and Query Builder for Rust",
"url": "https://diesel.rs/",
"tags": ["web", "database", "orm"]
}
]
}

View File

@@ -183,10 +183,16 @@
"tags": ["development", "ide","editor", "share", "testing"]
},
{
"title": "Postwoman.io",
"desc": "The Postwoman API request builder helps you create your requests faster, saving you precious time on your development.",
"url": "https://Postwoman.io/",
"title": "Hoppscotch",
"desc": "The Hoppscotch API request builder helps you create your requests faster, saving you precious time on your development.",
"url": "https://hoppscotch.io/",
"tags": ["testing","api"]
},
{
"title": "NoPaste",
"desc": "A privacy-focused service where you can paste and share any piece of code. Similar to Pastebin, except the service stores nothing",
"url": "https://nopaste.ml/",
"tags": ["paste", "url", "interactive", "share", "privacy"]
}
]
}

View File

@@ -21,7 +21,7 @@ export const getters = {
findCategory: state => categoryTitle => {
// equalsCategoryTitle :: Category -> Bool
const equalsCategoryTitle = R.compose(
R.equals(cleanString(categoryTitle)), cleanString, R.prop('title')
R.equals(cleanString(categoryTitle)), R.replace(/ /g, '-') ,cleanString, R.prop('title'),
)
// findCategory :: [Category] -> Category
const findCategory = R.find(equalsCategoryTitle)
@@ -31,8 +31,8 @@ export const getters = {
const cleaned = R.map(cleanString, names)
// [Resource] -> [Resource]
const appearsInResource = R.filter(({ cleanTitle, url, desc }) =>
partiallyIncludesElOf([cleanTitle, url, desc], cleaned)
const appearsInResource = R.filter(({ cleanTitle, url, desc }) =>
partiallyIncludesElOf([cleanTitle, url, desc], cleaned),
)
// [Category] -> [Resource]
const getDesiredResources = R.compose(appearsInResource, getAllResources)
@@ -78,6 +78,6 @@ const compareTitles = (x, y) => {
}
}
const equalResources = (a, b) =>
const equalResources = (a, b) =>
a.title === b.title &&
a.cleanTitle == b.cleanTitle

12387
yarn.lock Normal file

File diff suppressed because it is too large Load Diff