UNPKG

multirtc

Version:

1) It is a skype-like demo using WebRTC for realtime connections! 2) It allows you enable/disable webcams; and join with or without webcams! 3) It allows you share screen using existing peer connections! 4) It allows you share files with preview and downl

157 lines (126 loc) 10.8 kB
// Muaz Khan - www.MuazKhan.com // MIT License - www.WebRTC-Experiment.com/licence // Experiments - github.com/muaz-khan/WebRTC-Experiment window.linkify = (function(){ var SCHEME = "[a-z\\d.-]+://", IPV4 = "(?:(?:[0-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])\\.){3}(?:[0-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])", HOSTNAME = "(?:(?:[^\\s!@#$%^&*()_=+[\\]{}\\\\|;:'\",.<>/?]+)\\.)+", TLD = "(?:ac|ad|aero|ae|af|ag|ai|al|am|an|ao|aq|arpa|ar|asia|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|biz|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|cat|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|coop|com|co|cr|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|info|int|in|io|iq|ir|is|it|je|jm|jobs|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mil|mk|ml|mm|mn|mobi|mo|mp|mq|mr|ms|mt|museum|mu|mv|mw|mx|my|mz|name|na|nc|net|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pro|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tel|tf|tg|th|tj|tk|tl|tm|tn|to|tp|travel|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|xn--0zwm56d|xn--11b5bs3a9aj6g|xn--80akhbyknj4f|xn--9t4b11yi5a|xn--deba0ad|xn--g6w251d|xn--hgbk6aj7f53bba|xn--hlcj6aya9esc7a|xn--jxalpdlp|xn--kgbechtv|xn--zckzah|ye|yt|yu|za|zm|zw)", HOST_OR_IP = "(?:" + HOSTNAME + TLD + "|" + IPV4 + ")", PATH = "(?:[;/][^#?<>\\s]*)?", QUERY_FRAG = "(?:\\?[^#<>\\s]*)?(?:#[^<>\\s]*)?", URI1 = "\\b" + SCHEME + "[^<>\\s]+", URI2 = "\\b" + HOST_OR_IP + PATH + QUERY_FRAG + "(?!\\w)", MAILTO = "mailto:", EMAIL = "(?:" + MAILTO + ")?[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@" + HOST_OR_IP + QUERY_FRAG + "(?!\\w)", URI_RE = new RegExp( "(?:" + URI1 + "|" + URI2 + "|" + EMAIL + ")", "ig" ), SCHEME_RE = new RegExp( "^" + SCHEME, "i" ), quotes = { "'": "`", '>': '<', ')': '(', ']': '[', '}': '{', '»': '«', '›': '‹' }, default_options = { callback: function( text, href ) { return href ? '<a href="' + href + '" title="' + href + '" target="_blank">' + text + '<\/a>' : text; }, punct_regexp: /(?:[!?.,:;'"]|(?:&|&amp;)(?:lt|gt|quot|apos|raquo|laquo|rsaquo|lsaquo);)$/ }; return function( txt, options ) { txt = getSmileys(txt); txt = txt.replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/ /g, '&nbsp;').replace(/\n/g, '<br />'); options = options || {}; // Temp variables. var arr, i, link, href, // Output HTML. html = '', // Store text / link parts, in order, for re-combination. parts = [], // Used for keeping track of indices in the text. idx_prev, idx_last, idx, link_last, // Used for trimming trailing punctuation and quotes from links. matches_begin, matches_end, quote_begin, quote_end; // Initialize options. for ( i in default_options ) { if ( options[ i ] === undefined ) { options[ i ] = default_options[ i ]; } } // Find links. while ( arr = URI_RE.exec( txt ) ) { link = arr[0]; idx_last = URI_RE.lastIndex; idx = idx_last - link.length; // Not a link if preceded by certain characters. if ( /[\/:]/.test( txt.charAt( idx - 1 ) ) ) { continue; } // Trim trailing punctuation. do { // If no changes are made, we don't want to loop forever! link_last = link; quote_end = link.substr( -1 ) quote_begin = quotes[ quote_end ]; // Ending quote character? if ( quote_begin ) { matches_begin = link.match( new RegExp( '\\' + quote_begin + '(?!$)', 'g' ) ); matches_end = link.match( new RegExp( '\\' + quote_end, 'g' ) ); // If quotes are unbalanced, remove trailing quote character. if ( ( matches_begin ? matches_begin.length : 0 ) < ( matches_end ? matches_end.length : 0 ) ) { link = link.substr( 0, link.length - 1 ); idx_last--; } } // Ending non-quote punctuation character? if ( options.punct_regexp ) { link = link.replace( options.punct_regexp, function(a){ idx_last -= a.length; return ''; }); } } while ( link.length && link !== link_last ); href = link; // Add appropriate protocol to naked links. if ( !SCHEME_RE.test( href ) ) { href = ( href.indexOf( '@' ) !== -1 ? ( !href.indexOf( MAILTO ) ? '' : MAILTO ) : !href.indexOf( 'irc.' ) ? 'irc://' : !href.indexOf( 'ftp.' ) ? 'ftp://' : 'http://' ) + href; } // Push preceding non-link text onto the array. if ( idx_prev != idx ) { parts.push([ txt.slice( idx_prev, idx ) ]); idx_prev = idx_last; } // Push massaged link onto the array parts.push([ link, href ]); }; // Push remaining non-link text onto the array. parts.push([ txt.substr( idx_prev ) ]); // Process the array items. for ( i = 0; i < parts.length; i++ ) { html += options.callback.apply( window, parts[i] ); } // In case of catastrophic failure, return the original text; return html || txt; }; })(); function getSmileys(text) { return text; // return text.replace(/:\)/g, '<img class="smiley" src="data:image/gif;base64,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">'); }