├── acrons-demo.png
├── public
├── logo.png
└── index.html
├── vue.config.js
├── src
├── assets
│ └── logo.png
├── router
│ └── index.js
├── main.js
├── id_techronym_data.json
├── components
│ ├── AppHeader.vue
│ └── AppFooter.vue
├── App.vue
├── views
│ ├── ID.vue
│ └── Home.vue
└── techronym_data.json
├── babel.config.js
├── .gitignore
├── scripts
└── gh-pages-deploy.js
├── LICENSE
├── package.json
└── README.md
/acrons-demo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mkfeuhrer/acrons/HEAD/acrons-demo.png
--------------------------------------------------------------------------------
/public/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mkfeuhrer/acrons/HEAD/public/logo.png
--------------------------------------------------------------------------------
/vue.config.js:
--------------------------------------------------------------------------------
1 | // module.exports = {
2 | // publicPath: "/acrons/",
3 | // };
4 |
--------------------------------------------------------------------------------
/src/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mkfeuhrer/acrons/HEAD/src/assets/logo.png
--------------------------------------------------------------------------------
/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: [
3 | '@vue/cli-plugin-babel/preset'
4 | ]
5 | }
6 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /dist
4 |
5 | # local env files
6 | .env.local
7 | .env.*.local
8 |
9 | # Log files
10 | npm-debug.log*
11 | yarn-debug.log*
12 | yarn-error.log*
13 |
14 | # Editor directories and files
15 | .idea
16 | .vscode
17 | *.suo
18 | *.ntvs*
19 | *.njsproj
20 | *.sln
21 | *.sw?
22 |
--------------------------------------------------------------------------------
/src/router/index.js:
--------------------------------------------------------------------------------
1 | import Vue from "vue";
2 | import VueRouter from "vue-router";
3 | import Home from "../views/Home.vue";
4 | import ID from "../views/ID.vue"
5 | import VueMeta from "vue-meta";
6 |
7 | Vue.use(VueRouter);
8 | Vue.use(VueMeta);
9 |
10 | const routes = [
11 | {
12 | path: "/",
13 | name: "Home",
14 | component: Home,
15 | },
16 | {
17 | path: "/id",
18 | name: "ID",
19 | component: ID,
20 | }
21 | ];
22 |
23 | const router = new VueRouter({
24 | routes,
25 | });
26 |
27 | export default router;
28 |
--------------------------------------------------------------------------------
/src/main.js:
--------------------------------------------------------------------------------
1 | import Vue from "vue";
2 | import App from "./App.vue";
3 | import VueAnalytics from "vue-analytics";
4 | import VuePageTransition from "vue-page-transition";
5 | import VueMeta from "vue-meta";
6 |
7 | import "@fortawesome/fontawesome-free/css/all.css";
8 | import "@fortawesome/fontawesome-free/js/all.js";
9 | import "bootstrap/dist/css/bootstrap.css";
10 | import "bootstrap-vue/dist/bootstrap-vue.css";
11 | import router from "./router";
12 |
13 | Vue.config.productionTip = false;
14 | Vue.use(VuePageTransition);
15 | Vue.use(VueMeta);
16 |
17 | Vue.use(VueAnalytics, {
18 | id: "UA-131120430-3",
19 | router,
20 | });
21 |
22 | new Vue({
23 | router,
24 | render: (h) => h(App),
25 | }).$mount("#app");
26 |
--------------------------------------------------------------------------------
/src/id_techronym_data.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "acronym": "ManTul",
4 | "expanded_version": "Mantap Betul"
5 | },
6 | {
7 | "acronym": "JaPri",
8 | "expanded_version": "Jalur Pribadi"
9 | },
10 | {
11 | "acronym": "RekBer",
12 | "expanded_version": "Rekening Bersama"
13 | },
14 | {
15 | "acronym": "TTDJ",
16 | "expanded_version": "Hati-hati di jalan"
17 | },
18 | {
19 | "acronym": "GerCep",
20 | "expanded_version": "Gerak Cepat"
21 | },
22 | {
23 | "acronym": "MaGer",
24 | "expanded_version": "Malas Gerak"
25 | },
26 | {
27 | "acronym": "GaJe",
28 | "expanded_version": "Gak Jelas"
29 | },
30 | {
31 | "acronym": "GaBut",
32 | "expanded_version": "Gaji Buta"
33 | },
34 | {
35 | "acronym": "CurCol",
36 | "expanded_version": "Curhat Colongan"
37 | },
38 | {
39 | "acronym": "GPL",
40 | "expanded_version": "Gak Pake Lama"
41 | }
42 | ]
43 |
--------------------------------------------------------------------------------
/scripts/gh-pages-deploy.js:
--------------------------------------------------------------------------------
1 | const execa = require("execa");
2 | const fs = require("fs");
3 |
4 | (async () => {
5 | try {
6 | await execa("git", ["checkout", "--orphan", "gh-pages"]);
7 | console.log("Building...");
8 | await execa("npm", ["run", "build"]);
9 | // Understand if it's dist or build folder
10 | const folderName = fs.existsSync("dist") ? "dist" : "build";
11 | await execa("git", ["--work-tree", folderName, "add", "--all"]);
12 | await execa("git", ["--work-tree", folderName, "commit", "-m", "gh-pages"]);
13 | console.log("Pushing to gh-pages...");
14 | await execa("git", ["push", "origin", "HEAD:gh-pages", "--force"]);
15 | await execa("rm", ["-r", folderName]);
16 | await execa("git", ["checkout", "-f", "master"]);
17 | await execa("git", ["branch", "-D", "gh-pages"]);
18 | console.log("Successfully deployed");
19 | } catch (e) {
20 | console.log(e.message);
21 | process.exit(1);
22 | }
23 | })();
24 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 Mohit Khare
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | <%= htmlWebpackPlugin.options.title %>
9 |
20 |
21 |
22 |
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/src/components/AppHeader.vue:
--------------------------------------------------------------------------------
1 |
2 |
18 |
19 |
20 |
23 |
24 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "acrons",
3 | "version": "0.1.0",
4 | "private": true,
5 | "scripts": {
6 | "serve": "vue-cli-service serve",
7 | "build": "vue-cli-service build",
8 | "lint": "vue-cli-service lint",
9 | "gh-pages-deploy": "node scripts/gh-pages-deploy.js"
10 | },
11 | "dependencies": {
12 | "@fortawesome/fontawesome-free": "^5.13.0",
13 | "bootstrap": "^4.5.0",
14 | "bootstrap-vue": "^2.14.0",
15 | "core-js": "^3.6.4",
16 | "vue": "^2.6.11",
17 | "vue-analytics": "^5.22.1",
18 | "vue-meta": "^2.3.3",
19 | "vue-page-transition": "^0.2.2",
20 | "vue-router": "^3.1.6"
21 | },
22 | "devDependencies": {
23 | "@vue/cli-plugin-babel": "~4.3.0",
24 | "@vue/cli-plugin-eslint": "~4.3.0",
25 | "@vue/cli-plugin-router": "^4.3.1",
26 | "@vue/cli-plugin-vuex": "^4.3.1",
27 | "@vue/cli-service": "~4.3.0",
28 | "babel-eslint": "^10.1.0",
29 | "eslint": "^6.7.2",
30 | "eslint-plugin-vue": "^6.2.2",
31 | "vue-template-compiler": "^2.6.11"
32 | },
33 | "eslintConfig": {
34 | "root": true,
35 | "env": {
36 | "node": true
37 | },
38 | "extends": [
39 | "plugin:vue/essential",
40 | "eslint:recommended"
41 | ],
42 | "parserOptions": {
43 | "parser": "babel-eslint"
44 | },
45 | "rules": {}
46 | },
47 | "browserslist": [
48 | "> 1%",
49 | "last 2 versions",
50 | "not dead"
51 | ]
52 | }
53 |
--------------------------------------------------------------------------------
/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
36 |
37 |
59 |
--------------------------------------------------------------------------------
/src/components/AppFooter.vue:
--------------------------------------------------------------------------------
1 |
2 |
35 |
36 |
37 |
40 |
41 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Acrons
2 |
3 |
4 |
5 |
6 |
7 | One stop solution for finding acronyms.
8 |
9 | Now understand what these abbrevations stand for
10 |
11 | Live here - [Acrons](https://acrons.vercel.app)
12 |
13 |
14 |
15 | ## Project setup
16 |
17 | ```
18 | npm install
19 | ```
20 |
21 | ### Compiles and hot-reloads for development
22 |
23 | ```
24 | npm run serve
25 | ```
26 |
27 | ### Compiles and minifies for production
28 |
29 | ```
30 | npm run build
31 | ```
32 |
33 | ### Lints and fixes files
34 |
35 | ```
36 | npm run lint
37 | ```
38 |
39 | ### Customize configuration
40 |
41 | See [Configuration Reference](https://cli.vuejs.org/config/).
42 |
43 | ## Contribute
44 |
45 | This is a fun and easy to contribute project. Feel free to add new acronyms by modifying the `technronyms_data.json` file under `src` directory.
46 |
47 | 1. Please ensure the abbrevations aren't duplicated.
48 | 2. Follow the json format.
49 | 3. Avoid acronyms with less than 3 characters.
50 |
51 | Also, in case you want to add some functionality or improve UI, raise a Issue/PR.
52 |
53 | Star and share!
54 |
55 |
56 |
57 | ## Author
58 |
59 | - [Mohit Khare](https://mohitkhare.com)
60 |
--------------------------------------------------------------------------------
/src/views/ID.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
17 |
18 |
32 |
33 |
39 |
40 |
{{ value.acronym }}
41 |
{{ value.expanded_version}}
45 |
46 |
47 |
53 |
54 |
{{ value.acronym }}
55 |
{{ value.expanded_version}}
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
131 |
132 |
133 |
--------------------------------------------------------------------------------
/src/views/Home.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
17 |
18 |
32 |
33 |
39 |
40 |
{{ value.acronym }}
41 |
{{ value.expanded_version}}
45 |
46 |
47 |
53 |
54 |
{{ value.acronym }}
55 |
{{ value.expanded_version}}
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
147 |
148 |
149 |
--------------------------------------------------------------------------------
/src/techronym_data.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "acronym": "ACC",
4 | "expanded_version": "Anyone can come"
5 | },
6 | {
7 | "acronym": "AFAIK ",
8 | "expanded_version": "As Far As I Know"
9 | },
10 | {
11 | "acronym": "AFK ",
12 | "expanded_version": "Away From Keyboard"
13 | },
14 | {
15 | "acronym": "AKA ",
16 | "expanded_version": "Also Known As"
17 | },
18 | {
19 | "acronym": "AMA",
20 | "expanded_version": "Ask Me Anything"
21 | },
22 | {
23 | "acronym": "ASAP ",
24 | "expanded_version": "As Soon As Possible"
25 | },
26 | {
27 | "acronym": "AWOL ",
28 | "expanded_version": "Absent Without Leave"
29 | },
30 | {
31 | "acronym": "BAE ",
32 | "expanded_version": "Before Anyone Else"
33 | },
34 | {
35 | "acronym": "BBIAB ",
36 | "expanded_version": "Be Back In A Bit"
37 | },
38 | {
39 | "acronym": "BBL ",
40 | "expanded_version": "Be Back Later"
41 | },
42 | {
43 | "acronym": "BBS ",
44 | "expanded_version": "Be Back Soon"
45 | },
46 | {
47 | "acronym": "BEG ",
48 | "expanded_version": "Big Evil Grin"
49 | },
50 | {
51 | "acronym": "BOL",
52 | "expanded_version": "Best Of Luck"
53 | },
54 | {
55 | "acronym": "BOT",
56 | "expanded_version": "Back on topic"
57 | },
58 | {
59 | "acronym": "BRB ",
60 | "expanded_version": "Be Right Back"
61 | },
62 | {
63 | "acronym": "BTW ",
64 | "expanded_version": "By The Way"
65 | },
66 | {
67 | "acronym": "BYOB",
68 | "expanded_version": "Bring Your Own Beer"
69 | },
70 | {
71 | "acronym": "BYOD",
72 | "expanded_version": "Bring Your Own Device"
73 | },
74 | {
75 | "acronym": "BYTM",
76 | "expanded_version": "Better You Than Me"
77 | },
78 | {
79 | "acronym": "CMIIW",
80 | "expanded_version": "Correct Me If I'm Wrong"
81 | },
82 | {
83 | "acronym": "CMV",
84 | "expanded_version": "Change My View"
85 | },
86 | {
87 | "acronym": "CTA",
88 | "expanded_version": "Call To Action"
89 | },
90 | {
91 | "acronym": "CYE",
92 | "expanded_version": "Check Your Email"
93 | },
94 | {
95 | "acronym": "CYL",
96 | "expanded_version": "Call You Later"
97 | },
98 | {
99 | "acronym": "DAE",
100 | "expanded_version": "Does Anyone Else"
101 | },
102 | {
103 | "acronym": "DBA ",
104 | "expanded_version": "Doing Business As"
105 | },
106 | {
107 | "acronym": "DIY ",
108 | "expanded_version": "Do It Yourself"
109 | },
110 | {
111 | "acronym": "DND ",
112 | "expanded_version": "Do Not Disturb"
113 | },
114 | {
115 | "acronym": "DOA ",
116 | "expanded_version": "Dead On Arrival"
117 | },
118 | {
119 | "acronym": "DOB ",
120 | "expanded_version": "Date Of Birth"
121 | },
122 | {
123 | "acronym": "DRY",
124 | "expanded_version": "Don't Repeat Yourself"
125 | },
126 | {
127 | "acronym" : "ELI5",
128 | "expanded_version": "Explain Like I'm 5 (years old)"
129 | },
130 | {
131 | "acronym": "EOD ",
132 | "expanded_version": "End of Day"
133 | },
134 | {
135 | "acronym": "EOM",
136 | "expanded_version": "End Of Mail"
137 | },
138 | {
139 | "acronym": "ETA ",
140 | "expanded_version": "Estimated Time of Arrival"
141 | },
142 | {
143 | "acronym": "FAQ ",
144 | "expanded_version": "Frequently Asked Questions"
145 | },
146 | {
147 | "acronym": "FISH ",
148 | "expanded_version": "First In Still Here"
149 | },
150 | {
151 | "acronym": "FML",
152 | "expanded_version": "F*** My Life"
153 | },
154 | {
155 | "acronym": "FOMO",
156 | "expanded_version": "Fear Of Missing Out"
157 | },
158 | {
159 | "acronym": "FTFY ",
160 | "expanded_version": "Fixed That For You"
161 | },
162 | {
163 | "acronym": "FTW",
164 | "expanded_version": "For The Win"
165 | },
166 | {
167 | "acronym": "FYI",
168 | "expanded_version": "For Your Information"
169 | },
170 | {
171 | "acronym": "GG",
172 | "expanded_version": "Good Game"
173 | },
174 | {
175 | "acronym": "GGWP",
176 | "expanded_version": "Good Game Well Played"
177 | },
178 | {
179 | "acronym": "IDK",
180 | "expanded_version": "I Don't Know"
181 | },
182 | {
183 | "acronym": "IIRC",
184 | "expanded_version": "If I Remember Correctly"
185 | },
186 | {
187 | "acronym": "IIUC",
188 | "expanded_version": "If I Understand Correctly"
189 | },
190 | {
191 | "acronym": "IMHO ",
192 | "expanded_version": "in my Honest opinion"
193 | },
194 | {
195 | "acronym": "IMO ",
196 | "expanded_version": "In My Opinion"
197 | },
198 | {
199 | "acronym": "IMS",
200 | "expanded_version": "I Am Sorry"
201 | },
202 | {
203 | "acronym": "IRL ",
204 | "expanded_version": "In Real Life"
205 | },
206 | {
207 | "acronym": "IYKWIM",
208 | "expanded_version": "If You Know What I Mean"
209 | },
210 | {
211 | "acronym": "KISS ",
212 | "expanded_version": "Keep It Simple Stupid"
213 | },
214 | {
215 | "acronym": "KPI",
216 | "expanded_version": "Key Performance Indicator"
217 | },
218 | {
219 | "acronym": "LGTM",
220 | "expanded_version": "looks good to me"
221 | },
222 | {
223 | "acronym": "LMAO",
224 | "expanded_version": "Laughing My A** Off"
225 | },
226 | {
227 | "acronym": "LMK",
228 | "expanded_version": "Let me know"
229 | },
230 | {
231 | "acronym": "LOL ",
232 | "expanded_version": "Laughing Out Loud"
233 | },
234 | {
235 | "acronym": "NGL",
236 | "expanded_version": "Not Gonna Lie"
237 | },
238 | {
239 | "acronym": "NP ",
240 | "expanded_version": "No Problem"
241 | },
242 | {
243 | "acronym": "NSFL",
244 | "expanded_version": "Not Safe For Life"
245 | },
246 | {
247 | "acronym": "NSFW",
248 | "expanded_version": "Not Safe For Work"
249 | },
250 | {
251 | "acronym": "NWR",
252 | "expanded_version": "Not Work Related"
253 | },
254 | {
255 | "acronym": "NYOB ",
256 | "expanded_version": "None of Your Business"
257 | },
258 | {
259 | "acronym": "OMG ",
260 | "expanded_version": "Oh My God"
261 | },
262 | {
263 | "acronym": "OMW ",
264 | "expanded_version": "On My Way"
265 | },
266 | {
267 | "acronym": "OOO",
268 | "expanded_version": "Out Of Office"
269 | },
270 | {
271 | "acronym": "OOT",
272 | "expanded_version": "Out Of Topic"
273 | },
274 | {
275 | "acronym": "OOTD",
276 | "expanded_version": "Outfit Of The Day"
277 | },
278 | {
279 | "acronym": "OT ",
280 | "expanded_version": "Overtime"
281 | },
282 | {
283 | "acronym": "OTW ",
284 | "expanded_version": "On The Way"
285 | },
286 | {
287 | "acronym": "PANS ",
288 | "expanded_version": "Pretty Awesome New Stuff"
289 | },
290 | {
291 | "acronym": "PCM",
292 | "expanded_version": "Plese Call Me"
293 | },
294 | {
295 | "acronym": "PHAT ",
296 | "expanded_version": "Pretty Hot And Tempting"
297 | },
298 | {
299 | "acronym": "POC ",
300 | "expanded_version": "Point Of Contact"
301 | },
302 | {
303 | "acronym": "POS ",
304 | "expanded_version": "Point Of Service"
305 | },
306 | {
307 | "acronym": "RFC ",
308 | "expanded_version": "Request for Comments"
309 | },
310 | {
311 | "acronym": "RN",
312 | "expanded_version": "Right now"
313 | },
314 | {
315 | "acronym": "ROFL ",
316 | "expanded_version": "Roll On the Floor Laughing"
317 | },
318 | {
319 | "acronym": "SMART ",
320 | "expanded_version": "Specific Measurable Attainable Realistic Time"
321 | },
322 | {
323 | "acronym": "SOT",
324 | "expanded_version": "Short Of time"
325 | },
326 | {
327 | "acronym": "STFW",
328 | "expanded_version": "search the f***ing web"
329 | },
330 | {
331 | "acronym": "SWOT ",
332 | "expanded_version": "Strengths Weaknesses Opportunities Threats"
333 | },
334 | {
335 | "acronym": "TBH ",
336 | "expanded_version": "To Be Honest"
337 | },
338 | {
339 | "acronym": "TED",
340 | "expanded_version": "Tell me Explain to me Describe to me (Talk)"
341 | },
342 | {
343 | "acronym": "TFW",
344 | "expanded_version": "That Feeling When"
345 | },
346 | {
347 | "acronym": "TGFY",
348 | "expanded_version": "Too Good For You"
349 | },
350 | {
351 | "acronym": "TGIF",
352 | "expanded_version": "Thank God It's Friday"
353 | },
354 | {
355 | "acronym": "TIL",
356 | "expanded_version": "Today I Learned"
357 | },
358 | {
359 | "acronym": "TLDR",
360 | "expanded_version": "Too Long, Didn't Read"
361 | },
362 | {
363 | "acronym": "TLTR",
364 | "expanded_version": "Too long to read"
365 | },
366 | {
367 | "acronym": "TOS",
368 | "expanded_version": "Terms of service"
369 | },
370 | {
371 | "acronym": "TOU",
372 | "expanded_version": "Thinking Of You"
373 | },
374 | {
375 | "acronym": "TTYL ",
376 | "expanded_version": "Talk To You Later"
377 | },
378 | {
379 | "acronym": "TYSM",
380 | "expanded_version": "Thank You So Much"
381 | },
382 | {
383 | "acronym": "TYT",
384 | "expanded_version": "Take your time"
385 | },
386 | {
387 | "acronym": "WBS",
388 | "expanded_version": "Write Back Soon"
389 | },
390 | {
391 | "acronym": "WFH",
392 | "expanded_version": "Work From Home"
393 | },
394 | {
395 | "acronym": "WFM ",
396 | "expanded_version": "Works for me"
397 | },
398 | {
399 | "acronym": "WIP ",
400 | "expanded_version": " Work in progress"
401 | },
402 | {
403 | "acronym": "WP",
404 | "expanded_version": "Well Played"
405 | },
406 | {
407 | "acronym": "WTH",
408 | "expanded_version": "What The Hell"
409 | },
410 | {
411 | "acronym": "WYSIWYG",
412 | "expanded_version": "What You See Is What You Get"
413 | },
414 | {
415 | "acronym": "YAGNI",
416 | "expanded_version": "You Aren't Gonna Need It "
417 | },
418 | {
419 | "acronym": "YMMV",
420 | "expanded_version": "Your Mileage May Vary"
421 | },
422 | {
423 | "acronym": "YOLO",
424 | "expanded_version": "You Only Live Once"
425 | },
426 | {
427 | "acronym": "YSK",
428 | "expanded_version": "You Should Know"
429 | }
430 | ]
431 |
--------------------------------------------------------------------------------