Initial site outline

This commit is contained in:
Andy Tudhope 2018-09-28 20:47:04 +02:00
parent 6555f872a1
commit d9c9ff0559
No known key found for this signature in database
GPG Key ID: 02A3DFA93BF26AD2
225 changed files with 11198 additions and 372 deletions

3
.eslintignore Normal file
View File

@ -0,0 +1,3 @@
node_modules/
public/
themes/navy/source/js/vendor/

10
.eslintrc Normal file
View File

@ -0,0 +1,10 @@
{
"extends": "hexo",
"root": true,
"rules": {
"strict": "off"
},
"env": {
"browser": true
}
}

8
.gitignore vendored Normal file
View File

@ -0,0 +1,8 @@
.DS_Store
.idea/
node_modules/
*.log
db.json
.deploy*/
package-lock.json
public/

60
Jenkinsfile vendored Normal file
View File

@ -0,0 +1,60 @@
pipeline {
agent { label 'linux' }
options {
disableConcurrentBuilds()
/* manage how many builds we keep */
buildDiscarder(logRotator(
numToKeepStr: '20',
daysToKeepStr: '30',
))
}
environment {
GIT_USER = 'status-im-auto'
GIT_MAIL = 'auto@status.im'
}
stages {
stage('Git Prep') {
steps {
sh "git config user.name ${env.GIT_USER}"
sh "git config user.email ${env.GIT_MAIL}"
}
}
stage('Install Deps') {
steps {
sh 'npm install'
}
}
stage('Build') {
steps {
sh 'npm run clean'
sh 'npm run build'
}
}
stage('Publish Prod') {
when { expression { env.GIT_BRANCH ==~ /.*master/ } }
steps { script {
sshagent(credentials: ['status-im-auto-ssh']) {
sh 'npm run deploy'
}
} }
}
stage('Publish Devel') {
when { expression { env.GIT_BRANCH ==~ /.*develop/ } }
steps { script {
sshagent(credentials: ['jenkins-ssh']) {
sh '''
scp -o StrictHostKeyChecking=no -r public/. \
jenkins@node-01.do-ams3.proxy.misc.statusim.net:/var/www/dev-docs/
'''
}
} }
}
}
}

374
LICENSE
View File

