# Cloud9 Plugin
filename plugin.js
caption Cloud9 Plugin
section General
	define(function(require, exports, module) {
	    main.consumes = [
	        "Plugin", "ui", "layout", "commands"
	    ];
	    main.provides = ["myplugin"];
	    return main;
	
	    function main(options, imports, register) {
	        var Plugin = imports.Plugin;
	        var ui = imports.ui;
	        var commands = imports.commands;
	        var layout = imports.layout;
	        
	        /***** Initialization *****/
	        
	        var plugin = new Plugin("Ajax.org", main.consumes);
	        var emit = plugin.getEmitter();
	        
	        function load() {
	            commands.addCommand({
	                name: "mycommand",
	                bindKey: { mac: "Command-I", win: "Ctrl-I" },
	                exec: function() {
	                    show();
	                }
	            }, plugin);
	        }
	        
	        var drawn = false;
	        function draw() {
	            if (drawn) return;
	            drawn = true;
	            
	            // Import Skin
	            ui.insertSkin({
	                name: "c9statusbar",
	                data: require("text!./skin.xml"),
	            }, plugin);
	            
	            // Create UI elements
	            var markup = require("text!./markup.xml");
	            ui.insertMarkup(layout.findParent(plugin), markup, plugin);
	            
	            // Insert CSS
	            ui.insertCss(require("text!./style.css"), plugin);
	        
	            emit("draw");
	        }
	        
	        /***** Methods *****/
	        
	        function show() {
	            draw();
	        }
	        
	        /***** Lifecycle *****/
	        
	        plugin.on("load", function() {
	            load();
	        });
	        plugin.on("unload", function() {
	            drawn = false;
	        });
	        
	        /***** Register and define API *****/
	        
	        /**
	         * This is an example of an implementation of a plugin.
	         * 
	         * @class Template
	         * @extends Plugin
	         * @singleton
	         */
	        plugin.freezePublicAPI({
	            /**
	             * 
	             */
	            show: show,
	            
	            _events: [
	                /**
	                 * @event draw
	                 */
	                "draw"
	            ]
	        });
	        
	        register(null, {
	            myplugin: plugin
	        });
	    }
	});