Merge pull request #661 from glowing-bear/async-element

Construct plugin elements async. Fixes #660
This commit is contained in:
Lorenz Hübschle-Schneider 2015-10-19 17:02:10 +02:00
commit 8a7b7d2125

View file

@ -285,13 +285,16 @@ plugins.factory('userPlugins', function() {
// TODO strip an existing dl=0 parameter // TODO strip an existing dl=0 parameter
url = url + "?dl=1"; url = url + "?dl=1";
} }
var element = angular.element('<a></a>') return function() {
.attr('target', '_blank') var element = this.getElement();
.attr('href', url) var imgElem = angular.element('<a></a>')
.append(angular.element('<img>') .attr('target', '_blank')
.addClass('embed') .attr('href', url)
.attr('src', url)); .append(angular.element('<img>')
return element.prop('outerHTML'); .addClass('embed')
.attr('src', url));
element.innerHTML = imgElem.prop('outerHTML');
};
} }
}); });
@ -300,12 +303,15 @@ plugins.factory('userPlugins', function() {
*/ */
var videoPlugin = new UrlPlugin('video', function(url) { var videoPlugin = new UrlPlugin('video', function(url) {
if (url.match(/\.(mp4|webm|ogv)\b/i)) { if (url.match(/\.(mp4|webm|ogv)\b/i)) {
var element = angular.element('<video></video>') return function() {
.addClass('embed') var element = this.getElement();
.attr('width', '560') var velement = angular.element('<video></video>')
.append(angular.element('<source></source>') .addClass('embed')
.attr('src', url)); .attr('width', '560')
return element.prop('outerHTML'); .append(angular.element('<source></source>')
.attr('src', url));
element.innerHTML = velement.prop('outerHTML');
};
} }
}); });
@ -375,14 +381,17 @@ plugins.factory('userPlugins', function() {
var regexp = /^https?:\/\/(?:www\.)?yr\.no\/(place|stad|sted|sadji|paikka)\/(([^\s.;,(){}<>\/]+\/){3,})/; var regexp = /^https?:\/\/(?:www\.)?yr\.no\/(place|stad|sted|sadji|paikka)\/(([^\s.;,(){}<>\/]+\/){3,})/;
var match = url.match(regexp); var match = url.match(regexp);
if (match) { if (match) {
var language = match[1]; return function() {
var location = match[2]; var element = this.getElement();
var city = match[match.length - 1].slice(0, -1); var language = match[1];
url = "http://www.yr.no/" + language + "/" + location + "avansert_meteogram.png"; var location = match[2];
var element = angular.element('<img>') var city = match[match.length - 1].slice(0, -1);
.attr('src', url) url = "http://www.yr.no/" + language + "/" + location + "avansert_meteogram.png";
.attr('alt', 'Meteogram for ' + city); var ielement = angular.element('<img>')
return element.prop('outerHTML'); .attr('src', url)
.attr('alt', 'Meteogram for ' + city);
element.innerHTML = ielement.prop('outerHTML');
};
} }
}); });
@ -418,13 +427,16 @@ plugins.factory('userPlugins', function() {
var id = url.match(regex); var id = url.match(regex);
if (id) { if (id) {
var src = "https://media.giphy.com/media/" + id[1] + "/giphy.gif"; var src = "https://media.giphy.com/media/" + id[1] + "/giphy.gif";
var element = angular.element('<a></a>') return function() {
.attr('target', '_blank') var element = this.getElement();
.attr('href', url) var gelement = angular.element('<a></a>')
.append(angular.element('<img>') .attr('target', '_blank')
.addClass('embed') .attr('href', url)
.attr('src', src)); .append(angular.element('<img>')
return element.prop('outerHTML'); .addClass('embed')
.attr('src', src));
element.innerHTML = gelement.prop('outerHTML');
};
} }
}); });