{"id":20408265,"url":"https://github.com/hanfengsan/ehunter","last_synced_at":"2025-05-15T04:08:13.270Z","repository":{"id":37406115,"uuid":"83584524","full_name":"hanFengSan/eHunter","owner":"hanFengSan","description":"For the best reading experience","archived":false,"fork":false,"pushed_at":"2024-11-28T18:32:38.000Z","size":22328,"stargazers_count":958,"open_issues_count":125,"forks_count":56,"subscribers_count":19,"default_branch":"master","last_synced_at":"2025-04-14T05:57:01.502Z","etag":null,"topics":["typescript","vue"],"latest_commit_sha":null,"homepage":"","language":"Less","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hanFengSan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-03-01T17:58:09.000Z","updated_at":"2025-04-01T11:27:33.000Z","dependencies_parsed_at":"2024-10-27T12:42:00.217Z","dependency_job_id":"8670b8aa-8277-4512-93fc-f823550739cb","html_url":"https://github.com/hanFengSan/eHunter","commit_stats":{"total_commits":256,"total_committers":2,"mean_commits":128.0,"dds":0.04296875,"last_synced_commit":"3ea92b674cd81d5b8648ca9e2fb641c1f77f7b31"},"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hanFengSan%2FeHunter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hanFengSan%2FeHunter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hanFengSan%2FeHunter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hanFengSan%2FeHunter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hanFengSan","download_url":"https://codeload.github.com/hanFengSan/eHunter/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254270656,"owners_count":22042860,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["typescript","vue"],"created_at":"2024-11-15T05:29:35.557Z","updated_at":"2025-05-15T04:08:08.247Z","avatar_url":"https://github.com/hanFengSan.png","language":"Less","funding_links":[],"categories":[],"sub_categories":[],"readme":"[中文版](https://github.com/hanFengSan/eHunter/blob/master/README_CN.md)\n# eHunter\nProvide a scroll mode and book mode, for a better reading experience.\n\n# Preview\n![avatar](https://github.com/hanFengSan/eHunter/blob/master/github_image/github_preview_4.png?raw=true)\n\n![avatar](https://github.com/hanFengSan/eHunter/blob/master/github_image/github_preview_5_1.png?raw=true)\n\n![avatar](https://raw.githubusercontent.com/hanFengSan/eHunter/master/github_image/github_preview_3.jpg)\n\n# Use in iPad\nYou can follow the guide to use eHunter in iPad:\nCN: [Link](https://github.com/hanFengSan/eHunter/blob/master/ipad_cn.md)\nEN: [Link](https://github.com/hanFengSan/eHunter/blob/master/ipad_en.md)\n\n## Implementation\nIt creates a new element in the Eh page, and inject Vue components to provide a scroll mode and book mode.\n\n## Install\nTampermonkey: [openuserjs](https://openuserjs.org/scripts/alexchen/eHunter)\nChrome: coming soon\nFirefox: Coming soon\n\nYou also can get it from the 'release' of this project.\n\n## Run\n1. In a Node environment, run `npm install`, and `npm run dev`, then you will in dev mode.\n2. In the top of `chrome://extensions`, open the develop mode, and select the `/dist`.\n3. Run `npm run publish` to package a zip file in `/publish_output` for the web store of Chrome and Firefox.\n4. Tampermonkey: run `npm run build`, and the `/dist/inject.js` is target, just use it.\n5. Run `npm run test` to test.\n\n## Structure\n```\n|-eHunter\n  |-build\n    |-gulpfile.js // gulp file for packaging\n    |-webpack.dev.conf.js // webpack file for dev\n    |-webpack.prod.conf.js // webpack file for prod\n  |-dist // the directory of release \n  |-src\n    |-assets // resources\n      |-img // images\n      |-value\n        |-String.js // for i18n\n        |-tags.js // tags\n        |-version.js // the informations of update in this version\n    |-bean // bean classes\n    |-components // Vue components\n      |-widget // button, pagination, switch etc..\n        |-AlbumBookView.vue // the component of book mode\n        |-AlbumScrollView.vue // the component of scorll mode\n        |-ModalManager.vue // manage dialogs\n        |-PageView.vue // the component of page， loading in AlbumBookView and AlbumScrollView\n        |-ReaderView.vue // the component of reader，including of AlbumBookView, AlbumScrollView,ThumbScrollview and TopBar\n        |-ThumbScrollview.vue // the component of thumbnail column\n        |-TopBar.vue // top bar\n    |-service\n      |-parser // the parseres of Eh pages\n      |-request // the request classes.\n      |-storage\n        |-Base\n          |-Stroage.js // extend from react-native-storage, supporting chrome.storage.\n        |-AlbumCacheService.js // cache the urls of images, the size of images.\n        |-LocalStorage.js // wrap Storage.js，basing on the window.localStorage\n        |-SyncStorage.js //  wrap Storage.js，basing on the chrome.storage.sync. It can sync the datas with Cloud of Google.\n      |-api.js // the api of Eh\n      |-InfoService.js // show the dialog of instructions, the dialog of update, etc..\n      |-SettingServie.js // save settings and get \n      |-PlatformService.js // some apis, for cross platfroms\n      |-StringService.js // provide strings of i18n\n    |-store // Vuex\n    |-style // the variables of sass, and the style of Markdown\n    |-utils\n        |-bezier-easing.js // using Cubic Bezier in the scroll of scroll mode\n        |-MdRenderer.js // the renderer of Markdown\n        |-VueUtil.js // add some frequently-used functions in Vue\n    |-app.inject.vue // the main components of Vue\n    |-app.popup.vue // the main components of Vue in popup window\n    |-main.inject.js // the entry of webpeck and some earlier stage processing before injecting view of Vue.\n    |-main.popup.js // the entry of webpeck. in popup window.\n    |-config.js // version and update server\n    |-mainifest.json // the mainifest for chrome and firefox extension\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhanfengsan%2Fehunter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhanfengsan%2Fehunter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhanfengsan%2Fehunter/lists"}