1
0
forked from iarv/nntpchan

Compare commits

..

1097 Commits

Author SHA1 Message Date
Jeff Becker 7b8d33826b initial neochan commit 2016-10-15 09:05:38 -04:00
Jan Verbeek 9e9a1efe06 Merge https://gitgud.io/uguu/nntpchan
Conflicts:
	build-js.sh
	build.sh
2016-10-08 14:29:46 +02:00
Jeff Becker a5d7cb9074 Merge branch 'master' of ssh://github.com/majestrate/nntpchan 2016-10-08 08:12:37 -04:00
Jeff 053b5870cf Merge pull request #138 from wzeth/patch-15
Explicit notice of redis cache deprecation
2016-10-08 08:09:59 -04:00
wzeth 4ab90f3152 Explicit notice of redis cache deprecation
Users should know that redis cache is no longer valid as of SRNDv2 commit 96de42
2016-10-08 05:08:46 -04:00
Jeff Becker dc75a3513e add js branding 2016-10-07 10:17:29 -04:00
Jeff Becker 40ceb747ae refactor structure 2016-10-07 10:06:25 -04:00
Jeff Becker 6996e3abc4 remove cuckhold pow in postform 2016-10-07 08:26:50 -04:00
Jeff Becker 5118ffb3f8 fix tomorrow.css 2016-10-07 07:36:33 -04:00
Jeff Becker 287a49f196 fix tomorrow.css 2016-10-07 07:35:06 -04:00
Jeff Becker 698ed1d42e previous commit 2016-10-07 07:34:08 -04:00
Jeff Becker a0deb532e3 fix bloodgod.css moar 2016-10-07 07:33:03 -04:00
Jeff Becker 0e1e6201ca fix bloodgod.css 2016-10-07 07:30:29 -04:00
Jeff Becker 6ea75236fa fix post.mustache 2016-10-07 07:25:30 -04:00
Jeff Becker 61281190bb disable feature 2016-10-07 07:24:00 -04:00
Jeff Becker 2355528b46 fug 2016-10-02 20:42:45 -04:00
Jeff Becker db5b8ec309 try fixing liveui for chrome 2016-10-02 20:36:59 -04:00
Jeff Becker a0a0a6feca update readme 2016-10-02 09:01:58 -04:00
Jeff 787bef7625 Merge pull request #134 from wzeth/patch-13
Use more succinct postgres role creation command
2016-09-10 10:21:08 -04:00
wzeth e57d4ea921 Use more succinct postgres role creation command
It is far less error prone to use the tools that Postgres provides to create the role and the database. This amendment also ensures the created role password is encrypted.
2016-09-10 09:34:00 -04:00
Jeff c6c9c3f53b apply mona's css patch 2016-09-06 19:05:52 -04:00
Jeff Becker f7eb634aa1 fix :p 2016-08-14 11:27:46 -04:00
Jeff Becker 74f07c3a6c add test file 2016-08-14 11:26:07 -04:00
Jeff Becker 95864559fb wrap post in pre tag 2016-08-02 20:03:45 -04:00
Jeff Becker 5155205e8c indent 2016-08-01 07:34:35 -04:00
Jeff Becker d91b0d3e99 Merge branch 'master' of ssh://github.com/majestrate/nntpchan 2016-08-01 07:24:43 -04:00
Jeff Becker 3df355abdb update banners 2016-08-01 07:24:25 -04:00
Jeff Becker 850e5bccae fix css 2016-07-30 08:03:32 -04:00
Jeff Becker 713fe21190 comiit changes 2016-07-30 08:02:05 -04:00
Jeff 3d683ab87e Merge pull request #131 from deavmi/patch-1
Update building.md
2016-07-22 06:24:50 -04:00
Tristan B. Kildaire a4053f0f1a Update building.md 2016-07-21 20:57:04 +02:00
Jeff 87e29cc117 Merge pull request #129 from deavmi/patch-1
Various fixes
2016-07-19 19:16:11 -04:00
Tristan B. Kildaire c17d0fb0bb Various fixes
* Added missing period.
* Fixed typo.
2016-07-19 22:46:22 +02:00
Jeff Becker 985863deb2 add fade to post hide/unhide 2016-07-18 11:12:47 -04:00
Jeff Becker a9d2c0425d have post hiding persist in localstorage 2016-07-18 10:44:18 -04:00
Jeff Becker 76cb2341ce add hr to post for reply hider 2016-07-18 09:59:53 -04:00
Jeff Becker ceb6f09a3f update 2016-07-18 09:50:40 -04:00
Jeff Becker adf3540556 * add hide-post.js
* disable cuckoo_miner.js
2016-07-18 09:49:44 -04:00
Jeff Becker 2ce8a38b0b update css 2016-07-18 08:26:41 -04:00
Jeff Becker e62d959b0b remove title from post no 2016-07-18 08:17:48 -04:00
Jeff Becker 4216a777a3 fix name field in post.mustache 2016-07-18 08:13:27 -04:00
Jeff Becker 5873b41e00 add hr to separate post header from post body 2016-07-18 08:11:10 -04:00
Jeff Becker 14635e9472 have postreply class float right 2016-07-18 08:08:03 -04:00
Jeff Becker 422f3de11d add postreply class to div for future css 2016-07-18 08:04:58 -04:00
Jeff Becker 64b5531fed change post.mustache format to be "better" 2016-07-18 08:02:42 -04:00
Jeff Becker 17f3b25e51 fixes 2016-07-18 07:57:25 -04:00
Jeff Becker 60f0c19a9f update all 2016-07-18 07:51:15 -04:00
Jeff Becker f4f2479b8a fix 2016-07-17 11:34:39 -04:00
Jeff Becker 3506d7f975 try fixing liveui 2016-07-17 11:28:49 -04:00
Jeff Becker 9acca366d0 livechan post via ajax not websocket 2016-07-17 11:23:15 -04:00
Jeff Becker 70fd791545 fix 2016-07-13 09:17:20 -04:00
Jeff Becker 9f3c41fb0b more theme tweaks 2016-07-13 09:16:34 -04:00
Jeff Becker 2ff6088605 fix typo 2016-07-13 09:15:39 -04:00
Jeff Becker 54644e0da2 more theme updates / unborking 2016-07-13 09:14:39 -04:00
Jeff Becker dbd05c30c3 update dayman theme 2016-07-13 09:02:26 -04:00
Jeff Becker 587cdf4e75 fix tomorrow theme 2016-07-13 09:00:24 -04:00
Jeff Becker 76d75b260f update css for livechan 2016-07-11 14:48:33 -04:00
Jeff Becker 35ff3759f4 revert 2016-07-10 07:07:36 -04:00
Jeff Becker 671db6e483 update livechan.js 2016-07-10 07:05:19 -04:00
Jeff Becker 32566bfd84 fixes for liveui 2016-07-09 15:39:35 -04:00
Jeff Becker 4b02ad6d89 don't default to random, default to ukko 2016-07-09 14:51:31 -04:00
Jeff Becker a5c2f8d86f update livechan for ukko view 2016-07-09 14:48:06 -04:00
Jeff Becker 6e1e7440dc update livechan css 2016-07-08 08:55:09 -04:00
Jeff Becker 0b460eeb5d fix css 2016-07-08 08:52:10 -04:00
Jeff Becker 2a32bb75d5 fix captcha css 2016-07-08 08:50:31 -04:00
Jeff Becker cf91d8ffa5 Merge branch 'master' of ssh://github.com/majestrate/nntpchan 2016-07-08 08:48:10 -04:00
Jeff Becker 375713390e switch livechan.css to use dark theme 2016-07-08 08:47:46 -04:00
Jeff f823b0e612 Merge pull request #127 from deavmi/patch-1
Update srnd.md
2016-07-07 19:29:25 -04:00
Tristan B. Kildaire cb1821189a Update srnd.md 2016-07-07 19:04:19 +02:00
Jeff Becker 1a5862213c Merge branch 'master' of ssh://github.com/majestrate/nntpchan 2016-07-06 13:37:13 -04:00
Jeff Becker 96c019324d update ukko template to point livechan link to livechan 2016-07-06 13:36:50 -04:00
Jeff 1e905b6bbf Merge pull request #126 from wzeth/patch-12
update definitions for allow_anon*
2016-07-06 12:40:45 -04:00
wzeth 7c6726b5fc update definitions for allow_anon*
I have 40% confidence this is correct :v)
2016-07-06 12:35:34 -04:00
Jeff Becker 24d18ff599 hide captcha by default 2016-07-06 08:12:56 -04:00
Jeff Becker 16d0489cd7 don't show captcha on first start 2016-07-06 08:05:31 -04:00
Jeff Becker 5875347966 focus on new threads in liveui 2016-07-06 07:59:13 -04:00
Jeff Becker b2c1d9eb26 unscrewup reconnect 2016-07-05 20:43:36 -04:00
Jeff Becker a0bc39aaa5 expire old convos 2016-07-05 19:22:08 -04:00
Jeff Becker b887d07172 default to overchan.random for livechan 2016-07-05 17:46:34 -04:00
Jeff Becker 1f48c58f6b fix css for livechan file input 2016-07-05 17:39:40 -04:00
Jeff Becker e8eec5862f lower padding for chat input widget 2016-07-05 13:09:56 -04:00
Jeff Becker bf7213bf09 position fixed 2016-07-05 12:59:36 -04:00
Jeff Becker b2201c4ef7 add subjects 2016-07-05 12:58:13 -04:00
Jeff Becker a4747b9965 various fixes 2016-07-05 12:45:28 -04:00
Jeff Becker 5ec4c823fe fix css for firefox 2016-07-05 12:28:37 -04:00
Jeff Becker 00d0be952f position fixed 2016-07-05 12:19:40 -04:00
Jeff Becker c448777fe9 update livechan template 2016-07-05 12:16:32 -04:00
Jeff Becker 30b54c17fa document -> document.body 2016-07-05 12:14:52 -04:00
Jeff Becker e954c57da6 fix up livechan template 2016-07-05 12:13:48 -04:00
Jeff Becker d5d30893e5 livechan fixes 2016-07-05 10:11:58 -04:00
Jeff Becker 72947dbbcc update livechan to be aware of convos 2016-07-05 09:53:23 -04:00
Jeff Becker 1c632666ab update livechan 2016-07-05 08:17:19 -04:00
Jeff Becker 5cf12f37a5 meh this should work for livechan ui 2016-07-04 15:48:40 -04:00
Jeff Becker 9c038021b5 update rollover in livechan 2016-07-04 12:50:00 -04:00
Jeff Becker 4a8861761d update livechan to allow attachments 2016-07-04 11:52:43 -04:00
Jeff Becker 13e0010419 update rollover in livechan ui 2016-07-04 11:28:10 -04:00
Jeff Becker e461462bd6 actually fix thumbnails 2016-07-04 10:43:08 -04:00
Jeff Becker 8101e67b10 fix thumbnailing 2016-07-04 10:40:09 -04:00
Jeff Becker 63edd14243 fix date error 2016-07-04 10:36:10 -04:00
Jeff Becker d2142f7c83 Merge branch 'master' of ssh://github.com/majestrate/nntpchan 2016-07-04 10:13:52 -04:00
Jeff Becker 28b1864841 add new livechan ui 2016-07-04 10:12:03 -04:00
Jeff 5fa1e76971 Merge pull request #125 from wzeth/patch-11
document archive in [nntp]
2016-07-04 07:16:14 -04:00
wzeth 40eeb116de document archive in [nntp] 2016-07-04 02:27:56 -04:00
ring a502259ba9 Quote variables, remove trailing whitespace
If you don't quote your variables the scripts get very buggy if you run
them with arguments with spaces in them, or even run them from a
directory with spaces in its path.
2016-07-02 23:30:03 +02:00
Jeff cac18a5e44 Merge pull request #124 from deavmi/master
Update README.md
2016-07-02 08:32:25 -04:00
Tristan B. Kildaire c86f573440 Update README.md 2016-07-02 14:15:59 +02:00
Jeff Becker 6f5130d8fd Merge branch 'master' of ssh://github.com/majestrate/nntpchan 2016-06-30 09:01:31 -04:00
Jeff Becker 17b8101349 update livechan.js and stylesheets 2016-06-30 09:01:11 -04:00
Jeff 5e53ae6f04 Merge pull request #122 from deavmi/patch-1
Can I put this here?
2016-06-30 06:50:12 -04:00
Tristan B. Kildaire 50c395aad4 Update TODO.md 2016-06-30 12:48:05 +02:00
Jeff 18bf12e556 Merge pull request #118 from deavmi/patch-2
Create thunderbird-newsreader-configuration.md
2016-06-30 06:46:19 -04:00
Jeff bc1c038468 Merge pull request #117 from deavmi/patch-1
Create pan-newsreader-configuration.md
2016-06-30 06:46:08 -04:00
Jeff 7117a25f9a Merge pull request #116 from deavmi/patch-3
Update configure-newsreader.md
2016-06-30 06:45:50 -04:00
Jeff ef69bda0d7 Merge pull request #120 from deavmi/patch-5
Update README.md
2016-06-30 06:45:36 -04:00
Jeff ab6ac43851 Merge pull request #121 from deavmi/patch-6
Update README.md
2016-06-30 06:45:28 -04:00
Jeff 28feb5a84e Merge pull request #119 from deavmi/patch-4
Update fr-FR.ini
2016-06-30 06:44:26 -04:00
Tristan B. Kildaire 9e3e0cc443 Update README.md 2016-06-30 11:40:19 +02:00
Tristan B. Kildaire c573fb646b Update README.md 2016-06-30 11:37:47 +02:00
Tristan B. Kildaire 93b3e0f83f Update fr-FR.ini 2016-06-30 11:35:23 +02:00
Tristan B. Kildaire 7dda235ab1 Update configure-newsreader.md 2016-06-30 11:32:39 +02:00
Tristan B. Kildaire 09e7969479 Create thunderbird-newsreader-configuration.md 2016-06-30 11:32:37 +02:00
Tristan B. Kildaire cb37a45b67 Create pan-newsreader-configuration.md 2016-06-30 11:32:36 +02:00
Jeff Becker e25d6ab370 remove unneeded css rule 2016-06-20 15:11:05 -04:00
Jeff Becker e2194d3fbd fix css so that inline expand of images works 2016-06-20 13:05:36 -04:00
Jeff fdc4234d08 Merge pull request #113 from wzeth/patch-9
document feeds.d
2016-06-20 12:58:06 -04:00
wzeth 0c0160da6d Update srnd.md 2016-06-20 11:21:46 -04:00
wzeth fd82218e5f doucment feeds.d 2016-06-20 11:18:19 -04:00
Jeff Becker 091d74af52 Merge branch 'master' of ssh://github.com/majestrate/nntpchan 2016-06-20 09:38:10 -04:00
Jeff Becker e690b7dd9c add feeds.d directory 2016-06-20 09:37:57 -04:00
Jeff a856af693f Merge pull request #112 from wzeth/patch-8
document SRND_FEEDS_INI_PATH environment variable
2016-06-20 07:47:24 -04:00
Jeff 3668eb7822 Merge pull request #111 from wzeth/patch-7
document SRND_INI_PATH environment variable
2016-06-20 07:47:09 -04:00
wzeth 3cc04a6cad document SRND_FEEDS_INI_PATH environment variable 2016-06-20 10:09:24 +00:00
wzeth e6967a75e7 document custom config locations 2016-06-20 09:59:03 +00:00
Jeff 679ee50342 Merge pull request #109 from wzeth/patch-6
clarified anon_nntp and pprof
2016-06-19 07:00:18 -04:00
wzeth b73c219e6b clarified anon_nntp and pprof 2016-06-19 01:12:33 -04:00
Jeff 1b474af875 Merge pull request #108 from wzeth/patch-5
document frontend minimize_html feature
2016-06-17 11:09:28 -04:00
wzeth 77a72c5770 document frontend minimize_html feature 2016-06-17 12:51:00 +00:00
Jeff Becker a52fe21743 add id='current_theme' to fix board list css themes not applying 2016-06-16 16:18:59 -04:00
Jeff Becker 42c70990a0 update bloodgod.css, thanks ano^ 2016-06-16 16:12:54 -04:00
Jeff 0980903b6e Merge pull request #106 from wzeth/patch-4
Debian 8.5 install guide
2016-06-15 08:44:17 -04:00
wzeth 47737dd205 Update building-debian8.5.md
set a title and backtick some directories and commands
2016-06-15 10:33:10 +00:00
wzeth a22330f920 added links to the setup guide 2016-06-15 10:30:51 +00:00
wzeth 05b4695398 Update and rename debian8.5-step-by-step.md to building-debian8.5.md
Made things a little more concise. I removed ffmpeg in favor of libav-tools because it is available in the default repositories.
2016-06-15 10:19:43 +00:00
Jeff Becker 415fb3c4a8 merge 2016-06-14 22:37:41 -04:00
Jeff Becker 5138c31e58 update node list 2016-06-14 22:37:22 -04:00
Jeff 052259c9d1 Merge pull request #105 from wzeth/patch-3
add missing command
2016-06-13 11:47:11 -04:00
wzeth 7276e28bb7 add missing command 2016-06-13 02:21:57 -04:00
Jeff Becker 2adf2d5127 update 2016-06-12 14:19:07 -04:00
Jeff Becker 242094193f fix typo 2016-06-12 13:55:07 -04:00
Jeff Becker 2ffc7a80e6 update css 2016-06-12 13:54:31 -04:00
Jeff Becker 3da1ab157d update css 2016-06-12 13:52:24 -04:00
Jeff Becker 17d2654f26 update css 2016-06-12 13:50:38 -04:00
Jeff Becker f155b0e9a1 update style 2016-06-12 13:46:28 -04:00
Jeff Becker c97296700f include gchan.xyz in node list 2016-06-12 12:38:08 -04:00
Jeff 3951432bad Merge pull request #104 from wzeth/patch-2
Step-by-step for Debian 8.5
2016-06-12 08:25:08 -04:00
Jeff da5c44d4fd Merge pull request #103 from wzeth/patch-1
SystemD Service
2016-06-12 08:24:59 -04:00
wzeth a35889ca18 Step-by-step for Debian 8.5
This will help users with a step-by-step guide to installing. I will try to make this into a script or something one day.
2016-06-12 06:27:53 -04:00
wzeth c171e62d52 oops made a typo 2016-06-12 05:37:19 -04:00
wzeth 75a3cf5ede systemd service file for nntpchan
Assumptions made:
1. The user has a redis_6379.service
2. The user is using /opt/nntpchan as the working directory for the srndv2
2016-06-12 05:36:05 -04:00
wzeth 2d25b349f7 Oops wrong dir 2016-06-12 05:34:59 -04:00
wzeth 29149eb452 Systemd service file
Here is an example systemd config.

It makes some assumptions:
1. The user has a systemd service called redis_6379.service (the redis install utils have this as default).
2. srndv2 is contained in /opt/nntpchan
2016-06-12 05:29:43 -04:00
Jeff 57232aeaf0 Merge pull request #102 from deavmi/patch-1
Previous link was broken but I have a new link.
2016-06-10 17:53:05 -04:00
Tristan B. Kildaire 2ced2b73c7 Previous link was broken but I have a new link. 2016-06-10 20:45:36 +02:00
Jeff 0dce01cd6d Merge pull request #101 from deavmi/patch-1
Bug fix.
2016-06-09 11:12:10 -04:00
Tristan B. Kildaire 5d05f62db5 Bug fix. 2016-06-09 07:17:53 +02:00
Jeff Becker fe9de25dcd remove .trash directory 2016-06-05 15:48:11 -04:00
Jeff 2c2bfce762 Merge pull request #100 from deavmi/master
Minor imporvements
2016-06-05 14:47:05 -04:00
Tristan B. Kildaire (Mobile) 68bc36c0db 2016-06-05 17:53:47 +02:00
Jeff 5c353e94f0 Merge pull request #97 from deavmi/patch-2
Update README.md
2016-06-05 08:01:31 -04:00
Tristan B. Kildaire d1d2ade366 Update README.md 2016-06-05 14:00:41 +02:00
Jeff a007f314e8 Merge pull request #95 from deavmi/master
Getting things ready for #primetime - Documentation Bulk Fixes 1
2016-06-05 08:00:10 -04:00
Tristan B. Kildaire 9728cf697b Update .gitignore 2016-06-05 13:59:18 +02:00
Tristan B. Kildaire 67cd4ab112 Update configure-postgres.md 2016-06-05 13:37:22 +02:00
Tristan B. Kildaire 435bfa17d5 Rename install-and-configure-postgres.md to configure-postgres.md 2016-06-05 13:32:04 +02:00
Tristan B. Kildaire b9373e44a1 Update setting-up.md 2016-06-05 13:31:46 +02:00
Tristan B. Kildaire 00153e3957 Rename install-and-configure-redis.md to configure-redis.md 2016-06-05 13:30:58 +02:00
Tristan B. Kildaire 588e19e93c Update install-and-configure-redis.md 2016-06-05 13:30:26 +02:00
Tristan B. Kildaire e9592b6021 Create Configuring Redis database 2016-06-05 13:30:24 +02:00
Tristan B. Kildaire 42ef4c4df1 Update install-and-configure-postgres.md 2016-06-05 13:29:43 +02:00
Tristan B. Kildaire dbb119bd8b Create Configuring Postgres database 2016-06-05 13:29:23 +02:00
Tristan B. Kildaire 9e3e597088 Update building.md 2016-06-05 13:28:44 +02:00
Tristan B. Kildaire e50099b7c0 Update building.md 2016-06-05 13:28:08 +02:00
Tristan B. Kildaire 55baec7af7 Update building.md 2016-06-05 13:27:16 +02:00
Tristan B. Kildaire 4ab24625fa Update building.md 2016-06-05 13:25:33 +02:00
Tristan B. Kildaire 1eed2cdd1a Update setting-up.md 2016-06-05 13:24:23 +02:00
Tristan B. Kildaire 43a81a6a4d Delete database.md 2016-06-05 13:22:23 +02:00
Tristan B. Kildaire 43dcbad33c Update README.md 2016-06-05 13:21:48 +02:00
Tristan B. Kildaire 89b51773eb Update building.md 2016-06-05 13:20:20 +02:00
Tristan B. Kildaire 47b722a825 Update building.md 2016-06-05 13:19:27 +02:00
Tristan B. Kildaire 76b6bad8a5 Update building.md 2016-06-05 13:18:58 +02:00
Tristan B. Kildaire 648b66cbbe Update building.md 2016-06-05 13:17:28 +02:00
Tristan B. Kildaire 1f2c644bf6 Update building.md 2016-06-05 13:16:22 +02:00
Tristan B. Kildaire 8aed629be6 Update building.md 2016-06-05 13:15:37 +02:00
Tristan B. Kildaire 9042f0f3b0 Update building.md 2016-06-05 13:13:14 +02:00
Tristan B. Kildaire a425ffea8f Update building.md 2016-06-05 13:11:16 +02:00
Tristan B. Kildaire a4a4eb7c2a Update srnd.go 2016-06-05 12:59:26 +02:00
Tristan B. Kildaire a01d5b0cee Update README.md 2016-06-05 12:13:10 +02:00
Tristan B. Kildaire 9f8ce5ab95 Update cli.md 2016-06-05 12:12:05 +02:00
Tristan B. Kildaire 880d1e10e3 Update running.md 2016-06-05 12:11:40 +02:00
Tristan B. Kildaire ff745ada70 Update running.md 2016-06-05 12:11:04 +02:00
Tristan B. Kildaire 68d7ec783d Update running.md 2016-06-05 12:08:52 +02:00
Tristan B. Kildaire a17f91fea1 Update README.md 2016-06-05 12:08:36 +02:00
Tristan B. Kildaire c5cf5ba4f9 Rename doc/configure-newsreader.md to doc/extras/configure-newsreader.md 2016-06-05 12:08:21 +02:00
Tristan B. Kildaire 9f9bebf99c Update setting-up.md 2016-06-05 12:07:22 +02:00
Tristan B. Kildaire 6ea1b2d3b4 Update setting-up.md 2016-06-05 12:06:25 +02:00
Tristan B. Kildaire acc727b901 Update setting-up.md 2016-06-05 12:05:21 +02:00
Tristan B. Kildaire 594cc4929a Update setting-up.md 2016-06-05 12:04:55 +02:00
Tristan B. Kildaire e0f15b73fb Rename doc/configuration-files.md to doc/.trash/configuration-files.md 2016-06-05 12:04:22 +02:00
Tristan B. Kildaire 0ac0d7d1ff Update building.md 2016-06-05 12:02:31 +02:00
Tristan B. Kildaire 9a6a4247ce Update README.md 2016-06-05 12:00:46 +02:00
Tristan B. Kildaire 22e384f2d1 Update install-and-configure-redis.md 2016-06-05 11:58:50 +02:00
Tristan B. Kildaire 7c668c5184 Update install-and-configure-postgres.md 2016-06-05 11:58:38 +02:00
Tristan B. Kildaire 91b6dbe9b2 Update setting-up.md 2016-06-05 11:58:12 +02:00
Tristan B. Kildaire 21566eb0d9 Update setting-up.md 2016-06-05 11:57:49 +02:00
Tristan B. Kildaire cc382572c6 Update setting-up.md 2016-06-05 11:57:37 +02:00
Tristan B. Kildaire 6e029cea0d Update README.md 2016-06-05 11:39:43 +02:00
Tristan B. Kildaire c92b78c754 Rename configuration.md to configuration-files.md 2016-06-05 11:38:25 +02:00
Tristan B. Kildaire 32eae178fb Update README.md 2016-06-05 11:37:55 +02:00
Tristan B. Kildaire 8a1936fade Update README.md 2016-06-05 11:37:33 +02:00
Tristan B. Kildaire edd44c73bf Update README.md 2016-06-05 11:36:30 +02:00
Tristan B. Kildaire b3d346c61f Update README.md 2016-06-05 11:36:12 +02:00
Tristan B. Kildaire ef124fe7f2 Update README.md 2016-06-05 11:36:04 +02:00
Tristan B. Kildaire 38f9db2f57 Update README.md 2016-06-05 11:35:42 +02:00
Tristan B. Kildaire e45c172e62 Update README.md 2016-06-05 11:35:34 +02:00
Tristan B. Kildaire 705f3b9df0 Update README.md 2016-06-05 11:35:14 +02:00
Tristan B. Kildaire 1f4e6c8ecb Update README.md 2016-06-05 11:34:54 +02:00
Tristan B. Kildaire 0831c250c4 Rename doc/trash/database.md to doc/.trash/database.md 2016-06-05 11:34:06 +02:00
Tristan B. Kildaire ecb462c0c3 Update README.md 2016-06-05 11:33:29 +02:00
Tristan B. Kildaire 6092f4e78e Update and rename doc/protocol.md to doc/developer/protocol.md 2016-06-05 11:33:08 +02:00
Tristan B. Kildaire 316729774a Update and rename doc/api.md to doc/developer/api.md 2016-06-05 11:33:06 +02:00
Tristan B. Kildaire c4f8fd118d Update install-and-configure-redis.md 2016-06-05 11:31:08 +02:00
Tristan B. Kildaire 543108e0d6 Update setting-up.md 2016-06-05 11:30:20 +02:00
Tristan B. Kildaire 6631b881b0 Rename doc/securing-redis.md to doc/database/redis/securing-redis.md 2016-06-05 11:30:00 +02:00
Tristan B. Kildaire 2d39c33f05 Rename doc/install-and-configure-postgres.md to doc/database/postgres/install-and-configure-postgres.md 2016-06-05 11:30:00 +02:00
Tristan B. Kildaire b32ff7b6ac Rename doc/install-and-configure-redis.md to doc/database/redis/install-and-configure-redis.md 2016-06-05 11:29:59 +02:00
Tristan B. Kildaire 9583b80ac5 Rename postgres.md to install-and-configure-postgres.md 2016-06-05 11:29:14 +02:00
Tristan B. Kildaire 71b46ef1f2 Update setting-up.md 2016-06-05 11:29:01 +02:00
Tristan B. Kildaire 5f0a353482 Rename redis.md to install-and-configure-redis.md 2016-06-05 11:28:37 +02:00
Tristan B. Kildaire 6eb84bf55e Update and rename doc/database.md to doc/trash/database.md 2016-06-05 11:28:08 +02:00
Tristan B. Kildaire e057ee1812 Update setting-up.md 2016-06-05 11:27:37 +02:00
Tristan B. Kildaire 279e9c18c9 Update setting-up.md 2016-06-05 11:26:57 +02:00
Tristan B. Kildaire 191dbc860c Update setting-up.md 2016-06-05 11:26:03 +02:00
Tristan B. Kildaire a9403410c8 Update feeds.md 2016-06-05 11:24:13 +02:00
Tristan B. Kildaire 6e2f245f24 Update configuration.md 2016-06-05 11:23:09 +02:00
Tristan B. Kildaire 6d20a991f8 Update redis.md 2016-06-05 11:20:25 +02:00
Tristan B. Kildaire d20de6b9b5 Update postgres.md 2016-06-05 11:20:06 +02:00
Tristan B. Kildaire fbb14cc719 Update redis.md 2016-06-05 11:19:53 +02:00
Tristan B. Kildaire 6bb1f4978e Update postgres.md 2016-06-05 11:19:52 +02:00
Tristan B. Kildaire 40d372efe3 Update postgres.md 2016-06-05 11:18:46 +02:00
Tristan B. Kildaire 51672e81c3 Update redis.md 2016-06-05 11:18:34 +02:00
Tristan B. Kildaire 5b06abe63d Update postgres.md 2016-06-05 11:17:58 +02:00
Tristan B. Kildaire 8ebe2d2d26 Update redis.md 2016-06-05 11:15:56 +02:00
Tristan B. Kildaire b020d13304 Update postgres.md 2016-06-05 11:15:51 +02:00
Tristan B. Kildaire aa9ae3d32f Update redis.md 2016-06-05 11:15:25 +02:00
Tristan B. Kildaire 53046ad1d2 Update postgres.md 2016-06-05 11:14:19 +02:00
Tristan B. Kildaire a851eddccf Update redis.md 2016-06-05 10:27:14 +02:00
Tristan B. Kildaire a2c33bc649 Update README.md 2016-06-05 10:24:31 +02:00
Tristan B. Kildaire e868b2c73b Update README.md 2016-06-05 10:13:04 +02:00
Tristan B. Kildaire 4de2b15959 Update srnd.md 2016-06-05 10:12:50 +02:00
Tristan B. Kildaire a57a3b283c Create configure-newsreader.md 2016-06-05 10:12:42 +02:00
Tristan B. Kildaire b9efd55a57 Update running.md 2016-06-05 10:12:22 +02:00
Tristan B. Kildaire 87097b7a06 Update README.md 2016-06-05 10:12:09 +02:00
Jeff c50aecc34d Merge pull request #88 from deavmi/patch-1
Update srnd.md
2016-06-04 15:27:06 -04:00
Tristan B. Kildaire 74e0d479a6 Update srnd.md 2016-06-04 21:26:19 +02:00
Tristan B. Kildaire 4420a65dfd Update srnd.md 2016-06-04 21:26:04 +02:00
Jeff b73ad00865 Merge pull request #87 from deavmi/patch-1
Update README.md
2016-06-04 15:25:41 -04:00
Tristan B. Kildaire 945e609dff Update README.md 2016-06-04 21:25:14 +02:00
Jeff 2c63c3d0ad Merge pull request #82 from deavmi/patch-4
Better name.
2016-06-04 15:12:48 -04:00
Jeff c86d58a44b Merge pull request #83 from deavmi/patch-5
Rename config.md to setting-up.md
2016-06-04 15:12:37 -04:00
Jeff 12ae47b9b6 Merge pull request #85 from deavmi/master
Some changes
2016-06-04 15:11:24 -04:00
Tristan B. Kildaire 27e19f3591 Update README.md 2016-06-04 21:10:17 +02:00
Tristan B. Kildaire 50a8ddd458 Update README.md 2016-06-04 21:09:13 +02:00
Tristan B. Kildaire 5690e80758 Update running.md 2016-06-04 21:08:58 +02:00
Tristan B. Kildaire 489b21fd04 Update README.md 2016-06-04 21:04:48 +02:00
Tristan B. Kildaire f9b08aa467 Rename build.md to building.md 2016-06-04 21:04:46 +02:00
Tristan B. Kildaire 85938d1f6b Merge pull request #1 from majestrate/master
f
2016-06-04 21:02:54 +02:00
Jeff a1d02708fa Merge pull request #80 from deavmi/patch-2
My eyes are bleeding from using GitHub's white-white editor
2016-06-04 15:01:59 -04:00
Tristan B. Kildaire f3f051fbf1 Rename config.md to setting-up.md 2016-06-04 21:00:59 +02:00
Jeff d078e58774 Merge pull request #81 from deavmi/patch-3
Looks better
2016-06-04 15:00:42 -04:00
Tristan B. Kildaire d8ecf670d5 Rename build.md to building.md 2016-06-04 20:59:39 +02:00
Tristan B. Kildaire 1bd84c839e Update srnd.md 2016-06-04 20:59:04 +02:00
Tristan B. Kildaire 5bfa14ba1a Update protocol.md 2016-06-04 20:57:52 +02:00
Jeff 7d258d9f3b Merge pull request #78 from deavmi/patch-2
Create README.md
2016-06-04 14:37:38 -04:00
Jeff 57d8fd4841 Merge pull request #77 from deavmi/patch-1
Update config.md
2016-06-04 14:37:33 -04:00
Tristan B. Kildaire a8653a472e Create README.md 2016-06-04 20:34:07 +02:00
Tristan B. Kildaire 45c0cf142d Update config.md 2016-06-04 20:32:26 +02:00
Jeff f53d9b8a5b Merge pull request #74 from deavmi/patch-2
Update README.md
2016-06-04 14:28:42 -04:00
Tristan B. Kildaire 42ea131dff Update README.md 2016-06-04 20:27:32 +02:00
Jeff 57ca993189 Merge pull request #71 from deavmi/patch-1
Work in progress afrikaans translations
2016-06-04 14:25:32 -04:00
Jeff 9d4b43c7e9 Merge pull request #73 from deavmi/patch-2
Create fr-FR.ini
2016-06-04 14:24:35 -04:00
Jeff 8802d5feef Merge pull request #70 from deavmi/master
add more documentation
2016-06-04 14:23:13 -04:00
Tristan B. Kildaire b8d58ab3e3 Update fr-FR.ini 2016-06-04 19:59:32 +02:00
Tristan B. Kildaire 00e2e4d03d Create fr-FR.ini 2016-06-04 19:57:13 +02:00
Tristan B. Kildaire 9ed02e4df0 Work in progress afrikaans translations 2016-06-04 19:54:03 +02:00
d 59a8e244a0 Nicer ending message. 2016-06-04 19:41:26 +02:00
d 3bd9e85682 : 2016-06-04 19:37:04 +02:00
Tristan B. Kildaire 3749445531 Update cli.md 2016-06-04 19:25:22 +02:00
Tristan B. Kildaire 5337fea89f Update cli.md 2016-06-04 19:25:06 +02:00
Tristan B. Kildaire 77e1f16624 Update cli.md 2016-06-04 19:24:12 +02:00
Tristan B. Kildaire 28b8c5059c Update securing-redis.md 2016-06-04 18:57:21 +02:00
Tristan B. Kildaire 285f5c271a Update config.md 2016-06-04 18:07:40 +02:00
Tristan B. Kildaire e143a78e20 Update config.md 2016-06-04 18:04:17 +02:00
Tristan B. Kildaire b9905ebae4 Update config.md 2016-06-04 18:01:40 +02:00
Tristan B. Kildaire 89dee3b72d Update config.md 2016-06-04 18:00:27 +02:00
Tristan B. Kildaire 18ea50ab18 Update config.md 2016-06-04 17:59:54 +02:00
Tristan B. Kildaire 1fb23dd34a Update config.md 2016-06-04 17:56:17 +02:00
Tristan B. Kildaire 6ce938b86a Update config.md 2016-06-04 17:55:50 +02:00
Tristan B. Kildaire a853409230 Update config.md 2016-06-04 17:55:01 +02:00
Tristan B. Kildaire cfeb11b545 Update config.md 2016-06-04 17:51:21 +02:00
Tristan B. Kildaire 963b893e39 Update config.md 2016-06-04 17:51:07 +02:00
Tristan B. Kildaire a75c22aecb Update config.md 2016-06-04 17:50:46 +02:00
Tristan B. Kildaire ca2d87e303 Update config.md 2016-06-04 17:50:02 +02:00
Tristan B. Kildaire bf143f07f7 Update config.md 2016-06-04 17:45:22 +02:00
Tristan B. Kildaire 850e61d923 Update config.md 2016-06-04 17:44:32 +02:00
Tristan B. Kildaire c5937bc3f7 Update config.md 2016-06-04 17:44:10 +02:00
Tristan B. Kildaire 4436c62fe2 Update config.md 2016-06-04 17:43:05 +02:00
Tristan B. Kildaire 71bb46cb5b Update README.md 2016-06-04 17:40:16 +02:00
Tristan B. Kildaire f06daf111a Update README.md 2016-06-04 17:40:09 +02:00
Tristan B. Kildaire 93434f3bf6 Update README.md 2016-06-04 17:39:34 +02:00
Tristan B. Kildaire 90aaad39bf Create config.md 2016-06-04 17:36:26 +02:00
Tristan B. Kildaire 8492cc35fa Update build.md 2016-06-04 17:35:00 +02:00
Tristan B. Kildaire 5087a0de7a Update build.md 2016-06-04 17:34:43 +02:00
Tristan B. Kildaire dfe6eae59f Update build.md 2016-06-04 17:32:57 +02:00
Tristan B. Kildaire 030a9e58e8 Update build.md 2016-06-04 17:31:24 +02:00
Tristan B. Kildaire 7a73cf3d55 Update build.md 2016-06-04 17:28:24 +02:00
Tristan B. Kildaire 8e1eb8620c Update build.md 2016-06-04 17:27:39 +02:00
Tristan B. Kildaire 546f4d413f Create securing-redis.md 2016-06-04 17:26:36 +02:00
Tristan B. Kildaire aa04d1d3ba Update build.md 2016-06-04 17:18:14 +02:00
Tristan B. Kildaire 27eae6750c Update build.md 2016-06-04 17:18:03 +02:00
Tristan B. Kildaire 3174aaad22 Update build.md 2016-06-04 17:17:54 +02:00
Tristan B. Kildaire 89c4fe4a96 Update build.md 2016-06-04 17:16:55 +02:00
Tristan B. Kildaire 4f204fd873 Update build.md 2016-06-04 17:16:08 +02:00
Tristan B. Kildaire 7612b629ad Update README.md 2016-06-04 17:11:06 +02:00
Tristan B. Kildaire 0d5b0ddb0b Update README.md 2016-06-04 17:09:35 +02:00
Tristan B. Kildaire b41d2fa532 Update README.md 2016-06-04 17:08:46 +02:00
Tristan B. Kildaire 52239bebc3 Update README.md 2016-06-04 17:08:25 +02:00
Jeff a7a97709fe Merge pull request #68 from ZiRo-/master
add filenames to images
2016-05-22 17:54:26 -04:00
ZiRo e0789c8f90 add filenames to images 2016-05-22 22:51:26 +02:00
Jeff c5e90ec550 Merge pull request #67 from ZiRo-/master
add download link for files with original filename
2016-05-22 15:17:19 -04:00
ZiRo 6840c28cb8 Merge remote-tracking branch 'upstream/master' 2016-05-22 20:22:31 +02:00
ZiRo 41caf046a0 add download link for files 2016-05-22 20:22:12 +02:00
Jeff deb5a36c0d Merge pull request #66 from ZiRo-/master
add captcha reload script
2016-05-22 06:03:09 -04:00
ZiRo 920ddb64b3 add captcha reload script 2016-05-22 07:51:12 +02:00
Jeff Becker af59a38a40 Revert "fix prefixing for overview template"
This reverts commit 8401c5a25d.
2016-05-20 06:25:30 -04:00
Jeff 8bca301e55 Merge pull request #63 from ZiRo-/master
fix prefixing for overview template
2016-05-20 06:12:59 -04:00
ZiRo 8401c5a25d fix prefixing for overview template 2016-05-20 07:03:54 +02:00
Jeff ab44cb2457 * add generated javascript files to .gitignore
* untrack generated javascript files

