{{title}}
6 | {{#user}} 7 | {{#domain}}{{domain}}{{/domain}} 8 | {{/user}} 9 | 10 | 20 |-
27 | {{#poll}}
28 |
- 29 | {{item}} {{points}} {{i_point}} 30 | 31 | 32 | {{/poll}} 33 |
├── .github └── FUNDING.yml ├── .gitignore ├── 404.html ├── CNAME ├── Gruntfile.js ├── README.md ├── assets ├── css │ ├── hw-ios-2.css │ ├── hw-ios-2.min.css │ ├── hw-ios.css │ ├── hw-ios.min.css │ ├── hw-web.css │ └── hw-web.min.css ├── images │ ├── comment-arrow.png │ ├── external-arrow.png │ ├── ios │ │ ├── activity-indicator.png │ │ ├── back-button-5.png │ │ ├── back-button-active-5.png │ │ ├── back-button-active.png │ │ ├── back-button.png │ │ ├── button-5.png │ │ ├── button-active-5.png │ │ ├── button-active.png │ │ ├── button-bar-press-indicator.png │ │ ├── button.png │ │ ├── close-button.png │ │ ├── detail-disclosure-button-active.png │ │ ├── detail-disclosure-button.png │ │ ├── disclosure-indicator-active.png │ │ ├── disclosure-indicator.png │ │ ├── nav-bar-5.png │ │ ├── nav-bar-mini-5.png │ │ ├── nav-bar-mini.png │ │ ├── nav-bar.png │ │ ├── refresh-icon.png │ │ ├── silver-button-active.png │ │ ├── silver-button-bar.png │ │ ├── silver-button.png │ │ └── silver-nav-bar.png │ ├── ios7 │ │ ├── back-icon.png │ │ ├── close-button.png │ │ ├── comment-arrow.png │ │ ├── comment-button.png │ │ ├── disclosure-indicator.png │ │ ├── external-arrow.png │ │ └── refresh-icon.png │ └── web │ │ ├── comment-arrow.svg │ │ ├── comments-icon.png │ │ ├── comments-icon.svg │ │ ├── external-arrow.svg │ │ ├── home-icon.png │ │ ├── home-icon.svg │ │ ├── refresh-icon.png │ │ └── refresh-icon.svg ├── js │ ├── hw-ios-2.js │ ├── hw-ios.js │ ├── hw-web.js │ ├── hw.js │ ├── libs │ │ ├── amplify.store.js │ │ ├── classList.js │ │ ├── hnapi.js │ │ ├── hogan.js │ │ ├── ibento.js │ │ ├── requestanimationframe.js │ │ ├── ruto.js │ │ ├── tappable.js │ │ └── tween.js │ └── templates.js └── templates │ ├── comments-toggle.mustache │ ├── comments.mustache │ ├── post-comments.mustache │ ├── post.mustache │ └── stories-load.mustache ├── chrome-web-app ├── icon-128.png └── manifest.json ├── icons ├── favicon-128.png ├── favicon-196.png ├── favicon-32.png ├── favicon.ico ├── favicon.png ├── fxos-icon-128.png ├── fxos-icon-30.png ├── fxos-icon-60.png ├── icon-128.png ├── icon-180.png ├── icon-196.png ├── icon-30.png ├── icon-60.png ├── icon.svg ├── touch-icon-114.png ├── touch-icon-120.png ├── touch-icon-144.png ├── touch-icon-152.png ├── touch-icon-72.png └── touch-icon-76.png ├── index.html ├── js ├── hnapi-worker.js ├── hw-ios-2.min.js ├── hw-ios-2.min.js.map ├── hw-ios.min.js ├── hw-ios.min.js.map ├── hw-web.min.js └── hw-web.min.js.map ├── manifest.json ├── manifest.webapp ├── options.html ├── package-lock.json ├── package.json ├── promo-images └── promo-440-280.png ├── screenshots ├── screenshot-chrome.png ├── screenshot-fxos-1.png ├── screenshot-fxos-2.png ├── screenshot1.png ├── screenshot1@2x.png ├── screenshot2.png └── screenshot2@2x.png ├── script └── server ├── service-worker.js ├── sources ├── hackerweb-logo.xar ├── ios-cubic-bezier.xar ├── ios-elements.xar ├── ios7-elements.xar ├── landing.xar ├── loader.xar ├── misc.xar ├── promo-image.afdesign └── ycombinator-logo.xar ├── startups ├── startup-320-460.png └── startup-640-920.png └── tasks ├── embedImage.js └── templates.js /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: cheeaun # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | custom: https://www.buymeacoffee.com/cheeaun # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 13 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | -------------------------------------------------------------------------------- /404.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
Page not found. Go to HackerWeb.
9 | -------------------------------------------------------------------------------- /CNAME: -------------------------------------------------------------------------------- 1 | hackerweb.app -------------------------------------------------------------------------------- /Gruntfile.js: -------------------------------------------------------------------------------- 1 | module.exports = function(grunt) { 2 | 3 | grunt.initConfig({ 4 | pkg: grunt.file.readJSON('package.json'), 5 | uglify: { 6 | web: { 7 | options: { 8 | sourceMap: 'js/hw-web.min.js.map', 9 | output: { 10 | max_line_len: 500, 11 | }, 12 | }, 13 | files: { 14 | 'js/hw-web.min.js': [ 15 | 'assets/js/libs/ruto.js', 16 | 'assets/js/libs/amplify.store.js', 17 | 'assets/js/libs/hogan.js', 18 | 'assets/js/libs/hnapi.js', 19 | 'assets/js/libs/ibento.js', 20 | 'assets/js/templates.js', 21 | 'assets/js/hw.js', 22 | 'assets/js/hw-web.js' 23 | ] 24 | } 25 | }, 26 | ios: { 27 | options: { 28 | sourceMap: 'js/hw-ios.min.js.map', 29 | output: { 30 | max_line_len: 500, 31 | }, 32 | }, 33 | files: { 34 | 'js/hw-ios.min.js': [ 35 | 'assets/js/libs/ruto.js', 36 | 'assets/js/libs/amplify.store.js', 37 | 'assets/js/libs/hogan.js', 38 | 'assets/js/libs/hnapi.js', 39 | 'assets/js/libs/tappable.js', 40 | 'assets/js/libs/tween.js', 41 | 'assets/js/libs/requestanimationframe.js', 42 | 'assets/js/templates.js', 43 | 'assets/js/hw.js', 44 | 'assets/js/hw-ios.js' 45 | ] 46 | } 47 | }, 48 | ios2: { 49 | options: { 50 | sourceMap: 'js/hw-ios-2.min.js.map', 51 | output: { 52 | max_line_len: 500, 53 | }, 54 | }, 55 | files: { 56 | 'js/hw-ios-2.min.js': [ 57 | 'assets/js/libs/ruto.js', 58 | 'assets/js/libs/amplify.store.js', 59 | 'assets/js/libs/hogan.js', 60 | 'assets/js/libs/hnapi.js', 61 | 'assets/js/libs/tappable.js', 62 | 'assets/js/libs/tween.js', 63 | 'assets/js/libs/requestanimationframe.js', 64 | 'assets/js/templates.js', 65 | 'assets/js/hw.js', 66 | 'assets/js/hw-ios-2.js' 67 | ] 68 | } 69 | } 70 | }, 71 | cssmin: { 72 | target: { 73 | files: [{ 74 | expand: true, 75 | cwd: 'assets/css', 76 | src: ['*.css', '!*.min.css'], 77 | dest: 'assets/css', 78 | ext: '.min.css' 79 | }] 80 | } 81 | }, 82 | templates: { 83 | all: { 84 | files: { 85 | 'assets/js/templates.js': [ 86 | 'assets/templates/*.mustache' 87 | ] 88 | } 89 | } 90 | }, 91 | watch: { 92 | scripts: { 93 | files: [ 94 | 'assets/js/libs/*.js', 95 | 'assets/js/*.js', 96 | 'Gruntfile.js' 97 | ], 98 | tasks: ['uglify'] 99 | }, 100 | css: { 101 | files: [ 102 | 'assets/css/*.css', 103 | '!assets/css/*.min.css' 104 | ], 105 | tasks: ['cssmin'] 106 | }, 107 | templates: { 108 | files: 'assets/templates/*.mustache', 109 | tasks: ['templates'] 110 | } 111 | }, 112 | embedImage: { 113 | all: [ 114 | 'assets/css/*.css' 115 | ] 116 | }, 117 | connect: { 118 | server: { 119 | options: { 120 | keepalive: true, 121 | hostname: '*', 122 | debug: true 123 | } 124 | } 125 | }, 126 | concurrent: { 127 | server: { 128 | tasks: ['watch', 'connect'], 129 | options: { 130 | logConcurrentOutput: true 131 | } 132 | } 133 | } 134 | }); 135 | 136 | grunt.loadTasks('tasks'); 137 | grunt.loadNpmTasks('grunt-contrib-uglify'); 138 | grunt.loadNpmTasks('grunt-contrib-watch'); 139 | grunt.loadNpmTasks('grunt-concurrent'); 140 | grunt.loadNpmTasks('grunt-contrib-cssmin'); 141 | 142 | // Configurable port number 143 | var port = grunt.option('port'); 144 | if (port) grunt.config('connect.server.options.port', port); 145 | grunt.loadNpmTasks('grunt-contrib-connect'); 146 | grunt.registerTask('server', 'concurrent:server'); 147 | }; 148 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | HackerWeb 2 | ========= 3 | 4 | A simply readable Hacker News web app.");t.b(t.t(t.f("content",c,p,0)));t.b("
No comments.
");};};};t.b("{{{content}}} 10 |
"),n.b(n.t(n.f("content",e,t,0))),n.b("
No comments.
')),o.b("
49 | {{>comments_list}} 50 |
51 | {{/has_comments}} 52 | {{^has_comments}} 53 |No comments.
54 | {{/has_comments}} 55 | {{/load_error}} 56 | {{/loading}} 57 |