Skip to content

Instantly share code, notes, and snippets.

@razchiriac
Created March 3, 2017 03:35
Show Gist options
  • Save razchiriac/5bf63e1ce4dd030a79b8357d3999aded to your computer and use it in GitHub Desktop.
Save razchiriac/5bf63e1ce4dd030a79b8357d3999aded to your computer and use it in GitHub Desktop.
JS Bin // source https://jsbin.com/yoliwiq
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
</head>
<body>
<script id="jsbin-javascript">
"use strict";
var words = ["This", "is", "an", "example", "of", "text", "justification."];
var L = 16;
makeSpaces = function (n) {
var r = '';
for (var i = 0; i < n; i++) {
r += ' ';
}
return r;
};
textJustification = function (words, L) {
var rows = [];
var i = 0;
var w;
var cLen;
var rem;
// split into rows
while (typeof words !== 'undefined' && words.length > 0) {
w = words.shift();
if (w === '') w = ' ';
// console.log('1', {w})
rows[i] = [];
rows[i].push(w);
// if it only includes spaces
// string only contained whitespace (ie. spaces, tabs or line breaks)
console.log('1');
var p = rows[i].toString();
console.log({ p: p });
if (!p.replace(/\s/g, '').length) {
cLen = rows[i].join('').length;
} else {
cLen = rows[i].join(' ').length;
}
rem = L - cLen;
while (typeof words[0] !== 'undefined' && words[0].length < rem) {
w = words.shift();
if (w === '') w = ' ';
// console.log('2', {w})
rows[i].push(w);
var p = rows[i].toString();
if (!p.replace(/\s/g, '').length) {
cLen = rows[i].join('').length;
} else {
cLen = rows[i].join(' ').length;
}
rem = L - cLen;
}
i++;
}
// justify rows
for (var i = 0; i < rows.length; i++) {
var p = rows[i];
// console.log({p})
// Left justify last row
if (i === rows.length - 1 || rows[i].length === 1) {
rows[i] = rows[i].join(' ');
rows[i] += makeSpaces(L - rows[i].length);
} else {
if (rows[i].length === 2) {
cLen = rows[i].join('').length;
var spaces = makeSpaces(L - cLen);
rows[i] = rows[i].join(spaces);
} else if (rows[i].length > 2) {
var spacesArr = [];
var numGaps = rows[i].length - 1;
cLen = rows[i].join('').length;
rem = L - cLen;
// create array of spaces
for (var x = 0; x <= numGaps; x++) {
var s = 0;
if (x === 0) {
s = Math.ceil(rem / numGaps);
} else {
s = Math.floor(rem / numGaps);
}
spaces = makeSpaces(s);
spacesArr.push(spaces);
}
for (var j = 0; j < rows[i].length - 1; j++) {
var s = spacesArr.shift();
rows[i][j] += s;
}
rows[i] = rows[i].join('');
}
}
}
return rows;
};
console.table(textJustification(words, L));
</script>
<script id="jsbin-source-javascript" type="text/javascript">var words = ["This",
"is",
"an",
"example",
"of",
"text",
"justification."];
var L = 16;
makeSpaces = n => {
var r = '';
for (var i = 0; i < n; i++) {
r += ' ';
}
return r;
};
textJustification = (words, L) => {
var rows = [];
var i = 0;
var w;
var cLen;
var rem;
// split into rows
while (typeof words !== 'undefined' && words.length > 0) {
w = words.shift();
if (w === '') w = ' ';
// console.log('1', {w})
rows[i] = [];
rows[i].push(w);
// if it only includes spaces
// string only contained whitespace (ie. spaces, tabs or line breaks)
console.log('1')
var p = rows[i].toString();
console.log({p});
if (!p.replace(/\s/g, '').length) {
cLen = rows[i].join('').length;
} else {
cLen = rows[i].join(' ').length;
}
rem = L - cLen;
while (typeof words[0] !== 'undefined' && words[0].length < rem) {
w = words.shift();
if (w === '') w = ' ';
// console.log('2', {w})
rows[i].push(w);
var p = rows[i].toString();
if (!p.replace(/\s/g, '').length) {
cLen = rows[i].join('').length;
} else {
cLen = rows[i].join(' ').length;
}
rem = L - cLen;
}
i++;
}
// justify rows
for (var i = 0; i < rows.length; i++) {
var p = rows[i];
// console.log({p})
// Left justify last row
if (i === rows.length - 1 || rows[i].length === 1) {
rows[i] = rows[i].join(' ');
rows[i] += makeSpaces(L - rows[i].length);
}
else {
if (rows[i].length === 2) {
cLen = rows[i].join('').length;
var spaces = makeSpaces(L - cLen);
rows[i] = rows[i].join(spaces);
}
else if (rows[i].length > 2) {
var spacesArr = [];
var numGaps = rows[i].length - 1;
cLen = rows[i].join('').length;
rem = L - cLen;
// create array of spaces
for (var x = 0; x <= numGaps; x++) {
var s = 0;
if (x === 0) {
s = Math.ceil(rem / numGaps);
} else {
s = Math.floor(rem / numGaps);
}
spaces = makeSpaces(s);
spacesArr.push( spaces );
}
for (var j = 0; j < rows[i].length-1; j++) {
var s = spacesArr.shift();
rows[i][j] += s;
}
rows[i] = rows[i].join('');
}
}
}
return rows;
}
console.table(textJustification(words, L));
</script></body>
</html>
"use strict";
var words = ["This", "is", "an", "example", "of", "text", "justification."];
var L = 16;
makeSpaces = function (n) {
var r = '';
for (var i = 0; i < n; i++) {
r += ' ';
}
return r;
};
textJustification = function (words, L) {
var rows = [];
var i = 0;
var w;
var cLen;
var rem;
// split into rows
while (typeof words !== 'undefined' && words.length > 0) {
w = words.shift();
if (w === '') w = ' ';
// console.log('1', {w})
rows[i] = [];
rows[i].push(w);
// if it only includes spaces
// string only contained whitespace (ie. spaces, tabs or line breaks)
console.log('1');
var p = rows[i].toString();
console.log({ p: p });
if (!p.replace(/\s/g, '').length) {
cLen = rows[i].join('').length;
} else {
cLen = rows[i].join(' ').length;
}
rem = L - cLen;
while (typeof words[0] !== 'undefined' && words[0].length < rem) {
w = words.shift();
if (w === '') w = ' ';
// console.log('2', {w})
rows[i].push(w);
var p = rows[i].toString();
if (!p.replace(/\s/g, '').length) {
cLen = rows[i].join('').length;
} else {
cLen = rows[i].join(' ').length;
}
rem = L - cLen;
}
i++;
}
// justify rows
for (var i = 0; i < rows.length; i++) {
var p = rows[i];
// console.log({p})
// Left justify last row
if (i === rows.length - 1 || rows[i].length === 1) {
rows[i] = rows[i].join(' ');
rows[i] += makeSpaces(L - rows[i].length);
} else {
if (rows[i].length === 2) {
cLen = rows[i].join('').length;
var spaces = makeSpaces(L - cLen);
rows[i] = rows[i].join(spaces);
} else if (rows[i].length > 2) {
var spacesArr = [];
var numGaps = rows[i].length - 1;
cLen = rows[i].join('').length;
rem = L - cLen;
// create array of spaces
for (var x = 0; x <= numGaps; x++) {
var s = 0;
if (x === 0) {
s = Math.ceil(rem / numGaps);
} else {
s = Math.floor(rem / numGaps);
}
spaces = makeSpaces(s);
spacesArr.push(spaces);
}
for (var j = 0; j < rows[i].length - 1; j++) {
var s = spacesArr.shift();
rows[i][j] += s;
}
rows[i] = rows[i].join('');
}
}
}
return rows;
};
console.table(textJustification(words, L));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment