@@ -6,6 +6,7 @@ Elm.Native.String.make = function(elm) {
66 if ('values' in Elm.Native.String)
77 return elm.Native.String.values = Elm.Native.String.values;
88
9+ var Char = Elm.Char.make(elm);
910 var Maybe = Elm.Maybe.make(elm);
1011 var JS = Elm.JavaScript.make(elm);
1112 var Tuple2 = Elm.Native.Utils.make(elm).Tuple2;
@@ -61,14 +62,14 @@ Elm.Native.String.make = function(elm) {
6162 }
6263 return result;
6364 }
64− function center(n,chr,str) {
65+ function pad(n,chr,str) {
6566 var half = n - str.length / 2;
6667 return repeat(Math.ceil(half),chr) + str + repeat(half|0,chr);
6768 }
68− function justifyLeft(n,chr,str) {
69+ function padRight(n,chr,str) {
6970 return str + repeat(n - str.length, chr);
7071 }
71− function justifyRight(n,chr,str) {
72+ function padLeft(n,chr,str) {
7273 return repeat(n - str.length, chr) + str;
7374 }
7475
@@ -115,6 +116,62 @@ Elm.Native.String.make = function(elm) {
115116 return true;
116117 }
117118
119+ function contains(sub, str) {
120+ return str.indexOf(sub) > -1;
121+ }
122+ function startsWith(sub, str) {
123+ return str.indexOf(sub) === 0;
124+ }
125+ function endsWith(sub, str) {
126+ return str.lastIndexOf(sub) === str.length - sub.length;
127+ }
128+ function indexes(sub, str) {
129+ var subLen = sub.length;
130+ var i = 0;
131+ var is = [];
132+ while ((i = str.indexOf(sub, i)) > -1) {
133+ is.push(i);
134+ i = i + subLen;
135+ }
136+ return JS.toList(is);
137+ }
138+
139+ function toInt(str) {
140+ var s = JS.fromString(str);
141+ var len = s.length;
142+ if (len === 0) { return Maybe.Nothing; }
143+ var start = 0;
144+ if (s[0] == '-') {
145+ if (len === 1) { return Maybe.Nothing; }
146+ start = 1;
147+ }
148+ for (var i = start; i < len; ++i) {
149+ if (!Char.isDigit(s[i])) { return Maybe.Nothing; }
150+ }
151+ return Maybe.Just(parseInt(s, 10));
152+ }
153+
154+ function toFloat(str) {
155+ var s = JS.fromString(str);
156+ var len = s.length;
157+ if (len === 0) { return Maybe.Nothing; }
158+ var start = 0;
159+ if (s[0] == '-') {
160+ if (len === 1) { return Maybe.Nothing; }
161+ start = 1;
162+ }
163+ var dotCount = 0;
164+ for (var i = start; i < len; ++i) {
165+ if (Char.isDigit(s[i])) { continue; }
166+ if (s[i] === '.') {
167+ dotCount += 1;
168+ if (dotCount <= 1) { continue; }
169+ }
170+ return Maybe.Nothing;
171+ }
172+ return Maybe.Just(parseFloat(s));
173+ }
174+
118175 return Elm.Native.String.values = {
119176 isEmpty: isEmpty,
120177 cons: F2(cons),
@@ -129,9 +186,10 @@ Elm.Native.String.make = function(elm) {
129186 split: F2(split),
130187 join: F2(join),
131188 repeat: F2(repeat),
132− center: F3(center),
133− justifyLeft: F3(justifyLeft),
134− justifyRight: F3(justifyRight),
189+
190+ pad: F3(pad),
191+ padLeft: F3(padLeft),
192+ padRight: F3(padRight),
135193
136194 trim: trim,
137195 trimLeft: trimLeft,
@@ -146,6 +204,14 @@ Elm.Native.String.make = function(elm) {
146204 toLower: toLower,
147205
148206 any: F2(any),
149− all: F2(all)
207+ all: F2(all),
208+
209+ contains: F2(contains),
210+ startsWith: F2(startsWith),
211+ endsWith: F2(endsWith),
212+ indexes: F2(indexes),
213+
214+ toInt: toInt,
215+ toFloat: toFloat,
150216 };
151217};