First attempt to create a panel based windows system
Change-Id: I2b6fb4cb147518d661dbccb3bd5f8e093b63bf55
diff --git a/dev/js/src/panel.js b/dev/js/src/panel.js
new file mode 100644
index 0000000..5aa96ad
--- /dev/null
+++ b/dev/js/src/panel.js
@@ -0,0 +1,95 @@
+/**
+ * Create a panel for a certain aspect of the system, like
+ * the result, a match, or the VC.
+ */
+define(['buttongroup', 'util'], function (buttonGroupClass) {
+
+ return {
+
+ // TODO:
+ // Support classes
+ create : function () {
+ return Object.create(this)._init();
+ },
+
+ _init : function () {
+ // ...
+ this.views = [];
+
+
+ /**
+ * Main action buttons for the panel,
+ * may be at the bottom (for matches)
+ * or as tabs (for the result).
+ */
+ this.actions = buttonGroupClass.create(['action', 'panel']);
+ return this;
+ },
+
+ /**
+ * The element of the panel
+ */
+ element : function () {
+ if (this._element)
+ return this._element;
+
+ // Create panel element
+ var e = document.createElement('div');
+ e.classList.add('panel');
+
+ e.appendChild(this.actions.element());
+
+ this._element = e;
+ return e;
+ },
+
+
+ /**
+ * Add a view to the panel
+ */
+ add : function (view) {
+
+ // Add view to views list
+ this.views.push(view);
+
+ // Append element to panel element
+
+ this.element().appendChild(
+ view.element()
+ );
+
+ view.panel = this;
+ },
+
+ /**
+ * Delete a closed view from panel
+ */
+ delView : function (view) {
+ for (i in this.views) {
+ if (this.views[i] === view) {
+ this.views[i] = undefined;
+ }
+ }
+ },
+
+ /**
+ * Elements before the action buttons
+ */
+ beforeActions : function (element) {
+ if (arguments.length > 0)
+ this._beforeActions = element;
+
+ return this._beforeActions;
+ },
+
+ /**
+ * Element after the action buttons
+ */
+ afterActions : function (element) {
+ if (arguments.length > 0)
+ this._afterActions = element;
+
+ return this._afterActions;
+ }
+ }
+});