You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2016/02/01 18:52:17 UTC
[33/50] [abbrv] brooklyn-ui git commit: ensure global brooklyn
auto-refresh is respected by get/fetch methods, allowing them to run once but
subsequently be noop; also code comments on desired refactorings;
both from code review with @sjcorbett. also fix
ensure global brooklyn auto-refresh is respected by get/fetch methods, allowing them to run once but subsequently be noop;
also code comments on desired refactorings; both from code review with @sjcorbett.
also fix bug where effector click sometimes didn't work (two clicks in a row),
and fix bug where "No applications" didn't always display when the tree was emptied (child nodes still present);
and put in a placeholder which can be used for showing a Not Available message after a fade.
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-ui/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-ui/commit/6e47ea24
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-ui/tree/6e47ea24
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-ui/diff/6e47ea24
Branch: refs/heads/0.6.0
Commit: 6e47ea24fe404d35e6f9e16f646ff986a578821f
Parents: c895f77
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Fri Sep 20 16:34:11 2013 +0100
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Fri Sep 20 16:57:58 2013 +0100
----------------------------------------------------------------------
.../src/main/webapp/assets/css/brooklyn.css | 11 +++++
.../webapp/assets/js/model/effector-summary.js | 1 +
usage/jsgui/src/main/webapp/assets/js/router.js | 4 ++
.../webapp/assets/js/view/application-tree.js | 7 ++-
.../webapp/assets/js/view/entity-effectors.js | 7 ++-
.../src/main/webapp/assets/js/view/viewutils.js | 45 +++++++++++++++---
.../src/main/webapp/assets/tpl/labs/page.html | 50 ++++++++++++++++++++
7 files changed, 115 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-ui/blob/6e47ea24/usage/jsgui/src/main/webapp/assets/css/brooklyn.css
----------------------------------------------------------------------
diff --git a/usage/jsgui/src/main/webapp/assets/css/brooklyn.css b/usage/jsgui/src/main/webapp/assets/css/brooklyn.css
index f2cf895..6bccdfa 100644
--- a/usage/jsgui/src/main/webapp/assets/css/brooklyn.css
+++ b/usage/jsgui/src/main/webapp/assets/css/brooklyn.css
@@ -225,3 +225,14 @@ textarea {
/*APP PAGE*/
/* END KROME STYLES */
+
+.view_not_available {
+ /*
+ // nothing yet; idea is to put CSS here which will show a 'Not Available' message.
+ // but it is hard to position it without assuming or introducing position-absolute on the parent.
+ // probably need to mess with the hierarchy, or make such an assumption.
+ // also there is the issue the (currently) the parent view has had opacity set to 0.2.
+ // used in viewutils.js fade/cancelFade methods (and should be only those!)
+ content: 'Not Available';
+ */
+}
http://git-wip-us.apache.org/repos/asf/brooklyn-ui/blob/6e47ea24/usage/jsgui/src/main/webapp/assets/js/model/effector-summary.js
----------------------------------------------------------------------
diff --git a/usage/jsgui/src/main/webapp/assets/js/model/effector-summary.js b/usage/jsgui/src/main/webapp/assets/js/model/effector-summary.js
index b74a7cd..e3bf8c9 100644
--- a/usage/jsgui/src/main/webapp/assets/js/model/effector-summary.js
+++ b/usage/jsgui/src/main/webapp/assets/js/model/effector-summary.js
@@ -5,6 +5,7 @@ define([
var EffectorSummary = {}
EffectorSummary.Model = Backbone.Model.extend({
+ idAttribute: 'name',
defaults:function () {
return {
name:"",
http://git-wip-us.apache.org/repos/asf/brooklyn-ui/blob/6e47ea24/usage/jsgui/src/main/webapp/assets/js/router.js
----------------------------------------------------------------------
diff --git a/usage/jsgui/src/main/webapp/assets/js/router.js b/usage/jsgui/src/main/webapp/assets/js/router.js
index a0fe75d..f4fb9fd 100644
--- a/usage/jsgui/src/main/webapp/assets/js/router.js
+++ b/usage/jsgui/src/main/webapp/assets/js/router.js
@@ -6,6 +6,10 @@ define([
HomeView, ExplorerView, CatalogView, ApidocView, ScriptGroovyView,
HelpHtml, LabsHtml) {
+ // TODO this initialising - customising the View prototype - should be moved,
+ // and perhaps expanded to include other methods from viewutils
+ // see discussion at https://github.com/brooklyncentral/brooklyn/pull/939
+
// add close method to all views for clean-up
// (NB we have to update the prototype _here_ before any views are instantiated;
// see "close" called below in "showView")
http://git-wip-us.apache.org/repos/asf/brooklyn-ui/blob/6e47ea24/usage/jsgui/src/main/webapp/assets/js/view/application-tree.js
----------------------------------------------------------------------
diff --git a/usage/jsgui/src/main/webapp/assets/js/view/application-tree.js b/usage/jsgui/src/main/webapp/assets/js/view/application-tree.js
index 99eebcd..db64c01 100644
--- a/usage/jsgui/src/main/webapp/assets/js/view/application-tree.js
+++ b/usage/jsgui/src/main/webapp/assets/js/view/application-tree.js
@@ -68,7 +68,10 @@ define([
removeNode: function(id) {
$('#'+id, this.$el).parent().remove()
- if (this.collection.isEmpty())
+ // collection seems sometimes to have children nodes;
+ // not sure why, but that's okay for now
+ if (this.collection.getApplications().length==0)
+// if (this.collection.isEmpty() || $('lozenge-app-tree-wrapper').length==0)
this.renderFull();
},
@@ -167,7 +170,7 @@ define([
this.$el.empty()
// Display tree and highlight the selected entity.
- if (this.collection.isEmpty()) {
+ if (this.collection.getApplications().length==0) {
that.$el.append(_.template(TreeEmptyHtml))
} else {
_.each(this.collection.getApplications(),
http://git-wip-us.apache.org/repos/asf/brooklyn-ui/blob/6e47ea24/usage/jsgui/src/main/webapp/assets/js/view/entity-effectors.js
----------------------------------------------------------------------
diff --git a/usage/jsgui/src/main/webapp/assets/js/view/entity-effectors.js b/usage/jsgui/src/main/webapp/assets/js/view/entity-effectors.js
index 8a68c29..40a0586 100644
--- a/usage/jsgui/src/main/webapp/assets/js/view/entity-effectors.js
+++ b/usage/jsgui/src/main/webapp/assets/js/view/entity-effectors.js
@@ -48,7 +48,9 @@ define([
$tableBody.append(that.effectorRow({
name:effector.get("name"),
description:effector.get("description"),
- cid:effector.cid
+ // cid is mapped to id (here) which is mapped to name (in Effector.Summary),
+ // so it is consistent across resets
+ cid:effector.id
}))
})
}
@@ -57,9 +59,10 @@ define([
showEffectorModal:function (eventName) {
// get the model that we need to show, create its view and show it
var cid = $(eventName.currentTarget).attr("id")
+ var effectorModel = this._effectors.get(cid);
this._modal = new EffectorInvokeView({
el:"#effector-modal",
- model:this._effectors.get(cid),
+ model:effectorModel,
entity:this.model
})
this._modal.render().$el.modal('show')
http://git-wip-us.apache.org/repos/asf/brooklyn-ui/blob/6e47ea24/usage/jsgui/src/main/webapp/assets/js/view/viewutils.js
----------------------------------------------------------------------
diff --git a/usage/jsgui/src/main/webapp/assets/js/view/viewutils.js b/usage/jsgui/src/main/webapp/assets/js/view/viewutils.js
index 6e009a2..fb04172 100644
--- a/usage/jsgui/src/main/webapp/assets/js/view/viewutils.js
+++ b/usage/jsgui/src/main/webapp/assets/js/view/viewutils.js
@@ -1,6 +1,6 @@
define([
- "underscore", "jquery"
-], function (_, $) {
+ "underscore", "jquery", "brooklyn"
+], function (_, $, BrooklynConfig) {
var ViewUtils = {
myDataTable:function($table, extra) {
@@ -230,23 +230,48 @@ define([
// in case the server response time is low, fade out while it refreshes
// (since we can't show updated details until we've retrieved app + entity details)
try {
- $el.fadeTo(1000, 0.3);
+ $el.fadeTo(1000, 0.3)
+// .queue(
+// function() {
+// // does nothing yet -- see comment in brooklyn.css on .view_not_available
+// $el.append('<div class="view_not_available"></div>')
+// });
+ // above works to insert the div, though we don't have styling on it
+ // but curiously it also causes the parent to go to opacity 0 !?!
} catch (e) {
// ignore - normal during tests
}
},
cancelFadeOnceLoaded: function($el) {
try {
+// $el.children('.view_not_available').remove();
$el.stop(true, false).fadeTo(200, 1);
} catch (e) {
// ignore - normal during tests
}
},
+
+
+
+ // TODO the get and fetch methods below should possibly be on a BrooklynView prototype
+ // see also notes in router.js
+ // (perhaps as part of that introduce a callWithFixedDelay method which does the tracking,
+ // so we can cleanly unregister, and perhaps an onServerFailure method, and with that we
+ // could perhaps get rid of, or at least dramatically simplify, the get/fetch)
+
/* variant of $.get with automatic failure handling and recovery;
* options should be omitted except by getRepeatedlyWithDelay */
get: function(view, url, success, options) {
if (view.viewIsClosed) return ;
- if (options['enablement'] && !options['enablement']()) {
+
+ if (!options) options = {}
+ if (!options.count) options.count = 1
+ else options.count++;
+// log("getting, count "+options.count+", delay "+period+": "+url)
+
+ var disabled = (options['enablement'] && !options['enablement']())
+ || !BrooklynConfig.refresh
+ if (options.count > 1 && disabled) {
// not enabled, just requeue
if (options['period'])
setTimeout(function() { ViewUtils.get(view, url, success, options)}, options['period'])
@@ -353,13 +378,21 @@ define([
* error (optional function to invoke on error, before requeueing);
*/
fetchRepeatedlyWithDelay: function(view, model, options) {
+ if (view.viewIsClosed) return;
+
if (!options) options = {}
+ if (!options.count) options.count = 1
+ else options.count++;
+
var period = options['period'] || 3000
var originalPeriod = options['originalPeriod'] || period
-// log("fetching "+model.url+" with delay "+period)
+// log("fetching, count "+options.count+", delay "+period+": "+model.url)
+
var fetcher = function() {
if (view.viewIsClosed) return;
- if (options['enablement'] && !options['enablement']()) {
+ var disabled = (options['enablement'] && !options['enablement']())
+ || !BrooklynConfig.refresh
+ if (options.count > 1 && disabled) {
// not enabled, just requeue
ViewUtils.fetchRepeatedlyWithDelay(view, model, options);
return;
http://git-wip-us.apache.org/repos/asf/brooklyn-ui/blob/6e47ea24/usage/jsgui/src/main/webapp/assets/tpl/labs/page.html
----------------------------------------------------------------------
diff --git a/usage/jsgui/src/main/webapp/assets/tpl/labs/page.html b/usage/jsgui/src/main/webapp/assets/tpl/labs/page.html
index 4dfb3b1..e339851 100644
--- a/usage/jsgui/src/main/webapp/assets/tpl/labs/page.html
+++ b/usage/jsgui/src/main/webapp/assets/tpl/labs/page.html
@@ -85,5 +85,55 @@ $(document).ready(function() {
<img src="/assets/img/glyphicons-halflings.png"/>
+<br/><br/>
+<div><b>Debug Config</b></div><br/>
+
+<script>
+var updateGlobalRefreshDisplay = function() {
+ require(["brooklyn"], function(b) {
+ $('#globalRefresh').html(''+b.refresh)
+ })
+}
+
+var toggleGlobalRefresh = function() {
+ require(["brooklyn"], function(b) {
+ b.toggleRefresh();
+ updateGlobalRefreshDisplay();
+ })
+}
+
+$(document).ready(function() {
+ updateGlobalRefreshDisplay()
+})
+</script>
+
+Brooklyn Global Auto Refresh is: <b><span id="globalRefresh">?</span>
+<span onclick="javascript:toggleGlobalRefresh()"><i>[change]</i></span></b>
+<br/><span><i>(this setting controls whether things do auto refresh;
+disabling globally can be helpful when testing)</i></span>
+
+
+
+<br/><br/>
+<div><b>Debug Config</b></div><br/>
+
+<script>
+var fadeHello = function() {
+ require(["view/viewutils"], function(v) {
+ log('fading')
+ v.fadeToIndicateInitialLoad($('#hello'))
+ })
+}
+var showHello = function() {
+ require(["view/viewutils"], function(v) {
+ log('unfading')
+ v.cancelFadeOnceLoaded($('#hello'))
+ })
+}
+</script>
+<div id="hello">I'm a region which fades.</div>
+<div><span onclick="javascript:fadeHello()">fade</span> <span onclick="javascript:showHello()">show</span></div>
+
+
</div>
</div>