├── .DS_Store ├── .github └── FUNDING.yml ├── .gitignore ├── quasar_app ├── .editorconfig ├── .gitignore ├── .postcssrc.js ├── README.md ├── babel.config.js ├── jsconfig.json ├── package-lock.json ├── package.json ├── public │ ├── favicon.ico │ ├── icons │ │ ├── favicon-128x128.png │ │ ├── favicon-16x16.png │ │ ├── favicon-32x32.png │ │ ├── favicon-96x96.png │ │ └── logo.png │ └── logo.png ├── quasar.conf.js ├── quasar.extensions.json └── src │ ├── App.vue │ ├── assets │ ├── demo_image.jpeg │ ├── gh_generator.png │ ├── github_preview.png │ ├── home.png │ ├── logo.png │ ├── markdown.js │ ├── md-loader-utils.js │ ├── md-loader.js │ ├── quasar-logo-vertical.svg │ └── readme_generator.png │ ├── boot │ ├── .gitkeep │ ├── axios.js │ └── i18n.js │ ├── components │ └── EssentialLink.vue │ ├── css │ ├── QMarkdown.sass │ └── app.css │ ├── data │ └── readme_generator_data.js │ ├── i18n │ ├── en-US │ │ └── index.js │ └── index.js │ ├── index.template.html │ ├── layouts │ └── MainLayout.vue │ ├── pages │ ├── Error404.vue │ ├── Index.vue │ ├── github-profile-generator.vue │ └── main.vue │ ├── quasar.d.ts │ ├── router │ ├── index.js │ └── routes.js │ └── store │ ├── index.js │ ├── module-example │ ├── actions.js │ ├── getters.js │ ├── index.js │ ├── mutations.js │ └── state.js │ └── store-flag.d.ts └── readme.md /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mayur091193/readme-pro/180ac3726e00ec5c211fc1830da68b7c9d7b6888/.DS_Store -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: [mayur091193] # 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/mayur091193','https://paypal.me/mayurpp'] # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 13 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | -------------------------------------------------------------------------------- /quasar_app/.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /quasar_app/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .thumbs.db 3 | node_modules 4 | 5 | # Quasar core related directories 6 | .quasar 7 | /dist 8 | 9 | # Cordova related directories and files 10 | /src-cordova/node_modules 11 | /src-cordova/platforms 12 | /src-cordova/plugins 13 | /src-cordova/www 14 | 15 | # Capacitor related directories and files 16 | /src-capacitor/www 17 | /src-capacitor/node_modules 18 | 19 | # BEX related directories and files 20 | /src-bex/www 21 | /src-bex/js/core 22 | 23 | # Log files 24 | npm-debug.log* 25 | yarn-debug.log* 26 | yarn-error.log* 27 | 28 | # Editor directories and files 29 | .idea 30 | *.suo 31 | *.ntvs* 32 | *.njsproj 33 | *.sln 34 | .vscode 35 | -------------------------------------------------------------------------------- /quasar_app/.postcssrc.js: -------------------------------------------------------------------------------- 1 | // https://github.com/michael-ciniawsky/postcss-load-config 2 | 3 | module.exports = { 4 | plugins: [ 5 | // to edit target browsers: use "browserslist" field in package.json 6 | require('tailwindcss'), 7 | require('autoprefixer') 8 | ], 9 | theme: { 10 | fontFamily: { 11 | 'body': ['Lato'] 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /quasar_app/README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 | Details 5 | 6 |

7 | 8 | # Readme Pro 9 | 10 | An easy way to generate readme/GitHub profile readme written in Vue.js/Quasar. GitHub Ptofile README Generator. 11 | 12 | ## Site: [https://readmepro.netlify.app/](https://readmepro.netlify.app/) 13 | 14 | ## Resources used 15 | * [Quasar Framework](https://quasar.dev/) 16 | * [Vue.js](https://vuejs.org/) 17 | * [Tailwind CSS](https://tailwindcss.com/) 18 | 19 | ## Installation 20 | 21 | * **Clone the repository** 22 | 23 | ``` 24 | git clone https://github.com/mayur091193/readme-pro.git 25 | ``` 26 | 27 | ## Install the dependencies 28 | ```bash 29 | cd readme-pro/quasar_app 30 | npm install 31 | ``` 32 | 33 | ### To run the app in development mode (hot-code reloading, error reporting, etc.) 34 | ```bash 35 | quasar dev 36 | ``` 37 | 38 | 39 | ### Build the application 40 | ```bash 41 | quasar build 42 | ``` 43 | 44 | Reach out to me at "mayur091193@gmail.com" for queries. 45 | 46 | ## Screens UI 47 | **Home** 48 |

49 | 50 | Login 52 | 53 |

54 | 55 | **Readme Generator** 56 |

57 | 58 | Home 60 | 61 |

62 | 63 | **GitHub Profile README generator** 64 |

65 | 66 | Details 68 | 69 |

70 | 71 | **GitHub Profile Preview** 72 |

73 | 74 | Category 76 | 77 |