* regen generated javascript via build.sh by default
2016-05-18 13:22:56 -04:00
Jeff e831a56809 move cuckoo-miner building to build-js.sh 2016-05-18 13:16:06 -04:00
Jeff 84cac4ceec Merge pull request #62 from ZiRo-/master
make miner multi threaded
2016-05-18 12:59:07 -04:00
ZiRo e372893373 make miner multi threaded 2016-05-18 18:54:05 +02:00
Jeff 4f0ae8fec3 Merge pull request #61 from ZiRo-/master
make final adjustments to the siphash function
2016-05-18 10:22:24 -04:00
ZiRo 7f445f81fc make final adjustments to the siphash function 2016-05-18 16:17:41 +02:00
Jeff 28c18afaf9 Merge pull request #60 from ZiRo-/master
use native js function for siphash
2016-05-18 07:59:46 -04:00
ZiRo 6008c94949 use native js function for siphash 2016-05-18 13:41:20 +02:00
Jeff 8dc1218934 Merge pull request #59 from ZiRo-/master
make postform more compact
2016-05-17 17:57:19 -04:00
ZiRo 11204cba16 make postform more compact 2016-05-17 16:33:14 +02:00
Jeff e3928bc6c2 Merge pull request #58 from ZiRo-/master
add cuckoo miner to postform
2016-05-17 07:52:44 -04:00
ZiRo c2bd325be6 add miner.js to build.sh 2016-05-17 13:27:29 +02:00
ZiRo 941c4a3a9f indicate mining process 2016-05-17 08:55:21 +02:00
ZiRo 261493af0b add cuckoo miner to postform 2016-05-17 08:24:46 +02:00
Jeff Becker 1791fc475b bump ipfs version 2016-05-15 08:19:03 -04:00
Jeff Becker de7cec2c43 try another way using build.sh 2016-05-13 10:50:18 -04:00
Jeff Becker e7c90c647d ammend build.sh to use mv not cp with finished binary 2016-05-13 10:47:56 -04:00
Jeff Becker 9596c1e27e try simpler build.sh 2016-05-13 10:41:51 -04:00
Jeff Becker c86732ba5c try fixing build.sh 2016-05-13 10:36:56 -04:00
Jeff Becker 2a7c15241f add meaningful message before long pause of gx 2016-05-13 10:29:46 -04:00
Jeff Becker d2d81ccbd0 try to make build.sh work 2016-05-13 10:16:09 -04:00
Jeff Becker 78a5138409 try using -d flag 2016-05-13 10:14:27 -04:00
Jeff Becker bdd9ae9ae4 try again 2016-05-13 10:12:58 -04:00
Jeff Becker a8a98b03fb ugh 2016-05-13 10:12:11 -04:00
Jeff Becker 4a5fd4aba0 try fixing borked build.sh 2016-05-13 10:11:28 -04:00
Jeff Becker 2de7c633d4 tweak build.sh 2016-05-13 10:10:12 -04:00
Jeff Becker 56c72d1d74 use go get instead of go build 2016-05-13 10:06:39 -04:00
Jeff Becker f3793852a2 try fixing build.sh again 2016-05-13 10:05:49 -04:00
Jeff Becker 382875509b try correcting location of vendor packages 2016-05-13 10:04:04 -04:00
Jeff Becker 5da696d1c8 fix checks for gx and gx-go 2016-05-13 09:56:51 -04:00
Jeff Becker 7f1800a0c6 only obtain gx if we do not have it 2016-05-13 09:52:35 -04:00
Jeff Becker 504c9ae84e fix missing command 2016-05-13 09:51:35 -04:00
Jeff Becker 63a3511c84 remove redundant command 2016-05-13 09:49:48 -04:00
Jeff Becker 309d8e6c45 tweak build.sh 2016-05-13 09:47:01 -04:00
Jeff Becker 403c404ced tweak build.sh 2016-05-13 09:44:14 -04:00
Jeff Becker 133b032f1d tweak build.sh again 2016-05-13 09:38:57 -04:00
Jeff Becker ac0b171f19 tweak build.sh 2016-05-13 09:37:32 -04:00
Jeff Becker 0e57fe057f update build.sh to use vendor 2016-05-13 09:33:59 -04:00
Jeff Becker 6e4398f0c2 update gx stuffs 2016-05-13 09:30:24 -04:00
Jeff Becker 136a0878af remove mp3 from repo so gx publish doesn't take forever 2016-05-13 09:01:08 -04:00
Jeff Becker 813c00e3ea bump package version 2016-05-13 08:57:29 -04:00
Jeff Becker d8625a1cb5 update ipfs hashes 2016-05-13 08:49:43 -04:00
Jeff c7d322c09d fix :^) 2016-05-08 08:36:42 -04:00
Jeff f7e8359f7b fix typo 2016-05-04 14:03:48 -04:00
Jeff 3283e53c5c show reply box on ukko page 2016-05-04 14:02:04 -04:00
Jeff fb2b80335e don't show reply box if not created 2016-05-04 13:14:57 -04:00
Jeff 96f6044489 try to make sure e is not null 2016-05-04 13:12:46 -04:00
Jeff 8f1a497f13 update minified 2016-05-04 13:10:55 -04:00
Jeff 272fe26b26 style changes 2016-05-04 13:10:46 -04:00
Jeff dec1a3e78d add debugging 2016-05-04 13:06:15 -04:00
Jeff 85ce14091a disable replybox on thread and board pages, default to overchan.random for livechand ukko pages 2016-05-04 13:03:32 -04:00
Jeff faf5071740 add comment 2016-05-03 15:20:08 -04:00
Jeff aadf8a9bfa remove conflicting css 2016-05-03 15:14:00 -04:00
Jeff 6ccb829fb9 remove unneeded functions 2016-05-03 15:12:11 -04:00
Jeff 3be1c3e081 try fixing style 2016-05-03 15:10:26 -04:00
Jeff 3e20e100f5 fug 2016-05-03 15:08:16 -04:00
Jeff f227786e33 try fixing drag to move behavior 2016-05-03 15:07:20 -04:00
Jeff 82d71588e9 try fixing undefined behavior 2016-05-03 15:06:00 -04:00
Jeff 521c135498 use stack overflow example 2016-05-03 15:04:38 -04:00
Jeff ae45d3e516 try fixing drag and drop 2016-05-03 15:02:01 -04:00
Jeff 363bf49799 try fixing undefined behavior on drag 2016-05-03 15:00:58 -04:00
Jeff 8782dffeae fix typo 2016-05-03 15:00:11 -04:00
Jeff da4e56fe25 add jquery :< 2016-05-03 14:58:57 -04:00
Jeff eb9a8e5174 try fix 2016-05-03 14:43:42 -04:00
Jeff bd45322509 try fix 2016-05-03 14:43:23 -04:00
Jeff 2705a111c6 try fix 2016-05-03 14:42:53 -04:00
Jeff bb748f9a74 try fix 2016-05-03 14:41:51 -04:00
Jeff 1ef0430392 try fix 2016-05-03 14:39:17 -04:00
Jeff 2415c10029 try fix 2016-05-03 14:37:23 -04:00
Jeff f6f84f25c8 try fix 2016-05-03 14:36:18 -04:00
Jeff 23c4f455d5 try fix 2016-05-03 14:34:40 -04:00
Jeff b1ebd3826a try fix 2016-05-03 14:33:41 -04:00
Jeff 914c69215e try fix 2016-05-03 14:30:21 -04:00
Jeff fdb34a7816 try fix 2016-05-03 14:30:06 -04:00
Jeff 21b80ecc8d try fix 2016-05-03 14:29:23 -04:00
Jeff d0d1bed10a try fix 2016-05-03 14:27:07 -04:00
Jeff 2613c57bf8 try fix 2016-05-03 14:25:32 -04:00
Jeff 43bb6e4c5c try fix 2016-05-03 14:23:45 -04:00
Jeff 7136b176ee try fix 2016-05-03 14:22:10 -04:00
Jeff 7767b6d436 try fix 2016-05-03 14:20:35 -04:00
Jeff 98b2834bd1 try fix 2016-05-03 14:19:16 -04:00
Jeff d1f540f99a try fix 2016-05-03 14:17:41 -04:00
Jeff 7bdb104fcf try fix 2016-05-03 14:16:15 -04:00
Jeff 9e68e626c9 try fix 2016-05-03 14:13:48 -04:00
Jeff 7df2e6c83b try fix 2016-05-03 14:09:47 -04:00
Jeff 9aca55ec71 try fix 2016-05-03 14:08:58 -04:00
Jeff 9f55486107 try fix 2016-05-03 14:07:48 -04:00
Jeff 4e161a5d70 try fix 2016-05-03 14:06:22 -04:00
Jeff ee3b067555 try fix 2016-05-03 14:05:27 -04:00
Jeff 64c5b1589b try fix 2016-05-03 14:03:19 -04:00
Jeff 7b3a6329a6 try fix 2016-05-03 14:02:13 -04:00
Jeff fab83592b7 try fix 2016-05-03 13:59:10 -04:00
Jeff 7b8d229b64 try fix 2016-05-03 13:57:48 -04:00
Jeff b2d0bfea8c try fix 2016-05-03 13:57:01 -04:00
Jeff 9ce09c34c3 try fix 2016-05-03 13:55:22 -04:00
Jeff fdd9bab210 try fix 2016-05-03 13:47:28 -04:00
Jeff ee73b907de try fix 2016-05-03 13:46:32 -04:00
Jeff 27192b0248 try fix 2016-05-03 13:24:49 -04:00
Jeff 45267caa0a try fix 2016-05-03 13:16:36 -04:00
Jeff f6576aa899 try fix 2016-05-03 13:16:18 -04:00
Jeff ce8180c804 try fix 2016-05-03 13:15:20 -04:00
Jeff 5375252783 try fix 2016-05-03 13:14:39 -04:00
Jeff cc5806a035 try fix 2016-05-03 13:13:54 -04:00
Jeff 1fa694282b try fix 2016-05-03 13:09:05 -04:00
Jeff f94491e38d try fix 2016-05-03 13:08:07 -04:00
Jeff df4b263f39 try fix 2016-05-03 13:05:45 -04:00
Jeff 3fb94baaca revert to clientX/Y 2016-05-03 13:01:55 -04:00
Jeff be7831cd10 use shift key for drag 2016-05-03 13:00:41 -04:00
Jeff 7daa0f8520 use screenX/y instead of clientX/y 2016-05-03 12:38:46 -04:00
Jeff 7afd47805a remove stray assignment 2016-05-03 12:35:46 -04:00
Jeff def0a4a5c5 adgo back to drag events 2016-05-03 12:33:24 -04:00
Jeff 3fdda45425 add debugging and try new method for drag 2016-05-03 12:30:59 -04:00
Jeff 56a345949d try using different drag method for reply box 2016-05-03 12:28:19 -04:00
Jeff 2a08f73db4 use alternative layout in postform for postform_msg 2016-05-03 12:17:08 -04:00
Jeff 52bafb364d update build scripts to work with non-gnu readlink 2016-05-03 12:16:36 -04:00
Jeff a4c70fe77b rename backlink.js to reply.js 2016-05-03 11:44:08 -04:00
Jeff Becker 58d32b5d1d don't double post 2016-05-01 18:04:43 -04:00
Jeff Becker a389c8b82d make image expansion case insensitive 2016-05-01 17:56:47 -04:00
Jeff Becker c8e8ab95cd "" -> null aka, js is shit 2016-05-01 17:48:17 -04:00
Jeff Becker 331fed1731 try blanking out attachments after posting 2016-05-01 17:38:37 -04:00
Jeff Becker 5bcbe255b1 change post success message 2016-05-01 17:27:08 -04:00
Jeff Becker ba045b6903 show "posting..." message right before posting 2016-05-01 17:25:08 -04:00
Jeff Becker 187eef590d try clearing reply box on success 2016-05-01 10:42:06 -04:00
Jeff Becker 06ff6554d4 return false for onsubmit 2016-05-01 10:34:05 -04:00
Jeff Becker d217776201 try using onsubmit for reply box form 2016-05-01 10:31:14 -04:00
Jeff Becker 76949151de fix typo 2016-04-30 16:36:21 -04:00
Jeff Becker a6f418d3a9 try using ctl drag 2016-04-30 16:32:10 -04:00
Jeff Becker fa27cc64ef fug 2016-04-30 16:29:41 -04:00
Jeff Becker e042d0fef7 use shift+drag for moving reply box 2016-04-30 16:28:26 -04:00
Jeff Becker 2eefe2e301 use alt+click drag for moving reply box 2016-04-30 16:25:27 -04:00
Jeff Becker b1c1e4fab3 use prevent default in drag 2016-04-30 16:23:13 -04:00
Jeff Becker 68a83205ab add captcha updating 2016-04-30 16:20:27 -04:00
Jeff Becker 950441ef45 fix variable name 2016-04-30 16:19:08 -04:00
Jeff Becker e01002ed25 fix posting style 2016-04-30 16:18:08 -04:00
Jeff Becker 9d7eceb927 use appendChild 2016-04-30 16:14:47 -04:00
Jeff Becker 2b28431568 add posting message 2016-04-30 16:12:01 -04:00
Jeff Becker 0df3fe43e0 fix undefined error 2016-04-30 16:11:20 -04:00
Jeff Becker 1a3fe3af66 try fixing bug where reply box exists but doesn't submit 2016-04-30 16:09:59 -04:00
Jeff Becker 6d6ba47b2c try fixing async posting 2016-04-30 16:08:11 -04:00
Jeff Becker d47d390536 try implementing async post via reply box 2016-04-30 16:03:39 -04:00
Jeff Becker 157d1f8cb9 be aware of screen size 2016-04-30 15:13:52 -04:00
Jeff Becker 5df2ecac0c debug fixes 2016-04-30 15:11:32 -04:00
Jeff Becker 1452be84bf fug 2016-04-30 15:10:15 -04:00
Jeff Becker d5d005e74b try fix again 2016-04-30 15:09:01 -04:00
Jeff Becker 846fe26ec5 try aligning right 2016-04-30 15:07:56 -04:00
Jeff Becker 940ac4dec0 fuggg 2016-04-30 15:07:07 -04:00
Jeff Becker 3a26c3e38e try to fix movement of reply box 2016-04-30 15:06:12 -04:00
Jeff Becker 0a4a3b4f8a screenX -> screenLeft 2016-04-30 15:05:31 -04:00
Jeff Becker 11f096e195 try fixing movement of reply box 2016-04-30 15:04:53 -04:00
Jeff Becker 02330805e9 try fixing movement of reply window 2016-04-30 15:03:54 -04:00
Jeff Becker ed5be31c22 try fixing movement 2016-04-30 15:02:09 -04:00
Jeff Becker d99a222434 add semicolon 2016-04-30 15:01:11 -04:00
Jeff Becker 01bd911084 try fixing oob 2016-04-30 15:00:34 -04:00
Jeff Becker 79ae266424 different initial position 2016-04-30 14:57:57 -04:00
Jeff Becker e9db85c5b6 add semi-colins, this aint go 2016-04-30 14:57:07 -04:00
Jeff Becker d82f2e3732 use different method for moveto 2016-04-30 14:56:22 -04:00
Jeff Becker 2d9aac039c enable dragable 2016-04-30 14:54:24 -04:00
Jeff Becker 917b15156c ugh 2016-04-30 14:53:32 -04:00
Jeff Becker b03b18b05f fix? 2016-04-30 14:52:56 -04:00
Jeff Becker 7527e4c978 try fixing drag to move again 2016-04-30 14:52:19 -04:00
Jeff Becker 702dcf7997 try making not dragable 2016-04-30 14:49:09 -04:00
Jeff Becker 5cd2c3d43a more fixes in drag to move 2016-04-30 14:48:30 -04:00
Jeff Becker 3e4d128b9c fix 2016-04-30 14:46:05 -04:00
Jeff Becker ecb223ebc4 try fixing drag to move for reply box 2016-04-30 14:44:06 -04:00
Jeff Becker 61e390daf0 add logging 2016-04-30 13:32:38 -04:00
Jeff Becker 4264004eaf fix x,y 2016-04-30 13:31:57 -04:00
Jeff Becker ac4eb96a69 add px to style 2016-04-30 13:31:03 -04:00
Jeff Becker d59cb4f9a8 again 2016-04-30 13:28:59 -04:00
Jeff Becker ad1ff687f6 try fixing drag to move 2016-04-30 13:27:54 -04:00
Jeff Becker 480c40ce4f try fixing drag to move 2016-04-30 13:26:42 -04:00
Jeff Becker a1142aa670 again 2016-04-30 13:25:29 -04:00
Jeff Becker 6fddac0245 try fixing drag to move 2016-04-30 13:24:13 -04:00
Jeff Becker 531da63e7b try fixing drag to move 2016-04-30 13:22:17 -04:00
Jeff Becker d52a63586f update drag to move for post form 2016-04-30 13:19:34 -04:00
Jeff Becker 3710ed884e start adding move by drag to reply box 2016-04-30 13:18:17 -04:00
Jeff Becker 9019bf2e9a update reply box css 2016-04-30 13:10:04 -04:00
Jeff Becker de6d2964f9 update reply box 2016-04-30 13:09:40 -04:00
Jeff Becker 12f5e67bb4 css update 2016-04-30 13:08:38 -04:00
Jeff Becker b71d62ca35 fix quickreply 2016-04-30 13:06:29 -04:00
Jeff Becker fffe030fa2 update dynamic reply 2016-04-30 13:03:18 -04:00
Jeff Becker 74099cb5f2 css fix 2016-04-30 13:01:36 -04:00
Jeff Becker d55716dc9b update css and position for reply box 2016-04-30 13:00:27 -04:00
Jeff Becker dabbf4d143 update position of post reply box 2016-04-30 12:58:24 -04:00
Jeff Becker 048300d6e4 fix js id for postform_container 2016-04-30 12:56:24 -04:00
Jeff Becker 3a1a24f6da fix css 2016-04-30 12:55:43 -04:00
Jeff Becker 5fccdeba45 fix css typo 2016-04-30 12:53:01 -04:00
Jeff Becker 72e10a8734 update css 2016-04-30 12:52:16 -04:00
Jeff Becker b78054a751 update css 2016-04-30 12:51:20 -04:00
Jeff Becker c394114c4e update class for dynamic postform 2016-04-30 12:42:30 -04:00
Jeff Becker 7aa6eb28b2 append table row 2016-04-30 12:41:23 -04:00
Jeff Becker a96b4d0585 document.appendChild -> document.body.appendChild 2016-04-30 12:39:46 -04:00
Jeff Becker c8217dad84 try fixing dynamic reply 2016-04-30 12:37:36 -04:00
Jeff Becker 926aa0b69f try fixing dynamic reply 2016-04-30 12:35:21 -04:00
Jeff Becker a51f9a77e6 more debugging 2016-04-30 12:34:29 -04:00
Jeff Becker f0fd23e6a9 more logging 2016-04-30 12:33:29 -04:00
Jeff Becker 85dc5da83a add logging 2016-04-30 12:29:51 -04:00
Jeff Becker 1b7526ff2f initial dynamic reply code 2016-04-30 12:25:15 -04:00
Jeff Becker 982cbf2eb1 update minified 2016-04-30 10:08:44 -04:00
Jeff Becker c455edcd59 don't include mathjax in minified js 2016-04-30 10:05:06 -04:00
Jeff Becker ed489f9d89 use correct git command 2016-04-30 09:59:59 -04:00
Jeff Becker 07d6bc2cd7 update build-js.sh to check for submodule correctly 2016-04-30 09:59:17 -04:00
Jeff Becker cdcd0ce68d add mathjax submodule 2016-04-30 09:58:21 -04:00
Jeff Becker 861acbbe0a revert css to not use flex 2016-04-30 09:11:33 -04:00
Jeff Becker 7e47470cea fix bug with inline image expand where br element leaves spaces after expand 2016-04-30 09:06:08 -04:00
Jeff Becker d1bf4cc7f3 update css 2016-04-30 09:02:50 -04:00
Jeff Becker e2968dbd97 fix js 2016-04-30 08:51:49 -04:00
Jeff Becker ed62c4e879 update image-inline 2016-04-30 08:51:01 -04:00
Jeff Becker a02c6f040e update css 2016-04-30 08:48:28 -04:00
Jeff Becker 7022dbf8c1 try fixing inline expand again 2016-04-30 08:42:54 -04:00
Jeff Becker 14cf2cbe5b again 2016-04-30 08:40:21 -04:00
Jeff Becker 6a73f5d727 try again 2016-04-30 08:38:50 -04:00
Jeff Becker 5a069dbb9a try fixing inline image more 2016-04-30 08:38:11 -04:00
Jeff Becker 77be791ce7 try fixing inline image expand again 2016-04-30 08:36:46 -04:00
Jeff Becker d69ee3a8d0 try fixing image-inline 2016-04-30 08:34:33 -04:00
Jeff Becker 115e2884c1 fix url for image inline 2016-04-30 08:32:28 -04:00
Jeff Becker f9ab15e271 add debugging 2016-04-30 08:31:37 -04:00
Jeff Becker 6c5aed6a3c bugfix 2016-04-30 08:30:14 -04:00
Jeff Becker cc0a0bc269 add initial expand images js 2016-04-30 08:26:14 -04:00
Jeff Becker fe2fb50775 add doctype 2016-04-29 14:08:02 -04:00
Jeff a423b6bfe6 Merge pull request #56 from ZiRo-/master
Add inline webm playback & make js files modular
2016-04-27 13:47:36 +00:00
ZiRo 7441463de3 copy&past is bad 2016-04-27 15:40:41 +02:00
ZiRo 2dea0917d1 Add inline webm playback 2016-04-27 15:36:57 +02:00
ZiRo d059971dcc make js more modular 2016-04-27 14:21:12 +02:00
Jeff Becker fd60d92728 css tweak, use :target 2016-04-26 09:43:11 -04:00
Jeff Becker 4737932a3e css tweak 2016-04-26 09:40:06 -04:00
Jeff Becker 32c5df4ffd css fix for hover 2016-04-26 09:36:02 -04:00
Jeff Becker dede4299dc fix hover a bit 2016-04-26 09:23:38 -04:00
Jeff Becker 57afa2ce4b backlinks sorta work 2016-04-26 09:13:04 -04:00
Jeff Becker 4a79b1c998 tweak scrollback limit and add "readonly" note 2016-04-25 17:17:59 -04:00
Jeff Becker 5443e06b38 reconnect liveui on close 2016-04-25 17:08:31 -04:00
Jeff Becker 69f08dbb58 fixups 2016-04-25 16:47:14 -04:00
Jeff Becker 9f5409a66a fix live.mustache 2016-04-25 16:33:51 -04:00
Jeff Becker 6ff21ebaeb insert placeholder so livechan widget calls onload 2016-04-25 16:32:10 -04:00
Jeff Becker 14fe9fe916 add liveui page 2016-04-25 16:29:11 -04:00
Jeff Becker 5c66f4684a liveui 2016-04-25 15:57:49 -04:00
Jeff Becker 6797e68ddd up error screen waiting time 2016-04-22 17:59:44 -04:00
Jeff Becker 86088b52e8 up wait time on post success page 2016-04-21 21:27:00 -04:00
Jeff Becker b44c711483 try fixing catalog theme changer 2016-04-21 15:44:34 -04:00
Jeff Becker d38ff65c22 use old style build D: 2016-04-18 19:42:24 -04:00
Jeff Becker 02cafc2cc5 update to next hash 2016-04-18 17:11:40 -04:00
Jeff Becker d956f5334c ignore nntpchan bin in gitignore 2016-04-18 09:58:28 -04:00
Jeff Becker 3799c8caa1 try fixing build.sh more again again 2016-04-18 09:33:40 -04:00
Jeff Becker bcb12ecb0f try fixing build.sh AGAIN 2016-04-18 09:27:53 -04:00
Jeff Becker b89ca0dc72 try fixing build.sh again 2016-04-18 09:26:09 -04:00
Jeff Becker 893491ce25 try fixing build.sh 2016-04-18 09:22:33 -04:00
Jeff Becker 51d031566a fix build.sh more 2016-04-18 08:47:48 -04:00
Jeff Becker a54b928a67 fix build.sh 2016-04-18 08:46:46 -04:00
Jeff Becker 8ac1c210f2 use gx for package management 2016-04-18 08:40:01 -04:00
Jeff Becker 8d83e4dbaf update readme 2016-04-18 08:09:42 -04:00
Jeff Becker d4a200e921 update readme to include both githug and gitgud links for bugs 2016-04-18 08:08:06 -04:00
Jeff Becker e1f9efffbc update readme to include frontend list 2016-04-17 17:52:12 -04:00
Jeff Becker 61de708062 add tomorrow css theme from TJBK 2016-04-15 20:17:32 -04:00
Jeff Becker 411230f48a fix 2016-04-12 19:41:38 -04:00
Jeff Becker 5530ae113e fix 2016-04-12 19:40:55 -04:00
Jeff Becker 29b2db8198 update csrf 2016-04-12 19:39:56 -04:00
Jeff Becker bc239360ea update docs to include info about web ui installer 2016-04-03 08:57:02 -04:00
Jeff Becker 558553a587 Merge branch 'master' of ssh://github.com/majestrate/nntpchan 2016-04-03 08:17:55 -04:00
Jeff Becker 23752f0996 update docs 2016-04-03 08:17:36 -04:00
Jeff 317bbbf457 Merge pull request #54 from ZiRo-/master
Add installer
2016-03-29 17:47:10 +00:00
ZiRo 177082fded Even more installer dialogs 2016-03-29 18:48:37 +02:00
ZiRo 323f2f150c Some more installer dialogs 2016-03-29 15:58:28 +02:00
ZiRo 44ff1d2fb6 Add database installer 2016-03-29 13:38:38 +02:00
ZiRo 390574ed45 initial installer 2016-03-28 15:34:38 +02:00
Jeff Becker 60dec3db4a fix typo 2016-03-25 10:06:56 -04:00
Jeff Becker 00a69ad685 add sync all feeds part to feeds page 2016-03-25 10:03:31 -04:00
Jeff Becker 2959be4564 another check for no element 2016-03-25 10:01:33 -04:00
Jeff Becker 5d14475373 add link to nntp feed page on mod panel 2016-03-25 10:00:21 -04:00
Jeff Becker 62e59d4201 add check for mod feed page, feeds page does not have nntpchan_mod_target element 2016-03-25 09:57:38 -04:00
Jeff Becker af02424d20 move call of initial update function to script block 2016-03-25 09:53:47 -04:00
Jeff Becker 33c6c33af2 update mod panel, begin migration to gx 2016-03-25 09:48:19 -04:00
Jeff Becker 7a67e38bf1 add .gxignore 2016-03-23 09:45:06 -04:00
Jeff Becker 9a75911ab7 update mod ui 2016-03-12 11:24:04 -05:00
Jeff Becker 8181d174a5 add hr in connection state 2016-03-12 10:18:43 -05:00
Jeff Becker c618440878 span -> div 2016-03-12 10:16:45 -05:00
Jeff Becker 0bc6298cc0 update mod ui to have more details 2016-03-12 10:15:56 -05:00
Jeff Becker 93b452c497 update mod ui feed connection elements 2016-03-12 10:13:17 -05:00
Jeff Becker b2d46c9021 fix typo 2016-03-12 09:45:31 -05:00
Jeff Becker f972d91137 update mod panel connections view 2016-03-12 09:44:51 -05:00
Jeff Becker f8a6b32b5f add expiration of orphaned articles command to mod page 2016-03-12 08:29:57 -05:00
Jeff Becker 439ab7583a add synchronize feeds command in mod panel 2016-03-12 07:56:29 -05:00
Jeff Becker 5800b1bf1d add note about redis version 2016-03-11 20:16:10 -05:00
Jeff Becker 1ba53b7688 update archiver to support multiple attachments 2016-03-10 10:07:19 -05:00
Jeff Becker dd2eb90230 update post fail page 2016-03-09 13:27:34 -05:00
Jeff Becker 2319327917 update older templates to be aware of themes 2016-03-09 13:23:58 -05:00
Jeff Becker 89dfe68b32 update bloodgod theme for 404 page 2016-03-09 13:21:19 -05:00
Jeff Becker c4dadd21fc update 404 page 2016-03-09 13:16:46 -05:00
Jeff Becker 812d7cfd9d 404 page 2016-03-09 12:54:21 -05:00
Jeff Becker 415f0d6e39 update install.sh to have build options passed into build.sh 2016-03-09 10:59:22 -05:00
Jeff Becker 08d97147b8 add simple install script 2016-03-09 10:41:24 -05:00
Jeff Becker 23614275eb spacing 2016-03-09 10:05:52 -05:00
Jeff Becker 1eca5c59e3 update readme irc links 2016-03-09 10:05:23 -05:00
Jeff Becker 91953148e8 update readme to point to build instructions 2016-03-09 08:41:37 -05:00
Jeff Becker c5a5fb57d9 update build documentation 2016-03-09 08:40:18 -05:00
Jeff Becker 5b8d338840 add --disable-redis option to build.sh 2016-03-09 08:36:44 -05:00
Jeff Becker 5bc7c92e71 only apply theme if parameters are correct 2016-03-08 20:35:03 -05:00
Jeff Becker f32bd8c946 update dayman theme 2016-03-08 18:18:28 -05:00
Jeff Becker ca333e06ac update dayman theme 2016-03-08 18:16:27 -05:00
Jeff Becker 9aab7addb1 update dayman theme 2016-03-08 18:11:48 -05:00
Jeff Becker 0b984d0dcd color -> background-color 2016-03-08 18:10:03 -05:00
Jeff Becker 73b254367f update dayman theme 2016-03-08 18:09:27 -05:00
Jeff Becker a9c09e57e9 dayman css initial 2016-03-08 18:02:33 -05:00
Jeff Becker d8b57e2189 add default theme (yostuba) option 2016-03-08 17:02:23 -05:00
Jeff Becker 7ce22cefb7 try again inverting image colors via css 2016-03-08 16:58:47 -05:00
Jeff Becker 2de555f176 invert origin image color in bloodgod theme 2016-03-08 16:53:29 -05:00
Jeff Becker 68c071e318 don't use main/onload for theme application 2016-03-08 10:45:39 -05:00
Jeff Becker 077b61270c navbar on front page 2016-03-08 08:42:52 -05:00
Jeff Becker 5975383349 have navbar theme changer text underlined 2016-03-08 08:35:34 -05:00
Jeff Becker 46ca31066f add hover for navbar theme changers 2016-03-08 08:34:07 -05:00
Jeff Becker 9db627d07f update themes to be more consistant 2016-03-08 08:31:12 -05:00
Jeff Becker 014dbdfa95 add navbar to ukko 2016-03-08 08:25:31 -05:00
Jeff Becker ea06f5498f add nntpchan.js stuff to mod panel 2016-03-08 08:13:57 -05:00
Jeff Becker c2d60063ee add onload to modpage 2016-03-08 08:13:00 -05:00
Jeff Becker 0ebd2241e5 fix mod.js error 2016-03-08 07:25:54 -05:00
Jeff Becker 0aca177c86 fix color in bloodgod theme 2016-03-08 07:24:29 -05:00
Jeff Becker 9bb45cd896 update bloodgod theme 2016-03-08 07:23:18 -05:00
Jeff Becker 7458a884d5 add onload to frontpage too 2016-03-08 07:17:48 -05:00
Jeff Becker 6392a606c4 add onload to body 2016-03-07 21:00:54 -05:00
Jeff Becker 693bcdeffd try fixing localstorage again 2016-03-07 20:57:14 -05:00
Jeff Becker 81a398ab26 don't check for non existant key in localstorage 2016-03-07 20:55:46 -05:00
Jeff Becker 7296bc6944 fix localstorage 2016-03-07 20:55:05 -05:00
Jeff Becker e97c4bab53 fix onload 2016-03-07 20:51:41 -05:00
Jeff Becker 2c03b8fd6b persist theme changes 2016-03-07 20:50:58 -05:00
Jeff Becker 2f3742fa7c update bloodgod theme 2016-03-07 20:41:10 -05:00
Jeff Becker ff816fd556 update bloodgod theme 2016-03-07 20:37:38 -05:00
Jeff Becker 585d4cbff1 fix up bloodgod theme 2016-03-07 20:35:28 -05:00
Jeff Becker 0d388b19ee have bloodgod theme include buttons 2016-03-07 20:34:19 -05:00
Jeff Becker a8e870a099 update bloodgod theme to include inputs and textares 2016-03-07 20:32:08 -05:00
Jeff Becker 32c4dcbe69 update bloodgood theme to apply to navbar 2016-03-07 20:29:00 -05:00
Jeff Becker a3571f541b fix bloodgod theme background 2016-03-07 20:27:14 -05:00
Jeff Becker 39dbe314d6 ammend theme changing 2016-03-07 20:25:29 -05:00
Jeff Becker 63e2614983 try fixing theme switcher 2016-03-07 20:21:20 -05:00
Jeff Becker 0623077a40 add more themes and support for switching themes 2016-03-07 20:18:28 -05:00
Jeff Becker f05d43af89 fix 2016-03-07 12:05:52 -05:00
Jeff Becker 68b73ff1dd fix 2016-03-07 12:03:27 -05:00
Jeff Becker 0613350420 fix 2016-03-07 12:00:32 -05:00
Jeff Becker 37af910c89 more nntp feed stuffs 2016-03-07 11:59:33 -05:00
Jeff Becker 6286a6529c disable checking for mod handler 2016-03-07 11:50:16 -05:00
Jeff Becker 51bdf9609f setinterval was backwards 2016-03-07 11:44:42 -05:00
Jeff Becker b5d60f1431 syntax error 2016-03-07 11:43:11 -05:00
Jeff Becker 56f8fc8b91 add nntpchan feed ticker to mod panel 2016-03-07 11:42:21 -05:00
Jeff Becker e0de5dfbf5 russian translations, thanks siger 2016-03-01 18:30:20 -05:00
Jeff Becker d122da98b5 float: left for attachments 2016-02-29 09:07:42 -05:00
Jeff Becker e6a38af5ee sorround attachments in div 2016-02-29 09:06:13 -05:00
Jeff Becker abf3da5900 multiple files 2016-02-29 08:35:26 -05:00
Jeff Becker a40aad33d1 * add 2 file support
* TODO: add nicer widget for multifile
2016-02-29 08:14:19 -05:00
Jeff Becker 9a6f3ef4ed add portugeese translations, thanks pyr 2016-02-28 10:16:47 -05:00
Jeff Becker 372a8767ee add es tranlsations, thanks trolly 2016-02-28 09:47:19 -05:00
Jeff f7a31012e8 Merge pull request #48 from ZiRo-/master
Add internationalization
2016-02-28 08:13:55 -05:00
ZiRo 5cf11d50d4 Fix date format 2016-02-28 14:00:22 +01:00
ZiRo a4f3e4ffa4 Fix date format 2016-02-28 13:59:38 +01:00
ZiRo 60de698f2c Add German translation 2016-02-28 13:57:51 +01:00
ZiRo 1c4f4630c2 localize templates 2016-02-28 13:40:16 +01:00
ZiRo 9974628f62 Make it possible to add more parameters to post template 2016-02-28 10:19:55 +01:00
ZiRo 2ea928417d Localize time formats 2016-02-28 09:48:07 +01:00
ZiRo eede0c55dc Merge branch 'master' of github.com:ZiRo-/nntpchan 2016-02-28 08:55:33 +01:00
ZiRo c6780cfd27 Merge remote-tracking branch 'upstream/master' 2016-02-28 08:54:23 +01:00
ZiRo 34b2e18587 Add dummy translation files 2016-02-28 08:54:05 +01:00
Jeff 38d3bc4481 Merge pull request #47 from ZiRo-/patch-1
Add RPC
2016-02-26 07:53:49 -05:00
ZiRo- e556d6d2be Add RPC 2016-02-25 20:25:10 +01:00
ZiRo- 22a3564f22 Merge pull request #1 from majestrate/master
rebase
2016-02-25 20:02:06 +01:00
Jeff Becker b695d97e82 even out front page 2016-02-22 07:39:06 -05:00
Jeff Becker 64e4c3320d fix front page 2016-02-22 07:32:49 -05:00
Jeff Becker 7c7d07434d undo changes with post form 2016-02-21 17:08:38 -05:00
Jeff Becker d2b9e76389 update templates 2016-02-21 16:51:56 -05:00
Jeff Becker f91bd642a5 fix moderate.js 2016-02-20 09:42:22 -05:00
Jeff Becker 9459e1758d fix moderate.js tool 2016-02-20 09:41:03 -05:00
Jeff Becker 24b2bd8e15 add moderate example script 2016-02-20 09:35:20 -05:00
Jeff 8ad13c8e45 Merge pull request #46 from ZiRo-/master
add images to catalog; style catalog properly
2016-02-20 13:54:16 +00:00
ZiRo c6e6c2e5d6 Catalog improvements 2016-02-20 11:16:54 +01:00
Jeff 9690156fbf Merge pull request #45 from ZiRo-/master
Add catalog
2016-02-19 15:57:01 +00:00
ZiRo dea611c1ba initial for catalog 2016-02-19 16:48:41 +01:00
Jeff Becker 0e0f35e6dc fix legal footer 2016-02-17 14:13:58 -05:00
Jeff Becker 5370898da9 * add legal notice
* fix front page graph
2016-02-17 14:10:50 -05:00
ZiRo 1020fae1dd Add Board titles 2016-02-17 15:31:28 +01:00
ZiRo 6bcfff0269 post form fixes 2016-02-17 15:06:00 +01:00
ZiRo 5fbf75a77d Add update link 2016-02-17 14:59:39 +01:00
ZiRo 86744c9349 fix posting form 2016-02-17 14:51:25 +01:00
ZiRo 24b6d87381 add page list to the bottom of board pages 2016-02-17 11:30:19 +01:00
ZiRo 649cc96269 add footer links to threads 2016-02-17 10:53:20 +01:00
ZiRo a9e377563d Fix board list a bit 2016-02-17 10:27:16 +01:00
ZiRo 9229aa62bd Merge remote-tracking branch 'upstream/master' 2016-02-16 18:35:34 +01:00
ZiRo f9c9028a0b The posts and threads are now pretty much done 2016-02-16 16:52:20 +01:00
ZiRo 5fa12dcda8 some more CSS fuckery 2016-02-16 16:37:02 +01:00
ZiRo 8c0a4ac6b0 crop i2p icon 2016-02-16 14:56:59 +01:00
ZiRo bd279547d2 some css fuckery 2016-02-16 14:48:56 +01:00
Jeff Becker 1ad6432576 make reply button/link obvious 2016-02-16 08:32:51 -05:00
ZiRo 4b007fa759 Use 8chin post borders 2016-02-16 13:59:10 +01:00
ZiRo abe985b6c5 Make origin icon smaller 2016-02-16 13:47:56 +01:00
ZiRo 6091934884 Make origin icon smaller 2016-02-16 13:47:30 +01:00
ZiRo 7db701b23a Don't use a maring for threads 2016-02-16 13:42:28 +01:00
Jeff Becker 00816c1a95 rename mod action 2016-02-15 17:04:59 -05:00
Jeff Becker 713f8a7d19 fix up ukko 2016-02-15 17:02:38 -05:00
Jeff Becker da42b8fc7d fix ukko more 2016-02-15 17:00:35 -05:00
Jeff Becker 27bf7de803 style tweaks 2016-02-15 16:55:36 -05:00
Jeff Becker 4fd443dce4 tweaks 2016-02-15 16:53:17 -05:00
Jeff Becker f8d3f85a4d fix typos 2016-02-15 16:52:38 -05:00
Jeff Becker 007851056f fix ukko 2016-02-15 16:50:52 -05:00
Jeff Becker f97b5a56e5 uncomment out ukko threads header 2016-02-15 16:48:18 -05:00
Jeff Becker 7495c3e843 fix bad end tag 2016-02-15 16:44:35 -05:00
Jeff Becker 713ff950e7 fix origin icon more 2016-02-15 16:42:42 -05:00
Jeff Becker 64a7a6e6aa fix origin icons 2016-02-15 16:36:56 -05:00
Jeff Becker 6aa9475c91 * move origin image to be inside postheader
* style tweaks
2016-02-15 16:29:54 -05:00
Jeff Becker a9ac1207c0 * add thumnail class to post thumbnails
* fix typo in css
2016-02-15 15:51:17 -05:00
ZiRo 539033ec6d looking pretty good by now 2016-02-15 21:20:37 +01:00
ZiRo 80041baf1e fix some colors 2016-02-15 20:00:56 +01:00
ZiRo b83b21df59 some more styling 2016-02-15 19:04:03 +01:00
ZiRo 69c30e0685 no more br 2016-02-15 18:42:46 +01:00
ZiRo 0ed2bad9f1 no more rounded rectangles, stupid boarders or shadows 2016-02-15 18:38:32 +01:00
ZiRo 41d3cb467b seperator line for threads 2016-02-15 18:26:30 +01:00
ZiRo 476ae002c2 beginn style change 2016-02-15 18:14:22 +01:00
ZiRo 6f0b518391 ... and No. for everyone 2016-02-15 17:20:41 +01:00
ZiRo f673a10768 Reply only for OP 2016-02-15 17:17:00 +01:00
ZiRo 8668d1aa08 fix backlinks & CSS classes 2016-02-15 17:06:59 +01:00
ZiRo d2babe367b use proper timestamps + fix double prefix
This has the benefit that modern browsers see timestamps in their local time zone
2016-02-15 16:13:28 +01:00
ZiRo 3b5937f2d9 Add my rebuild script to gitignore 2016-02-15 15:54:43 +01:00
Jeff Becker 1896060218 fix post template to include prefix 2016-02-13 17:26:00 -05:00
Jeff Becker 9d2461c716 make build.sh verbose when doing go get 2016-02-09 09:02:33 -05:00
Jeff Becker 85d60a1928 fix up more 2016-02-08 15:05:57 -05:00
Jeff Becker 6eb42d4cf7 fix up lynxchan migrate script such that it exits 2016-02-08 14:09:30 -05:00
Jeff Becker 37df9ef131 fixes to migration script 2016-02-08 13:47:06 -05:00
Jeff Becker 450d07d6e5 fix typo 2016-02-08 13:10:26 -05:00
Jeff Becker 047a63ec20 add initial lynxhub importer 2016-02-08 12:42:25 -05:00
Jeff Becker 3821562cf6 add redis database documentation 2016-02-07 09:36:46 -05:00
Jeff Becker 85a968ad40 add cli docs 2016-02-01 21:27:14 -05:00
Jeff Becker c169616471 add no attachments detection 2016-02-01 11:06:01 -05:00
Jeff Becker c0d5800bd4 fix up readme 2016-01-23 11:08:00 -05:00
Jeff Becker 6bd5518249 clairity 2016-01-23 11:06:59 -05:00
Jeff Becker b3da008694 add api docs 2016-01-23 11:06:10 -05:00
Jeff Becker 3a2529561f add comment 2016-01-23 10:58:14 -05:00
Jeff Becker 110e607839 add json api example 2016-01-23 10:57:27 -05:00
Jeff Becker 54fa915aeb add banners 2016-01-20 12:20:04 -05:00
Jeff Becker 273d28d237 same as last commit 2016-01-20 12:18:22 -05:00
Jeff Becker ec56bbe8f9 center all banners 2016-01-20 12:18:04 -05:00
Jeff Becker 9340b9088e i hate js 2016-01-20 12:16:30 -05:00
Jeff Becker 329eca6af3 fix banner placements 2016-01-20 12:13:14 -05:00
Jeff Becker 06d4535eaa try fixing banners more 2016-01-20 12:11:38 -05:00
Jeff Becker 9f78414098 try usimg correct prefixes 2016-01-20 12:09:55 -05:00
Jeff Becker 97faee8d1d try fixing banners 2016-01-20 12:08:01 -05:00
Jeff Becker 33d95c2ef3 trying this 2016-01-20 12:04:22 -05:00
Jeff Becker 97ee132989 fix more again 2016-01-20 12:02:13 -05:00
Jeff Becker ab3da1edee try fixing banners more 2016-01-20 12:00:28 -05:00
Jeff Becker ba0f5471a3 try fixing banners more D: 2016-01-20 11:58:19 -05:00
Jeff Becker 9f84ab4ca9 try fixing banners 2016-01-20 11:52:04 -05:00
Jeff Becker 3274536134 revert banner injection 2016-01-20 11:49:38 -05:00
Jeff Becker bc5b22f7a1 move banners arround 2016-01-20 11:49:23 -05:00
Jeff Becker 0199230489 fix banner inject function 2016-01-20 11:48:08 -05:00
Jeff Becker 98bb655a3c add banners 2016-01-20 11:42:18 -05:00
Jeff Becker c4090303ec ammend todo 2016-01-19 09:05:03 -05:00
Jeff 0be5982d39 Merge pull request #44 from chen-chan/patch-2
typo: lable -> label
2016-01-17 18:43:14 -05:00
chen-chan c7975c67ef typo: lable -> label 2016-01-15 21:12:56 +01:00
jeff 59173f055e add sync = 1 documentation 2016-01-13 00:22:08 -05:00
jeff 0b8c977aad add password auth docs 2016-01-12 18:02:01 -05:00
jeff 2c0426d1a4 change password field to use type="password" 2016-01-12 15:14:24 -05:00
jeff e6de8a1d20 fix mod panel 2016-01-12 10:29:23 -05:00
jeff 9ebe7d7c5d add nntp login actions in mod panel 2016-01-12 10:23:36 -05:00
no 84626f6f96 add info for peering over internet with tls 2016-01-07 13:27:43 -05:00
no 3a35dc5575 add tls related stuff to .gitignore 2016-01-07 11:56:08 -05:00
no 13b8a18e21 detect webm/mp4 and set mime type correctly 2016-01-07 09:32:50 -05:00
no 4557503256 for plaintext posts add content-type header 2016-01-07 09:31:11 -05:00
no 689ced2ae4 Merge branch 'master' of https://github.com/majestrate/nntpchan 2016-01-06 16:18:34 -05:00
no ccc5972e67 add attachment ability to archiver 2016-01-06 16:17:34 -05:00
Jeff e07260d068 Merge pull request #43 from chen-chan/master
my shitty template btw. enjoy~ :3
2016-01-04 09:49:22 -05:00
chen-chan 7854b0b81d faq update 2016-01-04 14:53:56 +01:00
chen-chan 177e0156cc faq update 2016-01-04 14:50:41 +01:00
chen-chan 10d47779d3 faq update 2016-01-04 14:47:43 +01:00
chen-chan d26d6ecacb faq update 2016-01-04 14:43:58 +01:00
chen-chan 85200d9284 faq tweak 2016-01-04 14:29:25 +01:00
chen-chan 8bcd0b790c gitignore /go and /srndv2 2016-01-04 13:20:59 +01:00
chen-chan 68e4e9162f rm xmas, change faq, frontpage 2016-01-04 13:19:47 +01:00
chen-chan 05d1290344 minor fix 2 2015-12-23 17:03:40 +01:00
chen-chan d1bb6b59b0 minor fix 2015-12-23 16:59:18 +01:00
chen-chan 64111298f6 minor fixes 2015-12-23 16:53:36 +01:00
chen-chan 6df6fd807a xmas 2015-12-23 14:25:25 +01:00
chen-chan d140c9ee99 little tweak: date and buttons 2015-12-23 13:05:58 +01:00
chen-chan 50fafb4531 wrong thread js path 2015-12-23 06:29:01 +01:00
chen-chan 5591b56df0 css and frontpage fixes 2015-12-23 06:08:00 +01:00
chen-chan 6041a7d608 wrong js dir 2015-12-23 05:43:58 +01:00
chen-chan 111522d08e workaroung static not being hosted recursively 2015-12-23 05:04:50 +01:00
chen-chan 7d89ab06c7 chen-chan got its own dir in static 2015-12-23 03:25:52 +01:00
chen-chan cab35af8c4 merge 2015-12-23 03:03:13 +01:00
chen-chan 5abbe123c3 merge 2015-12-23 02:53:35 +01:00
chen-chan 404d9952f2 merge from upstream 2015-12-23 02:38:08 +01:00
chen-chan a6b7235b12 add back default empty user.css 2015-12-23 01:40:11 +01:00
chen-chan 55f4461475 rename css file 2015-12-23 01:36:22 +01:00
chen-chan bb1c6890ac change css filename 2015-12-23 01:33:03 +01:00
chen-chan e545bab034 new template dir 2015-12-23 01:07:29 +01:00
chen-chan 21ec8e5f3a table css 2015-12-23 01:02:11 +01:00
Jeff 35c6875b00 Merge pull request #38 from chen-chan/patch-2
target="_blank" needs to be after href or it no werk
2015-12-20 21:42:31 -05:00
chen-chan 45f217fa78 target="_blank" needs to be after href or it no werk
tbh smh onii-fam

