├── .gitignore ├── jsconfig.json ├── src ├── public │ ├── favicon.ico │ ├── icons │ │ ├── icon.png │ │ ├── icon-72x72.png │ │ ├── icon-96x96.png │ │ ├── icon-128x128.png │ │ ├── icon-144x144.png │ │ ├── icon-152x152.png │ │ ├── icon-192x192.png │ │ ├── icon-384x384.png │ │ └── icon-512x512.png │ ├── images │ │ ├── hero.jpg │ │ └── placeholder.png │ └── manifest.json ├── scripts │ ├── global │ │ ├── api-endpoint.js │ │ └── config.js │ ├── utils │ │ ├── sw-register.js │ │ ├── drawer-initiator.js │ │ ├── websocket-initiator.js │ │ ├── post-review.js │ │ ├── dark-mode.js │ │ ├── notif-helper.js │ │ └── like-button-presenter.js │ ├── routes │ │ ├── routes.js │ │ └── url-parser.js │ ├── views │ │ ├── templates │ │ │ ├── spinner-html.js │ │ │ ├── button-html.js │ │ │ └── template-html.js │ │ ├── pages │ │ │ ├── favorite.js │ │ │ ├── home.js │ │ │ └── detail.js │ │ └── App.js │ ├── components │ │ ├── footer-ku.js │ │ ├── hero.js │ │ └── app-bar.js │ ├── data │ │ ├── restaurant-source.js │ │ └── restaurant-idb.js │ ├── index.js │ └── sw.js ├── styles │ ├── like.css │ ├── form.css │ ├── spinner.css │ ├── responsive.css │ └── main.css └── templates │ └── index.html ├── steps_file.js ├── webpack.dev.js ├── steps.d.ts ├── specs ├── favRestaurantIdbSpec.js ├── helpers │ └── testFactories.js ├── favRestaurantArraySpec.js ├── unlikeRestaurantSpec.js ├── contract │ └── favRestaurantContract.js └── likeRestaurantSpec.js ├── .eslintrc.json ├── codecept.conf.js ├── sharp.js ├── webpack.prod.js ├── webpack.common.js ├── package.json ├── karma.conf.js ├── e2e └── Favorite_Restaurant.spec.js └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | dist/ -------------------------------------------------------------------------------- /jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "allowJs": true 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /src/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/firmanjabar/nongkis/HEAD/src/public/favicon.ico -------------------------------------------------------------------------------- /src/public/icons/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/firmanjabar/nongkis/HEAD/src/public/icons/icon.png -------------------------------------------------------------------------------- /src/public/images/hero.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/firmanjabar/nongkis/HEAD/src/public/images/hero.jpg -------------------------------------------------------------------------------- /src/public/icons/icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/firmanjabar/nongkis/HEAD/src/public/icons/icon-72x72.png -------------------------------------------------------------------------------- /src/public/icons/icon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/firmanjabar/nongkis/HEAD/src/public/icons/icon-96x96.png -------------------------------------------------------------------------------- /src/public/icons/icon-128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/firmanjabar/nongkis/HEAD/src/public/icons/icon-128x128.png -------------------------------------------------------------------------------- /src/public/icons/icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/firmanjabar/nongkis/HEAD/src/public/icons/icon-144x144.png -------------------------------------------------------------------------------- /src/public/icons/icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/firmanjabar/nongkis/HEAD/src/public/icons/icon-152x152.png -------------------------------------------------------------------------------- /src/public/icons/icon-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/firmanjabar/nongkis/HEAD/src/public/icons/icon-192x192.png -------------------------------------------------------------------------------- /src/public/icons/icon-384x384.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/firmanjabar/nongkis/HEAD/src/public/icons/icon-384x384.png -------------------------------------------------------------------------------- /src/public/icons/icon-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/firmanjabar/nongkis/HEAD/src/public/icons/icon-512x512.png -------------------------------------------------------------------------------- /src/public/images/placeholder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/firmanjabar/nongkis/HEAD/src/public/images/placeholder.png -------------------------------------------------------------------------------- /src/scripts/global/api-endpoint.js: -------------------------------------------------------------------------------- 1 | import CONFIG from './config'; 2 | 3 | const API_ENDPOINT = { 4 | LIST: `${CONFIG.BASE_URL}list`, 5 | DETAIL: (id) => `${CONFIG.BASE_URL}detail/${id}`, 6 | POST_REVIEW: `${CONFIG.BASE_URL}review`, 7 | }; 8 | 9 | export default API_ENDPOINT; 10 | -------------------------------------------------------------------------------- /src/scripts/utils/sw-register.js: -------------------------------------------------------------------------------- 1 | import { Workbox } from 'workbox-window'; 2 | 3 | const swRegister = async () => { 4 | if ('serviceWorker' in navigator) { 5 | const workbox = new Workbox('../sw.js'); 6 | workbox.register(); 7 | } 8 | }; 9 | 10 | export default swRegister; 11 | -------------------------------------------------------------------------------- /steps_file.js: -------------------------------------------------------------------------------- 1 | // in this file you can append custom step methods to 'I' object 2 | 3 | module.exports = function() { 4 | return actor({ 5 | 6 | // Define custom steps here, use 'this' to access default methods of I. 7 | // It is recommended to place a general 'login' function here. 8 | 9 | }); 10 | } 11 | -------------------------------------------------------------------------------- /src/scripts/routes/routes.js: -------------------------------------------------------------------------------- 1 | import Home from '../views/pages/home'; 2 | import Favorite from '../views/pages/favorite'; 3 | import Detail from '../views/pages/detail'; 4 | 5 | const routes = { 6 | '/': Home, 7 | '/home': Home, 8 | '/favorite': Favorite, 9 | '/detail/:id': Detail, 10 | }; 11 | 12 | export default routes; 13 | -------------------------------------------------------------------------------- /src/scripts/views/templates/spinner-html.js: -------------------------------------------------------------------------------- 1 | const Spinner = () => ` 2 |
14 | Food is the ingredient that bind us together! And nothing brings people together like a 15 | Good Food! 16 |
17 | Let's Nongkrong! 18 |${name}
18 |${date}
19 |
44 | Title - City
45 | 49 |Description :
52 |Lorem ipsum dolor sit amet consectetur adipisicing elit. Porro sequi ullam ad mollitia cupiditate aut iure officia, voluptate, sapiente modi quisquam est quod quas recusandae quo saepe atque nisi blanditiis.
55 |Description: ${detail.description}
${review.name}
123 |${review.date}
124 |