c9-core/plugins/c9.ide.editors/urlview.js

197 wiersze
7.2 KiB
JavaScript

define(function(require, exports, module) {
main.consumes = ["Editor", "editors"];
main.provides = ["urlview"];
return main;
function main(options, imports, register) {
var Editor = imports.Editor;
var editors = imports.editors;
/***** Initialization *****/
var extensions = [];
function UrlView() {
var plugin = new Editor("Ajax.org", main.consumes, extensions);
//var emit = plugin.getEmitter();
var container;
var counter = 0;
plugin.on("draw", function(e) {
// Create UI elements
container = e.htmlNode;
});
/***** Method *****/
/***** Lifecycle *****/
plugin.on("load", function() {
});
var currentDocument;
plugin.on("documentLoad", function(e) {
var doc = e.doc;
var session = doc.getSession();
// Value
doc.on("getValue", function get(e) {
return currentDocument == doc
? session.iframe.src
: e.value;
}, session);
doc.on("setValue", function set(e) {
if (currentDocument == doc)
session.iframe.src = e.value || "about:blank";
}, session);
session.state = e.state || {};
if (!session.iframe) {
var div = document.createElement("div");
var iframe = document.createElement("iframe");
iframe.setAttribute("nwfaketop", true);
iframe.setAttribute("nwdisable", true);
iframe.style.width = "100%";
iframe.style.height = "100%";
iframe.style.border = 0;
iframe.src = doc.value || "about:blank";
div.style.position = "absolute";
div.style.left = 0;
div.style.top = 0;
div.style.right = 0;
div.style.bottom = 0;
div.appendChild(iframe);
session.iframe = iframe;
session.div = div;
}
container.appendChild(session.div);
session.iframe.style.backgroundColor =
doc.tab.backgroundColor =
session.state.backgroundColor || "#222222";
if (session.state.dark === false)
doc.tab.classList.remove("dark");
else
doc.tab.classList.add("dark");
});
plugin.on("documentActivate", function(e) {
if (currentDocument)
currentDocument.getSession().div.style.display = "none";
currentDocument = e.doc;
e.doc.getSession().div.style.display = "block";
});
plugin.on("documentUnload", function(e) {
container.removeChild(e.doc.getSession().div);
});
plugin.on("getState", function(e) {
var doc = e.doc;
e.state.backgroundColor = doc.tab.backgroundColor;
e.state.dark = doc.tab.classList.names.indexOf("dark") > -1;
});
plugin.on("setState", function(e) {
e.doc.tab.backgroundColor = e.state.backgroundColor;
if (e.state.dark)
e.doc.tab.classList.add("dark");
});
plugin.on("clear", function() {
});
plugin.on("focus", function() {
});
plugin.on("enable", function() {
});
plugin.on("disable", function() {
});
plugin.on("unload", function() {
});
/***** Register and define API *****/
/**
* The urlview handle, responsible for events that involve all
* UrlView instances. This is the object you get when you request
* the urlview service in your plugin.
*
* Example:
*
* define(function(require, exports, module) {
* main.consumes = ["urlview"];
* main.provides = ["myplugin"];
* return main;
*
* function main(options, imports, register) {
* var urlviewHandle = imports.urlview;
* });
* });
*
*
* @class urlview
* @extends Plugin
* @singleton
*/
/**
* Simple URL Viewer for Cloud9. This is not an actual editor
* but instead loads an iframe in an editor tab. This editor can
* only be instantiated programmatically and should be used when
* you need to show a website in Cloud9.
*
* Note that this plugin is not intended for previewing content,
* use the {@link Preview} plugin for that purpose.
*
* This example shows how to create a tab that shows c9.io.
*
* tabManager.open({
* value : "http://www.c9.io",
* editorType : "urlview",
* active : true,
* document : {
* urlview : {
* backgroundColor : "#FF0000",
* dark : true
* }
* }
* }, function(err, tab) {
* console.log("Done");
* })
*
* @class urlview.UrlView
* @extends Editor
**/
/**
* The type of editor. Use this to create the urlview using
* {@link tabManager#openEditor} or {@link editors#createEditor}.
* @property {"urlview"} type
* @readonly
*/
/**
* Retrieves the state of a document in relation to this editor
* @param {Document} doc The document for which to return the state
* @method getState
* @return {Object}
* @return {String} return.backgroundColor The background color of the tab.
* @return {String} return.dark Whether the "dark" class is set to the tab.
*/
plugin.freezePublicAPI({
});
plugin.load("urlview" + counter++);
return plugin;
}
register(null, {
urlview: editors.register("urlview", "URL Viewer",
UrlView, extensions)
});
}
});