Skip to content

Commit

Permalink
main project
Browse files Browse the repository at this point in the history
  • Loading branch information
matteogatti committed Mar 28, 2019
1 parent d042f8b commit 621a25e
Show file tree
Hide file tree
Showing 9 changed files with 3,661 additions and 0 deletions.
3 changes: 3 additions & 0 deletions .babelrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"presets": ["es2015"]
}
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
.idea
node_modules
4 changes: 4 additions & 0 deletions .jshintrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"esnext": "true",
"noyield": "true"
}
18 changes: 18 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,24 @@ SMS Counter

Character counter for SMS messages.

Usage
----------

```javascript
SmsCounter.count('content of the SMS')
```

This will return the following object:

```javascript
{
encoding: "GSM_7BIT",
length: 18,
messages: 1,
per_message: 160,
remaining: 142
}
```

Thanks to
----
Expand Down
105 changes: 105 additions & 0 deletions build/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
'use strict';

Object.defineProperty(exports, "__esModule", {
value: true
});
var SmsCounter = function SmsCounter() {};

SmsCounter.gsm7bitChars = '@£$¥èéùìòÇ\\nØø\\rÅåΔ_ΦΓΛΩΠΨΣΘΞÆæßÉ !\\"#¤%&\'()*+,-./0123456789:;<=>?¡ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÑܧ¿abcdefghijklmnopqrstuvwxyzäöñüà';

SmsCounter.gsm7bitExChar = '\\^{}\\\\\\[~\\]|€';

SmsCounter.gsm7bitRegExp = RegExp('^[' + SmsCounter.gsm7bitChars + ']*$');

SmsCounter.gsm7bitExRegExp = RegExp('^[' + SmsCounter.gsm7bitChars + SmsCounter.gsm7bitExChar + ']*$');

SmsCounter.gsm7bitExOnlyRegExp = RegExp('^[\\' + SmsCounter.gsm7bitExChar + ']*$');

SmsCounter.GSM_7BIT = 'GSM_7BIT';

SmsCounter.GSM_7BIT_EX = 'GSM_7BIT_EX';

SmsCounter.UTF16 = 'UTF16';

SmsCounter.messageLength = {
GSM_7BIT: 160,
GSM_7BIT_EX: 160,
UTF16: 70
};

SmsCounter.multiMessageLength = {
GSM_7BIT: 153,
GSM_7BIT_EX: 153,
UTF16: 67
};

SmsCounter.count = function (text) {
var encoding = void 0,
length = void 0,
messages = void 0,
per_message = void 0,
remaining = void 0;
encoding = SmsCounter.detectEncoding(text);
length = text.length;

if (encoding === SmsCounter.GSM_7BIT_EX) {
length += SmsCounter.countGsm7bitEx(text);
}

per_message = SmsCounter.messageLength[encoding];

if (length > per_message) {
per_message = SmsCounter.multiMessageLength[encoding];
}

messages = Math.ceil(length / per_message);

remaining = per_message * messages - length;

if (remaining === 0 && messages === 0) {
remaining = per_message;
}

return {
encoding: encoding,
length: length,
per_message: per_message,
remaining: remaining,
messages: messages
};
};

SmsCounter.detectEncoding = function (text) {
switch (false) {
case text.match(SmsCounter.gsm7bitRegExp) == null:
return SmsCounter.GSM_7BIT;
case text.match(SmsCounter.gsm7bitExRegExp) == null:
return SmsCounter.GSM_7BIT_EX;
default:
return SmsCounter.UTF16;
}
};

SmsCounter.countGsm7bitEx = function (text) {
var char2 = void 0,
chars = void 0;

chars = function chars() {
var _i = void 0,
_len = void 0,
_results = void 0;
_results = [];
for (_i = 0, _len = text.length; _i < _len; _i++) {
char2 = text[_i];

if (char2.match(SmsCounter.gsm7bitExOnlyRegExp) != null) {
_results.push(char2);
}
}
return _results;
};

return chars.length;
};

exports.default = SmsCounter;
1 change: 1 addition & 0 deletions build/index.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

94 changes: 94 additions & 0 deletions index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
const SmsCounter = () => {};

SmsCounter.gsm7bitChars =
'@£$¥èéùìòÇ\\nØø\\rÅåΔ_ΦΓΛΩΠΨΣΘΞÆæßÉ !\\"#¤%&\'()*+,-./0123456789:;<=>?¡ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÑܧ¿abcdefghijklmnopqrstuvwxyzäöñüà';

SmsCounter.gsm7bitExChar = '\\^{}\\\\\\[~\\]|€';

SmsCounter.gsm7bitRegExp = RegExp('^[' + SmsCounter.gsm7bitChars + ']*$');

SmsCounter.gsm7bitExRegExp = RegExp('^[' + SmsCounter.gsm7bitChars + SmsCounter.gsm7bitExChar + ']*$');

SmsCounter.gsm7bitExOnlyRegExp = RegExp('^[\\' + SmsCounter.gsm7bitExChar + ']*$');

SmsCounter.GSM_7BIT = 'GSM_7BIT';

SmsCounter.GSM_7BIT_EX = 'GSM_7BIT_EX';

SmsCounter.UTF16 = 'UTF16';

SmsCounter.messageLength = {
GSM_7BIT: 160,
GSM_7BIT_EX: 160,
UTF16: 70,
};

SmsCounter.multiMessageLength = {
GSM_7BIT: 153,
GSM_7BIT_EX: 153,
UTF16: 67,
};

SmsCounter.count = text => {
let encoding, length, messages, per_message, remaining;
encoding = SmsCounter.detectEncoding(text);
length = text.length;

if (encoding === SmsCounter.GSM_7BIT_EX) {
length += SmsCounter.countGsm7bitEx(text);
}

per_message = SmsCounter.messageLength[encoding];

if (length > per_message) {
per_message = SmsCounter.multiMessageLength[encoding];
}

messages = Math.ceil(length / per_message);

remaining = per_message * messages - length;

if (remaining === 0 && messages === 0) {
remaining = per_message;
}

return {
encoding: encoding,
length: length,
per_message: per_message,
remaining: remaining,
messages: messages,
};
};

SmsCounter.detectEncoding = text => {
switch (false) {
case text.match(SmsCounter.gsm7bitRegExp) == null:
return SmsCounter.GSM_7BIT;
case text.match(SmsCounter.gsm7bitExRegExp) == null:
return SmsCounter.GSM_7BIT_EX;
default:
return SmsCounter.UTF16;
}
};

SmsCounter.countGsm7bitEx = text => {
let char2, chars;

chars = () => {
let _i, _len, _results;
_results = [];
for (_i = 0, _len = text.length; _i < _len; _i++) {
char2 = text[_i];

if (char2.match(SmsCounter.gsm7bitExOnlyRegExp) != null) {
_results.push(char2);
}
}
return _results;
};

return chars.length;
};

export default SmsCounter;
Loading

0 comments on commit 621a25e

Please sign in to comment.