Smolder
view release on metacpan or search on metacpan
htdocs/js/smolder.js view on Meta::CPAN
new Ajax.Autocompleter(
'architecture',
'architecture_auto_complete',
'/app/developer_projects/architecture_options'
);
},
'input.auto_submit' : function(element) {
element.onchange = function(event) {
element.form.onsubmit();
return false;
}
},
'select.auto_submit' : function(element) {
element.onchange = function(event) {
element.form.onsubmit();
return false;
}
},
// for ajaxable forms and anchors the taget div for updating is determined
// as follows:
// Specify a the target div's id by adding a 'for_$id' class to the elements
// class list:
// <a class="ajaxable for_some_div" ... >
// This will make the target a div named "some_div"
// If no target is specified, then it will default to "content"
'a.ajaxable' : function(element) {
Smolder.makeLinkAjaxable(element);
},
'form.ajaxable' : function(element) {
Smolder.makeFormAjaxable(element);
},
'div.crud' : function(element) {
var matches = element.className.match(/(^|\s)for_(\w+)($|\s)/);
var url = "/app/" + matches[2];
new Smolder.CRUD(element.id, url);
},
'form.resetpw_form': function(element) {
Smolder.makeFormAjaxable(element);
// extend the onsubmit handler to turn off the popup
var popupId = element.id.replace(/_form$/, '');
var oldOnSubmit = element.onsubmit;
element.onsubmit = function() {
oldOnSubmit();
Smolder.PopupForm.toggle(popupId);
return false;
};
},
// on the preferences form, the project selector should update
// the preferences form with the selected projects preferences
// from the server
'#project_preference_selector': function(element) {
var form = element.form;
// if we start off looking at the default options
if( element.value == form.elements['default_pref_id'].value ) {
Element.show('dev_prefs_sync_button');
// if we want to show some info - Element.show('default_pref_info');
}
element.onchange = function() {
// if we are the default preference, then show the stuff
// that needs to be shown
if( element.value == form.elements['default_pref_id'].value ) {
Element.show('dev_prefs_sync_button');
// if we want to show some info - Element.show('default_pref_info');
} else {
Element.hide('dev_prefs_sync_button');
// if we want to show some info - Element.hide('default_pref_info');
}
// get the preference details from the server
Smolder.show_indicator('pref_indicator');
new Ajax.Request(
'/app/developer_prefs/get_pref_details',
{
parameters: Form.serialize(form),
asynchronous: true,
onComplete: function(response, json) {
// for every value in our JSON response, set that
// same element in the form
$A(['email_type', 'email_freq', 'email_limit']).each(
function(name) {
var elm = form.elements[name];
elm.value = json[name];
Smolder.flash(elm);
}
);
Smolder.hide_indicator('pref_indicator');
},
onFailure: function() { Smolder.show_error() }
}
);
};
},
// submit the preference form to sync the other preferences
'#dev_prefs_sync_button': function(element) {
element.onclick = function() {
var form = $('update_pref');
form.elements['sync'].value = 1;
Smolder.Ajax.form_update({
form : form,
target : 'developer_prefs'
});
};
},
// hightlight selected text, textarea and select inputs
'input.hl': function(element) {
element.onfocus = function() { Smolder.highlight(element); };
element.onblur = function() { Smolder.unHighlight(element); };
},
'textarea.hl': function(element) {
element.onfocus = function() { Smolder.highlight(element); };
element.onblur = function() { Smolder.unHighlight(element); };
},
'select.hl': function(element) {
element.onfocus = function() { Smolder.highlight(element); };
element.onblur = function() { Smolder.unHighlight(element); };
},
// setup tooltips
'.tooltip_trigger': function(element) {
var matches = element.className.match(/(^|\s)for_([^\s]+)($|\s)/);
if( matches ) {
var target = matches[2];
if( target ) {
Smolder.setup_tooltip(element, $(target));
Smolder.setup_tooltip($(target), $(target));
}
}
},
// TAP Matrix triggers for more test file details
'.tap a.details_trigger' : function(el) {
// get the id of the target div
var matches = el.id.match(/^for_(.*)$/);
var target = matches[1];
// get the id of the indicator image
matches = el.className.match(/(^|\s)show_(\S*)($|\s)/);
var indicator = matches[2];
el.onclick = function() {
if( Element.visible(target) ) {
$(target + '_tap_stream').hide();
Effect.BlindUp(target, { duration: .1 });
} else {
$(indicator).style.visibility = 'visible';
Smolder.Ajax.update({
url : el.href,
target : target,
indicator : 'none',
onComplete : function() {
window.setTimeout(function() { $(indicator).style.visibility = 'hidden'}, 200);
Effect.BlindDown(
target,
// reapply any dynamic bits
{
afterFinish : function() {
$(target + '_tap_stream').show();
$$('.tooltip_trigger').each(function(el) {
var diag = $(el).select('.tooltip')[0];
Smolder.setup_tooltip(el, diag);
});
},
( run in 0.420 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )