{"id":20857199,"url":"https://github.com/walkingriver/hottowel-electron","last_synced_at":"2026-04-13T11:31:50.793Z","repository":{"id":36878110,"uuid":"41185093","full_name":"walkingriver/hottowel-electron","owner":"walkingriver","description":"John Papa's Hot Towel SPA slightly modified to run inside of ElectronJS","archived":false,"fork":false,"pushed_at":"2015-08-22T02:01:18.000Z","size":236,"stargazers_count":3,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-12-27T21:53:33.132Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","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/walkingriver.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}},"created_at":"2015-08-22T01:39:35.000Z","updated_at":"2017-01-07T09:03:29.000Z","dependencies_parsed_at":"2022-09-12T11:30:40.050Z","dependency_job_id":null,"html_url":"https://github.com/walkingriver/hottowel-electron","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/walkingriver/hottowel-electron","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/walkingriver%2Fhottowel-electron","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/walkingriver%2Fhottowel-electron/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/walkingriver%2Fhottowel-electron/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/walkingriver%2Fhottowel-electron/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/walkingriver","download_url":"https://codeload.github.com/walkingriver/hottowel-electron/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/walkingriver%2Fhottowel-electron/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31751264,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-13T09:16:15.125Z","status":"ssl_error","status_checked_at":"2026-04-13T09:16:05.023Z","response_time":93,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":[],"created_at":"2024-11-18T04:36:51.629Z","updated_at":"2026-04-13T11:31:50.778Z","avatar_url":"https://github.com/walkingriver.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# hottowel\n\n**Generated from HotTowel Angular**\n\n\u003e*Opinionated Angular style guide for teams by [@john_papa](//twitter.com/john_papa)*\n\n\u003eMore details about the styles and patterns used in this app can be found in my [Angular Style Guide](https://github.com/johnpapa/angularjs-styleguide) and my [Angular Patterns: Clean Code](http://jpapa.me/ngclean) course at [Pluralsight](http://pluralsight.com/training/Authors/Details/john-papa) and working in teams.\n\n## Prerequisites\n\n1. Install [Node.js](http://nodejs.org)\n - on OSX use [homebrew](http://brew.sh) `brew install node`\n - on Windows use [chocolatey](https://chocolatey.org/) `choco install nodejs`\n\n2. Install Yeoman `npm install -g yo`\n\n3. Install these NPM packages globally\n\n    ```bash\n    npm install -g bower gulp nodemon\n    ```\n\n    \u003eRefer to these [instructions on how to not require sudo](https://github.com/sindresorhus/guides/blob/master/npm-global-without-sudo.md)\n\n## Running HotTowel\n\n### Changes to support [ElectronJS](https://github.com/atom/electron)\n - Added `electron-prebuilt` and `electron-connect` via npm.\n - Added new gulp task: `gulp serve-electron` in gulpfile.js\n \n ```js\nvar electron = require('electron-connect').server.create();\n gulp.task('serve-electron', ['inject'], function () {\n\n  // Start browser process\n  electron.start();\n\n  // Restart browser process\n  gulp.watch('app.js', electron.restart);\n\n  // Reload renderer process\n  gulp.watch([config.nodeServer, config.index], electron.reload);\n});\n ```\n \n - Added Electron setup code in src/server/app.js\n \n ```js\n var electron=require('app');\n electron.on('ready', onReady);\n var BrowserWindow = require('browser-window');\n\n function onReady() {\n\tvar mainWindow = new BrowserWindow({\n        'node-integration': false,\n\t\twidth: 1280,\n\t\theight: 800\n\t});\t\n\t\n\tmainWindow.loadUrl('http://localhost:'+ port);\n\tmainWindow.openDevTools();\n }\n ```\n\n - Note: The additions to app.js broke the ability to run the process in \n node by itself, because the ElectronJS modules (e.g., app) don't exist.\n \n### Linting\n - Run code analysis using `gulp vet`. This runs jshint, jscs, and plato.\n\n### Tests\n\n - Run the unit tests using `gulp test` (via karma, mocha, sinon).\n\n### Running in dev mode\n - Run the project with `gulp serve-dev`\n\n - opens it in a browser and updates the browser with any files changes.\n\n### Building the project\n - Build the optimized project using `gulp build`\n - This create the optimized code for the project and puts it in the build folder\n\n### Running the optimized code\n - Run the optimize project from the build folder with `gulp serve-build`\n\n## Exploring HotTowel\nHotTowel Angular starter project\n\n### Structure\nThe structure also contains a gulpfile.js and a server folder. The server is there just so we can serve the app using node. Feel free to use any server you wish.\n\n\t/src\n\t\t/client\n\t\t\t/app\n\t\t\t/content\n\n### Installing Packages\nWhen you generate the project it should run these commands, but if you notice missing packages, run these again:\n\n - `npm install`\n - `bower install`\n\n### The Modules\nThe app has 4 feature modules and depends on a series of external modules and custom but cross-app modules\n\n```\napp --\u003e [\n        app.admin --\u003e [\n            app.core,\n            app.widgets\n        ],\n        app.dashboard --\u003e [\n            app.core,\n            app.widgets\n        ],\n        app.layout --\u003e [\n            app.core\n        ],\n        app.widgets,\n\t\tapp.core --\u003e [\n\t\t\tngAnimate,\n\t\t\tngSanitize,\n\t\t\tui.router,\n\t\t\tblocks.exception,\n\t\t\tblocks.logger,\n\t\t\tblocks.router\n\t\t]\n    ]\n```\n\n#### core Module\nCore modules are ones that are shared throughout the entire application and may be customized for the specific application. Example might be common data services.\n\nThis is an aggregator of modules that the application will need. The `core` module takes the blocks, common, and Angular sub-modules as dependencies.\n\n#### blocks Modules\nBlock modules are reusable blocks of code that can be used across projects simply by including them as dependencies.\n\n##### blocks.logger Module\nThe `blocks.logger` module handles logging across the Angular app.\n\n##### blocks.exception Module\nThe `blocks.exception` module handles exceptions across the Angular app.\n\nIt depends on the `blocks.logger` module, because the implementation logs the exceptions.\n\n##### blocks.router Module\nThe `blocks.router` module contains a routing helper module that assists in adding routes to the $routeProvider.\n\n## Gulp Tasks\n\n### Task Listing\n\n- `gulp help`\n\n    Displays all of the available gulp tasks.\n\n### Code Analysis\n\n- `gulp vet`\n\n    Performs static code analysis on all javascript files. Runs jshint and jscs.\n\n- `gulp vet --verbose`\n\n    Displays all files affected and extended information about the code analysis.\n\n- `gulp plato`\n\n    Performs code analysis using plato on all javascript files. Plato generates a report in the reports folder.\n\n### Testing\n\n- `gulp serve-specs`\n\n    Serves and browses to the spec runner html page and runs the unit tests in it. Injects any changes on the fly and re runs the tests. Quick and easy view of tests as an alternative to terminal via `gulp test`.\n\n- `gulp test`\n\n    Runs all unit tests using karma runner, mocha, chai and sinon with phantomjs. Depends on vet task, for code analysis.\n\n- `gulp test --startServers`\n\n    Runs all unit tests and midway tests. Cranks up a second node process to run a server for the midway tests to hit a web api.\n\n- `gulp autotest`\n\n    Runs a watch to run all unit tests.\n\n- `gulp autotest --startServers`\n\n    Runs a watch to run all unit tests and midway tests. Cranks up a second node process to run a server for the midway tests to hit a web api.\n\n### Cleaning Up\n\n- `gulp clean`\n\n    Remove all files from the build and temp folders\n\n- `gulp clean-images`\n\n    Remove all images from the build folder\n\n- `gulp clean-code`\n\n    Remove all javascript and html from the build folder\n\n- `gulp clean-fonts`\n\n    Remove all fonts from the build folder\n\n- `gulp clean-styles`\n\n    Remove all styles from the build folder\n\n### Fonts and Images\n\n- `gulp fonts`\n\n    Copy all fonts from source to the build folder\n\n- `gulp images`\n\n    Copy all images from source to the build folder\n\n### Styles\n\n- `gulp styles`\n\n    Compile less files to CSS, add vendor prefixes, and copy to the build folder\n\n### Bower Files\n\n- `gulp wiredep`\n\n    Looks up all bower components' main files and JavaScript source code, then adds them to the `index.html`.\n\n    The `.bowerrc` file also runs this as a postinstall task whenever `bower install` is run.\n\n### Angular HTML Templates\n\n- `gulp templatecache`\n\n    Create an Angular module that adds all HTML templates to Angular's $templateCache. This pre-fetches all HTML templates saving XHR calls for the HTML.\n\n- `gulp templatecache --verbose`\n\n    Displays all files affected by the task.\n\n### Serving Development Code\n\n- `gulp serve-dev`\n\n    Serves the development code and launches it in a browser. The goal of building for development is to do it as fast as possible, to keep development moving efficiently. This task serves all code from the source folders and compiles less to css in a temp folder.\n\n- `gulp serve-dev --nosync`\n\n    Serves the development code without launching the browser.\n\n- `gulp serve-dev --debug`\n\n    Launch debugger with node-inspector.\n\n- `gulp serve-dev --debug-brk`\n\n    Launch debugger and break on 1st line with node-inspector.\n\n### Building Production Code\n\n- `gulp html`\n\n    Optimize all javascript and styles, move to a build folder, and inject them into the new index.html\n\n- `gulp build`\n\n    Copies all fonts, copies images and runs `gulp html` to build the production code to the build folder.\n\n### Serving Production Code\n\n- `gulp serve-build`\n\n    Serve the optimized code from the build folder and launch it in a browser.\n\n- `gulp serve-build --nosync`\n\n    Serve the optimized code from the build folder and manually launch the browser.\n\n- `gulp serve-build --debug`\n\n    Launch debugger with node-inspector.\n\n- `gulp serve-build --debug-brk`\n\n    Launch debugger and break on 1st line with node-inspector.\n\n### Bumping Versions\n\n- `gulp bump`\n\n    Bump the minor version using semver.\n    --type=patch // default\n    --type=minor\n    --type=major\n    --type=pre\n    --ver=1.2.3 // specific version\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwalkingriver%2Fhottowel-electron","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwalkingriver%2Fhottowel-electron","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwalkingriver%2Fhottowel-electron/lists"}