diff --git a/web/pgadmin/browser/templates/browser/js/browser.js b/web/pgadmin/browser/templates/browser/js/browser.js
index 3684eccec..b4d02c218 100644
--- a/web/pgadmin/browser/templates/browser/js/browser.js
+++ b/web/pgadmin/browser/templates/browser/js/browser.js
@@ -17,14 +17,13 @@ $(window).bind('unload', function() {
// Build a regular dock panel
function buildPanel(docker, name, title, width, height, showTitle, isCloseable, isPrivate, content) {
docker.registerPanelType(name, {
+ title: title,
isPrivate: isPrivate,
onCreate: function(myPanel) {
myPanel.initSize(width, height);
if (showTitle == false)
myPanel.title(false);
- else
- myPanel.title(title);
myPanel.closeable(isCloseable);
@@ -36,15 +35,14 @@ function buildPanel(docker, name, title, width, height, showTitle, isCloseable,
// Build an iFrame dock panel
function buildIFramePanel(docker, name, title, width, height, showTitle, isCloseable, isPrivate, url) {
docker.registerPanelType(name, {
+ title: title,
isPrivate: isPrivate,
onCreate: function(myPanel) {
myPanel.initSize(width, height);
if (showTitle == false)
myPanel.title(false);
- else
- myPanel.title(title);
-
+
myPanel.closeable(isCloseable);
var $frameArea = $('
');
diff --git a/web/pgadmin/browser/views.py b/web/pgadmin/browser/views.py
index 29e3e9d20..93850cfeb 100644
--- a/web/pgadmin/browser/views.py
+++ b/web/pgadmin/browser/views.py
@@ -51,7 +51,12 @@ def index():
# Add browser stylesheets
stylesheets.append(url_for('static', filename='css/codemirror/codemirror.css'))
- stylesheets.append(url_for('static', filename='css/wcDocker/style.css'))
+
+ if config.DEBUG:
+ stylesheets.append(url_for('static', filename='css/wcDocker/wcDocker.css'))
+ else:
+ stylesheets.append(url_for('static', filename='css/wcDocker/wcDocker.min.css'))
+
stylesheets.append(url_for('static', filename='css/wcDocker/theme.css'))
stylesheets.append(url_for('browser.static', filename='css/browser.css'))
stylesheets.append(url_for('browser.static', filename='css/aciTree/css/aciTree.css'))
@@ -61,14 +66,12 @@ def index():
# Add browser scripts
scripts.append(url_for('static', filename='js/codemirror/codemirror.js'))
scripts.append(url_for('static', filename='js/codemirror/mode/sql.js'))
- scripts.append(url_for('static', filename='js/wcDocker/docker.js'))
- scripts.append(url_for('static', filename='js/wcDocker/splitter.js'))
- scripts.append(url_for('static', filename='js/wcDocker/frame.js'))
- scripts.append(url_for('static', filename='js/wcDocker/panel.js'))
- scripts.append(url_for('static', filename='js/wcDocker/layout.js'))
- scripts.append(url_for('static', filename='js/wcDocker/ghost.js'))
- scripts.append(url_for('static', filename='js/wcDocker/tabframe.js'))
- scripts.append(url_for('static', filename='js/wcDocker/iframe.js'))
+
+ if config.DEBUG:
+ scripts.append(url_for('static', filename='js/wcDocker/wcDocker.js'))
+ else:
+ scripts.append(url_for('static', filename='js/wcDocker/wcDocker.min.js'))
+
scripts.append(url_for('browser.static', filename='js/aciTree/jquery.aciPlugin.min.js'))
scripts.append(url_for('browser.static', filename='js/aciTree/jquery.aciTree.dom.js'))
scripts.append(url_for('browser.static', filename='js/aciTree/jquery.aciTree.min.js'))
diff --git a/web/pgadmin/static/css/wcDocker/style.css b/web/pgadmin/static/css/wcDocker/wcDocker.css
old mode 100755
new mode 100644
similarity index 95%
rename from web/pgadmin/static/css/wcDocker/style.css
rename to web/pgadmin/static/css/wcDocker/wcDocker.css
index fd2802565..b4ebe0db1
--- a/web/pgadmin/static/css/wcDocker/style.css
+++ b/web/pgadmin/static/css/wcDocker/wcDocker.css
@@ -461,6 +461,26 @@ html, body {
border-radius: 6px;
}
+::-webkit-scrollbar {
+ width: 12px;
+ height: 12px;
+ background-color: #888;
+}
+
+::-webkit-scrollbar-corner {
+ background-color: #888;
+}
+
+::-webkit-scrollbar-track {
+ -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.5);
+ border-radius: 10px;
+}
+
+::-webkit-scrollbar-thumb {
+ border-radius: 10px;
+ -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.7);
+}
+
.wcMenuList, .context-menu-list {
border: 1px solid #111;
}
diff --git a/web/pgadmin/static/css/wcDocker/wcDocker.min.css b/web/pgadmin/static/css/wcDocker/wcDocker.min.css
new file mode 100644
index 000000000..03b64dfd3
--- /dev/null
+++ b/web/pgadmin/static/css/wcDocker/wcDocker.min.css
@@ -0,0 +1,16 @@
+/*!
+ * Web Cabin Docker - Docking Layout Interface.
+ *
+ * Dependancies:
+ * JQuery 1.11.1
+ *
+ * Version: git-master
+ *
+ * Author: Jeff Houde (Lochemage@gmail.com)
+ * Web: http://docker.webcabin.org/
+ *
+ * Licensed under
+ * MIT License http://www.opensource.org/licenses/mit-license
+ * GPL v3 http://opensource.org/licenses/GPL-3.0
+ *
+ */html,body{width:100%;height:100%;overflow:hidden;position:relative;margin:0}.wcDisableSelection{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:-moz-none;-ms-user-select:none;user-select:none}.wcModalBlocker{position:fixed;top:0;bottom:0;left:0;right:0;z-index:-30}.wcWide{width:100%;left:0}.wcTall{height:100%;top:0}.wcDocker{position:absolute}.wcDockerTransition{opacity:0}.wcFrame{position:relative}.wcFrameFlasher,.wcFrameShadower{border:0;margin:0;padding:0;position:absolute;top:0;left:0;right:0;bottom:0;opacity:0}.wcFrameTitle{width:100%;cursor:move;overflow:hidden;position:absolute;text-align:left;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:-moz-none;-ms-user-select:none;user-select:none}.wcFrameTitle.wcNotMoveable{cursor:default !important}.wcCustomTabTitle{cursor:default !important}.wcCustomTabMoveable{cursor:move !important}.wcCustomTab{position:relative}.wcTabScroller{height:100%;width:10000px;position:relative}.wcFrameButton,.wcFrameMiniButton{width:13px;height:13px;position:relative;float:right;border:2px outset #444;font-size:11px;cursor:pointer;text-align:center;overflow:hidden;z-index:1;background-color:#555}.wcFrameButton>div,.wcFrameMiniButton>div{width:100%}.wcFrameMiniButton{width:6px}.wcFrameButton:hover{border:2px outset #666;background-color:#686868}.wcFrameButton:active{border:2px inset #aaa;background-color:#888}.wcFrameButtonToggled,.wcFrameButtonToggled:hover{border-style:inset}.wcFrameCenter{overflow:hidden;position:absolute;top:15px;left:0;right:0;bottom:0}.wcFloating{position:fixed;z-index:10}.wcFloatingFocus{z-index:20}.wcModal{z-index:40}.wcLayout,.wcLayout tr,.wcLayout td{border:0;margin:0;padding:0;background-color:transparent;border-spacing:0}.wcLayout{top:0;left:0;right:0;bottom:0;position:absolute}.wcFrameEdge{position:absolute;z-index:2;border:2px outset #444;background-color:#222}.wcFrameEdgeV{width:2px;cursor:ew-resize;border-top:0;border-bottom:0}.wcFrameEdgeH{height:2px;cursor:ns-resize;border-left:0;border-right:0}.wcFrameCornerNW{height:2px;width:2px;cursor:nwse-resize}.wcFrameCornerNE{height:2px;width:2px;cursor:nesw-resize}.wcSplitterBar{z-index:2;position:absolute;border:1px outset darkgray}.wcSplitterBarV{width:2px;height:100%;cursor:ew-resize}.wcSplitterBarH{height:2px;width:100%;cursor:ns-resize}.wcLayoutPane{border:0;margin:0;padding:0;display:inline-block;position:absolute}.wcPanelTab{vertical-align:top;position:relative;display:inline-block;text-decoration:none;top:0}.wcPanelTabContent{width:100%;height:100%}.wcPanelTabContent.wcPanelTabContentHidden{display:none}.wcResizing .wcHideOnResize .wcPanelTabContent{display:none}.wcGhost{opacity:0;background-color:#444;position:fixed;border:0;border-radius:6px;z-index:100;cursor:move}.wcScrollableX{overflow-x:auto}.wcScrollableY{overflow-y:auto}.wcOverflowVisible{overflow:visible}.wcTabIcon{display:inline-block;width:1.28571429em;height:1em;text-align:center}.wcMenuIcon{margin-left:-24px;width:1.28571429em;font-size:1.33333333em;line-height:.75em;height:1em;display:inline-block;vertical-align:-15%;text-align:center}.fa-menu{margin-left:-24px;width:24px}.context-menu-submenu:after{content:'' !important}.wcMenuSubMenu{float:right}.wcIFrame{position:fixed;width:100%;height:100%;z-index:1;border:0;margin:0;padding:0}.wcIFrameFloating{z-index:11}.wcIFrameFloatingFocus{z-index:21}.wcIFrameHidden,.wcIFramePanelHidden{display:none}.wcIFrameMoving{pointer-events:none}.wcDocker{background-color:gray}.wcModalBlocker{background-color:black;opacity:.8}.wcPanelBackground{background-color:gray}.wcPanelBackground .wcCenter{background-color:darkgray}.wcFrameFlasher{background-color:white}.wcFrameShadower{background-color:white}.wcFrameTitle{height:17px;background-color:#555}.wcFrameCenter{top:17px}.wcLayoutGrid,.wcLayoutGrid tr,.wcLayoutGrid td{border:1px solid #555}.wcLayoutGridAlternate tr:nth-child(even),.wcLayoutGridAltColor{background-color:rgba(200,200,200,0.2) !important}.wcPanelTab{color:#42454a;background-color:#777;border:1px solid #000;border-radius:2px 2px 0 0;border-bottom:0;margin-right:1px;margin-top:3px;font-size:12px;padding-left:2px;padding-right:2px;padding-bottom:0}.wcPanelTab:hover{background-color:#AAA}.wcPanelTabActive{color:#000;background-color:gray;font-weight:bold;margin-top:1px}.wcPanelTabActive:hover{background-color:#CCC}.wcFrameEdge{position:absolute;z-index:2;border:2px outset #444;background-color:#222}.wcSplitterBar{border:1px outset darkgray;background-color:gray}.wcGhost{background-color:#444;border:0;border-radius:6px}::-webkit-scrollbar{width:12px;height:12px;background-color:#888}::-webkit-scrollbar-corner{background-color:#888}::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,0.5);border-radius:10px}::-webkit-scrollbar-thumb{border-radius:10px;-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,0.7)}.wcMenuList,.context-menu-list{border:1px solid #111}.wcMenuItem,.context-menu-item{background-color:#444}.wcMenuItemHover,.wcMenuItem:hover,.context-menu-item.hover{background-color:#666}.wcMenuItem.disabled,.context-menu-item.disabled{color:#333;background-color:#444}.wcMenuSeparator,.context-menu-separator{border:2px solid #444;background-color:#777}.wcInput,input{vertical-align:middle;border:1px solid black}.wcSelect,select{border:1px solid black}.wcButton,button{border:1px outset #777;background-color:#777;line-height:1em}.wcButtonHover,.wcButton:hover,button:hover{border:1px outset #999;background-color:#999}.wcButtonActive,.wcButton:active,button:active{border:1px inset #666;background-color:#666}.wcButtonActive.wcButtonHover,.wcButton:hover.wcButtonActive,.wcButton:active.wcButtonHover,.wcButton:active:hover,button:active:hover{border:1px inset #999;background-color:#999}.wcButtonDisabled,.wcButton.disabled,button:disabled{border:1px outset #666 !important;background-color:#666 !important;color:#555 !important}.wcButton:focus,button:focus{outline:0}
\ No newline at end of file
diff --git a/web/pgadmin/static/js/wcDocker/docker.js b/web/pgadmin/static/js/wcDocker/docker.js
deleted file mode 100755
index 70ad74505..000000000
--- a/web/pgadmin/static/js/wcDocker/docker.js
+++ /dev/null
@@ -1,1862 +0,0 @@
-/*!
- * Web Cabin Docker - Docking Layout Interface.
- *
- * Dependancies:
- * JQuery 1.11.1
- * JQuery-contextMenu 1.6.6
- * font-awesome 4.2.0
- *
- * Author: Jeff Houde (Lochemage@gmail.com)
- * Web: http://docker.webcabin.org/
- *
- * Licensed under
- * MIT License http://www.opensource.org/licenses/mit-license
- * GPL v3 http://opensource.org/licenses/GPL-3.0
- *
- */
-
-// Provide backward compatibility for IE8 and other such older browsers.
-if (!Function.prototype.bind) {
- Function.prototype.bind = function (oThis) {
- if (typeof this !== "function") {
- // closest thing possible to the ECMAScript 5
- // internal IsCallable function
- throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");
- }
-
- var aArgs = Array.prototype.slice.call(arguments, 1),
- fToBind = this,
- fNOP = function () {},
- fBound = function () {
- return fToBind.apply(this instanceof fNOP && oThis
- ? this
- : oThis,
- aArgs.concat(Array.prototype.slice.call(arguments)));
- };
-
- fNOP.prototype = this.prototype;
- fBound.prototype = new fNOP();
-
- return fBound;
- };
-}
-
-if (!Array.prototype.indexOf)
-{
- Array.prototype.indexOf = function(elt /*, from*/)
- {
- var len = this.length >>> 0;
-
- var from = Number(arguments[1]) || 0;
- from = (from < 0)
- ? Math.ceil(from)
- : Math.floor(from);
- if (from < 0)
- from += len;
-
- for (; from < len; from++)
- {
- if (from in this &&
- this[from] === elt)
- return from;
- }
- return -1;
- };
-}
-
-/*
- The main window instance. This manages all of the docking panels and user input.
- There should only be one instance of this, although it is not enforced.
-
- options allows overriding default options for docker. The current fields are:
- allowContextMenu: boolean (default true) - Create the right click menu for adding/removing panels.
- hideOnResize: boolean (default false) - If true, panels will hide their content as they are being resized.
-*/
-function wcDocker(container, options) {
- this.$container = $(container).addClass('wcDocker');
- this.$transition = $('
');
- this.$container.append(this.$transition);
-
- this._events = {};
-
- this._root = null;
- this._frameList = [];
- this._floatingList = [];
- this._modalList = [];
- this._focusFrame = null;
-
- this._splitterList = [];
- this._tabList = [];
-
- this._dockPanelTypeList = [];
-
- this._draggingSplitter = null;
- this._draggingFrame = null;
- this._draggingFrameSizer = null;
- this._draggingFrameTab = null;
- this._draggingCustomTabFrame = null;
- this._ghost = null;
- this._menuTimer = 0;
-
- this._resizeData = {
- time: -1,
- timeout: false,
- delta: 150,
- };
-
- this._defaultOptions = {
- allowContextMenu: true
- };
-
- this._options = {};
- for( var prop in this._defaultOptions ) {
- this._options[prop] = this._defaultOptions[prop];
- }
- for( var prop in options ) {
- this._options[prop] = options[prop];
- }
-
- this.__init();
-};
-
-// Docking positions.
-wcDocker.DOCK_MODAL = 'modal';
-wcDocker.DOCK_FLOAT = 'float';
-wcDocker.DOCK_TOP = 'top';
-wcDocker.DOCK_LEFT = 'left';
-wcDocker.DOCK_RIGHT = 'right';
-wcDocker.DOCK_BOTTOM = 'bottom';
-wcDocker.DOCK_STACKED = 'stacked';
-
-// Internal events.
-wcDocker.EVENT_INIT = 'panelInit';
-wcDocker.EVENT_UPDATED = 'panelUpdated';
-wcDocker.EVENT_VISIBILITY_CHANGED = 'panelVisibilityChanged';
-wcDocker.EVENT_BEGIN_DOCK = 'panelBeginDock';
-wcDocker.EVENT_END_DOCK = 'panelEndDock';
-wcDocker.EVENT_GAIN_FOCUS = 'panelGainFocus';
-wcDocker.EVENT_LOST_FOCUS = 'panelLostFocus';
-wcDocker.EVENT_CLOSED = 'panelClosed';
-wcDocker.EVENT_BUTTON = 'panelButton';
-wcDocker.EVENT_ATTACHED = 'panelAttached';
-wcDocker.EVENT_DETACHED = 'panelDetached';
-wcDocker.EVENT_MOVE_STARTED = 'panelMoveStarted';
-wcDocker.EVENT_MOVE_ENDED = 'panelMoveEnded';
-wcDocker.EVENT_MOVED = 'panelMoved';
-wcDocker.EVENT_RESIZE_STARTED = 'panelResizeStarted';
-wcDocker.EVENT_RESIZE_ENDED = 'panelResizeEnded';
-wcDocker.EVENT_RESIZED = 'panelResized';
-wcDocker.EVENT_SCROLLED = 'panelScrolled';
-wcDocker.EVENT_SAVE_LAYOUT = 'layoutSave';
-wcDocker.EVENT_RESTORE_LAYOUT = 'layoutRestore';
-wcDocker.EVENT_CUSTOM_TAB_CHANGED = 'customTabChanged';
-wcDocker.EVENT_CUSTOM_TAB_CLOSED = 'customTabClosed';
-
-// Used for the splitter bar orientation.
-wcDocker.ORIENTATION_VERTICAL = false;
-wcDocker.ORIENTATION_HORIZONTAL = true;
-
-wcDocker.prototype = {
-///////////////////////////////////////////////////////////////////////////////////////////////////////
-// Public Functions
-///////////////////////////////////////////////////////////////////////////////////////////////////////
-
- // Registers a new docking panel type to be used later.
- // Params:
- // name The name for this new type.
- // options An optional object that defines various options
- // to initialize the panel with.
- // createFunc The function that populates the contents of
- // a newly created dock panel of this type.
- // Params:
- // panel The dock panel to populate.
- // isPrivate If true, this type will not appear to the user
- // as a window type to create.
- // Returns:
- // true The new type has been added successfully.
- // false Failure, the type name already exists.
- registerPanelType: function(name, optionsOrCreateFunc, isPrivate) {
-
- var options = optionsOrCreateFunc;
- if (typeof options === 'function') {
- options = {
- onCreate: optionsOrCreateFunc,
- };
- }
-
- if (typeof isPrivate != 'undefined') {
- options.isPrivate = isPrivate;
- }
-
- if ($.isEmptyObject(options)) {
- options = null;
- }
-
- for (var i = 0; i < this._dockPanelTypeList.length; ++i) {
- if (this._dockPanelTypeList[i].name === name) {
- return false;
- }
- }
-
- this._dockPanelTypeList.push({
- name: name,
- options: options,
- });
-
- var $menu = $('menu').find('menu');
- $menu.append($('