├── .babelrc ├── .circleci └── config.yml ├── .dockerignore ├── .editorconfig ├── .eslintrc ├── .gitignore ├── .nsprc ├── .prettierignore ├── .prettierrc ├── .storybook ├── addons.js ├── config.js ├── decorators │ └── index.js └── webpack.config.js ├── .well-known └── assetlinks.json ├── CONTRIBUTING.md ├── Dockerfile ├── Makefile ├── README.md ├── Vagrantfile ├── api_mockdata ├── get_content.js ├── get_content_empty.js ├── get_state.js └── get_state_empty.js ├── blackboxtest ├── Dockerfile ├── nightwatch-tests │ ├── homepage.js │ └── ssr.js ├── nightwatch.json ├── package.json └── yarn.lock ├── component_counter.sh ├── config ├── custom-environment-variables.json ├── default.json ├── development.json └── production.json ├── doc ├── CONTRIBUTORS.md └── LICENSE.md ├── grep ├── mocha.setup.js ├── package-lock.json ├── package.json ├── scripts └── check_translations.js ├── src ├── __mocks__ │ └── fileMock.js ├── app │ ├── Main.js │ ├── ResolveRoute.js │ ├── ResolveRoute.test.js │ ├── RootRoute.js │ ├── Translator.js │ ├── assets │ │ ├── ads.txt │ │ ├── fonts │ │ │ ├── Roboto-Bold.ttf │ │ │ ├── Roboto-Regular.ttf │ │ │ └── RobotoMono-Regular.ttf │ │ ├── icons │ │ │ ├── 100.svg │ │ │ ├── account-group.svg │ │ │ ├── account-heart.svg │ │ │ ├── account-settings-variant.svg │ │ │ ├── bitcoin.svg │ │ │ ├── bitshares.svg │ │ │ ├── calendar.svg │ │ │ ├── chain.svg │ │ │ ├── chatbox.svg │ │ │ ├── chatboxes.svg │ │ │ ├── chevron-down-circle.svg │ │ │ ├── chevron-left.svg │ │ │ ├── chevron-up-circle.svg │ │ │ ├── clock.svg │ │ │ ├── close.svg │ │ │ ├── cog.svg │ │ │ ├── communities.svg │ │ │ ├── compass-outline.svg │ │ │ ├── currency-usd.svg │ │ │ ├── dropdown-arrow.svg │ │ │ ├── empty.svg │ │ │ ├── enter.svg │ │ │ ├── ether.svg │ │ │ ├── extlink.svg │ │ │ ├── eye.svg │ │ │ ├── facebook.svg │ │ │ ├── flag1.svg │ │ │ ├── flag2.svg │ │ │ ├── home.svg │ │ │ ├── key.svg │ │ │ ├── library-books.svg │ │ │ ├── line.svg │ │ │ ├── link.svg │ │ │ ├── linkedin.svg │ │ │ ├── location.svg │ │ │ ├── logo.svg │ │ │ ├── logotype.svg │ │ │ ├── menu.svg │ │ │ ├── pencil.svg │ │ │ ├── pencil2.svg │ │ │ ├── person.svg │ │ │ ├── photo.svg │ │ │ ├── pin-disabled.svg │ │ │ ├── pin.svg │ │ │ ├── printer.svg │ │ │ ├── profile.svg │ │ │ ├── quill.svg │ │ │ ├── reblog.svg │ │ │ ├── reddit.svg │ │ │ ├── replies.svg │ │ │ ├── reply.svg │ │ │ ├── search.svg │ │ │ ├── share.svg │ │ │ ├── steem.svg │ │ │ ├── steemd.svg │ │ │ ├── steemdb.svg │ │ │ ├── steempower.svg │ │ │ ├── twitter.svg │ │ │ ├── user.svg │ │ │ ├── video.svg │ │ │ ├── voter.svg │ │ │ ├── voters.svg │ │ │ ├── wallet.svg │ │ │ ├── wallet_2.svg │ │ │ ├── zoom-in.svg │ │ │ ├── zoom-out.svg │ │ │ └── zoom-reset.svg │ │ ├── images │ │ │ ├── 404.svg │ │ │ ├── 500.jpg │ │ │ ├── about │ │ │ │ ├── About-hero-small.jpg │ │ │ │ ├── coin.jpg │ │ │ │ ├── conf.jpg │ │ │ │ ├── mission.jpg │ │ │ │ ├── priorities.jpg │ │ │ │ ├── talk.jpg │ │ │ │ ├── values.jpg │ │ │ │ ├── vision.jpg │ │ │ │ ├── x-dev-priorities.jpg │ │ │ │ ├── x-mission.jpg │ │ │ │ └── xx-values.jpg │ │ │ ├── dlive.png │ │ │ ├── facebook.svg │ │ │ ├── favicon.ico │ │ │ ├── favicons │ │ │ │ ├── android-chrome-144x144.png │ │ │ │ ├── android-chrome-192x192.png │ │ │ │ ├── android-chrome-36x36.png │ │ │ │ ├── android-chrome-48x48.png │ │ │ │ ├── android-chrome-72x72.png │ │ │ │ ├── android-chrome-96x96.png │ │ │ │ ├── apple-touch-icon-114x114.png │ │ │ │ ├── apple-touch-icon-120x120.png │ │ │ │ ├── apple-touch-icon-144x144.png │ │ │ │ ├── apple-touch-icon-152x152.png │ │ │ │ ├── apple-touch-icon-180x180.png │ │ │ │ ├── apple-touch-icon-57x57.png │ │ │ │ ├── apple-touch-icon-60x60.png │ │ │ │ ├── apple-touch-icon-72x72.png │ │ │ │ ├── apple-touch-icon-76x76.png │ │ │ │ ├── apple-touch-icon.png │ │ │ │ ├── browserconfig.xml │ │ │ │ ├── chrome-web-store-128x128.png │ │ │ │ ├── favicon-128.png │ │ │ │ ├── favicon-144x144.png │ │ │ │ ├── favicon-16x16.png │ │ │ │ ├── favicon-196x196.png │ │ │ │ ├── favicon-24x24.png │ │ │ │ ├── favicon-32x32.png │ │ │ │ ├── favicon-64x64.png │ │ │ │ ├── favicon-72x72.png │ │ │ │ ├── favicon-96x96.png │ │ │ │ ├── favicon.ico │ │ │ │ ├── manifest.json │ │ │ │ ├── mstile-144x144.png │ │ │ │ ├── mstile-150x150.png │ │ │ │ ├── mstile-310x150.png │ │ │ │ ├── mstile-310x310.png │ │ │ │ ├── mstile-70x70.png │ │ │ │ └── opera-speed-dial-195x195.png │ │ │ ├── justswap-sider.png │ │ │ ├── justswap.png │ │ │ ├── loading.gif │ │ │ ├── lp-bottom.jpg │ │ │ ├── pdf-logo.svg │ │ │ ├── poloniex.png │ │ │ ├── qrcode.png │ │ │ ├── reddit.svg │ │ │ ├── steemit-1024x1024.png │ │ │ ├── steemit-halloween.png │ │ │ ├── steemit-share.png │ │ │ ├── steemit-twshare-2.png │ │ │ ├── steemit-twshare.png │ │ │ ├── steemit.png │ │ │ ├── steemit.svg │ │ │ ├── tron-steem-240_240.png │ │ │ ├── user-static.png │ │ │ ├── user.png │ │ │ └── welcome-hero.png │ │ ├── js │ │ │ ├── editormd.js │ │ │ ├── editormd.min.js │ │ │ ├── jquery-3.6.0.min.js │ │ │ ├── jquery-3.6.0.min.map │ │ │ ├── tron-ads-sdk-1.0.49.js │ │ │ └── zepto.min.js │ │ ├── plugins │ │ │ └── editor.md │ │ │ │ ├── .gitignore │ │ │ │ ├── .jshintrc │ │ │ │ ├── BUGS.md │ │ │ │ ├── CHANGE.md │ │ │ │ ├── Gulpfile.js │ │ │ │ ├── LICENSE │ │ │ │ ├── README.md │ │ │ │ ├── bower.json │ │ │ │ ├── css │ │ │ │ ├── editormd.css │ │ │ │ ├── editormd.logo.css │ │ │ │ ├── editormd.logo.min.css │ │ │ │ ├── editormd.min.css │ │ │ │ ├── editormd.preview.css │ │ │ │ └── editormd.preview.min.css │ │ │ │ ├── editormd.amd.js │ │ │ │ ├── editormd.amd.min.js │ │ │ │ ├── editormd.js │ │ │ │ ├── editormd.min.js │ │ │ │ ├── fonts │ │ │ │ ├── FontAwesome.otf │ │ │ │ ├── editormd-logo.eot │ │ │ │ ├── editormd-logo.svg │ │ │ │ ├── editormd-logo.ttf │ │ │ │ ├── editormd-logo.woff │ │ │ │ ├── fontawesome-webfont.eot │ │ │ │ ├── fontawesome-webfont.svg │ │ │ │ ├── fontawesome-webfont.ttf │ │ │ │ ├── fontawesome-webfont.woff │ │ │ │ └── fontawesome-webfont.woff2 │ │ │ │ ├── images │ │ │ │ ├── loading.gif │ │ │ │ ├── loading@2x.gif │ │ │ │ ├── loading@3x.gif │ │ │ │ └── logos │ │ │ │ │ ├── editormd-favicon-16x16.ico │ │ │ │ │ ├── editormd-favicon-24x24.ico │ │ │ │ │ ├── editormd-favicon-32x32.ico │ │ │ │ │ ├── editormd-favicon-48x48.ico │ │ │ │ │ ├── editormd-favicon-64x64.ico │ │ │ │ │ ├── editormd-logo-114x114.png │ │ │ │ │ ├── editormd-logo-120x120.png │ │ │ │ │ ├── editormd-logo-144x144.png │ │ │ │ │ ├── editormd-logo-16x16.png │ │ │ │ │ ├── editormd-logo-180x180.png │ │ │ │ │ ├── editormd-logo-240x240.png │ │ │ │ │ ├── editormd-logo-24x24.png │ │ │ │ │ ├── editormd-logo-320x320.png │ │ │ │ │ ├── editormd-logo-32x32.png │ │ │ │ │ ├── editormd-logo-48x48.png │ │ │ │ │ ├── editormd-logo-57x57.png │ │ │ │ │ ├── editormd-logo-64x64.png │ │ │ │ │ ├── editormd-logo-72x72.png │ │ │ │ │ ├── editormd-logo-96x96.png │ │ │ │ │ └── vi.png │ │ │ │ ├── languages │ │ │ │ ├── en.js │ │ │ │ └── zh-tw.js │ │ │ │ ├── lib │ │ │ │ ├── codemirror │ │ │ │ │ ├── AUTHORS │ │ │ │ │ ├── LICENSE │ │ │ │ │ ├── README.md │ │ │ │ │ ├── addon │ │ │ │ │ │ ├── comment │ │ │ │ │ │ │ ├── comment.js │ │ │ │ │ │ │ └── continuecomment.js │ │ │ │ │ │ ├── dialog │ │ │ │ │ │ │ ├── dialog.css │ │ │ │ │ │ │ └── dialog.js │ │ │ │ │ │ ├── display │ │ │ │ │ │ │ ├── fullscreen.css │ │ │ │ │ │ │ ├── fullscreen.js │ │ │ │ │ │ │ ├── panel.js │ │ │ │ │ │ │ ├── placeholder.js │ │ │ │ │ │ │ └── rulers.js │ │ │ │ │ │ ├── edit │ │ │ │ │ │ │ ├── closebrackets.js │ │ │ │ │ │ │ ├── closetag.js │ │ │ │ │ │ │ ├── continuelist.js │ │ │ │ │ │ │ ├── matchbrackets.js │ │ │ │ │ │ │ ├── matchtags.js │ │ │ │ │ │ │ └── trailingspace.js │ │ │ │ │ │ ├── fold │ │ │ │ │ │ │ ├── brace-fold.js │ │ │ │ │ │ │ ├── comment-fold.js │ │ │ │ │ │ │ ├── foldcode.js │ │ │ │ │ │ │ ├── foldgutter.css │ │ │ │ │ │ │ ├── foldgutter.js │ │ │ │ │ │ │ ├── indent-fold.js │ │ │ │ │ │ │ ├── markdown-fold.js │ │ │ │ │ │ │ └── xml-fold.js │ │ │ │ │ │ ├── hint │ │ │ │ │ │ │ ├── anyword-hint.js │ │ │ │ │ │ │ ├── css-hint.js │ │ │ │ │ │ │ ├── html-hint.js │ │ │ │ │ │ │ ├── javascript-hint.js │ │ │ │ │ │ │ ├── show-hint.css │ │ │ │ │ │ │ ├── show-hint.js │ │ │ │ │ │ │ ├── sql-hint.js │ │ │ │ │ │ │ └── xml-hint.js │ │ │ │ │ │ ├── lint │ │ │ │ │ │ │ ├── coffeescript-lint.js │ │ │ │ │ │ │ ├── css-lint.js │ │ │ │ │ │ │ ├── javascript-lint.js │ │ │ │ │ │ │ ├── json-lint.js │ │ │ │ │ │ │ ├── lint.css │ │ │ │ │ │ │ ├── lint.js │ │ │ │ │ │ │ └── yaml-lint.js │ │ │ │ │ │ ├── merge │ │ │ │ │ │ │ ├── merge.css │ │ │ │ │ │ │ └── merge.js │ │ │ │ │ │ ├── mode │ │ │ │ │ │ │ ├── loadmode.js │ │ │ │ │ │ │ ├── multiplex.js │ │ │ │ │ │ │ ├── multiplex_test.js │ │ │ │ │ │ │ ├── overlay.js │ │ │ │ │ │ │ └── simple.js │ │ │ │ │ │ ├── runmode │ │ │ │ │ │ │ ├── colorize.js │ │ │ │ │ │ │ ├── runmode-standalone.js │ │ │ │ │ │ │ ├── runmode.js │ │ │ │ │ │ │ └── runmode.node.js │ │ │ │ │ │ ├── scroll │ │ │ │ │ │ │ ├── annotatescrollbar.js │ │ │ │ │ │ │ ├── scrollpastend.js │ │ │ │ │ │ │ ├── simplescrollbars.css │ │ │ │ │ │ │ └── simplescrollbars.js │ │ │ │ │ │ ├── search │ │ │ │ │ │ │ ├── match-highlighter.js │ │ │ │ │ │ │ ├── matchesonscrollbar.css │ │ │ │ │ │ │ ├── matchesonscrollbar.js │ │ │ │ │ │ │ ├── search.js │ │ │ │ │ │ │ └── searchcursor.js │ │ │ │ │ │ ├── selection │ │ │ │ │ │ │ ├── active-line.js │ │ │ │ │ │ │ ├── mark-selection.js │ │ │ │ │ │ │ └── selection-pointer.js │ │ │ │ │ │ ├── tern │ │ │ │ │ │ │ ├── tern.css │ │ │ │ │ │ │ ├── tern.js │ │ │ │ │ │ │ └── worker.js │ │ │ │ │ │ └── wrap │ │ │ │ │ │ │ └── hardwrap.js │ │ │ │ │ ├── addons.min.js │ │ │ │ │ ├── bower.json │ │ │ │ │ ├── codemirror.min.css │ │ │ │ │ ├── codemirror.min.js │ │ │ │ │ ├── mode │ │ │ │ │ │ ├── apl │ │ │ │ │ │ │ ├── apl.js │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ ├── asterisk │ │ │ │ │ │ │ ├── asterisk.js │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ ├── clike │ │ │ │ │ │ │ ├── clike.js │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── scala.html │ │ │ │ │ │ ├── clojure │ │ │ │ │ │ │ ├── clojure.js │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ ├── cobol │ │ │ │ │ │ │ ├── cobol.js │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ ├── coffeescript │ │ │ │ │ │ │ ├── coffeescript.js │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ ├── commonlisp │ │ │ │ │ │ │ ├── commonlisp.js │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ ├── css │ │ │ │ │ │ │ ├── css.js │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ ├── less.html │ │ │ │ │ │ │ ├── less_test.js │ │ │ │ │ │ │ ├── scss.html │ │ │ │ │ │ │ ├── scss_test.js │ │ │ │ │ │ │ └── test.js │ │ │ │ │ │ ├── cypher │ │ │ │ │ │ │ ├── cypher.js │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ ├── d │ │ │ │ │ │ │ ├── d.js │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ ├── dart │ │ │ │ │ │ │ ├── dart.js │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ ├── diff │ │ │ │ │ │ │ ├── diff.js │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ ├── django │ │ │ │ │ │ │ ├── django.js │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ ├── dockerfile │ │ │ │ │ │ │ ├── dockerfile.js │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ ├── dtd │ │ │ │ │ │ │ ├── dtd.js │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ ├── dylan │ │ │ │ │ │ │ ├── dylan.js │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ ├── ebnf │ │ │ │ │ │ │ ├── ebnf.js │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ ├── ecl │ │ │ │ │ │ │ ├── ecl.js │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ ├── eiffel │ │ │ │ │ │ │ ├── eiffel.js │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ ├── erlang │ │ │ │ │ │ │ ├── erlang.js │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ ├── forth │ │ │ │ │ │ │ ├── forth.js │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ ├── fortran │ │ │ │ │ │ │ ├── fortran.js │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ ├── gas │ │ │ │ │ │ │ ├── gas.js │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ ├── gfm │ │ │ │ │ │ │ ├── gfm.js │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── test.js │ │ │ │ │ │ ├── gherkin │ │ │ │ │ │ │ ├── gherkin.js │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ ├── go │ │ │ │ │ │ │ ├── go.js │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ ├── groovy │ │ │ │ │ │ │ ├── groovy.js │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ ├── haml │ │ │ │ │ │ │ ├── haml.js │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── test.js │ │ │ │ │ │ ├── haskell │ │ │ │ │ │ │ ├── haskell.js │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ ├── haxe │ │ │ │ │ │ │ ├── haxe.js │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ ├── htmlembedded │ │ │ │ │ │ │ ├── htmlembedded.js │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ ├── htmlmixed │ │ │ │ │ │ │ ├── htmlmixed.js │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ ├── http │ │ │ │ │ │ │ ├── http.js │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ ├── idl │ │ │ │ │ │ │ ├── idl.js │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ ├── jade │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── jade.js │ │ │ │ │ │ ├── javascript │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ ├── javascript.js │ │ │ │ │ │ │ ├── json-ld.html │ │ │ │ │ │ │ ├── test.js │ │ │ │ │ │ │ └── typescript.html │ │ │ │ │ │ ├── jinja2 │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── jinja2.js │ │ │ │ │ │ ├── julia │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── julia.js │ │ │ │ │ │ ├── kotlin │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── kotlin.js │ │ │ │ │ │ ├── livescript │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── livescript.js │ │ │ │ │ │ ├── lua │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── lua.js │ │ │ │ │ │ ├── markdown │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ ├── markdown.js │ │ │ │ │ │ │ └── test.js │ │ │ │ │ │ ├── meta.js │ │ │ │ │ │ ├── mirc │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── mirc.js │ │ │ │ │ │ ├── mllike │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── mllike.js │ │ │ │ │ │ ├── modelica │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── modelica.js │ │ │ │ │ │ ├── nginx │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── nginx.js │ │ │ │ │ │ ├── ntriples │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── ntriples.js │ │ │ │ │ │ ├── octave │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── octave.js │ │ │ │ │ │ ├── pascal │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── pascal.js │ │ │ │ │ │ ├── pegjs │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── pegjs.js │ │ │ │ │ │ ├── perl │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── perl.js │ │ │ │ │ │ ├── php │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ ├── php.js │ │ │ │ │ │ │ └── test.js │ │ │ │ │ │ ├── pig │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── pig.js │ │ │ │ │ │ ├── properties │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── properties.js │ │ │ │ │ │ ├── puppet │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── puppet.js │ │ │ │ │ │ ├── python │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── python.js │ │ │ │ │ │ ├── q │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── q.js │ │ │ │ │ │ ├── r │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── r.js │ │ │ │ │ │ ├── rpm │ │ │ │ │ │ │ ├── changes │ │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── rpm.js │ │ │ │ │ │ ├── rst │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── rst.js │ │ │ │ │ │ ├── ruby │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ ├── ruby.js │ │ │ │ │ │ │ └── test.js │ │ │ │ │ │ ├── rust │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── rust.js │ │ │ │ │ │ ├── sass │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── sass.js │ │ │ │ │ │ ├── scheme │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── scheme.js │ │ │ │ │ │ ├── shell │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ ├── shell.js │ │ │ │ │ │ │ └── test.js │ │ │ │ │ │ ├── sieve │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── sieve.js │ │ │ │ │ │ ├── slim │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ ├── slim.js │ │ │ │ │ │ │ └── test.js │ │ │ │ │ │ ├── smalltalk │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── smalltalk.js │ │ │ │ │ │ ├── smarty │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── smarty.js │ │ │ │ │ │ ├── smartymixed │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── smartymixed.js │ │ │ │ │ │ ├── solr │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── solr.js │ │ │ │ │ │ ├── soy │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── soy.js │ │ │ │ │ │ ├── sparql │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── sparql.js │ │ │ │ │ │ ├── spreadsheet │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── spreadsheet.js │ │ │ │ │ │ ├── sql │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── sql.js │ │ │ │ │ │ ├── stex │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ ├── stex.js │ │ │ │ │ │ │ └── test.js │ │ │ │ │ │ ├── stylus │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── stylus.js │ │ │ │ │ │ ├── tcl │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── tcl.js │ │ │ │ │ │ ├── textile │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ ├── test.js │ │ │ │ │ │ │ └── textile.js │ │ │ │ │ │ ├── tiddlywiki │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ ├── tiddlywiki.css │ │ │ │ │ │ │ └── tiddlywiki.js │ │ │ │ │ │ ├── tiki │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ ├── tiki.css │ │ │ │ │ │ │ └── tiki.js │ │ │ │ │ │ ├── toml │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── toml.js │ │ │ │ │ │ ├── tornado │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── tornado.js │ │ │ │ │ │ ├── turtle │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── turtle.js │ │ │ │ │ │ ├── vb │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── vb.js │ │ │ │ │ │ ├── vbscript │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── vbscript.js │ │ │ │ │ │ ├── velocity │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── velocity.js │ │ │ │ │ │ ├── verilog │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ ├── test.js │ │ │ │ │ │ │ └── verilog.js │ │ │ │ │ │ ├── xml │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ ├── test.js │ │ │ │ │ │ │ └── xml.js │ │ │ │ │ │ ├── xquery │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ ├── test.js │ │ │ │ │ │ │ └── xquery.js │ │ │ │ │ │ ├── yaml │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── yaml.js │ │ │ │ │ │ └── z80 │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── z80.js │ │ │ │ │ ├── modes.min.js │ │ │ │ │ ├── package.json │ │ │ │ │ └── theme │ │ │ │ │ │ ├── 3024-day.css │ │ │ │ │ │ ├── 3024-night.css │ │ │ │ │ │ ├── ambiance-mobile.css │ │ │ │ │ │ ├── ambiance.css │ │ │ │ │ │ ├── base16-dark.css │ │ │ │ │ │ ├── base16-light.css │ │ │ │ │ │ ├── blackboard.css │ │ │ │ │ │ ├── cobalt.css │ │ │ │ │ │ ├── colorforth.css │ │ │ │ │ │ ├── eclipse.css │ │ │ │ │ │ ├── elegant.css │ │ │ │ │ │ ├── erlang-dark.css │ │ │ │ │ │ ├── lesser-dark.css │ │ │ │ │ │ ├── mbo.css │ │ │ │ │ │ ├── mdn-like.css │ │ │ │ │ │ ├── midnight.css │ │ │ │ │ │ ├── monokai.css │ │ │ │ │ │ ├── neat.css │ │ │ │ │ │ ├── neo.css │ │ │ │ │ │ ├── night.css │ │ │ │ │ │ ├── paraiso-dark.css │ │ │ │ │ │ ├── paraiso-light.css │ │ │ │ │ │ ├── pastel-on-dark.css │ │ │ │ │ │ ├── rubyblue.css │ │ │ │ │ │ ├── solarized.css │ │ │ │ │ │ ├── the-matrix.css │ │ │ │ │ │ ├── tomorrow-night-bright.css │ │ │ │ │ │ ├── tomorrow-night-eighties.css │ │ │ │ │ │ ├── twilight.css │ │ │ │ │ │ ├── vibrant-ink.css │ │ │ │ │ │ ├── xq-dark.css │ │ │ │ │ │ ├── xq-light.css │ │ │ │ │ │ └── zenburn.css │ │ │ │ ├── flowchart.min.js │ │ │ │ ├── jquery.flowchart.min.js │ │ │ │ ├── marked.min.js │ │ │ │ ├── prettify.min.js │ │ │ │ ├── raphael.min.js │ │ │ │ ├── sequence-diagram.min.js │ │ │ │ └── underscore.min.js │ │ │ │ ├── package.json │ │ │ │ └── plugins │ │ │ │ ├── code-block-dialog │ │ │ │ └── code-block-dialog.js │ │ │ │ ├── emoji-dialog │ │ │ │ ├── emoji-dialog.js │ │ │ │ └── emoji.json │ │ │ │ ├── goto-line-dialog │ │ │ │ └── goto-line-dialog.js │ │ │ │ ├── help-dialog │ │ │ │ ├── help-dialog.js │ │ │ │ └── help.md │ │ │ │ ├── html-entities-dialog │ │ │ │ ├── html-entities-dialog.js │ │ │ │ └── html-entities.json │ │ │ │ ├── image-dialog │ │ │ │ └── image-dialog.js │ │ │ │ ├── link-dialog │ │ │ │ └── link-dialog.js │ │ │ │ ├── plugin-template.js │ │ │ │ ├── preformatted-text-dialog │ │ │ │ └── preformatted-text-dialog.js │ │ │ │ ├── reference-link-dialog │ │ │ │ └── reference-link-dialog.js │ │ │ │ ├── table-dialog │ │ │ │ └── table-dialog.js │ │ │ │ └── test-plugin │ │ │ │ └── test-plugin.js │ │ ├── static │ │ │ ├── Roboto-Bold-normal.js │ │ │ ├── Roboto-Regular-normal.js │ │ │ ├── RobotoMono-Regular-normal.js │ │ │ ├── manifest.json │ │ │ └── search.html │ │ └── stylesheets │ │ │ ├── _animation.scss │ │ │ ├── _layout.scss │ │ │ ├── _themes.scss │ │ │ ├── _variables.scss │ │ │ ├── app.scss │ │ │ ├── fonts.scss │ │ │ ├── forms.scss │ │ │ ├── foundation-overrides.scss │ │ │ ├── foundation-settings.scss │ │ │ ├── markdown.scss │ │ │ └── mixins.scss │ ├── client_config.js │ ├── components │ │ ├── App.jsx │ │ ├── App.scss │ │ ├── all.scss │ │ ├── cards │ │ │ ├── BeneficiarySelector.jsx │ │ │ ├── BeneficiarySelector.scss │ │ │ ├── BeneficiarySelector.test.jsx │ │ │ ├── Comment.jsx │ │ │ ├── Comment.scss │ │ │ ├── DraftSummary.jsx │ │ │ ├── DraftSummary.scss │ │ │ ├── MarkdownViewer.jsx │ │ │ ├── MarkdownViewer.scss │ │ │ ├── NotificationsList.jsx │ │ │ ├── NotificationsList.scss │ │ │ ├── PostFull.jsx │ │ │ ├── PostFull.scss │ │ │ ├── PostSummary.jsx │ │ │ ├── PostSummary.scss │ │ │ ├── PostsList.jsx │ │ │ ├── PostsList.scss │ │ │ ├── PrimaryNavigation.jsx │ │ │ ├── PrimaryNavigation.scss │ │ │ ├── SearchUserList.jsx │ │ │ ├── SearchUserList.scss │ │ │ ├── SubscriptionsList.jsx │ │ │ ├── TagInput.jsx │ │ │ ├── UserListRow.jsx │ │ │ └── UserProfileHeader.jsx │ │ ├── elements │ │ │ ├── Ad.scss │ │ │ ├── AdSwipe.jsx │ │ │ ├── Announcement.jsx │ │ │ ├── Author │ │ │ │ ├── Author.story.jsx │ │ │ │ ├── __snapshots__ │ │ │ │ │ └── spec.js.snap │ │ │ │ ├── index.jsx │ │ │ │ ├── spec.js │ │ │ │ └── styles.scss │ │ │ ├── AuthorDropdown.jsx │ │ │ ├── AuthorDropdown.scss │ │ │ ├── AutocompleteInput.jsx │ │ │ ├── BiddingAd.jsx │ │ │ ├── Callout.jsx │ │ │ ├── Callout.story.jsx │ │ │ ├── CheckLoginOwner.jsx │ │ │ ├── ClaimBox.jsx │ │ │ ├── CloseButton.jsx │ │ │ ├── CommunityBanner.jsx │ │ │ ├── CommunityBanner.scss │ │ │ ├── CommunityPane.jsx │ │ │ ├── CommunityPaneMobile.jsx │ │ │ ├── ContentEditedWrapper │ │ │ │ ├── index.jsx │ │ │ │ └── story.jsx │ │ │ ├── DateJoinWrapper.jsx │ │ │ ├── Dropdown.jsx │ │ │ ├── Dropdown.scss │ │ │ ├── DropdownMenu.jsx │ │ │ ├── DropdownMenu.scss │ │ │ ├── DropdownMenu.story.jsx │ │ │ ├── Editor │ │ │ │ ├── index.jsx │ │ │ │ └── styles.scss │ │ │ ├── ElasticSearchInput │ │ │ │ ├── SearchHistory.jsx │ │ │ │ ├── SearchHistory.scss │ │ │ │ ├── SearchInput.story.jsx │ │ │ │ ├── index.jsx │ │ │ │ └── styles.scss │ │ │ ├── FlagButton.jsx │ │ │ ├── FlagButton.scss │ │ │ ├── Follow │ │ │ │ ├── Follow.story.jsx │ │ │ │ ├── __snapshots__ │ │ │ │ │ └── spec.js.snap │ │ │ │ ├── index.jsx │ │ │ │ └── spec.js │ │ │ ├── FormattedAsset.jsx │ │ │ ├── FormattedAsset.scss │ │ │ ├── GoogleAd.jsx │ │ │ ├── GoogleAd.scss │ │ │ ├── GptAd.jsx │ │ │ ├── GptAd.scss │ │ │ ├── HelpContent.jsx │ │ │ ├── Icon.jsx │ │ │ ├── Icon.scss │ │ │ ├── Icon.story.jsx │ │ │ ├── IconButton │ │ │ │ ├── IconButton.story.jsx │ │ │ │ ├── index.jsx │ │ │ │ └── styles.scss │ │ │ ├── Link.js │ │ │ ├── LoadingIndicator.jsx │ │ │ ├── LoadingIndicator.scss │ │ │ ├── LoadingIndicator.story.jsx │ │ │ ├── Memo │ │ │ │ ├── Memo.test.jsx │ │ │ │ └── index.jsx │ │ │ ├── MuteButton.jsx │ │ │ ├── MuteList.jsx │ │ │ ├── NativeSelect │ │ │ │ ├── NativeSelect.story.jsx │ │ │ │ ├── index.jsx │ │ │ │ └── styles.scss │ │ │ ├── Notices.jsx │ │ │ ├── Notices.scss │ │ │ ├── PageViewsCounter.jsx │ │ │ ├── PdfDownload.jsx │ │ │ ├── PostCategoryBanner.jsx │ │ │ ├── PostCategoryBanner.scss │ │ │ ├── QrReader.jsx │ │ │ ├── Reblog.jsx │ │ │ ├── Reblog.scss │ │ │ ├── Reblog.story.jsx │ │ │ ├── ReplyEditor.jsx │ │ │ ├── ReplyEditor.scss │ │ │ ├── ReplyEditorNew.jsx │ │ │ ├── Reputation.jsx │ │ │ ├── Reputation.scss │ │ │ ├── Reputation.story.jsx │ │ │ ├── Reveal.jsx │ │ │ ├── SanitizedLink │ │ │ │ ├── index.jsx │ │ │ │ └── styles.scss │ │ │ ├── SearchInput │ │ │ │ ├── SearchInput.story.jsx │ │ │ │ ├── index.jsx │ │ │ │ └── styles.scss │ │ │ ├── SearchTabs │ │ │ │ ├── index.jsx │ │ │ │ └── styles.scss │ │ │ ├── SettingsEditButton.jsx │ │ │ ├── ShareMenu.jsx │ │ │ ├── ShareMenu.scss │ │ │ ├── SidebarLinks.jsx │ │ │ ├── SidebarNewUsers.jsx │ │ │ ├── SlateEditor.jsx │ │ │ ├── SlateEditor.scss │ │ │ ├── SortOrder │ │ │ │ ├── SortOrder.story.jsx │ │ │ │ ├── index.jsx │ │ │ │ └── styles.scss │ │ │ ├── SteemLogo │ │ │ │ ├── SteemLogo.story.jsx │ │ │ │ ├── index.jsx │ │ │ │ └── styles.scss │ │ │ ├── SteemMarket.jsx │ │ │ ├── SteemMarket.scss │ │ │ ├── SubscribeButton.jsx │ │ │ ├── SvgImage.jsx │ │ │ ├── SvgImage.story.jsx │ │ │ ├── Tag.jsx │ │ │ ├── TagList.jsx │ │ │ ├── TagList.scss │ │ │ ├── TagList.story.jsx │ │ │ ├── TimeAgoWrapper │ │ │ │ ├── index.jsx │ │ │ │ └── story.jsx │ │ │ ├── Tooltip.jsx │ │ │ ├── Tooltip.story.jsx │ │ │ ├── TronAd.jsx │ │ │ ├── UserList.jsx │ │ │ ├── UserList.scss │ │ │ ├── UserList.story.jsx │ │ │ ├── UserNames.jsx │ │ │ ├── UserNames.scss │ │ │ ├── UserTitle.jsx │ │ │ ├── Userpic.jsx │ │ │ ├── Userpic.scss │ │ │ ├── Userpic.story.jsx │ │ │ ├── VerticalMenu.jsx │ │ │ ├── VerticalMenu.scss │ │ │ ├── VideoAd.jsx │ │ │ ├── VideoAd.scss │ │ │ ├── VotesAndComments.jsx │ │ │ ├── VotesAndComments.scss │ │ │ ├── Voting.jsx │ │ │ ├── Voting.scss │ │ │ ├── Voting.story.jsx │ │ │ ├── Voting.test.jsx │ │ │ ├── WelcomePanel.jsx │ │ │ ├── YoutubePreview.jsx │ │ │ └── YoutubePreview.scss │ │ ├── modules │ │ │ ├── ArticleLayoutSelector.jsx │ │ │ ├── CommunitySettings.jsx │ │ │ ├── CommunitySettings.scss │ │ │ ├── CommunitySubscriberList.jsx │ │ │ ├── ConfirmTransactionForm.jsx │ │ │ ├── ConfirmTransactionForm.scss │ │ │ ├── ConnectedSidePanel │ │ │ │ └── index.jsx │ │ │ ├── Dialogs.jsx │ │ │ ├── ExplorePost.jsx │ │ │ ├── FlagCommunityPost.jsx │ │ │ ├── Header │ │ │ │ ├── Header.test.js │ │ │ │ ├── index.jsx │ │ │ │ └── styles.scss │ │ │ ├── LoginForm.jsx │ │ │ ├── LoginForm.scss │ │ │ ├── Modals.jsx │ │ │ ├── Modals_BackUp.jsx │ │ │ ├── MutePost.jsx │ │ │ ├── PostAdvancedSettings.jsx │ │ │ ├── PostDrafts.jsx │ │ │ ├── PostDrafts.scss │ │ │ ├── PostTemplates.jsx │ │ │ ├── PostTemplates.scss │ │ │ ├── PromotePost.jsx │ │ │ ├── Settings.jsx │ │ │ ├── Settings.scss │ │ │ ├── SidePanel │ │ │ │ ├── index.jsx │ │ │ │ └── styles.scss │ │ │ ├── TermsAgree.jsx │ │ │ ├── Transfer.scss │ │ │ ├── UserRole.jsx │ │ │ ├── UserTitleEditor.jsx │ │ │ └── UserWallet.scss │ │ ├── pages │ │ │ ├── About.jsx │ │ │ ├── About.scss │ │ │ ├── Announcement.jsx │ │ │ ├── Announcement.scss │ │ │ ├── Benchmark.jsx │ │ │ ├── CommunitiesIndex.jsx │ │ │ ├── CommunitiesIndex.scss │ │ │ ├── CommunityRoles.jsx │ │ │ ├── CommunityRoles.scss │ │ │ ├── Faq.jsx │ │ │ ├── Index.jsx │ │ │ ├── Login.jsx │ │ │ ├── NotFound.jsx │ │ │ ├── Post.jsx │ │ │ ├── Post.scss │ │ │ ├── PostPage.jsx │ │ │ ├── PostPageNoCategory.jsx │ │ │ ├── PostsIndex.jsx │ │ │ ├── PostsIndex.scss │ │ │ ├── PostsIndexLayout.jsx │ │ │ ├── Privacy.jsx │ │ │ ├── Privacy.scss │ │ │ ├── Rewards.jsx │ │ │ ├── Rewards.scss │ │ │ ├── SearchIndex.jsx │ │ │ ├── SearchIndex.scss │ │ │ ├── SubmitPost.jsx │ │ │ ├── SubmitPostServerRender.jsx │ │ │ ├── Support.jsx │ │ │ ├── TagsIndex.jsx │ │ │ ├── TagsIndex.scss │ │ │ ├── Topics.jsx │ │ │ ├── Topics.scss │ │ │ ├── Tos.jsx │ │ │ ├── Tos.scss │ │ │ ├── UserProfile.jsx │ │ │ ├── UserProfile.scss │ │ │ ├── Welcome.jsx │ │ │ ├── Welcome.scss │ │ │ └── XSS.jsx │ │ └── utils │ │ │ └── ReactMutationObserver.jsx │ ├── help │ │ └── en │ │ │ ├── faq.md │ │ │ ├── tos.md │ │ │ └── welcome.md │ ├── locales │ │ ├── README.md │ │ ├── counterpart │ │ │ ├── es.js │ │ │ ├── fr.js │ │ │ ├── it.js │ │ │ ├── ja.js │ │ │ ├── ko.js │ │ │ ├── pl.js │ │ │ ├── uk.js │ │ │ └── zh.js │ │ ├── en.json │ │ ├── es.json │ │ ├── fr.json │ │ ├── it.json │ │ ├── ja.json │ │ ├── ko.json │ │ ├── normalize.sh │ │ ├── pl.json │ │ ├── ru.json │ │ ├── uk.json │ │ └── zh.json.remove │ ├── redux │ │ ├── AppReducer.js │ │ ├── AppReducer.test.js │ │ ├── AuthSaga.js │ │ ├── CommunityReducer.js │ │ ├── CommunitySaga.js │ │ ├── CommunitySearchReducer.js │ │ ├── CommunitySearchSaga.js │ │ ├── FetchDataSaga.js │ │ ├── FetchDataSaga.test.js │ │ ├── FollowSaga.js │ │ ├── GlobalReducer.js │ │ ├── GlobalReducer.test.js │ │ ├── GlobalSaga.js │ │ ├── OffchainReducer.js │ │ ├── OffchainReducer.test.js │ │ ├── PollingSaga.js │ │ ├── RootReducer.js │ │ ├── SagaShared.js │ │ ├── SearchReducer.js │ │ ├── SearchSaga.js │ │ ├── TransactionReducer.js │ │ ├── TransactionSaga.js │ │ ├── TransactionSaga.test.js │ │ ├── UserProfilesReducer.js │ │ ├── UserProfilesSaga.js │ │ ├── UserReducer.js │ │ ├── UserSaga.js │ │ ├── adReducer.js │ │ ├── constants.js │ │ ├── stateCleaner.js │ │ └── tests │ │ │ ├── global.json │ │ │ └── global.test.js │ └── utils │ │ ├── Accessors.js │ │ ├── ActivityTracker.js │ │ ├── AffiliationMap.js │ │ ├── AppPropTypes.js │ │ ├── BadActorList.js │ │ ├── BrowserTests.js │ │ ├── CanonicalLinker.js │ │ ├── CanonicalLinker.test.js │ │ ├── ChainValidation.js │ │ ├── Common.js │ │ ├── Community.js │ │ ├── ConsoleExports.js │ │ ├── ContentPreview.js │ │ ├── DMCAList.js │ │ ├── DMCAUserList.js │ │ ├── DomUtils.js │ │ ├── ExtractContent.js │ │ ├── ExtractMeta.js │ │ ├── FormatCoins.js │ │ ├── FormatDecimal.test.js │ │ ├── FrontendLogger.js │ │ ├── FrontendLogger.test.js │ │ ├── GDPRUserList.js │ │ ├── GptUtils.js │ │ ├── Html.js │ │ ├── ImageUserBlockList.js │ │ ├── JsPlugins.js │ │ ├── Links.js │ │ ├── Links.test.js │ │ ├── ParsersAndFormatters.js │ │ ├── Phishing.js │ │ ├── ProxifyUrl.js │ │ ├── ProxifyUrl.test.js │ │ ├── RPCNode.js │ │ ├── ReactForm.js │ │ ├── ReduxForms.js │ │ ├── RegisterServiceWorker.js │ │ ├── RemarkablePlugin.js │ │ ├── RemarkableStripper.js │ │ ├── SanitizeConfig.js │ │ ├── ServerApiClient.js │ │ ├── SlateEditor │ │ ├── Align.js │ │ ├── DemoState.js │ │ ├── HRule.js │ │ ├── Helpers.js │ │ ├── Iframe.js │ │ ├── Image.js │ │ ├── Link.js │ │ └── Schema.js │ │ ├── StateFunctions.js │ │ ├── SteemKeychain.js │ │ ├── Unicode.js │ │ ├── UserUtil.js │ │ ├── VerifiedExchangeList.js │ │ ├── __mocks__ │ │ └── GDPRUserList.js │ │ ├── emit.js │ │ ├── shouldComponentUpdate.js │ │ ├── steemApi.js │ │ └── userIllegalContent.js ├── server │ ├── api │ │ └── general.js │ ├── app_render.jsx │ ├── hardwarestats.js │ ├── index.js │ ├── json │ │ ├── post_json.jsx │ │ └── user_json.jsx │ ├── prod_logger.js │ ├── redirects.js │ ├── requesttimings.js │ ├── server-error.jsx │ ├── server-html.jsx │ ├── server.js │ └── utils │ │ ├── RequestTimer.js │ │ ├── SpecialPosts.js │ │ ├── StatsLoggerClient.js │ │ ├── SteemMarket.js │ │ └── misc.js └── shared │ ├── HtmlReady.js │ ├── HtmlReady.test.js │ ├── RootSaga.js │ ├── UniversalRender.jsx │ ├── api_client │ ├── ChainConfig.js │ └── index.js │ ├── clash │ └── object2json.js │ └── constants.js ├── webpack ├── base.config.js ├── debug.config.js ├── dev-server.js ├── dev.config.js ├── prod.config.js ├── storybook.config.js ├── utils │ ├── start-koa.js │ └── write-stats.js └── webpack-isotools-config.js └── yarn.lock /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["es2015", "stage-0", "react"], 3 | "plugins": ["transform-runtime", "transform-decorators-legacy"], 4 | "ignore": [ 5 | "src/app/assets/plugins/**/*.js" 6 | ] 7 | } 8 | -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | tmp 3 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig helps developers define and maintain consistent 2 | # coding styles between different editors and IDEs 3 | # editorconfig.org 4 | 5 | root = true 6 | 7 | [*] 8 | 9 | # Change these settings to your own preference 10 | indent_style = space 11 | indent_size = 4 12 | 13 | # We recommend you to keep these unchanged 14 | end_of_line = lf 15 | charset = utf-8 16 | trim_trailing_whitespace = true 17 | insert_final_newline = true 18 | 19 | [*.md] 20 | trim_trailing_whitespace = false 21 | 22 | [*.json] 23 | indent_size = 2 24 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .idea 3 | coverage 4 | node_modules 5 | *.log 6 | dist 7 | vendor/* 8 | tmp/* 9 | .vagrant 10 | lib 11 | !src/app/assets/plugins/editor.md/lib 12 | .env 13 | 14 | -------------------------------------------------------------------------------- /.nsprc: -------------------------------------------------------------------------------- 1 | { 2 | "exceptions": ["https://nodesecurity.io/advisories/566"] 3 | } 4 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | src/app/assets/static/jspdf.min.js 2 | src/app/assets/plugins/* 3 | src/app/locales/zh.json.remove -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "tabWidth" : 4, 3 | "singleQuote" : true, 4 | "trailingComma" : "es5" 5 | } 6 | -------------------------------------------------------------------------------- /.storybook/addons.js: -------------------------------------------------------------------------------- 1 | import '@storybook/addon-knobs/register'; 2 | import 'storybook-addon-intl/register'; -------------------------------------------------------------------------------- /.storybook/decorators/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | const container = { 4 | display: 'table', 5 | position: 'absolute', 6 | height: '100%', 7 | width: '100%', 8 | }; 9 | 10 | const middle = { 11 | display: 'table-cell', 12 | verticalAlign: 'middle', 13 | }; 14 | 15 | const center = { 16 | marginLeft: 'auto', 17 | marginRight: 'auto', 18 | //border: 'solid black', 19 | width: '300px', 20 | }; 21 | 22 | export const Center = (storyFn) => ( 23 |
7 | Communities are live!{' '} 8 | 12 | Read more 13 | . 14 |
15 | 18 |{icon}
26 |{svg}
28 |{icon}
21 |12 | {tt('g.please_email_questions_to')}{' '} 13 | 14 | contact@steemit.com 15 | . 16 |
17 |21 | 22 | const rect = node.getBoundingClientRect(); 23 | return rect; 24 | }; 25 | -------------------------------------------------------------------------------- /src/app/utils/SlateEditor/Link.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | export default class Link extends React.Component { 4 | state = {}; 5 | 6 | componentDidMount() {} 7 | 8 | render() { 9 | const { node, state, attributes, children } = this.props; 10 | 11 | const isFocused = state.selection.hasEdgeIn(node); 12 | const className = isFocused ? 'active' : null; 13 | const href = node.data.get('href'); 14 | 15 | return ( 16 | 17 | {children} 18 | 19 | ); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/app/utils/SteemKeychain.js: -------------------------------------------------------------------------------- 1 | import { isLoggedIn, extractLoginData } from 'app/utils/UserUtil'; 2 | 3 | /** 4 | * 5 | * @returns {boolean} 6 | */ 7 | export function hasCompatibleKeychain() { 8 | return ( 9 | window.steem_keychain && 10 | window.steem_keychain.requestSignBuffer && 11 | window.steem_keychain.requestBroadcast && 12 | window.steem_keychain.requestSignedCall 13 | ); 14 | } 15 | 16 | /** 17 | * 18 | * @returns {boolean} 19 | */ 20 | export function isLoggedInWithKeychain() { 21 | if (!isLoggedIn()) { 22 | return false; 23 | } 24 | if (!hasCompatibleKeychain()) { 25 | // possible to log in w/ keychain, then disable plugin 26 | return false; 27 | } 28 | const data = localStorage.getItem('autopost2'); 29 | const [ 30 | username, 31 | password, 32 | memoWif, 33 | login_owner_pubkey, 34 | login_with_keychain, 35 | ] = extractLoginData(data); 36 | return !!login_with_keychain; 37 | } 38 | -------------------------------------------------------------------------------- /src/app/utils/UserUtil.js: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * @returns {boolean} 4 | */ 5 | export const isLoggedIn = () => 6 | typeof localStorage !== 'undefined' && !!localStorage.getItem('autopost2'); 7 | 8 | /** 9 | * 10 | * @returns {string} 11 | */ 12 | export const packLoginData = ( 13 | username, 14 | password, 15 | memoWif, 16 | login_owner_pubkey, 17 | login_with_keychain 18 | ) => 19 | new Buffer( 20 | `${username}\t${password}\t${memoWif || ''}\t${login_owner_pubkey || 21 | ''}\t${login_with_keychain || ''}` 22 | ).toString('hex'); 23 | 24 | /** 25 | * 26 | * @returns {array} [username, password, memoWif, login_owner_pubkey, login_with_keychain] 27 | */ 28 | export const extractLoginData = data => 29 | new Buffer(data, 'hex').toString().split('\t'); 30 | 31 | export default { 32 | isLoggedIn, 33 | extractLoginData, 34 | }; 35 | -------------------------------------------------------------------------------- /src/app/utils/VerifiedExchangeList.js: -------------------------------------------------------------------------------- 1 | const list = ` 2 | bittrex 3 | blocktrades 4 | changelly 5 | deepcrypto8 6 | gopax-deposit 7 | hitbtc-exchange 8 | poloniex 9 | upbit-exchange 10 | ` 11 | .trim() 12 | .split('\n'); 13 | 14 | export default list; 15 | -------------------------------------------------------------------------------- /src/app/utils/__mocks__/GDPRUserList.js: -------------------------------------------------------------------------------- 1 | export default ['gdpr']; 2 | -------------------------------------------------------------------------------- /src/app/utils/emit.js: -------------------------------------------------------------------------------- 1 | const EventEmitter = require('events').EventEmitter; 2 | const emit = new EventEmitter(); 3 | export { emit }; 4 | -------------------------------------------------------------------------------- /src/app/utils/userIllegalContent.js: -------------------------------------------------------------------------------- 1 | const list = ` 2 | aplomb 3 | ` 4 | .trim() 5 | .split('\n'); 6 | 7 | export default list; 8 | -------------------------------------------------------------------------------- /src/server/redirects.js: -------------------------------------------------------------------------------- 1 | import koa_router from 'koa-router'; 2 | 3 | const redirects = [ 4 | // example: [/\/about(\d+)-(.+)/, '/about?$0:$1', 302], 5 | [/^\/recent\/?$/, '/created'], 6 | [/^\/pick_account.*/, 'https://signup.steemit.com'], 7 | ]; 8 | 9 | export default function useRedirects(app) { 10 | const router = koa_router(); 11 | 12 | app.use(router.routes()); 13 | 14 | redirects.forEach(r => { 15 | router.get(r[0], function*() { 16 | const dest = Object.keys(this.params).reduce( 17 | (value, key) => value.replace('$' + key, this.params[key]), 18 | r[1] 19 | ); 20 | console.log( 21 | `server redirect: [${r[0]}] ${this.request.url} -> ${dest}` 22 | ); 23 | this.status = r[2] || 301; 24 | this.redirect(dest); 25 | }); 26 | }); 27 | } 28 | -------------------------------------------------------------------------------- /src/server/requesttimings.js: -------------------------------------------------------------------------------- 1 | import RequestTimer from './utils/RequestTimer'; 2 | 3 | function requestTime(statsLoggerClient) { 4 | return function*(next) { 5 | this.state.requestTimer = new RequestTimer( 6 | statsLoggerClient, 7 | 'request', 8 | `method=${this.request.method} path=${this.request.path}` 9 | ); 10 | 11 | yield* next; 12 | 13 | this.state.requestTimer.finish(); 14 | }; 15 | } 16 | 17 | module.exports = requestTime; 18 | -------------------------------------------------------------------------------- /src/server/server-error.jsx: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react'; 2 | 3 | class ServerError extends Component { 4 | render() { 5 | return ( 6 |
Looks like something went wrong on our end.
22 |23 | Head back to Steemit homepage. 24 |
25 |