also figcaption is completely unnecessary here tbh.
2015-12-21 01:58:25 +01:00
Jeff e6ca1b07ed Merge pull request #35 from 4cdn/patch-3
legibility
2015-11-23 16:54:47 -05:00
4cdn 3e3680c9be legibility 2015-11-23 16:49:05 -05:00
Jeff 7501dae72e Merge pull request #34 from 4cdn/patch-1
table color to one lolz had
2015-11-22 18:42:15 -05:00
4cdn 93328cb480 table color to one lolz had 2015-11-22 16:16:47 -05:00
Jeff ab69a2e9a4 Merge pull request #33 from 4cdn/patch-1
graph bleed-through, add spacing
2015-11-22 16:10:27 -05:00
4cdn a6da70e7d3 fixes 2015-11-22 16:02:45 -05:00
4cdn 6e87271483 define table classes
defines classes to fix background colors bleeding through on some of the graphs and adds some spacing between graphs (3cecde002ed9c42197)
2015-11-22 15:59:21 -05:00
4cdn fed34ed622 adds classes
adds classes to fix background colors bleeding through on some of the graphs (3cecde002ed9c42197)
2015-11-22 15:47:23 -05:00
Jeff eb5ca66330 Merge pull request #32 from 4cdn/patch-1
hawt
2015-11-19 20:47:29 -05:00
4cdn 81f11be7c5 frontpage consistency </link> 2015-11-19 20:33:24 -05:00
4cdn 2c9f332fb0 issuecomment-158252057 2015-11-19 20:31:34 -05:00
4cdn d6f3bdd9e8 consistency 2015-11-19 20:23:12 -05:00
4cdn e75cf64769 consistency, see change in postform.mustache 2015-11-19 20:21:04 -05:00
4cdn d030303ed3 consistency, see change in site.css 2015-11-19 20:20:57 -05:00
4cdn 9ad004e85f Update modpage.mustache 2015-11-19 20:09:38 -05:00
4cdn 83a4102e38 consistency 2015-11-19 20:07:23 -05:00
4cdn 57e2ebda6e bloat 2015-11-19 20:05:56 -05:00
4cdn 24b6ad9276 similar to PR22
"no such attribute for textfield"
2015-11-19 20:03:08 -05:00
Jeff 0e28120697 Merge pull request #31 from viniciusbo/master
Fix input file size in new post page
2015-11-19 11:50:04 -05:00
Vinícius Borriello 775dc470e5 Fix input file size in new post page 2015-11-19 14:36:41 -02:00
jeff a929709924 Merge branch 'master' of ssh://github.com/majestrate/nntpchan 2015-11-12 22:13:18 -05:00
jeff c23696aae5 fix psy 2015-11-12 22:13:09 -05:00
Jeff ed97ca881d Merge pull request #28 from chen-chan/master
unused templates
2015-11-11 16:36:25 -05:00
chen-chan ed041c1689 unused templates 2015-11-10 22:24:07 +01:00
jeff 67bcbc6289 remove link to create new board from front page 2015-11-10 13:00:28 -05:00
jeff 8eec2ce827 only mods can create new boards 2015-11-10 12:53:54 -05:00
jeff 749bd5a72b Merge branch 'master' of ssh://github.com/majestrate/nntpchan 2015-11-09 14:46:22 -05:00
jeff d0ad0ae71d checkem 2015-11-09 13:59:54 -05:00
Jeff 4bff278a8f Merge pull request #26 from 4cdn/patch-6
truthier wording
2015-11-09 06:58:04 -05:00
4cdn 6453d405a6 truthier wording 2015-11-08 21:18:49 -05:00
jeff 1614cef91f remove duplicate css rule 2015-11-08 14:22:01 -05:00
jeff 0004483395 add border radius for fieldset 2015-11-08 11:37:23 -05:00
jeff d1d846e2fe change captcha background color 2015-11-08 11:32:41 -05:00
Jeff 2a267f93be Merge pull request #23 from 4cdn/patch-5
using real attributes makes css 10x easier
2015-11-07 19:12:43 -05:00
4cdn 3c8fa13ffe block-inline --> inline-block & cater to firefox
19:03:41.183 Error in parsing value for 'display'.  Declaration dropped.1 site.css:44:13
19:03:41.183 Unknown property 'overflow-wrap'.  Declaration dropped.1 site.css:45:14
"You might as well use word-wrap as well because as the spec says, they are literally just alternate names for each other. Some browsers support one and not the other. Firefox (tested v43) only supports word-wrap"
—https://css-tricks.com/snippets/css/prevent-long-urls-from-breaking-out-of-container/
2015-11-07 19:09:34 -05:00
jeff e50d145bbe Merge branch 'master' into dank 2015-11-07 18:48:19 -05:00
Jeff f85eaf35ac Merge pull request #22 from chen-chan/patch-1
no such attribute for textfield
2015-11-07 18:43:24 -05:00
chen-chan d16921d727 no such attribute for textfield 2015-11-07 23:20:32 +01:00
jeff 8bb13354a2 interchange image, post body placement 2015-11-07 12:58:44 -05:00
jeff 4c9ec43d30 redo icons 2015-11-07 12:54:16 -05:00
jeff 69ef6f2b71 css tweak 2015-11-07 12:50:49 -05:00
jeff 39c6c6b963 tweak post.mustache 2015-11-07 12:49:34 -05:00
jeff 5219bcefab fix tor/clearnet/i2p icon placement 2015-11-07 12:39:24 -05:00
jeff 322edd37cb fix icons 2015-11-07 12:33:32 -05:00
jeff edfca55b8f fix post.mustace 2015-11-07 12:27:17 -05:00
jeff 1c405795b9 fix ukko 2015-11-07 12:25:27 -05:00
jeff 8ebba42030 fix templates 2015-11-07 12:23:56 -05:00
jeff 41643bc52a fix templates 2015-11-07 12:22:26 -05:00
jeff ad5dfca2ef change color 2015-11-07 12:21:30 -05:00
jeff a95ec269df make css more sane 2015-11-07 12:20:52 -05:00
jeff dc3ec1c63d fix css a bit 2015-11-07 11:27:31 -05:00
jeff 371256e147 fix css a bit 2015-11-07 11:23:33 -05:00
jeff edd4b13af4 fix css a bit 2015-11-07 11:21:44 -05:00
jeff b12f6421fd fix css a bit 2015-11-07 11:18:56 -05:00
jeff eb08ccb5d6 fix css a bit 2015-11-07 11:17:54 -05:00
jeff e18f91c7e5 fix css a bit 2015-11-07 11:16:54 -05:00
jeff 0176f32bd4 try fixing board.mustache 2015-11-07 11:13:21 -05:00
jeff ab83843ef6 fix css a bit 2015-11-07 11:10:43 -05:00
jeff a0823c13db fix css a bit 2015-11-07 11:03:06 -05:00
jeff 26042749aa fix css a bit 2015-11-07 11:02:26 -05:00
jeff cde9c1c641 fix css a bit 2015-11-07 11:00:36 -05:00
jeff fdcd9181ad fix css a bit 2015-11-07 10:59:19 -05:00
jeff 9b3c073692 fix css a bit 2015-11-07 10:58:53 -05:00
jeff ce74caabf9 fix css a bit 2015-11-07 10:57:37 -05:00
jeff 70ff3f487f fix css a bit 2015-11-07 10:55:50 -05:00
jeff 78025891df fix css a bit 2015-11-07 10:54:57 -05:00
jeff 1044989070 try fixing post.mustache; 2015-11-07 10:53:35 -05:00
jeff 34dcede98f fix css a bit 2015-11-07 10:50:28 -05:00
jeff 363743ac0c try fixing ukko 2015-11-07 10:48:25 -05:00
jeff 92c7102c50 try fixing ukko 2015-11-07 10:47:21 -05:00
jeff 38085620dc try fixing ukko 2015-11-07 10:46:03 -05:00
jeff 320966cca3 fix css a bit 2015-11-07 10:43:57 -05:00
jeff 4165a5c34b fix css a bit 2015-11-07 10:43:16 -05:00
jeff f7504c7425 fix css a bit 2015-11-07 10:42:16 -05:00
jeff 8196274c0e for science :-DDD 2015-11-07 10:37:18 -05:00
jeff 32d4fe6307 add style tweaks 2015-11-01 12:15:15 -05:00
jeff b57778cdcf close title tag :p 2015-11-01 11:48:37 -05:00
jeff 15b14980f8 history graph template added 2015-11-01 11:41:05 -05:00
jeff 82708039c2 truncate subject 2015-10-31 12:42:16 -04:00
jeff f58f4258e8 ammend overview 2015-10-31 11:34:19 -04:00
jeff 68d011b42b try fixing placement 2015-10-31 11:30:17 -04:00
jeff fdaf1dd9da try fixing placement 2015-10-31 11:28:54 -04:00
jeff bf82420f99 try fixing placement 2015-10-31 11:27:36 -04:00
jeff 6cbe15988e try fixing placement on front page 2015-10-31 11:25:29 -04:00
jeff 3094108e59 css tweak 2015-10-31 11:22:50 -04:00
jeff c084518622 try fixing placement 2015-10-31 11:21:36 -04:00
jeff 4e3d66ad52 try fixng css 2015-10-31 11:20:11 -04:00
jeff b9e2202d04 try fixing css 2015-10-31 11:19:22 -04:00
jeff 44b63a11a0 try fixing placement of overview 2015-10-31 11:17:25 -04:00
jeff 1ad84780a8 make subjects clickable 2015-10-31 11:15:56 -04:00
jeff 4c822ba2cd add overview 2015-10-31 11:10:58 -04:00
jeff 2212f61ff0 try fixing css for front page 2015-10-31 08:04:14 -04:00
jeff 19198738c3 try fixing css for front page 2015-10-31 08:02:55 -04:00
jeff 7aa769d52d try fixing posts graph 2015-10-31 07:57:19 -04:00
jeff e4a9d8ef8c scale graph 2015-10-31 07:49:59 -04:00
jeff 2d45920bc7 fix posts graph 2015-10-31 07:30:57 -04:00
jeff ee7004fc42 add posts graph 2015-10-31 07:27:26 -04:00
jeff e82058d961 ref -> rel 2015-10-29 08:16:17 -04:00
jeff 086eec72d8 add "root trust" keys 2015-10-27 10:02:34 -04:00
jeff d3a423a72f ammend docs to reflect updated feed format and add note about database creds 2015-10-24 09:32:40 -04:00
jeff 0427135322 add overchan protocol spec to repo 2015-10-24 09:14:39 -04:00
jeff f0ceac8d28 ammend mod page 2015-10-24 08:49:07 -04:00
jeff e263ebde0b add dusty's docs 2015-10-21 12:12:04 -04:00
jeff 651bd33205 docs -> doc 2015-10-21 10:56:54 -04:00
jeff 7051da0e91 add clarifications 2015-10-21 10:51:17 -04:00
jeff 8dc4667666 have build.sh copy binary to root of repo 2015-10-21 10:49:08 -04:00
jeff 3eba7adc1c fix build.sh 2015-10-21 10:48:14 -04:00
jeff 8a7efa9929 use go 1.3 or higher 2015-10-21 10:45:49 -04:00
jeff 83f5855bba reorder instructions for clairity 2015-10-21 10:17:40 -04:00
jeff c497a01e2d Merge branch 'master' of ssh://github.com/majestrate/nntpchan 2015-10-21 10:17:04 -04:00
Jeff 56b716d584 Merge pull request #17 from 4cdn/patch-4
add git to dependancies
2015-10-21 10:07:05 -04:00
jeff 688c9a746c add irc2p link 2015-10-20 19:48:50 -04:00
4cdn 7027b9e297 add git to dependancies 2015-10-20 18:56:37 -04:00
jeff 5d191c88bc add urc link 2015-10-20 10:45:55 -04:00
jeff 91367983ec try fixing attachment retry 2015-10-20 09:54:37 -04:00
jeff bbba16380f try fixing repost of images 2015-10-20 09:23:16 -04:00
jeff 80e4d7beb4 try fixing attachment repost 2015-10-20 09:18:25 -04:00
jeff a451a6b46e try fixing attachments 2015-10-20 09:16:42 -04:00
jeff 75c72e177c try fixing attachments when retrying 2015-10-20 09:11:45 -04:00
jeff 939472f5a4 try fixing post retry 2015-10-20 08:56:38 -04:00
jeff cf033b03b6 try fixing post captcha retry 2015-10-20 08:55:09 -04:00
jeff b16b0c72b0 add post retry template (initial) 2015-10-20 08:41:46 -04:00
jeff 566c88dc28 put link to board list on front page 2015-10-19 09:26:38 -04:00
jeff 4698f7a118 try fixing backlinks 2015-10-19 09:20:30 -04:00
jeff 5e60d20222 fuggg 2015-10-19 09:16:07 -04:00
jeff 6cbc367630 try fixing nnptchan.js 2015-10-19 09:13:28 -04:00
jeff af85eae429 ammend nnptchan.js to use old style shorthashes 2015-10-19 09:12:32 -04:00
jeff 5420346b36 add board list template 2015-10-19 08:42:27 -04:00
jeff e11978a0d9 add link to peering 2015-10-16 14:19:44 -04:00
jeff d94813ee36 add_key 2015-10-16 14:17:16 -04:00
jeff 1aa4f81ae7 wrong link 2015-10-16 14:14:42 -04:00
jeff 270e72c8eb forgot link 2015-10-16 14:13:59 -04:00
jeff 0d1c42b086 fix up docs 2015-10-16 14:11:08 -04:00
jeff 105b314ee7 add link to next step in build.md 2015-10-16 13:56:59 -04:00
jeff 7dfc1e3418 fix docs 2015-10-16 13:47:33 -04:00
jeff d5b45cb58e fix docs 2015-10-16 13:42:55 -04:00
jeff a9ea094144 apply fix for json parse error 2015-10-14 13:48:03 -04:00
jeff f1037d888d change to use overchan.archive.* 2015-10-14 13:46:17 -04:00
jeff 2a9b1f3eac fix 404 errors 2015-10-14 13:19:47 -04:00
jeff bf351294b1 add archive script 2015-10-14 12:57:02 -04:00
jeff f93256e0d8 fix markup to not suck as bad 2015-10-14 09:05:32 -04:00
jeff c1ecf14258 change frontend to message id in post template 2015-10-14 09:01:47 -04:00
jeff 80e12fe0f3 add todo list 2015-10-10 10:22:00 -04:00
jeff f6400b3cb5 i suck at css 2015-10-08 11:55:58 -04:00
jeff 04126b743c fak 2015-10-08 11:49:30 -04:00
jeff f7211600f8 Merge branch 'master' of ssh://github.com/majestrate/nntpchan 2015-10-08 11:42:16 -04:00
jeff 25901e3d44 add references to user.css in all templates 2015-10-08 11:42:10 -04:00
Jeff 97ec36feaa Merge pull request #15 from 4cdn/patch-2
typos + non-base32 onion fix
2015-10-08 06:46:25 -04:00
4cdn c5f17cf048 typos + non-base32 onion fix 2015-10-07 21:35:42 -04:00
Jeff 0b7b248ea1 Merge pull request #14 from MrBrass/master
This one's been bugging me for way too long
2015-10-07 20:54:26 -04:00
MrBrass 2f381e7052 This one's been bugging me for way too long 2015-10-07 19:21:54 -04:00
Jeff f006b61c4e Merge pull request #13 from MrBrass/master
typo, no clocks here
2015-10-07 19:10:27 -04:00
MrBrass 3a13943d49 typo, no clocks here 2015-10-07 19:08:06 -04:00
Jeff ab15a2ff33 Merge pull request #12 from MrBrass/master
Added feeds.ini and peering documentation
2015-10-07 19:04:01 -04:00
MrBrass af582eb30b Added feeds.ini and peering documentation 2015-10-07 18:55:54 -04:00
jeff 471377ff2e remove instructions to use tags as the existing tags are outdated 2015-10-07 14:07:32 -04:00
jeff 3c4e319f06 add base files for documentation 2015-10-07 14:04:50 -04:00
Jeff 7845131544 Merge pull request #11 from 4cdn/patch-1
you didnt even do it right
2015-10-05 18:05:50 -04:00
4cdn 91971f2f3e you didnt even do it right 2015-10-05 16:25:22 -04:00
Jeff 072e36915a Merge pull request #8 from majestrate/dank
Dank
2015-10-04 06:55:35 -04:00
jeff 758a2c6bbb newboard.js prepends 'overchan.' if it's not present in the name 2015-10-04 06:38:17 -04:00
jeff fc23bea021 Merge branch 'master' into dank 2015-10-04 06:34:12 -04:00
jeff b3f104a80a update faq 2015-10-04 06:34:01 -04:00
jeff e88c8f78ba newboard.js prepends 'overchan.' if it's not present in the name 2015-10-04 06:32:10 -04:00
jeff d249d373c1 Merge branch 'master' into dank 2015-10-03 22:07:37 -04:00
jeff 8608d222c3 add link to /new/ 2015-10-03 22:07:19 -04:00
jeff fcca345ba1 fix nginx config 2015-10-03 10:31:32 -04:00
jeff bc81c8e251 add example nginx config, probably works 2015-10-03 10:14:25 -04:00
jeff ccbdd33b93 Merge branch 'master' into dank
Conflicts:
	contrib/static/site.css
