1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
var Parser = {
integrations: [{
type: 'image',
regex: /\.(jpeg|jpg|gif|png|svg)(\?.*)?$/i,
async: false,
fetch: function(url, done) {
var img = new Image ()
img.onload = function(){
done("", "", img.naturalWidth, img.naturalHeight, "")
img = null
}
img.src = url
if (img.complete) {
img.onload()
}
},
tag: function (media) {
return '<img src="' + media.url + '" onerror="imgError(this);">';
}
}, {
type: 'youtube',
regex: /(?:youtube\.com\/(?:[^\/]+\/.+\/|(?:v|e(?:mbed)?)\/|.*[?&]v=)|youtu\.be\/)([^"&?\/ ]{11})/i,
async: false,
fetch: function(url, done) {
var id = (url.match(/v=([-_a-zA-Z0-9]{11})/i) || url.match(/youtu.be\/([-_a-zA-Z0-9]{11})/i) || url.match(/embed\/([-_a-zA-Z0-9]{11})/i))[1].split('&')[0];
var thumb = "http://i.ytimg.com/vi/" + id + "/hqdefault.jpg"
$.ajax({
type: 'GET',
url: 'https://www.googleapis.com/youtube/v3/videos',
data: {
id: id,
key: "AIzaSyDYPKGD0-_VRBWpUYRmX8Qg6BtWmcPU_cM",
part: "id,contentDetails,snippet,status",
},
success: function(result){
var res = res.items[0]
done(id, thumb, 640, 360, res.snippet.title);
}
})
},
tag: function (media) {
return '<img class="video" type="youtube" vid="'+media.token+'" src="'+media.thumbnail+'"><span class="playvid">▶</span>';
}
}, {
type: 'vimeo',
regex: /vimeo.com\/\d+$/i,
async: true,
fetch: function(url, done) {
var id = url.match(/\d+$/i)[0];
$.ajax({
type: 'GET',
url: 'http://vimeo.com/api/v2/video/' + id + '.json',
success: function(result){
if (result.length == 0) { return done(id, "", 640, 360) }
var res = result[0]
done(id, res.thumbnail_large, res.width, res.height, res.title)
}
})
},
tag: function (media) {
return '<img class="video" type="vimeo" vid="'+media.token+'" src="'+media.thumbnail+'"><span class="playvid">▶</span>';
}
},
/*
{
type: 'soundcloud',
regex: /soundcloud.com\/[-a-zA-Z0-9]+\/[-a-zA-Z0-9]+\/?$/i,
async: true,
fetch: function (url, done) {
$.ajax({
type: 'GET',
url: 'http://api.soundcloud.com/resolve.json?url='
+ url
+ '&client_id='
+ '0673fbe6fc794a7750f680747e863b10',
success: function(result) {
done(result.id, "");
}
});
},
tag: function (media) {
return '<iframe width="400" height="166" scrolling="no" frameborder="no"' +
'src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/' + media.token +
'&color=ff6600&auto_play=false&show_artwork=true"></iframe>'
}
}, {
type: 'link',
regex: /^http.+/i,
async: false,
fetch: function(url, done) {
done("", "")
},
tag: function (media) {
return '<a href="' + media.url + '" target="_blank">' + media.url + '</a>'
}
}
*/
],
parse: function (url, cb) {
var matched = Parser.integrations.some(function(integration){
if (integration.regex.test(url)) {
integration.fetch(url, function(token, thumbnail, width, height, title){
cb({
token: token,
thumbnail: thumbnail,
type: integration.type,
title: title,
width: width,
height: height,
url: url,
})
})
return true
}
return false
})
if (! matched) {
cb(null)
}
}
}
|