/** * Sneep Javascript Library - sneep.js * * This library should be loaded by the EPrints Javascript autoloader. It * has a dependency on Prototype and Scriptaculous which should be included * with EPrints by default. */ /***************************************************** * Sneep JS Functions *****************************************************/ function sneepLoadSneepLayer(url) { var type = url.match(/type=(\w*)&?/)[1]; new Ajax.Request(url, { method: 'get', onCreate: function() { $('sneep_item_panel_'+type).update('
Loading '+type+'s...
Adding '+type+'...');
element.appendChild(loader);
});
},
onSuccess: function(transport) {
var response = transport.responseText; //.evalJSON();
try {
var json = response.evalJSON();
} catch(err) {
//alert( "ERROR! "+err );
return
}
if (json == null) {
alert('json is null');
return;
}
if (json.status == 0) {
sneepRenderErrorMessage(json.content);
} else {
// If we successfully created the sneep then add it to the list.
var no_sneeps = $$('#ep_sneep_no_'+type+'s').first();
if (no_sneeps != null) {
no_sneeps.remove();
}
if (json.status == 1) {
$$('.ep_sneep_'+type+'_list').each(function (element) {
var newcontent = json.content+element.innerHTML+
''+
'sneepRegisterEditHandlers();'+
'sneepRegisterDeleteHandlers();'+
'';
element.update(newcontent);
});
}
}
$('ep_sneep_loader').remove();
$$('.ep_sneep_input_content').each(function(element) {
element.clear();
element.enable();
});
$('sneep_'+type+'_submit').enable();
}
});
}
function sneepParseUrl(url) {
matches = url.match(/sneepid=(\d*)&type=(\w*)/);
return { sneepid: matches[1], sneeptype: matches[2] };
}
function sneepRegisterEditHandlers() {
$$(".ep_sneep_editlink").each(function(link) {
link.stopObserving('click');
link.observe('click', sneepHandleEdit);
});
}
/* sf2 */
function sneepDeregisterEditHandlers() {
$$(".ep_sneep_editlink").each(function(link) {
link.stopObserving('click');
link.observe('click', function(event) { event.stop(); return false; });
});
}
function sneepHandleEdit(event) {
event.stop();
var element = event.element();
var parsedUrl = sneepParseUrl(element.readAttribute('href'));
var sneepid = parsedUrl.sneepid;
var sneeptype = parsedUrl.sneeptype;
var sneepdivid = 'sneep-'+sneeptype+'-'+sneepid;
var titleid = sneepdivid+'-title';
var contentid = sneepdivid+'-content';
var origtitle = null;
var origcontent = null;
if ((sneeptype == 'note' || sneeptype == 'tag') && $(titleid) != null) {
origtitle = $(titleid).firstChild.innerHTML;
}
if (sneeptype == 'comment' || sneeptype == 'note') {
origcontent = $(contentid).innerHTML;
}
var sneepformid = 'ep_sneep_'+sneeptype+'_form_'+sneepid;
var sneepeditform = new Element('form', { id: sneepformid, method: 'post', action: element.readAttribute('href') } );
sneepeditform.update($(sneepdivid).innerHTML);
sneepeditform.observe('submit', sneepUpdateSubmit.bindAsEventListener({ sneeptype: sneeptype }));
$(sneepdivid).update();
$(sneepdivid).appendChild(sneepeditform);
if (origtitle != null) {
var edittitle = origtitle.trim();
$(titleid).update('');
}
if (origcontent != null) {
var editcontent = origcontent.trim();
$(contentid).update('');
}
var footer = new Element('p');
var callback = new Element('input', { type:'hidden', name:'callback', value:'1' });
var sneepid = new Element('input', { type:'hidden', name:'sneepid', value:sneepid });
var action = new Element('input', { type:'hidden', name:'action', value: 'edit' });
var update = new Element('input', { type:'submit', value:'Update' });
var cancel = new Element('input', { type:'button', value:'Cancel' });
cancel.observe('click', function(event) {
if( $(titleid) != null )
$(titleid).innerHTML = origtitle;
$(contentid).innerHTML = origcontent;
event.stop();
sneepRegisterEditHandlers();
return false;
});
footer.appendChild(callback);
footer.appendChild(sneepid);
footer.appendChild(action);
footer.appendChild(update);
footer.appendChild(cancel);
sneepRegisterDeleteHandlers();
sneepDeregisterEditHandlers();
$(contentid).appendChild(footer);
}
function sneepUpdateSubmit(event, sneeptype) {
var sneeptype = this.sneeptype;
event.stop();
var form = event.element();
new Ajax.Request(form.readAttribute('action'), {
parameters: form.serialize(true),
onComplete: function(transport) {
var response = transport.responseJSON;
/* sf2: trick to append the child Nodes otherwise you get twice the 'sneep-'+sneeptype+'-'+sneepid div */
/* sf2: added direct calls to the ...Handlers() methods */
var el = $('sneep-'+sneeptype+'-'+response.sneepid);
var tmpEl = new Element('div');
tmpEl.update(response.content);
el.innerHTML = "";
var children = tmpEl.childElements()[0].childElements();
for(var i=0;i