artdaq_node_server  v1_00_07
 All Classes Namespaces Files Variables Pages
truncate.js
1 var baseToString = require('./_baseToString'),
2  castSlice = require('./_castSlice'),
3  hasUnicode = require('./_hasUnicode'),
4  isObject = require('./isObject'),
5  isRegExp = require('./isRegExp'),
6  stringSize = require('./_stringSize'),
7  stringToArray = require('./_stringToArray'),
8  toInteger = require('./toInteger'),
9  toString = require('./toString');
10 
12 var DEFAULT_TRUNC_LENGTH = 30,
13  DEFAULT_TRUNC_OMISSION = '...';
14 
16 var reFlags = /\w*$/;
17 
55 function truncate(string, options) {
56  var length = DEFAULT_TRUNC_LENGTH,
57  omission = DEFAULT_TRUNC_OMISSION;
58 
59  if (isObject(options)) {
60  var separator = 'separator' in options ? options.separator : separator;
61  length = 'length' in options ? toInteger(options.length) : length;
62  omission = 'omission' in options ? baseToString(options.omission) : omission;
63  }
64  string = toString(string);
65 
66  var strLength = string.length;
67  if (hasUnicode(string)) {
68  var strSymbols = stringToArray(string);
69  strLength = strSymbols.length;
70  }
71  if (length >= strLength) {
72  return string;
73  }
74  var end = length - stringSize(omission);
75  if (end < 1) {
76  return omission;
77  }
78  var result = strSymbols
79  ? castSlice(strSymbols, 0, end).join('')
80  : string.slice(0, end);
81 
82  if (separator === undefined) {
83  return result + omission;
84  }
85  if (strSymbols) {
86  end += (result.length - end);
87  }
88  if (isRegExp(separator)) {
89  if (string.slice(end).search(separator)) {
90  var match,
91  substring = result;
92 
93  if (!separator.global) {
94  separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');
95  }
96  separator.lastIndex = 0;
97  while ((match = separator.exec(substring))) {
98  var newEnd = match.index;
99  }
100  result = result.slice(0, newEnd === undefined ? end : newEnd);
101  }
102  } else if (string.indexOf(baseToString(separator), end) != end) {
103  var index = result.lastIndexOf(separator);
104  if (index > -1) {
105  result = result.slice(0, index);
106  }
107  }
108  return result + omission;
109 }
110 
111 module.exports = truncate;