add
This commit is contained in:
		
							
								
								
									
										113
									
								
								pkg/jquery.terminal/js/ascii_table.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										113
									
								
								pkg/jquery.terminal/js/ascii_table.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,113 @@
 | 
			
		||||
/**@license
 | 
			
		||||
 *       __ _____                     ________                              __
 | 
			
		||||
 *      / // _  /__ __ _____ ___ __ _/__  ___/__ ___ ______ __ __  __ ___  / /
 | 
			
		||||
 *  __ / // // // // // _  // _// // / / // _  // _//     // //  \/ // _ \/ /
 | 
			
		||||
 * /  / // // // // // ___// / / // / / // ___// / / / / // // /\  // // / /__
 | 
			
		||||
 * \___//____ \\___//____//_/ _\_  / /_//____//_/ /_/ /_//_//_/ /_/ \__\_\___/
 | 
			
		||||
 *           \/              /____/
 | 
			
		||||
 * http://terminal.jcubic.pl
 | 
			
		||||
 *
 | 
			
		||||
 * utility that renders simple ascii table, like the one from mysql cli tool
 | 
			
		||||
 * it was first created for leash shell https://leash.jcubic.pl
 | 
			
		||||
 *
 | 
			
		||||
 * usage:
 | 
			
		||||
 *
 | 
			
		||||
 *        var arr = [[1,2,3,4,5], ["lorem", "ipsum", "dolor", "sit", "amet"]];
 | 
			
		||||
 *        term.echo(ascii_table(arr));
 | 
			
		||||
 *        // or
 | 
			
		||||
 *        term.echo(ascii_table(arr, true)); // this will render first row as header
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (c) 2018-2019 Jakub Jankiewicz <https://jcubic.pl/me>
 | 
			
		||||
 * Released under the MIT license
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
/* global define, module, global, wcwidth, require */
 | 
			
		||||
