forked from Botanical/BotanJS
138 lines
3.3 KiB
JavaScript
138 lines
3.3 KiB
JavaScript
(function ()
|
|
{
|
|
var ns = __namespace( "Astro.Blog.AstroEdit.Visualizer.Snippet" );
|
|
|
|
/** @type {System.utils.IKey} */
|
|
var IKey = __import( "System.utils.IKey" );
|
|
/** @type {System.utils.DataKey} */
|
|
var DataKey = __import( "System.utils.DataKey" );
|
|
/** @type {Dandelion.IDOMElement} */
|
|
var IDOMElement = __import( "Dandelion.IDOMElement" );
|
|
/** @type {Dandelion} */
|
|
var Dand = __import( "Dandelion" );
|
|
/** @type {Components.MessageBox} */
|
|
var MessageBox = __import( "Components.MessageBox" );
|
|
|
|
var video = function (insertSnippet, snippetWrap, createContext, override)
|
|
{
|
|
var temp, i, j
|
|
|
|
, getVimeoThumbnail = function (vtag)
|
|
{
|
|
getData("http://vimeo.com/api/oembed.json?url=http%3A//vimeo.com/" + vtag.getAttribute("data-value"), setThumbnail.bind(vtag), noThumb.bind(vtag));
|
|
}
|
|
|
|
, noThumb = function ()
|
|
{
|
|
|
|
}
|
|
|
|
, setThumbnail = function (str)
|
|
{
|
|
this.style.background = "black url(" + JSON.parse(str)["thumbnail_url"] + ") center center no-repeat";
|
|
|
|
}
|
|
|
|
, handler = function ()
|
|
{
|
|
// Input fields
|
|
var input_url = Dand.wrap('input', null, "v_snippet_input_single", null, new IKey("type", "text"));
|
|
|
|
// Popup MessageBox
|
|
new MessageBox("Insert video snippet"
|
|
, Dand.wrape([ Dand.wrapc("v_instruction flsf", "Paste a vimeo/Youtube link below:"), input_url ])
|
|
, "OK", "Cancel", visualizer.bind(input_url)
|
|
).show();
|
|
}
|
|
|
|
, visualizer = function (submitted, override)
|
|
{
|
|
var t, v;
|
|
|
|
if (override)
|
|
{
|
|
v = override.value;
|
|
i = override.type;
|
|
}
|
|
else
|
|
{
|
|
t = this.value;
|
|
// Match youtube links
|
|
v = t.match(/\/\/(www\.)?youtube\.com\/watch\?.*?v=([^\&\?\/\#]+)/) || t.match(/\/\/(www\.)?youtube\.com\/embed\/([^\&\?\/]+)/)
|
|
|| t.match(/\/\/(www\.)?youtube\.com\/v\/([^\&\?\/]+)/) || t.match(/\/\/(www\.)?youtu\.be\/([^\&\?\/]+)/);
|
|
if (v)
|
|
{
|
|
i = "youtube";
|
|
v = v[2];
|
|
}
|
|
else
|
|
{
|
|
// match vimeo links
|
|
v = t.match(/\/\/(www\.)?vimeo.com\/(\d+)($|\/)/);
|
|
if (v)
|
|
{
|
|
i = "vimeo";
|
|
v = v[2];
|
|
}
|
|
else
|
|
{
|
|
// None matched, do nothing
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (submitted)
|
|
{
|
|
|
|
// Visualize component
|
|
temp = Dand.wrapc('v_box', Dand.wrapc('v_description', "Video(url): " + t)
|
|
, [
|
|
new DataKey("value", v)
|
|
, new DataKey("type", i)
|
|
, new IKey("style"
|
|
, "width: 640px; height: 390px;"
|
|
+ ( (i[0] == "v") ? "" : ("background: black url(http://img.youtube.com/vi/" + v + "/hqdefault.jpg) no-repeat center center;") )
|
|
)
|
|
]
|
|
);
|
|
|
|
if (i[0] == "v")
|
|
{
|
|
getVimeoThumbnail(temp);
|
|
}
|
|
|
|
insertSnippet(j = snippetWrap("Video", temp), Boolean(override));
|
|
|
|
// Set context menu
|
|
createContext(null, j);
|
|
}
|
|
}
|
|
;
|
|
|
|
if (override)
|
|
{
|
|
visualizer(true, override);
|
|
override = false;
|
|
}
|
|
else
|
|
{
|
|
return handler;
|
|
}
|
|
return true;
|
|
};
|
|
|
|
var compile = function (stage)
|
|
{
|
|
// [video type=\"youtube\"]" + v[2] + "[/video]
|
|
var element = IDOMElement(stage)
|
|
, type = element.getDAttribute("type");
|
|
|
|
return "[video type=\"" + type + "\"]" + element.getDAttribute("value") + "[/video]";
|
|
};
|
|
|
|
__static_method( video, "compile", compile );
|
|
|
|
ns[ NS_EXPORT ]( EX_CLASS, "Video", video );
|
|
})();
|