2015-10-02 15:53:45 -04:00
jeff 7727fc76f8 add message field 2015-10-02 15:46:52 -04:00
jeff bb676336db fix 2015-10-02 15:45:22 -04:00
jeff 6194db1941 Merge branch 'master' into devel
Conflicts:
	contrib/static/site.css
2015-10-02 15:41:44 -04:00
jeff 229ef83e35 add initial newboard stuff 2015-10-02 15:38:59 -04:00
jeff 12e887316a remove dank maymz 2015-10-02 12:04:49 -04:00
jeff 823af74633 Merge branch 'master' into dank 2015-10-02 11:02:37 -04:00
jeff 441be15845 add pubkey.* admin functions 2015-10-02 11:00:26 -04:00
jeff 95f425c31d Merge branch 'master' into dank 2015-10-01 14:29:12 -04:00
jeff 2366781282 Merge branch 'devel'
Conflicts:
	contrib/templates/default/post.mustache
2015-10-01 14:28:36 -04:00
jeff 69adbaca5a fix irc link 2015-10-01 14:27:46 -04:00
jeff dd2f916aed wrong placement again 2015-10-01 14:02:45 -04:00
jeff ef71260653 wrong placement of icons 2015-10-01 14:02:30 -04:00
jeff 0e0a9c3da9 wrong placement again 2015-10-01 14:01:54 -04:00
jeff cdc405f29e wrong placement of icons 2015-10-01 14:00:07 -04:00
jeff 1a51354621 Merge branch 'devel' into dank
Conflicts:
	contrib/templates/default/post.mustache
