Skip to content

Commit e9e8026

Browse files
committed
perf : regex matching complexity optimized
1 parent 8b2444c commit e9e8026

4 files changed

Lines changed: 62 additions & 114 deletions

File tree

demo/index.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<!DOCTYPE html>
22
<html>
33
<head>
4-
<title>jQuery Boilerplate</title>
5-
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
4+
<title>Emoticons-js</title>
5+
66
<link rel="stylesheet" href="../src/jquery.emoticons.css"/>
77
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css">
88
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/8.4/styles/github.min.css"/>
@@ -111,7 +111,7 @@ <h3>Media file support</h3>
111111
plasmator virtualiter imperiums amicitia est.Cadunt aegre ducunt ad peritus gluten.
112112
</div>
113113
</div>
114-
114+
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
115115
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/8.4/highlight.min.js"></script>
116116
<script src="http://platform.twitter.com/widgets.js"></script>
117117
<script src="../src/jquery.emoticons.js"></script>

dist/jquery.emoticons.js

Lines changed: 29 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -620,37 +620,23 @@
620620

621621
},
622622

623-
basicVideoTemplate: function (url) {
624-
var template = '<div class="ejs-video">' +
625-
' <div class="ejs-video-player">' +
626-
' <div class="player">' +
627-
' <video src="' + url + '" controls></video>' +
628-
' </div>' +
629-
' </div>' +
630-
'</div>';
631-
632-
return template;
633-
},
634-
635-
embedBasic: function (str) {
623+
embedBasic: function (rawStr,str) {
636624
var basicVideoRegex = /((?:https?):\/\/\S*\.(?:ogv|webm|mp4))/gi;
637625

638-
if (str.match(basicVideoRegex)) {
639-
var template = this.basicVideoTemplate(RegExp.$1);
626+
if (rawStr.match(basicVideoRegex)) {
627+
var template = '<div class="ejs-video"><div class="ejs-video-player"><div class="player"><video src="' + RegExp.$1 + '" controls></video></div></div></div>';
640628
str = str + template;
641629
}
642630
return str;
643631
}
644632
};
645633

646634
var pdfProcess = {
647-
embed: function (str) {
635+
embed: function (rawStr,str) {
648636
var p = /((?:https?):\/\/\S*\.(?:pdf|PDF))/gi;
649-
if (str.match(p)) {
637+
if (rawStr.match(p)) {
650638
var pdfUrl = RegExp.$1;
651-
652639
var pdfTemplate = '<div class="ejs-pdf"><div class="ejs-pdf-preview"><div class="ejs-pdf-icon"><i class="fa fa-file-pdf-o"></i></div><div class="ejs-pdf-detail" ><div class="ejs-pdf-title"> <a href="">' + pdfUrl + '</a></div> <div class="ejs-pdf-view"> <button><i class="fa fa-download"></i> <a href="' + pdfUrl + '" target="_blank">Download</a></button> <button class="ejs-pdf-view-active"><i class="fa fa-eye"></i> View PDF</button></div> </div> </div></div>';
653-
654640
str = str + pdfTemplate;
655641

656642
}
@@ -723,21 +709,18 @@
723709
};
724710

725711
var audioProcess = {
726-
basicEmbed: function (str) {
712+
basicEmbed: function (rawStr,str) {
727713
var a = /((?:https?):\/\/\S*\.(?:wav|mp3|ogg))/gi;
728-
if (str.match(a)) {
729-
var audioUrl = RegExp.$1;
730-
731-
var audioTemplate = '<div class="ejs-audio"><audio src="' + audioUrl + '" controls></audio></div>';
732-
714+
if (rawStr.match(a)) {
715+
var audioTemplate = '<div class="ejs-audio"><audio src="' + RegExp.$1 + '" controls></audio></div>';
733716
str = str + audioTemplate;
734717
}
735718
return str;
736719
},
737720

738-
soundCloudEmbed: function (str, opts) {
721+
soundCloudEmbed: function (rawStr,str, opts) {
739722
var scRegex = /soundcloud.com\/[a-zA-Z0-9-_]+\/[a-zA-Z0-9-_]+/gi;
740-
var matches = str.match(scRegex) ? str.match(scRegex).getUnique() : null;
723+
var matches = rawStr.match(scRegex) ? rawStr.match(scRegex).getUnique() : null;
741724
if (matches) {
742725
var i = 0;
743726
while (i < matches.length) {
@@ -762,20 +745,10 @@
762745
};
763746

764747
var imageProcess = {
765-
template: function (url) {
766-
var t = '<div class="ejs-image">' +
767-
' <div class="ne-image-wrapper">' +
768-
' <img src="' + url + '"/>' +
769-
' </div>' +
770-
'</div>';
771-
772-
return t;
773-
774-
},
775-
embed : function (str) {
748+
embed : function (rawStr,str) {
776749
var i = /((?:https?):\/\/\S*\.(?:gif|jpg|jpeg|tiff|png|svg|webp))/gi;
777-
if (str.match(i)) {
778-
var template = this.template(RegExp.$1);
750+
if (rawStr.match(i)) {
751+
var template = '<div class="ejs-image"><div class="ne-image-wrapper"><img src="' + RegExp.$1 + '"/></div></div>';
779752
str = str + template;
780753
}
781754
return str;
@@ -858,9 +831,9 @@
858831
};
859832

860833
var codeEmbedProcess = {
861-
codepenEmbed: function (str, opts) {
834+
codepenEmbed: function (rawStr,str, opts) {
862835
var codepenRegex = /http:\/\/codepen.io\/([A-Za-z0-9_]+)\/pen\/([A-Za-z0-9_]+)/gi;
863-
var matches = str.match(codepenRegex) ? str.match(codepenRegex).getUnique() : null;
836+
var matches = rawStr.match(codepenRegex) ? rawStr.match(codepenRegex).getUnique() : null;
864837
if (matches) {
865838
var i = 0;
866839
while (i < matches.length) {
@@ -871,9 +844,9 @@
871844
return str;
872845
},
873846

874-
jsfiddleEmbed: function (str, opts) {
847+
jsfiddleEmbed: function (rawStr,str, opts) {
875848
var jsfiddleRegex = /jsfiddle.net\/[a-zA-Z0-9_]+\/[a-zA-Z0-9_]+/gi;
876-
var matches = str.match(jsfiddleRegex) ? str.match(jsfiddleRegex).getUnique() : null;
849+
var matches = rawStr.match(jsfiddleRegex) ? rawStr.match(jsfiddleRegex).getUnique() : null;
877850
if (matches) {
878851
var i = 0;
879852
while (i < matches.length) {
@@ -884,9 +857,9 @@
884857
return str;
885858
},
886859

887-
jsbinEmbed: function (str, opts) {
860+
jsbinEmbed: function (rawStr,str, opts) {
888861
var jsbinRegex = /jsbin.com\/[a-zA-Z0-9_]+\/[0-9_]+/gi;
889-
var matches = str.match(jsbinRegex) ? str.match(jsbinRegex).getUnique() : null;
862+
var matches = rawStr.match(jsbinRegex) ? rawStr.match(jsbinRegex).getUnique() : null;
890863
if (matches) {
891864
var i = 0;
892865
while (i < matches.length) {
@@ -910,19 +883,20 @@
910883

911884
var that = this;
912885

886+
var rawInput=input;
887+
913888
input = (settings.link) ? urlEmbed(input) : input;
914889
input = insertfontSmiley(input);
915890
input = insertEmoji(input);
916-
input = (settings.pdfEmbed) ? pdfProcess.embed(input) : input;
917-
input = (settings.audioEmbed) ? audioProcess.basicEmbed(input) : input;
891+
input = (settings.pdfEmbed) ? pdfProcess.embed(rawInput,input) : input;
892+
input = (settings.audioEmbed) ? audioProcess.basicEmbed(rawInput,input) : input;
918893
input = (settings.highlightCode) ? codeProcess.highlight(input) : input;
919-
input = (settings.basicVideoEmbed) ? videoProcess.embedBasic(input) : input;
920-
input = (settings.imageEmbed) ? imageProcess.embed(input) : input;
921-
input = (settings.codepenEmbed) ? codeEmbedProcess.codepenEmbed(input, settings) : input;
922-
input = (settings.jsfiddleEmbed) ? codeEmbedProcess.jsfiddleEmbed(input, settings) : input;
923-
input = (settings.jsbinEmbed) ? codeEmbedProcess.jsbinEmbed(input, settings) : input;
924-
input = (settings.soundCloudEmbed) ? audioProcess.soundCloudEmbed(input, settings) : input;
925-
//$(that).html(input);
894+
input = (settings.basicVideoEmbed) ? videoProcess.embedBasic(rawInput,input) : input;
895+
input = (settings.imageEmbed) ? imageProcess.embed(rawInput,input) : input;
896+
input = (settings.codepenEmbed) ? codeEmbedProcess.codepenEmbed(rawInput,input, settings) : input;
897+
input = (settings.jsfiddleEmbed) ? codeEmbedProcess.jsfiddleEmbed(rawInput,input, settings) : input;
898+
input = (settings.jsbinEmbed) ? codeEmbedProcess.jsbinEmbed(rawInput,input, settings) : input;
899+
input = (settings.soundCloudEmbed) ? audioProcess.soundCloudEmbed(rawInput,input, settings) : input;
926900

927901
videoProcess.embed(input, settings).then(
928902
function (d) {

0 commit comments

Comments
 (0)