on de52cac help sign in
elk/libraries/Native/String.js
151 lines 3.7 kB history raw
1Elm.Native.String = {};
2Elm.Native.String.make = function(elm) {
3 elm.Native = elm.Native || {};
4 elm.Native.String = elm.Native.String || {};
5 if (elm.Native.String.values) return elm.Native.String.values;
6 if ('values' in Elm.Native.String)
7 return elm.Native.String.values = Elm.Native.String.values;
9 var Maybe = Elm.Maybe.make(elm);
10 var JS = Elm.JavaScript.make(elm);
11 var Tuple2 = Elm.Native.Utils.make(elm).Tuple2;
13 function isEmpty(str) {
14 return str.length === 0;
15 }
16 function cons(chr,str) {
17 return chr + str;
18 }
19 function uncons(str) {
20 var chr;
21 return (chr = str[0]) ? Maybe.Just(Tuple2(chr, str.slice(1)))
22 : Maybe.Nothing;
23 }
24 function length(str) {
25 return str.length;
26 }
27 function map(f,str) {
28 return str.split('').map(f).join('');
29 }
30 function filter(pred,str) {
31 return str.split('').filter(pred).join('');
32 }
33 function reverse(str) {
34 return str.split('').reverse().join('');
35 }
36 function foldl(f,b,str) {
37 var len = str.length;
38 for (var i = 0; i < len; ++i) {
39 b = A2(f, str[i], b);
40 }
41 return b;
42 }
43 function foldr(f,b,str) {
44 for (var i = str.length; i--; ) {
45 b = A2(f, str[i], b);
46 }
47 return b;
48 }
50 function split(sep, str) {
51 return str.split(sep);
52 }
53 function join(sep, strs) {
54 return JS.fromList(strs).join(sep);
55 }
56 function repeat(n, chr) {
57 var result = '';
58 while (n > 0) {
59 if (n & 1) result += chr;
60 n >>= 1, chr += chr;
61 }
62 return result;
63 }
64 function center(n,chr,str) {
65 var half = n - str.length / 2;
66 return repeat(Math.ceil(half),chr) + str + repeat(half|0,chr);
67 }
68 function justifyLeft(n,chr,str) {
69 return str + repeat(n - str.length, chr);
70 }
71 function justifyRight(n,chr,str) {
72 return repeat(n - str.length, chr) + str;
73 }
75 function trim(str) {
76 return str.trim();
77 }
78 function trimLeft(str) {
79 return str.trimLeft();
80 }
81 function trimRight(str) {
82 return str.trimRight();
83 }
85 function words(str) {
86 return JS.toList(str.split(/\s+/g));
87 }
88 function unwords(str) {
89 return JS.fromList(str).join(' ');
90 }
91 function lines(str) {
92 return JS.toList(str.split(/\r\n|\r|\n/g));
93 }
94 function unlines(str) {
95 return JS.fromList(str).join('\n');
96 }
98 function toUpper(str) {
99 return str.toUpperCase();
100 }
101 function toLower(str) {
102 return str.toLowerCase();
103 }
105 function any(pred, str) {
106 for (var i = str.length; i--; ) {
107 if (pred(str[i])) return true;
108 }
109 return false;
110 }
111 function all(pred, str) {
112 for (var i = str.length; i--; ) {
113 if (!pred(str[i])) return false;
114 }
115 return true;
116 }
118 return Elm.Native.String.values = {
119 isEmpty: isEmpty,
120 cons: F2(cons),
121 uncons: uncons,
122 length: length,
123 map: F2(map),
124 filter: F2(filter),
125 reverse: reverse,
126 foldl: F3(foldl),
127 foldr: F3(foldr),
129 split: F2(split),
130 join: F2(join),
131 repeat: F2(repeat),
132 center: F3(center),
133 justifyLeft: F3(justifyLeft),
134 justifyRight: F3(justifyRight),
136 trim: trim,
137 trimLeft: trimLeft,
138 trimRight: trimRight,
140 words: words,
141 unwords: unwords,
142 lines: lines,
143 unlines: unlines,
145 toUpper: toUpper,
146 toLower: toLower,
148 any: F2(any),
149 all: F2(all)
150 };
151};