2015-10-01 13:56:09 -04:00
jeff ac3f0eab94 add css and images for origins 2015-10-01 13:55:17 -04:00
jeff c5605a4412 add post origin awareness 2015-10-01 13:51:01 -04:00
jeff 4e31910ed6 add background image again 2015-10-01 09:42:49 -04:00
jeff 3b1d09072c change id so that backlinks work 2015-09-30 17:39:56 -04:00
jeff 7f56d35762 remove memes 2015-09-23 20:08:42 -04:00
jeff 3360eaf924 add css rule 2015-09-23 18:54:26 -04:00
jeff 51041e2dc9 case matters for real 2015-09-23 09:07:53 -04:00
jeff 6e20cb270e case matters 2015-09-23 09:07:25 -04:00
jeff 6019d70382 ammend mod panel js more 2015-09-23 09:06:44 -04:00
jeff cec6f7cef5 ammend mod panel js 2015-09-23 09:04:37 -04:00
jeff 40b7e0a88b fix js 2015-09-23 08:59:56 -04:00
jeff b595024585 ammend mod panel 2015-09-23 08:59:02 -04:00
jeff 00fbc305be add more actions to mod panel 2015-09-23 08:54:49 -04:00
jeff 5e3f2eea03 try using 1 thread for regenerating thumbnails 2015-09-22 12:41:10 -04:00
jeff 7f721eefea fix mod panel a bit 2015-09-22 10:34:38 -04:00
jeff 866196e810 add more info in mod panel, add admin action to rethumb 2015-09-22 10:33:01 -04:00
jeff 8c18b4405d make captcha image background not dark 2015-09-22 07:28:26 -04:00
jeff 578d9f44b3 add regen all threads button 2015-09-20 19:33:31 -04:00
Jeff ab38445555 Merge pull request #4 from 4cdn/master
user interface changes
2015-09-19 19:39:09 -04:00
4cdn 98cf765690 Update README.md 2015-09-19 19:32:15 -04:00
4cdn d742af18b5 removing reliance on external file hosting 2015-09-19 19:31:03 -04:00
4cdn 74a1c044f0 removing reliance on external file hosting 2015-09-19 19:30:05 -04:00
4cdn adb3e54212 new file: contrib/static/fieri.png 2015-09-19 23:28:02 +00:00
4cdn 1cc4d4e858 new file: contrib/static/about.mp3 2015-09-19 23:21:45 +00:00
4cdn ec8db8121f Update README.md 2015-09-19 16:24:09 -04:00
4cdn 9cb8998302 faq page more entertaining
encourages users to read completely
2015-09-19 16:22:37 -04:00
4cdn 2f8fd2f2b5 improved visual aesthetics 2015-09-19 16:21:22 -04:00
jeff 790c61cfdb ammend templates to use stylesheets 2015-09-19 13:54:10 -04:00
jeff 7b3ec70a80 css tweak 2015-09-19 13:50:19 -04:00
jeff fcbae8cea1 captcha background consistance 2015-09-19 13:45:49 -04:00
jeff 569727cc96 css tweak 2015-09-19 13:41:00 -04:00
jeff f7fc61d493 css tweak 2015-09-19 13:39:41 -04:00
jeff 8cbf1f217d css tweak 2015-09-19 13:37:57 -04:00
jeff 458232d402 css tweak 2015-09-19 13:36:33 -04:00
jeff fcfd010e5c css tweak 2015-09-19 13:34:46 -04:00
jeff dca5ee7561 css tweak 2015-09-19 13:33:26 -04:00
jeff 108f05da32 css tweak 2015-09-19 13:33:00 -04:00
jeff a515ba9d1f css tweak 2015-09-19 13:29:25 -04:00
jeff 8611e2e768 css tweak 2015-09-19 13:28:48 -04:00
jeff 20dd0c215e css tweaks 2015-09-19 13:28:20 -04:00
jeff c91c8c08b1 change bg.jpg 2015-09-19 13:27:44 -04:00
jeff 9321a65f1c css tweak 2015-09-19 13:25:32 -04:00
jeff b2a71e1877 change background 2015-09-19 13:22:10 -04:00
jeff 045e3140ad css tweak 2015-09-19 13:18:34 -04:00
jeff d6f073943e css tweaks 2015-09-19 13:17:30 -04:00
jeff 47f884ce98 css tweaks 2015-09-19 13:16:51 -04:00
jeff 9d815479b2 add background image 2015-09-19 13:15:54 -04:00
jeff 2aa2405ba7 css tweaks 2015-09-19 13:03:41 -04:00
jeff 40d6cf77ad use correct parameter in admin command 2015-09-19 09:02:08 -04:00
jeff e70c4ed84e syntax error 2015-09-19 08:58:33 -04:00
jeff 1c61de8880 add admin stuff to mod panel 2015-09-19 08:54:54 -04:00
jeff 8d146ed6cd change background gradient 2015-09-19 07:39:36 -04:00
jeff 9a807bbebf do not use red 2015-09-17 16:52:28 -04:00
jeff 61fc6d076f make dark 2015-09-17 16:50:32 -04:00
jeff 5a2500dffc make dark 2015-09-17 16:46:21 -04:00
jeff 021721d21e ammend build docs 2015-09-08 22:32:28 -04:00
jeff 2304d3d8fa css tweaks 2015-09-08 22:30:41 -04:00
jeff c340d215e0 css tweaks 2015-09-08 22:29:26 -04:00
jeff 9e0029772c css tweaks 2015-09-08 22:27:29 -04:00
jeff 1663abcbec css tweaks 2015-09-08 22:26:07 -04:00
jeff b58e582f0a css tweaks 2015-09-08 22:20:20 -04:00
jeff 1cfa104e4c ammend css 2015-09-08 22:04:39 -04:00
jeff dc06baba37 fix templates 2015-09-05 15:36:36 -04:00
jeff 838bbc20cd add reply link to posts 2015-09-05 15:29:14 -04:00
jeff 487e392d76 fix thumbnailer 2015-09-05 11:05:32 -04:00
jeff 90276293e1 change thumbs.sh tool to use new thumbnailing 2015-09-05 11:03:04 -04:00
jeff 8411568530 make it so that we don't error when we have no postform, i.e. ukko 2015-09-04 17:20:02 -04:00
jeff de51b912ff have ukko load nntpchan.js 2015-09-04 17:18:36 -04:00
jeff 8b206740f8 forgot a brace 2015-09-04 17:16:43 -04:00
jeff be7e510519 try fixing backlinks 2015-09-04 17:14:05 -04:00
jeff abefe50eb6 make post numbers insert backlink on click 2015-09-04 17:09:43 -04:00
jeff fb06097557 resolve conflict 2015-09-04 16:51:19 -04:00
jeff 7ba0e728af truncate posts and threads 2015-09-04 16:47:52 -04:00
jeff f9ea948071 psy tag 2015-08-31 16:58:30 -04:00
jeff a2fd94a83e add spoiler css 2015-08-31 16:41:25 -04:00
jeff fd1193f73a add redtext css rules 2015-08-31 16:14:32 -04:00
Jeff 64cd178b2a Merge pull request #1 from Erkan-Yilmaz/patch-1
change 1 word
2015-08-31 15:46:31 -04:00
Erkan Yilmaz 4b56272fdd change 1 word
to: cryptographically
2015-08-31 18:25:45 +02:00
186 changed files with 21490 additions and 497 deletions
+27 -2
View File
@@ -8,10 +8,35 @@
.\#*
# srnd config files
*.ini
srnd.ini
feeds.ini
# default article store directory
articles
# generated files
webroot
webroot
# built binaries
go
srndv2
# private key
*.key
*.txt
# certificates
certs
rebuild.sh
vendor
.gx
# generated js
contrib/static/nntpchan.js
contrib/static/js/nntpchan.js
contrib/static/miner-js.js
#docs trash
doc/.trash
+34
View File
@@ -0,0 +1,34 @@
#
# .gxignore for nntpchan repo
#
# emacs temp files
*~
\#*
.\#*
# srnd config files
srnd.ini
feeds.ini
# default article store directory
articles/
# generated files
webroot/
# built binaries
go/
srndv2
nntpchan
# private key
*.key
*.txt
# certificates
certs/
rebuild.sh
.git
+41 -19
View File
@@ -1,34 +1,56 @@
# NNTPChan #
NNTPChan
========
NNTPChan (previously known as overchan) is a decentralized imageboard that uses nntp to synchronize content between many different servers. It utilizes cryptograpghicly signed posts to perform optional/opt-in decentralized moderation.
**NNTPChan** (previously known as overchan) is a decentralized imageboard that uses the [NNTP protocol](https://en.wikipedia.org/wiki/Network_News_Transfer_Protocol) (network-news transfer protocol) to synchronize content between many different servers. It utilizes cryptographically signed posts to perform optional/opt-in decentralized moderation.
This repository contains resources used by the core daemon which is located [here](https://github.com/majestrate/srndv2) along with general documentation, [here](doc/)
This repository contains resources used by the core daemon which is located on [GitHub](https://github.com/majestrate/srndv2) (for now) along with general documentation, [here](doc/).
## getting started ##
##Getting started
After you [built and installed the daemon](doc/build.md) and [set up your database](doc/database.md), clone this repository and start up the daemon
[This](doc) is a step-by-step guide for getting up-and-running with NNTPChan as well as documentation for developers who want to either work on NNTPChan directly or use NNTPChan in their aplications with the API.
# clone it
git clone https://github.com/majestrate/nntpchan ~/nntpchan
# get the latest stable release
cd ~/nntpchan/
git checkout tags/0.2.1
##Bugs and issues
# set up the workspace
srndv2 setup
*PLEASE* report any bugs you find while building, setting-up or using NNTPChan on the [GitHub issue tracker](https://github.com/majestrate/nntpchan/issues) or on the [GitGud issue tracker](https://gitgud.io/uguu/nntpchan/issues) so that the probelms can be resolved or discussed.
# run the daemon
srndv2 run
##Active NNTPChan nodes
Below is a list of known NNTPChan nodes:
1. [2hu-ch.org](https://2hu-ch.org)
2. [nsfl.tk](https://nsfl.tk)
3. [gchan](https://gchan.xyz/)
Tor node list:
1. [textpunk](http://ucavviu7wl6azuw7.onion/)
2. [chan](http://ev7fnjzjdbtu3miq.onion/)
3. [oniichan](http://sfw.oniichanylo2tsi4.onion/)
##Clients
NNTP (confirmed working):
* Thunderbird
Web:
* [Yukko](https://github.com/faissaloo/Yukko): ncurses based nntpchan web ui reader
Then open http://127.0.0.1:18000/ukko.html in your browser.
##Support
*PLEASE* report any bugs you find while setting up or building [(here)](https://github.com/majestrate/nntpchan/issues) so that the problems get fixed (^:
Need help? Join us on IRC.
For peering requests, questions or support find me on [rizon](https://qchat.rizon.net/?channels=#nntpchan) as \__uguu\__
1. [freenode: #nntpchan](https://webchat.freenode.net/?channels=#nntpchan)
2. [rizon: #nntpchan](https://qchat.rizon.net/?channels=#nntpchan) - Most active
##Donations
Like this project? Fund it:
Like this project? Why not help by funding it?
bitcoin: 15yuMzuueV8y5vPQQ39ZqQVz5Ey98DNrjE
Bitcoin: [15yuMzuueV8y5vPQQ39ZqQVz5Ey98DNrjE](bitcoin://15yuMzuueV8y5vPQQ39ZqQVz5Ey98DNrjE)
##Acknowledgements
* [Deavmi](https://deavmi.carteronline.net/) - Making the documentation beautiful.
+7
View File
@@ -0,0 +1,7 @@
## TODO ##
* extra stylesheets
* more alternative templates
* javascript free mod panel
* liveui
* easier peering
Executable
+119
View File
@@ -0,0 +1,119 @@
#!/usr/bin/env bash
neochan="yes"
if [ "$1" == "--disable-neochan" ] ; then
neochan="no"
fi
root=$(readlink -e "$(dirname "$0")")
set -e
if [ "x" == "x$root" ] ; then
root=$PWD/${0##*}
fi
cd "$root"
if [ -z "$GOPATH" ]; then
export GOPATH=$root/go
mkdir -p "$GOPATH"
fi
if [ ! -f "$GOPATH/bin/minify" ]; then
echo "set up minifiy"
go get -v github.com/tdewolff/minify/cmd/minify
fi
outfile="$PWD/contrib/static/nntpchan.js"
neochan_js_outfile="$PWD/contrib/static/neochan.js"
neochan_css_outfile="$PWD/contrib/static/neochan.css"
mini() {
echo "minify $1"
echo "" >> $2
echo "/* begin $1 */" >> $2
"$GOPATH/bin/minify" --mime=text/javascript >> $2 < $1
echo "" >> $2
echo "/* end $1 */" >> $2
}
css() {
echo "minify $1"
echo "" >> $2
echo "/* begin $1 */" >> $2
lessc $1 >> $2
echo "" >> $2
echo "/* end $1 */" >> $2
}
initfile() {
rm -f "$1"
echo '/*' >> "$1"
echo ' * For source code and license information please check https://github.com/majestrate/nntpchan' >> "$1"
brandingfile=./contrib/branding.txt
if [ -e "$brandingfile" ] ; then
echo ' *' >> "$1"
while read line; do
echo -n ' * ' >> "$1";
echo $line >> "$1";
done < $brandingfile;
fi
echo ' */' >> "$1"
}
echo
echo "building nntpchan.js ..."
echo
initfile "$outfile"
if [ -e ./contrib/js/contrib/*.js ] ; then
for f in ./contrib/js/contrib/*.js ; do
mini "$f" "$outfile"
done
fi
mini ./contrib/js/entry.js "$outfile"
# local js
for f in ./contrib/js/nntpchan/*.js ; do
mini "$f" "$outfile"
done
# vendor js
for f in ./contrib/js/vendor/*.js ; do
mini "$f" "$outfile"
done
if [ "$neochan" == "yes" ] ; then
set +e
for exe in lessc coffee ; do
which $exe &> /dev/null
if [ "$?" != "0" ] ; then
echo "$exe not installed";
exit 1
fi
done
echo
echo "building neochan.js ..."
echo
initfile "$neochan_js_outfile"
for f in ./contrib/js/neochan/*.coffee ; do
echo "compile $f"
coffee -cs < "$f" > "$f.js"
done
for f in ./contrib/js/neochan/*.js ; do
mini "$f" "$neochan_js_outfile"
done
echo
echo "building neochan.css ..."
echo
initfile "$neochan_css_outfile"
for f in ./contrib/js/neochan/*.less ; do
css "$f" "$neochan_css_outfile"
done
fi
echo
echo "ok"
Executable
+106
View File
@@ -0,0 +1,106 @@
#!/usr/bin/env bash
root=$(readlink -e "$(dirname "$0")")
set -e
if [ "" == "$root" ] ; then
root=$PWD/${0##*}
fi
cd "$root"
tags="-tags disable_redis"
help_text="usage: $0 [--disable-neochan]"
# check for help flags first
for arg in "$@" ; do
case $arg in
-h|--help)
echo "$help_text"
exit 0
;;
esac
done
rev="QmPAqM7anxdr1ngPmJz9J9AAxDLinDz2Eh9aAzLF9T7LNa"
ipfs="no"
rebuildjs="yes"
_next=""
unstable="no"
neochan="yes"
# check for build flags
for arg in "$@" ; do
case $arg in
"--disable-neochan")
neochan="no"
;;
"--unstable")
unstable="yes"
;;
"--no-js")
rebuildjs="no"
;;
"--ipfs")
ipfs="yes"
;;
"--revision")
_next="rev"
;;
"--revision=*")
rev=$(echo "$arg" | cut -d'=' -f2)
;;
*)
if [ "x$_next" == "xrev" ] ; then
rev="$arg"
fi
esac
done
if [ "$rev" == "" ] ; then
echo "revision not specified"
exit 1
fi
cd "$root"
if [ "$rebuildjs" == "yes" ] ; then
echo "rebuilding generated js..."
if [ "$neochan" == "no" ] ; then
./build-js.sh --disable-neochan
else
./build-js.sh
fi
fi
unset GOPATH
export GOPATH=$PWD/go
mkdir -p "$GOPATH"
if [ "$ipfs" == "yes" ] ; then
if [ ! -e "$GOPATH/bin/gx" ] ; then
echo "obtaining gx"
go get -u -v github.com/whyrusleeping/gx
fi
if [ ! -e "$GOPATH/bin/gx-go" ] ; then
echo "obtaining gx-go"
go get -u -v github.com/whyrusleeping/gx-go
fi
echo "building stable revision, this will take a bit. to speed this part up install and run ipfs locally"
mkdir -p "$GOPATH/src/gx/ipfs"
cd "$GOPATH/src/gx/ipfs"
"$GOPATH/bin/gx" get "$rev"
cd "$root"
go get -d -v
go build -v .
mv nntpchan srndv2
echo -e "Built\n"
echo "Now configure NNTPChan with ./srndv2 setup"
else
if [ "$unstable" == "yes" ] ; then
go get -u -v github.com/majestrate/srndv2/cmd/nntpchan
cp "$GOPATH/bin/nntpchan" "$root"
echo "built unstable, if you don't know what to do, run without --unstable"
else
go get -u -v github.com/majestrate/srndv2
cp "$GOPATH/bin/srndv2" "$root"
echo -e "Built\n"
echo "Now configure NNTPChan with ./srndv2 setup"
fi
fi
+11
View File
@@ -0,0 +1,11 @@
# using srndv2 behind nginx with a prefix
# make sure to set prefix=/nntpchan/ for section frontend in srnd.ini
server {
listen 80;
location /nntpchan/(.*) {
client_max_body_size 50M;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://[::1]:18000/$1;
}
}
+13
View File
@@ -0,0 +1,13 @@
[Unit]
Description=NNTPChan Server
Requires=redis_6379.service
[Service]
Type=simple
WorkingDirectory=/opt/nntpchan
ExecStart=/opt/nntpchan/srndv2 run
ExecStop=/bin/kill -15 $MAINPID
Restart=always
[Install]
WantedBy=multi-user.target
+76
View File
@@ -0,0 +1,76 @@
Date: October 2015.
Getting the srndv2 tool
I am using debian, you should be able to use most any linux distro for this. Known to work are: debian, arch linux, <TODO: add more>.
Most commands should be done as a normal user, but some special commands need to be done as root. I find it useful to have two terminals open. I'll denote normal user level commands with '$' and root command with '#'.
Some dependencies you will need to install (as root) are:
# apt-get install build-essential golang git
# apt-get install libsodium-dev ffmpegthumbnailer
# apt-get install imagemagick ffmpegthumbnailer sox
The source code is in these two repos:
* https://github.com/majestrate/nntpchan
* https://github.com/majestrate/srndv2
set up your GOPATH (notes on that here: https://golang.org/doc/code.html#GOPATH ) and then install and build it:
$ go get -u github.com/majestrate/srndv2
If that command didn't work read the errors and check if you lacked any dependencies.
Now you have the srndv2 tool which you can run, but it will not work yet: You need to step up an SQL database first.
--------------
Setting up an SQL database
* https://wiki.postgresql.org/wiki/Detailed_installation_guides
Install postgresql.
# apt-get install postgresql postgresql-client
Create a postgresql user called 'srnd' and a database 'srnd':
# su postgres
$ whoami
postgres
$ psql -f nntpchan/nntp.psql
TODO: Get correct filename here.
Test if you can log in to that SQL user this way:
$ psql -d srnd -U srnd
If there is an issue with that try the following from the debian wiki:
------------
edit pg_hba.conf in /etc/postgresql/X.Y/main/pg_hba.conf
local all all trust # replace ident or peer with trust
reload postgresql
# /etc/init.d/postgresql reload
------------
hit Contol-D to get back your root terminal after doing this.
Once SQL setup is successful..
Now as your regular user that installed the srndv2 tool, you should be able to set up srndv2
First clone nntpchan and cd into it, then ask the srndv2 tool to setup your node:
$ git clone https://github.com/majestrate/nntpchan.git
$ cd nntpchann
ntpchan/$ srndv2 setup
ntpchan/$ srndv2 tool keygen
@@ -0,0 +1,89 @@
<?php
function gennntp($headers, $files) {
if (count($files) == 0) {
}
else if (count($files) == 1 && $files[0]['type'] == 'text/plain') {
$content = $files[0]['text'] . "\r\n";
$headers['Content-Type'] = "text/plain; charset=UTF-8";
}
else {
$boundary = sha1($headers['Message-Id']);
$content = "";
$headers['Content-Type'] = "multipart/mixed; boundary=$boundary";
foreach ($files as $file) {
$content .= "--$boundary\r\n";
if (isset($file['name'])) {
$file['name'] = preg_replace('/[\r\n\0"]/', '', $file['name']);
$content .= "Content-Disposition: form-data; filename=\"$file[name]\"; name=\"attachment\"\r\n";
}
$type = explode('/', $file['type'])[0];
if ($type == 'text') {
$file['type'] .= '; charset=UTF-8';
}
$content .= "Content-Type: $file[type]\r\n";
if ($type != 'text' && $type != 'message') {
$file['text'] = base64_encode($file['text']);
$content .= "Content-Transfer-Encoding: base64\r\n";
}
$content .= "\r\n";
$content .= $file['text'];
$content .= "\r\n";
}
$content .= "--$boundary--\r\n";
}
//$headers['Content-Length'] = strlen($content);
$headers['Mime-Version'] = '1.0';
$headers['Date'] = date('r', $headers['Date']);
$out = "";
foreach ($headers as $id => $val) {
$val = str_replace("\n", "\n\t", $val);
$out .= "$id: $val\r\n";
}
$out .= "\r\n";
$out .= $content;
return $out;
}
function shoveitup($msg, $id) {
$s = fsockopen("tcp://localhost:1119");
fgets($s);
fputs($s, "MODE STREAM\r\n");
fgets($s);
fputs($s, "TAKETHIS $id\r\n");
fputs($s, $msg);
fputs($s, "\r\n.\r\n");
fgets($s);
fclose($s);
}
$time = time();
echo "\n@@@@ Thread:\n";
echo $m0 = gennntp(["From" => "czaks <marcin@6irc.net>", "Message-Id" => "<1234.0000.".$time."@example.vichan.net>", "Newsgroups" => "overchan.test", "Date" => time(), "Subject" => "None"],
[['type' => 'text/plain', 'text' => "THIS IS A NEW TEST THREAD"]]);
echo "\n@@@@ Single msg:\n";
echo $m1 = gennntp(["From" => "czaks <marcin@6irc.net>", "Message-Id" => "<1234.1234.".$time."@example.vichan.net>", "Newsgroups" => "overchan.test", "Date" => time(), "Subject" => "None", "References" => "<1234.0000.".$time."@example.vichan.net>"],
[['type' => 'text/plain', 'text' => "hello world, with no image :("]]);
echo "\n@@@@ Single msg and pseudoimage:\n";
echo $m2 = gennntp(["From" => "czaks <marcin@6irc.net>", "Message-Id" => "<1234.2137.".$time."@example.vichan.net>", "Newsgroups" => "overchan.test", "Date" => time(), "Subject" => "None", "References" => "<1234.0000.".$time."@example.vichan.net>"],
[['type' => 'text/plain', 'text' => "hello world, now with an image!"],
['type' => 'image/gif', 'text' => base64_decode("R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs="), 'name' => "urgif.gif"]]);
echo "\n@@@@ Single msg and two pseudoimages:\n";
echo $m3 = gennntp(["From" => "czaks <marcin@6irc.net>", "Message-Id" => "<1234.1488.".$time."@example.vichan.net>", "Newsgroups" => "overchan.test", "Date" => time(), "Subject" => "None", "References" => "<1234.0000.".$time."@example.vichan.net>"],
[['type' => 'text/plain', 'text' => "hello world, now WITH TWO IMAGES!!!"],
['type' => 'image/gif', 'text' => base64_decode("R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs="), 'name' => "urgif.gif"],
['type' => 'image/gif', 'text' => base64_decode("R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs="), 'name' => "urgif2.gif"]]);
shoveitup($m0, "<1234.0000.".$time."@example.vichan.net>");
sleep(1);
shoveitup($m1, "<1234.1234.".$time."@example.vichan.net>");
sleep(1);
shoveitup($m2, "<1234.2137.".$time."@example.vichan.net>");
shoveitup($m3, "<1234.2131.".$time."@example.vichan.net>");
+9842
View File
File diff suppressed because it is too large Load Diff
+1
View File
@@ -0,0 +1 @@
3rd party javascript
+11
View File
@@ -0,0 +1,11 @@
onready_callbacks = [];
function onready(fnc) {
onready_callbacks.push(fnc);
}
function ready() {
for (var i = 0; i < onready_callbacks.length; i++) {
onready_callbacks[i]();
}
}
+1
View File
@@ -0,0 +1 @@
*.coffee.js
+1
View File
@@ -0,0 +1 @@
+3
View File
@@ -0,0 +1,3 @@
# neochan javascript directory
sass files for neochan templates
+41
View File
@@ -0,0 +1,41 @@
// call an api method
// handler(json_object) on success
// handler(null) on fail
function nntpchan_apicall(url, handler, err_handler) {
var ajax = new XMLHttpRequest();
ajax.onreadystatechange = function() {
if (ajax.readyState == XMLHttpRequest.DONE ) {
var status = ajax.status;
var j = null;
if (status == 200) {
// found
try {
j = JSON.parse(ajax.responseText);
} catch (e) {} // ignore parse error
} else if (status == 410) {
if (err_handler) {err_handler("cannot fetch post: api disabled");}
return;
}
handler(j);
}
};
ajax.open("GET", url);
ajax.send();
}
// build post from json
// inject into parent
// if j is null then inject "not found" post
function nntpchan_buildpost(parent, j) {
var post = document.createElement("div");
if (j) {
// huehuehue
post.innerHTML = j.PostMarkup;
inject_hover_for_element(post);
} else {
post.setAttribute("class", "notfound post");
post.appendChild(document.createTextNode("post not found"));
}
parent.appendChild(post);
}
+13
View File
@@ -0,0 +1,13 @@
var banner_count = 5;
// inject a banner into an element
function nntpchan_inject_banners(elem, prefix) {
var n = Math.floor(Math.random() * banner_count);
var banner = prefix + "static/banner_"+n+".jpg";
var e = document.createElement("img");
e.src = banner;
e.id = "nntpchan_banner";
elem.appendChild(e);
}
+20
View File
@@ -0,0 +1,20 @@
function setSrcQuery(e, q) {
var src = e.src;
var p = src.indexOf('?');
if (p >= 0) {
src = src.substr(0, p);
}
e.src = src + "?" + q
}
function reload(el) {
setSrcQuery(el, "reload=" + (new Date()).getTime());
return false;
}
onready(function(){
document.getElementById("captcha_img").onclick = function() {
reload(document.getElementById("captcha_img"));
};
});
+70
View File
@@ -0,0 +1,70 @@
//
// expand images inline
//
// released into the public domain by Jeff on 2016-04-30
//
// is the filename matching an image?
function filenameIsImage(fname) {
return /\.(gif|jpeg|jpg|png|webp)/.test(fname.toLowerCase());
}
// setup image inlining for 1 element
function setupInlineImage(thumb, url) {
if(thumb.inlineIsSetUp) return;
thumb.inlineIsSetUp = true;
var img = thumb.querySelector("img.thumbnail");
var expanded = false;
var oldurl = img.src;
thumb.onclick = function() {
if (expanded) {
img.setAttribute("class", "thumbnail");
img.src = oldurl;
expanded = false;
} else {
img.setAttribute("class", "expanded-thumbnail");
img.src = url;
expanded = true;
}
return false;
}
}
// set up image inlining for all applicable children in an element
function setupInlineImageIn(element) {
var thumbs = element.querySelectorAll("a.file");
for ( var i = 0 ; i < thumbs.length ; i++ ) {
var url = thumbs[i].href;
if (filenameIsImage(url)) {
// match
console.log("matched url", url);
setupInlineImage(thumbs[i], url);
}
}
}
onready(function(){
// Setup Javascript events for document
setupInlineImageIn(document);
// Setup Javascript events via updatoer
if (window.MutationObserver) {
var observer = new MutationObserver(function(mutations) {
for (var i = 0; i < mutations.length; i++) {
var additions = mutations[i].addedNodes;
if (additions == null) continue;
for (var j = 0; j < additions.length; j++) {
var node = additions[j];
if (node.nodeType == 1) {
setupInlineImageIn(node);
}
}
}
});
observer.observe(document.body, {childList: true, subtree: true});
}
});
+246
View File
@@ -0,0 +1,246 @@
/* This file is dedicated to the public domain; you may do as you wish with it. */
/* Note: This code expects the global variable configRoot to be set. */
var configRoot = "";
if (typeof _ == 'undefined') {
var _ = function(a) { return a; };
}
function setupVideo(thumb, url) {
if (thumb.videoAlreadySetUp) return;
thumb.videoAlreadySetUp = true;
var video = null;
var videoContainer, videoHide;
var expanded = false;
var hovering = false;
//var loop = setting("videoloop");
var loop = true;
var loopControls = [document.createElement("span"), document.createElement("span")];
var fileInfo = thumb.parentNode.querySelector(".fileinfo");
var mouseDown = false;
function unexpand() {
if (expanded) {
expanded = false;
if (video.pause) video.pause();
videoContainer.style.display = "none";
thumb.style.display = "inline";
video.style.maxWidth = "inherit";
video.style.maxHeight = "inherit";
}
}
function unhover() {
if (hovering) {
hovering = false;
if (video.pause) video.pause();
videoContainer.style.display = "none";
video.style.maxWidth = "inherit";
video.style.maxHeight = "inherit";
}
}
// Create video element if does not exist yet
function getVideo() {
if (video == null) {
video = document.createElement("video");
video.src = url;
video.loop = loop;
video.innerText = _("Your browser does not support HTML5 video.");
videoHide = document.createElement("img");
videoHide.src = configRoot + "static/collapse.gif";
videoHide.alt = "[ - ]";
videoHide.title = "Collapse video";
videoHide.style.marginLeft = "-15px";
videoHide.style.cssFloat = "left";
videoHide.addEventListener("click", unexpand, false);
videoContainer = document.createElement("div");
videoContainer.style.paddingLeft = "15px";
videoContainer.style.display = "none";
videoContainer.appendChild(videoHide);
videoContainer.appendChild(video);
thumb.parentNode.insertBefore(videoContainer, thumb.nextSibling);
// Dragging to the left collapses the video
video.addEventListener("mousedown", function(e) {
if (e.button == 0) mouseDown = true;
}, false);
video.addEventListener("mouseup", function(e) {
if (e.button == 0) mouseDown = false;
}, false);
video.addEventListener("mouseenter", function(e) {
mouseDown = false;
}, false);
video.addEventListener("mouseout", function(e) {
if (mouseDown && e.clientX - video.getBoundingClientRect().left <= 0) {
unexpand();
}
mouseDown = false;
}, false);
}
}
// Clicking on thumbnail expands video
thumb.addEventListener("click", function(e) {
if (!e.shiftKey && !e.ctrlKey && !e.altKey && !e.metaKey) {
getVideo();
expanded = true;
hovering = false;
video.style.position = "static";
video.style.pointerEvents = "inherit";
video.style.display = "inline";
videoHide.style.display = "inline";
videoContainer.style.display = "block";
videoContainer.style.position = "static";
video.parentNode.parentNode.removeAttribute('style');
thumb.style.display = "none";
//video.muted = (setting("videovolume") == 0);
//video.volume = setting("videovolume");
video.controls = true;
if (video.readyState == 0) {
video.addEventListener("loadedmetadata", expand2, false);
} else {
setTimeout(expand2, 0);
}
video.play();
e.preventDefault();
}
}, false);
function expand2() {
video.style.maxWidth = "100%";
video.style.maxHeight = window.innerHeight + "px";
var bottom = video.getBoundingClientRect().bottom;
if (bottom > window.innerHeight) {
window.scrollBy(0, bottom - window.innerHeight);
}
// work around Firefox volume control bug
//video.volume = Math.max(setting("videovolume") - 0.001, 0);
//video.volume = setting("videovolume");
}
// Hovering over thumbnail displays video
thumb.addEventListener("mouseover", function(e) {
//if (setting("videohover")) {
if (false) { // DOESN'T WORK YET
getVideo();
expanded = false;
hovering = true;
var docRight = document.documentElement.getBoundingClientRect().right;
var thumbRight = thumb.querySelector("img, video").getBoundingClientRect().right;
var maxWidth = docRight - thumbRight - 20;
if (maxWidth < 250) maxWidth = 250;
video.style.position = "fixed";
video.style.right = "0px";
video.style.top = "0px";
var docRight = document.documentElement.getBoundingClientRect().right;
var thumbRight = thumb.querySelector("img, video").getBoundingClientRect().right;
video.style.maxWidth = maxWidth + "px";
video.style.maxHeight = "100%";
video.style.pointerEvents = "none";
video.style.display = "inline";
videoHide.style.display = "none";
videoContainer.style.display = "inline";
videoContainer.style.position = "fixed";
//video.muted = (setting("videovolume") == 0);
//video.volume = setting("videovolume");
video.controls = false;
video.play();
}
}, false);
thumb.addEventListener("mouseout", unhover, false);
// Scroll wheel on thumbnail adjusts default volume
thumb.addEventListener("wheel", function(e) {
//if (setting("videohover")) {
if (true) {
//var volume = setting("videovolume");
if (e.deltaY > 0) volume -= 0.1;
if (e.deltaY < 0) volume += 0.1;
if (volume < 0) volume = 0;
if (volume > 1) volume = 1;
if (video != null) {
video.muted = (volume == 0);
video.volume = volume;
}
//changeSetting("videovolume", volume);
e.preventDefault();
}
}, false);
// [play once] vs [loop] controls
/*function setupLoopControl(i) {
loopControls[i].addEventListener("click", function(e) {
loop = (i != 0);
thumb.href = thumb.href.replace(/([\?&])loop=\d+/, "$1loop=" + i);
if (video != null) {
video.loop = loop;
if (loop && video.currentTime >= video.duration) {
video.currentTime = 0;
}
}
loopControls[i].style.fontWeight = "bold";
loopControls[1-i].style.fontWeight = "inherit";
}, false);
}
loopControls[0].textContent = _("[play once]");
loopControls[1].textContent = _("[loop]");
loopControls[(setting("videoloop") ? 1 : 0)].style.fontWeight = "bold";
for (var i = 0; i < 2; i++) {
setupLoopControl(i);
loopControls[i].style.whiteSpace = "nowrap";
fileInfo.appendChild(document.createTextNode(" "));
fileInfo.appendChild(loopControls[i]);
}*/
}
function setupVideosIn(element) {
var thumbs = element.querySelectorAll("a.file");
for (var i = 0; i < thumbs.length; i++) {
if (/(\.webm)|(\.mp4)$/.test(thumbs[i].pathname)) {
setupVideo(thumbs[i], thumbs[i].href);
} else {
var url = thumbs[i].href;
if (/(\.webm)|(\.mp4)$/.test(url)) setupVideo(thumbs[i], url);
}
}
}
onready(function(){
// Insert menu from settings.js
if (typeof settingsMenu != "undefined" && typeof Options == "undefined")
document.body.insertBefore(settingsMenu, document.getElementsByTagName("hr")[0]);
// Setup Javascript events for videos in document now
setupVideosIn(document);
// Setup Javascript events for videos added by updater
if (window.MutationObserver) {
var observer = new MutationObserver(function(mutations) {
for (var i = 0; i < mutations.length; i++) {
var additions = mutations[i].addedNodes;
if (additions == null) continue;
for (var j = 0; j < additions.length; j++) {
var node = additions[j];
if (node.nodeType == 1) {
setupVideosIn(node);
}
}
}
});
observer.observe(document.body, {childList: true, subtree: true});
}
});
+206
View File
@@ -0,0 +1,206 @@
/** hidepost.js -- hides posts from page given $things */
function get_hidden_posts() {
var st = get_storage();
var prefix = "nntpchan_hide_post_";
return {
all : function() {
var msgids = [];
for ( var k in st) {
if (k.indexOf(prefix) == 0) {
var m = k.substring(prefix.length);
msgids.push(m);
}
}
return msgids;
},
add : function (msg) {
st[prefix+msg] = "post";
},
del : function (msg) {
st.removeItem(prefix+msg);
}
}
}
// is a post elem an OP?
function postIsOP(elem) {
var ds = elem.dataset;
return ds && ds.rootmsgid == ds.msgid ;
}
function _hide_elem(elem, fade) {
if(!fade) {
if (elem.style) {
elem.style.display = "none";
} else {
elem.style = {display: "none" };
}
elem.dataset.userhide = "yes";
} else {
$(elem).fadeOut(400, function() {
_hide_elem(elem);
});
}
}
function _unhide_elem(elem) {
$(elem).fadeIn();
elem.dataset.userhide = "no";
}
// return true if element is hidden
function _elemIsHidden(elem) {
return elem.dataset && elem.dataset.userhide == "yes";
}
// hide a post
function hidepost(elem, nofade) {
console.log("hidepost("+elem.dataset.msgid+")");
var posts = get_hidden_posts();
if (posts) {
// add to persitant hide
posts.add(elem.dataset.msgidhash);
}
if(postIsOP(elem)) {
// hide thread it's an OP
var thread = document.getElementById("thread_"+elem.dataset.rootmsgidhash);
if (thread) {
var e = thread.getElementsByClassName("post");
for ( var idx = 0; idx < e.length ; idx ++ ) {
if (e[idx].dataset.msgid == elem.dataset.msgid) continue; // don't apply
hidepost(e[idx]);
}
}
}
// hide attachments and post body
var es = elem.getElementsByClassName("attachments");
for (var idx = 0; idx < es.length ; idx ++ ) {
_hide_elem(es[idx], !nofade);
}
es = elem.getElementsByClassName("post_body");
for (var idx = 0; idx < es.length ; idx ++ ) {
_hide_elem(es[idx], !nofade);
}
es = elem.getElementsByClassName("postheader");
for (var idx = 0; idx < es.length ; idx ++ ) {
_hide_elem(es[idx], !nofade);
}
elem.dataset.userhide = "yes";
elem.setHideLabel("[show]");
}
// unhide a post
function unhidepost(elem) {
console.log("unhidepost("+elem.dataset.msgid+")");
var posts = get_hidden_posts();
if (posts) {
// remove from persiting hide
posts.del(elem.dataset.msgidhash);
}
if(postIsOP(elem)) {
var thread = document.getElementById("thread_"+elem.dataset.rootmsgidhash);
if(thread) {
var e = thread.getElementsByClassName("post");
for ( var idx = 0; idx < e.length ; idx ++ ) {
if(e[idx].dataset.msgid == elem.dataset.msgid) continue;
unhidepost(e[idx]);
}
}
}
// unhide attachments and post body
var es = elem.getElementsByClassName("attachments");
for (var idx = 0; idx < es.length ; idx ++ ) {
_unhide_elem(es[idx]);
}
es = elem.getElementsByClassName("post_body");
for (var idx = 0; idx < es.length ; idx ++ ) {
_unhide_elem(es[idx]);
}
es = elem.getElementsByClassName("postheader");
for (var idx = 0; idx < es.length ; idx ++ ) {
_unhide_elem(es[idx]);
}
elem.dataset.userhide = "no";
elem.setHideLabel("[hide]");
}
// hide a post given a callback that checks each post
function hideposts(check_func) {
var es = document.getElementsByClassName("post");
for ( var idx = 0; idx < es.length ; idx ++ ) {
var elem = es[idx];
if(check_func && elem && check_func(elem)) {
hidepost(elem);
}
}
}
// unhide all posts given callback
// if callback is null unhide all
function unhideall(check_func) {
var es = document.getElementsByClassName("post");
for (var idx=0 ; idx < es.length; idx ++ ) {
var elem = es[idx];
if(!check_func) { unhide(elem); }
else if(check_func(elem)) { unhide(elem); }
}
}
// inject posthide into page
onready(function() {
var posts = document.getElementsByClassName("post");
for (var idx = 0 ; idx < posts.length; idx++ ) {
console.log("inject hide: "+posts[idx].dataset.msgid);
var inject = function (elem) {
var hider = document.createElement("a");
hider.setAttribute("class", "hider");
elem.setHideLabel = function (txt) {
var e_hider = hider;
e_hider.innerHTML = txt;
}
elem.hidepost = function() {
var e_self = elem;
var e_hider = hider;
hidepost(e_self);
}
elem.unhidepost = function() {
var e_self = elem;
var e_hider = hider;
unhidepost(e_self);
}
elem.isHiding = function() {
var e_self = elem;
return _elemIsHidden(e_self);
}
hider.appendChild(document.createTextNode("[hide]"));
hider.onclick = function() {
var e_self = elem;
if(e_self.isHiding()) {
e_self.unhidepost();
} else {
e_self.hidepost();
}
}
elem.appendChild(hider);
};
inject(posts[idx]);
}
// apply persiting hidden posts
var posts = get_hidden_posts();
if(posts) {
var all = posts.all();
for ( var idx = 0 ; idx < all.length; idx ++ ) {
var id = all[idx];
var elem = document.getElementById(id);
if(elem)
hidepost(elem, true);
}
}
});
File diff suppressed because it is too large Load Diff
+10
View File
@@ -0,0 +1,10 @@
function get_storage() {
var st = null;
if (window.localStorage) {
st = window.localStorage;
} else if (localStorage) {
st = localStorage;
}
return st;
}
+65
View File
@@ -0,0 +1,65 @@
function livechan_got_post(widget, j) {
// do scroll
while (widget.children.length > 5) {
// remove top element
widget.removeChild(widget.children[0]);
}
nntpchan_buildpost(widget, j);
// scroll to bottom
widget.scrollTop = widget.scrollHeight;
}
// inject post form into an element
function inject_postform(prefix, parent) {
}
// inject livechan widget into parent
function inject_livechan_widget(prefix, parent) {
if ( "WebSocket" in window ) {
var url = "ws://"+document.location.host+prefix+"live";
if ( document.location.protocol == "https:" ) {
url = "wss://"+document.location.host+prefix+"live";
}
var socket = new WebSocket(url);
var progress = function(str) {
parent.innerHTML = "<pre>livechan: "+str+"</pre>";
};
progress("initialize");
socket.onopen = function () {
progress("streaming");
}
socket.onmessage = function(ev) {
var j = null;
try {
j = JSON.parse(ev.data);
} catch(e) {
// ignore
}
if (j) {
livechan_got_post(parent, j);
}
}
socket.onclose = function(ev) {
progress("connection closed");
setTimeout(function() {
inject_livechan_widget(prefix, parent);
}, 1000);
}
} else {
parent.innerHTML = "<pre>livechan mode requires websocket support</pre>";
setTimeout(function() {
parent.innerHTML = "";
}, 5000);
}
}
function ukko_livechan(prefix) {
var ukko = document.getElementById("ukko_threads");
if (ukko) {
// remove children
ukko.innerHTML = "";
inject_livechan_widget(prefix, ukko);
}
}
+1
View File
@@ -0,0 +1 @@
main nntpchan javascript files
+426
View File
@@ -0,0 +1,426 @@
function getReplyTo() {
if(!document.dynreply) {
var e = document.getElementById("postform_container");
if (e) {
// use existing postform
document.dynreply = new DynReply(e);
} else {
// build a new postform
document.dynreply = new DynReply();
}
e = document.dynreply.elem;
e.style.position = "fixed";
e.setAttribute("class", "shadow");
}
return document.dynreply;
}
function table_insert_row(table, header, items) {
var tr = document.createElement("tr");
// insert header element
var th = document.createElement("th");
th.appendChild(header);
tr.appendChild(th);
// insert the rest of the elements
for (var idx = 0; idx < items.length; idx ++ ) {
var elem = document.createElement("td");
elem.appendChild(items[idx]);
tr.appendChild(elem);
}
table.appendChild(tr);
}
/**
build dynamic reply box
*/
function DynReply(existingElem) {
if (existingElem) {
// wrap existing post form
// XXX: wrap it here
this.elem = existingElem;
this.form = this.elem.querySelector("form");
this._error = document.getElementById("postform_msg");
this.url = this.form.action + "?t=json";
this.x = 1;
this.y = 1;
return;
}
// build new post form
var elem = document.createElement("div");
elem.setAttribute("id", "postform_container");
this.elem = elem;
// build post form
this.form = document.createElement("form");
this.form.enctype = "multipart/form-data";
this.form.name = "post";
this.form.method = "post";
// reference
elem = document.createElement("input");
elem.setAttribute("id", "postform_reference");
elem.name = "reference";
elem.type = "hidden";
this.form.appendChild(elem);
var table = document.createElement("table");
table.setAttribute("class", "postform");
var tbody = document.createElement("tbody");
var span = document.createElement("span");
// name
elem = document.createElement("input");
elem.setAttribute("name", "name");
elem.setAttribute("value", "Anonymous");
elem.setAttribute("id", "postform_name");
span.appendChild(elem);
// error message
var err_elem = document.createElement("span");
err_elem.setAttribute("id", "postform_msg");
span.appendChild(err_elem);
this._error = err_elem;
table_insert_row(tbody, document.createTextNode("Name"), [span])
// subject
elem = document.createElement("input");
elem.setAttribute("name", "subject");
elem.setAttribute("value", "");
elem.setAttribute("id", "postform_subject");
// submit
var submit = document.createElement("input");
submit.setAttribute("value", "reply");
submit.setAttribute("class", "button");
submit.setAttribute("type", "submit");
submit.setAttribute("id", "postform_submit");
table_insert_row(tbody, document.createTextNode("Subject"), [elem, submit]);
// Comment
elem = document.createElement("textarea");
elem.setAttribute("id", "postform_message");
elem.setAttribute("name", "message");
elem.setAttribute("cols", "40");
elem.setAttribute("rows", "5");
table_insert_row(tbody, document.createTextNode("Comment"), [elem]);
// file
elem = document.createElement("input");
elem.setAttribute("class", "postform_attachment");
elem.setAttribute("id", "postform_attachments");
elem.setAttribute("type", "file");
elem.setAttribute("name", "attachment_uploaded");
elem.setAttribute("multiple", "multiple");
table_insert_row(tbody, document.createTextNode("Files"), [elem]);
// dubs
elem = document.createElement("input");
elem.setAttribute("type", "checkbox");
elem.setAttribute("name", "dubs");
table_insert_row(tbody, document.createTextNode("Get Dubs"), [elem]);
// captcha
elem = document.createElement("img");
elem.setAttribute("id", "captcha_img");
elem.alt = "captcha";
table_insert_row(tbody, document.createTextNode("Captcha"), [elem]);
// captcha solution
elem = document.createElement("input");
elem.name = "captcha";
elem.autocomplete = "off";
elem.setAttribute("id", "captcha_solution");
table_insert_row(tbody, document.createTextNode("Solution"), [elem])
table.appendChild(tbody);
this.form.appendChild(table);
this.elem.appendChild(this.form);
document.body.appendChild(this.elem);
this.board = null;
this.roothash = null;
this.prefix = null;
this.url = null;
this.x = 1;
this.y = 1;
}
DynReply.prototype.update = function() {
if (this.prefix) {
// update captcha
this.updateCaptcha();
if (this.board) {
// update post form
var ref = document.getElementById("postform_reference");
if (this.roothash) {
ref.setAttribute("value", this.roothash);
} else {
ref.setAttribute("value", "");
}
this.url = this.prefix + "post/" + this.board + "?t=json";
}
}
}
DynReply.prototype.show = function() {
console.log("show dynreply");
this.update();
this.elem.style.display = 'inline';
}
DynReply.prototype.hide = function() {
console.log("hide dynreply");
this.elem.style.display = "none";
}
// clear all fields
DynReply.prototype.clear = function() {
this.clearSolution();
this.clearPostbox();
}
// clear captcha solution
DynReply.prototype.clearSolution = function() {
var e = document.getElementById("captcha_solution");
// reset value
e.value = "";
}
// clear postform elements
DynReply.prototype.clearPostbox = function() {
var e = document.getElementById("postform_subject");
e.value = "";
e = document.getElementById("postform_message");
e.value = "";
e = document.getElementById("postform_attachments");
e.value = null;
}
DynReply.prototype.post = function(cb, err_cb) {
if (this.url && this.form) {
var data = new FormData(this.form);
var ajax = new XMLHttpRequest();
ajax.onreadystatechange = function(ev) {
if (ajax.readyState == XMLHttpRequest.DONE) {
var j = null;
try {
j = JSON.parse(ajax.responseText);
cb(j);
} catch (e) {
if(err_cb) {
err_cb(e);
}
}
}
}
ajax.open("POST", this.url);
ajax.send(data);
}
}
DynReply.prototype.updateCaptcha = function() {
if (this.prefix) {
var captcha_img = document.getElementById("captcha_img");
captcha_img.src = this.prefix + "captcha/img";
}
this.clearSolution();
}
DynReply.prototype.setPrefix = function(prefix) {
this.prefix = prefix;
}
DynReply.prototype.hide = function() {
this.elem.style.display = 'none';
}
DynReply.prototype.setBoard = function(boardname) {
if (boardname) {
this.board = boardname;
}
}
DynReply.prototype.setRoot = function(roothash) {
if (roothash) {
this.roothash = roothash;
}
}
DynReply.prototype.showError = function(msg) {
console.log("error in dynreply: "+msg);
this._error.setAttribute("class", "error message");
this._error.appendChild(document.createTextNode(msg));
this.updateCaptcha();
}
DynReply.prototype.showMessage = function(msg) {
this._error.setAttribute("class", "message");
this._error.innerHTML = "";
this._error.appendChild(document.createTextNode(msg));
var e = this._error;
setTimeout(function() {
// clear it
e.innerHTML = "";
}, 2000);
}
// reply box function
function nntpchan_reply(parent, shorthash) {
if (parent && document.dynreply) {
var boardname = parent.getAttribute("boardname");
var roothash = parent.getAttribute("root");
var replyto = getReplyTo();
// set target
replyto.setBoard(boardname);
replyto.setRoot(roothash);
// show it
replyto.show();
}
var elem = document.getElementById("postform_message");
if ( elem )
{
elem.value += ">>" + shorthash.substr(0,10) + "\n";
}
}
// inject post hover behavior
function inject_hover(prefix, el, parent) {
if (!prefix) { throw "prefix is not defined"; }
var linkhash = el.getAttribute("backlinkhash");
if (!linkhash) { throw "linkhash undefined"; }
console.log("rewrite linkhash "+linkhash);
var elem = document.createElement("span");
elem.setAttribute("class", "backlink_rewritten");
elem.appendChild(document.createTextNode(">>"+linkhash.substr(0,10)));
if (!parent) {
parent = el.parentNode;
}
parent.removeChild(el);
parent.appendChild(elem);
elem.onclick = function(ev) {
if(parent.backlink) {
nntpchan_apicall(prefix+"api/find?hash="+linkhash, function(j) {
var wrapper = document.createElement("div");
wrapper.setAttribute("class", "hover "+linkhash);
if (j == null) {
// not found?
wrapper.setAttribute("class", "hover notfound-hover "+linkhash);
wrapper.appendChild(document.createTextNode("not found"));
} else {
// wrap backlink
nntpchan_buildpost(wrapper, j);
}
parent.appendChild(wrapper);
parent.backlink = false;
}, function(msg) {
var wrapper = document.createElement("div");
wrapper.setAttribute("class", "hover "+linkhash);
wrapper.appendChild(document.createTextNode(msg));
parent.appendChild(wrapper);
parent.backlink = false;
});
} else {
var elems = document.getElementsByClassName(linkhash);
if (!elems) throw "bad state, no backlinks open?";
for (var idx = 0 ; idx < elems.length; idx ++ ) {
elems[idx].parentNode.removeChild(elems[idx]);
}
parent.backlink = true;
}
};
parent.backlink = true;
}
// inject post hover for all backlinks in an element
function inject_hover_for_element(elem) {
var elems = elem.getElementsByClassName("backlink");
var ls = [];
var l = elems.length;
for ( var idx = 0 ; idx < l ; idx ++ ) {
var e = elems[idx];
ls.push(e);
}
for( var elem in ls ) {
inject_hover(prefix, ls[elem]);
}
}
function init(prefix) {
// because no one cares about this feature :|
return;
// inject posthover ...
inject_hover_for_element(document);
if ( /\.html$/.test(document.location.pathname) && ! (/ukko/.test(document.location.pathname)) ) {
// board / thread page
console.log("not loading reply widget");
} else {
// ukko / livechan page
var rpl = getReplyTo();
rpl.setPrefix(prefix);
// set livechan
rpl.setBoard("overchan.random");
rpl.update();
rpl.updateCaptcha();
// position replyto widget
var e = rpl.elem;
var mouseDownX, mouseDownY;
var $dragging = null;
$(rpl.elem).on("mousemove", function(ev) {
if ($dragging) {
var x = ev.pageX - $(this).width() / 2,
y = ev.pageY - $(this).height() / 2;
$dragging.offset({
top: y,
left: x
});
}
});
$(rpl.elem).on("mousedown", e, function (ev) {
$dragging = $(rpl.elem);
});
$(rpl.elem).on("mouseup", function (e) {
$dragging = null;
});
// add replyto post handlers
e = document.getElementById("postform_submit");
var postit = function() {
var f = document.querySelector("form");
// do ajax request to post data
var r = getReplyTo();
r.showMessage("posting... ");
r.post(function(j) {
if(j.error) {
// an error happened
r.showError(j.error);
} else {
// we're good
r.showMessage("posted :^)");
r.updateCaptcha();
r.clear();
}
}, function(err) {
r.showError(err);
r.clearSolution();
});
}
var f = document.querySelector("form");
f.onsubmit = function() {
postit();
return false;
}
}
}
+15
View File
@@ -0,0 +1,15 @@
function enable_theme(prefix, name) {
if (prefix && name) {
var theme = document.getElementById("current_theme");
if (theme) {
theme.href = prefix + "static/"+ name + ".css";
var st = get_storage();
st.nntpchan_prefix = prefix;
st.nntpchan_theme = name;
}
}
}
// apply themes
var st = get_storage();
enable_theme(st.nntpchan_prefix, st.nntpchan_theme);
@@ -0,0 +1,66 @@
var easiness = 55.0;
var miner_threads = 4;
var randoffs = 64;
/*
onready(function(){
document.getElementById("start_miner").onclick = function() {
var btn = document.getElementById("start_miner");
var label = btn.value;
btn.value = "..."
btn.disabled = true;
var b = new Uint8Array(randoffs);
window.crypto.getRandomValues(b);
var b_cur = 0;
var b_i = 0;
var tmp = new Uint8Array(randoffs+b_i+1);
tmp.set(b)
tmp[b.length]=0
b = tmp;
var workers = new Array(miner_threads);
var worker_cb = function(e) {
if (e.data[0] == "ok") {
miner_cb(e.data[1]);
btn.value=label;
btn.disabled = false;
for (i=0; i<miner_threads; i++) {
workers[i].terminate();
}
} else {
if (b_cur >= 256) {
var tmp = new Uint8Array(randoffs+b_i+1);
tmp.set(b)
tmp[b.length]=0
b = tmp;
b_i++;
b_cur=0;
}
b[randoffs+b_i]=b_cur;
b_cur++;
var params = [b, easiness, e.data[2]];
workers[e.data[2]].postMessage(params);
}
}
for (i=0; i<miner_threads; i++) {
b[randoffs+b_i]=b_cur;
b_cur++;
var params = [b, easiness, i];
workers[i] = new Worker("./static/mineworker.js");
workers[i].onmessage = worker_cb;
workers[i].postMessage(params); // Start the worker.
}
b_cur=4;
};
});
function miner_cb(s) {
document.getElementById("miner_result").value = s;
}
*/
+2
View File
@@ -0,0 +1,2 @@
this directory holds unused javascript files for nntpchan
don't delete files move them here
+2
View File
@@ -0,0 +1,2 @@
javascript files for nntpchan
+3
View File
@@ -0,0 +1,3 @@
nntpchan.js
neochan.js
neochan.css
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 B

+112
View File
@@ -0,0 +1,112 @@
/**
bloodgod theme css override
*/
body {
color: #666;
background: #111;
}
.post_body > pre {
color: #666;
}
input, textarea, button, input[type="text"], input[type="password"],
input[type="checkbox"], input[type="file"], input[type="submit"],
input[type="button"] {
color: #666;
background: #050505;
border-color: #D80000;
}
.navbar {
background: #980000;
color: black;
}
#captcha_img {
background: #D80000;
}
.reply, .ukko_thread_header {
border-color: #0c0c0c;
}
.ukko_thread_header {
border-style: solid;
border-width: 1px;
border-radius: 3px;
}
hr, .name {
color: #6B1919;
}
hr {
height: 0px;
border-width: 1px medium medium;
border-color: #0C0C0C;
border-style: solid none none;
clear: both;
}
.subject {
color: #4E0000;
}
.reply , .ukko_thread_header {
background: #0C0C0C;
}
.op {
background-color: #1a1a1a;
border-style: hidden;
}
.pagelist {
background: #0c0c0c;
border-style: hidden;
}
a {
color: #500707;
}
.post:target {
background-color: #1a1a1a;
}
.postno, .postnol {
color: #B70000;
}
.postform >tr, th {
background: #6B1919;
}
#postform_container {
background-color: #111;
}
table tbody tr:nth-of-type( even ) {
background-color: #430000;
}
table thead th {
color: #6B1919;
background: #430000;
border-color: #270000;
}
.navbar-sep {
color: #270000;
}
.navbar-link > label:hover {
color: red;
}
.origin > img , .not_found > img {
-webkit-filter: invert(1);
filter: invert(1);
}
+52
View File
@@ -0,0 +1,52 @@
<!doctype html><html><head><link rel="stylesheet" href="/static/chen-chan.css"><title>nntpchan faq</title></head><body>
<audio loop controls><source src="/static/about.mp3" type="audio/mpeg">[can't play audio.]</audio>
<p>nntpchan faq</p>
<dl>
<dt>What is nntpchan?</dt>
<dd>NNTPCchan is a federated imageboard that spans across several networks including tor, i2p and anonet. There are no central servers so that as long as 1 server is left the forum will continue to function.</dd>
<br>
<dt>How is this different from *chan?</dt>
<dd>NNTPChan is by design invulnerable to global censorship. All moderation is local to each server.</dd>
<br>
<dt>How does moderation work then?</dt>
<dd>Moderation is done with our special tripcodes (ed25519-sha512 signed posts). Anyone can give moderation suggestions, but that doesn't mean anyone will accept them. Those who trust the actions of a moderator can have their frontend whitelist the moderation actions and have them performed without oversight by another moderator.</dd>
<br>
<dt>How can I remove content from nntpchan completely?</dt>
<dd>‾\(._.)/‾ I don't know. You probably can't unless every server agrees to remove the content, even then, nothing prevents someone from reposting it. You can't delete what you post on the internet.</dd>
<br>
<dt>do you allow child porn?</dt>
<dd>no.</dd>
<br>
<dt>Do you allow XYZ content?</dt>
<dd>If it violates USA Law or causes problems with my host, no. Otherwise, probably.</dd>
<br>
<dt>Someone posted something I don't like but it's not illegal</dt>
<dd>That is not my problem. All posts on this site are the responsibility of the individual poster and not the administration of this server</dd>
<br>
<dt>code, bugs, feature requests</dt>
<dd><a href="https://github.com/majestrate/nntpchan/">frontend</a> <a href="https://github.com/majestrate/srndv2/">core</a></dd>
<br></dl>
<p>Please send any gripes/questions/inqueries/suggestions/complaints to ampernand [|at\] gmail {dot} com with subject starting with "nntpchan question"</p>
<hr>
<p>ucavviu7wl6azuw7.onion frontend specific</p>
<dl>
<dt>admin's pubkey</dt>
<dd>06833a90237c61f59558c1726fbe71c63e972722b2cf1147867be286cb020b32<br>
▆☃►☐▣◼◡♵☕◘♁◲◯☾◱♆▾☗▧▢☲♏░◇☆◻♢☆♋▂▋▲</dd>
<br>
<dt>peering</dt>
<dd>just open a thread for now.</dd>
<br>
<dt>rules</dt>
<dd>basically no stuff that will fuck with the functioning of the site.<br>
- stuff that will get me in trouble like cp.<br>
- flood/spam. duplicate posts may also get baleeted.
</dd>
<br>
<dt>guidelines and things to keep in mind</dt>
<dd>
- i don't owe you shiieet. you don't owe me shieet.<br>
- administration style: benevolent dictatorship.
</dd>
</dl>
</body></html>
+7
View File
@@ -0,0 +1,7 @@
body{font-family:monospace}
dl{max-width:84ch}
dd{margin-left:4ch;overflow:auto}
.memearrows{color:green}
pre{margin: 0 0 0 0}
table,th,td{border:1px solid gray}
table {border-collapse:collapse}
Binary file not shown.

After

Width:  |  Height:  |  Size: 846 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 B

+38
View File
@@ -0,0 +1,38 @@
/*
dayman
fighter of the night man
champion of the sun
*/
body {
background-color: #FFEFC9;
background-repeat: no-repeat;
background-attachment: fixed;
background-size: 100% 100%;
background-image: url('maymface.png');
}
.reply, .ukko_thread_header, th, .postform > tr , tbody > tr:nth-of-type( even ) {
background: #FBFFC9;
}
#postform_container {
background-color: rgba(0,0,0,0);
}
.post:target {
background-color: #ffda9b;
box-shadow: 0px 0px 5px 1px;
}
img#nntpchan_banner {
box-shadow: 0px 0px 10px 0px #FFECBE;
}
#postform_inner {
box-shadow: 0px 1px 5px 1px;
}
.navbar, table, thead, th, table, pre, .op {
background: #FFECBE;
}
+14 -7
View File
@@ -1,7 +1,9 @@
<!DOCTYPE html5>
<html>
<head>
<link rel="stylesheet" href="site.css"></link>
<title> NNTPChan Frequently Asked Questions</title>
<link rel="stylesheet" href="site.css" />
<title> NNTPChan Frequently Asked Questions </title>
<meta charset="utf-8">
</head>
<body>
<h2>NNTPChan faq </h2>
@@ -27,10 +29,19 @@
<div>Question: How can I remove content from nntpchan completely? </div>
<div>‾\(._.)/‾ I don't know. You probably can't unless every server agrees to remove the content, even then, nothing prevents someone from reposting it. You can't delete what you post on the internet.</div>
</p>
<p>
<div>Question: Do you allow child porn? </div>
<div>No, fuck off and die in a fire. All infringing posts are nuked.</div>
</p>
<hr />
<p>
<div>Question: Do you allow XYZ content? </div>
<div>If it violates USA Law or causes problems with my host, no. Otherwise, yes. <b>All posts on this site are the responsibility of the individual poster and not the administration of this server</b>.</div>
<div>If it violates USA Law or causes problems with my host, no. Otherwise, probably.</div>
</p>
<hr />
<p>
<div>Question: Someone posted something I don't like but it's not illegal</div>
<div>That is not my problem. All posts on this site are the responsibility of the individual poster and not the administration of this server</div>
</p>
<hr />
<p>
@@ -38,10 +49,6 @@
<div><a href="https://github.com/majestrate/nntpchan/issues">github</a></div>
</p>
<hr />
<p>
<div>Please send any questions to ampernand [|at\] gmail {dot} com with subject starting with "nntpchan question" </div>
</p>
<hr />
</div>
</body>
</html>
+107
View File
@@ -0,0 +1,107 @@
function createConnectionElement(j) {
var e = document.createElement("div");
e.setAttribute("class", "connection");
var auth = document.createElement("div");
auth.appendChild(document.createTextNode("Connection: "+j.name));
// authentication state
if (j.authed) {
auth.setAttribute("class", "authed");
auth.appendChild(document.createTextNode("(authenticated)"));
} else {
auth.appendChild(document.createTextNode("(not authenticated)"));
}
e.appendChild(auth);
// connection mode
var mode = document.createElement("div");
mode.setAttribute("class", "mode");
mode.appendChild(document.createTextNode("mode: "+j.mode));
e.appendChild(mode);
var pending = document.createElement("div");
pending.setAttribute("class", "pending");
// pending articles
var articles = Object.keys(j.pending);
pending.appendChild(document.createTextNode("pending articles: "+articles.length));
for ( var idx = 0 ; idx < articles.length; idx ++ ) {
var msgid = articles[idx];
var state = j.pending[msgid];
var elem = document.createElement("div");
elem.appendChild(document.createTextNode(msgid + ": " + state));
elem.setAttribute("class", "pending_item "+state);
pending.appendChild(elem);
}
e.appendChild(pending);
// e.appendChild(document.createTextNode(JSON.stringify(j)));
return e;
}
function inject_nntp_feed_element(feed, elem) {
elem.appendChild(document.createElement("hr"));
var name = document.createElement("div");
name.setAttribute("class", "feeds_name");
name_elem = document.createTextNode("Name: "+feed.State.Config.Name);
name.appendChild(name_elem);
elem.appendChild(name);
var conns = document.createElement("div");
conns.setAttribute("class", "connections");
for ( var idx = 0 ; idx < feed.Conns.length; idx ++ ) {
conns.appendChild(createConnectionElement(feed.Conns[idx]));
}
elem.appendChild(conns);
}
function update_nntpchan_feed_ticker(elem, result_elem) {
nntpchan_admin("feed.list", null, function(j) {
if (j) {
if (j.error) {
console.log("nntpchan_feed_ticker: error, "+j.error);
} else {
// remove all children
while(elem.children.length) {
elem.children[0].remove();
}
var result = j.result;
for (var idx = 0; idx < result.length; idx++) {
var item = result[idx];
var entry = document.createElement("div");
inject_nntp_feed_element(item, entry);
elem.appendChild(entry);
}
}
}
}, result_elem);
}
function nntp_feed_add() {
var param = {};
var e = document.getElementById("add_feed_name");
param.name = e.value;
e = document.getElementById("add_feed_host");
param.host = e.value;
e = document.getElementById("add_feed_port");
param.port = parseInt(e.value);
e = document.getElementById("nntpchan_feed_result");
nntpchan_admin("feed.add", param, null, e);
}
function nntp_feed_del() {
var e = document.getElementById("del_feed_name");
var name = e.value;
e = document.getElementById("nntpchan_feed_result");
nntpchan_admin("feed.del", {name: name}, null, e);
}
function nntp_feed_update() {
var e = document.getElementById("nntpchan_feeds");
if (e) {
setInterval(function(){
var e1 = document.getElementById("nntpchan_feed_result");
update_nntpchan_feed_ticker(e, e1);
}, 1000);
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

+249
View File
@@ -0,0 +1,249 @@
input {
-moz-border-radius: 0px;
-webkit-border-radius: 0px;
border-radius: 0px;
}
.livechan_captcha_input {
color: black;
}
textarea, select {
-moz-border-radius: 0px;
-webkit-border-radius: 0px;
border-radius: 0px;
}
.livechan_chat_input {
padding: 0;
margin: 0;
position: fixed;
width: 100%;
bottom: 0;
left: 0;
right: 0;
background: #d6daf0;
}
.livechan_chat_input_name, .livechan_chat_input_convo {
padding: 0;
padding-left: none;
margin: 0;
width: 80%;
color: black;
}
.livechan_chat_input_left {
width: 19%;
}
.livechan_chat_input_message_div {
padding:0;
margin:0;
position: absolute;
width: 70%;
left: 20%;
top: 3px;
bottom: 0;
}
.livechan_chat_input_message {
padding: 0;
margin: 0;
border:none;
height: 100%;
width: 100%;
resize: none;
}
.livechan_chat_input_submit {
position: absolute;
width: 8%;
top: 3px;
right: 1px;
bottom: 0;
border: none;
color: black;
}
.livechan_chat_output {
position: fixed;
top: 20px;
left: 0;
right: 0;
bottom: 60px;
overflow: auto;
width: 89%;
-webkit-overflow-scrolling: touch;
}
.livechan_chat_output_chat {
max-height: 200px;
overflow: hidden;
}
.livechan_chat_output_date {
margin: 0 4px;
}
.livechan_chat_output_count:hover {
cursor: pointer;
}
.livechan_chat_capcode {
margin: 0 4px;
font-style: italic;
font-weight: lighter;
}
.livechan_image_thumb {
max-width: 300px;
max-height: 200px;
float: left;
margin: 10px;
}
.livechan_captcha {
left: 0px;
top: 0px;
bottom: 0px;
right: 0px;
position: fixed;
opacity: 0.9;
}
.livechan_captcha_inner {
padding: 200px;
}
.livechan_captcha_image {
}
.livechan_captcha_input {
float: down;
}
.livechan_spoiler {
color: black;
background: black;
}
.livechan_chat_output_chat {
background: #d6daf0;
}
.livechan_spoiler:hover {
color: white;
}
.livechan_convo_label {
padding: 5px;
}
.livechan_convobar_root {
position: fixed;
top: 20px;
right: 0;
width: 10%;
}
.livechan_convobar_item {
padding: 5px;
margin: 5px;
background: #d6daf0;
}
.livechan_navbar {
z-index: 3;
position: fixed;
top: 0;
width: 100%;
height: 20px;
}
.livechan_navbar_mod_indicator_inactive, .livechan_navbar_mod_indicator_active, .livechan_navbar_status, .livechan_navbar_channel_label {
padding-left: 10px;
padding-right: 10px;
background: #d6daf0;
}
.hover {
position: relative;
padding: 1px;
left: -1000px
border: 1px dashed black;
visibility: hidden;
}
.hover > img {
position: fixed;
top: 0%;
right: 0;
max-width: 75%;
max-height: 75%;
visibility: visible;
}
.livechan_captcha, .livechan_convobar_root, #chat {
background: #EEF2FF;
}
.livechan_chat_output_chat {
font-family: monospace;
margin: 4px;
padding: 4px;
}
.livechan_chat_output_name {
font-weight: bold;
color: green;
}
.livechan_chat_output_count:hover {
color: red;
}
.livechan_greentext {
color: #789922;
}
.livechan_boldtext {
font-weight: bold;
}
.livechan_internallink , a {
color: blue;
}
.livechan_internallink:hover , a {
color: red;
cursor: pointer;
}
.livechan_chat_selected {
background: blue;
}
.livechan_navbar_mod_indicator_active {
background: #4a4ad4;
color: #34d434;
}
.livechan_navbar_mod_indicator_admin {
background: #4a4ad4;
color: red;
}
.livechan_navbar_mod_indicator_inactive {
color: #aaaaaa;
background: #EEF2FF;
}
.livechan_redtext {
color: #af0a0f;
font-weight: bold;
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

+8
View File
@@ -0,0 +1,8 @@
importScripts('./siphash-lib.js');
importScripts('./miner-js.js');
onmessage = function(e) {
var s = cuckoo["mine_cuckoo"](e.data[0], e.data[1]);
s.push(e.data[2]);
postMessage(s);
}
+132 -43
View File
@@ -42,6 +42,76 @@ function nntpchan_unban() {
})
}
function get_board_target() {
var e = document.getElementById("nntpchan_board_target");
return e.value;
}
function get_key_target() {
var e = document.getElementById("nntpchan_key_target");
return e.value;
}
function nntpchan_key_del() {
nntpchan_admin("pubkey.del", {
pubkey: get_key_target()
});
}
function nntpchan_key_add() {
nntpchan_admin("pubkey.add", {
pubkey: get_key_target()
});
}
function get_nntp_username() {
var e = document.getElementById("nntpchan_nntp_username");
return e.value;
}
function get_nntp_passwd() {
var e = document.getElementById("nntpchan_nntp_passwd");
return e.value;
}
function nntpchan_admin_nntp(method) {
nntpchan_admin(method, {
username: get_nntp_username(),
passwd: get_nntp_passwd()
})
}
function nntpchan_admin_board(method) {
nntpchan_admin(method, {
newsgroup: get_board_target()
})
}
function nntpchan_admin(method, param, handler_cb, result_elem) {
if (handler_cb) {
// we got a handler already set
} else {
// no handler set
var handler_cb = function(j) {
if (j.result) {
return document.createTextNode(j.result);
} else {
return "nothing happened?";
}
}
}
nntpchan_mod({
name:"admin",
parser: function(target) {
return method;
},
handle: handler_cb,
method: ( param && "POST" ) || "GET",
data: param
}, result_elem)
}
// handle delete command
function nntpchan_delete() {
nntpchan_mod({
@@ -72,64 +142,83 @@ function nntpchan_delete() {
});
}
function nntpchan_mod(mod_action) {
function nntpchan_mod(mod_action, result_elem) {
// get the element
var input = document.getElementById("nntpchan_mod_target");
var target = input.value;
var target = null;
if (input) {
target = input.value;
}
if (mod_action.parser) {
target = mod_action.parser(target);
}
var elem = document.getElementById("nntpchan_mod_result");
var elem;
if (result_elem) {
elem = result_elem;
} else {
elem = document.getElementById("nntpchan_mod_result");
}
// clear old results
while( elem.firstChild ) {
elem.removeChild(elem.firstChild);
}
// fire off ajax
var ajax = new XMLHttpRequest();
ajax.onreadystatechange = function() {
if (ajax.readyState == XMLHttpRequest.DONE) {
var status = ajax.status;
// we gud?
if (status == 200) {
// yah
var txt = ajax.responseText;
var j = JSON.parse(txt);
if (j.error) {
var e = document.createTextNode(j.error);
elem.appendChild(e);
} else {
if (mod_action.handle) {
var result = mod_action.handle(j);
if (result) {
elem.appendChild(result);
var csrf_ajax = new XMLHttpRequest();
csrf_ajax.onreadystatechange = function() {
if (csrf_ajax.readyState == XMLHttpRequest.DONE) {
// get csrf token
var csrf = csrf_ajax.getResponseHeader("X-CSRF-Token");
// fire off ajax
var ajax = new XMLHttpRequest();
ajax.onreadystatechange = function() {
if (ajax.readyState == XMLHttpRequest.DONE) {
var status = ajax.status;
// we gud?
if (status == 200) {
// yah
var txt = ajax.responseText;
var j = JSON.parse(txt);
if (j.error) {
var e = document.createTextNode(j.error);
elem.appendChild(e);
} else {
// fail
alert("mod action failed, handler returned nothing");
if (mod_action.handle) {
var result = mod_action.handle(j);
if (result) {
elem.appendChild(result);
}
}
}
} else {
// fail
alert("mod action has no handler");
} else if (status) {
// nah
// http error
elem.innerHTML = "error: HTTP "+status;
}
// clear input
if (input) {
input.value = "";
}
}
} else if (status) {
// nah
// http error
elem.innerHTML = "error: HTTP "+status;
}
// clear input
input.value = "";
if (mod_action.name) {
var url = mod_action.name + "/" + target;
ajax.open(mod_action.method || "GET", url);
ajax.setRequestHeader("X-CSRF-Token", csrf);
var data = mod_action.data;
if (data) {
ajax.setRequestHeader("Content-type","text/json");
ajax.send(JSON.stringify(data));
} else {
ajax.send();
}
} else {
alert("mod action has no name");
}
}
}
if (mod_action.name) {
var url = mod_action.name + "/" + target;
ajax.open("GET", url);
ajax.send();
} else {
alert("mod action has no name");
}
csrf_ajax.open("GET", "");
csrf_ajax.send();
}
+10
View File
@@ -0,0 +1,10 @@
function createBoard() {
var form = document.getElementById("postform");
var e = document.getElementById("boardname");
var board = e.value;
if ( ! board.startsWith("overchan.") ) {
board = "overchan." + board;
}
form.action = form.action + board;
form.submit();
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

+94
View File
@@ -0,0 +1,94 @@
var SipHash = (function() {
function u8to64(p , i) {
return { l: (p[i] | p[i+1]<<8 | p[i+2]<<16 | p[i+3]<<24) , h: (p[i+4] | p[i+5]<<8 | p[i+6]<<16 | p[i+7]<<24) };
}
function _add(a, b) {
var rl = a.l + b.l,
a2 = { h: a.h + b.h + (rl / 2 >>> 31) >>> 0,
l: rl >>> 0 };
a.h = a2.h; a.l = a2.l;
}
function _xor(a, b) {
a.h ^= b.h; a.h >>>= 0;
a.l ^= b.l; a.l >>>= 0;
}
function _rotl(a, n) {
var a2 = {
h: a.h << n | a.l >>> (32 - n),
l: a.l << n | a.h >>> (32 - n)
};
a.h = a2.h; a.l = a2.l;
}
function _rotl32(a) {
var al = a.l;
a.l = a.h; a.h = al;
}
function _compress(v0, v1, v2, v3) {
_add(v0, v1);
_add(v2, v3);
_rotl(v1, 13);
_rotl(v3, 16);
_xor(v1, v0);
_xor(v3, v2);
_rotl32(v0);
_add(v2, v1);
_add(v0, v3);
_rotl(v1, 17);
_rotl(v3, 21);
_xor(v1, v2);
_xor(v3, v0);
_rotl32(v2);
}
function hash(v0h, v0l, v1h, v1l, v2h, v2l, v3h, v3l, mh, ml) {
var mi = { h: mh, l: ml };
var v0 = { h: v0h, l: v0l };
var v1 = { h: v1h, l: v1l };
var v2 = { h: v2h, l: v2l };
var v3 = { h: v3h, l: v3l };
/*var k0 = u8to64(key, 0);
var k1 = u8to64(key, 8);
var v0 = { h: k0.h, l: k0.l }, v2 = k0;
var v1 = { h: k1.h, l: k1.l }, v3 = k1;
_xor(v0, { h: 0x736f6d65, l: 0x70736575 });
_xor(v1, { h: 0x646f7261, l: 0x6e646f6d });
_xor(v2, { h: 0x6c796765, l: 0x6e657261 });
_xor(v3, { h: 0x74656462, l: 0x79746573 });*/
_xor(v3, mi);
_compress(v0, v1, v2, v3);
_compress(v0, v1, v2, v3);
_xor(v0, mi);
_xor(v2, { h: 0, l: 0xff });
_compress(v0, v1, v2, v3);
_compress(v0, v1, v2, v3);
_compress(v0, v1, v2, v3);
_compress(v0, v1, v2, v3);
var h = v0;
_xor(h, v1);
_xor(h, v2);
_xor(h, v3);
var res = new Uint32Array(2);
res[0]=h.h; res[1]=h.l;
return res;
};
return {
hash: hash,
};
})();
var module = module || { }, exports = module.exports = SipHash;
+474 -71
View File
@@ -1,19 +1,59 @@
.thread {
margin-right: 20px;
margin-bottom: 1em;
display: inline-block;
word-wrap: break-word;
width: 100%;
body {
background: #EEF2FF url('bg.png') repeat-x 50% 0%;
color: black;
font-family: arial,helvetica,sans-serif;
font-size: 10pt;
margin: 0 4px;
padding-left: 4px;
padding-right: 4px;
}
.frontend , .subject {
color: #0f0d2d;
main,
aside,
section {
display: block;
margin: 0 auto;
width: 100%;
}
.hover {
position: absolute;
}
.notfound-hover {
background: #EEF2FF;
padding: 10px;
}
#postform_container {
background-color: #EEF2FF;
}
.shadow {
box-shadow: 0 0 10px rgba(0,0,0,0.55);
}
.hover > div > .post , .notfound-hover {
background-color: #D6DAF0;
box-shadow: 0 0 10px rgba(0,0,0,0.55);
}
.frontend , .subject, .catalog_subject {
color: #0F0C5D;
}
.name {
color: #117743;
padding-left: 5px;
}
.postno {
padding-right: 5px;
}
.error {
color: red;
}
.name , .subject {
font-weight: bold;
@@ -24,14 +64,6 @@
}
input {
width: 70%;
}
input.button {
width: 25%;
}
textarea {
width: 350px;
}
@@ -44,8 +76,116 @@ textarea {
padding: 10px 10px;
}
.reply, th, .ukko_thread_header {
background: #d6daf0;
.download_link,.fname_link {
display: block;
text-align: center;
font-size: 90%;
height: auto
padding: 0.5em 0;
margin: auto;
max-width: 200px;
overflow: hidden;
text-overflow: ellipsis;
max-height: 2.4em;
}
.post_body > pre {
font-size: 10pt;
font-weight: unset;
}
pre {
white-space: pre-wrap;
align: center;
font-size: 12pt;
color: black;
display: inline-block;
overflow-wrap: break-word;
word-wrap: break-word;
font-weight: bold;
font-family: sans;
margin-left: auto;
margin-right: auto;
}
table {
margin: auto;
}
table.board-list-table {
width: 100%;
}
table tbody td {
margin: 0;
padding: 4px 15px 4px 4px;
vertical-align: top;
text-align: left;
}
table thead th {
border: 1px solid #000333;
padding: 4px 15px 5px 5px;
background: #98E;
color: #000333;
text-align: left;
white-space: nowrap;
}
table tbody tr:nth-of-type( even ) {
background-color: #D6DAF0;
}
.postform > tr, th {
background: #98E;
font-size: 10pt;
text-align: left;
padding-right: 10px;
padding-left: 4px;
}
.postform td{
padding: 0px 15px 0px 4px;
}
.button {
max-width: 10em;
height: 2em;
}
tr {
background-color: transparent!important;
}
input[type="text"],input[type="password"],textarea {
border: 1px solid #a9a9a9;
text-indent: 0;
text-shadow: none;
text-transform: none;
word-spacing: normal;
font-size: inherit;
font-family: sans-serif;
}
#board_td {
vertical-align: top;
}
.reply, .pagelist, .op {
background: #D6DAF0;
border-width: 1px;
border-style: none solid solid none;
border-color: #B7C5D9;
max-width: 94%!important;
}
.reply, .ukko_thread_header {
background: #D6DAF0;
margin-left: 24px;
}
legend {
/* background-color: #525252; */
}
hr {
@@ -53,19 +193,78 @@ hr {
border-width: 1px medium medium;
border-color: #b7c5d9;
border-style: solid none none;
clear: both;
}
a:hover , a:visited:hover {
color: #f13333;
.board_header {
font-family: tahoma;
letter-spacing: -2px;
font-size: 20pt;
margin: 0;
color: #AF0A0F;
text-align: center;
font-weight: bold;
margin-top: 2em;
}
a {
color: blue;
.board_header_catalog {
text-align: center;
margin-top: 1em;
}
a:visited {
color: #414383;
.catalog_thread {
display: inline-block;
width: 180px;
text-align: center;
padding: 0.25em;
height: 240px;
overflow: hidden;
background-color: rgba(182, 182, 182 ,0.12);
margin: 0.1em;
border: 2px solid rgba(111, 111, 111, 0.34);
}
.catalog_thread:hover {
background-color: #D6DAF0;
}
#catalog_container {
width: 95%;
margin: 1em auto;
text-align: center;
}
.catalog_header, .catalog_subject {
font-weight: bold;
}
.linkThumb img {
max-height: 128px;
max-width: 128px;
box-shadow: 0 0 4px rgba(0,0,0,0.55);
border: 2px solid rgba(153,153,153,0);
}
a:hover , a:visited:hover, .navbar-link > label:hover {
color: #ff0000;
}
a, a:visited, .navbar-link > label {
color: #34345C;
}
.postno {
font-style: italic;
}
.postno, .postnol, .postnol:visited {
color: black;
text-decoration: none;
}
.postno:hover, .postnol:hover, .postnol:visited:hover {
color: #ff0000;
text-decoration: underline;
}
.navbar {
@@ -75,73 +274,148 @@ a:visited {
right: 0px;
margin-top: 0px;
z-index: 20;
box-shadow: 0px 1px 20px rgba(0, 0, 0, 0.15);
background: #CFD8EF;
color: #616383;
box-shadow: 1px 10px 20px rgba(0, 0, 0, 0.15);
border-bottom: 1px solid;
background: #D6DAF0;
color: #34345C;
min-height: 20px;
padding-top: 2px;
}
.navbar-sep {
color: black;
color: darkgray;
}
.navbar-link > label {
text-decoration: underline;
}
#postform_container {
margin-top: 5em;
margin-top: 1em;
}
.navLinks {
padding-bottom: 50px;
}
.ukko_thread_header {
padding: 5px 5px;
margin: 5px 5px;
float: left;
clear: both;
display: inline-block;
}
th {
font-size: 10pt;
padding-left: 10px;
padding-right: 15px;
}
body {
background: linear-gradient(to top, #eef2ff, #eaf1ff) repeat scroll;
font-family: arial,helvetica,sans-serif;
font-size: 10pt;
margin: 0 4px;
padding-left: 4px;
padding-right: 4px;
}
.reply {
margin-left: 1.8em;
display: inline-block;
border-radius: 3px;
input, textarea {
}
.ukko_thread_header {
border-color: #C0C3D4;
border-top-left-radius: 0px;
border-top-right-radius: 3px;
border-bottom-right-radius: 3px;
border-bottom-left-radius: 0px;
border-style: dashed;
}
.frontend {
margin-top: 0px;
background: #e0f0f0;
display: inline-block;
margin-right: 5px;
}
.op , .reply {
float: left;
clear: both;
}
.op {
margin-right: 20px;
margin-bottom: 10px;
margin-top: 5px;
margin-bottom: 1px;
}
.post, .post_body {
margin-bottom: 5px;
.post:target {
background-color: #A99AFF;
}
.post_body > p {
.postreply {
float: right;
}
.post {
background-color: #D6DAF0;
border: 1px solid #B7C5D9;
border-left: none;
border-top: none;
display: table;
padding: 2px;
margin: 2px;
display: inline-block;
float: left;
clear: both;
min-width: 500px;
}
.postheader {
width: 100%;
padding-top: 3px;
padding-right: 5px
}
.tripcode {
color: #de04ef;
}
@keyframes psych
{
0% {background-color: red; color: blue; }
10% {background-color: yellow; color: red; }
20% {background-color: blue; color: green; }
30% {background-color: green; color: yellow; }
40% {background-color: red; color: blue; }
50% {background-color: yellow; color: green; }
60% {background-color: blue; color: yellow; }
70% {background-color: green; color: blue; }
80% {background-color: red; color: green; }
90% {background-color: yellow; color: red; }
95% {background-color: blue; color: yellow; }
100% {background-color: green; color: white; }
}
.psy {
animation: psych 2s linear infinite;
display: inline-block;
}
.memearrows {
color: green;
color: #789922;
margin-left: none;
}
.redtext {
color: #AF0A0F;
font-size: 12pt;
font-weight: bold;
margin-left: none;
}
.spoiler {
display: inline-block;
}
.spoiler > p {
background: black;
color: black;
}
.spoiler:hover > p {
background: black;
color: white;
}
.intro {
@@ -152,31 +426,160 @@ body {
float: left;
}
.file-thumbnail {
display: block;
margin: 5px 20px 10px;
.expanded-thumbnail {
display: inline;
max-width: 100%;
max-height: 100%;
margin: 10px 10px 10px;
}
.thumbnail {
display: block;
margin: 5px 20px;
border: medium none;
max-width: 300px;
max-height: 200px;
}
pre > p {
margin: 0px 0px;
.reply {
padding: 3px 5px 3px 5px;
float: left;
clear: both;
}
.reply , .post_body > pre , .ukko_thread_header {
padding: 7px 7px;
border-radius: 5px;
box-shadow: 1px 1px 3px black;
.post_body {
margin-left: 15px;
margin-top: 3px;
margin-bottom: 10px;
}
.post_body_line {
margin-left: inherit;
margin-top: 2px;
margin-bottom: 2px;
padding-top: 0px;
padding-bottom: 0px;
}
.post_body > pre {
background: #3f3f3f;
color: #d17600;
.pagelist {
display: inline-block;
overflow: hidden;
margin-left: 15px;
margin-top: 20px;
margin-bottom: 50px;
padding: 10px 10px 10px 10px;
font-size: 12pt;
font-weight: medium;
}
.backlink_rewritten {
z-index: 5;
}
.backlink, .backlink:hover, .backlink:visited, .backlink:visited:hover, .backlink_rewritten {
margin-left: none;
color: #D00
}
.origin > img{
height: 25px;
vertical-align: text-top;
margin-right: 5px;
}
.postform_attachment {
max-width: 330px;
}
#faq > div {
margin-left: 20%;
width: 50%;
padding: 10px;
}
}
#captcha_img {
background: white;
}
figure {
float: left;
margin: 1ex;
}
img.thumbnail {
max-width: 350px;
max-height: 350px;
}
.replybar {
float: left;
position: fixed;
top: 2ex;
width: 500px;
}
@media (max-width: 100ex) {
.replybar {
width: 100%;
position: static;
}
}
.hide-reply:checked ~ div {
width: 100%;
position: static;
}
textarea#reply-text {
width: 100%;
resize: vertical;
}
.hide-reply {
float: right;
position: fixed;
top: 0;
right: 0;
}
#nntpchan_banner {
align: center;
}
.legal {
font-size: 10px;
text-align: center;
}
.attachments {
float: left;
margin-bottom: 5px;
}
.navbar-links, .navbar-link, .navbar-name {
padding-left: 2px;
padding-right: 2px;
}
.board_title {
padding-right: 4px;
}
.thread {
padding-left: 10px;
padding-top: 10px;
padding-bottom: 10px;
width: 80%;
}
.hider {
float: right;
}
@keyframes rotate {
0% { transform:rotate(0deg); }
25% { transform:rotate(-1deg); }
50% { transform:rotate(0deg); }
75% { transform:rotate(1deg); }
}
+649
View File
@@ -0,0 +1,649 @@
body
{
background: #0B0B0B;
color: #DADADA;
font-family: arial, helvetica, sans-serif;
font-size: 10pt;
margin: 0 4px;
padding-left: 4px;
padding-right: 4px;
}
.post_body > pre {
color: #DADADA;
text-align: left;
}
main,
aside,
section
{
display: block;
margin: 0 auto;
width: 100%;
}
.frontend,
.subject,
.catalog_subject
{
color: #A03F4C;
}
.name
{
color: #117743;
}
.name,
.subject
{
font-weight: bold;
}
#postform-outer
{
text-align: center;
}
textarea
{
width: 350px;
}
#postform-inner
{
display: inline-block;
}
.post
{
padding: 10px 10px;
}
pre
{
white-space: pre-wrap;
text-align: center;
font-size: 13pt;
background: #98E;
color: black;
display: inline-block;
overflow-wrap: break-word;
word-wrap: break-word;
font-weight: bold;
padding: 20px 20px 20px 20px;
margin-left: auto;
margin-right: auto;
}
table
{
margin: auto;
}
table.board-list-table
{
width: 100%;
}
table tbody td
{
margin: 0;
padding: 4px 15px 4px 4px;
vertical-align: top;
text-align: left;
}
table thead th
{
background-color: #121212;
border: solid 1px #535353;
color: #DADADA;
text-align: left;
white-space: nowrap;
}
table tbody tr:nth-of-type( even)
{
background-color: #121212;
border: solid 1px #535353;
}
.postform >tr,
th
{
background-color: #121212;
border: solid 1px #535353;
color: #DADADA;
font-size: 10pt;
text-align: left;
padding-right: 10px;
padding-left: 4px;
}
#postform-inner tr
{
background-color: transparent!important;
}
input[type="text"],
input[type="password"],
textarea
{
text-indent: 0;
text-shadow: none;
text-transform: none;
word-spacing: normal;
font-size: inherit;
font-family: sans-serif;
}
#board_td
{
vertical-align: top;
}
.reply,
.pagelist
{
background: #D6DAF0;
border-width: 1px;
border-style: none solid solid none;
border-color: #B7C5D9;
display: inline-block;
max-width: 94%!important;
}
.reply,
.ukko_thread_header
{
background-color: #121212;
border: solid 1px #535353;
color: #DADADA;
margin-left: 24px;
}
hr
{
height: 0px;
border-width: 1px medium medium;
border-color: #b7c5d9;
border-style: solid none none;
clear: both;
}
.board_header
{
font-family: tahoma;
letter-spacing: -2px;
font-size: 20pt;
margin: 0;
color: #AF0A0F;
text-align: center;
font-weight: bold;
margin-top: 2em;
}
.board_header_catalog
{
text-align: center;
margin-top: 1em;
}
.catalog_thread
{
display: inline-block;
width: 180px;
text-align: center;
padding: 0.25em;
height: 240px;
overflow: hidden;
background-color: rgba(182, 182, 182, 0.12);
margin: 0.1em;
border: 2px solid rgba(111, 111, 111, 0.34);
}
.catalog_thread:hover
{
background-color: #D6DAF0;
}
#catalog_container
{
width: 95%;
margin: 1em auto;
text-align: center;
}
.catalog_header,
.catalog_subject
{
font-weight: bold;
}
.linkThumb img
{
max-height: 128px;
max-width: 128px;
box-shadow: 0 0 4px rgba(0, 0, 0, 0.55);
border: 2px solid rgba(153, 153, 153, 0);
margin-bottom: 5px;
}
a:hover,
a:visited:hover,
.navbar-link > label:hover
{
color: #ff0000;
}
a,
a:visited,
.navbar-link > label
{
color: #B8B8F7;
;
}
.postno
{
font-style: italic;
}
.postno,
.postnol,
.postnol:visited
{
color: #B8B8F7;
text-decoration: none;
}
.postno:hover,
.postnol:hover,
.postnol:visited:hover
{
color: #ff0000;
text-decoration: underline;
}
.navbar
{
position: fixed;
padding: 0.25em;
text-align: center;
top: 0px;
left: 0px;
right: 0px;
margin-top: 0px;
z-index: 20;
background-color: #121212;
border-bottom: solid 1px #535353;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15);
color: #B8B8F7;
}
.navbar-sep
{
color: darkgray;
}
.navbar-link > label
{
text-decoration: underline;
}
#postform_container
{
margin-top: 1em;
}
.navLinks
{
padding-bottom: 50px;
}
.ukko_thread_header
{
float: left;
clear: both;
display: inline-block;
padding-left: 4px;
padding-right: 4px;
}
input,
textarea
{
background-color: #121212;
border: solid 1px #535353;
color: #DADADA;
}
.ukko_thread_header
{
border-color: #C0C3D4;
border-top-left-radius: 0px;
border-top-right-radius: 3px;
border-bottom-right-radius: 3px;
border-bottom-left-radius: 0px;
border-style: dashed;
}
.frontend
{
margin-top: 0px;
display: inline-block;
}
.op
{
margin-bottom: 1px;
float: left;
clear: both;
background-color: #0f0f0f;
border-color: #242424;
}
pre {
background-color: #0f0f0f;
}
.post
{
margin-bottom: 5px;
min-width: 500px;
}
.postheader
{
padding-top: 3px;
padding-right: 5px
}
.tripcode
{
color: #de04ef;
}
@keyframes psych
{
0%
{
background-color: red;
color: blue;
}
10%
{
background-color: yellow;
color: red;
}
20%
{
background-color: blue;
color: green;
}
30%
{
background-color: green;
color: yellow;
}
40%
{
background-color: red;
color: blue;
}
50%
{
background-color: yellow;
color: green;
}
60%
{
background-color: blue;
color: yellow;
}
70%
{
background-color: green;
color: blue;
}
80%
{
background-color: red;
color: green;
}
90%
{
background-color: yellow;
color: red;
}
95%
{
background-color: blue;
color: yellow;
}
100%
{
background-color: green;
color: white;
}
}
.psy
{
animation: psych 2s linear infinite;
display: inline-block;
}
.memearrows
{
color: #789922;
margin-left: 0;
}
.redtext
{
color: #AF0A0F;
font-size: 12pt;
font-weight: bold;
margin-left: 0;
}
.spoiler
{
display: inline-block;
}
.spoiler > p
{
background: black;
color: black;
}
.spoiler:hover > p
{
background: black;
color: white;
}
.intro
{
margin-bottom: 0.75em;
}
.file:not(.multiple) .file-thumbnail
{
float: left;
}
.file-thumbnail
{
display: block;
margin: 5px 20px 10px;
border: medium none;
max-width: 300px;
max-height: 200px;
}
.reply
{
padding: 3px 5px 3px 5px;
float: left;
clear: both;
}
.post_body
{
margin-left: 15px;
margin-top: 3px;
margin-bottom: 10px;
}
.post_body_line
{
margin-left: inherit;
margin-top: 2px;
margin-bottom: 2px;
padding-top: 0px;
padding-bottom: 0px;
}
.post
{
display: inline-block;
overflow: hidden;
}
.pagelist
{
display: inline-block;
background-color: #121212;
border: solid 1px #535353;
color: #DADADA;
text-align: center;
overflow: hidden;
margin-left: 2em;
padding: 10px 10px 10px 10px;
font-weight: 700;
}
.backlink,
.backlink:hover,
.backlink:visited,
.backlink:visited:hover
{
margin-left: 0;
color: #D00
}
.origin > img
{
height: 20px;
vertical-align: text-top;
}
.postform_attachment
{
max-width: 330px;
}
#faq > div
{
margin-left: 20%;
width: 50%;
padding: 10px;
}
#captcha_img
{
background-color: #121212;
border: solid 1px #535353;
}
figure
{
float: left;
margin: 1ex;
}
img.thumbnail
{
max-width: 350px;
max-height: 350px;
}
.replybar
{
float: left;
position: fixed;
top: 2ex;
right: 0;
width: 34%
}
@media (max-width: 100ex)
{
.replybar
{
width: 100%;
position: static;
}
}
.hide-reply:checked ~ div
{
width: 100%;
position: static;
}
textarea#reply-text
{
width: 100%;
resize: vertical;
}
.hide-reply
{
float: right;
position: fixed;
top: 0;
right: 0;
}
#nntpchan_banner
{
text-align: center;
margin-top: 1em;
}
.legal
{
font-size: 10px;
text-align: center;
}
.attachments
{
float: left;
}
hr
{
border: 1px solid #535353;
height: 1px
}
img#nntpchan_banner {
box-shadow: 0px 0px 10px 0px;
}
#postform_container {
background-color: rgba(0, 0, 0, 0);
}
.post:target {
background-color: #2c2d3e;
box-shadow: 0px 0px 10px 2px;
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

+3
View File
@@ -0,0 +1,3 @@
/*
put your custom stylesheet here
*/
@@ -0,0 +1,27 @@
{{!
board.mustache, displays the contents of page N of the board
template parameters:
- board ( the model of the current page )
- page ( the page number of the current page )
board has the properties:
- Prefix ( absolute path like //site.tld/ or /path/ )
- Board ( the name of the board )
- Navbar ( a function that renders the navbar, should not be escaped )
- Threads ( a list of Thread Models with the last few replies )
}}
<!doctype html><html><head><link rel="stylesheet" href="/static/chen-chan.css"><title>{{board.Board}}</title></head><body>
{{{board.Navbar}}}
{{{form}}}
<dl>
<hr>
{{#board.Threads}}
{{{OP.Truncate.RenderPost}}}
{{#Truncate.Replies}}
{{{Truncate.RenderPost}}}
{{/Truncate.Replies}}
<hr>
{{/board.Threads}}
</dl>
</body></html>
@@ -0,0 +1,33 @@
{{!
boardlist.mustache -- full list of every board
template parameters:
- graph ( a list of 4 string tuples: (board, posts_per_hour, posts_per_day, total_posts) )
- frontend ( the name of the frontend )
- prefix ( the site's prefix )
}}
<!doctype html><html><head><link rel="stylesheet" href="/static/chen-chan.css"><title>{{frontend}} boards</title></head><body>
<table>
<tr>
<th>board</th>
<th>posts per hour</th>
<th>posts per day</th>
<th>total</th>
</tr>
{{# graph}}
<tr>
<td>
<a href="{{prefix}}{{Board}}-0.html">{{Board}}</a>
</td>
<td>
{{Hour}}
</td>
<td>
{{Day}}
</td>
<td>
{{All}}
</td>
</tr>
{{/ graph}}
</table>
</body></html>
@@ -0,0 +1,11 @@
{{!
frontpage.mustache -- template for index.html
template parameters:
- boardgraph ( a boardPageRows instance, see srnd/model.go )
- postgraph ( a postsGraph instance , see srnd/model.go )
- overview ( an overviewModel instance, see srnd/model.go )
- totalposts ( the number of total posts we have ever seen )
- frontend ( the name of the frontend )
- prefix ( the site's prefix )
}}
<!doctype html><html><head><link rel="stylesheet" href="/static/chen-chan.css"><title>{{frontend}} on nntpchan</title></head><body><p>{{frontend}} on nntpchan</p><p><a href="ukko.html">overboard</a> <a href="{{prefix}}boards.html">boards</a> <a href="{{prefix}}static/chen-chan-faq.html">faq</a></p><dl><dt>last posts:</dt><dd>{{{overview.Render}}}</dd></dl><dl><dt>board stats:</dt><dd><table><tr><th>board</th><th>posts this hour</th><th>posts today</th><th>total</th></tr>{{# boardgraph}}<tr><td><a href="{{prefix}}{{Board}}-0.html">{{Board}}</a></td><td>{{Hour}}</td><td>{{Day}}</td><td>{{All}}</td></tr>{{/ boardgraph}}</table></dd></dl><dl><dt>total stats:</dt><dd>{{{postsgraph.Render}}}</dd></dl><p>{{totalposts}} posts total since 2015-12-23</p></body></html>
@@ -0,0 +1,36 @@
{{!
graph_history.mustache
template parameters:
- history ( a list of PostEntry instances, see srnd/model.go )
}}
<html>
<head>
<meta charset="utf-8"></meta>
<link rel="stylesheet" href="{{prefix}}site.css" />
<link rel="stylesheet" href="{{prefix}}user.css" />
<title> Post History</title>
</head>
<body>
<td>
<table id="history_graph">
<thead>
<tr>
<th>Month</th>
<th>Posts</th>
<th></th>
</tr>
</thead>
<tbody>
{{#history.Scale}}
<tr>
<td>{{Date}}</td>
<td class="history_num">{{Num}}</td>
<td>{{OvercockGraph}}</td>
</tr>
{{/history.Scale}}
</tbody>
</table>
</td>
</body>
</html>
@@ -0,0 +1,15 @@
{{!
keygen.mustache -- page containing a newly generated tripcode
template parameters:
- prefix ( the site prefix )
- public ( the public key in hex )
- secret ( the secret key in hex )
- tripcode ( html version of the public key )
}}
<!doctype html><html><head><title>new tripcode</title></head><body><pre>
new tripcode
secret: {{secret}}
public: {{public}}
tripcode: {{{tripcode}}}
</pre></body></html>
@@ -0,0 +1,7 @@
<!doctype html><html><head><link rel="stylesheet" href="{{prefix}}static/chen-chan.css"><title>login</title></head><body>
<form action="login" method="POST" name="modlogin">
<label for="mod_key">secret</label>
<input type="password" id="mod_key" name="privkey">
<input type="submit" value="login">
</form>
</body></html>
@@ -0,0 +1,9 @@
{{!
modlogin_result.mustache -- shows the result of a login attempt
template parameters:
- prefix ( the site prefix )
- mod_prefix ( the prefix to the mod panel, could be something like https://mod.site.tld/ or /mod/ )
- message ( the message returned from the login attempt )
- fail ( present if the login failed ) // not yet added
}}
<!doctype html><html><head><meta http-equiv="refresh" content="1; {{mod_prefix}}"><title>login</title></head><body><p>{{message}}</p></body></html>
@@ -0,0 +1,79 @@
{{!
modpage.mustache -- the moderator panel when logged in
template parameters:
- prefix ( the site's prefix )
}}
<!doctype html><html><head>
<link rel="stylesheet" href="{{prefix}}static/chen-chan.css">
<!-- yes it uses js -->
<script src="{{prefix}}static/mod.js"></script>
<title>nntpchan mod page</title>
</head><body>
<dl>
<dt>post actions</dt>
<dd>
<div>
<label for="nntpchan_mod_target">target</label>
<input id="nntpchan_mod_target" type="text">
</div>
<div>
<button onclick="nntpchan_ban()">ban (url)</button>
<button onclick="nntpchan_delete()">delete (url)</button>
<button onclick="nntpchan_unban()">unban (ip)</button>
</div>
</dd>
</dl>
<dl>
<dt>key actions</dt>
<dd>
<div>
<label for="nntpchan_board_target">pubkey:</label>
<input type="text" id="nntpchan_key_target" />
</div>
<div>
<button onclick="nntpchan_key_add()">add key</button>
<button onclick="nntpchan_key_del()">remove key</button>
</div>
</dd>
</dl>
<dl>
<dt>board actions</dt>
<dd>
<div>
<label for="nntpchan_board_target">board name:</label>
<input type="text" id="nntpchan_board_target">
</div>
<div>
<button onclick="nntpchan_admin_board('frontend.add')">add board</button>
<button onclick="nntpchan_admin_board('frontend.regen')">regenerate</button>
<button onclick="nntpchan_admin_board('frontend.ban')">ban</button>
<button onclick="nntpchan_admin_board('frontend.unban')">unban</button>
<button onclick="nntpchan_admin_board('frontend.nuke')">nuke</button>
</div>
</dd>
</dl>
<dl>
<dt>lightweight actions</dt>
<dd>
<button onclick="nntpchan_admin('template.reload')">reload all templates</button>
</dd>
</dl>
<dl>
<dt>very load heavy actions, use with care</dt>
<dd>
<div>
<button onclick="nntpchan_admin('frontend.regen')">regenerate all pages</button>
<button onclick="nntpchan_admin('thumbnail.regen')">regenerate all thumbnails</button>
</div>
</dd>
</dl>
<dl>
<dt>status</dt>
<dd>
<div id="nntpchan_mod_result"></div>
<noscript>
<b>enable js to use the mod panel kthx</b>
</noscript>
</dd>
</dl>
</body></html>
@@ -0,0 +1,12 @@
{{!
navbar.mustache -- element on the top of each nod-mod page
TODO: make this not suck, have a board list, have board page list
template parameters:
- name ( the name of whatever resource we are on, board/thread )
- frontend ( the name of the frontend we are on )
- links ( a list of Link Models to display )
- prefix ( site prefix )
}}
<p>{{name}} on {{frontend}} | {{# links}} <a href="{{LinkURL}}">{{Text}}</a> {{/ links}} | <a href="{{prefix}}">front page</a> <a href="{{prefix}}ukko.html">overboard</a></p>
@@ -0,0 +1 @@
no apparently.
@@ -0,0 +1,7 @@
{{! overview.mustache
paramters:
- overview (list of PostModels in order of last posted)
}}
<table><tr><th>date</th><th>board</th><th>subject</th></tr>{{#overview}}<tr><td>{{Date}}</td><td><a href="{{Prefix}}{{Board}}-0.html">{{Board}}</a></td><td><a href="{{PostURL}}">{{Truncate.Subject}}</a></td></tr>{{/overview}}</table>
+15
View File
@@ -0,0 +1,15 @@
<dt id="{{PostHash}}">
<a onclick="nntpchan_backlink('{{ShortHash}}');" title="{{MessageID}}">{{ShortHash}}</a>
{{Date}}
{{#IsI2P}}i2p{{/IsI2P}}{{#IsTor}}tor{{/IsTor}}{{#IsClearnet}}clr{{/IsClearnet}}
{{Subject}}
{{Name}}
{{{Pubkey}}}
<a href="{{PostURL}}">[reply]</a>
</dt>
<dd>
{{{RenderBody}}}
{{#Attachments}}
file: <a href="{{Source}}" target="_blank">{{Filename}}</a><br><br>
{{/Attachments}}
</dd>
@@ -0,0 +1,3 @@
<!doctype html><html><head>
<meta http-equiv="refresh" content="1; {{redirect_url}}"></head>
<body><p>fail: {{reason}}</p></body></html>
@@ -0,0 +1,40 @@
<html><head><link rel="stylesheet" href="/static/chen-chan.css"><title>try again</title></head><body>
<form enctype="multipart/form-data" name="post" method="post">
{{#attachment}}
<input type="hidden" name="attachment_data" value="{{attachment}}">
<input type="hidden" name="attachment_filename" value="{{attachment_filename}}">
<input type="hidden" name="attachment_mime" value="{{attachment_type}}">
{{/attachment}}
<input type="hidden" name="reference" value="{{reference}}">
<input type="hidden" name="name" value="{{name}}">
<input type="hidden" name="subject" value="{{subject}}">
<input type="hidden" name="captcha_id" value="{{captcha_id}}">
<input type="hidden" name="message" value="{{message}}">
<div id="postform-outer">
<div id="postform-inner">
<div>{{fail_message}}</div>
<table class="postform">
<tbody>
<tr>
<th>
Captcha
</th>
<td>
<img id="captcha_img" src="{{prefix}}captcha/{{captcha_id}}.png" alt="captcha" />
</td>
</tr>
<tr>
<th>
Solution
</th>
<td>
<input type="text" name="captcha" />
<input type="submit" value="Post" class="button" />
</td>
</tr>
</tbody>
</table>
</div>
</div>
</form>
</body></html>
@@ -0,0 +1,7 @@
{{!
post_success.mustache -- shown when we do a successful post
template parameters:
- redirect_url ( the url of the next page we should redirect to )
- message_id ( the value of the Message-ID header in the post we made, the truncated sha1 of this is the >>posthash )
}}
<!doctype html><html><head><meta http-equiv="refresh" content="2; {{redirect_url}}"></head><body><pre>posted as {{message_id}}</pre></body></html>
@@ -0,0 +1,20 @@
{{!
postform.mustache -- the form for posting
template parameters:
- post_url ( the url of the post form )
- reference ( the post we are replying to, or empty string if it's an op )
- button ( the text for the reply button )
}}
<form action="{{post_url}}" enctype="multipart/form-data" name="post" method="post" style="overflow:auto">
<input type="hidden" name="reference" value="{{reference}}">
<textarea id="postform_message" name="message" placeholder="text" cols="40" rows="10" style="float:left" ></textarea><br>
<div style="float:left">
<input type="file" name="attachment"><br>
<input type="text" name="subject" placeholder="subject"><br>
<input type="text" name="name" placeholder="name"><br>
<input type="text" name="captcha" placeholder="captcha"><br>
<input type="submit" value="{{button}}" class="button"><br>
</div>
<img id="captcha_img" src="{{prefix}}captcha/img" alt="captcha" style="float:left">
</form>
@@ -0,0 +1,7 @@
{{!
posts graph.mustache -- post frequence graph
parameters:
* graph - a postsGraph instance (see srnd/model.go)
}}
<table><tr><th>date</th><th>posts</th><th>cock</th></tr>{{#graph.Scale}}<tr><td>{{Day}}</td><td>{{Num}}</td><td>{{OvercockGraph}}</td></tr>{{/graph.Scale}}</table>
@@ -0,0 +1,23 @@
{{!
thread.mustache -- renders to a thread-*.html page, shows the entire thread
template parameters:
- board ( the Board Model of the board this thread was posted in )
- thread ( the Thread Model of the current thread being rendered )
- form ( the post form markup )
Thread Model attributes:
- OP , the Post Model of the original poster
- Replies , a list of all the replies or empty if none
- Board , the name of the Board this thread is on
- BoardURL , the url that points to the board index page
}}
<!doctype html><html><head><link rel="stylesheet" href="/static/chen-chan.css"><title>{{thread.OP.Subject}}</title><script src="{{thread.Prefix}}static/nntpchan.js"></script></head><body>
{{{thread.Navbar}}}
{{{form}}}
<dl>
{{{thread.OP.RenderPost}}}
{{# thread.Replies}}
{{{RenderPost}}}
{{/ thread.Replies}}
</dl>
</body></html>
+19
View File
@@ -0,0 +1,19 @@
{{!
ukko.mustache -- overboard, contains the last threads posted regardless of newsgroup
template parameters:
- prefix ( site prefix )
- threads ( a list of Thread Models that represent the latest threads )
}}
<!doctype html><html><head><link rel="stylesheet" href="/static/chen-chan.css"><title>ukko/overboard</title></head><body>
<a href="/">frontpage</a>
{{#threads}}
<hr>
<p>posted on <a href="{{{BoardURL}}}">{{OP.Board}}</a></p>
<dl>
{{{OP.Truncate.RenderPost}}}
{{#Truncate.Replies}}
{{{Truncate.RenderPost}}}
{{/Truncate.Replies}}
</dl>
{{/threads}}
</body></html>
+25
View File
@@ -0,0 +1,25 @@
{{!
404.mustache -- 404 page
template parameters:
- prefix (the site prefix)
}}
<html>
<head>
<title> 404 </title>
<meta charset="utf-8" />
<link rel="stylesheet" href="{{prefix}}static/site.css" />
<link id="current_theme" rel="stylesheet" href="{{prefix}}static/user.css" />
<script type="text/javascript" src="{{prefix}}static/nntpchan.js"></script>
</head>
<body>
<center>
<div class="not_found">
<img src="{{prefix}}static/404.png"></img>
<div class="not_found_message">
{{#i18n.Translations}}{{resource_not_found}}{{/i18n.Translations}}
</div>
</div>
</center>
</body>
</html>
+31 -6
View File
@@ -11,17 +11,26 @@
- Navbar ( a function that renders the navbar, should not be escaped )
- Threads ( a list of Thread Models with the last few replies )
}}
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<link rel="stylesheet" href="{{board.Prefix}}static/site.css"></link>
<meta name="viewport" content="initial-scale=1" />
<link rel="stylesheet" href="{{board.Prefix}}static/site.css" />
<link id="current_theme" rel="stylesheet" href="{{board.Prefix}}static/user.css" />
<script type="text/javascript" src="{{board.Prefix}}static/nntpchan.js"></script>
<title>{{board.Board}}</title>
</head>
<body>
<!-- begin navbar -->
{{{board.Navbar}}}
<!-- end navbar -->
<center>
<div id="nntpchan_banner">
</div>
</center>
<div class="board_header">{{board.Board}}</div>
<div class="board_header_catalog"><a href="{{board.Prefix}}catalog-{{board.Name}}.html"> {{#i18n.Translations}}{{catalog_label}}{{/i18n.Translations}} </a></div>
<!-- postform -->
<div id="postform_container">
{{{form}}}
@@ -30,17 +39,33 @@
<div id="threads_container">
{{#board.Threads}}
<div class="thread" id="thread_{{OP.PostHash}}">
<div clsss="thread_header">
<div class="thread_header">
</div>
{{{OP.Truncate.RenderPost}}}
{{#Truncate.Replies}}
{{{Truncate.RenderPost}}}
<br />
{{/Truncate.Replies}}
<hr />
</div>
<br/>
<hr/>
{{/board.Threads}}
</div>
<div class="pagelist">{{# board.PageList }}[<a href="{{LinkURL}}"> {{Text}} </a>] {{/ board.PageList }}
<span class="navbar-sep">
|
</span>
<a href="{{board.Prefix}}catalog-{{board.Name}}.html"> {{#i18n.Translations}}{{catalog_label}}{{/i18n.Translations}} </a>
</div>
<script type="text/javascript">
var prefix = "{{board.Prefix}}";
var e = document.getElementById("nntpchan_banner");
nntpchan_inject_banners(e, prefix);
init(prefix);
ready();
</script>
<hr/>
<footer>
<p class="legal">All posts on this site are the responsibility of the individual poster and not the administration, pursuant to 47 U.S.C. § 230.</p>
<p class="legal">To make a DMCA request or report illegal content, please contact the administration</p>
</footer>
</body>
</html>
@@ -0,0 +1,51 @@
{{!
boardlist.mustache -- full list of every board
template parameters:
- graph ( a list of 4 string tuples: (board, posts_per_hour, posts_per_day, total_posts) )
- frontend ( the name of the frontend )
- prefix ( the site's prefix )
}}
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="{{prefix}}static/site.css"></link>
<link id="current_theme" rel="stylesheet" href="{{prefix}}static/user.css"></link>
<title> {{frontend}} {{#i18n.Translations}}{{board_list_title}}{{/i18n.Translations}} </title>
</head>
<body>
<center>
<div class="index-outer">
<div class="index-inner">
<table id="board_graph">
<thead>
<tr>
<th> {{#i18n.Translations}}{{board_label}}{{/i18n.Translations}} </th>
<th> {{#i18n.Translations}}{{pph_label}}{{/i18n.Translations}} </th>
<th> {{#i18n.Translations}}{{ppd_label}}{{/i18n.Translations}} </th>
<th> {{#i18n.Translations}}{{total}}{{/i18n.Translations}} </th>
</tr>
</thead>
<tbody>
{{# graph}}
<tr>
<td>
<a href="{{prefix}}{{Board}}-0.html">{{Board}}</a>
</td>
<td>
{{Hour}}
</td>
<td>
{{Day}}
</td>
<td>
{{All}}
</td>
</tr>
{{/ graph}}
</tbody>
</table>
</div>
</div>
</center>
</body>
</html>
@@ -0,0 +1,47 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="initial-scale=1" />
<link rel="stylesheet" href="{{board.Prefix}}static/site.css" />
<link rel="stylesheet" href="{{board.Prefix}}static/user.css" />
<link id="current_theme" rel="stylesheet" href="{{board.Prefix}}static/user.css" />
<script type="text/javascript" src="{{board.Prefix}}static/nntpchan.js"></script>
<title>{{#i18n.Translations}}{{catalog_title}}{{/i18n.Translations}} {{board.Name}}</title>
</head>
<body>
<!-- begin navbar -->
{{{board.Navbar}}}
<!-- end navbar -->
<center>
<div id="nntpchan_banner">
</div>
</center>
<div class="board_header">{{#i18n.Translations}}{{catalog_title}}{{/i18n.Translations}} {{board.Name}}</div>
<!-- postform -->
<hr />
<div id="catalog_container">
{{#board.Threads}}
<div class="catalog_thread">
<a class="linkThumb" href="{{OP.PostURL}}"><img src="{{OP.RepresentativeThumb}}"></a>
<div class="catalog_header">{{#i18n.Translations}}{{replies_short_label}}{{/i18n.Translations}}: {{ReplyCount}} / {{#i18n.Translations}}{{pictures_short_label}}{{/i18n.Translations}}: {{Page}}</div>
<div class="catalog_subject">{{OP.Subject}}</div>
<div class="catalog_body">
{{{OP.RenderBody}}}
</div>
</div>
{{/board.Threads}}
</div>
<script type="text/javascript">
var e = document.getElementById("nntpchan_banner");
nntpchan_inject_banners(e, "{{board.Prefix}}");
</script>
<hr/>
<footer>
<p class="legal">All posts on this site are the responsibility of the individual poster and not the administration, pursuant to 47 U.S.C. § 230.</p>
<p class="legal">To make a DMCA request or report illegal content, please contact the administration</p>
</footer>
</body>
</html>
+71 -40
View File
@@ -1,7 +1,9 @@
{{!
frontpage.mustache -- template for index.html
template parameters:
- graph ( a list of 4 string tuples: (board, posts_per_hour, posts_per_day, total_posts) )
- boardgraph ( markup of boardPageRows instance, see srnd/model.go )
- postgraph ( markup of postsGraph instance , see srnd/model.go )
- overview ( markup of overviewModel instance , see srnd/model.go )
- totalposts ( the number of total posts we have ever seen )
- frontend ( the name of the frontend )
- prefix ( the site's prefix )
@@ -9,49 +11,78 @@
<html>
<head>
<link rel="stylesheet" href="{{prefix}}static/site.css"></link>
<link rel="stylesheet" href="{{prefix}}static/site.css" />
<link id="current_theme" rel="stylesheet" href="{{prefix}}static/user.css" />
<script src="{{prefix}}static/nntpchan.js" type="text/javascript"></script>
<title> {{frontend}} on nntpchan </title>
</head>
<body>
{{{navbar}}}
<center>
<div class="index-outer">
<div class="index-inner">
<h1> {{frontend}} on nntpchan </h1>
<h2>View the <a href="ukko.html">overboard</a></h2>
<h3>Read the <a href="{{prefix}}static/faq.html">FAQ</a></h3>
<h3>Join the <a href="https://i2p.rocks/irc/?channels=overchan&nick=nameless">IRC</a></h3>
<h3>Fork on github: <a href="https://github.com/majestrate/nntpchan/">frontend</a> and <a href="https://github.com/majestrate/srndv2/">core</a></h3>
<h4>We've Had {{totalposts}} Posts Since August 01 2015 </h4>
<div class="index-outer">
<div id="nntpchan_banner">
</div>
<div class="index-inner">
<div>{{frontend}} on nntpchan</div>
<div>View the <a href="{{prefix}}ukko.html">overboard</a></div>
<div>Join the IRC on <a href="https://qchat.rizon.net/?channels=#nntpchan">rizon</a> or <a href="irc://127.0.0.1:6668/overchan">irc2p</a></div>
<div>Check out the <a href="{{prefix}}boards.html">board list</a></div>
<div>Fork on github: <a href="https://github.com/majestrate/nntpchan/">frontend</a> and <a href="https://github.com/majestrate/srndv2/">core</a></div>
<div>We've Had {{totalposts}} Posts Since August 01 2015 </div>
</div>
<div class="index-inner">
<table>
<tbody>
<tr>
<td class="posts_td">
{{{postsgraph}}}
</td>
<td class="board_td">
{{! todo: move boardgraph into its own file like postsgraph }}
<table id="board_graph">
<thead>
<tr>
<th> {{#i18n.Translations}}{{board_label}}{{/i18n.Translations}} </th>
<th> {{#i18n.Translations}}{{posts_hour}}{{/i18n.Translations}} </th>
<th> {{#i18n.Translations}}{{posts_today}}{{/i18n.Translations}} </th>
<th> {{#i18n.Translations}}{{total}}{{/i18n.Translations}} </th>
</tr>
</thead>
<tbody>
{{# boardgraph}}
<tr>
<td>
<a href="{{prefix}}{{Board}}-0.html">{{Board}}</a>
</td>
<td>
{{Hour}}
</td>
<td>
{{Day}}
</td>
<td>
{{All}}
</td>
</tr>
{{/ boardgraph}}
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
{{{overview}}}
</div>
</div>
<div class="index-inner">
<table id="board_graph">
<tbody>
<tr>
<th> Board </th>
<th> Post per Hour </th>
<th> Post per Day </th>
<th> Total </th>
</tr>
{{# graph}}
<tr>
<td>
<a href="{{prefix}}{{Board}}-0.html">{{Board}}</a>
</td>
<td>
{{Hour}}
</td>
<td>
{{Day}}
</td>
<td>
{{All}}
</td>
</tr>
{{/ graph}}
</tbody>
</table>
</div>
</div>
</center>
<script type="text/javascript">
var e = document.getElementById("nntpchan_banner");
nntpchan_inject_banners(e, "{{prefix}}");
</script>
<hr/>
<footer>
<p class="legal">All posts on this site are the responsibility of the individual poster and not the administration, pursuant to 47 U.S.C. § 230.</p>
<p class="legal">To make a DMCA request or report illegal content, please contact the administration</p>
</footer>
</body>
</html>
</html>
@@ -0,0 +1,37 @@
{{!
graph_history.mustache
template parameters:
- history ( a list of PostEntry instances, see srnd/model.go )
}}
<!doctype html>
<html>
<head>
<meta charset="utf-8"></meta>
<link rel="stylesheet" href="{{prefix}}static/site.css" />
<link rel="stylesheet" href="{{prefix}}static/user.css" />
<title>{{#i18n.Translations}}{{post_history_title}}{{/i18n.Translations}}</title>
</head>
<body>
<td>
<table id="history_graph">
<thead>
<tr>
<th>{{#i18n.Translations}}{{month}}{{/i18n.Translations}}</th>
<th>{{#i18n.Translations}}{{posts}}{{/i18n.Translations}}</th>
<th></th>
</tr>
</thead>
<tbody>
{{#history.Scale}}
<tr>
<td>{{Date}}</td>
<td class="history_num">{{Num}}</td>
<td>{{OvercockGraph}}</td>
</tr>
{{/history.Scale}}
</tbody>
</table>
</td>
</body>
</html>
@@ -0,0 +1,64 @@
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="initial-scale=1" />
<link rel="stylesheet" href="{{board.Prefix}}static/site.css" />
<link rel="stylesheet" href="{{board.Prefix}}static/user.css" />
<script type="text/javascript" src="{{board.Prefix}}static/nntpchan.js"></script>
<title>{{#i18n.Translations}}{{api_install_title}}{{/i18n.Translations}}</title>
</head>
<body>
<div class="installer_header">{{#i18n.Translations}}{{api_install_title}}{{/i18n.Translations}}</div>
{{#dialog.HasError}}
<p class="installer_error">{{dialog.Error}}</p>
{{/dialog.HasError}}
<form action="" method="post" autocomplete="off">
<div id="install-outer">
<div id="installer-inner">
<table class="installer-tab">
<tbody>
<tr>
<th>
{{#i18n.Translations}}{{api_username}}{{/i18n.Translations}}
</th>
<td>
<input type="text" name="user" value="{{dialog.User}}">
</td>
</tr>
<tr>
<th>
{{#i18n.Translations}}{{api_password_name}}{{/i18n.Translations}}
</th>
<td>
<input type="password" name="pass" value="">
</td>
</tr>
<tr>
<th>
{{#i18n.Translations}}{{api_secret_name}}{{/i18n.Translations}}
</th>
<td>
<input type="text" name="secret" value="{{dialog.Secret}}">
</td>
</tr>
</tbody>
</table>
</div>
{{#dialog.HasNext}}
<input type="submit" value="{{#i18n.Translations}}{{next_prompt}}{{/i18n.Translations}}" class="button" />
{{/dialog.HasNext}}
{{^dialog.HasNext}}
<input type="submit" value="{{#i18n.Translations}}{{finish_prompt}}{{/i18n.Translations}}" class="button" />
{{/dialog.HasNext}}
</div>
</form>
{{#dialog.HasPrevious}}
<div class="back_button">
<form action="" method="post">
<input type="hidden" name="back" value="true" />
<input type="submit" value="{{#i18n.Translations}}{{previous_prompt}}{{/i18n.Translations}}" class="button" />
</form>
</div>
{{/dialog.HasPrevious}}
</body>
</html>
@@ -0,0 +1,64 @@
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="initial-scale=1" />
<link rel="stylesheet" href="{{board.Prefix}}static/site.css" />
<link rel="stylesheet" href="{{board.Prefix}}static/user.css" />
<script type="text/javascript" src="{{board.Prefix}}static/nntpchan.js"></script>
<title>{{#i18n.Translations}}{{binary_install_title}}{{/i18n.Translations}}</title>
</head>
<body>
<div class="installer_header">{{#i18n.Translations}}{{binary_install_title}}{{/i18n.Translations}}</div>
{{#dialog.HasError}}
<p class="installer_error">{{dialog.Error}}</p>
{{/dialog.HasError}}
<form action="" method="post" autocomplete="off">
<div id="install-outer">
<div id="installer-inner">
<table class="installer-tab">
<tbody>
<tr>
<th>
{{#i18n.Translations}}{{convert_prompt}}{{/i18n.Translations}}
</th>
<td>
<input type="text" name="convert" value="{{dialog.Convert}}">
</td>
</tr>
<tr>
<th>
{{#i18n.Translations}}{{ffmpeg_prompt}}{{/i18n.Translations}}
</th>
<td>
<input type="text" name="ffmpeg" value="{{dialog.FFmpeg}}">
</td>
</tr>
<tr>
<th>
{{#i18n.Translations}}{{sox_prompt}}{{/i18n.Translations}}
</th>
<td>
<input type="text" name="sox" value="{{dialog.Sox}}">
</td>
</tr>
</tbody>
</table>
</div>
{{#dialog.HasNext}}
<input type="submit" value="{{#i18n.Translations}}{{next_prompt}}{{/i18n.Translations}}" class="button" />
{{/dialog.HasNext}}
{{^dialog.HasNext}}
<input type="submit" value="{{#i18n.Translations}}{{finish_prompt}}{{/i18n.Translations}}" class="button" />
{{/dialog.HasNext}}
</div>
</form>
{{#dialog.HasPrevious}}
<div class="back_button">
<form action="" method="post">
<input type="hidden" name="back" value="true" />
<input type="submit" value="{{#i18n.Translations}}{{previous_prompt}}{{/i18n.Translations}}" class="button" />
</form>
</div>
{{/dialog.HasPrevious}}
</body>
</html>
@@ -0,0 +1,64 @@
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="initial-scale=1" />
<link rel="stylesheet" href="{{board.Prefix}}static/site.css" />
<link rel="stylesheet" href="{{board.Prefix}}static/user.css" />
<script type="text/javascript" src="{{board.Prefix}}static/nntpchan.js"></script>
<title>{{#i18n.Translations}}{{cache_install_title}}{{/i18n.Translations}}</title>
</head>
<body>
<div class="installer_header">{{#i18n.Translations}}{{cache_install_title}}{{/i18n.Translations}}</div>
{{#dialog.HasError}}
<p class="installer_error">{{dialog.Error}}</p>
{{/dialog.HasError}}
<form action="" method="post">
<div id="install-outer">
<div id="installer-inner">
<table class="installer-tab">
<tbody>
<tr>
<th>
</th>
<td>
<input type="radio" name="cache" value="file" checked> {{#i18n.Translations}}{{file_cache_name}}{{/i18n.Translations}}
</td>
</tr>
<tr>
<th>
</th>
<td>
<input type="radio" name="cache" value="null"> {{#i18n.Translations}}{{null_cache_name}}{{/i18n.Translations}}
</td>
</tr>
<tr>
<th>
</th>
<td>
<input type="radio" name="cache" value="redis"> {{#i18n.Translations}}{{redis_cache_name}}{{/i18n.Translations}}
</td>
</tr>
</tbody>
</table>
</div>
{{#dialog.HasNext}}
<input type="submit" value="{{#i18n.Translations}}{{next_prompt}}{{/i18n.Translations}}" class="button" />
{{/dialog.HasNext}}
{{^dialog.HasNext}}
<input type="submit" value="{{#i18n.Translations}}{{finish_prompt}}{{/i18n.Translations}}" class="button" />
{{/dialog.HasNext}}
</div>
</form>
{{#dialog.HasPrevious}}
<div class="back_button">
<form action="" method="post">
<input type="hidden" name="back" value="true" />
<input type="submit" value="{{#i18n.Translations}}{{previous_prompt}}{{/i18n.Translations}}" class="button" />
</form>
</div>
{{/dialog.HasPrevious}}
</body>
</html>
@@ -0,0 +1,56 @@
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="initial-scale=1" />
<link rel="stylesheet" href="{{board.Prefix}}static/site.css" />
<link rel="stylesheet" href="{{board.Prefix}}static/user.css" />
<script type="text/javascript" src="{{board.Prefix}}static/nntpchan.js"></script>
<title>{{#i18n.Translations}}{{crypto_install_title}}{{/i18n.Translations}}</title>
</head>
<body>
<div class="installer_header">{{#i18n.Translations}}{{crypto_install_title}}{{/i18n.Translations}}</div>
{{#dialog.HasError}}
<p class="installer_error">{{dialog.Error}}</p>
{{/dialog.HasError}}
<form action="" method="post" autocomplete="off">
<div id="install-outer">
<div id="installer-inner">
<table class="installer-tab">
<tbody>
<tr>
<th>
{{#i18n.Translations}}{{host_name}}{{/i18n.Translations}}
</th>
<td>
<input type="text" name="host" value="{{dialog.Host}}">
</td>
</tr>
<tr>
<th>
{{#i18n.Translations}}{{key_name}}{{/i18n.Translations}}
</th>
<td>
<input type="text" name="key" value="{{dialog.Key}}">
</td>
</tr>
</tbody>
</table>
</div>
{{#dialog.HasNext}}
<input type="submit" value="{{#i18n.Translations}}{{next_prompt}}{{/i18n.Translations}}" class="button" />
{{/dialog.HasNext}}
{{^dialog.HasNext}}
<input type="submit" value="{{#i18n.Translations}}{{finish_prompt}}{{/i18n.Translations}}" class="button" />
{{/dialog.HasNext}}
</div>
</form>
{{#dialog.HasPrevious}}
<div class="back_button">
<form action="" method="post">
<input type="hidden" name="back" value="true" />
<input type="submit" value="{{#i18n.Translations}}{{previous_prompt}}{{/i18n.Translations}}" class="button" />
</form>
</div>
{{/dialog.HasPrevious}}
</body>
</html>
@@ -0,0 +1,56 @@
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="initial-scale=1" />
<link rel="stylesheet" href="{{board.Prefix}}static/site.css" />
<link rel="stylesheet" href="{{board.Prefix}}static/user.css" />
<script type="text/javascript" src="{{board.Prefix}}static/nntpchan.js"></script>
<title>{{#i18n.Translations}}{{db_install_title}}{{/i18n.Translations}}</title>
</head>
<body>
<div class="installer_header">{{#i18n.Translations}}{{db_install_title}}{{/i18n.Translations}}</div>
{{#dialog.HasError}}
<p class="installer_error">{{dialog.Error}}</p>
{{/dialog.HasError}}
<form action="" method="post">
<div id="install-outer">
<div id="installer-inner">
<table class="installer-tab">
<tbody>
<tr>
<th>
</th>
<td>
<input type="radio" name="db" value="postgres"> {{#i18n.Translations}}{{postgres_name}}{{/i18n.Translations}}
</td>
</tr>
<tr>
<th>
</th>
<td>
<input type="radio" name="db" value="redis" checked> {{#i18n.Translations}}{{redis_name}}{{/i18n.Translations}}
</td>
</tr>
</tbody>
</table>
</div>
{{#dialog.HasNext}}
<input type="submit" value="{{#i18n.Translations}}{{next_prompt}}{{/i18n.Translations}}" class="button" />
{{/dialog.HasNext}}
{{^dialog.HasNext}}
<input type="submit" value="{{#i18n.Translations}}{{finish_prompt}}{{/i18n.Translations}}" class="button" />
{{/dialog.HasNext}}
</div>
</form>
{{#dialog.HasPrevious}}
<div class="back_button">
<form action="" method="post">
<input type="hidden" name="back" value="true" />
<input type="submit" value="{{#i18n.Translations}}{{previous_prompt}}{{/i18n.Translations}}" class="button" />
</form>
</div>
{{/dialog.HasPrevious}}
</body>
</html>
@@ -0,0 +1,72 @@
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="initial-scale=1" />
<link rel="stylesheet" href="{{board.Prefix}}static/site.css" />
<link rel="stylesheet" href="{{board.Prefix}}static/user.css" />
<script type="text/javascript" src="{{board.Prefix}}static/nntpchan.js"></script>
<title>{{#i18n.Translations}}{{frontend_install_title}}{{/i18n.Translations}}</title>
</head>
<body>
<div class="installer_header">{{#i18n.Translations}}{{frontend_install_title}}{{/i18n.Translations}}</div>
{{#dialog.HasError}}
<p class="installer_error">{{dialog.Error}}</p>
{{/dialog.HasError}}
<form action="" method="post" autocomplete="off">
<div id="install-outer">
<div id="installer-inner">
<table class="installer-tab">
<tbody>
<tr>
<th>
{{#i18n.Translations}}{{frontend_name}}{{/i18n.Translations}}
</th>
<td>
<input type="text" name="name" value="{{dialog.Name}}">
</td>
</tr>
<tr>
<th>
{{#i18n.Translations}}{{locale_name}}{{/i18n.Translations}}
</th>
<td>
<input type="text" name="locale" value="{{dialog.Locale}}">
</td>
</tr>
<tr>
<th>
{{#i18n.Translations}}{{allow_files_prompt}}{{/i18n.Translations}}
</th>
<td>
<input type="checkbox" name="allow_files" value="1" checked>
</td>
</tr>
<tr>
<th>
{{#i18n.Translations}}{{enable_json_prompt}}{{/i18n.Translations}}
</th>
<td>
<input type="checkbox" name="json" value="1">
</td>
</tr>
</tbody>
</table>
</div>
{{#dialog.HasNext}}
<input type="submit" value="{{#i18n.Translations}}{{next_prompt}}{{/i18n.Translations}}" class="button" />
{{/dialog.HasNext}}
{{^dialog.HasNext}}
<input type="submit" value="{{#i18n.Translations}}{{finish_prompt}}{{/i18n.Translations}}" class="button" />
{{/dialog.HasNext}}
</div>
</form>
{{#dialog.HasPrevious}}
<div class="back_button">
<form action="" method="post">
<input type="hidden" name="back" value="true" />
<input type="submit" value="{{#i18n.Translations}}{{previous_prompt}}{{/i18n.Translations}}" class="button" />
</form>
</div>
{{/dialog.HasPrevious}}
</body>
</html>
@@ -0,0 +1,56 @@
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="initial-scale=1" />
<link rel="stylesheet" href="{{board.Prefix}}static/site.css" />
<link rel="stylesheet" href="{{board.Prefix}}static/user.css" />
<script type="text/javascript" src="{{board.Prefix}}static/nntpchan.js"></script>
<title>{{#i18n.Translations}}{{key_install_title}}{{/i18n.Translations}}</title>
</head>
<body>
<div class="installer_header">{{#i18n.Translations}}{{key_install_title}}{{/i18n.Translations}}</div>
{{#dialog.HasError}}
<p class="installer_error">{{dialog.Error}}</p>
{{/dialog.HasError}}
<form action="" method="post" autocomplete="off">
<div id="install-outer">
<div id="installer-inner">
<table class="installer-tab">
<tbody>
<tr>
<th>
{{#i18n.Translations}}{{pubkey_name}}{{/i18n.Translations}}
</th>
<td>
<input type="text" name="public" value="{{dialog.Public}}" size="65" readonly>
</td>
</tr>
<tr>
<th>
{{#i18n.Translations}}{{secretkey_name}}{{/i18n.Translations}}
</th>
<td>
<input type="text" name="secret" value="{{dialog.Secret}}" size="65" readonly>
</td>
</tr>
</tbody>
</table>
</div>
{{#dialog.HasNext}}
<input type="submit" value="{{#i18n.Translations}}{{next_prompt}}{{/i18n.Translations}}" class="button" />
{{/dialog.HasNext}}
{{^dialog.HasNext}}
<input type="submit" value="{{#i18n.Translations}}{{finish_prompt}}{{/i18n.Translations}}" class="button" />
{{/dialog.HasNext}}
</div>
</form>
{{#dialog.HasPrevious}}
<div class="back_button">
<form action="" method="post">
<input type="hidden" name="back" value="true" />
<input type="submit" value="{{#i18n.Translations}}{{previous_prompt}}{{/i18n.Translations}}" class="button" />
</form>
</div>
{{/dialog.HasPrevious}}
</body>
</html>
@@ -0,0 +1,80 @@
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="initial-scale=1" />
<link rel="stylesheet" href="{{board.Prefix}}static/site.css" />
<link rel="stylesheet" href="{{board.Prefix}}static/user.css" />
<script type="text/javascript" src="{{board.Prefix}}static/nntpchan.js"></script>
<title>{{#i18n.Translations}}{{nntp_install_title}}{{/i18n.Translations}}</title>
</head>
<body>
<div class="installer_header">{{#i18n.Translations}}{{nntp_install_title}}{{/i18n.Translations}}</div>
{{#dialog.HasError}}
<p class="installer_error">{{dialog.Error}}</p>
{{/dialog.HasError}}
<form action="" method="post" autocomplete="off">
<div id="install-outer">
<div id="installer-inner">
<table class="installer-tab">
<tbody>
<tr>
<th>
{{#i18n.Translations}}{{nntp_name}}{{/i18n.Translations}}
</th>
<td>
<input type="text" name="nntp_name" value="{{dialog.Name}}">
</td>
</tr>
<tr>
<th>
{{#i18n.Translations}}{{allow_attachments_prompt}}{{/i18n.Translations}}
</th>
<td>
<input type="checkbox" name="allow_attachments" value="1" checked>
</td>
</tr>
<tr>
<th>
{{#i18n.Translations}}{{allow_anon_prompt}}{{/i18n.Translations}}
</th>
<td>
<input type="checkbox" name="allow_anon" value="1" checked>
</td>
</tr>
<tr>
<th>
{{#i18n.Translations}}{{allow_anon_attachments_prompt}}{{/i18n.Translations}}
</th>
<td>
<input type="checkbox" name="allow_anon_attachments" value="1">
</td>
</tr>
<tr>
<th>
{{#i18n.Translations}}{{require_tls_prompt}}{{/i18n.Translations}}
</th>
<td>
<input type="checkbox" name="require_tls" value="1" checked>
</td>
</tr>
</tbody>
</table>
</div>
{{#dialog.HasNext}}
<input type="submit" value="{{#i18n.Translations}}{{next_prompt}}{{/i18n.Translations}}" class="button" />
{{/dialog.HasNext}}
{{^dialog.HasNext}}
<input type="submit" value="{{#i18n.Translations}}{{finish_prompt}}{{/i18n.Translations}}" class="button" />
{{/dialog.HasNext}}
</div>
</form>
{{#dialog.HasPrevious}}
<div class="back_button">
<form action="" method="post">
<input type="hidden" name="back" value="true" />
<input type="submit" value="{{#i18n.Translations}}{{previous_prompt}}{{/i18n.Translations}}" class="button" />
</form>
</div>
{{/dialog.HasPrevious}}
</body>
</html>
@@ -0,0 +1,72 @@
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="initial-scale=1" />
<link rel="stylesheet" href="{{board.Prefix}}static/site.css" />
<link rel="stylesheet" href="{{board.Prefix}}static/user.css" />
<script type="text/javascript" src="{{board.Prefix}}static/nntpchan.js"></script>
<title>{{#i18n.Translations}}{{postgres_db_install_title}}{{/i18n.Translations}}</title>
</head>
<body>
<div class="installer_header">{{#i18n.Translations}}{{postgres_db_install_title}}{{/i18n.Translations}}</div>
{{#dialog.HasError}}
<p class="installer_error">{{dialog.Error}}</p>
{{/dialog.HasError}}
<form action="" method="post" autocomplete="off">
<div id="install-outer">
<div id="installer-inner">
<table class="installer-tab">
<tbody>
<tr>
<th>
{{#i18n.Translations}}{{host_name}}{{/i18n.Translations}}
</th>
<td>
<input type="text" name="host" value="{{dialog.Host}}">
</td>
</tr>
<tr>
<th>
{{#i18n.Translations}}{{port_name}}{{/i18n.Translations}}
</th>
<td>
<input type="text" name="port" value="{{dialog.Port}}">
</td>
</tr>
<tr>
<th>
{{#i18n.Translations}}{{username_name}}{{/i18n.Translations}}
</th>
<td>
<input type="text" name="user" value="{{dialog.Username}}">
</td>
</tr>
<tr>
<th>
{{#i18n.Translations}}{{password_name}}{{/i18n.Translations}}
</th>
<td>
<input type="password" name="password" value="">
</td>
</tr>
</tbody>
</table>
</div>
{{#dialog.HasNext}}
<input type="submit" value="{{#i18n.Translations}}{{next_prompt}}{{/i18n.Translations}}" class="button" />
{{/dialog.HasNext}}
{{^dialog.HasNext}}
<input type="submit" value="{{#i18n.Translations}}{{finish_prompt}}{{/i18n.Translations}}" class="button" />
{{/dialog.HasNext}}
</div>
</form>
{{#dialog.HasPrevious}}
<div class="back_button">
<form action="" method="post">
<input type="hidden" name="back" value="true" />
<input type="submit" value="{{#i18n.Translations}}{{previous_prompt}}{{/i18n.Translations}}" class="button" />
</form>
</div>
{{/dialog.HasPrevious}}
</body>
</html>
@@ -0,0 +1,64 @@
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="initial-scale=1" />
<link rel="stylesheet" href="{{board.Prefix}}static/site.css" />
<link rel="stylesheet" href="{{board.Prefix}}static/user.css" />
<script type="text/javascript" src="{{board.Prefix}}static/nntpchan.js"></script>
<title>{{#i18n.Translations}}{{redis_db_install_title}}{{/i18n.Translations}}</title>
</head>
<body>
<div class="installer_header">{{#i18n.Translations}}{{redis_db_install_title}}{{/i18n.Translations}}</div>
{{#dialog.HasError}}
<p class="installer_error">{{dialog.Error}}</p>
{{/dialog.HasError}}
<form action="" method="post" autocomplete="off">
<div id="install-outer">
<div id="installer-inner">
<table class="installer-tab">
<tbody>
<tr>
<th>
{{#i18n.Translations}}{{host_name}}{{/i18n.Translations}}
</th>
<td>
<input type="text" name="host" value="{{dialog.Host}}">
</td>
</tr>
<tr>
<th>
{{#i18n.Translations}}{{port_name}}{{/i18n.Translations}}
</th>
<td>
<input type="text" name="port" value="{{dialog.Port}}">
</td>
</tr>
<tr>
<th>
{{#i18n.Translations}}{{password_name}}{{/i18n.Translations}}
</th>
<td>
<input type="password" name="password" value="">
</td>
</tr>
</tbody>
</table>
</div>
{{#dialog.HasNext}}
<input type="submit" value="{{#i18n.Translations}}{{next_prompt}}{{/i18n.Translations}}" class="button" />
{{/dialog.HasNext}}
{{^dialog.HasNext}}
<input type="submit" value="{{#i18n.Translations}}{{finish_prompt}}{{/i18n.Translations}}" class="button" />
{{/dialog.HasNext}}
</div>
</form>
{{#dialog.HasPrevious}}
<div class="back_button">
<form action="" method="post">
<input type="hidden" name="back" value="true" />
<input type="submit" value="{{#i18n.Translations}}{{previous_prompt}}{{/i18n.Translations}}" class="button" />
</form>
</div>
{{/dialog.HasPrevious}}
</body>
</html>
@@ -0,0 +1,64 @@
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="initial-scale=1" />
<link rel="stylesheet" href="{{board.Prefix}}static/site.css" />
<link rel="stylesheet" href="{{board.Prefix}}static/user.css" />
<script type="text/javascript" src="{{board.Prefix}}static/nntpchan.js"></script>
<title>{{#i18n.Translations}}{{redis_db_install_title}}{{/i18n.Translations}}</title>
</head>
<body>
<div class="installer_header">{{#i18n.Translations}}{{redis_db_install_title}}{{/i18n.Translations}}</div>
{{#dialog.HasError}}
<p class="installer_error">{{dialog.Error}}</p>
{{/dialog.HasError}}
<form action="" method="post" autocomplete="off">
<div id="install-outer">
<div id="installer-inner">
<table class="installer-tab">
<tbody>
<tr>
<th>
{{#i18n.Translations}}{{host_name}}{{/i18n.Translations}}
</th>
<td>
<input type="text" name="host" value="{{dialog.Host}}">
</td>
</tr>
<tr>
<th>
{{#i18n.Translations}}{{port_name}}{{/i18n.Translations}}
</th>
<td>
<input type="text" name="port" value="{{dialog.Port}}">
</td>
</tr>
<tr>
<th>
{{#i18n.Translations}}{{password_name}}{{/i18n.Translations}}
</th>
<td>
<input type="password" name="password" value="">
</td>
</tr>
</tbody>
</table>
</div>
{{#dialog.HasNext}}
<input type="submit" value="{{#i18n.Translations}}{{next_prompt}}{{/i18n.Translations}}" class="button" />
{{/dialog.HasNext}}
{{^dialog.HasNext}}
<input type="submit" value="{{#i18n.Translations}}{{finish_prompt}}{{/i18n.Translations}}" class="button" />
{{/dialog.HasNext}}
</div>
</form>
{{#dialog.HasPrevious}}
<div class="back_button">
<form action="" method="post">
<input type="hidden" name="back" value="true" />
<input type="submit" value="{{#i18n.Translations}}{{previous_prompt}}{{/i18n.Translations}}" class="button" />
</form>
</div>
{{/dialog.HasPrevious}}
</body>
</html>
+9 -6
View File
@@ -5,16 +5,19 @@
- public ( the public key in hex )
- secret ( the secret key in hex )
- tripcode ( html version of the public key )
}}
}}
<!doctype html>
<html>
<head>
<meta charset="utf-8"></meta>
<link rel="stylesheet" href="{{prefix}}static/site.css"></link>
<title> here is a new tripcode </title>
<link rel="stylesheet" href="{{prefix}}static/site.css" />
<link id="current_theme" rel="stylesheet" href="{{prefix}}static/user.css" />
<script type="text/javascript" src="{{prefix}}static/nntpchan.js"></script>
<title>{{#i18n.Translations}}{{new_tripcode_title}}{{/i18n.Translations}}</title>
</head>
<body>
<pre>New Tripcode:
<div id="secret_key">secret: {{secret}}</div><div id="public_key">public: {{public}}</div><div>tripcode: <span class="tripcode" id="capcode_key">{{{tripcode}}}</span></div>
<pre>{{#i18n.Translations}}{{new_tripcode_label}}{{/i18n.Translations}}:
<div id="secret_key">{{#i18n.Translations}}{{secret_key}}{{/i18n.Translations}}: {{secret}}</div><div id="public_key">{{#i18n.Translations}}{{public_key}}{{/i18n.Translations}}: {{public}}</div><div>{{#i18n.Translations}}{{tripcode}}{{/i18n.Translations}}: <span class="tripcode" id="capcode_key">{{{tripcode}}}</span></div>
</pre>
</body>
</html>
</html>
+32
View File
@@ -0,0 +1,32 @@
{{!
live.mustache -- live ui
template parameters:
- prefix ( site prefix )
}}
<!doctype html>
<html>
<head>
<title> {{#i18n.Translations}}{{overboard_title}}{{/i18n.Translations}} </title>
<meta charset="utf-8" />
<meta name="viewport" content="initial-scale = 1.0,maximum-scale = 1.0" />
<link rel="stylesheet" href="{{prefix}}static/livechan.css" />
<link id="current_theme" rel="stylesheet" href="{{prefix}}static/user.css" />
<style type="text/css" id="convo_filter">
</style>
<script type="text/javascript" src="{{prefix}}static/nntpchan.js"></script>
</head>
<body>
<noscript>you need js for livechan mode</noscript>
<script type="text/javascript" >
var e = document.createElement("div");
e.setAttribute("id", "chat");
e.setAttribute("style", "position:fixed;left:0;right:0;top:0;bottom:0;width:100%;height:100%;");
document.body.appendChild(e);
var board = "";
if (location.hash != "" ) {
board = location.hash.substr(1);
}
new Chat(e, board, { prefix : "{{prefix}}" });
</script>
</body>
</html>
@@ -0,0 +1,49 @@
{{!
modpage.mustache -- the moderator panel when logged in
template parameters:
- prefix ( the site's prefix )
}}
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="{{prefix}}static/site.css" />
<link id="current_theme" rel="stylesheet" href="{{prefix}}static/user.css" />
<!-- yes it uses js -->
<script type="text/javascript" src="{{prefix}}static/nntpchan.js"></script>
<script type="text/javascript" src="{{prefix}}static/mod.js"></script>
<script type="text/javascript" src="{{prefix}}static/feed.js"></script>
<title> {{#i18n.Translations}}{{modpage_title}}{{/i18n.Translations}} </title>
</head>
<body onload="main()">
<div id="nntpchan_mod_result"></div>
<div class="nntpchan_feed_pane">
<pre> Add Feed </pre>
<label for="add_feed_host">Host</label>
<input id="add_feed_host" />
<label for="add_feed_host">Port</label>
<input id="add_feed_port" />
<label for="add_feed_name">Name</label>
<input id="add_feed_name" />
<button onclick="nntp_feed_add()">Add</button>
</div>
<div class="nntpchan_feed_pane">
<pre> Remove Feed </pre>
<label for="del_feed_name">Name</label>
<input id="del_feed_name" />
<button onclick="nntp_feed_del()">Remove</button>
</div>
<div class="nntpchan_feed_pane">
<pre> Sync Feeds </pre>
<button onclick="nntpchan_admin('feed.sync')">Sync All</button>
</div>
<div id="nntpchan_feed_result"></div>
<div id="nntpchan_feeds"></div>
<script>
nntp_feed_update();
</script>
<noscript>
<b>{{#i18n.Translations}}{{nojs_info}}{{/i18n.Translations}}</b>
</noscript>
</body>
</html>
+7 -4
View File
@@ -1,13 +1,16 @@
<!doctype html>
<html>
<head>
<link ref="stylesheet" href="{{prefix}}static/site.css"></link>
<title>login</title>
<link rel="stylesheet" href="{{prefix}}static/site.css" />
<link id="current_theme" rel="stylesheet" href="{{prefix}}static/user.css" />
<title>{{#i18n.Translations}}{{login}}{{/i18n.Translations}}</title>
</head>
<body>
<form action="login" method="POST" name="modlogin">
<label for="mod_key">secret</label>
<label for="mod_key">{{#i18n.Translations}}{{secret_key}}{{/i18n.Translations}}</label>
<input type="password" id="mod_key" name="privkey" />
<input type="submit" value="login" />
<input type="submit" value="{{#i18n.Translations}}{{login}}{{/i18n.Translations}}" />
{{{csrfField}}}
</form>
</body>
</html>

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