diff --git a/README.md b/README.md index 40ef3e9..51e65b3 100644 --- a/README.md +++ b/README.md @@ -1,70 +1,68 @@ # NASG - not another static generator... -## Near full circle: from static to full dynamic to semi-static +Nearly 20 years ago I did my very first website with a thing called Microsoft FrontPage. I loved it. Times changed, and I wrote a CMS in PHP, first with flat files, then with MySQL, then moved on to WordPress. -Nearly 20 years ago I did my very first website with a thing called Microsoft FrontPage. I was static, but assembled from footer, nav, etc. html parts by FrontPage, then uploaded to a free webhost, and I was very happy with it: it was extremely simple to edit and to maintain. +Now I'm back on a static generator. I love it. -Years passed and first I wrote a CMS that used text files as storage, based on a PHP library that stored serialized objects in text files - basically JSON, before JSON even existed. Then I moved to MySQL, then dropped the whole thing for WordPress, which I loved, up until Gutenberg was announced, at which point I realized how nastily I tinkered and altered my WordPress already to use it with Markdown, to make image and handling a tiny bit better, etc. +**WARNING: this is a personal project, scratching my itches. No warranties. If you want to deploy it on your own, feel free to, but not all the things are documented.** -So I dropped it and make a static generator, only to realize, there are things I can't make static. At that point - 2017 -, these were: +## ## What does it do -- search -- proper redirect and gone entry handling (you can't set HTTP headers from a HTML file) -- receiving webmentions +- content is structured in folders +- content files are YAML frontmatter + Multimarkdown +- EXIF from images are read via [exiftool](https://www.sno.phy.queensu.ca/~phil/exiftool/) _this is an external dependency_ +- Markdown is converted with [pandoc](https://pandoc.org/) _this is an external dependency_ -Because I wanted to learn Python, the static generator is coded in Python, so I decided to run a Python web service with Sanic. It took me 3 iterations to realize, I'm doing it wrong, because the one and only thing that is available on nearly any webhost - think of plain old Apache - is PHP. +How it works -So the abomination I'm doing right now is to generate some near-static PHP files from the Python code which handles: +- pulls in webmentions from https://webmention.io and stores them in .md files next to the index.md of a post (see later) as: `[unix epoch]-[slugified source url].md` +- pulls in micropub from the queue received by the micropub receiver PHP (see later) +- finds 'redirect' files: + - anything with a `.url` extension + - content is the URL to redirect to + - filename without extension is the slug to redirect from + - for `HTTP 302` +- finds 'gone' files: -- search - still with SQLite, but due to PHP versions, with FTS4 instead of FTS5; populated from Python, read by PHP -- gone (HTTP 410) and redirect (HTTP 301) + - anything with a `.del` extension + - filename without extension is the slug deleted + - for `HTTP 410` +- finds content: -As for webmentions, as much as I try avoiding external dependencies, I came to realize a very simple fact: webmentions are external as well. So I started using [webmention.io](http://webmention.io) to receive them and query it on build time. - -## Now, about that the generator itself - -The content is [StriclYAML](https://github.com/crdoconnor/strictyaml) + [MultiMarkdown](http://fletcherpenney.net/multimarkdown/features/). Except [exiftool](https://www.sno.phy.queensu.ca/~phil/exiftool/), there are no non-python dependencies any more, but `exiftool` is the only thing that parses lends data for photos. - -Python libraries used: - -- [arrow](https://arrow.readthedocs.io/en/latest/) -- [bleach](https://github.com/mozilla/bleach) -- [emoji](https://github.com/carpedm20/emoji/) -- [feedgen](https://github.com/lkiesow/python-feedgen) -- [Jinja2](http://jinja.pocoo.org/) -- [langdetect](https://github.com/Mimino666/langdetect) -- [Markdown](https://github.com/Python-Markdown/markdown) -- [markdown-urlize](https://github.com/r0wb0t/markdown-urlize) -- [Pygments](http://pygments.org/) -- [python-frontmatter](https://github.com/eyeseast/python-frontmatter) -- [requests](http://docs.python-requests.org/en/master/) -- [unicode-slugify](https://github.com/mozilla/unicode-slugify) -- [Wand](http://docs.wand-py.org/en/0.4.4/) -- ... and their dependencies - -Most of the processing relies on the structuring of my data: - -- whatever is not a directory in the root folder of the contents will be copied as is -- directories mean category -- 1 sub-directory per entry within the category, named as the post slug -- index.md as main file -- timestamp-sanitizedurl.md for webmentions and comments -- if there is a .jpg, named the same as the post directory name, the post is a photo -- all markdown image entries are replaced with `
` with added visible exif data if they math the criterias that they are my photos, namely they match a regular expression in their exif Copyright or Artist field - this is produced by my camera -- all images will be downsized and, if matched as photo, watermarked on build + - all `index.md` files + - corresponding comment `.md` file next to it + - the parent directory name is the post slug + - finds all images in the same directory (`.jpg`, `.png`, `.gif`) + - reads EXIF data into a hidden, `.[filename].json` file next to the original file + - generates downsized and watermarked images into the `build/post slug` directory + - if a `.jpg` if found with the same slug as the parent dir, the post will be a special photo post + - anything else in the same directory will be copies to `build/post slug` +- send webmentions via https://telegraph.p3k.io/ ``` / -├── about.html +├── about.html -> will be copied ├── category-1 -│   ├── article-1 -│   │   └── index.md -│   │   └── extra-file.mp4 -│   │   └── 1509233601-domaincomentrytitle.md -│   ├── fancy-photo -│   │   └── index.md -│   │   └── fancy-photo.jpg +│   ├── article-1 -> slug +│   │   └── index.md -> content file +│   │   └── extra-file.mp4 -> will be copied +│   │   └── 1509233601-domaincomentrytitle.md -> comment +│   ├── fancy-photo -> slug of photo post +│   │   └── index.md -> content +│   │   └── fancy-photo.jpg -> to downsize, watermark, get EXIF ``` -Mostly that's all. \ No newline at end of file + + +Special features: + +- complete `microformats2` and schema.org markup in templates +- has light/dark theme, dark by default, but supports experimental prefers-color-scheme media query +- generates 3 special PHP files: + - search - uses and SQLite DB which is populated by Python on build + - fallback - 404 handler to do redirects/gones, gets populated with an array of both + - micropub - a micropub endpoint that accepts micropub content and puts the incoming payload into a json file, nothing else + +## Why GPL + +Because I want believe. \ No newline at end of file diff --git a/assets/icomoon.zip b/assets/icomoon.zip deleted file mode 100644 index b296cf4..0000000 Binary files a/assets/icomoon.zip and /dev/null differ diff --git a/assets/icomoon/Read Me.txt b/assets/icomoon/Read Me.txt new file mode 100644 index 0000000..bf02815 --- /dev/null +++ b/assets/icomoon/Read Me.txt @@ -0,0 +1,15 @@ +The *SVG* folder contains the icons you selected as separate SVG files. + +If you prefer using PNGs, PDFs, or CSS sprites, refer to the Preferences panel of the IcoMoon app before downloading your zip pack. + +*demo.html* lists the icons that you selected. To insert your icons as inline SVGs (with the element), copy the element (that contains symbol definitions) from the source of the demo.html file, below your own HTML's tag. After copying this SVG, you can reference your glyphs like the following: + + + +You can get this code from the SVG tab of the IcoMoon app, or by referring to the source of the demo.html file. To see how you can change the color/size of your icons using CSS, refer to the example provided in the *style.css* file. + +If you prefer to reference an external SVG (containing ) instead of embedding it in HTML, you will need to use *svgxuse.js* in order to support IE 9+. In browsers that don't support referencing external SVGs (such as IE 9), this polyfill sends one HTTP request to fetch and cache all symbol definitions. See *demo-external-svg.html* for this approach. This demo references the *symbol-defs.svg* file and uses the aforementioned polyfill. Note that it must be hosted on a web server to work +properly. Learn more about this polyfill here: https://github.com/Keyamoon/svgxuse + +You can import *selection.json* back to the IcoMoon app using the *Import Icons* button (or via Main Menu → Manage Projects) to retrieve your icon selection. + diff --git a/assets/icomoon/SVG/aperture.svg b/assets/icomoon/SVG/aperture.svg new file mode 100644 index 0000000..b9d9b5a --- /dev/null +++ b/assets/icomoon/SVG/aperture.svg @@ -0,0 +1,5 @@ + + +aperture + + diff --git a/assets/icomoon/SVG/article.svg b/assets/icomoon/SVG/article.svg new file mode 100644 index 0000000..d968b69 --- /dev/null +++ b/assets/icomoon/SVG/article.svg @@ -0,0 +1,5 @@ + + +article + + diff --git a/assets/icomoon/SVG/bookmarks.svg b/assets/icomoon/SVG/bookmarks.svg new file mode 100644 index 0000000..de68fa0 --- /dev/null +++ b/assets/icomoon/SVG/bookmarks.svg @@ -0,0 +1,5 @@ + + +bookmarks + + diff --git a/assets/icomoon/SVG/camera.svg b/assets/icomoon/SVG/camera.svg new file mode 100644 index 0000000..a3262ad --- /dev/null +++ b/assets/icomoon/SVG/camera.svg @@ -0,0 +1,5 @@ + + +camera + + diff --git a/assets/icomoon/SVG/clock.svg b/assets/icomoon/SVG/clock.svg new file mode 100644 index 0000000..6a99c49 --- /dev/null +++ b/assets/icomoon/SVG/clock.svg @@ -0,0 +1,5 @@ + + +clock + + diff --git a/assets/icomoon/SVG/contrast.svg b/assets/icomoon/SVG/contrast.svg new file mode 100644 index 0000000..58ed281 --- /dev/null +++ b/assets/icomoon/SVG/contrast.svg @@ -0,0 +1,5 @@ + + +contrast + + diff --git a/assets/icomoon/SVG/deviantart.svg b/assets/icomoon/SVG/deviantart.svg new file mode 100644 index 0000000..1401d31 --- /dev/null +++ b/assets/icomoon/SVG/deviantart.svg @@ -0,0 +1,5 @@ + + +deviantart + + diff --git a/assets/icomoon/SVG/feed.svg b/assets/icomoon/SVG/feed.svg new file mode 100644 index 0000000..1570f6d --- /dev/null +++ b/assets/icomoon/SVG/feed.svg @@ -0,0 +1,5 @@ + + +feed + + diff --git a/assets/icomoon/SVG/flickr.svg b/assets/icomoon/SVG/flickr.svg new file mode 100644 index 0000000..9f1f140 --- /dev/null +++ b/assets/icomoon/SVG/flickr.svg @@ -0,0 +1,5 @@ + + +flickr + + diff --git a/assets/icomoon/SVG/focallength.svg b/assets/icomoon/SVG/focallength.svg new file mode 100644 index 0000000..c79253b --- /dev/null +++ b/assets/icomoon/SVG/focallength.svg @@ -0,0 +1,5 @@ + + +focallength + + diff --git a/assets/icomoon/SVG/github.svg b/assets/icomoon/SVG/github.svg new file mode 100644 index 0000000..271b53d --- /dev/null +++ b/assets/icomoon/SVG/github.svg @@ -0,0 +1,5 @@ + + +github + + diff --git a/assets/icomoon/SVG/hangouts.svg b/assets/icomoon/SVG/hangouts.svg new file mode 100644 index 0000000..2ab2425 --- /dev/null +++ b/assets/icomoon/SVG/hangouts.svg @@ -0,0 +1,5 @@ + + +hangouts + + diff --git a/assets/icomoon/SVG/home.svg b/assets/icomoon/SVG/home.svg new file mode 100644 index 0000000..78b9c92 --- /dev/null +++ b/assets/icomoon/SVG/home.svg @@ -0,0 +1,5 @@ + + +home + + diff --git a/assets/icomoon/SVG/icq.svg b/assets/icomoon/SVG/icq.svg new file mode 100644 index 0000000..13f2d9d --- /dev/null +++ b/assets/icomoon/SVG/icq.svg @@ -0,0 +1,5 @@ + + +icq + + diff --git a/assets/icomoon/SVG/instagram.svg b/assets/icomoon/SVG/instagram.svg new file mode 100644 index 0000000..bc394db --- /dev/null +++ b/assets/icomoon/SVG/instagram.svg @@ -0,0 +1,5 @@ + + +instagram + + diff --git a/assets/icomoon/SVG/journal.svg b/assets/icomoon/SVG/journal.svg new file mode 100644 index 0000000..25d7908 --- /dev/null +++ b/assets/icomoon/SVG/journal.svg @@ -0,0 +1,5 @@ + + +journal + + diff --git a/assets/icomoon/SVG/lastfm.svg b/assets/icomoon/SVG/lastfm.svg new file mode 100644 index 0000000..ccca737 --- /dev/null +++ b/assets/icomoon/SVG/lastfm.svg @@ -0,0 +1,5 @@ + + +lastfm + + diff --git a/assets/icomoon/SVG/lens.svg b/assets/icomoon/SVG/lens.svg new file mode 100644 index 0000000..7ca7b16 --- /dev/null +++ b/assets/icomoon/SVG/lens.svg @@ -0,0 +1,5 @@ + + +lens + + diff --git a/assets/icomoon/SVG/link.svg b/assets/icomoon/SVG/link.svg new file mode 100644 index 0000000..b66881e --- /dev/null +++ b/assets/icomoon/SVG/link.svg @@ -0,0 +1,6 @@ + + +link + + + diff --git a/assets/icomoon/SVG/linkedin.svg b/assets/icomoon/SVG/linkedin.svg new file mode 100644 index 0000000..e5214bd --- /dev/null +++ b/assets/icomoon/SVG/linkedin.svg @@ -0,0 +1,5 @@ + + +linkedin + + diff --git a/assets/icomoon/SVG/lock.svg b/assets/icomoon/SVG/lock.svg new file mode 100644 index 0000000..59b1bc3 --- /dev/null +++ b/assets/icomoon/SVG/lock.svg @@ -0,0 +1,5 @@ + + +lock + + diff --git a/assets/icomoon/SVG/mail.svg b/assets/icomoon/SVG/mail.svg new file mode 100644 index 0000000..4c4e724 --- /dev/null +++ b/assets/icomoon/SVG/mail.svg @@ -0,0 +1,5 @@ + + +mail + + diff --git a/assets/icomoon/SVG/monzo.svg b/assets/icomoon/SVG/monzo.svg new file mode 100644 index 0000000..a65bf13 --- /dev/null +++ b/assets/icomoon/SVG/monzo.svg @@ -0,0 +1,5 @@ + + +monzo + + diff --git a/assets/icomoon/SVG/note.svg b/assets/icomoon/SVG/note.svg new file mode 100644 index 0000000..a24018b --- /dev/null +++ b/assets/icomoon/SVG/note.svg @@ -0,0 +1,8 @@ + + +note + + + + + diff --git a/assets/icomoon/SVG/paypal.svg b/assets/icomoon/SVG/paypal.svg new file mode 100644 index 0000000..1fde0f8 --- /dev/null +++ b/assets/icomoon/SVG/paypal.svg @@ -0,0 +1,5 @@ + + +paypal + + diff --git a/assets/icomoon/SVG/photo.svg b/assets/icomoon/SVG/photo.svg new file mode 100644 index 0000000..e964caa --- /dev/null +++ b/assets/icomoon/SVG/photo.svg @@ -0,0 +1,7 @@ + + +photo + + + + diff --git a/assets/icomoon/SVG/reply.svg b/assets/icomoon/SVG/reply.svg new file mode 100644 index 0000000..94db731 --- /dev/null +++ b/assets/icomoon/SVG/reply.svg @@ -0,0 +1,5 @@ + + +reply + + diff --git a/assets/icomoon/SVG/sensitivity.svg b/assets/icomoon/SVG/sensitivity.svg new file mode 100644 index 0000000..e3c3820 --- /dev/null +++ b/assets/icomoon/SVG/sensitivity.svg @@ -0,0 +1,5 @@ + + +sensitivity + + diff --git a/assets/icomoon/SVG/skype.svg b/assets/icomoon/SVG/skype.svg new file mode 100644 index 0000000..7213498 --- /dev/null +++ b/assets/icomoon/SVG/skype.svg @@ -0,0 +1,5 @@ + + +skype + + diff --git a/assets/icomoon/SVG/spotify.svg b/assets/icomoon/SVG/spotify.svg new file mode 100644 index 0000000..9b977a8 --- /dev/null +++ b/assets/icomoon/SVG/spotify.svg @@ -0,0 +1,5 @@ + + +spotify + + diff --git a/assets/icomoon/SVG/star.svg b/assets/icomoon/SVG/star.svg new file mode 100644 index 0000000..d20f2b0 --- /dev/null +++ b/assets/icomoon/SVG/star.svg @@ -0,0 +1,5 @@ + + +star + + diff --git a/assets/icomoon/SVG/tags.svg b/assets/icomoon/SVG/tags.svg new file mode 100644 index 0000000..f455cd0 --- /dev/null +++ b/assets/icomoon/SVG/tags.svg @@ -0,0 +1,6 @@ + + +tags + + + diff --git a/assets/icomoon/SVG/telegram.svg b/assets/icomoon/SVG/telegram.svg new file mode 100644 index 0000000..a3d9e0f --- /dev/null +++ b/assets/icomoon/SVG/telegram.svg @@ -0,0 +1,7 @@ + + +telegram + + + + diff --git a/assets/icomoon/SVG/tumblr.svg b/assets/icomoon/SVG/tumblr.svg new file mode 100644 index 0000000..1031777 --- /dev/null +++ b/assets/icomoon/SVG/tumblr.svg @@ -0,0 +1,5 @@ + + +tumblr + + diff --git a/assets/icomoon/SVG/twitter.svg b/assets/icomoon/SVG/twitter.svg new file mode 100644 index 0000000..21df7cd --- /dev/null +++ b/assets/icomoon/SVG/twitter.svg @@ -0,0 +1,5 @@ + + +twitter + + diff --git a/assets/icomoon/SVG/wechat.svg b/assets/icomoon/SVG/wechat.svg new file mode 100644 index 0000000..2ae3c01 --- /dev/null +++ b/assets/icomoon/SVG/wechat.svg @@ -0,0 +1,5 @@ + + +wechat + + diff --git a/assets/icomoon/SVG/whatsapp.svg b/assets/icomoon/SVG/whatsapp.svg new file mode 100644 index 0000000..9c611d8 --- /dev/null +++ b/assets/icomoon/SVG/whatsapp.svg @@ -0,0 +1,5 @@ + + +whatsapp + + diff --git a/assets/icomoon/SVG/wordpress.svg b/assets/icomoon/SVG/wordpress.svg new file mode 100644 index 0000000..9e2fd14 --- /dev/null +++ b/assets/icomoon/SVG/wordpress.svg @@ -0,0 +1,5 @@ + + +wordpress + + diff --git a/assets/icomoon/SVG/xmpp.svg b/assets/icomoon/SVG/xmpp.svg new file mode 100644 index 0000000..075c6c5 --- /dev/null +++ b/assets/icomoon/SVG/xmpp.svg @@ -0,0 +1,5 @@ + + +xmpp + + diff --git a/assets/icomoon/demo-external-svg.html b/assets/icomoon/demo-external-svg.html new file mode 100644 index 0000000..9c2ff03 --- /dev/null +++ b/assets/icomoon/demo-external-svg.html @@ -0,0 +1,219 @@ + + + + IcoMoon - SVG Icons + + + + + + +
+
+

SVG Icons - Generated by IcoMoon

Notice: This demo (along with "symbol-defs.svg" and "svgxuse.js" files) should be hosted on a web server to work properly.

+
+
+
+

Grid Size: 0

+
+
+ icon-instagram +
+
+
+
+ icon-spotify +
+
+
+
+ icon-deviantart +
+
+
+
+ icon-wechat +
+
+
+
+ icon-lastfm +
+
+
+
+ icon-hangouts +
+
+
+
+ icon-flickr +
+
+
+
+ icon-skype +
+
+
+
+ icon-telegram +
+
+
+
+ icon-whatsapp +
+
+
+
+ icon-paypal +
+
+
+
+ icon-linkedin +
+
+
+
+ icon-wordpress +
+
+
+
+ icon-tumblr +
+
+
+
+ icon-github +
+
+
+
+ icon-twitter +
+
+
+
+ icon-icq +
+
+
+
+ icon-xmpp +
+
+
+
+

Grid Size: 16

+
+
+ icon-lens +
+
+
+
+ icon-focallength +
+
+
+
+ icon-aperture +
+
+
+
+ icon-mail +
+
+
+
+ icon-reply +
+
+
+
+ icon-bookmarks +
+
+
+
+ icon-star +
+
+
+
+ icon-tags +
+
+
+
+ icon-lock +
+
+
+
+ icon-link +
+
+
+
+ icon-monzo +
+
+
+
+ icon-feed +
+
+
+
+ icon-home +
+
+
+
+ icon-note +
+
+
+
+ icon-article +
+
+
+
+ icon-journal +
+
+
+
+ icon-photo +
+
+
+
+ icon-contrast +
+
+
+
+ icon-sensitivity +
+
+
+
+ icon-clock +
+
+
+
+ icon-camera +
+
+
+ + + diff --git a/assets/icomoon/demo-files/demo.css b/assets/icomoon/demo-files/demo.css new file mode 100644 index 0000000..f937285 --- /dev/null +++ b/assets/icomoon/demo-files/demo.css @@ -0,0 +1,150 @@ +body { + padding: 0; + margin: 0; + font-family: sans-serif; + font-size: 1em; + line-height: 1.5; + color: #555; + background: #fff; +} +h1 { + font-size: 1.5em; + font-weight: normal; + box-shadow: 0 1px #ddd, 0 2px #fff, 0 3px #ddd; +} +small { + font-size: .66666667em; +} +a { + color: #e74c3c; + text-decoration: none; +} +a:hover, a:focus { + box-shadow: 0 1px #e74c3c; +} +.bshadow0, input { + box-shadow: inset 0 -2px #e7e7e7; +} +input:hover { + box-shadow: inset 0 -2px #ccc; +} +input, fieldset { + font-size: 1em; + margin: 0; + padding: 0; + border: 0; +} +input { + color: inherit; + line-height: 1.5; + height: 1.5em; + padding: .25em 0; +} +input:focus { + outline: none; + box-shadow: inset 0 -2px #449fdb; +} +.glyph { + font-size: 16px; + margin-right: 1.5em; + float: left; + width: 17em; +} +svg { + color: #000; +} +.liga { + width: 80%; + width: calc(100% - 2.5em); +} +.talign-right { + text-align: right; +} +.talign-center { + text-align: center; +} +.bgc1 { + background: #f1f1f1; +} +.fgc0 { + color: #000; +} +.fgc1 { + color: #999; +} +p { + margin-top: 1em; + margin-bottom: 1em; +} +.mvm { + margin-top: .75em; + margin-bottom: .75em; +} +.mtn { + margin-top: 0; +} +.mtl, .mal { + margin-top: 1.5em; +} +.mbl, .mal { + margin-bottom: 1.5em; +} +.mal, .mhl { + margin-left: 1.5em; + margin-right: 1.5em; +} +.mhmm { + margin-left: 1em; + margin-right: 1em; +} +.ptl { + padding-top: 1.5em; +} +.pbs, .pvs { + padding-bottom: .25em; +} +.pvs, .pts { + padding-top: .25em; +} +.unit { + float: left; +} +.unitRight { + float: right; +} +.size1of2 { + width: 50%; +} +.size1of1 { + width: 100%; +} +.clearfix:before, .clearfix:after { + content: " "; + display: table; +} +.clearfix:after { + clear: both; +} +.hidden-true { + display: none; +} +.textbox0 { + width: 3em; + background: #f1f1f1; + padding: .25em .5em; + line-height: 1.5; + height: 1.5em; +} +.fs0 { + font-size: 16px; +} +.fs1 { + font-size: 16px; +} +.fs2 { + font-size: 16px; +} +.name { + margin-left: .25em; +} + diff --git a/assets/icomoon/demo.html b/assets/icomoon/demo.html new file mode 100644 index 0000000..38e3790 --- /dev/null +++ b/assets/icomoon/demo.html @@ -0,0 +1,389 @@ + + + + IcoMoon - SVG Icons + + + + + + + + +
+
+

SVG Icons - Generated by IcoMoon

+
+
+
+

Grid Size: 0

+
+
+ icon-instagram +
+
+
+
+ icon-spotify +
+
+
+
+ icon-deviantart +
+
+
+
+ icon-wechat +
+
+
+
+ icon-lastfm +
+
+
+
+ icon-hangouts +
+
+
+
+ icon-flickr +
+
+
+
+ icon-skype +
+
+
+
+ icon-telegram +
+
+
+
+ icon-whatsapp +
+
+
+
+ icon-paypal +
+
+
+
+ icon-linkedin +
+
+
+
+ icon-wordpress +
+
+
+
+ icon-tumblr +
+
+
+
+ icon-github +
+
+
+
+ icon-twitter +
+
+
+
+ icon-icq +
+
+
+
+ icon-xmpp +
+
+
+
+

Grid Size: 16

+
+
+ icon-lens +
+
+
+
+ icon-focallength +
+
+
+
+ icon-aperture +
+
+
+
+ icon-mail +
+
+
+
+ icon-reply +
+
+
+
+ icon-bookmarks +
+
+
+
+ icon-star +
+
+
+
+ icon-tags +
+
+
+
+ icon-lock +
+
+
+
+ icon-link +
+
+
+
+ icon-monzo +
+
+
+
+ icon-feed +
+
+
+
+ icon-home +
+
+
+
+ icon-note +
+
+
+
+ icon-article +
+
+
+
+ icon-journal +
+
+
+
+ icon-photo +
+
+
+
+ icon-contrast +
+
+
+
+ icon-sensitivity +
+
+
+
+ icon-clock +
+
+
+
+ icon-camera +
+
+
+ + + diff --git a/assets/icomoon/selection.json b/assets/icomoon/selection.json new file mode 100644 index 0000000..2c40567 --- /dev/null +++ b/assets/icomoon/selection.json @@ -0,0 +1,1301 @@ +{ + "IcoMoonType": "selection", + "icons": [ + { + "icon": { + "paths": [ + "M512 0c-139.093 0-156.459 0.64-211.072 3.072-54.528 2.56-91.648 11.136-124.288 23.808-33.664 13.056-62.251 30.592-90.709 59.051s-46.037 57.003-59.051 90.709c-12.672 32.64-21.291 69.76-23.808 124.288-2.56 54.613-3.072 71.979-3.072 211.072s0.64 156.459 3.072 211.072c2.56 54.485 11.136 91.648 23.808 124.288 13.056 33.621 30.592 62.251 59.051 90.709 28.459 28.416 57.003 46.037 90.709 59.051 32.683 12.629 69.803 21.291 124.288 23.808 54.613 2.56 71.979 3.072 211.072 3.072s156.459-0.64 211.072-3.072c54.485-2.56 91.648-11.179 124.288-23.808 33.621-13.056 62.251-30.635 90.709-59.051 28.416-28.459 46.037-56.96 59.051-90.709 12.629-32.64 21.291-69.803 23.808-124.288 2.56-54.613 3.072-71.979 3.072-211.072s-0.64-156.459-3.072-211.072c-2.56-54.485-11.179-91.691-23.808-124.288-13.056-33.664-30.635-62.251-59.051-90.709-28.459-28.459-56.96-46.037-90.709-59.051-32.64-12.672-69.803-21.291-124.288-23.808-54.613-2.56-71.979-3.072-211.072-3.072zM512 92.16c136.661 0 152.96 0.683 206.933 3.029 49.92 2.347 77.013 10.624 95.019 17.707 23.979 9.259 40.96 20.352 58.965 38.229 17.877 17.92 28.971 34.944 38.229 58.923 6.997 18.005 15.36 45.099 17.621 95.019 2.432 54.016 2.987 70.229 2.987 206.933s-0.64 152.96-3.157 206.933c-2.603 49.92-10.923 77.013-17.963 95.019-9.557 23.979-20.437 40.96-38.357 58.965-17.877 17.877-35.157 28.971-58.88 38.229-17.92 6.997-45.44 15.36-95.36 17.621-54.357 2.432-70.357 2.987-207.317 2.987-137.003 0-153.003-0.64-207.317-3.157-49.963-2.603-77.483-10.923-95.403-17.963-24.277-9.557-40.96-20.437-58.837-38.357-17.963-17.877-29.44-35.157-38.4-58.88-7.040-17.92-15.317-45.44-17.92-95.36-1.92-53.76-2.603-70.357-2.603-206.677 0-136.363 0.683-153.003 2.603-207.403 2.603-49.92 10.88-77.397 17.92-95.317 8.96-24.32 20.437-40.96 38.4-58.923 17.877-17.877 34.56-29.397 58.837-38.315 17.92-7.083 44.843-15.403 94.763-17.963 54.4-1.92 70.4-2.56 207.317-2.56l1.92 1.28zM512 249.088c-145.28 0-262.912 117.76-262.912 262.912 0 145.28 117.76 262.912 262.912 262.912 145.28 0 262.912-117.76 262.912-262.912 0-145.28-117.76-262.912-262.912-262.912zM512 682.667c-94.293 0-170.667-76.373-170.667-170.667s76.373-170.667 170.667-170.667 170.667 76.373 170.667 170.667-76.373 170.667-170.667 170.667zM846.763 238.72c0 33.92-27.563 61.44-61.44 61.44-33.92 0-61.44-27.563-61.44-61.44s27.563-61.397 61.44-61.397c33.835-0.043 61.44 27.52 61.44 61.397z" + ], + "attrs": [ + { + "fill": "rgb(228, 64, 95)" + } + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "instagram" + ], + "grid": 0 + }, + "attrs": [ + { + "fill": "rgb(228, 64, 95)" + } + ], + "properties": { + "order": 1, + "id": 0, + "prevSize": 32, + "name": "instagram" + }, + "setIdx": 0, + "setId": 2, + "iconIdx": 0 + }, + { + "icon": { + "paths": [ + "M512 0c-281.6 0-512 230.4-512 512s230.4 512 512 512 512-230.4 512-512-227.84-512-512-512zM747.563 739.84c-10.24 15.317-28.16 20.48-43.563 10.24-120.32-74.24-271.36-89.643-450.603-48.683-17.835 5.205-33.237-7.637-38.357-22.997-5.12-17.963 7.68-33.28 23.040-38.4 194.56-43.563 363.52-25.6 496.64 56.32 17.92 7.68 20.437 28.117 12.843 43.52zM809.003 599.040c-12.843 17.92-35.883 25.6-53.845 12.8-138.197-84.48-348.117-110.080-509.397-58.88-20.437 5.12-43.52-5.12-48.64-25.6s5.12-43.563 25.6-48.683c186.88-56.277 417.28-28.075 576 69.163 15.403 7.723 23.040 33.28 10.283 51.2zM814.123 455.68c-163.883-97.28-437.803-107.52-593.963-58.837-25.6 7.637-51.2-7.723-58.88-30.763-7.68-25.643 7.68-51.2 30.72-58.923 181.76-53.76 481.28-43.52 670.763 69.163 22.997 12.8 30.677 43.52 17.877 66.56-12.757 17.963-43.52 25.557-66.517 12.8z" + ], + "attrs": [ + { + "fill": "rgb(30, 215, 96)" + } + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "spotify" + ], + "grid": 0 + }, + "attrs": [ + { + "fill": "rgb(30, 215, 96)" + } + ], + "properties": { + "order": 1, + "id": 15, + "name": "spotify", + "prevSize": 32 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 0 + }, + { + "icon": { + "paths": [ + "M819.499 204.544l9.813-18.347v-186.197h-186.325l-18.603 18.773-87.808 167.467-27.563 18.603h-313.6v255.701h172.373l15.36 18.603-178.133 340.48-10.24 18.347v186.027h186.24l18.603-18.773 88.32-167.467 27.477-18.603h313.6v-255.701h-172.8l-15.36-18.688 178.603-340.352z" + ], + "attrs": [ + { + "fill": "rgb(5, 204, 71)" + } + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "deviantart" + ], + "grid": 0 + }, + "attrs": [ + { + "fill": "rgb(5, 204, 71)" + } + ], + "properties": { + "order": 1, + "id": 14, + "name": "deviantart", + "prevSize": 32 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 1 + }, + { + "icon": { + "paths": [ + "M1004.416 543.915c-25.984-58.88-75.008-105.643-131.925-134.443-100.437-50.859-225.323-50.56-325.504 1.28-69.589 35.712-127.701 99.712-144.171 177.579-13.568 57.344-1.408 119.083 29.013 169.003 45.269 75.179 127.104 123.179 212.096 138.581 61.568 12.501 125.269 5.077 185.088-12.16 35.925 13.909 67.925 36.437 102.741 53.163-9.003-30.165-18.603-59.989-28.843-89.685 39.083-27.733 74.496-62.336 95.744-105.771 31.744-60.373 33.664-135.296 5.76-197.547zM580.992 140.032c-106.453-59.904-239.019-68.907-353.536-27.52-75.264 27.093-143.36 77.44-185.429 145.92-38.187 61.867-52.48 139.008-34.091 209.792 18.475 78.507 73.003 144.341 139.179 188.288-12.8 36.267-24.96 72.491-36.48 109.013 41.6-21.76 83.2-44.501 124.843-66.603 49.92 16 103.040 23.851 156.16 22.101-14.080-40.235-17.28-83.84-10.88-125.909 9.6-58.496 41.6-112 85.077-151.637 73.643-68.907 177.963-97.963 277.163-90.923-18.603-91.093-82.603-168.064-163.157-212.48h1.152zM654.933 566.229c-8.917 27.819-49.323 36.181-68.907 15.019-21.589-19.584-13.184-60.501 15.147-69.248 31.317-13.227 67.499 22.912 53.76 54.229zM859.52 570.155c-10.923 25.003-48.683 30.848-67.243 11.52-8.917-8.149-11.52-20.437-14.677-31.147 4.437-19.541 17.92-39.808 39.68-40.747 30.080-4.181 57.003 32.981 41.6 60.416h0.64zM554.24 294.784c0.341 41.003-54.4 66.603-85.12 38.784-31.872-22.827-22.827-78.379 14.592-89.856 33.493-13.44 73.088 14.677 70.443 50.56l0.085 0.512zM295.723 305.195c-7.339 35.627-55.083 52.821-83.029 28.928-32.384-22.827-23.296-79.403 14.72-90.923 37.248-14.336 79.573 23.467 68.309 61.995z" + ], + "attrs": [ + { + "fill": "rgb(123, 179, 46)" + } + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "wechat" + ], + "grid": 0 + }, + "attrs": [ + { + "fill": "rgb(123, 179, 46)" + } + ], + "properties": { + "order": 1, + "id": 13, + "name": "wechat", + "prevSize": 32 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 2 + }, + { + "icon": { + "paths": [ + "M452.224 734.336l-37.589-102.101s-61.141 68.096-152.704 68.096c-81.067 0-138.624-70.485-138.624-183.296 0-144.427 72.875-196.096 144.555-196.096 103.168 0 135.851 66.901 164.053 152.661l37.163 117.376c37.163 114.005 107.648 205.568 310.827 205.568 145.493 0 244.139-44.587 244.139-162.176 0-95.019-54.443-144.341-155.093-167.893l-74.965-16.384c-51.925-11.691-67.285-32.896-67.285-68.139 0-39.936 31.403-63.445 83.285-63.445 56.448 0 86.528 21.12 91.605 71.637l117.291-14.080c-9.6-105.771-82.645-149.077-202.453-149.077-105.771 0-208.939 39.936-208.939 167.851 0 79.915 38.485 130.475 135.893 153.813l79.445 18.901c59.605 14.080 79.488 39.083 79.488 73.088 0 43.563-42.325 61.483-122.411 61.483-118.571 0-167.936-62.165-196.139-148.011l-38.443-117.333c-49.323-152.491-128.171-208.896-284.544-208.896-169.173-0.597-260.779 108.288-260.779 294.144 0 178.304 91.605 274.987 256.128 274.987 132.608 0 196.096-62.165 196.096-62.165v-0.512z" + ], + "attrs": [ + { + "fill": "rgb(213, 16, 7)" + } + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "lastfm" + ], + "grid": 0 + }, + "attrs": [ + { + "fill": "rgb(213, 16, 7)" + } + ], + "properties": { + "order": 1, + "id": 12, + "name": "lastfm", + "prevSize": 32 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 3 + }, + { + "icon": { + "paths": [ + "M512 0c-247.467 0-448 200.533-448 448 0 234.667 213.333 426.667 448 426.667v149.333c270.933-132.267 448-349.867 448-576 0-247.467-200.533-448-448-448zM490.667 512c0 59.733-38.4 106.667-85.333 106.667v-106.667h-106.667v-192h192v192zM746.667 512c0 59.733-38.4 106.667-85.333 106.667v-106.667h-106.667v-192h192v192z" + ], + "attrs": [ + { + "fill": "rgb(12, 157, 88)" + } + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "googlehangouts" + ], + "grid": 0 + }, + "attrs": [ + { + "fill": "rgb(12, 157, 88)" + } + ], + "properties": { + "order": 27, + "id": 11, + "prevSize": 32, + "name": "hangouts" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 4 + }, + { + "icon": { + "paths": [ + "M0 512c0 131.157 106.411 237.397 237.44 237.397 131.2 0 237.611-106.24 237.611-237.397s-106.368-237.397-237.611-237.397c-130.987 0-237.44 106.24-237.44 237.397zM548.949 512c0 131.157 106.368 237.397 237.525 237.397 130.688 0 237.525-106.24 237.525-237.397s-106.325-237.397-237.397-237.397c-131.2 0-237.653 106.24-237.653 237.397z" + ], + "attrs": [ + { + "fill": "rgb(0, 99, 220)" + } + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "flickr" + ], + "grid": 0 + }, + "attrs": [ + { + "fill": "rgb(0, 99, 220)" + } + ], + "properties": { + "order": 1, + "id": 10, + "prevSize": 32, + "name": "flickr" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 5 + }, + { + "icon": { + "paths": [ + "M514.944 805.291c-171.648 0-248.32-84.437-248.32-147.797 0-32.64 23.936-55.296 56.875-55.296 73.515 0 54.315 105.685 191.445 105.685 70.016 0 108.8-38.187 108.8-77.269 0-23.509-11.477-49.493-57.771-60.971l-152.576-38.187c-122.88-30.891-145.195-97.536-145.195-160.043 0-130.005 122.069-178.816 236.757-178.816 105.429 0 230.101 58.581 230.101 136.491 0 33.451-29.355 52.907-61.995 52.907-62.677 0-51.115-86.912-177.664-86.912-62.677 0-97.792 28.331-97.792 68.992s49.195 53.675 92.032 63.445l112.512 25.045c123.349 27.691 154.624 100.096 154.624 168.277 0 105.643-81.152 184.491-244.139 184.491zM985.557 597.035l-1.237 5.76-1.877-10.24c0.64 1.92 1.877 3.157 2.517 5.12 5.12-28.8 7.723-58.155 7.723-87.552 0-65.237-12.843-128.512-38.315-188.587-24.277-57.515-59.52-109.312-103.552-153.429-44.757-44.075-95.872-79.189-153.387-103.509-56.235-26.923-119.509-39.68-184.661-39.68-30.72 0-61.611 2.987-91.435 8.704l5.077 2.56-10.197-1.408 5.077-1.067c-41.131-22.016-87.253-33.707-134.101-33.707-76.331 0-148.053 29.781-202.069 83.925-54.016 54.101-83.755 126.123-83.755 202.624 0 48.768 12.459 96.64 36.011 139.008l0.853-5.291 1.749 10.197-2.56-4.907c-4.864 27.52-7.339 55.424-7.339 83.413 0 65.28 12.8 128.725 37.717 188.416 24.235 58.112 58.795 109.909 103.552 153.984 44.117 44.8 95.872 79.232 153.387 104.192 59.477 25.6 122.752 38.315 187.904 38.315 28.117 0 56.917-2.56 84.352-7.637l-5.077-2.645 10.24 1.963-5.76 1.28c42.752 24.277 90.709 37.163 140.544 37.163 76.075 0 147.584-29.44 201.941-83.755 53.717-53.717 83.712-125.909 83.712-202.624 0-48.555-12.757-96.512-36.395-139.349z" + ], + "attrs": [ + { + "fill": "rgb(0, 175, 240)" + } + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "skype" + ], + "grid": 0 + }, + "attrs": [ + { + "fill": "rgb(0, 175, 240)" + } + ], + "properties": { + "order": 1, + "id": 9, + "prevSize": 32, + "name": "skype" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 6 + }, + { + "icon": { + "paths": [ + "M385.195 889.045c-30.464 0-25.301-11.563-35.797-40.491l-89.728-295.253 690.219-409.515z", + "M385.195 889.045c23.552 0 33.92-10.752 47.147-23.595l125.483-121.899-156.629-94.464z", + "M401.195 649.088l379.307 280.235c43.307 23.893 74.581 11.563 85.333-40.192l154.453-727.595c15.872-63.445-24.064-92.117-65.451-73.387l-906.837 349.739c-61.867 24.832-61.568 59.392-11.264 74.795l232.747 72.533 538.624-339.755c25.387-15.36 48.768-7.125 29.611 9.899z" + ], + "attrs": [ + { + "fill": "rgb(44, 165, 224)" + }, + { + "fill": "rgb(44, 165, 224)" + }, + { + "fill": "rgb(44, 165, 224)" + } + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "telegram" + ], + "grid": 0 + }, + "attrs": [ + { + "fill": "rgb(44, 165, 224)" + }, + { + "fill": "rgb(44, 165, 224)" + }, + { + "fill": "rgb(44, 165, 224)" + } + ], + "properties": { + "order": 1, + "id": 8, + "prevSize": 32, + "name": "telegram" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 7 + }, + { + "icon": { + "paths": [ + "M746.581 613.632c-12.843-6.4-75.392-36.992-87.040-41.216-11.648-4.309-20.181-6.4-28.715 6.4-8.405 12.587-32.896 41.131-40.277 49.579-7.467 8.32-14.891 8.96-27.563 3.2-12.8-6.4-53.888-19.84-102.528-63.36-37.888-33.92-63.317-75.52-70.827-88.32-7.424-12.8-0.811-19.84 5.547-26.24 5.803-5.76 12.843-14.72 19.243-22.315 6.229-7.723 8.277-12.843 12.672-21.163 4.267-8.96 2.091-16-1.067-22.357-3.2-6.4-28.672-69.12-39.339-94.123-10.24-24.917-20.779-21.76-28.672-21.76-7.339-0.64-15.829-0.64-24.363-0.64s-22.315 3.157-34.005 15.317c-11.648 12.8-44.587 43.52-44.587 105.6s45.653 122.24 52.011 131.2c6.357 8.32 89.813 136.32 217.6 191.36 30.464 12.8 54.187 20.48 72.704 26.837 30.464 9.685 58.24 8.32 80.213 5.163 24.491-3.883 75.392-30.763 86.016-60.843 10.88-30.080 10.88-55.040 7.68-60.8-3.157-5.76-11.52-8.96-24.32-14.72zM514.603 928h-0.683c-75.52 0-150.357-20.48-215.68-58.88l-15.36-9.131-160 41.6 42.88-155.52-10.197-16c-42.24-67.243-64.683-144.683-64.683-224.427 0-232.32 190.080-421.76 424.192-421.76 113.237 0 219.52 44.16 299.563 124.16 80 79.317 124.117 185.6 124.117 298.24-0.171 232.277-190.293 421.76-423.893 421.76zM875.52 147.157c-97.28-94.037-225.28-147.157-361.6-147.157-280.832 0-509.483 227.584-509.611 507.435 0 89.429 23.424 176.64 68.053 253.653l-72.363 262.912 270.293-70.485c74.496 40.235 158.293 61.611 243.627 61.739h0.256c280.96 0 509.696-227.669 509.824-507.563 0-135.509-52.907-263.040-149.12-358.869z" + ], + "attrs": [ + { + "fill": "rgb(37, 211, 102)" + } + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "whatsapp" + ], + "grid": 0 + }, + "attrs": [ + { + "fill": "rgb(37, 211, 102)" + } + ], + "properties": { + "order": 1, + "id": 7, + "name": "whatsapp", + "prevSize": 32 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 8 + }, + { + "icon": { + "paths": [ + "M294.741 1024h-132.437c-28.331 0-46.336-22.571-39.936-50.347l6.357-28.757h88.363c28.416 0 57.003-22.741 63.232-50.432l45.397-195.925c6.4-27.648 34.816-50.347 63.147-50.347h37.675c161.664 0 287.317-33.237 377.173-99.84s134.827-153.6 134.827-261.76c0-48-8.32-87.68-25.088-118.997 0-0.683-0.683-1.323-0.683-1.963l5.76 3.2c32 19.84 56.32 45.397 73.003 77.397 17.237 32 25.515 71.68 25.515 119.083 0 108.16-44.757 195.157-134.997 261.76-89.6 65.92-215.68 99.157-376.917 99.157h-38.4c-28.16 0-56.917 22.4-63.317 50.603l-45.44 196.48c-6.357 27.52-34.56 49.92-62.72 49.92l-0.512 0.768zM180.523 909.013h-132.48c-28.288 0-46.251-22.571-39.936-50.347l186.581-808.235c6.443-27.861 34.773-50.432 63.189-50.432h275.84c59.52 0 111.317 4.181 155.648 12.331 44.16 8.064 81.92 22.144 114.517 42.24 31.403 19.84 56.405 45.739 72.405 77.568 16.597 31.915 24.917 71.68 24.917 119.339 0 108.16-44.843 195.157-134.997 261.077-89.6 66.603-215.723 99.243-377.003 99.243h-37.675c-28.16 0-56.661 22.357-63.061 49.877l-45.269 195.797c-6.357 27.563-34.859 50.005-63.36 50.005l0.683 1.536zM498.219 167.936h-43.264c-28.416 0-56.832 22.571-63.147 50.261l-39.68 171.52c-6.4 27.648 11.52 50.304 39.68 50.304h32.683c70.997 0 126.72-14.635 166.4-43.563 39.637-29.269 59.52-70.571 59.52-124.245 0-35.413-12.843-61.653-38.4-78.507-25.6-17.237-64-25.813-114.603-25.813l0.811 0.043z" + ], + "attrs": [ + { + "fill": "rgb(0, 69, 124)" + } + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "paypal" + ], + "grid": 0 + }, + "attrs": [ + { + "fill": "rgb(0, 69, 124)" + } + ], + "properties": { + "order": 1, + "id": 6, + "prevSize": 32, + "name": "paypal" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 9 + }, + { + "icon": { + "paths": [ + "M872.405 872.619h-151.637v-237.611c0-56.661-1.152-129.579-79.019-129.579-79.061 0-91.136 61.653-91.136 125.397v241.792h-151.637v-488.619h145.664v66.603h1.963c20.352-38.4 69.845-78.933 143.787-78.933 153.643 0 182.059 101.12 182.059 232.747v268.203zM227.712 317.141c-48.811 0-88.021-39.509-88.021-88.107 0-48.555 39.253-88.021 88.021-88.021 48.64 0 88.064 39.467 88.064 88.021 0 48.597-39.467 88.107-88.064 88.107zM303.744 872.619h-152.064v-488.619h152.064v488.619zM948.267 0h-872.704c-41.771 0-75.563 33.024-75.563 73.771v876.459c0 40.789 33.792 73.771 75.563 73.771h872.576c41.728 0 75.861-32.981 75.861-73.771v-876.459c0-40.747-34.133-73.771-75.861-73.771h0.128z" + ], + "attrs": [ + { + "fill": "rgb(0, 119, 181)" + } + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "linkedin" + ], + "grid": 0 + }, + "attrs": [ + { + "fill": "rgb(0, 119, 181)" + } + ], + "properties": { + "order": 1, + "id": 5, + "name": "linkedin", + "prevSize": 32 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 10 + }, + { + "icon": { + "paths": [ + "M916.011 291.2c35.84 65.579 56.235 140.8 56.235 220.8 0 169.771-91.989 318.123-228.821 397.867l140.587-406.485c26.24-65.707 34.987-118.229 34.987-164.864 0-17.28-1.109-33.28-2.987-47.36zM575.488 295.637c27.605-1.28 52.565-4.48 52.565-4.48 24.832-3.2 21.931-39.68-2.859-38.357 0 0-74.88 5.76-122.88 5.76-45.397 0-121.6-6.4-121.6-6.4-24.96-1.28-28.203 36.48-3.2 37.76 0 0 23.040 2.603 48 3.84l71.68 196.48-101.12 302.080-167.637-497.92c27.691-1.28 52.651-4.267 52.651-4.267 24.96-3.2 22.016-39.68-2.773-38.229 0 0-74.496 5.888-122.624 5.888-8.533 0-18.688-0.341-29.44-0.64 83.285-122.752 225.109-205.312 385.749-205.312 119.851 0 228.907 45.739 310.869 120.875-1.963-0.128-3.883-0.384-6.016-0.384-45.227 0-77.312 39.381-77.312 81.664 0 37.973 21.888 70.101 45.227 107.989 17.536 30.72 37.973 70.101 37.973 127.019 0 39.040-15.104 85.077-35.029 148.437l-45.867 152.96-166.4-495.36 0.043 0.597zM512 972.117c-45.184 0-88.789-6.528-130.048-18.645l138.112-401.323 141.44 387.712c1.024 2.261 2.133 4.309 3.328 6.357-47.787 16.768-99.2 25.984-152.832 25.984zM51.669 512c0-66.731 14.336-130.133 39.893-187.307l219.477 601.557c-153.429-74.624-259.328-232.021-259.371-414.251zM512 0c-282.24 0-512 229.76-512 512s229.76 512 512 512 512-229.76 512-512-229.76-512-512-512z" + ], + "attrs": [ + { + "fill": "rgb(33, 117, 155)" + } + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "wordpress" + ], + "grid": 0 + }, + "attrs": [ + { + "fill": "rgb(33, 117, 155)" + } + ], + "properties": { + "order": 1, + "id": 4, + "prevSize": 32, + "name": "wordpress" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 11 + }, + { + "icon": { + "paths": [ + "M621.355 1024c-217.301 0-299.989-160.256-299.989-273.536v-334.592h-103.083v-132.224c154.88-56.021 192.512-196.096 200.96-276.011 0.597-5.461 4.907-7.637 7.381-7.637h150.059v260.864h204.843v155.008h-205.653v318.72c0.683 42.709 16 101.163 94.165 101.163h3.84c26.923-0.853 63.403-8.747 82.603-17.877l49.323 146.133c-18.603 27.136-102.4 58.624-177.323 59.904h-7.595l0.469 0.085z" + ], + "attrs": [ + { + "fill": "rgb(54, 70, 93)" + } + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "tumblr" + ], + "grid": 0 + }, + "attrs": [ + { + "fill": "rgb(54, 70, 93)" + } + ], + "properties": { + "order": 1, + "id": 3, + "prevSize": 32, + "name": "tumblr" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 12 + }, + { + "icon": { + "paths": [ + "M512 12.672c-282.88 0-512 229.248-512 512 0 226.261 146.688 418.133 350.080 485.76 25.6 4.821 34.987-11.008 34.987-24.619 0-12.16-0.427-44.373-0.64-87.040-142.421 30.891-172.459-68.693-172.459-68.693-23.296-59.093-56.96-74.88-56.96-74.88-46.379-31.744 3.584-31.104 3.584-31.104 51.413 3.584 78.421 52.736 78.421 52.736 45.653 78.293 119.851 55.68 149.12 42.581 4.608-33.109 17.792-55.68 32.427-68.48-113.707-12.8-233.216-56.832-233.216-253.013 0-55.893 19.84-101.547 52.693-137.387-5.76-12.928-23.040-64.981 4.48-135.509 0 0 42.88-13.739 140.8 52.48 40.96-11.392 84.48-17.024 128-17.28 43.52 0.256 87.040 5.888 128 17.28 97.28-66.219 140.16-52.48 140.16-52.48 27.52 70.528 10.24 122.581 5.12 135.509 32.64 35.84 52.48 81.493 52.48 137.387 0 196.693-119.68 240-233.6 252.587 17.92 15.36 34.56 46.763 34.56 94.72 0 68.523-0.64 123.563-0.64 140.203 0 13.44 8.96 29.44 35.2 24.32 204.843-67.157 351.403-259.157 351.403-485.077 0-282.752-229.248-512-512-512z" + ], + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "github" + ], + "grid": 0 + }, + "attrs": [ + {} + ], + "properties": { + "order": 1, + "id": 2, + "prevSize": 32, + "name": "github" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 13 + }, + { + "icon": { + "paths": [ + "M1022.037 194.944c-37.76 16.597-78.080 27.904-120.533 33.067 43.264-26.069 76.544-67.157 92.288-116.181-40.576 23.68-85.547 40.917-133.419 50.517-38.229-40.917-92.715-66.517-153.216-66.517-115.925 0-209.92 93.995-209.92 209.792 0 16.64 1.92 32.64 5.419 47.957-174.507-8.235-329.173-92.032-432.683-218.709-18.219 30.805-28.416 66.603-28.416 105.6 0 72.96 37.12 137.088 93.355 174.763-34.432-1.109-66.816-10.581-95.061-26.283v2.603c0 101.76 72.235 186.624 168.363 205.952-17.621 4.736-36.224 7.296-55.296 7.296-13.397 0-26.24-1.28-39.083-3.669 26.923 83.328 104.32 144.085 196.437 145.792-71.68 56.277-162.517 89.813-260.352 89.813-16.64 0-33.237-0.981-49.92-2.859 93.397 59.477 203.435 94.251 322.432 94.251 386.304 0 597.291-319.829 597.291-596.736 0-8.917 0-17.92-0.64-26.88 41.003-29.397 76.8-66.56 104.96-108.715l-2.005-0.853z" + ], + "attrs": [ + { + "fill": "rgb(29, 161, 242)" + } + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "twitter" + ], + "grid": 0 + }, + "attrs": [ + { + "fill": "rgb(29, 161, 242)" + } + ], + "properties": { + "order": 1, + "id": 1, + "name": "twitter", + "prevSize": 32 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 14 + }, + { + "icon": { + "paths": [ + "M657.323 5.675c-32.256-2.688-62.976 3.84-93.013 19.925-40.107 21.461-68.693 54.4-81.579 97.28v2.859l-1.493 10.027-5.717-10.027-14.293-25.728c-22.869-35.712-51.456-57.173-87.211-67.157-31.403-7.083-57.173-4.139-84.309 10.24-30.080 18.603-47.189 47.189-54.357 87.253-7.168 41.472 0 81.493 21.419 121.472l10.069 14.336-34.432-11.392c-42.88-10.069-82.944-4.437-123.008 17.067-41.472 21.291-67.157 51.413-84.309 92.971-15.787 40.021-14.336 78.635 5.675 114.347 8.619 15.787 21.504 28.587 32.939 37.205 17.152 17.152 38.613 27.136 64.341 31.403l9.984 2.816-21.419 18.688c-20.053 17.152-31.488 38.528-38.656 59.989-7.168 25.728-4.267 51.499 10.069 75.819 7.253 11.435 14.251 21.461 25.685 28.587 11.435 10.027 25.771 17.195 42.923 18.603 31.488 7.253 64.341 7.168 100.096-4.267l-25.771 42.88-7.168 18.603c-14.293 45.824-9.941 85.76 11.52 127.275 10.027 15.787 21.333 30.080 32.853 42.923 17.067 15.701 38.656 25.685 64.427 32.853 42.837 11.435 85.76 10.069 127.147-11.392 40.107-21.461 65.835-55.893 78.72-98.773l1.365-8.533c27.179 29.995 52.907 50.048 81.579 57.173 28.587 8.619 57.173 7.253 82.944-9.941 24.32-14.293 41.515-38.656 50.091-68.693 7.168-31.488 7.168-62.891 0-98.645 14.293 10.027 28.587 17.067 45.739 21.419 45.781 14.293 85.76 12.8 125.867-8.533 38.571-21.504 64.341-55.808 77.227-100.139 11.435-42.88 8.619-84.352-12.8-124.416l-7.253-11.52c-11.392-17.152-22.912-34.304-40.107-45.739-14.251-10.027-31.36-17.152-47.104-24.32 44.373-21.461 75.776-51.499 90.027-90.112 10.069-31.488 7.253-57.259-7.125-82.987v-2.816c-17.152-28.587-39.979-47.147-75.733-57.173-21.461-4.267-45.739-4.352-67.157-2.901l-47.275 10.027 15.787-35.755c14.251-45.781 10.027-90.112-14.293-131.584l-4.267-7.253c-21.461-35.755-52.907-57.173-95.829-68.565-11.093-2.859-22.016-4.821-32.768-5.675zM633.003 66.005c13.781-1.28 27.733 0.512 41.259 5.547 30.037 7.083 51.499 22.784 64.427 47.104v0.128c7.168 14.293 11.392 31.403 11.392 50.005l-4.267 31.488c-5.717 15.787-12.885 29.995-21.461 42.837l-128.683 157.44c-12.8-10.027-27.179-17.195-41.472-24.32l-14.336-161.707-1.408-57.173 1.365-14.293c7.168-28.587 27.221-50.048 52.907-64.341 12.885-7.168 26.453-11.435 40.277-12.672zM339.328 88.917c5.717-0.171 11.776 1.28 17.493 4.096 25.728 7.168 47.189 25.728 64.341 61.44 7.253 14.336 14.336 28.587 17.195 45.781l28.587 168.832-21.504 7.168-127.275-138.752-7.168-14.251c-11.52-25.771-18.56-50.048-15.701-75.819v-0.085c1.451-25.728 11.435-42.795 28.587-52.821 4.267-3.584 9.685-5.419 15.36-5.547zM856.875 303.659c6.4 0 12.672 0.299 19.115 1.024 24.32 2.901 41.472 14.379 50.048 31.573l5.76 18.475-2.859 14.293c-9.984 25.728-31.488 45.824-67.2 61.525-14.293 7.168-29.995 10.027-47.147 12.8l-175.915 21.461-2.859-10.027-2.901-4.267 5.76-7.125 144.512-120.149 17.067-7.083 0.085-0.085c19.2-8.533 37.76-12.203 56.661-12.373zM197.205 311.467c6.827 0.341 13.824 1.408 20.907 3.2v0.085l38.741 15.659 125.867 91.605c-11.52 14.336-18.56 28.587-22.869 42.88l-205.995 25.728-14.251-2.816c-25.728-4.267-42.965-15.787-54.443-37.12-11.52-21.461-11.392-42.923-2.816-64.427 10.027-27.136 28.587-48.64 55.723-60.032 19.328-10.752 38.656-15.915 59.179-14.763zM502.699 426.24c25.771 0 50.133 10.069 65.877 25.771 20.053 20.053 28.587 41.515 28.587 67.243s-8.533 50.005-28.587 67.157c-18.603 18.603-40.107 28.587-65.835 28.587-27.136 0-49.92-10.027-67.115-28.587-18.603-17.152-28.587-41.387-28.587-67.157 0-25.728 9.984-47.232 28.587-67.243 17.152-15.787 39.979-25.771 67.157-25.771zM861.739 536.32l14.336 1.493c21.504 7.168 41.515 19.968 52.907 41.387 14.336 15.787 21.461 37.248 21.461 61.568l-4.267 28.587c-7.125 28.587-24.32 50.048-48.64 61.44-25.728 14.336-51.499 17.195-80.085 7.253-17.152-4.267-28.587-11.435-38.571-22.869l-150.187-124.501 10.027-21.419 4.267-17.195 161.621-14.293 57.173-1.493zM578.603 640.768l60.032 61.44 37.12 45.781 7.253 14.379c12.8 24.32 19.968 47.147 17.067 74.325-2.816 25.685-11.392 44.288-28.587 51.456-9.984 7.168-21.419 7.253-32.853 5.76-27.179-7.083-48.64-28.501-64.341-62.848l-17.195-47.275-21.419-124.459 24.235-8.533 18.603-10.027zM424.149 643.669c14.251 7.125 28.587 14.251 44.373 15.659 2.816 48.64 7.040 100.139 14.165 155.904v57.259l-1.408 14.208c-10.069 25.728-27.221 47.232-52.907 58.667-25.771 14.293-52.907 17.152-78.72 10.027-28.587-7.125-50.048-24.32-61.44-47.189-7.253-14.293-12.971-31.573-12.971-48.64l7.253-32.853c2.816-14.293 10.027-28.587 21.461-40.107l120.149-142.933z" + ], + "attrs": [ + { + "fill": "rgb(126, 189, 0)" + } + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "icq" + ], + "grid": 0 + }, + "attrs": [ + { + "fill": "rgb(126, 189, 0)" + } + ], + "properties": { + "order": 1, + "id": 0, + "prevSize": 32, + "name": "icq" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 15 + }, + { + "icon": { + "paths": [ + "M0 136.32c6.4 245.12 207.36 499.2 449.28 640-55.68 43.52-117.76 76.8-185.6 93.44v11.52c83.2-7.68 166.4-32 247.68-70.4 26.88 12.8 54.4 24.32 81.92 34.56 27.52 10.88 56.32 19.2 85.12 25.6 32 8.32 62.080 12.8 92.16 16v-3.2h1.92v-8.96c-71.68-19.2-136.96-53.76-194.56-99.84 241.28-138.88 439.68-391.040 446.080-639.36l-153.6 60.16-158.080 46.72v23.040c0 145.92-73.6 323.84-197.12 451.2-119.68-126.080-192-300.8-192-444.8 0-7.68 0-15.36 1.28-23.68l-147.2-43.52-177.28-68.48z" + ], + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "grid": 0, + "tags": [ + "xmpp" + ] + }, + "attrs": [ + {} + ], + "properties": { + "order": 26, + "id": 0, + "name": "xmpp", + "prevSize": 32 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 16 + }, + { + "icon": { + "paths": [ + "M512 256c-141.376 0-256 114.624-256 256s114.624 256 256 256 256-114.624 256-256-114.624-256-256-256zM512 704c-106.016 0-192-85.984-192-192s85.984-192 192-192 192 85.984 192 192-85.984 192-192 192zM512 0c-282.784 0-512 229.216-512 512s229.216 512 512 512 512-229.216 512-512-229.216-512-512-512zM512 896c-212.064 0-384-171.936-384-384s171.936-384 384-384 384 171.936 384 384-171.936 384-384 384zM512 416c-53.024 0-96 42.976-96 96s42.976 96 96 96 96-42.976 96-96-42.976-96-96-96z" + ], + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "target", + "goal", + "circles" + ], + "grid": 16 + }, + "attrs": [ + {} + ], + "properties": { + "order": 1, + "id": 0, + "name": "lens", + "prevSize": 32, + "code": 59648 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 17 + }, + { + "icon": { + "paths": [ + "M384 576h-192v128l-192-192 192-192v128h192zM640 448h192v-128l192 192-192 192v-128h-192z" + ], + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "move-horizontal", + "arrows" + ], + "grid": 16 + }, + "attrs": [ + {} + ], + "properties": { + "order": 1, + "id": 1, + "name": "focallength", + "prevSize": 32 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 18 + }, + { + "icon": { + "paths": [ + "M677.504 447.36l182.112-309.248c-91.36-85.056-212.864-138.112-347.616-138.112-31.936 0-62.88 3.808-93.184 9.376l258.688 437.984zM638.496 640h367.36c10.656-41.12 18.144-83.488 18.144-128 0-123.936-45.76-236.064-119.136-324.64l-266.368 452.64zM528 320l-173.056-292.864c-144 46.688-260.448 153.536-316.928 292.864h489.984zM500.256 704l172.512 291.744c142.368-47.488 257.248-153.632 313.248-291.744h-485.76zM387.36 384h-369.248c-10.688 41.12-18.112 83.488-18.112 128 0 124.512 46.24 237.12 120.192 326.016l267.168-454.016zM349.376 574.752l-183.808 312.256c91.296 84.256 212.32 136.992 346.432 136.992 33.312 0 65.76-3.744 97.248-9.76l-259.872-439.488z" + ], + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "aperture" + ], + "grid": 16 + }, + "attrs": [ + {} + ], + "properties": { + "order": 1, + "id": 0, + "name": "aperture", + "prevSize": 32, + "code": 59649 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 19 + }, + { + "icon": { + "paths": [ + "M853.31 0h-682.62c-93.88 0-170.69 76.784-170.69 170.658v682.656c0 93.876 76.81 170.686 170.69 170.686h682.622c93.938 0 170.688-76.81 170.688-170.686v-682.656c0-93.874-76.75-170.658-170.69-170.658zM256 256h512c9.138 0 18.004 1.962 26.144 5.662l-282.144 329.168-282.144-329.17c8.14-3.696 17.006-5.66 26.144-5.66zM192 704v-384c0-1.34 0.056-2.672 0.14-4l187.664 218.94-185.598 185.6c-1.444-5.338-2.206-10.886-2.206-16.54zM768 768h-512c-5.654 0-11.202-0.762-16.54-2.206l182.118-182.118 90.422 105.496 90.424-105.494 182.116 182.118c-5.34 1.442-10.886 2.204-16.54 2.204zM832 704c0 5.654-0.762 11.2-2.206 16.54l-185.598-185.598 187.664-218.942c0.084 1.328 0.14 2.66 0.14 4v384z" + ], + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "mail", + "contact", + "support", + "newsletter", + "letter", + "email", + "envelop", + "social" + ], + "grid": 16 + }, + "attrs": [ + {} + ], + "properties": { + "order": 1, + "id": 22, + "prevSize": 32, + "name": "mail" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 20 + }, + { + "icon": { + "paths": [ + "M448 775.628v248.372l-384-384 384-384v253.824c446.75 10.48 427.588-303.792 313.862-509.824 280.71 303.414 221.1 789.57-313.862 775.628z" + ], + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "reply", + "left", + "arrow-left" + ], + "grid": 16 + }, + "attrs": [ + {} + ], + "properties": { + "order": 1, + "id": 21, + "prevSize": 32, + "code": 59673, + "name": "reply" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 21 + }, + { + "icon": { + "paths": [ + "M256 128v896l320-320 320 320v-896zM768 0h-640v896l64-64v-768h576z" + ], + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "bookmarks", + "ribbons" + ], + "grid": 16 + }, + "attrs": [ + {} + ], + "properties": { + "order": 1, + "id": 20, + "name": "bookmarks", + "prevSize": 32, + "code": 59650 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 22 + }, + { + "icon": { + "paths": [ + "M1024 397.050l-353.78-51.408-158.22-320.582-158.216 320.582-353.784 51.408 256 249.538-60.432 352.352 316.432-166.358 316.432 166.358-60.434-352.352 256.002-249.538z" + ], + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "star-full", + "rate", + "star", + "favorite", + "bookmark" + ], + "grid": 16 + }, + "attrs": [ + {} + ], + "properties": { + "order": 2, + "id": 19, + "name": "star", + "prevSize": 32, + "code": 59651 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 23 + }, + { + "icon": { + "paths": [ + "M1232 0h-384c-26.4 0-63.274 15.274-81.942 33.942l-476.116 476.116c-18.668 18.668-18.668 49.214 0 67.882l412.118 412.118c18.668 18.668 49.214 18.668 67.882 0l476.118-476.118c18.666-18.666 33.94-55.54 33.94-81.94v-384c0-26.4-21.6-48-48-48zM992 384c-53.020 0-96-42.98-96-96s42.98-96 96-96 96 42.98 96 96-42.98 96-96 96z", + "M128 544l544-544h-80c-26.4 0-63.274 15.274-81.942 33.942l-476.116 476.116c-18.668 18.668-18.668 49.214 0 67.882l412.118 412.118c18.668 18.668 49.214 18.668 67.882 0l30.058-30.058-416-416z" + ], + "attrs": [ + {}, + {} + ], + "width": 1280, + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "price-tags" + ], + "grid": 16 + }, + "attrs": [ + {}, + {} + ], + "properties": { + "order": 1, + "id": 18, + "name": "tags", + "prevSize": 32, + "code": 59652 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 24 + }, + { + "icon": { + "paths": [ + "M592 448h-16v-192c0-105.87-86.13-192-192-192h-128c-105.87 0-192 86.13-192 192v192h-16c-26.4 0-48 21.6-48 48v480c0 26.4 21.6 48 48 48h544c26.4 0 48-21.6 48-48v-480c0-26.4-21.6-48-48-48zM192 256c0-35.29 28.71-64 64-64h128c35.29 0 64 28.71 64 64v192h-256v-192z" + ], + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "lock", + "secure", + "private", + "encrypted" + ], + "grid": 16 + }, + "attrs": [ + {} + ], + "properties": { + "order": 1, + "id": 17, + "name": "lock", + "prevSize": 32, + "code": 59653 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 25 + }, + { + "icon": { + "paths": [ + "M440.236 635.766c-13.31 0-26.616-5.076-36.77-15.23-95.134-95.136-95.134-249.934 0-345.070l192-192c46.088-46.086 107.36-71.466 172.534-71.466s126.448 25.38 172.536 71.464c95.132 95.136 95.132 249.934 0 345.070l-87.766 87.766c-20.308 20.308-53.23 20.308-73.54 0-20.306-20.306-20.306-53.232 0-73.54l87.766-87.766c54.584-54.586 54.584-143.404 0-197.99-26.442-26.442-61.6-41.004-98.996-41.004s-72.552 14.562-98.996 41.006l-192 191.998c-54.586 54.586-54.586 143.406 0 197.992 20.308 20.306 20.306 53.232 0 73.54-10.15 10.152-23.462 15.23-36.768 15.23z", + "M256 1012c-65.176 0-126.45-25.38-172.534-71.464-95.134-95.136-95.134-249.934 0-345.070l87.764-87.764c20.308-20.306 53.234-20.306 73.54 0 20.308 20.306 20.308 53.232 0 73.54l-87.764 87.764c-54.586 54.586-54.586 143.406 0 197.992 26.44 26.44 61.598 41.002 98.994 41.002s72.552-14.562 98.998-41.006l192-191.998c54.584-54.586 54.584-143.406 0-197.992-20.308-20.308-20.306-53.232 0-73.54 20.306-20.306 53.232-20.306 73.54 0.002 95.132 95.134 95.132 249.932 0.002 345.068l-192.002 192c-46.090 46.088-107.364 71.466-172.538 71.466z" + ], + "attrs": [ + {}, + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "link", + "chain", + "url", + "uri", + "anchor" + ], + "grid": 16 + }, + "attrs": [ + {}, + {} + ], + "properties": { + "order": 1, + "id": 12, + "name": "link", + "prevSize": 32, + "code": 59658 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 26 + }, + { + "icon": { + "paths": [ + "M928 128h-832c-52.8 0-96 43.2-96 96v576c0 52.8 43.2 96 96 96h832c52.8 0 96-43.2 96-96v-576c0-52.8-43.2-96-96-96zM96 192h832c17.346 0 32 14.654 32 32v96h-896v-96c0-17.346 14.654-32 32-32zM928 832h-832c-17.346 0-32-14.654-32-32v-288h896v288c0 17.346-14.654 32-32 32zM128 640h64v128h-64zM256 640h64v128h-64zM384 640h64v128h-64z" + ], + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "credit-card", + "money", + "payment", + "ecommerce" + ], + "grid": 16 + }, + "attrs": [ + {} + ], + "properties": { + "order": 1, + "id": 11, + "name": "monzo", + "prevSize": 32, + "code": 59659 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 27 + }, + { + "icon": { + "paths": [ + "M928 0h-832c-52.8 0-96 43.2-96 96v832c0 52.8 43.2 96 96 96h832c52.8 0 96-43.2 96-96v-832c0-52.8-43.2-96-96-96zM279 831.2c-48 0-87-38.6-87-86.6 0-47.6 39-86.8 87-86.8 48.2 0 87 39.2 87 86.8 0 48-39 86.6-87 86.6zM497.4 832c0-81.8-31.8-158.8-89.4-216.4-57.8-57.8-134.4-89.6-216-89.6v-125.2c237.6 0 431.2 193.4 431.2 431.2h-125.8zM719.6 832c0-291-236.6-528-527.4-528v-125.2c360 0 653 293.2 653 653.2h-125.6z" + ], + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "feed", + "rss", + "social" + ], + "grid": 16 + }, + "attrs": [ + {} + ], + "properties": { + "order": 1, + "id": 9, + "prevSize": 32, + "code": 59661, + "name": "feed" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 28 + }, + { + "icon": { + "paths": [ + "M1024 590.444l-512-397.426-512 397.428v-162.038l512-397.426 512 397.428zM896 576v384h-256v-256h-256v256h-256v-384l384-288z" + ], + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "home", + "house" + ], + "grid": 16 + }, + "attrs": [ + {} + ], + "properties": { + "order": 1, + "id": 8, + "prevSize": 32, + "code": 59662, + "name": "home" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 29 + }, + { + "icon": { + "paths": [ + "M917.806 229.076c-22.212-30.292-53.174-65.7-87.178-99.704s-69.412-64.964-99.704-87.178c-51.574-37.82-76.592-42.194-90.924-42.194h-496c-44.112 0-80 35.888-80 80v864c0 44.112 35.888 80 80 80h736c44.112 0 80-35.888 80-80v-624c0-14.332-4.372-39.35-42.194-90.924zM785.374 174.626c30.7 30.7 54.8 58.398 72.58 81.374h-153.954v-153.946c22.984 17.78 50.678 41.878 81.374 72.572zM896 944c0 8.672-7.328 16-16 16h-736c-8.672 0-16-7.328-16-16v-864c0-8.672 7.328-16 16-16 0 0 495.956-0.002 496 0v224c0 17.672 14.326 32 32 32h224v624z", + "M736 832h-448c-17.672 0-32-14.326-32-32s14.328-32 32-32h448c17.674 0 32 14.326 32 32s-14.326 32-32 32z", + "M736 704h-448c-17.672 0-32-14.326-32-32s14.328-32 32-32h448c17.674 0 32 14.326 32 32s-14.326 32-32 32z", + "M736 576h-448c-17.672 0-32-14.326-32-32s14.328-32 32-32h448c17.674 0 32 14.326 32 32s-14.326 32-32 32z" + ], + "attrs": [ + {}, + {}, + {}, + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "file-text", + "file", + "document", + "list", + "paper", + "page" + ], + "grid": 16 + }, + "attrs": [ + {}, + {}, + {}, + {} + ], + "properties": { + "order": 1, + "id": 7, + "name": "note", + "prevSize": 32, + "code": 59663 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 30 + }, + { + "icon": { + "paths": [ + "M0 64v896h1024v-896h-1024zM960 896h-896v-768h896v768zM896 192h-768v640h768v-640zM448 512h-64v64h-64v64h-64v-64h64v-64h64v-64h-64v-64h-64v-64h64v64h64v64h64v64zM704 640h-192v-64h192v64z" + ], + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "terminal", + "console", + "cmd", + "command-line" + ], + "grid": 16 + }, + "attrs": [ + {} + ], + "properties": { + "order": 1, + "id": 6, + "name": "article", + "prevSize": 32, + "code": 59664 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 31 + }, + { + "icon": { + "paths": [ + "M864 0h-768c-52.8 0-96 43.2-96 96v832c0 52.8 43.2 96 96 96h768c52.8 0 96-43.2 96-96v-832c0-52.8-43.2-96-96-96zM832 896h-704v-768h704v768zM256 448h448v64h-448zM256 576h448v64h-448zM256 704h448v64h-448zM256 320h448v64h-448z" + ], + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "file-text", + "file", + "document", + "list", + "paper" + ], + "grid": 16 + }, + "attrs": [ + {} + ], + "properties": { + "order": 1, + "id": 5, + "name": "journal", + "prevSize": 32, + "code": 59665 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 32 + }, + { + "icon": { + "paths": [ + "M1088 128h-64v-64c0-35.2-28.8-64-64-64h-896c-35.2 0-64 28.8-64 64v768c0 35.2 28.8 64 64 64h64v64c0 35.2 28.8 64 64 64h896c35.2 0 64-28.8 64-64v-768c0-35.2-28.8-64-64-64zM128 192v640h-63.886c-0.040-0.034-0.082-0.076-0.114-0.116v-767.77c0.034-0.040 0.076-0.082 0.114-0.114h895.77c0.040 0.034 0.082 0.076 0.116 0.116v63.884h-768c-35.2 0-64 28.8-64 64v0zM1088 959.884c-0.034 0.040-0.076 0.082-0.116 0.116h-895.77c-0.040-0.034-0.082-0.076-0.114-0.116v-767.77c0.034-0.040 0.076-0.082 0.114-0.114h895.77c0.040 0.034 0.082 0.076 0.116 0.116v767.768z", + "M960 352c0 53.020-42.98 96-96 96s-96-42.98-96-96 42.98-96 96-96 96 42.98 96 96z", + "M1024 896h-768v-128l224-384 256 320h64l224-192z" + ], + "attrs": [ + {}, + {}, + {} + ], + "width": 1152, + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "images", + "pictures", + "photos", + "graphics" + ], + "grid": 16 + }, + "attrs": [ + {}, + {}, + {} + ], + "properties": { + "order": 1, + "id": 4, + "name": "photo", + "prevSize": 32, + "code": 59666 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 33 + }, + { + "icon": { + "paths": [ + "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM128 512c0-212.078 171.922-384 384-384v768c-212.078 0-384-171.922-384-384z" + ], + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "contrast" + ], + "grid": 16 + }, + "attrs": [ + {} + ], + "properties": { + "order": 1, + "id": 3, + "name": "contrast", + "prevSize": 32, + "code": 59667 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 34 + }, + { + "icon": { + "paths": [ + "M512 256c-141.384 0-256 114.616-256 256s114.616 256 256 256 256-114.616 256-256-114.616-256-256-256zM512 672v-320c88.224 0 160 71.776 160 160s-71.776 160-160 160zM512 832c35.346 0 64 28.654 64 64v64c0 35.346-28.654 64-64 64s-64-28.654-64-64v-64c0-35.346 28.654-64 64-64zM512 192c-35.346 0-64-28.654-64-64v-64c0-35.346 28.654-64 64-64s64 28.654 64 64v64c0 35.346-28.654 64-64 64zM960 448c35.346 0 64 28.654 64 64s-28.654 64-64 64h-64c-35.346 0-64-28.654-64-64s28.654-64 64-64h64zM192 512c0 35.346-28.654 64-64 64h-64c-35.346 0-64-28.654-64-64s28.654-64 64-64h64c35.346 0 64 28.654 64 64zM828.784 738.274l45.256 45.256c24.992 24.992 24.992 65.516 0 90.51-24.994 24.992-65.518 24.992-90.51 0l-45.256-45.256c-24.992-24.992-24.992-65.516 0-90.51 24.994-24.992 65.518-24.992 90.51 0zM195.216 285.726l-45.256-45.256c-24.994-24.994-24.994-65.516 0-90.51s65.516-24.994 90.51 0l45.256 45.256c24.994 24.994 24.994 65.516 0 90.51s-65.516 24.994-90.51 0zM828.784 285.726c-24.992 24.992-65.516 24.992-90.51 0-24.992-24.994-24.992-65.516 0-90.51l45.256-45.254c24.992-24.994 65.516-24.994 90.51 0 24.992 24.994 24.992 65.516 0 90.51l-45.256 45.254zM195.216 738.274c24.992-24.992 65.516-24.992 90.508 0 24.994 24.994 24.994 65.518 0 90.51l-45.254 45.256c-24.994 24.992-65.516 24.992-90.51 0-24.994-24.994-24.994-65.518 0-90.51l45.256-45.256z" + ], + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "brightness-contrast" + ], + "grid": 16 + }, + "attrs": [ + {} + ], + "properties": { + "order": 1, + "id": 2, + "prevSize": 32, + "code": 59668, + "name": "sensitivity" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 35 + }, + { + "icon": { + "paths": [ + "M658.744 749.256l-210.744-210.746v-282.51h128v229.49l173.256 173.254zM512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM512 896c-212.078 0-384-171.922-384-384s171.922-384 384-384c212.078 0 384 171.922 384 384s-171.922 384-384 384z" + ], + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "clock", + "time", + "schedule" + ], + "grid": 16 + }, + "attrs": [ + {} + ], + "properties": { + "order": 1, + "id": 1, + "name": "clock", + "prevSize": 32, + "code": 59669 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 36 + }, + { + "icon": { + "paths": [ + "M304 608c0 114.876 93.124 208 208 208s208-93.124 208-208-93.124-208-208-208-208 93.124-208 208zM960 256h-224c-16-64-32-128-96-128h-256c-64 0-80 64-96 128h-224c-35.2 0-64 28.8-64 64v576c0 35.2 28.8 64 64 64h896c35.2 0 64-28.8 64-64v-576c0-35.2-28.8-64-64-64zM512 892c-156.85 0-284-127.148-284-284 0-156.85 127.15-284 284-284 156.852 0 284 127.15 284 284 0 156.852-127.146 284-284 284zM960 448h-128v-64h128v64z" + ], + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "camera", + "photo", + "picture", + "image" + ], + "grid": 16 + }, + "attrs": [ + {} + ], + "properties": { + "order": 1, + "id": 0, + "name": "camera", + "prevSize": 32, + "code": 59670 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 37 + } + ], + "height": 1024, + "preferences": { + "showGlyphs": true, + "showCodes": true, + "showQuickUse": true, + "showQuickUse2": true, + "showSVGs": true, + "fontPref": { + "prefix": "icon-", + "metadata": { + "fontFamily": "icomoon" + }, + "metrics": { + "emSize": 1024, + "baseline": 6.25, + "whitespace": 50 + }, + "embed": false + }, + "imagePref": { + "prefix": "icon-", + "png": false, + "useClassSelector": false, + "color": 0, + "bgColor": 16777215, + "name": "icomoon", + "classSelector": ".icon", + "height": 16, + "columns": 16, + "margin": 16, + "overrideSize": true + }, + "historySize": 50 + } +} \ No newline at end of file diff --git a/assets/icomoon/style.css b/assets/icomoon/style.css new file mode 100644 index 0000000..32214d6 --- /dev/null +++ b/assets/icomoon/style.css @@ -0,0 +1,24 @@ +[class^="icon-"], [class*=" icon-"] { + display: inline-block; + width: 1em; + height: 1em; + stroke-width: 0; + stroke: currentColor; + fill: currentColor; +} + +/* ========================================== +Single-colored icons can be modified like so: +.icon-name { + font-size: 32px; + color: red; +} +========================================== */ + +.icon-tags { + width: 1.25em; +} + +.icon-photo { + width: 1.125em; +} diff --git a/assets/icomoon/svgxuse.js b/assets/icomoon/svgxuse.js new file mode 100644 index 0000000..245217c --- /dev/null +++ b/assets/icomoon/svgxuse.js @@ -0,0 +1,230 @@ +/*! + * @copyright Copyright (c) 2017 IcoMoon.io + * @license Licensed under MIT license + * See https://github.com/Keyamoon/svgxuse + * @version 1.2.6 + */ +/*jslint browser: true */ +/*global XDomainRequest, MutationObserver, window */ +(function () { + "use strict"; + if (typeof window !== "undefined" && window.addEventListener) { + var cache = Object.create(null); // holds xhr objects to prevent multiple requests + var checkUseElems; + var tid; // timeout id + var debouncedCheck = function () { + clearTimeout(tid); + tid = setTimeout(checkUseElems, 100); + }; + var unobserveChanges = function () { + return; + }; + var observeChanges = function () { + var observer; + window.addEventListener("resize", debouncedCheck, false); + window.addEventListener("orientationchange", debouncedCheck, false); + if (window.MutationObserver) { + observer = new MutationObserver(debouncedCheck); + observer.observe(document.documentElement, { + childList: true, + subtree: true, + attributes: true + }); + unobserveChanges = function () { + try { + observer.disconnect(); + window.removeEventListener("resize", debouncedCheck, false); + window.removeEventListener("orientationchange", debouncedCheck, false); + } catch (ignore) {} + }; + } else { + document.documentElement.addEventListener("DOMSubtreeModified", debouncedCheck, false); + unobserveChanges = function () { + document.documentElement.removeEventListener("DOMSubtreeModified", debouncedCheck, false); + window.removeEventListener("resize", debouncedCheck, false); + window.removeEventListener("orientationchange", debouncedCheck, false); + }; + } + }; + var createRequest = function (url) { + // In IE 9, cross origin requests can only be sent using XDomainRequest. + // XDomainRequest would fail if CORS headers are not set. + // Therefore, XDomainRequest should only be used with cross origin requests. + function getOrigin(loc) { + var a; + if (loc.protocol !== undefined) { + a = loc; + } else { + a = document.createElement("a"); + a.href = loc; + } + return a.protocol.replace(/:/g, "") + a.host; + } + var Request; + var origin; + var origin2; + if (window.XMLHttpRequest) { + Request = new XMLHttpRequest(); + origin = getOrigin(location); + origin2 = getOrigin(url); + if (Request.withCredentials === undefined && origin2 !== "" && origin2 !== origin) { + Request = XDomainRequest || undefined; + } else { + Request = XMLHttpRequest; + } + } + return Request; + }; + var xlinkNS = "http://www.w3.org/1999/xlink"; + checkUseElems = function () { + var base; + var bcr; + var fallback = ""; // optional fallback URL in case no base path to SVG file was given and no symbol definition was found. + var hash; + var href; + var i; + var inProgressCount = 0; + var isHidden; + var Request; + var url; + var uses; + var xhr; + function observeIfDone() { + // If done with making changes, start watching for chagnes in DOM again + inProgressCount -= 1; + if (inProgressCount === 0) { // if all xhrs were resolved + unobserveChanges(); // make sure to remove old handlers + observeChanges(); // watch for changes to DOM + } + } + function attrUpdateFunc(spec) { + return function () { + if (cache[spec.base] !== true) { + spec.useEl.setAttributeNS(xlinkNS, "xlink:href", "#" + spec.hash); + if (spec.useEl.hasAttribute("href")) { + spec.useEl.setAttribute("href", "#" + spec.hash); + } + } + }; + } + function onloadFunc(xhr) { + return function () { + var body = document.body; + var x = document.createElement("x"); + var svg; + xhr.onload = null; + x.innerHTML = xhr.responseText; + svg = x.getElementsByTagName("svg")[0]; + if (svg) { + svg.setAttribute("aria-hidden", "true"); + svg.style.position = "absolute"; + svg.style.width = 0; + svg.style.height = 0; + svg.style.overflow = "hidden"; + body.insertBefore(svg, body.firstChild); + } + observeIfDone(); + }; + } + function onErrorTimeout(xhr) { + return function () { + xhr.onerror = null; + xhr.ontimeout = null; + observeIfDone(); + }; + } + unobserveChanges(); // stop watching for changes to DOM + // find all use elements + uses = document.getElementsByTagName("use"); + for (i = 0; i < uses.length; i += 1) { + try { + bcr = uses[i].getBoundingClientRect(); + } catch (ignore) { + // failed to get bounding rectangle of the use element + bcr = false; + } + href = uses[i].getAttribute("href") + || uses[i].getAttributeNS(xlinkNS, "href") + || uses[i].getAttribute("xlink:href"); + if (href && href.split) { + url = href.split("#"); + } else { + url = ["", ""]; + } + base = url[0]; + hash = url[1]; + isHidden = bcr && bcr.left === 0 && bcr.right === 0 && bcr.top === 0 && bcr.bottom === 0; + if (bcr && bcr.width === 0 && bcr.height === 0 && !isHidden) { + // the use element is empty + // if there is a reference to an external SVG, try to fetch it + // use the optional fallback URL if there is no reference to an external SVG + if (fallback && !base.length && hash && !document.getElementById(hash)) { + base = fallback; + } + if (uses[i].hasAttribute("href")) { + uses[i].setAttributeNS(xlinkNS, "xlink:href", href); + } + if (base.length) { + // schedule updating xlink:href + xhr = cache[base]; + if (xhr !== true) { + // true signifies that prepending the SVG was not required + setTimeout(attrUpdateFunc({ + useEl: uses[i], + base: base, + hash: hash + }), 0); + } + if (xhr === undefined) { + Request = createRequest(base); + if (Request !== undefined) { + xhr = new Request(); + cache[base] = xhr; + xhr.onload = onloadFunc(xhr); + xhr.onerror = onErrorTimeout(xhr); + xhr.ontimeout = onErrorTimeout(xhr); + xhr.open("GET", base); + xhr.send(); + inProgressCount += 1; + } + } + } + } else { + if (!isHidden) { + if (cache[base] === undefined) { + // remember this URL if the use element was not empty and no request was sent + cache[base] = true; + } else if (cache[base].onload) { + // if it turns out that prepending the SVG is not necessary, + // abort the in-progress xhr. + cache[base].abort(); + delete cache[base].onload; + cache[base] = true; + } + } else if (base.length && cache[base]) { + setTimeout(attrUpdateFunc({ + useEl: uses[i], + base: base, + hash: hash + }), 0); + } + } + } + uses = ""; + inProgressCount += 1; + observeIfDone(); + }; + var winLoad; + winLoad = function () { + window.removeEventListener("load", winLoad, false); // to prevent memory leaks + tid = setTimeout(checkUseElems, 0); + }; + if (document.readyState !== "complete") { + // The load event fires when all resources have finished loading, which allows detecting whether SVG use elements are empty. + window.addEventListener("load", winLoad, false); + } else { + // No need to add a listener if the document is already loaded, initialize immediately. + winLoad(); + } + } +}()); diff --git a/assets/icomoon/symbol-defs.svg b/assets/icomoon/symbol-defs.svg new file mode 100644 index 0000000..2b150b8 --- /dev/null +++ b/assets/icomoon/symbol-defs.svg @@ -0,0 +1,169 @@ + diff --git a/nasg.py b/nasg.py index a0e02ce..c82b263 100644 --- a/nasg.py +++ b/nasg.py @@ -150,7 +150,7 @@ class Webmention(object): def save(self, content): writepath(self.fpath, content) - def send(self): + async def send(self): if self.exists: return telegraph_url = 'https://telegraph.p3k.io/webmention' @@ -1012,8 +1012,7 @@ class AsyncWorker(object): self._loop = asyncio.get_event_loop() def add(self, job): - #task = self._loop.create_task(job) - self._tasks.append(asyncio.ensure_future(job)) + self._tasks.append(job) def run(self): self._loop.run_until_complete(asyncio.wait(self._tasks)) @@ -1740,7 +1739,7 @@ def make(): content = settings.paths.get('content') worker = AsyncWorker() - webmentions = [] + webmentions = AsyncWorker() rules = IndexPHP() micropub = MicropubPHP() @@ -1759,7 +1758,7 @@ def make(): for i in post.images.values(): worker.add(i.downsize()) for i in post.to_ping: - webmentions.append(i) + webmentions.add(i.send()) worker.add(post.render()) worker.add(post.copyfiles()) @@ -1837,12 +1836,10 @@ def make(): ) logger.info('syncing finished') + + logger.info('sending webmentions') - try: - for i in webmentions: - i.send() - except Exception as e: - logger.error('failed to send webmentions - are we offline?') + webmentions.run() logger.info('sending webmentions finished') diff --git a/templates/Category.j2.html b/templates/Category.j2.html index 4e571bc..abf52b5 100644 --- a/templates/Category.j2.html +++ b/templates/Category.j2.html @@ -101,6 +101,7 @@ {% endblock %} {% block pagination %} +{% if category.display != 'flat' %} +{% endif %} {% endblock %} diff --git a/templates/base.j2.html b/templates/base.j2.html index e44c98a..d3c2b53 100644 --- a/templates/base.j2.html +++ b/templates/base.j2.html @@ -23,7 +23,7 @@ -{% macro activemenu(name) %}{% if (post is defined and post.category == name ) or ( category is defined and category.name == name ) %}active{% endif %}{% endmacro %} +{% macro activemenu(name) %}{% if (post is defined and post.slug == name ) or (post is defined and post.category == name ) or ( category is defined and category.name == name ) %}active{% endif %}{% endmacro %}