78 | 79 | ## Future release: 80 | * Lots of beautiful github profile templates 81 | * Backend(planning to use [Python](https://www.python.org/)) 82 | 83 | ### Customize the configuration 84 | See [Configuring quasar.conf.js](https://quasar.dev/quasar-cli/quasar-conf-js). 85 | 86 | ## Support 87 | 88 | If this hepls you in any way, you can contribute to this project by supporting me: 89 | 90 | ### [💜 Support my open-source work on GitHub](https://github.com/sponsors/mayur091193) 91 | ### [💜 Buy me a Coffee](https://www.buymeacoffee.com/mayur091193) 92 | ### [💜 Support me](https://paypal.me/mayurpp) 93 | 94 | Please check out my sponsor page and Buy me a coffee. 95 | 96 | (Every small appreciation can make my day!) 97 | 98 | Thank you very much!! 99 | 100 | ## License 101 | 102 | [MIT](http://opensource.org/licenses/MIT) 103 | -------------------------------------------------------------------------------- /quasar_app/babel.config.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | module.exports = api => { 4 | return { 5 | presets: [ 6 | [ 7 | '@quasar/babel-preset-app', 8 | api.caller(caller => caller && caller.target === 'node') 9 | ? { targets: { node: 'current' } } 10 | : {} 11 | ] 12 | ] 13 | } 14 | } 15 | 16 | -------------------------------------------------------------------------------- /quasar_app/jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "baseUrl": ".", 4 | "paths": { 5 | "src/*": [ 6 | "src/*" 7 | ], 8 | "app/*": [ 9 | "*" 10 | ], 11 | "components/*": [ 12 | "src/components/*" 13 | ], 14 | "layouts/*": [ 15 | "src/layouts/*" 16 | ], 17 | "pages/*": [ 18 | "src/pages/*" 19 | ], 20 | "assets/*": [ 21 | "src/assets/*" 22 | ], 23 | "boot/*": [ 24 | "src/boot/*" 25 | ], 26 | "vue$": [ 27 | "node_modules/vue/dist/vue.runtime.esm-bundler.js" 28 | ] 29 | } 30 | }, 31 | "exclude": [ 32 | "dist", 33 | ".quasar", 34 | "node_modules" 35 | ] 36 | } 37 | -------------------------------------------------------------------------------- /quasar_app/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "quasar_app", 3 | "version": "0.0.1", 4 | "description": "A Quasar Framework app", 5 | "productName": "Quasar App", 6 | "author": "mayurpatel ", 7 | "private": true, 8 | "scripts": { 9 | "test": "echo \"No test specified\" && exit 0" 10 | }, 11 | "dependencies": { 12 | "@datatraccorporation/markdown-it-mermaid": "^0.5.0", 13 | "@quasar/extras": "^1.0.0", 14 | "@quasar/quasar-ui-qmarkdown": "^2.0.0-beta.7", 15 | "autoprefixer": "^9.8.8", 16 | "axios": "^0.21.1", 17 | "core-js": "^3.6.5", 18 | "markdown-it-abbr": "^1.0.4", 19 | "markdown-it-deflist": "^2.1.0", 20 | "markdown-it-emoji": "^2.0.2", 21 | "markdown-it-footnote": "^3.0.3", 22 | "markdown-it-ins": "^3.0.1", 23 | "markdown-it-mark": "^3.0.1", 24 | "markdown-it-sub": "^1.0.0", 25 | "markdown-it-sup": "^1.0.0", 26 | "markdown-it-task-lists": "^2.1.1", 27 | "monaco-editor-vue3": "^0.1.6", 28 | "postcss": "^8.0.0", 29 | "postcss-cli": "^8.1.0", 30 | "quasar": "^2.0.0", 31 | "tailwindcss": "npm:@tailwindcss/postcss7-compat@^2.0.2", 32 | "vue": "^3.0.0", 33 | "vue-i18n": "^9.0.0", 34 | "vue-router": "^4.0.0", 35 | "vuex": "^4.0.1" 36 | }, 37 | "devDependencies": { 38 | "@quasar/app": "^3.0.0" 39 | }, 40 | "browserslist": [ 41 | "last 10 Chrome versions", 42 | "last 10 Firefox versions", 43 | "last 4 Edge versions", 44 | "last 7 Safari versions", 45 | "last 8 Android versions", 46 | "last 8 ChromeAndroid versions", 47 | "last 8 FirefoxAndroid versions", 48 | "last 10 iOS versions", 49 | "last 5 Opera versions" 50 | ], 51 | "engines": { 52 | "node": ">= 12.22.1", 53 | "npm": ">= 6.13.4", 54 | "yarn": ">= 1.21.1" 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /quasar_app/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mayur091193/readme-pro/180ac3726e00ec5c211fc1830da68b7c9d7b6888/quasar_app/public/favicon.ico -------------------------------------------------------------------------------- /quasar_app/public/icons/favicon-128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mayur091193/readme-pro/180ac3726e00ec5c211fc1830da68b7c9d7b6888/quasar_app/public/icons/favicon-128x128.png -------------------------------------------------------------------------------- /quasar_app/public/icons/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mayur091193/readme-pro/180ac3726e00ec5c211fc1830da68b7c9d7b6888/quasar_app/public/icons/favicon-16x16.png -------------------------------------------------------------------------------- /quasar_app/public/icons/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mayur091193/readme-pro/180ac3726e00ec5c211fc1830da68b7c9d7b6888/quasar_app/public/icons/favicon-32x32.png -------------------------------------------------------------------------------- /quasar_app/public/icons/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mayur091193/readme-pro/180ac3726e00ec5c211fc1830da68b7c9d7b6888/quasar_app/public/icons/favicon-96x96.png -------------------------------------------------------------------------------- /quasar_app/public/icons/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mayur091193/readme-pro/180ac3726e00ec5c211fc1830da68b7c9d7b6888/quasar_app/public/icons/logo.png -------------------------------------------------------------------------------- /quasar_app/public/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mayur091193/readme-pro/180ac3726e00ec5c211fc1830da68b7c9d7b6888/quasar_app/public/logo.png -------------------------------------------------------------------------------- /quasar_app/quasar.conf.js: -------------------------------------------------------------------------------- 1 | /* 2 | * This file runs in a Node context (it's NOT transpiled by Babel), so use only 3 | * the ES6 features that are supported by your Node version. https://node.green/ 4 | */ 5 | 6 | // Configuration for your app 7 | // https://quasar.dev/quasar-cli/quasar-conf-js 8 | 9 | const { configure } = require('quasar/wrappers'); 10 | 11 | module.exports = configure(function (ctx) { 12 | return { 13 | // https://quasar.dev/quasar-cli/supporting-ts 14 | supportTS: false, 15 | 16 | // https://quasar.dev/quasar-cli/prefetch-feature 17 | // preFetch: true, 18 | 19 | // app boot file (/src/boot) 20 | // --> boot files are part of "main.js" 21 | // https://quasar.dev/quasar-cli/boot-files 22 | boot: [ 23 | 'i18n', 24 | 'axios', 25 | ], 26 | 27 | // https://quasar.dev/quasar-cli/quasar-conf-js#Property%3A-css 28 | css: [ 29 | 'app.css', 30 | 'QMarkdown.sass' 31 | ], 32 | 33 | // https://github.com/quasarframework/quasar/tree/dev/extras 34 | extras: [ 35 | // 'ionicons-v4', 36 | // 'mdi-v5', 37 | 'fontawesome-v5', 38 | // 'eva-icons', 39 | // 'themify', 40 | // 'line-awesome', 41 | // 'roboto-font-latin-ext', // this or either 'roboto-font', NEVER both! 42 | 43 | 'roboto-font', // optional, you are not bound to it 44 | 'material-icons', // optional, you are not bound to it 45 | ], 46 | 47 | // Full list of options: https://quasar.dev/quasar-cli/quasar-conf-js#Property%3A-build 48 | build: { 49 | vueRouterMode: 'hash', // available values: 'hash', 'history' 50 | 51 | // transpile: false, 52 | // publicPath: '/', 53 | 54 | // Add dependencies for transpiling with Babel (Array of string/regex) 55 | // (from node_modules, which are by default not transpiled). 56 | // Applies only if "transpile" is set to true. 57 | // transpileDependencies: [], 58 | 59 | // rtl: true, // https://quasar.dev/options/rtl-support 60 | // preloadChunks: true, 61 | // showProgress: false, 62 | // gzip: true, 63 | // analyze: true, 64 | 65 | // Options below are automatically set depending on the env, set them if you want to override 66 | // extractCSS: false, 67 | 68 | // https://quasar.dev/quasar-cli/handling-webpack 69 | // "chain" is a webpack-chain object https://github.com/neutrinojs/webpack-chain 70 | chainWebpack (chain) { 71 | const rule = chain.module.rule('md') 72 | .test(/\.md$/) 73 | .pre() 74 | 75 | rule.use('v-loader') 76 | .loader('vue-loader') 77 | .options({ 78 | productionMode: ctx.prod === true, 79 | compilerOptions: { 80 | preserveWhitespace: false 81 | }, 82 | transformAssetUrls: { 83 | video: 'src', 84 | source: 'src', 85 | img: 'src', 86 | image: 'xlink:href' 87 | } 88 | }) 89 | 90 | rule.use('md-loader') 91 | .loader(require.resolve('./src/assets/md-loader.js')) 92 | }, 93 | }, 94 | 95 | // Full list of options: https://quasar.dev/quasar-cli/quasar-conf-js#Property%3A-devServer 96 | devServer: { 97 | server: { 98 | type: 'http' 99 | }, 100 | port: 8080, 101 | open: true // opens browser window automatically 102 | }, 103 | 104 | // https://quasar.dev/quasar-cli/quasar-conf-js#Property%3A-framework 105 | framework: { 106 | config: {}, 107 | 108 | // iconSet: 'material-icons', // Quasar icon set 109 | // lang: 'en-US', // Quasar language pack 110 | 111 | // For special cases outside of where the auto-import strategy can have an impact 112 | // (like functional components as one of the examples), 113 | // you can manually specify Quasar components/directives to be available everywhere: 114 | // 115 | // components: [], 116 | // directives: [], 117 | 118 | // Quasar plugins 119 | plugins: [ 120 | 'Notify' 121 | ] 122 | }, 123 | 124 | // animations: 'all', // --- includes all animations 125 | // https://quasar.dev/options/animations 126 | animations: [], 127 | 128 | // https://quasar.dev/quasar-cli/developing-ssr/configuring-ssr 129 | ssr: { 130 | pwa: false, 131 | 132 | // manualStoreHydration: true, 133 | // manualPostHydrationTrigger: true, 134 | 135 | prodPort: 3000, // The default port that the production server should use 136 | // (gets superseded if process.env.PORT is specified at runtime) 137 | 138 | maxAge: 1000 * 60 * 60 * 24 * 30, 139 | // Tell browser when a file from the server should expire from cache (in ms) 140 | 141 | chainWebpackWebserver (/* chain */) { 142 | // 143 | }, 144 | 145 | middlewares: [ 146 | ctx.prod ? 'compression' : '', 147 | 'render' // keep this as last one 148 | ] 149 | }, 150 | 151 | // https://quasar.dev/quasar-cli/developing-pwa/configuring-pwa 152 | pwa: { 153 | workboxPluginMode: 'GenerateSW', // 'GenerateSW' or 'InjectManifest' 154 | workboxOptions: {}, // only for GenerateSW 155 | 156 | // for the custom service worker ONLY (/src-pwa/custom-service-worker.[js|ts]) 157 | // if using workbox in InjectManifest mode 158 | chainWebpackCustomSW (/* chain */) { 159 | // 160 | }, 161 | 162 | manifest: { 163 | name: `Quasar App`, 164 | short_name: `Quasar App`, 165 | description: `A Quasar Framework app`, 166 | display: 'standalone', 167 | orientation: 'portrait', 168 | background_color: '#ffffff', 169 | theme_color: '#027be3', 170 | icons: [ 171 | { 172 | src: 'icons/icon-128x128.png', 173 | sizes: '128x128', 174 | type: 'image/png' 175 | }, 176 | { 177 | src: 'icons/icon-192x192.png', 178 | sizes: '192x192', 179 | type: 'image/png' 180 | }, 181 | { 182 | src: 'icons/icon-256x256.png', 183 | sizes: '256x256', 184 | type: 'image/png' 185 | }, 186 | { 187 | src: 'icons/icon-384x384.png', 188 | sizes: '384x384', 189 | type: 'image/png' 190 | }, 191 | { 192 | src: 'icons/icon-512x512.png', 193 | sizes: '512x512', 194 | type: 'image/png' 195 | } 196 | ] 197 | } 198 | }, 199 | 200 | // Full list of options: https://quasar.dev/quasar-cli/developing-cordova-apps/configuring-cordova 201 | cordova: { 202 | // noIosLegacyBuildFlag: true, // uncomment only if you know what you are doing 203 | }, 204 | 205 | // Full list of options: https://quasar.dev/quasar-cli/developing-capacitor-apps/configuring-capacitor 206 | capacitor: { 207 | hideSplashscreen: true 208 | }, 209 | 210 | // Full list of options: https://quasar.dev/quasar-cli/developing-electron-apps/configuring-electron 211 | electron: { 212 | bundler: 'packager', // 'packager' or 'builder' 213 | 214 | packager: { 215 | // https://github.com/electron-userland/electron-packager/blob/master/docs/api.md#options 216 | 217 | // OS X / Mac App Store 218 | // appBundleId: '', 219 | // appCategoryType: '', 220 | // osxSign: '', 221 | // protocol: 'myapp://path', 222 | 223 | // Windows only 224 | // win32metadata: { ... } 225 | }, 226 | 227 | builder: { 228 | // https://www.electron.build/configuration/configuration 229 | 230 | appId: 'quasar_app' 231 | }, 232 | 233 | // "chain" is a webpack-chain object https://github.com/neutrinojs/webpack-chain 234 | chainWebpackMain (/* chain */) { 235 | // do something with the Electron main process Webpack cfg 236 | // extendWebpackMain also available besides this chainWebpackMain 237 | }, 238 | 239 | // "chain" is a webpack-chain object https://github.com/neutrinojs/webpack-chain 240 | chainWebpackPreload (/* chain */) { 241 | // do something with the Electron main process Webpack cfg 242 | // extendWebpackPreload also available besides this chainWebpackPreload 243 | }, 244 | } 245 | } 246 | }); 247 | -------------------------------------------------------------------------------- /quasar_app/quasar.extensions.json: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /quasar_app/src/App.vue: -------------------------------------------------------------------------------- 1 | 4 | 11 | -------------------------------------------------------------------------------- /quasar_app/src/assets/demo_image.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mayur091193/readme-pro/180ac3726e00ec5c211fc1830da68b7c9d7b6888/quasar_app/src/assets/demo_image.jpeg -------------------------------------------------------------------------------- /quasar_app/src/assets/gh_generator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mayur091193/readme-pro/180ac3726e00ec5c211fc1830da68b7c9d7b6888/quasar_app/src/assets/gh_generator.png -------------------------------------------------------------------------------- /quasar_app/src/assets/github_preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mayur091193/readme-pro/180ac3726e00ec5c211fc1830da68b7c9d7b6888/quasar_app/src/assets/github_preview.png -------------------------------------------------------------------------------- /quasar_app/src/assets/home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mayur091193/readme-pro/180ac3726e00ec5c211fc1830da68b7c9d7b6888/quasar_app/src/assets/home.png -------------------------------------------------------------------------------- /quasar_app/src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mayur091193/readme-pro/180ac3726e00ec5c211fc1830da68b7c9d7b6888/quasar_app/src/assets/logo.png -------------------------------------------------------------------------------- /quasar_app/src/assets/markdown.js: -------------------------------------------------------------------------------- 1 | const markdownIt = require('markdown-it') 2 | const Prism = require('prismjs') 3 | const container = require('markdown-it-container') 4 | const emoji = require('markdown-it-emoji') 5 | const subscript = require('markdown-it-sub') 6 | const superscript = require('markdown-it-sup') 7 | const footnote = require('markdown-it-footnote') 8 | const deflist = require('markdown-it-deflist') 9 | const abbreviation = require('markdown-it-abbr') 10 | const insert = require('markdown-it-ins') 11 | const mark = require('markdown-it-mark') 12 | const taskLists = require('markdown-it-task-lists') 13 | const imsize = require('markdown-it-imsize') 14 | 15 | // const fm = require('front-matter') 16 | 17 | // function removeFrontMatter (source) { 18 | // return source.replace(/^---(.|\n)*?---\n/, '') 19 | // } 20 | 21 | // function replaceFrontMatter (source, content) { 22 | // return String(source).replace('frontMatter: {}', `frontMatter: ${JSON.stringify(content)}`) 23 | // } 24 | 25 | // function replaceToc (source, tocData) { 26 | // return String(source).replace('tocData: []', `tocData: ${JSON.stringify(tocData)}`) 27 | // } 28 | 29 | function slugify (str) { 30 | return encodeURIComponent(String(str).trim().replace(/\s+/g, '-')) 31 | } 32 | 33 | function highlight (str, lang) { 34 | if (lang === '') { 35 | lang = 'js' 36 | } 37 | else if (lang === 'vue' || lang === 'html') { 38 | lang = 'html' 39 | } 40 | 41 | if (Prism.languages[ lang ] !== undefined) { 42 | const code = Prism.highlight(str, Prism.languages[ lang ], lang) 43 | 44 | return '
'
 45 |       + `${ code }
\n` 46 | } 47 | 48 | return '' 49 | } 50 | 51 | function extendToken (md) { 52 | const defaultRender = md.renderer.rules.code_inline 53 | 54 | md.renderer.rules.code_inline = (tokens, idx, options, env, self) => { 55 | const token = tokens[ idx ] 56 | 57 | token.attrSet('class', 'q-markdown--token') 58 | return defaultRender(tokens, idx, options, env, self) 59 | } 60 | } 61 | 62 | function extendTable (md) { 63 | md.renderer.rules.table_open = (tokens, idx, options, env, self) => { 64 | const token = tokens[ idx ] 65 | 66 | token.attrSet('class', 'q-markdown--table') 67 | 68 | return self.renderToken(tokens, idx, options) 69 | } 70 | } 71 | 72 | function extendLink (md) { 73 | md.renderer.rules.link_open = (tokens, idx, options, env, self) => { 74 | // const token = tokens[ idx ] 75 | 76 | // const hrefIndex = token.attrIndex('href') 77 | 78 | // if (token.attrs[ hrefIndex ][ 1 ][ 0 ] === '#') { 79 | // if (location) { 80 | // token.attrs[ hrefIndex ][ 1 ] = location.pathname + token.attrs[ hrefIndex ][ 1 ] 81 | // } 82 | // } 83 | 84 | // if (token.attrs[ hrefIndex ][ 1 ] === '') { 85 | // token.attrSet('class', 'q-markdown--link q-markdown--link-local') 86 | // if (tokens[ idx + 1 ] && tokens[ idx + 1 ].type === 'text' && tokens[ idx + 1 ].content) { 87 | // token.attrSet('id', slugify(tokens[ idx + 1 ].content)) 88 | // } 89 | // } 90 | // else if (token.attrs[ hrefIndex ][ 1 ][ 0 ] === '/' 91 | // || token.attrs[ hrefIndex ][ 1 ].startsWith('..')) { 92 | // token.attrSet('class', 'q-markdown--link q-markdown--link-local') 93 | // } 94 | // else { 95 | // token.attrSet('class', 'q-markdown--link q-markdown--link-external') 96 | // token.attrSet('target', '_blank') 97 | // token.attrSet('rel', 'noopener') 98 | // } 99 | 100 | // return self.renderToken(tokens, idx, options) 101 | 102 | const token = tokens[ idx ] 103 | 104 | const hrefIndex = token.attrIndex('href') 105 | 106 | if (hrefIndex >= 0) { 107 | const link = token.attrs[ hrefIndex ] 108 | 109 | link[ 0 ] = 'to' 110 | link[ 1 ] = decodeURI(link[ 1 ]) 111 | 112 | token.tag = 'markdown-link' 113 | } 114 | 115 | return self.renderToken(tokens, idx, options) 116 | } 117 | 118 | md.renderer.rules.link_close = (tokens, idx, options, env, self) => { 119 | const token = tokens[ idx ] 120 | 121 | token.tag = 'markdown-link' 122 | return self.renderToken(tokens, idx, options) 123 | } 124 | } 125 | 126 | function extendImage (md) { 127 | md.renderer.rules.image = (tokens, idx, options, env, self) => { 128 | const token = tokens[ idx ] 129 | 130 | token.attrSet('class', 'q-markdown--image') 131 | return self.renderToken(tokens, idx, options) 132 | } 133 | } 134 | 135 | function extendHeading (md, tocData = [], toc = false, tocStart = 2, tocEnd = 3) { 136 | md.renderer.rules.heading_open = (tokens, idx, options, env, self) => { 137 | const token = tokens[ idx ] 138 | 139 | const label = tokens[ idx + 1 ] 140 | .children 141 | .reduce((acc, t) => acc + t.content, '') 142 | 143 | let classes = `q-markdown--heading q-markdown--heading-${ token.tag }` 144 | 145 | if (token.markup === '=') { 146 | classes += ' q-markdown--title-heavy' 147 | } 148 | else if (token.markup === '-') { 149 | classes += ' q-markdown--title-light' 150 | } 151 | 152 | const id = slugify(label) 153 | token.attrSet('id', id) 154 | token.attrSet('name', id) 155 | token.attrSet('class', classes) 156 | token.attrSet('@click', `copyHeading(\`${ id }\`)`) 157 | 158 | if (toc) { 159 | const tokenNumber = parseInt(token.tag[ 1 ]) 160 | 161 | if (tocStart && tocEnd && tocStart < tocEnd && tokenNumber >= tocStart && tokenNumber <= tocEnd) { 162 | tocData.push({ id: id, label: label, level: tokenNumber, children: [] }) 163 | // console.log(tocData) 164 | } 165 | } 166 | 167 | return self.renderToken(tokens, idx, options) 168 | } 169 | } 170 | 171 | function createContainer (className, defaultTitle) { 172 | return [ 173 | container, 174 | className, 175 | { 176 | render (tokens, idx) { 177 | const token = tokens[ idx ] 178 | const info = token.info.trim().slice(className.length).trim() 179 | if (token.nesting === 1) { 180 | return `

${ info || defaultTitle }

\n` 181 | } 182 | else { 183 | return '
\n' 184 | } 185 | } 186 | } 187 | ] 188 | } 189 | 190 | function extendContainers (md) { 191 | md.use(...createContainer('info', 'INFO')) 192 | md.use(...createContainer('tip', 'TIP')) 193 | md.use(...createContainer('warning', 'WARNING')) 194 | md.use(...createContainer('danger', 'IMPORTANT')) 195 | md.use(...createContainer('', '')) 196 | 197 | // explicitly escape Vue syntax 198 | md.use(container, 'v-pre', { 199 | render: (tokens, idx) => (tokens[ idx ].nesting === 1 200 | ? '
\n' 201 | : '
\n') 202 | }) 203 | } 204 | 205 | function extendBlockQuote (md) { 206 | md.renderer.rules.blockquote_open = (tokens, idx, options, env, self) => { 207 | const token = tokens[ idx ] 208 | 209 | token.attrSet('class', 'q-markdown--note') 210 | return self.renderToken(tokens, idx, options) 211 | } 212 | } 213 | 214 | // function extendFenceLineNumbers (md) { 215 | // const fence = md.renderer.rules.fence 216 | // md.renderer.rules.fence = (...args) => { 217 | // const rawCode = fence(...args) 218 | // const code = rawCode.slice( 219 | // rawCode.indexOf('') + 6, 220 | // rawCode.indexOf('') 221 | // ) 222 | 223 | // const lines = code.trim().split('\n') 224 | // if (lines.length < 3) { 225 | // return rawCode 226 | // } 227 | 228 | // const lineNumbersCode = [...Array(lines.length)] 229 | // .map((line, index) => `${index + 1}
`).join('') 230 | 231 | // const lineNumbersWrapperCode = 232 | // `
${lineNumbersCode}
${rawCode}
` 233 | 234 | // const finalCode = 235 | // `
${lineNumbersWrapperCode}
` 236 | 237 | // return finalCode 238 | // } 239 | // } 240 | 241 | const opts = { 242 | html: true, 243 | linkify: true, 244 | typographer: false, 245 | breaks: true, 246 | highlight 247 | } 248 | 249 | const md = markdownIt(opts) 250 | md.use(subscript) 251 | md.use(superscript) 252 | md.use(footnote) 253 | md.use(deflist) 254 | md.use(abbreviation) 255 | md.use(insert) 256 | md.use(mark) 257 | md.use(emoji) 258 | md.use(imsize) 259 | md.use(taskLists, { enabled: true, label: true, labelAfter: true }) 260 | 261 | function render (source) { 262 | const tocData = [] 263 | extendHeading(md, tocData, true) 264 | extendBlockQuote(md) 265 | extendImage(md) 266 | extendLink(md) 267 | extendTable(md) 268 | extendToken(md) 269 | extendContainers(md) 270 | // bug: this is causing numbers to show up twice 271 | // extendFenceLineNumbers(md) 272 | 273 | // const content = fm(source) 274 | // source = removeFrontMatter(source) 275 | const rendered = md.render(source) 276 | // rendered = replaceFrontMatter(rendered, content.attributes) 277 | // rendered = replaceToc(rendered, tocData) 278 | 279 | return { rendered, tocData } 280 | } 281 | 282 | module.exports = { 283 | render 284 | } 285 | -------------------------------------------------------------------------------- /quasar_app/src/assets/md-loader-utils.js: -------------------------------------------------------------------------------- 1 | const 2 | matter = require('gray-matter'), 3 | toml = require('toml') 4 | 5 | function getComponentsImport (comp) { 6 | return comp.map(c => { 7 | const parts = c.split('/') 8 | return `import ${ parts[ parts.length - 1 ] } from 'components/page-parts/${ c }.vue'\n` 9 | }).join('') 10 | } 11 | 12 | function getComponentsDeclaration (comp) { 13 | const list = comp.map(c => { 14 | const parts = c.split('/') 15 | return parts[ parts.length - 1 ] 16 | }).join(',') 17 | 18 | return `components: { ${ list } },` 19 | } 20 | 21 | module.exports.getVueComponent = function (rendered, data, toc) { 22 | return ` 23 | 26 | ` 46 | } 47 | 48 | module.exports.parseFrontMatter = function (content) { 49 | return matter(content, { 50 | excerpt_separator: '', 51 | engines: { 52 | toml: toml.parse.bind(toml), 53 | excerpt: false 54 | } 55 | }) 56 | } 57 | -------------------------------------------------------------------------------- /quasar_app/src/assets/md-loader.js: -------------------------------------------------------------------------------- 1 | const 2 | LRU = require('lru-cache'), 3 | hash = require('hash-sum') 4 | 5 | const 6 | md = require('./markdown.js'), 7 | { convertToRelated, flatMenu } = require('./flat-menu') 8 | 9 | const { 10 | getVueComponent, 11 | parseFrontMatter 12 | } = require('./md-loader-utils') 13 | 14 | const cache = new LRU({ max: 1000 }) 15 | 16 | module.exports = function (source) { 17 | const key = hash(source) 18 | const hit = cache.get(key) 19 | 20 | if (hit) { 21 | return hit 22 | } 23 | 24 | const { data, content } = parseFrontMatter(source) 25 | 26 | data.title = data.title || 'Generic Page' 27 | 28 | if (data.related !== void 0) { 29 | data.related = data.related.map(entry => convertToRelated(entry)) 30 | } 31 | 32 | // if (flatMenu[ this.resourcePath ]) { 33 | // const { prev, next } = flatMenu[ this.resourcePath ] 34 | // 35 | // if (prev !== void 0 || next !== void 0) { 36 | // data.nav = [] 37 | // } 38 | // 39 | // if (prev !== void 0) { 40 | // data.nav.push({ ...prev, dir: 'left' }) 41 | // } 42 | // if (next !== void 0) { 43 | // data.nav.push({ ...next, dir: 'right' }) 44 | // } 45 | // } 46 | 47 | // console.log('data', data) 48 | 49 | // md.$data = { 50 | // toc: [] 51 | // } 52 | 53 | const { rendered, tocData } = md.render(content) 54 | const toc = tocData 55 | // const toc = data.toc !== false 56 | // ? md.$data.toc 57 | // : [] 58 | 59 | // md.$data = {} 60 | 61 | const res = getVueComponent( 62 | rendered, 63 | data, 64 | JSON.stringify(toc) 65 | ) 66 | 67 | cache.set(key, res) 68 | 69 | return res 70 | } 71 | -------------------------------------------------------------------------------- /quasar_app/src/assets/quasar-logo-vertical.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 8 | 10 | 12 | 14 | 15 | -------------------------------------------------------------------------------- /quasar_app/src/assets/readme_generator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mayur091193/readme-pro/180ac3726e00ec5c211fc1830da68b7c9d7b6888/quasar_app/src/assets/readme_generator.png -------------------------------------------------------------------------------- /quasar_app/src/boot/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mayur091193/readme-pro/180ac3726e00ec5c211fc1830da68b7c9d7b6888/quasar_app/src/boot/.gitkeep -------------------------------------------------------------------------------- /quasar_app/src/boot/axios.js: -------------------------------------------------------------------------------- 1 | import { boot } from 'quasar/wrappers' 2 | import axios from 'axios' 3 | 4 | // Be careful when using SSR for cross-request state pollution 5 | // due to creating a Singleton instance here; 6 | // If any client changes this (global) instance, it might be a 7 | // good idea to move this instance creation inside of the 8 | // "export default () => {}" function below (which runs individually 9 | // for each client) 10 | const api = axios.create({ baseURL: 'https://api.example.com' }) 11 | 12 | export default boot(({ app }) => { 13 | // for use inside Vue files (Options API) through this.$axios and this.$api 14 | 15 | app.config.globalProperties.$axios = axios 16 | // ^ ^ ^ this will allow you to use this.$axios (for Vue Options API form) 17 | // so you won't necessarily have to import axios in each vue file 18 | 19 | app.config.globalProperties.$api = api 20 | // ^ ^ ^ this will allow you to use this.$api (for Vue Options API form) 21 | // so you can easily perform requests against your app's API 22 | }) 23 | 24 | export { api } 25 | -------------------------------------------------------------------------------- /quasar_app/src/boot/i18n.js: -------------------------------------------------------------------------------- 1 | import { boot } from 'quasar/wrappers' 2 | import { createI18n } from 'vue-i18n' 3 | import messages from 'src/i18n' 4 | 5 | export default boot(({ app }) => { 6 | const i18n = createI18n({ 7 | locale: 'en-US', 8 | messages 9 | }) 10 | 11 | // Set i18n instance on app 12 | app.use(i18n) 13 | }) 14 | -------------------------------------------------------------------------------- /quasar_app/src/components/EssentialLink.vue: -------------------------------------------------------------------------------- 1 | 23 | 24 | 52 | -------------------------------------------------------------------------------- /quasar_app/src/css/QMarkdown.sass: -------------------------------------------------------------------------------- 1 | 2 | .q-markdown 3 | position: relative 4 | 5 | code, pre 6 | font-family: Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace 7 | 8 | pre 9 | border-radius: $generic-border-radius 10 | padding: 5px 11 | margin: 0 12 | background-size: 1.5em 1.5em 13 | background-origin: content-box 14 | background-attachment: local 15 | max-height: inherit 16 | height: inherit 17 | display: block 18 | overflow: auto 19 | position: relative 20 | font-size: 12px 21 | background: $blue-grey-1 22 | color: $grey-10 23 | text-align: left 24 | white-space: pre 25 | word-spacing: normal 26 | word-break: normal 27 | word-wrap: normal 28 | line-height: 1.5em 29 | tab-size: 4 30 | hyphens: none 31 | 32 | pre code 33 | border-radius: 0 34 | width: max-content 35 | 36 | &--heading 37 | cursor: pointer 38 | 39 | &:after 40 | content: ' #' 41 | opacity: 0 42 | transition: opacity .2s 43 | 44 | &:hover:after 45 | opacity: 1 46 | 47 | &-h1 48 | font-size: 2rem 49 | line-height: 2rem 50 | padding: 1rem 0 51 | font-weight: 500 52 | margin: 0 0 1rem 53 | 54 | &-h2 55 | font-size: 1.5rem 56 | line-height: 1.5rem 57 | padding: 0.5rem 0 58 | font-weight: 500 59 | margin: 1rem 0 1rem 60 | 61 | &-h3 62 | font-size: 1.1rem 63 | line-height: 1.1rem 64 | padding: 0.45rem 0 65 | margin: 1rem 0 1rem 66 | 67 | &-h4 68 | font-size: 1rem 69 | line-height: 1rem 70 | padding: 0.25rem 0 71 | margin: 1rem 0 72 | 73 | &-h5 74 | font-size: 0.9rem 75 | margin: 1rem 0 76 | 77 | &-h6 78 | font-size: 0.8rem 79 | margin: 1rem 0 80 | 81 | .q-markdown--link 82 | border-bottom: inherit 83 | color: inherit 84 | 85 | &--anchor-link 86 | cursor: pointer 87 | 88 | &:after 89 | content: ' #' 90 | opacity: 0 91 | transition: opacity .2s 92 | 93 | &:hover:after 94 | opacity: 1 95 | 96 | &--title-heavy 97 | border-bottom: 3px solid #ccc 98 | 99 | &--title-light 100 | border-bottom: 1px solid #ccc 101 | 102 | &--image 103 | max-width: 100% 104 | height: auto 105 | 106 | &--link 107 | font-weight: 500 108 | text-decoration: none 109 | outline: 0 110 | border-bottom: 1px dotted currentColor 111 | text-align: center 112 | transition: opacity .2s 113 | // white-space: nowrap // prevents long headlines from wrapping properly 114 | 115 | &:hover 116 | // color: yellow 117 | 118 | &-local 119 | font-family: inherit 120 | 121 | &-external 122 | font-family: inherit 123 | &:after 124 | content: '\e895' // hash 125 | font-family: Material Icons 126 | font-weight: normal 127 | font-style: normal 128 | display: inline-block 129 | line-height: 1 130 | text-transform: none 131 | letter-spacing: normal 132 | word-wrap: normal 133 | white-space: nowrap 134 | direction: ltr 135 | text-rendering: optimizeLegibility 136 | -webkit-font-smoothing: antialiased 137 | -moz-osx-font-smoothing: grayscale 138 | font-feature-settings: "liga" 139 | margin: 0 0 0 3px 140 | padding: 0 141 | 142 | &--token 143 | white-space: nowrap 144 | background: $grey-1 145 | color: $grey-10 146 | border: $grey-8 solid 1px 147 | padding: 1px 2px 148 | font-family: inherit 149 | border-radius: $generic-border-radius 150 | 151 | &--note 152 | margin: 14px 0 153 | padding: 10px 154 | font-size: 1em 155 | letter-spacing: .5px 156 | background: $blue-grey-1 157 | color: $grey-10 158 | font-weight: 400 159 | 160 | > p:last-child, .q-markdown--note:last-child 161 | margin-bottom: 0 162 | 163 | .q-markdown--link 164 | // color: $grey-2 165 | 166 | &-- 167 | border-left: 10px solid lighten($grey-8, 30%) 168 | border-radius: 8px 0 0 8px 169 | .q-markdown--link 170 | color: lighten($grey-8, 10%) 171 | 172 | &--info 173 | border-left: 10px solid lighten($blue-8, 30%) 174 | border-radius: 8px 0 0 8px 175 | color: $grey-9 176 | background: $blue-2 177 | .q-markdown--link 178 | color: lighten($blue-8, 10%) 179 | .q-markdown--note-title 180 | color: lighten($blue-8, 10%) 181 | 182 | &--tip 183 | border-left: 10px solid lighten($green-8, 30%) 184 | border-radius: 8px 0 0 8px 185 | color: $grey-9 186 | background: $green-2 187 | .q-markdown--link 188 | color: lighten($green-8, 10%) 189 | .q-markdown--note-title 190 | color: lighten($green-8, 10%) 191 | 192 | &--warning 193 | border-left: 10px solid lighten($orange-10, 30%) 194 | border-radius: 8px 0 0 8px 195 | color: $grey-9 196 | background: $orange-2 197 | .q-markdown--link 198 | color: lighten($orange-10, 10%) 199 | .q-markdown--note-title 200 | color: lighten($orange-10, 10%) 201 | 202 | &--danger 203 | border-left: 10px solid lighten($negative, 30%) 204 | border-radius: 8px 0 0 8px 205 | color: $grey-9 206 | background: $red-2 207 | .q-markdown--link 208 | color: lighten($red-8, 10%) 209 | .q-markdown--note-title 210 | color: lighten($red-8, 10%) 211 | 212 | &-title 213 | font-weight: 800 214 | margin-left: -4px 215 | margin-right: -4px 216 | padding: 0 4px 217 | margin-bottom: 4px 218 | 219 | &--table 220 | width: fit-content 221 | margin-bottom: 16px 222 | border-collapse: collapse 223 | max-width: 100% 224 | border-width: 1px 225 | border-style: solid 226 | border-color: $grey 227 | 228 | &--line-numbers-wrapper 229 | display: flex 230 | justify-content: flex-start 231 | font-size: 12px 232 | margin: 0 0 1.0em 0 233 | background: $blue-grey-1 234 | color: $grey-10 235 | font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace 236 | border-radius: $generic-border-radius 237 | 238 | &--line-numbers 239 | padding: 5px 240 | text-align: right 241 | 242 | &--line-number 243 | color: $grey-6 244 | margin: 0 245 | position: relative 246 | text-align: left 247 | white-space: pre 248 | word-spacing: normal 249 | word-break: normal 250 | word-wrap: normal 251 | line-height: 1.5 252 | tab-size: 4 253 | hyphens: none 254 | 255 | &--code-wrapper 256 | width: 100% 257 | min-width: 0 258 | 259 | &--code, 260 | &--code__inner 261 | margin: 0 262 | position: relative 263 | text-align: left 264 | white-space: pre 265 | word-spacing: normal 266 | word-break: normal 267 | word-wrap: normal 268 | line-height: 1.5 269 | tab-size: 4 270 | hyphens: none 271 | border-radius: $generic-border-radius 272 | background: $blue-grey-1 273 | color: $grey-10 274 | 275 | 276 | &--code 277 | overflow: visible 278 | padding: 0 279 | 280 | &__inner 281 | max-height: inherit 282 | height: inherit 283 | display: block 284 | overflow: auto 285 | 286 | &--table 287 | border-color: $grey-4 288 | background: $grey-1 289 | 290 | &--table thead 291 | background: $grey-4 292 | 293 | &--table thead tr th 294 | padding: 8px 295 | border-width: 1px 296 | border-style: solid 297 | background: $grey-2 298 | 299 | &--table tbody 300 | background: $grey-1 301 | 302 | &--table tbody td, 303 | &--table tbody th 304 | padding: 8px 305 | border-width: 1px 306 | border-style: solid 307 | 308 | &--table tbody tr:nth-child(odd) 309 | background: $grey-4 310 | 311 | // .q-markdown--page > div, .q-markdown--page > pre 312 | // margin-bottom: 22px 313 | 314 | blockquote.q-markdown--link 315 | background: transparent 316 | // color: $teal-6 317 | 318 | &:hover 319 | // color: yellow 320 | 321 | blockquote.q-markdown--note 322 | border-width: 1px 8px 1px 8px 323 | border-radius: 8px 324 | border-style: solid 325 | border-color: $grey-6 $teal-6 326 | 327 | .q-markdown__copy 328 | position: absolute 329 | top: 15px 330 | right: 15px 331 | 332 | .body--dark 333 | .q-markdown 334 | color: $grey-2 335 | 336 | code 337 | background: $grey-9 338 | color: $grey-2 339 | 340 | .q-markdown--link 341 | // color: $teal-6 342 | 343 | &:hover 344 | // color: yellow 345 | 346 | blockquote.q-markdown--note 347 | border-color: $grey-6 $grey-6 348 | background: $dark 349 | color: $grey-2 350 | 351 | pre, pre code 352 | background: $dark 353 | 354 | .q-markdown--line-numbers-wrapper 355 | background: $dark 356 | color: $grey-2 357 | 358 | .q-markdown--token 359 | background: $grey-6 360 | color: $grey-10 361 | border: $grey-4 solid 1px 362 | 363 | .q-markdown--code 364 | background: $dark 365 | color: $grey-10 366 | 367 | .q-markdown--note 368 | background: $grey-10 369 | color: white 370 | border-top: 1px solid $grey-9 371 | border-bottom: 1px solid $grey-9 372 | 373 | .q-markdown--note-- 374 | border-left: 10px solid $grey-6 375 | 376 | .q-markdown--note--info 377 | border-left: 10px solid $light-blue-10 378 | 379 | .q-markdown--note--tip 380 | border-left: 10px solid $light-green-10 381 | 382 | .q-markdown--note--warning 383 | border-left: 10px solid $orange-10 384 | 385 | .q-markdown--note--danger 386 | border-left: 10px solid $red-10 387 | 388 | .q-markdown--table thead tr th, 389 | .q-markdown--table tbody 390 | background-color: $dark 391 | 392 | .q-markdown--table tbody tr:nth-child(2n+1) 393 | background-color: $grey-9 394 | -------------------------------------------------------------------------------- /quasar_app/src/css/app.css: -------------------------------------------------------------------------------- 1 | /* app global css */ 2 | @tailwind base; 3 | @tailwind components; 4 | @tailwind utilities; 5 | 6 | body { 7 | font-family: "Lato"; 8 | } 9 | -------------------------------------------------------------------------------- /quasar_app/src/data/readme_generator_data.js: -------------------------------------------------------------------------------- 1 | export default { 2 | "data": [ 3 | { 4 | "type": "GitHub Profile", 5 | "children": [ 6 | { 7 | label:"Introduction", 8 | value:` 9 | ### Hi there 👋, Mayur here...Thanks for visiting my Profile 10 | ` 11 | }, 12 | { 13 | label:"About Me - Fancy", 14 | value:` 15 | - 🔭 I’m currently working on open-source projects (Quasar framework and Vue.js, Angular 12, Python 3.X) 16 | - 🌱 Always learning new Technologies 17 | - 🏗 I’m developing free quasar app extensions, chrome extensions, templates and components 18 | - 💬 Ask me about Quasar framework and Vue.js! And many more technologies like Python-flask framework, JavaScript, jQuery, AngularJS, Angular ... 19 | - 📫 How to reach me: mayur091193@gmail.com 20 | - 💖 Sponsor me to support my open source work. https://github.com/sponsors/mayur091193 21 | - 🌴 Loves nature travel 22 | - 🖼️ Loves to help developers 23 | - 🔗 Owner of q-google-map: https://q-google-map.netlify.app/ 24 | - 🙏 Please Support: https://www.buymeacoffee.com/mayur091193 25 | ` 26 | }, 27 | { 28 | label:"About Me - Normal", 29 | value:` 30 | ## 🚀 About Me 31 | I'm a full stack developer working on open source projects... 32 | ` 33 | }, 34 | { 35 | label:"Skills", 36 | value:` 37 | ## 🛠 Skills 38 | Vue.js, Quasar Framework, Python... 39 | ` 40 | }, 41 | { 42 | label:"Github Profile Trophy", 43 | value:` 44 |
45 |

🏆 Github Profile Trophy

46 | 47 |
48 | ` 49 | }, 50 | { 51 | label:"GitHub Usage stats", 52 | value:` 53 |
54 |

👨🏻‍💻 GitHub Usage stats

55 | 56 | 57 |
58 | ` 59 | }, 60 | { 61 | label:"Full Profile Template", 62 | value: `

63 | 64 | Twitter 65 |   66 | 67 | Reddit 68 |   69 | 70 | Stackoverflow 71 |   72 | 73 | dev.to 74 | 75 |

76 | 77 | ### Hi there 👋, Mayur here...Thanks for visiting my Profile 78 | 79 | 80 | - 🔭 I’m currently working on open-source projects (Quasar framework and Vue.js, Angular 12, Python 3.X) 81 | - 🌱 Always learning new Technologies 82 | - 🏗 I’m developing free quasar app extensions, chrome extensions, templates and components 83 | - 💬 Ask me about Quasar framework and Vue.js! And many more technologies like Python-flask framework, JavaScript, jQuery, AngularJS, Angular ... 84 | - 📫 How to reach me: mayur091193@gmail.com 85 | - 💖 Sponsor me to support my open source work. https://github.com/sponsors/mayur091193 86 | - 🌴 Loves nature travel 87 | - 🖼️ Loves to help developers 88 | - 🔗 Owner of q-google-map: https://q-google-map.netlify.app/ 89 | 90 | 91 | --- 92 | 93 |
94 |

🏆 Github Profile Trophy

95 | 96 |
97 | 98 | --- 99 | 100 |
101 |

👨🏻‍💻 GitHub Usage stats

102 | 103 | 104 |
105 | 106 | --- 107 | ` 108 | }, 109 | ] 110 | }, 111 | { 112 | "type": "Documentation", 113 | "children": [ 114 | { 115 | label:'Resources used', 116 | value:` 117 | ## Resources used 118 | * [Quasar Framework](https://quasar.dev/) 119 | * [Vue.js](https://vuejs.org/) 120 | ` 121 | }, 122 | { 123 | label:'What it delivers', 124 | value:` 125 | ## What it delivers 126 | * eCommerce UI template written in Vue.js/Quasar 127 | ` 128 | }, 129 | { 130 | label:'Features', 131 | value: ` 132 | ## Features 133 | - Light/dark mode toggle 134 | - Live previews 135 | - Fullscreen mode 136 | - Cross platform 137 | ` 138 | }, 139 | { 140 | label:'Installation', 141 | value:` 142 | ## Installation 143 | 144 | * **Clone the repository** 145 | 146 | \`\`\` 147 | git clone https://github.com/mayur091193/quasar-shopping.git 148 | \`\`\` 149 | 150 | ## Install the dependencies 151 | \`\`\`bash 152 | cd quasar-shopping 153 | npm install 154 | \`\`\` 155 | 156 | ### To run the app in development mode (hot-code reloading, error reporting, etc.) 157 | \`\`\`bash 158 | quasar dev 159 | \`\`\` 160 | 161 | 162 | ### Build the application 163 | \`\`\`bash 164 | quasar build 165 | \`\`\` 166 | ` 167 | }, 168 | { 169 | label:'Build', 170 | value:` 171 | ### Build the application 172 | \`\`\`bash 173 | quasar build 174 | \`\`\` 175 | ` 176 | }, 177 | { 178 | label:'Run', 179 | value:` 180 | ### To run the app in development mode (hot-code reloading, error reporting, etc.) 181 | \`\`\`bash 182 | quasar dev 183 | \`\`\` 184 | ` 185 | }, 186 | { 187 | label:'API', 188 | value:` 189 | ## API Reference 190 | #### Get all items 191 | \`\`\`http 192 | GET /api/items 193 | \`\`\` 194 | | Parameter | Type | Description | 195 | | :-------- | :------- | :------------------------- | 196 | | \`api_key\` | \`string\` | **Required**. Your API key | 197 | #### Get item 198 | \`\`\`http 199 | GET /api/items/$\{id} 200 | \`\`\` 201 | | Parameter | Type | Description | 202 | | :-------- | :------- | :-------------------------------- | 203 | | \`id\` | \`string\` | **Required**. Id of item to fetch | 204 | #### add(num1, num2) 205 | Takes two numbers and returns their sum. 206 | ` 207 | }, 208 | { 209 | label:'Examples', 210 | value:` 211 | ## Usage/Examples 212 | \`\`\`javascript 213 | import Component from 'my-project' 214 | function App() { 215 | return 216 | } 217 | \`\`\` 218 | ` 219 | }, 220 | { 221 | label:'Screenshots/UI', 222 | value:` 223 | **Login option 1** 224 | 225 |

226 | 227 | Alt 229 | 230 |

231 | 232 | **Login option 1** 233 | 234 |

235 | 236 | Alt 238 | 239 |

240 | ` 241 | }, 242 | { 243 | label:'Future release', 244 | value:` 245 | ## Future release: 246 | * Mobile friendly 247 | * Seller related pages 248 | * Backend(planning to use [Python](https://www.python.org/)) 249 | ` 250 | }, 251 | { 252 | label:'Contribution', 253 | value:` 254 | ## Contributing 255 | Contributions are always welcome! 256 | See \`contributing.md\` for ways to get started. 257 | Please adhere to this project's \`code of conduct\`. 258 | ` 259 | }, 260 | { 261 | label:'License', 262 | value:` 263 | ## License 264 | [MIT](http://opensource.org/licenses/MIT) 265 | ` 266 | } 267 | ] 268 | }, 269 | { 270 | "type": "Titles", 271 | "children": [ 272 | { 273 | label:'Heading h1', 274 | value:` 275 | # Heading level 1 276 | ` 277 | }, 278 | { 279 | label:'Heading h2', 280 | value:` 281 | ## Heading level 2 282 | ` 283 | }, 284 | { 285 | label:'Heading h3', 286 | value:` 287 | ### Heading level 3 288 | ` 289 | }, 290 | { 291 | label:'Heading h4', 292 | value:` 293 | #### Heading level 4 294 | ` 295 | }, 296 | { 297 | label:'Heading h5', 298 | value:` 299 | ##### Heading level 1 300 | ` 301 | }, 302 | { 303 | label:'Heading h6', 304 | value:` 305 | ###### Heading level 1 306 | ` 307 | }, 308 | { 309 | label:'Title 1 and Description', 310 | value:` 311 | # Title... 312 | Description... 313 | ` 314 | } 315 | ] 316 | }, 317 | { 318 | "type": "Other", 319 | "children": [ 320 | { 321 | label:'Support', 322 | value:` 323 | ## Support 324 | 325 | If this helps you in any way, you can contribute to this project by supporting me: 326 | 327 | * [💜 Support my open-source work on GitHub](https://github.com/sponsors/mayur091193) 328 | 329 | Please check out my sponsor page. 330 | 331 | (Every small appreciation can make my day!) 332 | 333 | Thank you very much!! 334 | ` 335 | }, 336 | { 337 | label:'Resources used', 338 | value:` 339 | ## Resources used 340 | * [Quasar Framework](https://quasar.dev/) 341 | * [Vue.js](https://vuejs.org/) 342 | ` 343 | }, 344 | { 345 | label:'What it delivers', 346 | value:` 347 | ## What it delivers 348 | * eCommerce UI template written in Vue.js/Quasar 349 | ` 350 | }, 351 | ] 352 | } 353 | ] 354 | } 355 | -------------------------------------------------------------------------------- /quasar_app/src/i18n/en-US/index.js: -------------------------------------------------------------------------------- 1 | // This is just an example, 2 | // so you can safely delete all default props below 3 | 4 | export default { 5 | failed: 'Action failed', 6 | success: 'Action was successful' 7 | } 8 | -------------------------------------------------------------------------------- /quasar_app/src/i18n/index.js: -------------------------------------------------------------------------------- 1 | import enUS from './en-US' 2 | 3 | export default { 4 | 'en-US': enUS 5 | } 6 | -------------------------------------------------------------------------------- /quasar_app/src/index.template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Readme Pro 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | -------------------------------------------------------------------------------- /quasar_app/src/layouts/MainLayout.vue: -------------------------------------------------------------------------------- 1 | 61 | 62 | 132 | -------------------------------------------------------------------------------- /quasar_app/src/pages/Error404.vue: -------------------------------------------------------------------------------- 1 | 24 | 25 | 32 | -------------------------------------------------------------------------------- /quasar_app/src/pages/Index.vue: -------------------------------------------------------------------------------- 1 | 142 | 143 | 569 | 570 | 589 | -------------------------------------------------------------------------------- /quasar_app/src/pages/github-profile-generator.vue: -------------------------------------------------------------------------------- 1 | 803 | 804 | 1233 | 1234 | 2014 | -------------------------------------------------------------------------------- /quasar_app/src/pages/main.vue: -------------------------------------------------------------------------------- 1 | 201 | 202 | 631 | 632 | 968 | -------------------------------------------------------------------------------- /quasar_app/src/quasar.d.ts: -------------------------------------------------------------------------------- 1 | // Forces TS to apply `@quasar/app` augmentations of `quasar` package 2 | // Removing this would break `quasar/wrappers` imports as those typings are declared 3 | // into `@quasar/app` 4 | // As a side effect, since `@quasar/app` reference `quasar` to augment it, 5 | // this declaration also apply `quasar` own 6 | // augmentations (eg. adds `$q` into Vue component context) 7 | /// 8 | -------------------------------------------------------------------------------- /quasar_app/src/router/index.js: -------------------------------------------------------------------------------- 1 | import { route } from 'quasar/wrappers' 2 | import { createRouter, createMemoryHistory, createWebHistory, createWebHashHistory } from 'vue-router' 3 | import routes from './routes' 4 | 5 | /* 6 | * If not building with SSR mode, you can 7 | * directly export the Router instantiation; 8 | * 9 | * The function below can be async too; either use 10 | * async/await or return a Promise which resolves 11 | * with the Router instance. 12 | */ 13 | 14 | export default route(function (/* { store, ssrContext } */) { 15 | const createHistory = process.env.SERVER 16 | ? createMemoryHistory 17 | : (process.env.VUE_ROUTER_MODE === 'history' ? createWebHistory : createWebHashHistory) 18 | 19 | const Router = createRouter({ 20 | scrollBehavior: () => ({ left: 0, top: 0 }), 21 | routes, 22 | 23 | // Leave this as is and make changes in quasar.conf.js instead! 24 | // quasar.conf.js -> build -> vueRouterMode 25 | // quasar.conf.js -> build -> publicPath 26 | history: createHistory(process.env.MODE === 'ssr' ? void 0 : process.env.VUE_ROUTER_BASE) 27 | }) 28 | 29 | return Router 30 | }) 31 | -------------------------------------------------------------------------------- /quasar_app/src/router/routes.js: -------------------------------------------------------------------------------- 1 | 2 | const routes = [ 3 | { 4 | path: '/', 5 | component: () => import('layouts/MainLayout.vue'), 6 | children: [ 7 | { path: '', component: () => import('pages/Index.vue') }, 8 | { path: '/main', component: () => import('pages/main.vue') }, 9 | { path: '/github-profile-generator', component: () => import('pages/github-profile-generator.vue') } 10 | ] 11 | }, 12 | 13 | // Always leave this as last one, 14 | // but you can also remove it 15 | { 16 | path: '/:catchAll(.*)*', 17 | component: () => import('pages/Error404.vue') 18 | } 19 | ] 20 | 21 | export default routes 22 | -------------------------------------------------------------------------------- /quasar_app/src/store/index.js: -------------------------------------------------------------------------------- 1 | import { store } from 'quasar/wrappers' 2 | import { createStore } from 'vuex' 3 | 4 | // import example from './module-example' 5 | 6 | /* 7 | * If not building with SSR mode, you can 8 | * directly export the Store instantiation; 9 | * 10 | * The function below can be async too; either use 11 | * async/await or return a Promise which resolves 12 | * with the Store instance. 13 | */ 14 | 15 | export default store(function (/* { ssrContext } */) { 16 | const Store = createStore({ 17 | modules: { 18 | // example 19 | }, 20 | 21 | // enable strict mode (adds overhead!) 22 | // for dev mode and --debug builds only 23 | strict: process.env.DEBUGGING 24 | }) 25 | 26 | return Store 27 | }) 28 | -------------------------------------------------------------------------------- /quasar_app/src/store/module-example/actions.js: -------------------------------------------------------------------------------- 1 | export function someAction (/* context */) { 2 | } 3 | -------------------------------------------------------------------------------- /quasar_app/src/store/module-example/getters.js: -------------------------------------------------------------------------------- 1 | export function someGetter (/* state */) { 2 | } 3 | -------------------------------------------------------------------------------- /quasar_app/src/store/module-example/index.js: -------------------------------------------------------------------------------- 1 | import state from './state' 2 | import * as getters from './getters' 3 | import * as mutations from './mutations' 4 | import * as actions from './actions' 5 | 6 | export default { 7 | namespaced: true, 8 | getters, 9 | mutations, 10 | actions, 11 | state 12 | } 13 | -------------------------------------------------------------------------------- /quasar_app/src/store/module-example/mutations.js: -------------------------------------------------------------------------------- 1 | export function someMutation (/* state */) { 2 | } 3 | -------------------------------------------------------------------------------- /quasar_app/src/store/module-example/state.js: -------------------------------------------------------------------------------- 1 | export default function () { 2 | return { 3 | // 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /quasar_app/src/store/store-flag.d.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | // THIS FEATURE-FLAG FILE IS AUTOGENERATED, 3 | // REMOVAL OR CHANGES WILL CAUSE RELATED TYPES TO STOP WORKING 4 | import "quasar/dist/types/feature-flag"; 5 | 6 | declare module "quasar/dist/types/feature-flag" { 7 | interface QuasarFeatureFlags { 8 | store: true; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 |

2 | 3 | Details 5 | 6 |

7 | 8 | # Readme Pro 9 | 10 | An easy way to generate readme/GitHub profile readme written in Vue.js/Quasar. GitHub Profile README Generator. 11 | 12 | ## Site: [https://readmepro.netlify.app/](https://readmepro.netlify.app/) 13 | 14 | ## Resources used 15 | * [Quasar Framework](https://quasar.dev/) 16 | * [Vue.js](https://vuejs.org/) 17 | * [Tailwind CSS](https://tailwindcss.com/) 18 | 19 | ## Installation 20 | 21 | * **Clone the repository** 22 | 23 | ``` 24 | git clone https://github.com/mayur091193/readme-pro.git 25 | ``` 26 | 27 | ## Install the dependencies 28 | ```bash 29 | cd readme-pro/quasar_app 30 | npm install 31 | ``` 32 | 33 | ### To run the app in development mode (hot-code reloading, error reporting, etc.) 34 | ```bash 35 | quasar dev 36 | ``` 37 | 38 | 39 | ### Build the application 40 | ```bash 41 | quasar build 42 | ``` 43 | 44 | Reach out to me at "mayur091193@gmail.com" for queries. 45 | 46 | ## Screens UI 47 | **Home** 48 |

49 | 50 | Login 52 | 53 |

54 | 55 | **Readme Generator** 56 |

57 | 58 | Home 60 | 61 |

62 | 63 | **GitHub Profile README generator** 64 |

65 | 66 | Details 68 | 69 |

70 | 71 | **GitHub Profile Preview** 72 |

73 | 74 | Category 76 | 77 |

78 | 79 | ## Future release: 80 | * Lots of beautiful github profile templates 81 | * Backend(planning to use [Python](https://www.python.org/)) 82 | 83 | ### Customize the configuration 84 | See [Configuring quasar.conf.js](https://quasar.dev/quasar-cli/quasar-conf-js). 85 | 86 | ## Support 87 | 88 | If this hepls you in any way, you can contribute to this project by supporting me: 89 | 90 | ### [💜 Support my open-source work on GitHub](https://github.com/sponsors/mayur091193) 91 | ### [💜 Buy me a Coffee](https://www.buymeacoffee.com/mayur091193) 92 | ### [💜 Support me](https://paypal.me/mayurpp) 93 | 94 | Please check out my sponsor page and Buy me a coffee. 95 | 96 | (Every small appreciation can make my day!) 97 | 98 | Thank you very much!! 99 | 100 | ## License 101 | 102 | [MIT](http://opensource.org/licenses/MIT) 103 | --------------------------------------------------------------------------------