├── .github
└── workflows
│ ├── release.yml
│ └── test.yml
├── .gitignore
├── CODE_OF_CONDUCT.md
├── LICENSE
├── README.md
├── bin
└── authorize-push.js
├── demo
└── index.html
├── index.d.ts
├── index.js
├── lib
└── initials.js
├── package-lock.json
├── package.json
└── test
└── initials-test.js
/.github/workflows/release.yml:
--------------------------------------------------------------------------------
1 | name: Release
2 | "on":
3 | push:
4 | branches:
5 | - main
6 | - next
7 | - beta
8 | - "*.x"
9 | jobs:
10 | release:
11 | name: release
12 | runs-on: ubuntu-latest
13 | steps:
14 | - uses: actions/checkout@v3
15 | - uses: actions/setup-node@v3
16 | with:
17 | node-version: lts/*
18 | cache: npm
19 | - run: npm ci
20 | - run: npm run build
21 | - run: npx semantic-release
22 | env:
23 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
24 | NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
25 |
--------------------------------------------------------------------------------
/.github/workflows/test.yml:
--------------------------------------------------------------------------------
1 | name: Test
2 | "on":
3 | push:
4 | branches:
5 | - main
6 | pull_request:
7 | types:
8 | - opened
9 | - synchronize
10 | jobs:
11 | test:
12 | runs-on: ubuntu-latest
13 | steps:
14 | - uses: actions/checkout@v3
15 | - uses: actions/setup-node@v3
16 | with:
17 | node-version: lts/*
18 | cache: npm
19 | - run: npm ci
20 | - run: npm test
21 | - run: npm run build
22 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.log
2 | .coveralls.yml
3 | .DS_Store
4 | coverage/
5 | # generated by `npm run build:demo`
6 | demo/initials.js
7 | dist/
8 | node_modules/
9 |
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Contributor Covenant Code of Conduct
2 |
3 | ## Our Pledge
4 |
5 | In the interest of fostering an open and welcoming environment, we as
6 | contributors and maintainers pledge to making participation in our project and
7 | our community a harassment-free experience for everyone, regardless of age, body
8 | size, disability, ethnicity, gender identity and expression, level of experience,
9 | nationality, personal appearance, race, religion, or sexual identity and
10 | orientation.
11 |
12 | ## Our Standards
13 |
14 | Examples of behavior that contributes to creating a positive environment
15 | include:
16 |
17 | - Using welcoming and inclusive language
18 | - Being respectful of differing viewpoints and experiences
19 | - Gracefully accepting constructive criticism
20 | - Focusing on what is best for the community
21 | - Showing empathy towards other community members
22 |
23 | Examples of unacceptable behavior by participants include:
24 |
25 | - The use of sexualized language or imagery and unwelcome sexual attention or
26 | advances
27 | - Trolling, insulting/derogatory comments, and personal or political attacks
28 | - Public or private harassment
29 | - Publishing others' private information, such as a physical or electronic
30 | address, without explicit permission
31 | - Other conduct which could reasonably be considered inappropriate in a
32 | professional setting
33 |
34 | ## Our Responsibilities
35 |
36 | Project maintainers are responsible for clarifying the standards of acceptable
37 | behavior and are expected to take appropriate and fair corrective action in
38 | response to any instances of unacceptable behavior.
39 |
40 | Project maintainers have the right and responsibility to remove, edit, or
41 | reject comments, commits, code, wiki edits, issues, and other contributions
42 | that are not aligned to this Code of Conduct, or to ban temporarily or
43 | permanently any contributor for other behaviors that they deem inappropriate,
44 | threatening, offensive, or harmful.
45 |
46 | ## Scope
47 |
48 | This Code of Conduct applies both within project spaces and in public spaces
49 | when an individual is representing the project or its community. Examples of
50 | representing a project or community include using an official project e-mail
51 | address, posting via an official social media account, or acting as an appointed
52 | representative at an online or offline event. Representation of a project may be
53 | further defined and clarified by project maintainers.
54 |
55 | ## Enforcement
56 |
57 | Instances of abusive, harassing, or otherwise unacceptable behavior may be
58 | reported by contacting the project team at opensource+coc@martynus.net. All
59 | complaints will be reviewed and investigated and will result in a response that
60 | is deemed necessary and appropriate to the circumstances. The project team is
61 | obligated to maintain confidentiality with regard to the reporter of an incident.
62 | Further details of specific enforcement policies may be posted separately.
63 |
64 | Project maintainers who do not follow or enforce the Code of Conduct in good
65 | faith may face temporary or permanent repercussions as determined by other
66 | members of the project's leadership.
67 |
68 | ## Attribution
69 |
70 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
71 | available at [https://contributor-covenant.org/version/1/4][version]
72 |
73 | [homepage]: https://contributor-covenant.org
74 | [version]: https://contributor-covenant.org/version/1/4/
75 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2019 Gregor Martynus
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 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | Initials. Because JD is shorter than John Doe
2 | =============================================
3 |
4 | > extracts initials from and adds initials to names
5 |
6 | [](https://travis-ci.org/gr2m/initials)
7 | [](https://coveralls.io/r/gr2m/initials?branch=main)
8 | [](https://greenkeeper.io/)
9 |
10 | ## Installation
11 |
12 | Install using [npm](https://npmjs.org/) for node.js:
13 |
14 | ```
15 | npm install --save initials
16 | ```
17 |
18 |
19 | ## Usage
20 |
21 | ```js
22 | initials('John Doe')
23 | // 'JD'
24 |
25 | initials(['John Doe', 'Robert Roe'])
26 | // ['JD', 'RR']
27 |
28 | // alias for initials('John Doe')
29 | initials.find('John Doe')
30 |
31 | // parse name(s)
32 | initials.parse('John Doe')
33 | // {name: 'John Doe', initials: 'JD'}
34 |
35 | // add initials to name(s)
36 | initials.addTo('John Doe')
37 | // 'John Doe (JD)'
38 |
39 | // pass existing initials for names
40 | initials(['John Doe', 'Jane Dane'], {
41 | existing: { 'John Doe': 'JD' }
42 | })
43 | // ['JD', 'JDa']
44 | ```
45 |
46 | ## Notes
47 |
48 | Preffered initials can be passed in `(JD)`, e.g.
49 |
50 | ```js
51 | console.log( initials('John Doe (JoDo)') );
52 | // 'JoDo'
53 | ```
54 |
55 | If a name contains an email, it gets ignored when calculating initials
56 |
57 | ```js
58 | console.log( initials('John Doe joe@example.com') );
59 | // 'JD'
60 | ```
61 |
62 | If a name _is_ an email, the domain part gets ignored
63 |
64 | ```js
65 | console.log( initials('joe@example.com') );
66 | // 'jo'
67 | ```
68 |
69 | When passing an Array of names, duplicates of initials are avoided
70 |
71 | ```js
72 | console.log( initials(['John Doe', 'Jane Dane']) );
73 | // ['JDo', 'JDa']
74 | ```
75 |
76 | ## Test
77 |
78 | ```
79 | npm test
80 | ```
81 |
82 |
83 | ## LICENSE
84 |
85 | [MIT](LICENSE)
86 |
--------------------------------------------------------------------------------
/bin/authorize-push.js:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | var exec = require('child_process').exec
4 |
5 | var GH_TOKEN = process.env.GH_TOKEN
6 | var repo = require('../package.json').repository.url
7 |
8 | if (!(process.env.CI && GH_TOKEN && repo)) {
9 | console.log('[authorize-push] ignodered because condition not fullfillled (process.env.CI: %s, GH_TOKEN: %s, repo: %s)', !!process.env.CI, !!GH_TOKEN, !!repo)
10 | process.exit(1)
11 | }
12 |
13 | var commands = [
14 | 'git remote set-url origin ' + repo.replace('https://', 'https://' + GH_TOKEN + '@'),
15 | 'git config user.email "gregor@martynus.net"',
16 | 'git config user.name "gr2m"'
17 | ]
18 | commands.forEach(function (command) {
19 | console.log('[authorize-push] %s', command.replace(GH_TOKEN, '***GH_TOKEN***'))
20 | exec(command)
21 | })
22 |
--------------------------------------------------------------------------------
/demo/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |