1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- /*global module:true*/
- (function(){
- var table = function(converter) {
- var tables = {}, style = 'text-align:left;', filter;
- tables.th = function(header){
- if (header.trim() === "") { return "";}
- var id = header.trim().replace(/ /g, '_').toLowerCase();
- return '<th id="' + id + '" style="'+style+'">' + header + '</th>';
- };
- tables.td = function(cell) {
- return '<td style="'+style+'">' + cell + '</td>';
- };
- tables.ths = function(){
- var out = "", i = 0, hs = [].slice.apply(arguments);
- for (i;i<hs.length;i+=1) {
- out += tables.th(hs[i]) + '\n';
- }
- return out;
- };
- tables.tds = function(){
- var out = "", i = 0, ds = [].slice.apply(arguments);
- for (i;i<ds.length;i+=1) {
- out += tables.td(ds[i]) + '\n';
- }
- return out;
- };
- tables.thead = function() {
- var out, i = 0, hs = [].slice.apply(arguments);
- out = "<thead>\n";
- out += "<tr>\n";
- out += tables.ths.apply(this, hs);
- out += "</tr>\n";
- out += "</thead>\n";
- return out;
- };
- tables.tr = function() {
- var out, i = 0, cs = [].slice.apply(arguments);
- out = "<tr>\n";
- out += tables.tds.apply(this, cs);
- out += "</tr>\n";
- return out;
- };
- filter = function(text) {
- var i=0, lines = text.split('\n'), tbl = [], line, hs, rows, out = [];
- for (i; i<lines.length;i+=1) {
- line = lines[i];
- // looks like a table heading
- if (line.trim().match(/^[|]{1}.*[|]{1}$/)) {
- line = line.trim();
- tbl.push('<table>');
- hs = line.substring(1, line.length -1).split('|');
- tbl.push(tables.thead.apply(this, hs));
- line = lines[++i];
- if (!line.trim().match(/^[|]{1}[-=| ]+[|]{1}$/)) {
- // not a table rolling back
- line = lines[--i];
- }
- else {
- line = lines[++i];
- tbl.push('<tbody>');
- while (line.trim().match(/^[|]{1}.*[|]{1}$/)) {
- line = line.trim();
- tbl.push(tables.tr.apply(this, line.substring(1, line.length -1).split('|')));
- line = lines[++i];
- }
- tbl.push('</tbody>');
- tbl.push('</table>');
- // we are done with this table and we move along
- out.push(tbl.join('\n'));
- ++i;
- continue;
- }
- }
- out.push(line);
- }
- return out.join('\n');
- };
- return [
- {
- type: 'lang',
- filter: filter
- }
- ];
- };
- // Client-side export
- if (typeof window !== 'undefined' && window.Showdown && window.Showdown.extensions) { window.Showdown.extensions.table = table; }
- // Server-side export
- if (typeof module !== 'undefined') {
- module.exports = table;
- }
- }());
|