@ -1,373 +1,7 @@
Mozilla Public License Version 2.0
==================================
Copyright (c) 2013 Tommy Chen
1. Definitions
--------------
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
1.1. "Contributor"
means each individual or legal entity that creates, contributes to
the creation of, or owns Covered Software.
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
1.2. "Contributor Version"
means the combination of the Contributions of others (if any) used
by a Contributor and that particular Contributor's Contribution.
1.3. "Contribution"
means Covered Software of a particular Contributor.
1.4. "Covered Software"
means Source Code Form to which the initial Contributor has attached
the notice in Exhibit A, the Executable Form of such Source Code
Form, and Modifications of such Source Code Form, in each case
including portions thereof.
1.5. "Incompatible With Secondary Licenses"
means
(a) that the initial Contributor has attached the notice described
in Exhibit B to the Covered Software; or
(b) that the Covered Software was made available under the terms of
version 1.1 or earlier of the License, but not also under the
terms of a Secondary License.
1.6. "Executable Form"
means any form of the work other than Source Code Form.
1.7. "Larger Work"
means a work that combines Covered Software with other material, in
a separate file or files, that is not Covered Software.
1.8. "License"
means this document.
1.9. "Licensable"
means having the right to grant, to the maximum extent possible,
whether at the time of the initial grant or subsequently, any and
all of the rights conveyed by this License.
1.10. "Modifications"
means any of the following:
(a) any file in Source Code Form that results from an addition to,
deletion from, or modification of the contents of Covered
Software; or
(b) any new file in Source Code Form that contains any Covered
Software.
1.11. "Patent Claims" of a Contributor
means any patent claim(s), including without limitation, method,
process, and apparatus claims, in any patent Licensable by such
Contributor that would be infringed, but for the grant of the
License, by the making, using, selling, offering for sale, having
made, import, or transfer of either its Contributions or its
Contributor Version.
1.12. "Secondary License"
means either the GNU General Public License, Version 2.0, the GNU
Lesser General Public License, Version 2.1, the GNU Affero General
Public License, Version 3.0, or any later versions of those
licenses.
1.13. "Source Code Form"
means the form of the work preferred for making modifications.
1.14. "You" (or "Your")
means an individual or a legal entity exercising rights under this
License. For legal entities, "You" includes any entity that
controls, is controlled by, or is under common control with You. For
purposes of this definition, "control" means (a) the power, direct
or indirect, to cause the direction or management of such entity,
whether by contract or otherwise, or (b) ownership of more than
fifty percent (50%) of the outstanding shares or beneficial
ownership of such entity.
2. License Grants and Conditions
--------------------------------
2.1. Grants
Each Contributor hereby grants You a world-wide, royalty-free,
non-exclusive license:
(a) under intellectual property rights (other than patent or trademark)
Licensable by such Contributor to use, reproduce, make available,
modify, display, perform, distribute, and otherwise exploit its
Contributions, either on an unmodified basis, with Modifications, or
as part of a Larger Work; and
(b) under Patent Claims of such Contributor to make, use, sell, offer
for sale, have made, import, and otherwise transfer either its
Contributions or its Contributor Version.
2.2. Effective Date
The licenses granted in Section 2.1 with respect to any Contribution
become effective for each Contribution on the date the Contributor first
distributes such Contribution.
2.3. Limitations on Grant Scope
The licenses granted in this Section 2 are the only rights granted under
this License. No additional rights or licenses will be implied from the
distribution or licensing of Covered Software under this License.
Notwithstanding Section 2.1(b) above, no patent license is granted by a
Contributor:
(a) for any code that a Contributor has removed from Covered Software;
or
(b) for infringements caused by: (i) Your and any other third party's
modifications of Covered Software, or (ii) the combination of its
Contributions with other software (except as part of its Contributor
Version); or
(c) under Patent Claims infringed by Covered Software in the absence of
its Contributions.
This License does not grant any rights in the trademarks, service marks,
or logos of any Contributor (except as may be necessary to comply with
the notice requirements in Section 3.4).
2.4. Subsequent Licenses
No Contributor makes additional grants as a result of Your choice to
distribute the Covered Software under a subsequent version of this
License (see Section 10.2) or under the terms of a Secondary License (if
permitted under the terms of Section 3.3).
2.5. Representation
Each Contributor represents that the Contributor believes its
Contributions are its original creation(s) or it has sufficient rights
to grant the rights to its Contributions conveyed by this License.
2.6. Fair Use
This License is not intended to limit any rights You have under
applicable copyright doctrines of fair use, fair dealing, or other
equivalents.
2.7. Conditions
Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
in Section 2.1.
3. Responsibilities
-------------------
3.1. Distribution of Source Form
All distribution of Covered Software in Source Code Form, including any
Modifications that You create or to which You contribute, must be under
the terms of this License. You must inform recipients that the Source
Code Form of the Covered Software is governed by the terms of this
License, and how they can obtain a copy of this License. You may not
attempt to alter or restrict the recipients' rights in the Source Code
Form.
3.2. Distribution of Executable Form
If You distribute Covered Software in Executable Form then:
(a) such Covered Software must also be made available in Source Code
Form, as described in Section 3.1, and You must inform recipients of
the Executable Form how they can obtain a copy of such Source Code
Form by reasonable means in a timely manner, at a charge no more
than the cost of distribution to the recipient; and
(b) You may distribute such Executable Form under the terms of this
License, or sublicense it under different terms, provided that the
license for the Executable Form does not attempt to limit or alter
the recipients' rights in the Source Code Form under this License.
3.3. Distribution of a Larger Work
You may create and distribute a Larger Work under terms of Your choice,
provided that You also comply with the requirements of this License for
the Covered Software. If the Larger Work is a combination of Covered
Software with a work governed by one or more Secondary Licenses, and the
Covered Software is not Incompatible With Secondary Licenses, this
License permits You to additionally distribute such Covered Software
under the terms of such Secondary License(s), so that the recipient of
the Larger Work may, at their option, further distribute the Covered
Software under the terms of either this License or such Secondary
License(s).
3.4. Notices
You may not remove or alter the substance of any license notices
(including copyright notices, patent notices, disclaimers of warranty,
or limitations of liability) contained within the Source Code Form of
the Covered Software, except that You may alter any license notices to
the extent required to remedy known factual inaccuracies.
3.5. Application of Additional Terms
You may choose to offer, and to charge a fee for, warranty, support,
indemnity or liability obligations to one or more recipients of Covered
Software. However, You may do so only on Your own behalf, and not on
behalf of any Contributor. You must make it absolutely clear that any
such warranty, support, indemnity, or liability obligation is offered by
You alone, and You hereby agree to indemnify every Contributor for any
liability incurred by such Contributor as a result of warranty, support,
indemnity or liability terms You offer. You may include additional
disclaimers of warranty and limitations of liability specific to any
jurisdiction.
4. Inability to Comply Due to Statute or Regulation
---------------------------------------------------
If it is impossible for You to comply with any of the terms of this
License with respect to some or all of the Covered Software due to
statute, judicial order, or regulation then You must: (a) comply with
the terms of this License to the maximum extent possible; and (b)
describe the limitations and the code they affect. Such description must
be placed in a text file included with all distributions of the Covered
Software under this License. Except to the extent prohibited by statute
or regulation, such description must be sufficiently detailed for a
recipient of ordinary skill to be able to understand it.
5. Termination
--------------
5.1. The rights granted under this License will terminate automatically
if You fail to comply with any of its terms. However, if You become
compliant, then the rights granted under this License from a particular
Contributor are reinstated (a) provisionally, unless and until such
Contributor explicitly and finally terminates Your grants, and (b) on an
ongoing basis, if such Contributor fails to notify You of the
non-compliance by some reasonable means prior to 60 days after You have
come back into compliance. Moreover, Your grants from a particular
Contributor are reinstated on an ongoing basis if such Contributor
notifies You of the non-compliance by some reasonable means, this is the
first time You have received notice of non-compliance with this License
from such Contributor, and You become compliant prior to 30 days after
Your receipt of the notice.
5.2. If You initiate litigation against any entity by asserting a patent
infringement claim (excluding declaratory judgment actions,
counter-claims, and cross-claims) alleging that a Contributor Version
directly or indirectly infringes any patent, then the rights granted to
You by any and all Contributors for the Covered Software under Section
2.1 of this License shall terminate.
5.3. In the event of termination under Sections 5.1 or 5.2 above, all
end user license agreements (excluding distributors and resellers) which
have been validly granted by You or Your distributors under this License
prior to termination shall survive termination.
************************************************************************
* *
* 6. Disclaimer of Warranty *
* ------------------------- *
* *
* Covered Software is provided under this License on an "as is" *
* basis, without warranty of any kind, either expressed, implied, or *
* statutory, including, without limitation, warranties that the *
* Covered Software is free of defects, merchantable, fit for a *
* particular purpose or non-infringing. The entire risk as to the *
* quality and performance of the Covered Software is with You. *
* Should any Covered Software prove defective in any respect, You *
* (not any Contributor) assume the cost of any necessary servicing, *
* repair, or correction. This disclaimer of warranty constitutes an *
* essential part of this License. No use of any Covered Software is *
* authorized under this License except under this disclaimer. *
* *
************************************************************************
************************************************************************
* *
* 7. Limitation of Liability *
* -------------------------- *
* *
* Under no circumstances and under no legal theory, whether tort *
* (including negligence), contract, or otherwise, shall any *
* Contributor, or anyone who distributes Covered Software as *
* permitted above, be liable to You for any direct, indirect, *
* special, incidental, or consequential damages of any character *
* including, without limitation, damages for lost profits, loss of *
* goodwill, work stoppage, computer failure or malfunction, or any *
* and all other commercial damages or losses, even if such party *
* shall have been informed of the possibility of such damages. This *
* limitation of liability shall not apply to liability for death or *
* personal injury resulting from such party's negligence to the *
* extent applicable law prohibits such limitation. Some *
* jurisdictions do not allow the exclusion or limitation of *
* incidental or consequential damages, so this exclusion and *
* limitation may not apply to You. *
* *
************************************************************************
8. Litigation
-------------
Any litigation relating to this License may be brought only in the
courts of a jurisdiction where the defendant maintains its principal
place of business and such litigation shall be governed by laws of that
jurisdiction, without reference to its conflict-of-law provisions.
Nothing in this Section shall prevent a party's ability to bring
cross-claims or counter-claims.
9. Miscellaneous
----------------
This License represents the complete agreement concerning the subject
matter hereof. If any provision of this License is held to be
unenforceable, such provision shall be reformed only to the extent
necessary to make it enforceable. Any law or regulation which provides
that the language of a contract shall be construed against the drafter
shall not be used to construe this License against a Contributor.
10. Versions of the License
---------------------------
10.1. New Versions
Mozilla Foundation is the license steward. Except as provided in Section
10.3, no one other than the license steward has the right to modify or
publish new versions of this License. Each version will be given a
distinguishing version number.
10.2. Effect of New Versions
You may distribute the Covered Software under the terms of the version
of the License under which You originally received the Covered Software,
or under the terms of any subsequent version published by the license
steward.
10.3. Modified Versions
If you create software not governed by this License, and you want to
create a new license for such software, you may create and use a
modified version of this License if you rename the license and remove
any references to the name of the license steward (except to note that
such modified license differs from this License).
10.4. Distributing Source Code Form that is Incompatible With Secondary
Licenses
If You choose to distribute Source Code Form that is Incompatible With
Secondary Licenses under the terms of this version of the License, the
notice described in Exhibit B of this License must be attached.
Exhibit A - Source Code Form License Notice
-------------------------------------------
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
If it is not possible or desirable to put the notice in a particular
file, then You may include the notice in a location (such as a LICENSE
file in a relevant directory) where a recipient would be likely to look
for such a notice.
You may add additional accurate notices of copyright ownership.
Exhibit B - "Incompatible With Secondary Licenses" Notice
---------------------------------------------------------
This Source Code Form is "Incompatible With Secondary Licenses", as
defined by the Mozilla Public License, v. 2.0.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@ -1,2 +1,24 @@
# nimbus.status.im
The website for the Nimbus Project
# Status Technical Docs
This repo hosts the code for both [docs.status.im](https://docs.status.im) on the `master` branch (which builds and serves through `gh-pages`), and [dev-docs.status.im](https://dev-docs.status.im) on the `develop` branch.
There is an `edit` button on each page, which will take you directly to the document you need to edit on the `develop` branch. We can then allow a large group of people to push directly to `develop` and show their changes on the staging site when asking for review, which should smooth out and speed up the process considerably for everyone. `master` is obviously protected, and will only have changes merged in from `develop` once accepted.
## Adding a New Page
If you want to add a page, rather than just edit, you'll need to make sure it appears on the sidebar and is accessible to everyone.
1. Add your page to `source/docs/<your_file_here>.md`
2. In `source/_data/sidebars.yml` add the appropriate text to the appropriate place.
3. In `themes/navy/languages/en.yml` edit the sidebars section to make sure that your new text in `sidebars.yml` is rendered correctly.
## Testing locally
Make sure you have node.js installed first.
1. Open Terminal and navigate to the project root directory,
2. Run `npm install`,
3. Run `npm run build`,
4. Go to `public/` directory,
5. Start a simple HTTP server serving files, for example: `python -m SimpleHTTPServer 8000`,
6. Open http://localhost:8000 in a browser.

33
_config.dev.yml Normal file
View File

@ -0,0 +1,33 @@
title: Status
subtitle: "A new kind of tool for a new kind of internet"
description: "Status is the mobile windown onto Ethereum, the platform with which we will onboard the first million users of a truly distributed web."
author: Status
language: en
timezone: UTC
url: https://dev-docs.status.im/
root: /
permalink: news/:year/:month/:day/:title/
archive_dir: news
code_dir: downloads/code
new_post_name: :year-:month-:day-:title.md # File name of new posts
post_asset_folder: true
per_page: 0
theme: navy
deploy:
type: git
branch: gh-pages
name: status-im-auto
repo: git@github.com:status-im/docs.status.im.git
theme_config:
favicon: img/logo-32.png
highlight:
enable: true
line_number: false
disqus_shortname: hexojs
twitter: ethstatus
github: staus-im

33
_config.yml Normal file
View File

@ -0,0 +1,33 @@
title: Nimbus
subtitle: "Light clients for everyone!"
description: "Nimbus is a research project and a client implementation for Ethereum 2.0 designed to perform well on embedded systems and personal mobile devices, including older smartphones with resource-restricted hardware."
author: Nimbus
language: en
timezone: UTC
url: https://nimbus.status.im/
root: /
permalink: news/:year/:month/:day/:title/
archive_dir: news
code_dir: downloads/code
new_post_name: :year-:month-:day-:title.md # File name of new posts
post_asset_folder: true
per_page: 0
theme: navy
deploy:
type: git
branch: gh-pages
name: status-im-auto
repo: git@github.com:status-im/nimbus.status.im.git
theme_config:
favicon: img/logo-32.png
highlight:
enable: true
line_number: false
disqus_shortname: hexojs
twitter: ethstatus
github: staus-im

34
package.json Normal file
View File

@ -0,0 +1,34 @@
{
"name": "hexo-site",
"version": "0.0.0",
"private": true,
"hexo": {
"version": "3.7.1"
},
"scripts": {
"clean": "rm -rf public/*",
"build": "hexo generate",
"eslint": "eslint .",
"deploy": "hexo deploy"
},
"dependencies": {
"cheerio": "^0.20.0",
"hexo": "^3.7.1",
"hexo-deployer-git": "^0.3.1",
"hexo-generator-archive": "^0.1.4",
"hexo-generator-feed": "^1.1.0",
"hexo-generator-sitemap": "^1.1.2",
"hexo-renderer-jade": "^0.4.1",
"hexo-renderer-marked": "^0.2.10",
"hexo-renderer-stylus": "^0.3.1",
"hexo-server": "^0.2.0",
"lodash": "^4.5.1",
"lunr": "^2.1.2"
},
"devDependencies": {
"del": "^3.0.0",
"eslint": "^4.3.0",
"eslint-config-hexo": "^2.0.0",
"rename": "^1.0.4"
}
}

2
scaffolds/page.md Normal file
View File

@ -0,0 +1,2 @@
title: {{ title }}
---

2
scaffolds/post.md Normal file
View File

@ -0,0 +1,2 @@
title: {{ title }}
---

161
scripts/helpers.js Normal file
View File

@ -0,0 +1,161 @@
/* global hexo */
'use strict';
var pathFn = require('path');
var _ = require('lodash');
var cheerio = require('cheerio');
var lunr = require('lunr');
var localizedPath = ['docs', 'api'];
function startsWith(str, start) {
return str.substring(0, start.length) === start;
}
hexo.extend.helper.register('page_nav', function() {
var type = this.page.canonical_path.split('/')[0];
var sidebar = this.site.data.sidebar[type];
var path = pathFn.basename(this.path);
var list = {};
var prefix = 'sidebar.' + type + '.';
for (var i in sidebar) {
for (var j in sidebar[i]) {
list[sidebar[i][j]] = j;
}
}
var keys = Object.keys(list);
var index = keys.indexOf(path);
var result = '';
if (index > 0) {
result += '<a href="' + keys[index - 1] + '" class="article-footer-prev" title="' + this.__(prefix + list[keys[index - 1]]) + '">'
+ '<i class="fa fa-chevron-left"></i><span>' + this.__('page.prev') + '</span></a>';
}
if (index < keys.length - 1) {
result += '<a href="' + keys[index + 1] + '" class="article-footer-next" title="' + this.__(prefix + list[keys[index + 1]]) + '">'
+ '<span>' + this.__('page.next') + '</span><i class="fa fa-chevron-right"></i></a>';
}
return result;
});
hexo.extend.helper.register('doc_sidebar', function(className) {
var type = this.page.canonical_path.split('/')[0];
var sidebar = this.site.data.sidebar[type];
var path = pathFn.basename(this.path);
var result = '';
var self = this;
var prefix = 'sidebar.' + type + '.';
_.each(sidebar, function(menu, title) {
result += '<strong class="' + className + '-title">' + self.__(prefix + title) + '</strong>';
_.each(menu, function(link, text) {
var itemClass = className + '-link';
if (link === path) itemClass += ' current';
result += '<a href="' + link + '" class="' + itemClass + '">' + self.__(prefix + text) + '</a>';
});
});
return result;
});
hexo.extend.helper.register('header_menu', function(className) {
var menu = this.site.data.menu;
var result = '';
var self = this;
var lang = this.page.lang;
var isEnglish = lang === 'en';
_.each(menu, function(path, title) {
if (!isEnglish && ~localizedPath.indexOf(title)) path = lang + path;
result += '<a href="' + self.url_for(path) + '" class="' + className + '-link">' + self.__('menu.' + title) + '</a>';
});
return result;
});
hexo.extend.helper.register('canonical_url', function(lang) {
var path = this.page.canonical_path;
if (lang && lang !== 'en') path = lang + '/' + path;
return this.config.url + '/' + path;
});
hexo.extend.helper.register('url_for_lang', function(path) {
var lang = this.page.lang;
var url = this.url_for(path);
if (lang !== 'en' && url[0] === '/') url = '/' + lang + url;
return url;
});
hexo.extend.helper.register('raw_link', function(path) {
return 'https://github.com/status-im/docs.status.im/edit/develop/source/' + path;
});
hexo.extend.helper.register('page_anchor', function(str) {
var $ = cheerio.load(str, {decodeEntities: false});
var headings = $('h1, h2, h3, h4, h5, h6');
if (!headings.length) return str;
headings.each(function() {
var id = $(this).attr('id');
$(this)
.addClass('article-heading')
.append('<a class="article-anchor" href="#' + id + '" aria-hidden="true"></a>');
});
return $.html();
});
hexo.extend.helper.register('lunr_index', function(data) {
var index = lunr(function() {
this.field('name', {boost: 10});
this.field('tags', {boost: 50});
this.field('description');
this.ref('id');
_.sortBy(data, 'name').forEach((item, i) => {
this.add(_.assign({ id: i }, item));
});
});
return JSON.stringify(index);
});
hexo.extend.helper.register('canonical_path_for_nav', function() {
var path = this.page.canonical_path;
if (startsWith(path, 'docs/') || startsWith(path, 'api/')) {
return path;
}
return '';
});
hexo.extend.helper.register('lang_name', function(lang) {
var data = this.site.data.languages[lang];
return data.name || data;
});
hexo.extend.helper.register('disqus_lang', function() {
var lang = this.page.lang;
var data = this.site.data.languages[lang];
return data.disqus_lang || lang;
});
hexo.extend.helper.register('hexo_version', function() {
return this.env.version;
});

19
scripts/tags.js Normal file
View File

@ -0,0 +1,19 @@
/* global hexo */
'use strict';
hexo.extend.tag.register('note', function(args, content) {
var className = args.shift();
var header = '';
var result = '';
if (args.length) {
header += '<strong class="note-title">' + args.join(' ') + '</strong>';
}
result += '<blockquote class="note ' + className + '">' + header;
result += hexo.render.renderSync({text: content, engine: 'markdown'});
result += '</blockquote>';
return result;
}, true);

1
source/CNAME Normal file
View File

@ -0,0 +1 @@
docs.status.im

View File

@ -0,0 +1 @@
en: English

6
source/_data/menu.yml Normal file
View File

@ -0,0 +1,6 @@
docs: /docs/
tutorials: /tutorials/
plugins: /plugins/
chat: /chat/
blog: /news/
wip: /wip/

15
source/_data/plugins.yml Normal file
View File

@ -0,0 +1,15 @@
- name: pluto
description: A grammar for data manipulation
link: https://status-im.github.io/pluto/
thumbnail: pluto.jpg
tags:
- grammar
- data
- name: collectibles-chat
description: Extension for sending NFTs through Chat
link: https://gist.github.com/janherich/92747e730b2e115bcbe145114d024e66
thumbnail: cryptokitty.jpg
tags:
- chat
- NFTs
- collectibles

5
source/_data/sidebar.yml Normal file
View File

@ -0,0 +1,5 @@
docs:
Nimbus:
introduction: nimbus.html
contributor_guide: contributor_guide.html

View File

@ -0,0 +1,28 @@
- name: Embark Vortex Template
description: A React Application showing what can be done with Vortex when using Embark.
link: https://github.com/Horyus/vortex-demo-embark/
tags:
- react
- name: Solidity Gas Golfing Contest Template
description: Boilerplate and tests for the first Solidity Gas Golfing Contest
link: https://github.com/embark-framework/sggc
tags:
- solidity
- tests
- fun
- name: Vyper Template
description: Template to demonstrate the use of the Vyper contracts
link: https://github.com/embark-framework/embark-vyper-template
tags:
- vyper
- contracts
- name: Bamboo Template
description: Template to demonstrate use of the Bamboo contracts
link: https://github.com/embark-framework/embark-bamboo-template
tags:
- bamboo
- contracts

View File

@ -0,0 +1,7 @@
- name: How to extend your DApp via chat in Status
description: Send collectibles directly in chat
link: /tutorials/extensions_tutorial_chat_command.html
tags:
- extensions
- chat
- Ethereum

26
source/_data/wip.yml Normal file
View File

@ -0,0 +1,26 @@
- name: PFS
description: Perfect Forward Secrecy and Group Chats
link: https://github.com/status-im/status-react/pull/5646
thumbnail: secrecy.jpg
tags:
- security
- key exchange
- privacy
- secrecy
- communication
- chat
- name: Mail Servers
description: Cryptoeconomics and Whisper Messages, oh my!
link: https://github.com/status-im/ideas/tree/master/ideas/280-discoverable-trusted-server-nodes
thumbnail: mail.jpg
tags:
- chat
- NFTs
- collectibles
- name: Add back an option to run LES on Ropsten
description: Make the Light Ethereum Service great again and let us run it on our phones!
link: https://github.com/status-im/status-react/pull/6007
thumbnail: light_client.jpg
tags:
- light client
- decentralization

View File

@ -0,0 +1,43 @@
title: Nimbus
---
# Status Partners with the team behind the programming language Nim
*To bolster research efforts for Nimbus a sharding client for Ethereum status.im have partnered with the core team developing the Nim programming language.*
On August 1st, we [posted](https://our.status.im/introducing-nimbus-an/) about our research initiative called Nimbus a Nim implementation of a sharding client for Ethereum. Today we are pleased to announce our partnership with the team behind the [Nim programming language](https://nim-lang.org/); lead by [Andreas Rumpf](https://github.com/Araq). This partnership will not only support our ongoing sharding research, but promote the continued development of the underlying open source language serving as the basis of our work. The more developed, documented, and robust Nim is, the more in depth our R&D can be. Andreas and team have a strong vision for the future of the programming language and we want to support them in their efforts. This marks our ongoing support for open source projects as well as our commitment to our sharding research.
## Why Nim
We chose to work in Nim because it is a lightweight and efficient programming language that suits itself well to resource restricted devices. It also allows us to better learn the Ethereum protocol, as well as attract highly specialized developers with a deep understanding and appreciation for the advanced language features, such as its powerful meta-programming capabilities that give us the flexibility to meet future needs of creating intuitive domain-specific languages tailored to specific facets of Ethereum 2.0 development.
Finally, the language is backed by a very strong team of talented developers. Andreas started Nim's development in 2006, only two years later the compiler reached the important milestone of being able to compile itself, a process that is known as "bootstrapping". For years now users are deploying Nim applications in production.
Nim can be summarised as combining the very best aspects of the well known programming languages C, Python and Lisp: Nim is as fast as C, as readable as Python and as extensible as Lisp. This aspect makes Nim unique in the large landscape of existing programming languages.
Nim was envisioned from the start as a simple language with a focus on metaprogramming and with Status' support Nim's metaprogramming will not only cover its syntactic elements but also its semantics and its type system.
## The Partnership
Status will support Andreas and the Nim team with funding and resources needed to stay focused on the development of the programming language. The Nim team will add at least 2 paid full-time developers! They will fix bugs, respond to issues, and of course develop the compiler, the standard library as well as its tooling. So far, the language has been supported by the open source community and generous volunteers and donors who believe in the work. This has created a unique commitment to the project by all those involved but has meant a lack of dedicated and focused computer scientists solely focused on its development.
The Status Nimbus team is very familiar with Nim as core Status contributors [Dustin Brody](https://github.com/tersec), [Eugene Kabanov](https://github.com/cheatfate), [Jacek Sieka](https://github.com/arnetheduck), [Mamy Ratsimbazafy](https://github.com/mratsim), [Ryan Lipscombe](https://github.com/coffeepots), [Yuriy Glukhov](https://github.com/yglukhov) and [Zahary Karadjov](https://github.com/zah) are active contributors to the Nim ecosystem. There is already deep integration and collaboration between the Nimbus and Nim teams and this partnership will see even further collaboration and support of each other's work.
## A Look Ahead at the Roadmap
With Status' sponsorship, the Nim team has come up with an ambitious roadmap which makes Nim one of the most exciting languages to watch in the following years. Nim version 1.0 is the long overdue commitment to a stable language core that will preserve backwards compatibility for years to come. There are no hard deadlines to a release date, but a detailed milestone tracking all the issues that need to be resolved for v1.0 is available [here](https://github.com/nim-lang/Nim/milestone/2).
## Beyond the Partnership
In addition to the sponsorship of Nim's ongoing core development there will be a "grants program for Nim". Inspired by Google's Summer of Code, developers will be hired to work on specific Nim-related projects.
Examples for grants:
* Add [Language Server Protocol](https://langserver.org/) support to nimsuggest, for better editor and IDE integration.
* Improve Nim's package manager, "Nimble", to support reproducible builds.
* Improve Nim's tooling so that the result of macro expansions becomes easier to look at.
We look forward to working with Andreas and the team to push the development of Nim.
For more information about Nimbus, join us on [Riot](https://chat.status.im/) or [Github](https://github.com/status-im/nimbus).
You can learn more and get involved with Nim on [Github](https://github.com/nim-lang).

12
source/browserconfig.xml Normal file
View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<browserconfig>
<msapplication>
<tile>
<square70x70logo src="/icon/mstile-70x70.png"/>
<square150x150logo src="/icon/mstile-150x150.png"/>
<square310x310logo src="/icon/mstile-310x310.png"/>
<wide310x150logo src="/icon/mstile-310x150.png"/>
<TileColor>#ff9c00</TileColor>
</tile>
</msapplication>
</browserconfig>

9
source/chat/index.md Normal file
View File

@ -0,0 +1,9 @@
title: Chat
layout: chat
---
<p>
Join us at <a href="https://gitter.im/embark-framework/Lobby">gitter.im/embark-framework/Lobby</a>
</p>
<iframe src="https://gitter.im/embark-framework/Lobby/~embed" style="width: 100%; height: 800px; border: 1px solid black"></iframe>

View File

@ -0,0 +1,7 @@
---
id: contributor_guide
title: Contributor Guide
---
# How To Get Involved In Research At Status

350
source/docs/nimbus.md Normal file
View File

@ -0,0 +1,350 @@
---
id: nimbus
title: Nimbus
---
## An Ethereum 2.0 Sharding Client
Draft 2018-05-22
## OVERVIEW
Nimbus aims to be a [sharding](https://github.com/ethereum/wiki/wiki/Sharding-FAQ) client implementation for the Ethereum Blockchain Application Platform. Because the largest deployment of Ethereum will potentially be on embedded systems, Nimbus will be designed to perform well on IoT and personal mobile devices, including older smartphones with resource-restricted hardware. The extensible, configurable, and modular design of Nimbus will make it production ready for Web 3.0 and will ensure that it can be supported and maintained across all goals of Ethereum 2.0.
## GOALS
1. Create an Ethereum implementation suitable for resource-restricted devices.
1. Create an implementation team for the [Applied Research Objectives](https://hackmd.io/s/HkLkj55yb#objectives-in-applied-research) of [Ethereum Research](http://ethereumresearch.org/) (aka Ethereum Asia Pacific Limited), with focus on the following:
1. Proof of Stake (PoS)
1. Sharding
1. Stateless Clients
1. LES2
1. eWASM
1. Close the gap between research modeling and production.
1. Pledge to participate in, help implement, and conform to the [Ethereum Improvement Proposal](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1.md).
1. Implement permissive licensing.
1. Focus on production-ready [Web 3.0](https://medium.com/@matteozago/why-the-web-3-0-matters-and-you-should-know-about-it-a5851d63c949) Stack ([Whisper](https://github.com/ethereum/wiki/wiki/Whisper), [PSS](https://github.com/nolash/psstalk/blob/master/README.md), and [Swarm](https://swarm-guide.readthedocs.io/en/latest/introduction.html)) and its ongoing research and development.
1. Focus on marketing and promotion to address community concerns on scalability and to bolster Ethereum's dominant mindshare.
## REQUIREMENTS
[Nim](https://nim-lang.org/) is an efficient, general-purpose systems programming language with a Python-like syntax that compiles to C. Nim will allow us to implement Ethereum rapidly and to take advantage of the mature C-language tooling: in compilation of machine code, and in the analysis of static code.
With Ethereum research currently modeled in Python, the end result of implementing in Nim should be code that:
1. Enables us to easily bring research into production
1. Has a high degree of reasonability for researchers
1. Is performant in production
The core contributors and Nim community have been very supportive and enthusiastic for the project.
## Development on Embedded Systems
We believe that the largest successful deployment of Ethereum will reside on embedded systems: IoT devices and mobile personal devices, such as smartphones. Although Nimbus will support archival nodes, its first implementation will be as a light client, with focus on Proof of Stake and sharding.
Existing implementations of Ethereum have focused on desktop computers and servers. These implementations have played a major role in the initial success of Ethereum, and they are suitable for full and archival nodes. However, their deployment onto embedded systems has been an afterthought.
In addition, throughout the development of Status, we have found that the dominant Ethereum implementations, Geth and Parity, are unsuitable for our target platform unless they are profiled and optimised (in progress).
During the deployment of Status among 40,000 alpha testers, we found that a significant portion (23.6%) of users were still running old mobile devices. In addition, recently discovered [Spectre vulnerabilities](https://en.wikipedia.org/wiki/Spectre_(security_vulnerability)) have led to an increase in the demand for open processors. For these reasons, we propose a self-imposed constraint and a requirement that Status perform well on the following:
1. 2014 [SoC](https://en.wikipedia.org/wiki/System_on_a_chip) architectures, such as the [Cortex-A53](https://developer.arm.com/products/processors/cortex-a/cortex-a53) (Samsung Note 4 & [Raspberry Pi 3](https://www.raspberrypi.org/products/raspberry-pi-3-model-b/)) and the Apple A8 (iPhone 6)
1. [MIPS](https://en.wikipedia.org/wiki/MIPS_architecture)-based architectures, such as the [Onion Omega2](https://onion.io/omega2/)
1. Open-source processors, such as [RISC-V](https://en.wikipedia.org/wiki/RISC-V)
When the 2020 scalability goal is fully realised, this constraint will help ensure that Ethereum runs performantly on resource-restricted hardware that is at least 6 years old.
## Extensible, Configurable, and Modular Design
The application architecture should have modular abstractions for the following:
1. Networking layer
1. Sub-protocols
1. Consensus
1. Privacy
1. Database
1. Virtual Machine
In addition, the implementation must pass the [common tests for all Ethereum implementations](https://github.com/ethereum/tests).
## Commitment to Ethereum Improvement Proposals (EIP)
Nimbus is committed to open standards and to maintaining consensus with other Ethereum-compliant implementations. The development of Nimbus and the changes in its protocols will follow [the EIP process](https://github.com/ethereum/EIPs/).
## User Experience
Access to shards and mainchain state should be fast and responsive, the application binary should be lightweight in terms of the resources used, and the client should be dependable and robust against crashes.
## Licensing: MIT, Apache v2.0
We propose that Nimbus be licensed under Apache 2.0 and MIT. A permissive licensing structure with patent protection would
1. Ensure the compatibility with GPL 2.0 and LGPL 2.0
1. Extend the reach of the Ethereum platform
1. Foster the highest degree of adoption by governments and enterprise
One unsolved hurdle faced by Status is the [LGPLv3](https://opensource.org/licenses/LGPL-3.0) license, whose requirement for runtime linking is incompatible with major mobile app distribution channels, such as the App Store of Apple Inc.
Numerous requests for a static-linking exception have gone unanswered. This has blocked the deployment of any legally sound, full Ethereum client on popular channels for distribution of mobile devices. LGPL also prevents the adoption of Ethereum on closed hardware platforms, such as XBox. Still, we remain optimistic this issue will be rectified.
## Biweekly Development Reports, Technical Writing, and Promotion
In addition to the implementation, Nimbus will have a biweekly process for reporting development-related updates. A technical writer will document implementation efforts and translate ongoing research discussions into articles easily understood by the community.
Within the community at large, we will promote Ethereum as the leader of scalable public blockchains.
## Bounty-Based Development
To entice the community to accelerate the development, we will attach bounties to and **[publish](https://openbounty.status.im/app#/) **the tasks that can be self-contained and defined clearly.
## TEAM
In addition to a dedicated Nimbus team, Status as an organization will support development through our expertise in smart contracts, Ethereum and mobile development, and marketing and user experience research.
### Alex Mandel
Alex is a technical communicator with extensive experience in IT and biotechnology. He has honed his skills at several leading IT companies whose success is intimately tied to the quality of their documentation. Alex's passion is to present complex ideas with clarity, conciseness, and precision of the kind that inspires action. His interests include emerging, potentially disruptive technologies; he can't wait to see blockchain make the world a better place.
### Eugene Kabanov
Eugene has deep background and interest in systems programming, reverse engineering, development of high-load and high-performance networking services, and information security. He joined Nim community 3 years ago and has contributed to Nim networking, threading, and multiprocessing.
### [Jacek Sieka](https://www.linkedin.com/in/sieka/)
With a keen interest and background in peer-to-peer applications and compilers, Jacek joined Status as Head of Research, coming most recently from the high-frequency trading world. Fun hobby projects from the past include DC++ (a file sharing app), nlvm (an llvm-based Nim compiler) and more!
### [Mamy Ratsimbazafy](https://www.linkedin.com/in/mamyratsimbazafy)
Mamy joined Status as a Nim developer in the research team. After a career in leading American and French banks and non-profits, he decided that tech, blockchain and AI will eat the world. On the side, instead of mining he is teaching deep learning tricks to his GPU.
### Ryan Lipscombe
Fascinated by the transformative potential of blockchain and distributed systems, Ryan joined Status research as a Nim developer. His career spans from data science to embedded systems and has been part of the Nim community since 2015, working on database components and virtual machines for evolutionary systems.
### Yuriy Glukhov
Yuriy has deep passion for new technologies and keen interest in many areas of IT. He was one of the first CTOs to successfully use Nim in a commercial project.
### [Zahary Karadjov](https://www.linkedin.com/in/zahary/)
Zahary is member of the core compiler team of the Nim programming language. He joined the project 5 years ago, hoping that one day Nim will surpass C++ in usage and popularity. His career started as a game engine developer, where he learned how to push the modern hardware to its limits, but eventually he went on to become the CTO of a company shipping an IoT device, a SaaS platform for web publishers and even a defunct Chromium fork.
## MILESTONES
Timelines are approximate and affected by research, implementation considerations, and revisions made while the team produces a detailed implementation timeline.
## Formation of the Team, and Detailed Project Implementation Timeline
### January - February 2018
### Completed:
1. Form the initial team
1. Define the project's scope, architecture, and implementation timelines
### Goals:
1. Hire core contributors:
1. Five (5) full-time core contributors
1. Up to five (5) part-time core contributors
1. One (1) Technical Program Manager
1. One (1) Technical Writer
1. Up to ten (10) full-time core contributors by 2019
1. Create a detailed timeline for implementing the project as a deliverable
## Compatibility with Ethereum 1.0
### January - November 2018
As an initial goal, we will focus on implementing all components required for interoperability with the Ethereum ecosystem. We will publish these components as independently reusable modules and libraries.
However, before starting the implementation in Nim, we will develop an understanding of the existing implementations of Ethereum: [Go Ethereum](https://github.com/ethereum/go-ethereum/), [Pyethereum](https://github.com/ethereum/pyethereum), [Py-EVM](https://github.com/ethereum/py-evm), and [Parity](https://github.com/paritytech/parity).
The code will consist of independently reusable libraries that have the same permissive license as that of Nimbus itself:
1. [RLP encoding and decoding](https://github.com/status-im/nim-rlp)
1. [Handling of the state database and users' keyfiles](https://github.com/status-im/nim-eth-keyfile/blob/master/README.md)
1. Connecting to the Ethereum network
1. Ethereum Patricia Trees
1. [RLPx](https://github.com/ethereum/devp2p/blob/master/rlpx.md#introduction) sub-protocols
1. Ethereum [Ethash](https://github.com/ethereum/wiki/wiki/Ethash) function
1. Implementation of EVM
### Goals:
1. Nimbus is able to
1. Sync with the latest blockchain, from scratch
1. Accurately execute the entire transaction history
1. The team is familiar with all codebases used to implement Ethereum.
1. The team understands the main themes from [ethresear.ch](https://ethresear.ch/) and actively participates in EIPs.
## Sharding Phase 1
### July - November 2018
While implementing compatibility with Ethereum 1.0, we will gain early experience with the complete setup of sharding. As a result:
1. The client will implement the core features necessary for sharding Phase 1.
1. The team will actively participate in sharding-related EIPs.
### Goal:
The architecture of Nimbus supports sharding nodes.
## Auditing of Beta and Security
### November 2018 - March 2019
An independent security partner will continuously perform a security audit on the Nimbus codebase. We will also adopt frequent reviews of code, testing with automated fuzzing frameworks, and other practices that enhance security. In addition, we will develop a Nim-optimized fuzzing framework and will release it for use by the community at large.
### Goal:
Deliver a security-audited, production-ready client.
## Implementation of Whisper and PSS
### July - November 2018
We will set and advertise the bounties as soon as the P2P layer gets implemented. The core team will start working on this in July, unless already completed.
### Goals:
1. Make Nimbus the leading platform for conducting research into the scalability aspects of Whisper and PSS. We consider this a key requirement for implementing a fully decentralised Status messaging platform within the Ethereum network.
1. Deliver easy-to-use APIs for conducting large-scale and small-scale experiments within the network.
## Support for LES
### July - November 2018
We will optimize the architecture of Nimbus for implementing the [LES protocol](https://github.com/ethereum/wiki/wiki/Light-client-protocol). We will also optimize all internal state-handling operations such that they work efficiently and asynchronously. This will enable on-demand fetching of data from the network. This will also ensure that Nimbus runs with a high degree of concurrency and that the client UI is responsive.
### Goals:
1. Enable a Light Mode switch in Nimbus.
1. Successfully operate Nimbus in a mobile environment, without relying on a proxy service.
## Sharding Phase 2
### November 2018 - July 2019
We will focus on achieving compatibility with all other clients. In addition, we will implement an [eWASM](https://github.com/ewasm/design/blob/master/README.md) runtime and will add Nim as one of the languages that can target the new VM.
### Goals:
Implement the following in Nim:
1. CLI tools and APIs for running Phase 2 nodes and for interacting with the Validator Manager Contract (VMC)
1. The development tools that will target the eWASM runtime environment
## Casper Implementation
### December 2018 - February 2019
The team will closely follow the development of [Casper](https://blockgeeks.com/guides/ethereum-casper/) and will try to achieve and maintain compatibility with the existing Casper deployments.
## Implementation of Swarm
### January - July 2019
We will set and advertise the bounties as soon as the P2P layer gets implemented. The core team will start working on this in January, unless already completed.
### Goals:
Implement the following:
1. Ability to embed Nimbus into applications that deliver the complete Web 3.0 experience
1. Support for the [Ethereum Name Service](https://ens.domains/)
1. Support for a virtual file-system interface for accessing web content published on Swarm
1. Reusable APIs for publishing and obtaining content from Swarm
## Sharding Phase 3
### March - August 2019
We will leverage our LES-optimized architecture to deliver a fully stateless client optimized for mobile devices.
### Goals:
Implement support for the following:
1. Always-on operations on mobile devices, without disrupting the battery life or inducing significant bandwidth charges
1. Running stateless executor nodes in deployments of headless servers
## Ongoing Improvements in Sharding
### August - December 2019
### Goals:
1. Become one of the leading production-ready sharding implementations in the Ethereum ecosystem.
1. Take active part in the effort to specify the new programming models required for cross-shard interactions.
1. Provide an ongoing research into the applicability and performance characteristics of all super-quadratic sharding designs in a mobile environment.
# ETYMOLOGY
Nimbus, a reference to:
* A different kind of "dark cloud" computing
* Spiritual symbolism of sanctity and holiness
* Nim, the language it will be written in
* A Bus in computing architecture
# Ideas Considered for Implementation
1. Create [devp2p](https://github.com/ethereum/wiki/wiki/%C3%90%CE%9EVp2p-Wire-Protocol) and an abstraction to allow for [libp2p](https://github.com/Agorise/c-libp2p), [Node Discovery](https://github.com/ethereum/wiki/wiki/Node-discovery-protocol), [RLP encoding](https://github.com/ethereum/wiki/wiki/RLP), [Modified Patricia Merkle Tree](https://easythereentropy.wordpress.com/2014/06/04/understanding-the-ethereum-trie/), [bigint's](https://github.com/def-/nim-bigints), [keccak256](https://github.com/ethereum/eth-hash), and [secp256k1](https://en.bitcoin.it/wiki/Secp256k1).
1. Create an abstraction that would allow sub-protocols: ETH, [SHH](https://gist.github.com/gluk256/9812e59ed0481050350a11308ada4096), [PSS](https://gist.github.com/zelig/d52dab6a4509125f842bbd0dce1e9440), [Swarm](https://github.com/ethersphere/swarm), [LES](https://github.com/ethereum/wiki/wiki/Light-client-protocol), [Stateless Clients](https://nordicapis.com/defining-stateful-vs-stateless-web-services/), Sharding, [Plasma](https://plasma.io/), [State Channels](https://blog.stephantual.com/what-are-state-channels-32a81f7accab). For now, we can ignore all but LES and Sharding.
1. DB: Most implementations of Ethereum use [LevelDB](https://github.com/google/leveldb). Parity has a DB abstraction and uses [HashDB](https://github.com/NPS-DEEP/hashdb/wiki) and [RocksDB](https://rocksdb.org/docs/getting-started.html).
1. RocksDB is an interesting choice, because it solves the issues that have troubled leveldb. Rocksdb also has a [light version](https://github.com/facebook/rocksdb/blob/master/ROCKSDB_LITE.md) for mobile usage; it's in C++, which would be an issue only if we go for pure C.
1. [EVM](https://github.com/pirapira/awesome-ethereum-virtual-machine): basic VM, [eWASM](https://github.com/ewasm/design) ([Hera](https://github.com/ewasm/hera) is also in C++)
1. IPC/RPC abstraction, [external API methods](https://github.com/ethereum/wiki/wiki/JSON-RPC) that can be consumed by application bindings: react-native module, IPC, RPC HTTP server, or web sockets
1. Encryption library is a little unclear. [Libgcrypt](https://www.gnupg.org/software/libgcrypt/index.html) has everything we need but might be problematic from the standpoint of LGPL licensing. If we have an abstraction for Libgcrypt, we could use it now and swap it out later for something more permissive.
1. Alternatively, we could roll out our own library. However, implementing our own encryption would not be a great idea, and our version would have to be audited and tested. Suggestions are welcome.
1. Monitor [ethereum/py-evm](https://github.com/ethereum/py-evm/tree/sharding). Connect with Chang-Wu Chen, Hsiao-Wei Wang, and anyone else working on sharding.
# Resources
1. [Awesome Ethereum Virtual Machine](https://github.com/pirapira/awesome-ethereum-virtual-machine)
1. [Detailed introduction to the sharding proposal](https://github.com/ethereum/sharding/blob/develop/docs/doc.md)
1. [Sharding FAQ](https://github.com/ethereum/wiki/wiki/Sharding-FAQ)
1. [Ethereum 2.0: A presentation by Vitalik Buterin at BeyondBlock Taipei 2017](https://www.youtube.com/watch?v=9RtSod8EXn4&feature=youtu.be&t=11493)
1. [The Stateless Client Concept](https://ethresear.ch/t/the-stateless-client-concept/172)
1. [A Modest Proposal for Ethereum 2.0: A presentation by Vitalik Buterin at devcon three](https://youtu.be/hAhUfCjjkXc)
1. [Python Implementation of the EVM](https://github.com/ethereum/py-evm/blob/master/README.md)
1. [Discussion about sharding](https://ethresear.ch/c/sharding)
1. [Discussion on Casper, scalability, abstraction and other low-level protocol research topics](https://gitter.im/ethereum/research)
1. [ethereum/py-evm](https://gitter.im/ethereum/py-evm)
1. [Ethereum Sharding: Overview and Finality](https://medium.com/@icebearhww/ethereum-sharding-and-finality-65248951f649)
1. [Sharding - Mind Map](https://www.mindomo.com/mindmap/sharding-d7cf8b6dee714d01a77388cb5d9d2a01)
1. [On Settlement Finality](https://blog.ethereum.org/2016/05/09/on-settlement-finality/)
1. [Casper contract and full POS](https://ethresear.ch/t/casper-contract-and-full-pos/136/2)
1. [Ethereum Casper 101](http://notes.eth.sg/MYEwhswJwMzAtADgCwEYBM9kAYBGJ4wBTETKdGZdXAVmRvUQDYg=?view#)
1. [ethersphere/swarm, Light mode of operation](https://github.com/ethersphere/swarm/wiki/Light-mode-of-operation)

View File

@ -0,0 +1,6 @@
layout: plugins
title: Extensions
data: plugins
partial: plugin
comments: false
---

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

3
source/index.md Normal file
View File

@ -0,0 +1,3 @@
title: Status Docs
layout: index
---

1
source/robots.txt Normal file
View File

@ -0,0 +1 @@
User-agent: *

View File

@ -0,0 +1,6 @@
layout: templates
title: Templates
data: templates
partial: template
comments: false
---

View File

@ -0,0 +1,181 @@
---
id: extensions_tutorial_chat_command
title: Extension chat command tutorial
---
# Write a chat command
One of the main use case for extensions is to add new chat commands. This tutorial will go step by step through the creation and deployment of a chat command allowing to send NFTs.
## Add meta data
First step is to create the skeleton extension with some relevant metadata:
```clojure
{meta {:name "My command name"
:description "My command description"
:documentation "Some more details can go there"}}
```
Metadata will be displayed to the end user before installing an extension.
## Define hook entry point (chat command)
Hooks identify what part of status will be extended. Each hook has a unique identifier and a set of key/value elements specific to this hook.
An extension can implement several hooks.
In this tutorial a chat command is created: it's specific id is `collectible` and the generic hook type for a chat command is `commands`.
A `command` hook requires the following properties to be set:
* scope
* preview and short-preview
* parameters
### Scope
Scope can be any combination of:
* personal-chats
* group-chats
* public-chats
Here we will demonstrate `personal-chats`.
```clojure
{hooks/commands.collectible
{...
:scope #{:personal-chats}} ;; Could be #{:personal-chats :group-chats}
```
### Previews
`Previews` are used to display the result of a command execution in a chat.
`Short previews` will be displayed as last message in the chat item of the Home tab of Status.
Both previews must point to definition of UI in [Hiccup syntax](https://github.com/weavejester/hiccup/wiki/Syntax) using a combination of views, queries and events supported by status host.
More details can be found [here](https://status-im.github.io/pluto/docs/concepts/Anatomy.html).
Previews receive data from status encapsulating the parameters provided by the end user and some relevant contextual information. Those can be accessed in a view using the `properties` reference.
Our short preview definition:
```clojure
{views/short-preview
(let [{{{symbol :symbol} :params} :content outgoing :outgoing} properties]
[view {:flex-direction :row
:align-items :flex-start}
[text (if outgoing "Sent " "Received ")]
[text symbol]])}
```
`properties` data is accessed using [destructuring](https://status-im.github.io/pluto/docs/concepts/View.html#destructuring).
`text` and `view` are view elements available for all hosts.
`if` is a block providing conditional logic.
Our preview definition:
```clojure
{views/preview
(let [{{{symbol :symbol token :token tx-hash :tx-hash} :params} :content outgoing :outgoing timestamp-str :timestamp-str} properties
collectible-token [get-collectible-token {:symbol symbol :token token}]
[view {:flex-direction :column
:align-items :flex-start}
[status/nft-token collectible-token]
[view {:color (if outgoing "#707caf" "#939ba1")
:margin-top 6
:font-size 12
:flex-direction :row}
[text "Sent at "]
[text timestamp-str]]
[status/send-status {:tx-hash tx-hash :outgoing outgoing}]])}
```
`status/nft-token` and `status/send-status` are view element specific to status.
`[status/get-collectible-token {:symbol symbol :token token}]` is a query giving access to details for a specific collectible.
### Parameters
The NFT chat command has 2 required parameters: the NFT type and the specific NFT you want to exchange.
Both will use Status UI components to provide a nice visual selection experience.
A parameter is identified by its `id` and must define a `type` and a `placeholder` (any string).
In this tutorial `:text` and `:number` will be used.
`suggestions` can be optionally provided and must point to a `view`.
```clojure
{hooks/commands.collectible
{...
:parameters [{:id :symbol
:type :text
:placeholder "Collectible symbol"
:suggestions status/asset-selector}
{:id :token
:type :number
:placeholder "Collectible token"
:suggestions status/token-selector}]}}
```
## Deploy
Extensions are identified by a URI and can be loaded in status via a universal link.
Currently only GitHub gist is supported as provider.
A universal link pointing to an extension would then look like: `https://get.status.im/extension/gist@janherich/92747e730b2e115bcbe145114d024e66`
## Use
The simplest option is to scan a QR code pointing to your extension. You can also navigate to status user profile and open the `Extensions` item in the `Advanced` section. This option is only available in developer mode.
Once loaded, details about an extension are available. An extension can then be installed. Once installed all hooks are `active`. Any extension can then be `deactivated` or re-`activated`. Associated hooks will then be removed/added from Status.
You can now use your new extension from within a 1-1 chat!
![collectibles in chat](/tutorials/thumbnails/collectible-chat-command.gif)
## Full extension code
```clojure
{meta {:name "Collectibles"
:description "Demonstration of collectible command"
:documentation "Some nice documentation"}
views/preview
(let [{{{symbol :symbol token :token tx-hash :tx-hash} :params} :content outgoing :outgoing timestamp-str :timestamp-str} properties
collectible-token [get-collectible-token {:symbol symbol :token token}]
[view {:flex-direction :column
:align-items :flex-start}
[status/nft-token collectible-token]
[view {:color (if outgoing "#707caf" "#939ba1")
:margin-top 6
:font-size 12
:flex-direction :row}
[text "Sent at "]
[text timestamp-str]]
[status/send-status {:tx-hash tx-hash :outgoing outgoing}]])
views/short-preview
(let [{{{symbol :symbol} :params} :content outgoing :outgoing} properties]
[view {:flex-direction :row
:align-items :flex-start}
[text (if outgoing "Sent " "Received ")]
[text symbol]])
hooks/commands.collectible
{:scope #{:personal-chats}
:preview preview
:short-preview short-preview
:parameters [{:id :symbol
:type :text
:placeholder "Collectible symbol"
:suggestions status/asset-selector}
{:id :token
:type :number
:placeholder "Collectible token"
:suggestions status/token-selector}]}}
```

View File

@ -0,0 +1,7 @@
layout: tutorials
title: Tutorials
data: tutorials
partial: tutorial
comments: false
---

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 MiB

6
source/wip/index.md Normal file
View File

@ -0,0 +1,6 @@
layout: wip
title: WIP Features
data: wip
partial: wip
comments: false
---

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

View File

@ -0,0 +1,26 @@
menu:
docs: Docs
news: News
plugins: Plugins
themes: Themes
search: Search
chat: Chat
blog: Blog
tutorials: Tutorials
index:
get_started: Get started
page:
contents: Contents
back_to_top: Back to Top
improve: Improve this doc
prev: Prev
next: Next
last_updated: "Last updated: %s"
sidebar:
docs:
Nimbus: Nimbus
introduction: What Is Nimbus?
contributor_guide: How Can I Contribute?

View File

@ -0,0 +1,19 @@
{% set page.title = 'News' %}
<div id="content-wrap">
<div class="wrapper">
<div class="inner">
{% for post in page.posts %}
{% if loop.index == 1 %}
{{ partial('partial/post', {post: post}) }}
{% else %}
<article class="article post archive-post" itemscope itemtype="http://schema.org/Article">
<a class="archive-post-link" href="{{ url_for(post.path) }}">
<strong class="archive-post-title" itemprop="name">{{ post.title }}</strong>
<span class="archive-post-date">{{ time_tag(post.date) }}</span>
</a>
</article>
{% endif %}
{% endfor %}
</div>
</div>
</div>

View File

@ -0,0 +1,7 @@
<div id="content-wrap">
<div class="wrapper">
<div class="inner">
{{ page.content }}
</div>
</div>
</div>

View File

@ -0,0 +1,190 @@
<div class="home-cover">
<div class="header">
<div class="header-left">
<div class="logo-wrap">
<a class="logo" href="/"></a>
</div>
<ul class="main-nav">
<li><a href="/docs/nimbus.html">Docs</a></li>
<li><a href="/docs/contributor_guide.html">Contribute</a></li>
<li><a href="#team">Team</a></li>
<li><a href="https://our.status.im/tag/research" target="_blank">Blog</a></li>
</ul>
</div>
<div class="secondary-nav">
<div id="search-input-wrap">
<div id="search-input-icon">
<i class="fa fa-search"></i>
</div>
<input type="search" id="search-input" placeholder="Search...">
</div>
<span><a href="http://get.status.im/chat/public/status" class="button button--secondary">Status Public Chat</a></span>
<span class="social-link social-link--twitter"><a href="https://twitter.com/ethstatus" target="_blank"></a></span>
<span class="social-link social-link--gitter"><a href="https://gitter.im/status-im/nimbus" target="_blank"></a></span>
<span class="social-link social-link--github"><a href="https://github.com/status-im" target="_blank"></a></span>
</div>
</div>
<div class="intro">
<h1>Nimbus</h1>
<p>Nimbus is a research project and a client implementation for Ethereum 2.0 designed to perform well on embedded systems and personal mobile devices, including older smartphones with resource-restricted hardware.</p>
<div class="intro-buttons">
<a class="button button--main" href="/docs/">READ THE DOCS</a>
<a class="button button--secondary" href="/docs/contribute.html">GET INVOLVED</a>
</div>
</div>
</div>
<div class="home-wrap">
<div class="section-header section-header--main">
<h2>Future Plans</h2>
<p>The Nimbus team kicked off research in March 2018 and has been steadily making progress on X,Y,Z. Below is a list of activities the team will be working on.
</p>
<span><a href="/docs/">See all the documentation here</a></span> <a href="/docs/"><img src="../img/arrow_orange.png" /></a>
<div class="work-item">
<div class="work-item-left">
<h2>Work#1</h2>
<p>Simple description of work.</p>
<img class="work-item-image work-item-image-right" src="../img/padlock.svg" />
</div>
</div>
<div class="clear"></div>
<div class="work-item">
<img class="work-item-image" src="../img/padlock.svg" />
<div class="work-item-right">
<h2>Work#2</h2>
<p>Simple description of work.</p>
</div>
</div>
<div class="clear"></div>
<div class="work-item">
<div class="work-item-left">
<h2>Work#3</h2>
<p>Simple description of work.</p>
<img class="work-item-image work-item-image-right" src="../img/padlock.svg" />
</div>
</div>
<div class="clear"></div>
<div class="work-item">
<img class="work-item-image" src="../img/padlock.svg" />
<div class="work-item-right">
<h2>Work#4</h2>
<p>Simple description of work.</p>
</div>
</div>
<div class="clear"></div>
</div>
<div class="sections">
<div class="inner-header">
<h2>Contribute</h2>
<p>Nimbus is an open source initiative in which anyone can get involved. There are a number of ways to contribute:</p>
</div>
<div class="contribute-wrap">
<div class="contribute">
<h3>Join the Team</h3>
<p>We are always looking for passionate and talented individuals to join our team.<p>
<a href="https://status.im/open-positions.html">See list of open roles</a>
<span><a href="https://status.im/open-positions.html"><img src="../img/arrow_ogn.png" /></a></span>
</div>
<div class="contribute">
<h3>Work on Bounties</h3>
<p>As an open source project, anyone anywhere can get involved and contribute code.<p>
<a href="https://gitcoin.co/explorer?keywords=nimbus&order_by=-web3_created">See open bounties</a>
<span><a href="https://gitcoin.co/explorer?keywords=nimbus&order_by=-web3_created"><img src="../img/arrow_ogn.png" /></a></span>
</div>
<div class="contribute">
<h3>Join the Conversation</h3>
<p>We are an open community and happy to answer your questions and help you learn more about Nimbus.<p>
<a href="https://get.status.im/chat/public/nimbus">Join us in Status</a>
<span><a href="https://get.status.im/chat/public/nimbus"><img src="../img/arrow_ogn.png" /></a></span>
</div>
</div>
<div class="inner-header">
<a name="team"></a>
<h2>Team</h2>
<p>Were a diverse group of researchers, engineers, and scientists with a passion for web3 technologies. We work primarily in Nim</p>
</div>
<div class="contribute-wrap">
<div class="contribute team">
<h3>Jacek Sieka</h3>
<p>Engineer<p>
<img src="../img/ellipse.png" />
</div>
<div class="contribute team">
<h3>Zahary Karadjov</h3>
<p>Engineer<p>
<img src="../img/ellipse.png" />
</div>
<div class="contribute team">
<h3>Yevhen Kabanov</h3>
<p>Engineer<p>
<img src="../img/ellipse.png" />
</div>
<div class="contribute team">
<h3>Mamy Ratsimbazafy</h3>
<p>Engineer<p>
<img src="../img/ellipse.png" />
</div>
<div class="contribute team">
<h3>Andreas Rumpf</h3>
<p>Engineer<p>
<img src="../img/ellipse.png" />
</div>
<div class="contribute team">
<h3>Yuriy Glukhov</h3>
<p>Engineer<p>
<img src="../img/ellipse.png" />
</div>
<div class="contribute team">
<h3>Dustin Brody</h3>
<p>Engineer<p>
<img src="../img/ellipse.png" />
</div>
<div class="contribute team">
<h3>Ryan Lipscombe</h3>
<p>Engineer<p>
<img src="../img/ellipse.png" />
</div>
<div class="contribute team">
<h3>Yuriy Glukhov</h3>
<p>Engineer<p>
<img src="../img/ellipse.png" />
</div>
</div>
<div class="inner-header">
<h2>Read our Blog</h2>
<p>Check out the latest Nimbus news and blog posts:</p>
</div>
<div class="contribute-wrap">
<div class="contribute blog">
<h3>Status Partners with the team behind the programming language Nim</h3>
<p>To bolster research efforts for Nimbus a sharding client for Ethereum status.im have partnered with the core team developing the Nim programming language...<p>
<a href="https://our.status.im/status-partners-with-the-team-behind-the-programming-language-nim/">Read More</a>
<span><a href="https://our.status.im/status-partners-with-the-team-behind-the-programming-language-nim/"><img src="../img/arrow_ogn.png" /></a></span>
</div>
<div class="contribute blog">
<h3>Ethereum Client Developers Conference Retrospective</h3>
<p>A large part of what makes possible "magic internet money" occurs deep down where most people will never see it - in the actual clients. We hosted all the developers in Berlin. Find out what went down...<p>
<a href="https://our.status.im/ethereum-client-developers-conference/">Read More</a>
<span><a href="https://our.status.im/ethereum-client-developers-conference/"><img src="../img/arrow_ogn.png" /></a></span>
</div>
<div class="contribute blog">
<h3>Introducing Nimbus, An Ethereum 2.0 Sharding Client</h3>
<p>In order to advance the collective work on scaling Ethereum, we have been building our own client, called Nimbus, which has a particular focus on sharding and resource-restricted devices...<p>
<a href="https://our.status.im/introducing-nimbus-an/">Read More</a>
<span><a href="https://our.status.im/introducing-nimbus-an/"><img src="../img/arrow_ogn.png" /></a></span>
</div>
</div>
</div>
</div>

View File

@ -0,0 +1,16 @@
<!DOCTYPE html>
<html lang="{{ page.lang }}">
{{ partial('partial/head') }}
<body>
<div id="container">
{% if page.source != 'index.md' %}
{{ partial('partial/header') }}
{% endif %}
{{ body }}
{{ partial('partial/footer') }}
</div>
<div id="mobile-nav-dimmer"></div>
{{ partial('partial/mobile_nav') }}
{{ partial('partial/after_footer') }}
</body>
</html>

View File

@ -0,0 +1,33 @@
<div id="content-wrap">
<div id="content" class="wrapper">
<div id="content-inner">
<article class="article-container" itemscope itemtype="http://schema.org/Article">
<div class="article-inner">
<div class="article">
<div class="inner">
<header class="article-header">
<h1 class="article-title" itemprop="name">{{ page.title }}</h1>
<a href="{{ raw_link(page.source) }}" class="article-edit-link" title="{{ __('page.improve') }}"><i class="fa fa-pencil"></i></a>
</header>
<div class="article-content" itemprop="articleBody">
{{ page_anchor(page.content) }}
</div>
<footer class="article-footer">
<time class="article-footer-updated" datetime="{{ date_xml(page.updated) }}" itemprop="dateModified">{{ __('page.last_updated', date(page.updated)) }}</time>
{{ page_nav() }}
</footer>
</div>
</div>
<aside id="article-toc" role="navigation">
<div id="article-toc-inner">
<strong class="sidebar-title">{{ __('page.contents') }}</strong>
{{ toc(page.content, {list_number: false}) }}
<a href="#" id="article-toc-top">{{ __('page.back_to_top') }}</a>
</div>
</aside>
</div>
</article>
{{ partial('partial/sidebar') }}
</div>
</div>
</div>

View File

@ -0,0 +1,111 @@
<!-- Scripts -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="/js/bundle.js?v=0.0.1"></script>
<!-- build:js build/js/main.js -->
{{ js('js/lang_select') }}
{{ js('js/toc') }}
{{ js('js/mobile_nav') }}
{{ js('js/search') }}
<!-- endbuild -->
{% if page.layout === 'plugins' %}
<!-- Plugin search -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/lunr.js/2.1.2/lunr.min.js"></script>
<!-- Lazy load -->
<script async src="https://cdn.jsdelivr.net/lazysizes/3.0.0/lazysizes.min.js"></script>
<!-- build:js build/js/plugins.js -->
{{ js('js/plugins') }}
<!-- endbuild -->
{% endif %}
<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script>
<script async src="/js/highlight.pack.js"></script>
<script async src="/js/solidity.js"></script>
<script>
function highlight() {
$('pre code').each(function(i, block) {
hljs.highlightBlock(block);
});
}
$(document).ready(function() {
try {
highlight();
} catch(err) {
console.log("retrying...")
setTimeout(function() {
highlight();
}, 2500)
}
var clipboard = new ClipboardJS(".btn");
clipboard.on('success', function(e) {
var id = $(e.trigger).attr("data-clipboard-target");
$(id).toggleClass("flash");
setTimeout(function() {
$(id).toggleClass("flash");
}, 200);
e.clearSelection();
})
});
</script>
<style>
mark {
background: #232323;
color: white;
font-weight: bold;
-webkit-transition: background 0.1s ease-in-out;
-ms-transition: background 0.1s ease-in-out;
transition: background 0.1s ease-in-out;
}
.clippy {
margin-top: -3px;
position: relative;
top: 3px;
}
pre {
position: relative;
}
.btn {
transition: opacity .3s ease-in-out;
padding: 2px 6px;
position: absolute;
display: inline-block;
font-size: 13px;
font-weight: 700;
line-height: 20px;
color: #333;
white-space: nowrap;
vertical-align: middle;
cursor: pointer;
background-color: #eee;
background-image: linear-gradient(#fcfcfc,#eee);
border: 1px solid #d5d5d5;
border-radius: 3px;
user-select: none;
-webkit-appearance: none;
top: 34px;
right: 12px;
}
.flash {
background-color: grey;
}
</style>
<!-- Algolia -->
{% if config.algolia[page.lang] %}
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.js"></script>
<script type="text/javascript">
document.getElementById('search-input-wrap').classList.add('on');
docsearch({
apiKey: '{{ config.algolia[page.lang].apiKey }}',
indexName: '{{ config.algolia[page.lang].indexName }}',
inputSelector: '#search-input'
});
</script>
{% endif %}

View File

@ -0,0 +1 @@
<script async type="text/javascript" src="//cdn.carbonads.com/carbon.js?zoneid=1673&serve=C6AILKT&placement=hexoio" id="_carbonads_js"></script>

View File

@ -0,0 +1,18 @@
{% if page.comments && config.disqus_shortname %}
<section id="comments">
<div id="disqus_thread"></div>
</section>
<script>
var disqus_shortname = '{{ config.disqus_shortname }}';
var disqus_url = '{{ url }}';
var disqus_title = {{ JSON.stringify(page.title) }};
var disqus_config = function(){
this.language = '{{ disqus_lang() }}';
};
(function(){
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
dsq.src = 'https://go.disqus.com/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
})();
</script>
{% endif %}

View File

@ -0,0 +1,35 @@
<div class="pre-footer">
<div class="pre-footer-inner">
<div class="community">
<div class="community-item">
<h3>Were All Open Source</h3>
<p>Check out the source code on GitHub and contribute</p>
<a href="https://github.com/status-im" class="button" target="_blank">Github</a>
</div>
<div class="community-item">
<h3>Were here to help</h3>
<p>Contact us for support and join in on the conversation in Status itself</p>
<a href="https://get.status.im/chat/public/developers" class="button">Join Chat</a>
</div>
</div>
<div class="mail">
<div class="mail-inner">
<h3>Download Status</h3>
<p>If you have an Android, you can easily get Status <a href="https://play.google.com/store/apps/details?id=im.status.ethereum" target="_blank" class="download">here</a>. You can also download our nightlies and desktop builds <a href="https://status-im.github.io/nightly/" target="_blank" class="download">here</a>.</p>
<p>If you're on iOS, you'll need to use <a href="https://testflight.apple.com/join/J8EuJmey" target="_blank" class="download">this form</a> to sign up easily and get TestFlight while we're still in Beta.</p>
</div>
</div>
</div>
</div>
<div class="footer">
<div class="footer-inner">
<div class="footer-logo-wrap">
<div class="footer-logo-wrap__inner">
<a class="footer-logo" href="https://status.im" target="_blank"></a>
<div class="footer-address">Status Research & Development GmbH<br/>Baarerstrasse 10<br/>Zug, Switzerland
</div>
</div>
</div>
</div>
</div>

View File

@ -0,0 +1,37 @@
<head prefix="og: http://ogp.me/ns#">
<meta charset="utf-8">
<title>{% if page.title %}{{ page.title }} | {% endif %}{{ config.title }}</title>
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- Canonical links -->
<link rel="canonical" href="{{ url }}">
<!-- Alternative links -->
{% if page.layout == 'page' or page.layout == 'index' %}
{% for lang in site.data.languages %}
<link rel="alternative" hreflang="{{ loop.key }}" href="{{ canonical_url(loop.key) }}">
{% endfor %}
{% endif %}
<!-- Icon -->
<meta name="msapplication-TileColor" content="#ff9c00">
<meta name="msapplication-TileImage" content="{{ url_for('icon/mstile-144x144.png') }}">
<link rel="icon" type="image/png" href="/img/logo-16.png?v=0.0.5" sizes="16x16" />
<link rel="icon" type="image/png" href="/img/logo-32.png?v=0.0.5" sizes="32x32" />
<link rel="apple-touch-icon" sizes="76x76" href="/img/apple-touch-icon-76.png?v=0.0.5">
<link rel="apple-touch-icon" sizes="120x120" href="/img/apple-touch-icon-120.png?v=0.0.5">
<link rel="apple-touch-icon" sizes="152x152" href="/img/apple-touch-icon-152.png?v=0.0.5">
<link rel="apple-touch-icon" sizes="180x180" href="/img/apple-touch-icon-180.png?v=0.0.5">
<link rel="apple-touch-icon" href="/img/apple-touch-icon-1024.png?v=0.0.5">
<!-- CSS -->
<!-- build:css build/css/navy.css -->
{{ css('css/navy') }}
<!-- endbuild -->
<link href="https://fonts.googleapis.com/css?family=Lato:300,400,700" rel="stylesheet" type="text/css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.css" />
<!-- RSS -->
{{ feed_tag('atom.xml') }}
<meta property="og:image" content="/img/share.png" />
<meta property="og:title" content="Status, a Mobile Ethereum OS" />
</head>

View File

@ -0,0 +1,35 @@
<header id="header" class="wrapper">
<div id="header-inner" class="inner">
<h1 id="logo-wrap">
<a href="{{ url_for_lang('') }}" id="logo"></a>
</h1>
<nav id="main-nav">
<a href="/docs/nimbus.html" class="main-nav-link">Docs</a>
<a href="/docs/contributor_guide.html" class="main-nav-link">Contribute</a>
<a href="https://nimbus.status.im#team" class="main-nav-link">Team</a>
<a href="https://our.status.im/tag/research" class="main-nav-link" target="_blank">Blog</a>
</nav>
<div class="secondary-nav">
<div id="search-input-wrap" class="standalone">
<div id="search-input-icon">
<i class="fa fa-search"></i>
</div>
<input type="search" id="search-input" placeholder="Search...">
</div>
<div class="second-nav-links">
<span><a href="http://get.status.im/chat/public/status" class="button button--secondary">Status Public Chat</a></span>
<span class="social-link social-link--twitter"><a href="https://twitter.com/ethstatus" target="_blank"></a></span>
<span class="social-link social-link--gitter"><a href="https://gitter.im/status-im/nimbus" target="_blank"></a></span>
<span class="social-link social-link--github"><a href="https://github.com/status-im" target="_blank"></a></span>
</div>
</div>
<a id="mobile-nav-toggle">
<span class="mobile-nav-toggle-bar"></span>
<span class="mobile-nav-toggle-bar"></span>
<span class="mobile-nav-toggle-bar"></span>
</a>
</div>
</header>

View File

@ -0,0 +1,21 @@
<nav id="mobile-nav">
<div id="mobile-nav-inner">
<ul id="mobile-nav-list">
{{ header_menu('mobile-nav') }}
<li class="mobile-nav-item">
<a href="https://github.com/{{ config.github }}" class="mobile-nav-link" rel="external" target="_blank">GitHub</a>
</li>
</ul>
{% if page.layout == 'page' %}
{{ doc_sidebar('mobile-nav') }}
{% endif %}
</div>
<div id="mobile-lang-select-wrap">
<span id="mobile-lang-select-label"><i class="fa fa-globe"></i><span>{{ lang_name(page.lang) }}</span></span>
<select id="mobile-lang-select" data-canonical="{{ canonical_path_for_nav() }}">
{% for lang in site.data.languages %}
<option value="{{ loop.key }}"{% if page.lang === loop.key %} selected{% endif %}>{{ lang_name(loop.key) }}</option>
{% endfor %}
</select>
</div>
</nav>

View File

@ -0,0 +1,10 @@
<li class="plugin on">
<img src="/extensions/thumbnails/{{ plugin.thumbnail }}" style="display: block; width: 200px; height: 160px; margin-bottom: 20px;" />
<a href="{{ plugin.link }}" class="plugin-name" target="_blank">{{ plugin.name }}</a>
<p class="plugin-desc">{{ plugin.description }}</p>
<div class="plugin-tag-list">
{% for tag in plugin.tags %}
<a href="#{{ tag }}" class="plugin-tag">{{ tag }}</a>
{% endfor %}
</div>
</li>

View File

@ -0,0 +1,16 @@
<article class="article post" itemscope itemtype="http://schema.org/Article">
<header class="article-header">
{% if is_post() %}
<h1 class="article-title" itemprop="name">{{ post.title }}</h1>
{% else %}
<h1>
<a href="{{ url_for(post.path) }}" class="article-title" itemprop="name">{{ post.title }}</a>
</h1>
{% endif %}
<a href="{{ url_for(post.path) }}" class="article-date">{{ time_tag(post.date) }}</a>
</header>
<div class="article-content" itemprop="articleBody">
{{ page_anchor(post.content) }}
</div>
{{ partial('partial/comment') }}
</article>

View File

@ -0,0 +1,10 @@
<!-- GitHub star -->
<a class="github-button" href="https://github.com/status-im" data-icon="octicon-star" data-show-count="true" aria-label="Star status-im on GitHub">Star</a>
<!-- GitHub fork -->
<a class="github-button" href="https://github.com/status-im.status-react/fork" data-icon="octicon-repo-forked" data-show-count="true" aria-label="Fork status-im/status-react on GitHub">Fork</a><!-- Tweet button -->
<!-- Twitter follow button -->
<a href="https://twitter.com/ethstatus" class="twitter-follow-button" data-show-count="true">Follow @ethstatus</a>
<!-- Github Button -->
<script async defer src="https://buttons.github.io/buttons.js"></script>
<!-- Twitter share button -->
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

View File

@ -0,0 +1,5 @@
<aside id="sidebar" role="navigation">
<div class="inner">
{{ doc_sidebar('sidebar') }}
</div>
</aside>

View File

@ -0,0 +1,9 @@
<li class="plugin on">
<a href="{{ template.link }}" class="plugin-name" target="_blank">{{ template.name }}</a>
<p class="plugin-desc">{{ template.description }}</p>
<div class="plugin-tag-list">
{% for tag in template.tags %}
<a href="#{{ tag }}" class="plugin-tag">{{ tag }}</a>
{% endfor %}
</div>
</li>

View File

@ -0,0 +1,18 @@
<li class="plugin on">
<div class="plugin-screenshot">
<noscript>
<img src="{{ url_for('themes/screenshots/' + plugin.name + '.png') }}" class="plugin-screenshot-img" alt="{{ plugin.name }}">
</noscript>
<img data-src="{{ url_for('themes/screenshots/' + plugin.name + '.png') }}" data-sizes="auto" class="plugin-screenshot-img lazyload" alt="{{ plugin.name }}">
{% if plugin.preview %}
<a href="{{ plugin.preview }}" class="plugin-preview-link" target="_blank"><i class="fa fa-eye"></i></a>
{% endif %}
</div>
<a href="{{ plugin.link }}" class="plugin-name" target="_blank">{{ plugin.name }}</a>
<p class="plugin-desc">{{ plugin.description }}</p>
<div class="plugin-tag-list">
{% for tag in plugin.tags %}
<a href="#{{ tag }}" class="plugin-tag">{{ tag }}</a>
{% endfor %}
</div>
</li>

View File

@ -0,0 +1,9 @@
<li class="plugin on">
<a href="{{ tutorial.link }}" class="plugin-name">{{ tutorial.name }}</a>
<p class="plugin-desc">{{ tutorial.description }}</p>
<div class="plugin-tag-list">
{% for tag in tutorial.tags %}
<a href="#{{ tag }}" class="plugin-tag">{{ tag }}</a>
{% endfor %}
</div>
</li>

View File

@ -0,0 +1,10 @@
<li class="plugin on">
<img src="/wip/thumbnails/{{ wip.thumbnail }}" style="display: block; width: 200px; height: 200px; margin-bottom: 20px;" />
<a href="{{ wip.link }}" class="plugin-name" target="_blank">{{ wip.name }}</a>
<p class="plugin-desc">{{ wip.description }}</p>
<div class="plugin-tag-list">
{% for tag in wip.tags %}
<a href="#{{ tag }}" class="plugin-tag">{{ tag }}</a>
{% endfor %}
</div>
</li>

View File

@ -0,0 +1,14 @@
<div id="content-wrap">
<div class="wrapper">
<div class="inner">
<header id="plugin-list-header">
<h1 id="plugin-list-title">{{ page.title }}</h1>
</header>
<ul id="plugin-list">
{% for plugin in site.data[page.data] %}
{{ partial('partial/' + page.partial, {plugin: plugin}) }}
{% endfor %}
</ul>
</div>
</div>
</div>

View File

@ -0,0 +1,7 @@
<div id="content-wrap">
<div class="wrapper">
<div class="inner">
{{ partial('partial/post', {post: page}) }}
</div>
</div>
</div>

View File

@ -0,0 +1,14 @@
<div id="content-wrap">
<div class="wrapper">
<div class="inner">
<header id="plugin-list-header">
<h1 id="plugin-list-title">{{ page.title }}</h1>
</header>
<ul id="plugin-list">
{% for template in _.sortBy(site.data[page.data], 'name') %}
{{ partial('partial/' + page.partial, {template: template}) }}
{% endfor %}
</ul>
</div>
</div>
</div>

View File

@ -0,0 +1,33 @@
<div id="content-wrap">
<div id="content" class="wrapper">
<div id="content-inner-full">
<article class="article-container" itemscope itemtype="http://schema.org/Article">
<div class="article-inner">
<div class="article">
<div class="inner">
<header class="article-header">
<h1 class="article-title" itemprop="name">{{ page.title }}</h1>
</header>
<div class="article-content" itemprop="articleBody">
{{ page_anchor(page.content) }}
</div>
<footer class="article-footer">
<time class="article-footer-updated" datetime="{{ date_xml(page.updated) }}" itemprop="dateModified">{{ __('page.last_updated', date(page.updated)) }}</time>
{{ page_nav() }}
</footer>
</div>
</div>
<aside id="article-toc" role="navigation">
<div id="article-toc-inner">
<strong class="sidebar-title">{{ __('page.contents') }}</strong>
{{ toc(page.content, {list_number: false}) }}
<a href="#" id="article-toc-top">{{ __('page.back_to_top') }}</a>
</div>
</aside>
</div>
</article>
{{ partial('partial/sidebar') }}
</div>
</div>
</div>

View File

@ -0,0 +1,14 @@
<div id="content-wrap">
<div class="wrapper">
<div class="inner">
<header id="plugin-list-header">
<h1 id="plugin-list-title">{{ page.title }}</h1>
</header>
<ul id="plugin-list">
{% for tutorial in _.sortBy(site.data[page.data], 'name') %}
{{ partial('partial/' + page.partial, {tutorial: tutorial}) }}
{% endfor %}
</ul>
</div>
</div>
</div>

View File

@ -0,0 +1,14 @@
<div id="content-wrap">
<div class="wrapper">
<div class="inner">
<header id="plugin-list-header">
<h1 id="plugin-list-title">{{ page.title }}</h1>
</header>
<ul id="plugin-list">
{% for wip in site.data[page.data] %}
{{ partial('partial/' + page.partial, {wip: wip}) }}
{% endfor %}
</ul>
</div>
</div>
</div>

View File

@ -0,0 +1,24 @@
.archive-post
padding: 1em 0
border-top: 1px solid color-border
&:last-child
padding-bottom: 40px
.archive-post-link
clearfix()
display: block
color: color-default
text-decoration: none
line-height: line-height
&:hover
color: color-link-hover
.archive-post-title
font-family: font-title
float: left
font-weight: bold
.archive-post-date
color: color-gray
float: right
font-size: 0.9em

View File

@ -0,0 +1,52 @@
global-reset()
html
box-sizing: border-box
*, *:before, *:after
box-sizing: inherit
button
input[type="reset"]
input[type="button"]
input[type="submit"]
&::-moz-focus-inner
padding: 0
margin: 0
border: 0
input, button, select
margin: 0
padding: 0
border: 0
html, body
@media screen
height: 100%
// overflow: hidden
body
background: color-navy
font-size: font-size
font-family: font-sans
color: color-default
text-rendering: optimizeLegibility
-webkit-font-smoothing: antialiased
-moz-osx-font-smoothing: grayscale
overflow-x: hidden
.wrapper
clearfix()
@media screen
max-width: max-width
margin: 0 auto
.inner
clearfix()
@media screen
padding: 0 gutter-width
#content-wrap
background: color-background-light
border-bottom: 1px solid darken(color-navy, 5%)
margin: -1px 0

View File

@ -0,0 +1,32 @@
#carbonads
display: block
overflow: hidden
margin-top: 40px
max-width: 130px
text-align: left
font-size: 13px
line-height: 1.5
a
color: inherit
text-decoration: none
&:hover
color: inherit
span
display: block
overflow: hidden
.carbon-img
display: block
margin: 0 auto 8px
line-height: 1
.carbon-text
display: block
margin-bottom: 8px
.carbon-poweredby
display: block
text-transform: uppercase
letter-spacing: 1px
font-size: 9px
line-height: 1

View File

@ -0,0 +1,41 @@
#footer
clearfix()
padding: 40px 0
color: rgba(255, 255, 255, 0.6)
font-family: font-title
position: relative
background: color-navy
text-align: center
@media mq-normal
text-align: left
@media print
display: none
a
color: inherit
text-decoration: none
transition: 0.2s
&:hover
color: #fff
#footer-copyright
line-height: 1.4
@media mq-normal
float: left
a
font-weight: bold
#footer-links
margin-top: 1em
@media mq-normal
float: right
margin-top: 0
.footer-link
font-size: 30px
margin-left: 20px
&:first-child
margin-left: 0
.download
color: #fff
text-decoration: none

View File

@ -0,0 +1,155 @@
header-padding-normal = 10px
header-padding-max = 30px
logo-size = 50px
#header
position: relative
padding: header-padding-normal 0
@media print
display: none
#header-inner
display: flex
flex-flow: row nowrap
align-items: center
@media mq-mobile
justify-content: center
#logo-wrap
flex: 0 logo-size
margin-top: 19px
#logo
hide-text()
display: block
width: 40px;
height: 40px;
background-image: url(../img/status_logo.svg);
text-decoration: none;
margin: -20px 0 0 30px;
background-color: rgba(0,0,0,0.1);
border-radius: 50%;
background-size: 22px;
background-position: center;
background-repeat: no-repeat;
#main-nav
display: none
flex: 1 auto
padding-left: 20px
@media mq-normal
display: block
.main-nav-link
color: color-main-link
text-decoration: none
line-height: logo-size
opacity: 1.0
transition: 0.2s
font-family: font-sans
font-size: 15px
font-weight: bold;
display: inline-block
padding: 0 15px
&:hover
opacity: 1
color: color-link-hover
#search-input-wrap
display: none
height: 40px
width: 180px
background-color: #ff9c00
border-radius: 22px
padding: 0 12px
align-items: center
transition: 0.2s
&.on
display: flex
@media mq-mobile
width: 40px
cursor: pointer
&.standalone
position: absolute
right: 20px
&.active
width: 180px
background-color: color-background-light
#search-input-icon
color: rgba(255, 255, 255, 1)
height: 24px
width: 24px
margin: 0 2px 0 0
display: inline-block
opacity: 1
@media mq-mobile
height: auto;
#search-input-wrap.active #search-input-icon
color: color-navy
#search-input-wrap.active #search-input
color: color-navy
#search-input
background: none
width: 126px
height: 24px
font-size: 15px
color: color-main-link
outline: none
-webkit-appearance: none
@media mq-mobile
display: none
#search-input-wrap.active #search-input
display: inline;
#search-input::-webkit-input-placeholder {
color:rgba(255, 255, 255, .4)
}
#search-input::-moz-placeholder {
color:rgba(255, 255, 255, .4)
}
#search-input:-ms-input-placeholder {
color:rgba(255, 255, 255, .4)
}
#search-input:-moz-placeholder {
color:rgba(255, 255, 255, .4)
}
#search-input-wrap .algolia-autocomplete .ds-dropdown-menu
@media (max-width: 560px)
min-width: 400px
@media (max-width: 470px)
min-width: 300px
#lang-select-wrap
display: none
position: relative
@media mq-normal
display: block
#lang-select-label
color: color-main-link
opacity: 0.7
font-family: font-title
line-height: logo-size
span
padding-left: 8px
i
opacity: 0.7
#lang-select
opacity: 0
position: absolute
top: 0
left: 0
width: 100%
height: 100%
-webkit-appearance: menulist-button
font-size: inherit

View File

@ -0,0 +1,105 @@
// https://github.com/chriskempson/tomorrow-theme
highlight-background = #fff
highlight-current-line = #efefef
highlight-selection = #d6d6d6
highlight-foreground = #4d4d4c
highlight-comment = #8e908c
highlight-red = #c82829
highlight-orange = #f5871f
highlight-yellow = #eab700
highlight-green = #718c00
highlight-aqua = #3e999f
highlight-blue = #4271ae
highlight-purple = #8959a8
pre, code
font-family: font-mono
color: highlight-foreground
background: #eee
font-size: 0.95em
code
padding: 0 5px
pre
padding: 10px 15px
line-height: 22px
code
border: none
display: block
padding: 0
.highlight
background: #eee
padding: 10px 15px
color: highlight-foreground
overflow: auto
margin: 0
table
margin: 0 !important
border: 0
th, td
padding: 0
figcaption
clearfix()
margin: -5px 0 5px
font-size: 0.9em
color: color-gray
a
float: right
pre
padding: 0
border: none
background: none
.line
height: 22px
pre
.comment
.title
color: highlight-comment
.variable
.attribute
.tag
.regexp
.ruby .constant
.xml .tag .title
.xml .pi
.xml .doctype
.html .doctype
.css .id
.css .class
.css .pseudo
color: highlight-red
.number
.preprocessor
.built_in
.literal
.params
.constant
color: highlight-orange
.class
.ruby .class .title
.css .rules .attribute
color: highlight-green
.string
.value
.inheritance
.header
.ruby .symbol
.xml .cdata
color: highlight-green
.css .hexcolor
color: highlight-aqua
.function
.python .decorator
.python .title
.ruby .function .title
.ruby .title .keyword
.perl .sub
.javascript .title
.coffeescript .title
color: highlight-blue
.keyword
.javascript .function
color: highlight-purple

View File

@ -0,0 +1,125 @@
#banner
color: rgba(255, 255, 255, 1.0)
text-align: center
#banner-title
padding-top: 20px
font-size: 40px
line-height: 1.15
font-weight: 300
font-family: font-title
@media mq-normal
padding-top: 100px
font-size: 50px
#banner-start
text-align: center
padding: 40px 0
@media mq-normal
padding: 60px 0
font-size: 18px
#banner-start-command
background: lighten(color-navy, 10%)
font-family: font-mono
display: inline-block
padding: 15px 20px
&:before
content: "$"
opacity: 0.5
padding-right: 10px
#banner-start-link
color: #fff
background: color-link
display: inline-block
padding: 15px
text-decoration: none
transition: 0.2s
&:hover
background: color-link-hover
#banner-share
display: none
padding-bottom: 60px
@media mq-normal
display: block
#intro-feature-list
padding-top: 20px
display: flex
flex-flow: column
@media mq-normal
flex-flow: row wrap
.intro-feature-wrap
padding-top: 20px
@media mq-normal
flex: 0 0 50%
padding-top: 50px
.intro-feature
position: relative
text-align: center
@media mq-normal
text-align: left
padding-left: 70px
.intro-feature-icon
color: color-link
font-size: 36px
padding-bottom: 26px
text-align: center
@media mq-normal
position: absolute
top: 0
left: 20px
font-size: 24px
width: @font-size
.intro-feature-title
color: color-link
font-family: font-title
font-size: 24px
.intro-feature-desc
margin: line-height 0
line-height: line-height
#intro-cmd-wrap
max-width: 700px
background: #eee
padding: 15px 0
margin: 25px gutter-width * -1 0
@media mq-normal
margin: 50px auto 0
.intro-cmd-item
font-size: 16px
font-family: font-mono
line-height: 2
padding: 0 30px
&:before
content: "$"
color: color-link
padding-right: 15px
#intro-get-started-wrap
text-align: center
#intro-get-started-link
font-size: 18px
font-family: font-title
display: inline-block
color: color-link
text-decoration: none
margin: 40px 0
border: 3px solid
border-color: lighten(color-link, 20%)
padding: 12px 24px
position: relative
transition: 0.2s
&:hover
background: @border-color
color: #fff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,136 @@
toggle-width = 25px
toggle-height = toggle-width * 0.8
toggle-line = 2px
transition-duration = 0.4s
lang-select-height = 40px
#mobile-nav
position: fixed
top: 0
width: mobile-nav-width
left: @width * -1
height: 100%
background: color-navy
transition: transition-duration
font-family: font-title
.mobile-nav-on &
transform: translateX(100%)
#mobile-nav-inner
overflow-y: auto
padding: 10px 0
position: absolute
top: 0
bottom: lang-select-height
left: 0
right: 0
-webkit-overflow-scrolling: touch
#mobile-nav-toggle
position: absolute
top: 0
bottom: 0
left: gutter-width
width: toggle-width
height: toggle-height
margin: auto
opacity: 0.5
cursor: pointer
transition: 0.2s
&:active, .mobile-nav-on &
opacity: 1
@media mq-normal
display: none
.mobile-nav-toggle-bar
background: #fff
position: absolute
left: 0
width: 100%
height: toggle-line
transition: transition-duration
transform-origin: 0
border-radius: toggle-line
&:first-child
top: 0
.mobile-nav-on &
transform: rotate(45deg)
&:nth-child(2)
top: (toggle-height - toggle-line) * 0.5
.mobile-nav-on &
opacity: 0
&:last-child
top: toggle-height - toggle-line
.mobile-nav-on &
transform: rotate(-45deg)
.mobile-nav-link
color: #fff
text-decoration: none
display: block
padding: 10px 15px
line-height: 1
white-space: nowrap
overflow: hidden
text-overflow: ellipsis
.mobile-nav-title
color: color-link
font-weight: bold
padding: 10px 15px
line-height: 1
display: block
border-top: 1px solid #444
margin-top: 10px
white-space: nowrap
overflow: hidden
text-overflow: ellipsis
#mobile-lang-select-wrap
position: absolute
bottom: 0
left: 0
width: 100%
background: color-navy
border-top: 1px solid #444
#mobile-lang-select-label
line-height: lang-select-height
color: #fff
padding: 10px 15px
i
opacity: 0.7
span
padding-left: 8px
#mobile-lang-select
-webkit-appearance: menulist-button
opacity: 0
position: absolute
top: 0
left: 0
width: 100%
height: 100%
#container
transition: transition-duration
height: 100%
// overflow: auto
-webkit-overflow-scrolling: touch
.mobile-nav-on &
transform: translateX(mobile-nav-width)
overflow: hidden
#mobile-nav-dimmer
position: absolute
top: 0
left: 100%
height: 100%
background: #000
opacity: 0
transition: opacity transition-duration, transform 0s transition-duration
.mobile-nav-on &
width: 100%
opacity: 0.7
transform: translateX(-100%)
transition: opacity transition-duration

View File

@ -0,0 +1,256 @@
note-tip = hsl(40, 100%, 50%)
note-info = hsl(200, 100%, 50%)
note-warn = hsl(0, 100%, 50%)
#content
clearfix()
position: relative
#content-inner
clearfix()
@media mq-normal
margin-left: sidebar-width
@media screen and (min-width: 1500px)
margin-left: 2px
#content-inner-full
clearfix()
@media mq-normal
margin-left: 0
.article-container
@media mq-normal
float: right
width: 100%
.article-inner
clearfix()
.article
float: left
width: 100%
padding: 40px 0
@media print
padding: 0
#article-toc
display: none
float: right
width: sidebar-width
margin-right: sidebar-width * -1
opacity: 0.8
@media mq-normal
display: block
@media screen and (max-width: 1450px)
display: none
&.fixed
position: absolute
top: 0
bottom: 0
right: 0
#article-toc-inner
@extend .inner
overflow-x: hidden
overflow-y: auto
width: sidebar-width
.fixed &
position: fixed
top: 0
bottom: 0
.toc-link
@extend .sidebar-link
.toc-child
padding-left: 1em
font-size: 0.9em
#article-toc-top
margin-top: 2em
font-size: 0.9em
text-decoration: none
color: color-default
display: block
margin-bottom: 40px
font-family: font-title
&:hover
color: color-link-hover
.article-header
clearfix()
padding-bottom: 20px
.article-title
float: left
font-family: font-title
font-size: 26px
line-height: 32px
font-weight: 300
text-decoration: none
color: color-title
transition: 0.2s
a&:hover
color: color-link-hover
.post &
float: none
.article-date
color: color-gray
text-decoration: none
display: inline-block
margin-top: 1em
&:hover
color: color-link-hover
.article-edit-link
float: right
color: #bbb
font-size: 24px
line-height: 36px
transition: 0.2s
display: none
&:hover
color: color-link-hover
@media mq-normal
display: block
.article-anchor
margin-left: 10px
display: none
&:before
content: "#"
@media print
display: none !important
.article-heading:hover &
display: inline-block
.article-content
line-height: line-height
color: color-default
@media print
font-size: 12pt
p, ol, ul, dl, table, blockquote, iframe, .highlight
margin: 1em 0
h1
font-size: 26px
h2
font-size: 20px
h3
font-size: 18px
h1, h2, h3, h4, h5, h6
line-height: 1em
font-weight: bold
margin: 1em 0
color: color-title
a
color: color-link
text-decoration: none
&:hover
color: color-link-hover
text-decoration: underline
@media print
color: color-default
text-decoration: underline
&:after
content: " (" attr(href) ")"
font-size: 80%
strong
font-weight: bold
em
font-style: italic
ul, ol, dl
margin-left: 20px
ul, ol, dl
margin-top: 0
margin-bottom: 0
ul
list-style: disc
ol
list-style: decimal
dl
list-style: square
li
p
margin: 0
table, blockquote, iframe, .highlight
margin: 1em 0
img, video
max-width: 100%
blockquote
padding: 0 20px
position: relative
border: 1px solid color-border
border-left: 5px solid #ddd
footer
margin: 1em 0
font-style: italic
cite
&:before
content: ""
padding: 0 0.3em
a
color: color-grey
.note
&.tip
border-left-color: note-tip
&.info
border-left-color: note-info
&.warn
border-left-color: note-warn
.note-title
margin: 1em 0
display: block
font-size: 1.3em
font-weight: bold
table
max-width: 100%
border: 1px solid color-border
th
font-weight: bold
th, td
padding: 5px 15px
tr
&:nth-child(2n)
background: #eee
.article-footer
clearfix()
margin: 1em 0
border-top: 1px solid color-border
text-align: center
color: color-gray
line-height: 1em
padding-top: 1em
position: relative
@media print
display: none
$article-footer-link
color: color-link
text-decoration: none
font-weight: bold
font-family: font-title
text-transform: uppercase
position: absolute
&:hover
color: color-link-hover
@media print
display: none
span
padding: 0 6px
.article-footer-prev
@extend $article-footer-link
left: 0
.article-footer-next
@extend $article-footer-link
right: 0
.article-footer-updated
font-size: 0.9em
#comments
@media print
display: none

View File

@ -0,0 +1,131 @@
#plugin-list-header
clearfix()
margin: 40px 0
#plugin-list-title
font-family: font-title
font-size: 36px
font-weight: 300
line-height: 1
float: left
#plugin-list-count
color: color-gray
padding-top: 1em
text-align: right
@media mq-normal
float: right
line-height: 40px
padding-top: 0
padding-right: 15px
#plugin-search-input
font-size: 16px
font-family: inherit
-webkit-appearance: none
border: 1px solid color-border
padding: 10px 10px
width: 100%
margin-top: 25px
@media mq-normal
float: right
width: 50%
margin-top: 0
#plugin-list
margin: 40px -20px
display: flex
flex-flow: column
@media mq-tablet
flex-flow: row wrap
.plugin
display: none
padding: 20px
@media mq-tablet
flex: 0 0 50%
@media mq-normal
flex: 0 0 (100 / 3)%
&.on
display: block
.plugin-name
font-family: font-title
font-weight: bold
color: color-link
font-size: 20px
text-decoration: none
line-height: 1
display: block
&:hover
color: color-link-hover
.plugin-desc
line-height: line-height
margin: 1em 0
.plugin-tag-list
clearfix()
line-height: 1.3
.plugin-tag
color: color-gray
font-size: 0.9em
text-decoration: none
float: left
margin-right: 10px
&:hover
color: color-link-hover
&:before
content: "#"
.plugin-screenshot
margin-bottom: 15px
position: relative
padding-top: (10 / 16 * 100)% // 16:10 ratio
height: 0
overflow: hidden
.plugin-screenshot-img
position: absolute
top: 0
left: 0
width: 100%
height: 100%
transition: opacity 0.3s
&.lazyload
&.lazyloading
opacity: 0
&.lazyloaded
opacity: 1
.plugin-preview-link
position: absolute
top: 0
left: 0
width: 100%
height: 100%
background: rgba(0, 0, 0, 0.7)
color: #fff
text-align: center
opacity: 0
transition: 0.15s
&:hover
opacity: 1
.fa
opacity: 1
transform: scale(1)
.fa
position: absolute
top: 0
left: 0
bottom: 0
right: 0
margin: auto
font-size: 50px
width: @font-size
height: @font-size
opacity: 0
transform: scale(6)
transition: 0.2s
transition-delay: 0.15s

View File

@ -0,0 +1,5 @@
.post
margin: 0 auto
float: none
@media screen
max-width: 800px

View File

@ -0,0 +1,36 @@
#sidebar
width: sidebar-width
float: left
padding-bottom: 40px
opacity: 0.8
margin-left: sidebar-width * -1
display: none
@media mq-normal
display: block
.sidebar-title
margin-top: 40px
padding: 10px 0
font-family: font-title
font-weight: bold
color: color-title
display: inline-block
border-top: 1px solid color-border
line-height: 1
.sidebar-link
font-family: font-sans
display: block
color: color-default
text-decoration: none
padding: 7px 0
line-height: 1
position: relative
width: 100%
text-overflow: ellipsis
overflow: hidden
white-space: nowrap
&.current
color: color-link
&:hover
color: color-link-hover

View File

@ -0,0 +1,47 @@
// Fonts
@font-face {
font-family: "Post Grotesk Medium";
src: url("/fonts/PostGrotesk-Medium.ttf") format("ttf"),
url("/fonts/PostGrotesk-Medium.woff") format("woff"),
url("/fonts/PostGrotesk-Medium.eot") format("eot");
}
@font-face {
font-family: "Post Grotesk Book";
src: url("/fonts/PostGrotesk-Book.ttf") format("ttf"),
url("/fonts/PostGrotesk-Book.woff") format("woff"),
url("/fonts/PostGrotesk-Book.eot") format("eot");
}
// Config
support-for-ie = false
vendor-prefixes = webkit moz ms official
// Colors
color-default = #40444b
color-title = #000
color-gray = #777F86
color-border = #e3e3e3
color-navy = #363763
color-background = #F2F2F5
color-background-light = #fff
color-main-link = #fff
color-link = #7c7db6
color-link-hover = lighten(color-link, 10%)
// Typography
font-sans = "Post Grotesk Book", "Helvetica Neue", Helvetica, Arial, sans-serif
font-mono = "Source Code Pro", Monaco, Menlo, Consolas, monospace
font-title = "Post Grotesk Medium", font-sans
font-size = 16px
line-height = 24px
// Layout
max-width = 1024px
gutter-width = 20px
sidebar-width = 220px
mobile-nav-width = 260px
// Media queries
mq-mobile = "screen and (max-width: 819px)"
mq-normal = "screen and (min-width: 820px)"
mq-tablet = "screen and (min-width: 480px)"

View File

@ -0,0 +1,16 @@
@import "nib"
@import "_variables"
@import "_partial/base"
@import "_partial/header"
@import "_partial/index"
@import "_partial/sidebar"
@import "_partial/page"
@import "_partial/post"
@import "_partial/plugins"
@import "_partial/archive"
@import "_partial/mobile_nav"
@import "_partial/footer"
@import "_partial/highlight"
@import "_partial/carbonads"
@import "_partial/main"

Binary file not shown.

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 327 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 322 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 265 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 823 B

Some files were not shown because too many files have changed in this diff Show More