diff --git a/README.md b/README.md index e115227..316398c 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -Olly.js (1.0) +Olly.js (1.1) ======= A JavaScript library to convert URLs into embedable HTML. @@ -10,11 +10,11 @@ Example Usage ----- -Instal with bower or download dist/olly.js +Install with bower or download dist/olly.js bower install Olly.js -After being included with a ` --> +
+

+

    To use Olly.js without feeding it an element
+     you can replace the element argument with any boolean value:

+
+ <script>
+ var embedResults = olly.embed("http://vimeo.com/78276911", true);
+ </script> +
+

Output

+
+ <script>
+ var embedResults =
+     {
+         scripts: Array[0],
+         markdown: '<iframe src="//player.vimeo.com/video/78276911" width="420" height="345"
+         frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
',
+     }
+ </script> +
+

Youtube

@@ -223,6 +244,17 @@

Output

+
+

Khan Academy

+

Original String

+
+ "https://www.khanacademy.org/embed_video?v=IFKnq9QM6_A" +
+

Output

+
+ +
+

Images (.jpg, .png, .bmp, .gif)

Original String

diff --git a/src/domains.js b/src/domains.js index aa3080a..ae6f69a 100644 --- a/src/domains.js +++ b/src/domains.js @@ -175,7 +175,7 @@ }; }, - + // Twitch Structure twitch: function (URL) { return { @@ -192,7 +192,19 @@ embedID: URL.pathchunks[0] } }; + }, + + // Khan Academy Video Structure + khanacademy: function (URL) { + var structure = { + template: 'khanacademy', + data: { + embedURL: 'https://www.khanacademy.org/embed_video?v=' + URL.query.v + } + }; + return structure; } + }; }(typeof module !== 'undefined' && module.exports? module.exports : window.olly)); diff --git a/src/olly.js b/src/olly.js index a546071..464b6fc 100644 --- a/src/olly.js +++ b/src/olly.js @@ -19,13 +19,13 @@ } }; - self.embed = function (URLString, element, services) { - var URL; + self.embed = function (URLString, elementOrReturn, services) { + var URL, renderResults; URL = this.parseURL(URLString); - this.render(element, URL, services); + renderResults = this.render(elementOrReturn, URL, services); - return true; + return (typeof renderResults === "boolean") ? true : renderResults; }; self.richify = function (blob, parentElement, services) { diff --git a/src/parser.js b/src/parser.js index 81d6927..2d9f3b4 100644 --- a/src/parser.js +++ b/src/parser.js @@ -1,7 +1,7 @@ /*global window,module,olly,document */ (function (olly) { "use strict"; - + //Inspired from https://gist.github.com/jlong/2428561 olly.parseURL = function (URLString) { var document = typeof module !== 'undefined'? module.document : window.document; diff --git a/src/render.js b/src/render.js index 96db878..d899c00 100644 --- a/src/render.js +++ b/src/render.js @@ -3,34 +3,58 @@ "use strict"; olly.render = function (element, URL, services) { - var src, definition, domainName, extensionName, field, templateObj, scriptIndex; + var src, definition, domainName, extensionName, field, templateObj, scriptIndex, shouldRender; domainName = this.findDomain(URL); extensionName = this.findExtension(URL); + shouldRender = (typeof element === "boolean") ? false : true; if ((!domainName && !extensionName) || (services || {})[domainName] == olly.TEXT) { return ""; } + if(!shouldRender) { + element = shouldRender; + var returnMarkdown = { + scripts: new Array(), + markdown: "" + }; + } + definition = (this.domains[domainName] || this.extensions[extensionName])(URL); templateObj = this.templates[definition.template || domainName || extensionName]; if (templateObj && templateObj.scripts) { for (scriptIndex = 0; scriptIndex < templateObj.scripts.length; scriptIndex += 1) { - src = templateObj.scripts[scriptIndex]; - this.loadScript(element, olly.generate(src, definition.data)); + if(!shouldRender) { + returnMarkdown.scripts.push(olly.generate(src, definition.data)); + } + else { + src = templateObj.scripts[scriptIndex]; + this.loadScript(element, olly.generate(src, definition.data)); + } } } - if (definition.templatePromise) { - definition.templatePromise.then(function (templateObj) { + if(shouldRender) { + if (definition.templatePromise) { + definition.templatePromise.then(function (templateObj) { + this.display(templateObj, definition.data, element); + }); + } else { this.display(templateObj, definition.data, element); - }); + } } else { - this.display(templateObj, definition.data, element); + if (definition.templatePromise) { + definition.templatePromise.then(function (templateObj) { + returnMarkdown.markdown = this.display(templateObj, definition.data, element); + }); + } else { + returnMarkdown.markdown = this.display(templateObj, definition.data, element); + } } - - return true; + + return (typeof returnMarkdown === "undefined") ? true : returnMarkdown; }; olly.findDomain = function (URL) { @@ -74,7 +98,7 @@ return deferred.promise; }; - olly.loadScript = function (element, src) { + olly.loadScript = function (element, src) {console.log("src:", src); var script; script = document.createElement('script'); script.type = 'text/javascript'; @@ -86,7 +110,13 @@ if (typeof templateObj === "string") { templateObj = {markup: templateObj}; } - element.innerHTML = olly.generate(templateObj.markup, data); + + if(!element) { + return olly.generate(templateObj.markup, data); + } + else { + element.innerHTML = olly.generate(templateObj.markup, data); + } }; olly.generate = function (template, data) { diff --git a/src/templates.js b/src/templates.js index ceede9b..d3ffce6 100644 --- a/src/templates.js +++ b/src/templates.js @@ -29,7 +29,7 @@ twitter_timeline: { markup: '', scripts: ['//platform.twitter.com/widgets.js'] - }, + }, github: { markup: '
', @@ -57,6 +57,8 @@ ] }, + khanacademy: '', + video: { markup: '' },