From 624101820a0bd79dcfc23cc8db15d5bdbf7ab3e6 Mon Sep 17 00:00:00 2001 From: nightwing Date: Tue, 21 Feb 2017 13:20:34 +0400 Subject: [PATCH 1/3] assert HOME is set since c9 can't work without it --- settings/standalone.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/settings/standalone.js b/settings/standalone.js index 39d7a1c3..607dcd04 100644 --- a/settings/standalone.js +++ b/settings/standalone.js @@ -1,3 +1,5 @@ +var assert = require("assert"); + module.exports = function(manifest, installPath) { if (!manifest) { manifest = require(__dirname + "/../package.json"); @@ -19,6 +21,7 @@ module.exports = function(manifest, installPath) { readWin32Settings(); var home = process.env.HOME; + assert(home, "home directory must be set"); if (!installPath) installPath = path.join(home, ".c9"); From a584efecc8c8a96afb6c6603657922148db82149 Mon Sep 17 00:00:00 2001 From: nightwing Date: Tue, 21 Feb 2017 14:23:44 +0400 Subject: [PATCH 2/3] allow running without .git/HEAD --- settings/standalone.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/settings/standalone.js b/settings/standalone.js index 607dcd04..61d92268 100644 --- a/settings/standalone.js +++ b/settings/standalone.js @@ -3,9 +3,13 @@ var assert = require("assert"); module.exports = function(manifest, installPath) { if (!manifest) { manifest = require(__dirname + "/../package.json"); - manifest.revision = - manifest.revision || - require("c9/git").getHeadRevisionSync(__dirname + "/.."); + if (!manifest.revision) { + try { + manifest.revision = require("c9/git").getHeadRevisionSync(__dirname + "/.."); + } catch (e) { + console.error(e); + } + } } var path = require("path"); From d39a8ac3c89d2d10710de7576e60e1689e05e843 Mon Sep 17 00:00:00 2001 From: nightwing Date: Tue, 21 Feb 2017 18:28:03 +0400 Subject: [PATCH 3/3] fix tab tooltip issues --- plugins/c9.ide.ace/style.less | 2 +- plugins/c9.ide.editors/pane.js | 86 ++++++++++++++++--- .../themes/default-flat-dark.less | 2 +- plugins/c9.ide.ui/ui.js | 2 + 4 files changed, 76 insertions(+), 16 deletions(-) diff --git a/plugins/c9.ide.ace/style.less b/plugins/c9.ide.ace/style.less index bd5e1d3c..daf53ff0 100644 --- a/plugins/c9.ide.ace/style.less +++ b/plugins/c9.ide.ace/style.less @@ -206,7 +206,7 @@ color : @gutter-tooltip-color; .font-smoothing(@gutter-tooltip-font-smoothing); } -.ace_dark .ace_tooltip { +.ace_dark .ace_tooltip, .ace_dark.ace_tooltip { box-shadow : @gutter-tooltip-dark-shadow !important; background : @gutter-tooltip-dark-background !important; border : 1px solid @gutter-tooltip-dark-border; diff --git a/plugins/c9.ide.editors/pane.js b/plugins/c9.ide.editors/pane.js index 932f7760..3b9f8d10 100644 --- a/plugins/c9.ide.editors/pane.js +++ b/plugins/c9.ide.editors/pane.js @@ -204,40 +204,98 @@ define(function(require, module, exports) { /***** Methods *****/ function addCustomTooltipHandler(el) { - el.addEventListener("mousemove", function(e) { - var target = e.target; - var amlTab = apf.findHost(target); + var tooltipTimer; + var tooltipHideTimer; + var currentTarget; + function hide() { + console.log("hide", currentTarget) + if (tooltipTimer) tooltipTimer = clearTimeout(tooltipTimer); + if (tooltipHideTimer) tooltipHideTimer = clearTimeout(tooltipHideTimer); + if (tooltip) tooltip.hide(); + currentTarget = null; + } + function findTab(e) { + var amlTab = apf.findHost(e.target); var tab = amlTab && amlTab.cloud9tab; - if (!tab) return tooltip && tooltip.hide(); + return tab; + } + el.addEventListener("mousemove", function(e) { + if (apf.isMousePressed) + return tooltip && tooltip.hide(); + var tab = findTab(e); + if (tooltip && tooltip.isOpen) { + tooltipHideTimer = clearTimeout(tooltipHideTimer); + if (currentTarget != tab) { + currentTarget = tab; + updateTooltip(); + } + } else { + if (currentTarget != tab || !tooltipTimer) { + tooltipTimer = clearTimeout(tooltipTimer); + tooltipTimer = setTimeout(updateTooltip, 150); + currentTarget = tab; + } + } + }); + + function updateTooltip() { + console.log("show", currentTarget) + tooltipTimer = clearTimeout(tooltipTimer); + tooltipHideTimer = clearTimeout(tooltipHideTimer); + var tab = currentTarget; + if (!tab) return hide(); var tooltipTitle = tab.tooltip || tab.title; - if (!tooltipTitle) return tooltip && tooltip.hide(); + if (!tooltipTitle) return hide(); if (!tooltip) tooltip = new Tooltip(document.body); + var activeTab = tab.pane.activeTab || tab; + + if (activeTab.classList.contains("dark")) + tooltip.getElement().classList.add("ace_dark"); + else + tooltip.getElement().classList.remove("ace_dark"); + var rect = tab.aml.$button.getBoundingClientRect(); var style = tooltip.getElement().style; style.top = rect.bottom + 10 + "px"; style.textAlign = "center"; - - tooltip.setText(tooltipTitle); + style.minWidth = rect.width + "px"; + style.maxWidth = "40em"; + style.whiteSpace = "pre-wrap"; + style.wordWrap = "normal"; + + tooltip.setText(tooltipTitle.replace(/[/.-]/g, "\u200b$&")); tooltip.show(); var tooltipRect = tooltip.getElement().getBoundingClientRect(); - style.minWidth = rect.width + "px"; var left = rect.left + rect.width / 2 - tooltipRect.width / 2; - if (left + tooltipRect.width > window.innerWidth) - left = Math.max(0, window.innerWidth - tooltipRect.width); + if (left + tooltipRect.width > window.innerWidth - 2) + left = Math.max(0, window.innerWidth - 2 - tooltipRect.width); + if (left < 2) + left = 2; + if (tooltipRect.width > window.innerWidth - 4) + style.maxWidth = window.innerWidth - 4 + "px"; style.left = left + "px"; - }); + } el.addEventListener("mouseout", function(e) { - tooltip && tooltip.hide(); + if (tooltip && tooltip.isOpen) { + clearTimeout(tooltipHideTimer); + tooltipHideTimer = setTimeout(hide, 100); + } + if (tooltipTimer) + tooltipTimer = clearTimeout(tooltipTimer); }); + el.addEventListener("mousedown", hide); plugin.on("beforeUnload", function() { - tooltip && tooltip.destroy(); - tooltip = null; + if (tooltip) { + hide(); + tooltip.destroy(); + tooltip = null; + } }); } diff --git a/plugins/c9.ide.layout.classic/themes/default-flat-dark.less b/plugins/c9.ide.layout.classic/themes/default-flat-dark.less index e4e77358..4e6fa9dc 100644 --- a/plugins/c9.ide.layout.classic/themes/default-flat-dark.less +++ b/plugins/c9.ide.layout.classic/themes/default-flat-dark.less @@ -792,7 +792,7 @@ @gutter-tooltip-shadow: @language-tooltip-box-shadow; @gutter-tooltip-background: @language-tooltip-background; @gutter-tooltip-border: @language-tooltip-border-color; -@gutter-tooltip-color: darken(#e0e3e8, @darken-chrome); +@gutter-tooltip-color: darken(#333, @darken-chrome); @gutter-tooltip-font-smoothing: false; @gutter-tooltip-dark-shadow: 1px 1px 6px darken(rgba(0, 0, 0, 0.8), @darken-chrome); diff --git a/plugins/c9.ide.ui/ui.js b/plugins/c9.ide.ui/ui.js index c74a0cb6..dd0f8e75 100644 --- a/plugins/c9.ide.ui/ui.js +++ b/plugins/c9.ide.ui/ui.js @@ -50,10 +50,12 @@ define(function(require, module, exports) { apf.initialize(''); window.addEventListener("mousedown", function() { + apf.isMousePressed = true; document.body.classList.add("disableIframe"); }, true); window.addEventListener("mouseup", function() { + apf.isMousePressed = false; document.body.classList.remove("disableIframe"); }, true); }