Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Update protocol to not be required for remoteUrl; more exact; clean u…
…p code
  • Loading branch information
gschueler committed Oct 15, 2010
1 parent 2a62a1c commit ed7ac6b
Show file tree
Hide file tree
Showing 2 changed files with 153 additions and 84 deletions.
5 changes: 2 additions & 3 deletions rundeckapp/grails-app/views/framework/_nodes.gsp
Expand Up @@ -99,10 +99,10 @@

<div id="remoteEditholder" style="display:none" class="popout">
<span id="remoteEditHeader">
<span class="welcomeMessage">Edit node: <g:img file="icon-small-Node.png" width="16px" height="16px"/><span id="editNodeIdent"></span></span>
<span class="welcomeMessage">Edit node: <g:img file="icon-small-Node.png" width="16px" height="16px"/> <span id="editNodeIdent"></span></span>
</span>
<span class="toolbar" id="remoteEditToolbar">
<span class="action " onclick="_rdeckNodeEditCompleted();" title="Close the remote edit box and discard any changes"><g:img file="icon-tiny-removex-gray.png" /> Cancel and close</span>
<span class="action " onclick="_rdeckNodeEditCompleted();" title="Close the remote edit box and discard any changes"><g:img file="icon-tiny-removex-gray.png" /> <span id="remoteEditCloseText">Cancel and close</span></span>
</span>
<div id="remoteEditResultHolder" class="info message" style="display:none">
<span id="remoteEditResultText" class="info message" >
Expand All @@ -111,7 +111,6 @@
</div>
<div id="remoteEditError" class="error note" style="display:none">
</div>
<div id="remoteEditWait" style="display:none"></div>
<div id="remoteEditTarget" >

