Skip to content

Instantly share code, notes, and snippets.

@fogrew
Last active August 29, 2015 14:25
Show Gist options
  • Save fogrew/8fbdd17f3f00bea08353 to your computer and use it in GitHub Desktop.
Save fogrew/8fbdd17f3f00bea08353 to your computer and use it in GitHub Desktop.
define(function (require) {
var patternYouTube = /\/\/(?:www\.)?youtu(?:\.be|be\.com)\/(?:watch\?v=|embed\/)?([a-z0-9_\-]+)/i;
var patternVimeo = /(http|https):\/\/(www\.)?vimeo.com\/(\d+)($|\/)/;
var patternSoundCloud = /https:\/\/(www\.)?soundcloud.com.*/;
var patternLink = /([-a-zA-Z0-9:%_\+.~#?&\/\/=]{2,256}\.[a-z]{2,4}\b(\/?[-a-zA-Z0-9:%_\+.~#?&\/\/=]*)?)/gi;
var pattern = {
url : /\s([a-z0-9а-я.-_]+)\.([a-z0-9а-я._-]{2,10})/gi, // первый символ пробел!!
email : /([a-z0-9а-я._-]+)@([a-z0-9а-я._-]+)\.([a-z0-9а-я._-]{2,10})/gi,
};
return {
truncate:function(text, size, end) {
size = parseInt(size) || 150;
end = end || '...';
var str = '';
if (!text) return '';
return (text.length > size ? (text.substr(0, size) + end) : text);
},
embeddedVideo: function(link) {
//получаем ссылку
link = link.match(patternLink);
if (!link) return false;
if (link.length) link = link[0];
// проверяем ссылку на правильность
var linkYoutube = link.match(patternYouTube);
var linkVimeo = link.match(patternVimeo);
var linkSoundCloud = link.match(patternSoundCloud);
if (linkYoutube&&linkYoutube[1].length==11) {
return {
'video' : 'http://www.youtube.com/embed/'+ linkYoutube[1] + '?wmode=transparent',
'image' : 'http://img.youtube.com/vi/' + linkYoutube[1] + '/0.jpg'
};
} else if (linkVimeo) {
return ('<iframe src="http://player.vimeo.com/video/'+ linkVimeo[2] +'?title=0&amp;byline=0&amp;portrait=0&amp;color=8f53b9" width="100%" height="260" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>');
} else if (linkSoundCloud) {
return ('<iframe width="100%" height="166" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url='+linkSoundCloud[0] +'&amp;color=ff6600&amp;auto_play=false&amp;show_artwork=false"></iframe>');
} else{
return false;
}
},
appendPhoneLink: function(text) {
if(!text) return;
var arr = text.split(','),
arrnum = [],
newText = '';
//получаем разделенные запятой строки и парсим телефоны оттуда
_.each(arr,function(s, i){
arrnum[i] = s.replace(/\D/gi, '');}
);
//теперь для каждого номера проверяем вхождение каждого числа номера и записываем в новую строку теги
_.each(arrnum, function(str, i){
var arrF = arr[i];
var offset = 0;
var first = 0;
var last = 0;
var phone = str.split('');
_.each(phone,function(sym, j){
var on = arrF.indexOf(sym, offset);
if(on !== -1) {
offset = on;
if(j === 0) first = (on === 0 ? 0 : (on-1));
if(j === (phone.length-1)) last = (on + 2);
}
});
var number = arrF.substr(first, last);
var numberArray = arrF.split(number, 2);
if(number) {
newText += numberArray[0] + '<a href="tel:' + str + '">' + number + '</a>' + numberArray[1] + ((arrnum.length-1 === i) ? '' : ', ');
}
});
return (newText ? newText : text);
},
parseLink: function(link) {
//получаем ссылку
link = link.match(patternLink);
if (!link) return false;
if (link.length) link = link[0];
// проверяем ссылку на правильность
var linkYoutube = link.match(patternYouTube);
var linkVimeo = link.match(patternVimeo);
var linkSoundCloud = link.match(patternSoundCloud);
if (linkYoutube&&linkYoutube[1].length==11) {
return 'https://www.youtube.com/watch?v=' + linkYoutube[1];
} else if (linkVimeo) {
return linkVimeo[0];
} else if (linkSoundCloud) {
return linkSoundCloud[0];
} else{
return '';
}
},
stripTags: function(text) {
return text.replace(/<\/?[^>]+>/g, '');
},
_appendLink: function(text) {
//первое для email
text = text.replace(pattern.email,function(word){
return '<a href="mailto:' + word + '">' + word + '</a>';
});
text = ' ' + text;
text = text.replace(pattern.url, function(word) {
word = word.replace(/\s/g,'');
var link = word;
if (link && !link.match(/^[a-zA-Z]+:\/\//)){
link = 'http://' + link;
}
if (Plugins.deviceInfo.platform.toLowerCase()==='android') {
return ' <a href="' + link + '" onclick="event.preventDefault();navigator.app.loadUrl(this.href, {openExternal : true});">' + word + '</a>';
}
return ' <a href="' + link + '" onclick="event.preventDefault();window.open(this.href,\'_system\',\'location=yes\');">' + word + '</a>';
});
return text;
},
appendLink: function(text) {
if (!text) return '';
return this._appendLink(text);
}
};
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment