Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
403fdbc
Merge pull request #2 from mattmontgomery/master
numinos1 Aug 8, 2016
ac7b7c0
changed version again
Aug 8, 2016
655ddb0
Merge branch 'master' of github.com:numinos1/embedable
Aug 8, 2016
4a755a0
complete retooling of facebook embed rules
Aug 17, 2016
3d5d461
re-added the generic facebook provider
Aug 17, 2016
3c00b0d
fixed youtube provider bug
Aug 17, 2016
d17b9e8
fixed aspect-ratio issue with giphy provider
Aug 19, 2016
5811cd5
Added option to handle wrapping in <figure> tags for Instant Articles
nathanknowles Oct 4, 2016
89ed6ac
Update README.md
Feb 16, 2017
b3a871e
Update package.json
Feb 16, 2017
2d31ece
Update README.md
Feb 16, 2017
a3bc8ce
Update package.json
Feb 16, 2017
f4e8707
Switch YouTube to use oembed endpoint
Aug 30, 2017
60c338b
Merge pull request #2 from deseretdigital/youtube
Aug 30, 2017
2df3245
Increment version
Aug 30, 2017
0618896
Add the deseretnews provider
chasen Oct 25, 2017
e4f69b0
Fixed url schema
chasen Oct 25, 2017
a53b791
Merge pull request #3 from chasen/patch-1
Oct 26, 2017
e5a5ce0
Increment to 1.2.1: Adds DeseretNews.com
Oct 26, 2017
4ebd49e
Narrow the URI match
chasen Oct 26, 2017
b84d757
Merge pull request #4 from chasen/patch-2
Oct 26, 2017
23138c0
Update package.json
Oct 26, 2017
b4ef924
Allow Vimeo provider to match video URLs without sub-domain
faazshift Oct 31, 2017
4e3603d
Merge pull request #5 from faazshift/patch-1
Nov 8, 2017
c2c9d39
Increment release (adds vimeo)
Nov 8, 2017
21f1f4d
Update domains_cd.js
faazshift Jan 31, 2018
3b88775
Added DN Ask Survery embed provider
syehor Feb 2, 2018
11b67ad
Merge pull request #7 from syehor/master
Feb 7, 2018
3d17ffe
Merge pull request #6 from faazshift/patch-2
Feb 7, 2018
6ee9d39
Updates version
Feb 7, 2018
7c229d4
Escape html characters in title
Apr 12, 2018
0abb51d
update version number
sdickson May 2, 2018
6766ee0
Changed dnews quizlet povider to be dnews generic provider
syehor Jul 26, 2018
23810bb
Merge pull request #8 from syehor/master
Aug 17, 2018
a13fa44
Update package.json
Aug 17, 2018
8a0310e
Updates dependencies to remove vulns
mattmontgomery Aug 17, 2018
0a7c18b
Updates deps and fixes lodash breakage
mattmontgomery Aug 20, 2018
26f4b1e
automated: Add CODEOWNERS file for team @mattmontgomery
JustinCarmony Feb 14, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# FILE GENERATRED BY gendoc-update-codeowners-and-properties

# This file is used to define code owners for the repository.
# The format is:
# <scope> <team>
# where scope is the directory or file to which the team is assigned.
# For example:
# * @team
* @mattmontgomery
12 changes: 8 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,19 @@
# embedable
# embeddable

Embed media via oEmbed or openGraph

# Install

`npm install ddm-embeddable`

# Example of using the embedable code to fetch and render a uri

```javascript
// Require the embedable library
var Embedable = require('embedable');
var Embeddable = require('ddm-embeddable');

// Instantiate the embedable object
var embed = Embedable();
var embed = Embeddable();

// Asynchronously fetch metadata for a URI
var data = embed.fetch('https://www.youtube.com/watch?v=igUMDICqTpQ');
Expand All @@ -18,4 +22,4 @@ var data = embed.fetch('https://www.youtube.com/watch?v=igUMDICqTpQ');
var html = data.then(function(data) {
return embed.render(data);
});
```
```
64 changes: 48 additions & 16 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,8 @@ _.extend(Embed.prototype, {

addProvider: function(provider) {
var name = provider.name
, self = this;
, self = this
, pattern = null;

if (this.providers[name]) {
throw new Error('Duplicate provider: ' + name);
Expand All @@ -93,13 +94,23 @@ _.extend(Embed.prototype, {
provider.uri = [provider.uri];
}
_.each(provider.uri, function(uri) {
if (!_.isRegExp(uri)) {
uri = new RegExp(uri, "i");
if (typeof uri === 'function' && pattern) {
pattern.process = uri;
}
else {
if (typeof uri === 'string') {
uri = new RegExp(uri, "i");
}
else if (!_.isRegExp(uri)) {
throw new Error('Invalid URI pattern: ' + uri + ' for ' + name);
}
pattern = {
regex: uri,
provider: provider,
process: null
};
self.patterns.push(pattern);
}
self.patterns.push({
regex: uri,
provider: provider
});
});
},

Expand Down Expand Up @@ -137,7 +148,7 @@ _.extend(Embed.prototype, {
});
}
// resolve the provider promise
return this.fetchProvider(opts, pattern)
return this.fetchProvider(pattern)
.then(function(data) {

// handle default provider redirects
Expand All @@ -163,19 +174,40 @@ _.extend(Embed.prototype, {
},

findProvider: function(uri) {
for (var i = 0, l = this.patterns.length; i < l; i++) {
if (this.patterns[i].regex.test(uri)) {
return this.patterns[i];
var i, l, pattern, parts;

for (i = 0, l = this.patterns.length; i < l; i++) {
pattern = this.patterns[i];

if (pattern.regex.test(uri)) {
parts = uri.match(pattern.regex);

// if process, run parts through it
if (parts && pattern.process) {
parts = pattern.process(parts);
}
// if parts is string, use as uri and continue
if (typeof parts === 'string') {
uri = parts;
}
// return parts & provider
else {
return {
provider: pattern.provider,
parts: parts,
uri: uri
};
}
}
}
},

fetchProvider: function(opts, pattern) {
var uri = opts.redirect || opts.uri
parts = uri.match(pattern.regex);

fetchProvider: function(pattern) {
try {
data = pattern.provider.fetch(uri, parts);
data = pattern.provider.fetch(
pattern.uri,
pattern.parts
);
}
catch (err) {
return when.reject({
Expand Down
Loading