</div>
Expand Down
232 changes: 151 additions & 81 deletions rundeckapp/grails-app/views/framework/nodes.gsp
Expand Up @@ -47,120 +47,193 @@
}});
}
/*********
* remote editor
*********/
var remoteSite;
//remote edit loader
var remoteEditStarted=false;
var remoteEditExpect=false;
/**
* Start remote editor for node with url
* @param name node name
* @param url url
*/
function doRemoteEdit(name,url){
_remoteEditClear();
$('editNodeIdent').innerHTML=name;
//create iframe for url
var hold=$('remoteEditholder');
var tgt=$('remoteEditTarget');
var ident=$('editNodeIdent');
ident.innerHTML=name;
var ifm = document.createElement('iframe');
ifm.width="640px";
ifm.height="480px";
_remoteEditExpect(url);
ifm.src=url;
remoteSite=url;
tgt.hide();
tgt.appendChild(ifm);
$('remoteEditTarget').appendChild(ifm);
_remoteEditShow();
}
//setup functions
/**
* Begin listener for message protocol from origin url
* @param originUrl
*/
function _remoteEditExpect(originUrl){
remoteEditExpect=true;
remoteSite=originUrl;
remoteEditStarted=false;
Event.observe(window,'message', _rdeckNodeEditOnmessage);
}
/**
* Stop listener for message protocol
*/
function _remoteEditStop(){
remoteEditExpect=false;
remoteSite=null;
remoteEditStarted=false;
Event.stopObserving(window,'message', _rdeckNodeEditOnmessage);
}
/**
* Clear/reset remote editor dom content
*/
function _remoteEditClear(){
_remoteEditStop();
_clearTarget();
$('editNodeIdent').innerHTML='';
var errhold=$('remoteEditError');
errhold.innerHTML="";
errhold.hide();
$('remoteEditResultHolder').hide();
_rdeckNodeEditWaiting();
}
var waitingStart=false;
var waitingStartTimer;
var remoteTimeoutSecs=30;
function _rdeckNodeEditStartTimeout(){
if(waitingStart){
_rdeckNodeEditFinishedError("Remote editor did not load in "+remoteTimeoutSecs+" seconds. There may be an error or the server is unavailable.");
if($('remoteEditCloseText')){
$('remoteEditCloseText').innerHTML="Close remote editing";
}
}
function _rdeckNodeEditDoneWaiting(){
waitingStart=false;
clearTimeout(waitingStartTimer);
$('remoteEditWait').hide();
}
function _rdeckNodeEditWaiting(){
waitingStart=true;
waitingStartTimer=setTimeout(_rdeckNodeEditStartTimeout,remoteTimeoutSecs*1000);
$('remoteEditWait').show();
$('remoteEditWait').loading();
$('nodesTable').hide();
$('${rkey}nodesfilterholder').hide();
/**
* Show remote editor dom content
*/
function _remoteEditShow(){
$('remoteEditTarget').show();
$('remoteEditholder').show();
}
function _rdeckNodeEditStarted(){
_rdeckNodeEditDoneWaiting();
var hold=$('remoteEditholder');
var tgt=$('remoteEditTarget');
tgt.show();
$('remoteEditResultHolder').hide();
$('nodesTable').hide();
$('${rkey}nodesfilterholder').hide();
hold.show();
}
/**
* Hide remote editor dom content
*/
function _remoteEditHide(){
$('remoteEditholder').hide();
$('remoteEditTarget').hide();
$('remoteEditToolbar').show();
$('nodesTable').show();
$('${rkey}nodesfilterholder').show();
}
/**
* Clear iframe holder
*/
function _clearTarget(){
$('remoteEditTarget').innerHTML="";
$('remoteEditTarget').hide();
}
/**
* Finish all node editor stuff, and hide it
*/
function _remoteEditCompleted(){
_remoteEditStop();
_remoteEditHide();
_remoteEditClear();
}
//protocol handler functions
/**
* handler for :finished message
* @param changed true if changes were saved
*/
function _rdeckNodeEditFinished(changed){
_rdeckNodeEditDoneWaiting();
_remoteEditStop();
_clearTarget();
if(changed){
$('remoteEditResultText').innerHTML="Node changes were saved successfully.";
}else{
$('remoteEditResultText').innerHTML="Node changes were not saved.";
}
var tgt=$('remoteEditTarget');
tgt.innerHTML="";
tgt.hide();
$('remoteEditToolbar').hide();
$('remoteEditResultHolder').show();
}
function _rdeckNodeEditCompleted(){
_rdeckNodeEditDoneWaiting();
var hold=$('remoteEditholder');
var tgt=$('remoteEditTarget');
tgt.innerHTML="";
hold.hide();
$('remoteEditToolbar').show();
$('nodesTable').show();
$('${rkey}nodesfilterholder').show();
var errhold=$('remoteEditError');
errhold.innerHTML="";
errhold.hide();
}
function _rdeckNodeEditFinishedError(msg){
_rdeckNodeEditDoneWaiting();
var hold=$('remoteEditholder');
var tgt=$('remoteEditTarget');
$('remoteEditWait').hide();
tgt.innerHTML="";
/**
* handler for error message
* @param origin
* @param msg
*/
function _rdeckNodeEditError(origin,msg){
_remoteEditStop();
_clearTarget();
var errhold=$('remoteEditError');
errhold.innerHTML="Remote editor reported an error: "+msg;
errhold.innerHTML=(origin?origin+" reported an error: ":"")+msg;
errhold.show();
}
function onmessage(msg){
/**
* handler for :started message
*/
function _rdeckNodeEditStarted(){
remoteEditStarted=true;
if($('remoteEditCloseText')){
$('remoteEditCloseText').innerHTML="Cancel and close";
}
}
var PROTOCOL='rundeck:node:edit';
/**
* onmessage handler
* @param msg
*/
function _rdeckNodeEditOnmessage(msg){
if(!remoteEditExpect || !remoteSite || !remoteSite.startsWith(msg.origin+"/")){
return;
}
var data=msg.data;
var origin=msg.origin;
if(data.startsWith('rundeck:node:edit:started')){
if(!remoteEditStarted && PROTOCOL+':started'==data){
_rdeckNodeEditStarted();
}else if(data.startsWith('rundeck:node:edit:finished:true')){
_rdeckNodeEditFinished(true);
}else if(data.startsWith('rundeck:node:edit:error')){
var err=data.substring('rundeck:node:edit:error'.length);
}else if(PROTOCOL+':error'==data || data.startsWith(PROTOCOL+':error:')){
var err=data.substring(PROTOCOL+':error'.length);
if(err.startsWith(":")){
err=err.substring(1);
}
_rdeckNodeEditFinishedError(err?err:"(No message)");
}else if(data.startsWith('rundeck:node:edit:finished')){
_rdeckNodeEditFinished(false);
}else{
_rdeckNodeEditFinishedError("Unexpected response: "+data);
_rdeckNodeEditError(msg.origin,err?err:"(No message)");
}else if (remoteEditStarted){
if(PROTOCOL+':finished:true'==data){
_rdeckNodeEditFinished(true);
}else if(PROTOCOL+':finished:false'==data){
_rdeckNodeEditFinished(false);
}else{
_rdeckNodeEditError(null,"Unexpected message received from ["+msg.origin+"]: "+data);
}
}
}
if (typeof window.addEventListener != 'undefined') {
window.addEventListener('message', onmessage, false);
} else if (typeof window.attachEvent != 'undefined') {
window.attachEvent('onmessage', onmessage);
}
</script>
<style type="text/css">
Expand Down Expand Up @@ -189,9 +262,6 @@
#remoteEditholder .toolbar{
margin:4px;
}
#remoteEditholder #remoteEditWait{
margin:10px;
}
</style>
</head>
<body>
Expand Down

0 comments on commit ed7ac6b

Please sign in to comment.