(function(factory) {
 | 
			
		||||
    var root = typeof window !== 'undefined' ? window : global;
 | 
			
		||||
    if (typeof define === 'function' && define.amd) {
 | 
			
		||||
        // AMD. Register as an anonymous module.
 | 
			
		||||
        define(['wcwidth'], function(wcwidth) {
 | 
			
		||||
            return (root.ascii_table = factory(wcwidth));
 | 
			
		||||
        });
 | 
			
		||||
    } else if (typeof module === 'object' && module.exports) {
 | 
			
		||||
        // Node/CommonJS
 | 
			
		||||
        module.exports = factory(require('wcwidth'));
 | 
			
		||||
    } else {
 | 
			
		||||
        root.ascii_table = factory(root.wcwidth);
 | 
			
		||||
    }
 | 
			
		||||
})(function(wcwidth, undefined) {
 | 
			
		||||
    var strlen = (function() {
 | 
			
		||||
        if (typeof wcwidth === 'undefined') {
 | 
			
		||||
            return function(string) {
 | 
			
		||||
                return string.length;
 | 
			
		||||
            };
 | 
			
		||||
        } else {
 | 
			
		||||
            return wcwidth;
 | 
			
		||||
        }
 | 
			
		||||
    })();
 | 
			
		||||
    function ascii_table(array, header) {
 | 
			
		||||
        if (!array.length) {
 | 
			
		||||
            return '';
 | 
			
		||||
        }
 | 
			
		||||
        for (var i = array.length - 1; i >= 0; i--) {
 | 
			
		||||
            var row = array[i];
 | 
			
		||||
            var stacks = [];
 | 
			
		||||
            for (var j = 0; j < row.length; j++) {
 | 
			
		||||
                var new_lines = row[j].toString().replace(/\r/g).split("\n");
 | 
			
		||||
                row[j] = new_lines.shift();
 | 
			
		||||
                stacks.push(new_lines);
 | 
			
		||||
            }
 | 
			
		||||
            var stack_lengths = stacks.map(function(column) {
 | 
			
		||||
                return column.length;
 | 
			
		||||
            });
 | 
			
		||||
            var new_rows_count = Math.max.apply(Math, stack_lengths);
 | 
			
		||||
            for (var k = new_rows_count - 1; k >= 0; k--) {
 | 
			
		||||
                array.splice(i + 1, 0, stacks.map(function(column) {
 | 
			
		||||
                    return column[k] || "";
 | 
			
		||||
                }));
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        var lengths = array[0].map(function(_, i) {
 | 
			
		||||
            var col = array.map(function(row) {
 | 
			
		||||
                if (row[i] != undefined) {
 | 
			
		||||
                    var len = strlen(row[i]);
 | 
			
		||||
                    if (row[i].match(/\t/g)) {
 | 
			
		||||
                        // tab is 4 spaces
 | 
			
		||||
                        len += row[i].match(/\t/g).length*3;
 | 
			
		||||
                    }
 | 
			
		||||
                    return len;
 | 
			
		||||
                } else {
 | 
			
		||||
                    return 0;
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
            return Math.max.apply(Math, col);
 | 
			
		||||
        });
 | 
			
		||||
        // column padding
 | 
			
		||||
        array = array.map(function(row) {
 | 
			
		||||
            return '| ' + row.map(function(item, i) {
 | 
			
		||||
                var size = strlen(item);
 | 
			
		||||
                if (item.match(/\t/g)) {
 | 
			
		||||
                    // tab is 4 spaces
 | 
			
		||||
                    size += item.match(/\t/g).length*3;
 | 
			
		||||
                }
 | 
			
		||||
                if (size < lengths[i]) {
 | 
			
		||||
                    item += new Array(lengths[i] - size + 1).join(' ');
 | 
			
		||||
                }
 | 
			
		||||
                return item;
 | 
			
		||||
            }).join(' | ') + ' |';
 | 
			
		||||
        });
 | 
			
		||||
        array = array.map(function(line) {
 | 
			
		||||
            return line.replace(/&(?![^;]+;)/g, '&');
 | 
			
		||||
        });
 | 
			
		||||
        var sep = '+' + lengths.map(function(length) {
 | 
			
		||||
            return new Array(length + 3).join('-');
 | 
			
		||||
        }).join('+') + '+';
 | 
			
		||||
        if (header) {
 | 
			
		||||
            return sep + '\n' + array[0] + '\n' + sep + '\n' +
 | 
			
		||||
                array.slice(1).join('\n') + '\n' + sep;
 | 
			
		||||
        } else {
 | 
			
		||||
            return sep + '\n' + array.join('\n') + '\n' + sep;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return ascii_table;
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										69
									
								
								pkg/jquery.terminal/js/dterm.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								pkg/jquery.terminal/js/dterm.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,69 @@
 | 
			
		||||
/*!
 | 
			
		||||
 * Example plugin using JQuery Terminal Emulator
 | 
			
		||||
 * Copyright (C) 2010-2016 Jakub Jankiewicz <http://jcubic.pl>
 | 
			
		||||
 *
 | 
			
		||||
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
 * of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
 * in the Software without restriction, including without limitation the rights
 | 
			
		||||
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
			
		||||
 * copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
 * furnished to do so, subject to the following conditions:
 | 
			
		||||
 *
 | 
			
		||||
 * The above copyright notice and this permission notice shall be included in all
 | 
			
		||||
 * copies or substantial portions of the Software.
 | 
			
		||||
 *
 | 
			
		||||
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 | 
			
		||||
 * SOFTWARE.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
(function($) {
 | 
			
		||||
    $.extend_if_has = function(desc, source, array) {
 | 
			
		||||
        for (var i=array.length;i--;) {
 | 
			
		||||
            if (typeof source[array[i]] != 'undefined') {
 | 
			
		||||
                desc[array[i]] = source[array[i]];
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return desc;
 | 
			
		||||
    };
 | 
			
		||||
    $.fn.dterm = function(interpreter, options) {
 | 
			
		||||
        var op = $.extend_if_has({}, options, 
 | 
			
		||||
                                   ['greetings', 'prompt', 'onInit',
 | 
			
		||||
                                    'onExit', 'clear',
 | 
			
		||||
                                    'login', 'name', 'exit']);
 | 
			
		||||
        op.enabled = false;
 | 
			
		||||
        var terminal = this.terminal(interpreter, op).css('overflow', 'hidden');
 | 
			
		||||
        if (!options.title) {
 | 
			
		||||
            options.title = 'JQuery Terminal Emulator';
 | 
			
		||||
        }
 | 
			
		||||
        if (options.logoutOnClose) {
 | 
			
		||||
            options.close = function(e, ui) {
 | 
			
		||||
                terminal.logout();
 | 
			
		||||
                terminal.clear();
 | 
			
		||||
            };
 | 
			
		||||
        } else {
 | 
			
		||||
            options.close = function(e, ui) {
 | 
			
		||||
                terminal.disable();
 | 
			
		||||
            };
 | 
			
		||||
        }
 | 
			
		||||
        var self = this;
 | 
			
		||||
        this.dialog($.extend(options, {
 | 
			
		||||
            resizeStop: function(e, ui) {
 | 
			
		||||
                var content = self.find('.ui-dialog-content');
 | 
			
		||||
                terminal.resize(content.width(), content.height());
 | 
			
		||||
            },
 | 
			
		||||
            open: function(e, ui) {
 | 
			
		||||
                terminal.focus();
 | 
			
		||||
                terminal.resize();
 | 
			
		||||
            },
 | 
			
		||||
            show: 'fade',
 | 
			
		||||
            closeOnEscape: false
 | 
			
		||||
        }));
 | 
			
		||||
        self.terminal = terminal;
 | 
			
		||||
        return self;
 | 
			
		||||
    };
 | 
			
		||||
})(jQuery);
 | 
			
		||||
							
								
								
									
										2
									
								
								pkg/jquery.terminal/js/jquery.mousewheel-min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								pkg/jquery.terminal/js/jquery.mousewheel-min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
(function(c){function g(a){var b=a||window.event,i=[].slice.call(arguments,1),e=0,h=0,f=0;a=c.event.fix(b);a.type="mousewheel";if(b.wheelDelta)e=b.wheelDelta/120;if(b.detail)e=-b.detail/3;f=e;if(b.axis!==undefined&&b.axis===b.HORIZONTAL_AXIS){f=0;h=-1*e}if(b.wheelDeltaY!==undefined)f=b.wheelDeltaY/120;if(b.wheelDeltaX!==undefined)h=-1*b.wheelDeltaX/120;i.unshift(a,e,h,f);return(c.event.dispatch||c.event.handle).apply(this,i)}var d=["DOMMouseScroll","mousewheel"];if(c.event.fixHooks)for(var j=d.length;j;)c.event.fixHooks[d[--j]]=
 | 
			
		||||
c.event.mouseHooks;c.event.special.mousewheel={setup:function(){if(this.addEventListener)for(var a=d.length;a;)this.addEventListener(d[--a],g,false);else this.onmousewheel=g},teardown:function(){if(this.removeEventListener)for(var a=d.length;a;)this.removeEventListener(d[--a],g,false);else this.onmousewheel=null}};c.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})})(jQuery);
 | 
			
		||||
							
								
								
									
										37
									
								
								pkg/jquery.terminal/js/jquery.terminal.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								pkg/jquery.terminal/js/jquery.terminal.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										317
									
								
								pkg/jquery.terminal/js/unix_formatting.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										317
									
								
								pkg/jquery.terminal/js/unix_formatting.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,317 @@
 | 
			
		||||
/**@license
 | 
			
		||||
 *       __ _____                     ________                              __
 | 
			
		||||
 *      / // _  /__ __ _____ ___ __ _/__  ___/__ ___ ______ __ __  __ ___  / /
 | 
			
		||||
 *  __ / // // // // // _  // _// // / / // _  // _//     // //  \/ // _ \/ /
 | 
			
		||||
 * /  / // // // // // ___// / / // / / // ___// / / / / // // /\  // // / /__
 | 
			
		||||
 * \___//____ \\___//____//_/ _\_  / /_//____//_/ /_/ /_//_//_/ /_/ \__\_\___/
 | 
			
		||||
 *           \/              /____/
 | 
			
		||||
 * http://terminal.jcubic.pl
 | 
			
		||||
 *
 | 
			
		||||
 * This is example of how to create custom formatter for jQuery Terminal
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (c) 2014-2016 Jakub Jankiewicz <http://jcubic.pl>
 | 
			
		||||
 * Released under the MIT license
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
(function($) {
 | 
			
		||||
    if (!$.terminal) {
 | 
			
		||||
        throw new Error('$.terminal is not defined');
 | 
			
		||||
    }
 | 
			
		||||
    // ---------------------------------------------------------------------
 | 
			
		||||
    // :: Replace overtyping (from man) formatting with terminal formatting
 | 
			
		||||
    // ---------------------------------------------------------------------
 | 
			
		||||
    $.terminal.overtyping = function(string) {
 | 
			
		||||
        return string.replace(/((?:_\x08.|.\x08_)+)/g, function(full, g) {
 | 
			
		||||
            var striped = full.replace(/_x08|\x08_|_\u0008|\u0008_/g, '');
 | 
			
		||||
            return '[[u;;]' + striped + ']';
 | 
			
		||||
        }).replace(/((?:.\x08.)+)/g, function(full, g) {
 | 
			
		||||
            return '[[b;#fff;]' + full.replace(/(.)(?:\x08|\u0008)(.)/g,
 | 
			
		||||
                                               function(full, g1, g2) {
 | 
			
		||||
                                                   return g2;
 | 
			
		||||
                                               }) + ']';
 | 
			
		||||
        });
 | 
			
		||||
    };
 | 
			
		||||
    // ---------------------------------------------------------------------
 | 
			
		||||
    // :: Html colors taken from ANSI formatting in Linux Terminal
 | 
			
		||||
    // ---------------------------------------------------------------------
 | 
			
		||||
    $.terminal.ansi_colors = {
 | 
			
		||||
        normal: {
 | 
			
		||||
            black: '#000',
 | 
			
		||||
            red: '#A00',
 | 
			
		||||
            green: '#008400',
 | 
			
		||||
            yellow: '#A50',
 | 
			
		||||
            blue: '#00A',
 | 
			
		||||
            magenta: '#A0A',
 | 
			
		||||
            cyan: '#0AA',
 | 
			
		||||
            white: '#AAA'
 | 
			
		||||
        },
 | 
			
		||||
        faited: {
 | 
			
		||||
            black: '#000',
 | 
			
		||||
            red: '#640000',
 | 
			
		||||
            green: '#006100',
 | 
			
		||||
            yellow: '#737300',
 | 
			
		||||
            blue: '#000087',
 | 
			
		||||
            magenta: '#650065',
 | 
			
		||||
            cyan: '#008787',
 | 
			
		||||
            white: '#818181'
 | 
			
		||||
        },
 | 
			
		||||
        bold: {
 | 
			
		||||
            black: '#000',
 | 
			
		||||
            red: '#F55',
 | 
			
		||||
            green: '#44D544',
 | 
			
		||||
            yellow: '#FF5',
 | 
			
		||||
            blue: '#55F',
 | 
			
		||||
            magenta: '#F5F',
 | 
			
		||||
            cyan: '#5FF',
 | 
			
		||||
            white: '#FFF'
 | 
			
		||||
        },
 | 
			
		||||
        // XTerm 8-bit pallete
 | 
			
		||||
        palette: [
 | 
			
		||||
            '#000000', '#AA0000', '#00AA00', '#AA5500', '#0000AA', '#AA00AA',
 | 
			
		||||
            '#00AAAA', '#AAAAAA', '#555555', '#FF5555', '#55FF55', '#FFFF55',
 | 
			
		||||
            '#5555FF', '#FF55FF', '#55FFFF', '#FFFFFF', '#000000', '#00005F',
 | 
			
		||||
            '#000087', '#0000AF', '#0000D7', '#0000FF', '#005F00', '#005F5F',
 | 
			
		||||
            '#005F87', '#005FAF', '#005FD7', '#005FFF', '#008700', '#00875F',
 | 
			
		||||
            '#008787', '#0087AF', '#0087D7', '#0087FF', '#00AF00', '#00AF5F',
 | 
			
		||||
            '#00AF87', '#00AFAF', '#00AFD7', '#00AFFF', '#00D700', '#00D75F',
 | 
			
		||||
            '#00D787', '#00D7AF', '#00D7D7', '#00D7FF', '#00FF00', '#00FF5F',
 | 
			
		||||
            '#00FF87', '#00FFAF', '#00FFD7', '#00FFFF', '#5F0000', '#5F005F',
 | 
			
		||||
            '#5F0087', '#5F00AF', '#5F00D7', '#5F00FF', '#5F5F00', '#5F5F5F',
 | 
			
		||||
            '#5F5F87', '#5F5FAF', '#5F5FD7', '#5F5FFF', '#5F8700', '#5F875F',
 | 
			
		||||
            '#5F8787', '#5F87AF', '#5F87D7', '#5F87FF', '#5FAF00', '#5FAF5F',
 | 
			
		||||
            '#5FAF87', '#5FAFAF', '#5FAFD7', '#5FAFFF', '#5FD700', '#5FD75F',
 | 
			
		||||
            '#5FD787', '#5FD7AF', '#5FD7D7', '#5FD7FF', '#5FFF00', '#5FFF5F',
 | 
			
		||||
            '#5FFF87', '#5FFFAF', '#5FFFD7', '#5FFFFF', '#870000', '#87005F',
 | 
			
		||||
            '#870087', '#8700AF', '#8700D7', '#8700FF', '#875F00', '#875F5F',
 | 
			
		||||
            '#875F87', '#875FAF', '#875FD7', '#875FFF', '#878700', '#87875F',
 | 
			
		||||
            '#878787', '#8787AF', '#8787D7', '#8787FF', '#87AF00', '#87AF5F',
 | 
			
		||||
            '#87AF87', '#87AFAF', '#87AFD7', '#87AFFF', '#87D700', '#87D75F',
 | 
			
		||||
            '#87D787', '#87D7AF', '#87D7D7', '#87D7FF', '#87FF00', '#87FF5F',
 | 
			
		||||
            '#87FF87', '#87FFAF', '#87FFD7', '#87FFFF', '#AF0000', '#AF005F',
 | 
			
		||||
            '#AF0087', '#AF00AF', '#AF00D7', '#AF00FF', '#AF5F00', '#AF5F5F',
 | 
			
		||||
            '#AF5F87', '#AF5FAF', '#AF5FD7', '#AF5FFF', '#AF8700', '#AF875F',
 | 
			
		||||
            '#AF8787', '#AF87AF', '#AF87D7', '#AF87FF', '#AFAF00', '#AFAF5F',
 | 
			
		||||
            '#AFAF87', '#AFAFAF', '#AFAFD7', '#AFAFFF', '#AFD700', '#AFD75F',
 | 
			
		||||
            '#AFD787', '#AFD7AF', '#AFD7D7', '#AFD7FF', '#AFFF00', '#AFFF5F',
 | 
			
		||||
            '#AFFF87', '#AFFFAF', '#AFFFD7', '#AFFFFF', '#D70000', '#D7005F',
 | 
			
		||||
            '#D70087', '#D700AF', '#D700D7', '#D700FF', '#D75F00', '#D75F5F',
 | 
			
		||||
            '#D75F87', '#D75FAF', '#D75FD7', '#D75FFF', '#D78700', '#D7875F',
 | 
			
		||||
            '#D78787', '#D787AF', '#D787D7', '#D787FF', '#D7AF00', '#D7AF5F',
 | 
			
		||||
            '#D7AF87', '#D7AFAF', '#D7AFD7', '#D7AFFF', '#D7D700', '#D7D75F',
 | 
			
		||||
            '#D7D787', '#D7D7AF', '#D7D7D7', '#D7D7FF', '#D7FF00', '#D7FF5F',
 | 
			
		||||
            '#D7FF87', '#D7FFAF', '#D7FFD7', '#D7FFFF', '#FF0000', '#FF005F',
 | 
			
		||||
            '#FF0087', '#FF00AF', '#FF00D7', '#FF00FF', '#FF5F00', '#FF5F5F',
 | 
			
		||||
            '#FF5F87', '#FF5FAF', '#FF5FD7', '#FF5FFF', '#FF8700', '#FF875F',
 | 
			
		||||
            '#FF8787', '#FF87AF', '#FF87D7', '#FF87FF', '#FFAF00', '#FFAF5F',
 | 
			
		||||
            '#FFAF87', '#FFAFAF', '#FFAFD7', '#FFAFFF', '#FFD700', '#FFD75F',
 | 
			
		||||
            '#FFD787', '#FFD7AF', '#FFD7D7', '#FFD7FF', '#FFFF00', '#FFFF5F',
 | 
			
		||||
            '#FFFF87', '#FFFFAF', '#FFFFD7', '#FFFFFF', '#080808', '#121212',
 | 
			
		||||
            '#1C1C1C', '#262626', '#303030', '#3A3A3A', '#444444', '#4E4E4E',
 | 
			
		||||
            '#585858', '#626262', '#6C6C6C', '#767676', '#808080', '#8A8A8A',
 | 
			
		||||
            '#949494', '#9E9E9E', '#A8A8A8', '#B2B2B2', '#BCBCBC', '#C6C6C6',
 | 
			
		||||
            '#D0D0D0', '#DADADA', '#E4E4E4', '#EEEEEE'
 | 
			
		||||
        ]
 | 
			
		||||
    };
 | 
			
		||||
    // ---------------------------------------------------------------------
 | 
			
		||||
    // :: Replace ANSI formatting with terminal formatting
 | 
			
		||||
    // ---------------------------------------------------------------------
 | 
			
		||||
    $.terminal.from_ansi = (function() {
 | 
			
		||||
        var color_list = {
 | 
			
		||||
            30: 'black',
 | 
			
		||||
            31: 'red',
 | 
			
		||||
            32: 'green',
 | 
			
		||||
            33: 'yellow',
 | 
			
		||||
            34: 'blue',
 | 
			
		||||
            35: 'magenta',
 | 
			
		||||
            36: 'cyan',
 | 
			
		||||
            37: 'white',
 | 
			
		||||
 | 
			
		||||
            39: 'inherit' // default color
 | 
			
		||||
        };
 | 
			
		||||
        var background_list = {
 | 
			
		||||
            40: 'black',
 | 
			
		||||
            41: 'red',
 | 
			
		||||
            42: 'green',
 | 
			
		||||
            43: 'yellow',
 | 
			
		||||
            44: 'blue',
 | 
			
		||||
            45: 'magenta',
 | 
			
		||||
            46: 'cyan',
 | 
			
		||||
            47: 'white',
 | 
			
		||||
 | 
			
		||||
            49: 'transparent' // default background
 | 
			
		||||
        };
 | 
			
		||||
        function format_ansi(code) {
 | 
			
		||||
            var controls = code.split(';');
 | 
			
		||||
            var num;
 | 
			
		||||
            var faited = false;
 | 
			
		||||
            var reverse = false;
 | 
			
		||||
            var bold = false;
 | 
			
		||||
            var styles = [];
 | 
			
		||||
            var output_color = '';
 | 
			
		||||
            var output_background = '';
 | 
			
		||||
            var _8bit_color = false;
 | 
			
		||||
            var _8bit_background = false;
 | 
			
		||||
            var process_8bit = false;
 | 
			
		||||
            var palette = $.terminal.ansi_colors.palette;
 | 
			
		||||
            for(var i in controls) {
 | 
			
		||||
                if (controls.hasOwnProperty(i)) {
 | 
			
		||||
                    num = parseInt(controls[i], 10);
 | 
			
		||||
                    if (process_8bit && (_8bit_background || _8bit_color)) {
 | 
			
		||||
                        if (_8bit_color && palette[num]) {
 | 
			
		||||
                            output_color = palette[num];
 | 
			
		||||
                        }
 | 
			
		||||
                        if (_8bit_background && palette[num]) {
 | 
			
		||||
                            output_background = palette[num];
 | 
			
		||||
                        }
 | 
			
		||||
                    } else {
 | 
			
		||||
                        switch(num) {
 | 
			
		||||
                        case 1:
 | 
			
		||||
                            styles.push('b');
 | 
			
		||||
                            bold = true;
 | 
			
		||||
                            faited = false;
 | 
			
		||||
                            break;
 | 
			
		||||
                        case 4:
 | 
			
		||||
                            styles.push('u');
 | 
			
		||||
                            break;
 | 
			
		||||
                        case 3:
 | 
			
		||||
                            styles.push('i');
 | 
			
		||||
                            break;
 | 
			
		||||
                        case 5:
 | 
			
		||||
                            process_8bit = true;
 | 
			
		||||
                            break;
 | 
			
		||||
                        case 38:
 | 
			
		||||
                            _8bit_color = true;
 | 
			
		||||
                            break;
 | 
			
		||||
                        case 48:
 | 
			
		||||
                            _8bit_background = true;
 | 
			
		||||
                            break;
 | 
			
		||||
                        case 2:
 | 
			
		||||
                            faited = true;
 | 
			
		||||
                            bold = false;
 | 
			
		||||
                            break;
 | 
			
		||||
                        case 7:
 | 
			
		||||
                            reverse = true;
 | 
			
		||||
                            break;
 | 
			
		||||
                        default:
 | 
			
		||||
                            if (controls.indexOf('5') == -1) {
 | 
			
		||||
                                if (color_list[num]) {
 | 
			
		||||
                                    output_color = color_list[num];
 | 
			
		||||
                                }
 | 
			
		||||
                                if (background_list[num]) {
 | 
			
		||||
                                    output_background = background_list[num];
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if (reverse) {
 | 
			
		||||
                if (output_color || output_background) {
 | 
			
		||||
                    var tmp = output_background;
 | 
			
		||||
                    output_background = output_color;
 | 
			
		||||
                    output_color = tmp;
 | 
			
		||||
                } else {
 | 
			
		||||
                    output_color = 'black';
 | 
			
		||||
                    output_background = 'white';
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            var colors, color, background, backgrounds;
 | 
			
		||||
            if (bold) {
 | 
			
		||||
                colors = backgrounds = $.terminal.ansi_colors.bold;
 | 
			
		||||
            } else if (faited) {
 | 
			
		||||
                colors = backgrounds = $.terminal.ansi_colors.faited;
 | 
			
		||||
            } else {
 | 
			
		||||
                colors = backgrounds = $.terminal.ansi_colors.normal;
 | 
			
		||||
            }
 | 
			
		||||
            if (_8bit_color) {
 | 
			
		||||
                color = output_color;
 | 
			
		||||
            } else if (output_color == 'inherit') {
 | 
			
		||||
                color = output_color;
 | 
			
		||||
            } else {
 | 
			
		||||
                color = colors[output_color];
 | 
			
		||||
            }
 | 
			
		||||
            if (_8bit_background) {
 | 
			
		||||
                background = output_background;
 | 
			
		||||
            } else if (output_background == 'transparent') {
 | 
			
		||||
                background = output_background;
 | 
			
		||||
            } else {
 | 
			
		||||
                background = backgrounds[output_background];
 | 
			
		||||
            }
 | 
			
		||||
            return [styles.join(''), color, background];
 | 
			
		||||
        }
 | 
			
		||||
        return function(input) {
 | 
			
		||||
            //merge multiple codes
 | 
			
		||||
            /*input = input.replace(/((?:\x1B\[[0-9;]*[A-Za-z])*)/g, function(group) {
 | 
			
		||||
                return group.replace(/m\x1B\[/g, ';');
 | 
			
		||||
            });*/
 | 
			
		||||
            var splitted = input.split(/(\x1B\[[0-9;]*[A-Za-z])/g);
 | 
			
		||||
            if (splitted.length == 1) {
 | 
			
		||||
                return input;
 | 
			
		||||
            }
 | 
			
		||||
            var output = [];
 | 
			
		||||
            //skip closing at the begining
 | 
			
		||||
            if (splitted.length > 3) {
 | 
			
		||||
                var str = splitted.slice(0,3).join('');
 | 
			
		||||
                if (str == '[0m' || str == '[m') {
 | 
			
		||||
                    splitted = splitted.slice(3);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            var next, prev_color, prev_background, code, match;
 | 
			
		||||
            var inside = false;
 | 
			
		||||
            for (var i=0; i<splitted.length; ++i) {
 | 
			
		||||
                match = splitted[i].match(/^\x1B\[([0-9;]*)([A-Za-z])$/);
 | 
			
		||||
                if (match) {
 | 
			
		||||
                    switch (match[2]) {
 | 
			
		||||
                    case 'm':
 | 
			
		||||
                        if (match[1] !== '0') {
 | 
			
		||||
                            code = format_ansi(match[1]);
 | 
			
		||||
                        }
 | 
			
		||||
                        if (inside) {
 | 
			
		||||
                            output.push(']');
 | 
			
		||||
                            if (match[1] === '0' || match[1] === '') {
 | 
			
		||||
                                //just closing
 | 
			
		||||
                                inside = false;
 | 
			
		||||
                                prev_color = prev_background = '';
 | 
			
		||||
                            } else {
 | 
			
		||||
                                // someone forget to close - move to next
 | 
			
		||||
                                code[1] = code[1] || prev_color;
 | 
			
		||||
                                code[2] = code[2] || prev_background;
 | 
			
		||||
                                output.push('[[' + code.join(';') + ']');
 | 
			
		||||
                                // store colors to next use
 | 
			
		||||
                                if (code[1]) {
 | 
			
		||||
                                    prev_color = code[1];
 | 
			
		||||
                                }
 | 
			
		||||
                                if (code[2]) {
 | 
			
		||||
                                    prev_background = code[2];
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                        } else {
 | 
			
		||||
                            if (match[1] != '0') {
 | 
			
		||||
                                inside = true;
 | 
			
		||||
                                code[1] = code[1] || prev_color;
 | 
			
		||||
                                code[2] = code[2] || prev_background;
 | 
			
		||||
                                output.push('[[' + code.join(';') + ']');
 | 
			
		||||
                                // store colors to next use
 | 
			
		||||
                                if (code[1]) {
 | 
			
		||||
                                    prev_color = code[1];
 | 
			
		||||
                                }
 | 
			
		||||
                                if (code[2]) {
 | 
			
		||||
                                    prev_background = code[2];
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                        break;
 | 
			
		||||
                    }
 | 
			
		||||
                } else {
 | 
			
		||||
                    output.push(splitted[i]);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if (inside) {
 | 
			
		||||
                output.push(']');
 | 
			
		||||
            }
 | 
			
		||||
            return output.join(''); //.replace(/\[\[[^\]]+\]\]/g, '');
 | 
			
		||||
        };
 | 
			
		||||
    })();
 | 
			
		||||
    $.terminal.defaults.formatters.push($.terminal.overtyping);
 | 
			
		||||
    $.terminal.defaults.formatters.push($.terminal.from_ansi);
 | 
			
		||||
})(jQuery);
 | 
			
		||||
							
								
								
									
										48
									
								
								pkg/jquery.terminal/js/xml_formatting.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								pkg/jquery.terminal/js/xml_formatting.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,48 @@
 | 
			
		||||
/**@license
 | 
			
		||||
 *       __ _____                     ________                              __
 | 
			
		||||
 *      / // _  /__ __ _____ ___ __ _/__  ___/__ ___ ______ __ __  __ ___  / /
 | 
			
		||||
 *  __ / // // // // // _  // _// // / / // _  // _//     // //  \/ // _ \/ /
 | 
			
		||||
 * /  / // // // // // ___// / / // / / // ___// / / / / // // /\  // // / /__
 | 
			
		||||
 * \___//____ \\___//____//_/ _\_  / /_//____//_/ /_/ /_//_//_/ /_/ \__\_\___/
 | 
			
		||||
 *           \/              /____/
 | 
			
		||||
 * http://terminal.jcubic.pl
 | 
			
		||||
 *
 | 
			
		||||
 * This is example of how to create custom formatter for jQuery Terminal
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (c) 2014-2016 Jakub Jankiewicz <http://jcubic.pl>
 | 
			
		||||
 * Released under the MIT license
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
(function($) {
 | 
			
		||||
    if (!$.terminal) {
 | 
			
		||||
        throw new Error('$.terminal is not defined');
 | 
			
		||||
    }
 | 
			
		||||
    // this formatter allow to echo xml where tags are colors like:
 | 
			
		||||
    // <red>hello <navy>blue</navy> world</red>
 | 
			
		||||
    $.terminal.defaults.formatters.push(function(string) {
 | 
			
		||||
        var stack = [];
 | 
			
		||||
        var output = [];
 | 
			
		||||
        var parts = string.split(/(<\/?[a-zA-Z]+>)/);
 | 
			
		||||
        for (var i=0; i<parts.length; ++i) {
 | 
			
		||||
            if (parts[i][0] == '<') {
 | 
			
		||||
                if (parts[i][1] == '/') {
 | 
			
		||||
                    if (stack.length) {
 | 
			
		||||
                        stack.pop();
 | 
			
		||||
                    }
 | 
			
		||||
                } else {
 | 
			
		||||
                    stack.push(parts[i].replace(/^<|>$/g, ''));
 | 
			
		||||
                }
 | 
			
		||||
            } else {
 | 
			
		||||
                if (stack.length) {
 | 
			
		||||
                    // top of the stack
 | 
			
		||||
                    output.push('[[;' + stack[stack.length-1] + ';]');
 | 
			
		||||
                }
 | 
			
		||||
                output.push(parts[i]);
 | 
			
		||||
                if (stack.length) {
 | 
			
		||||
                     output.push(']');
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return output.join('');
 | 
			
		||||
    });
 | 
			
		||||
})(jQuery);
 | 
			
		||||
		Reference in New Issue
	
	Block a user