--- Webpacus/root/js/webpac.js 2005/11/24 22:29:34 136 +++ Webpacus/root/js/webpac.js 2005/12/14 18:56:17 242 @@ -3,33 +3,228 @@ // Documented in this code only, I'm afraid. Beware of dragons! // Dobrica Pavlinusic dpavlin(at)rot13(dot)org 2005-11-22 +/* + load another template +*/ function load_template(template_name) { -// alert('load_template '+template_name+' old template is '+$('template_name').value); + + var old_template = $('template_name').value; + + Logger.info('load_template: '+template_name+' (old: '+old_template+')'); + + if (template_name == old_template) { + Logger.error('why reload same template?'); + return false; + } $('template_name').value = template_name; + submit_results_form(); + return false; +} + +/* + pager +*/ +function load_results_page(page_nr) { + + if (parseInt(page_nr) != page_nr) { + Logger.error("load_results_page can't parseInt "+page_nr); + return false; + } + + var old_page = get_page_nr(); + + if (page_nr < 1) { + Logger.error("load_results_page called with '"+page_nr+"' < 1"); + return false; + } + + Logger.info('load_results_page: '+page_nr+' (from page: '+old_page+')'); + + if (page_nr == old_page) { + Logger.error('why reload same page?'); + return false; + } + + $('page_nr').value = page_nr; + submit_results_form(); + + return false; +} + +function get_page_nr() { + var page_nr = parseInt( $('page_nr').value ) || 1; + return page_nr; +} + +function reset_page_nr( nr ) { + if (! nr) nr = 1; + Logger.info('reset_page_nr to '+nr); + page_nr = nr; + $('page_nr').value = page_nr; +} + +/* syntaxtic sugar */ +function set_page_nr(nr) { + return load_results_page(nr); +} + +function next_page() { + load_results_page( get_page_nr() + 1 ); + return false; +} - new Ajax.Updater( 'results', '/results', { - parameters: Form.serialize( $('results_form') ), - asynchronous: 1, - onLoading: function(request) { - show_searching(); - }, - onLoaded: function(request) { - Element.hide('searching'); -/* hide_searching(); */ - } - } ) ; +function prev_page() { + load_results_page( get_page_nr() - 1 ); return false; } +/* + submit results form using AJAX +*/ +function submit_results_form() { + var results_form = $('results_form'); + + if (results_form) { + var form_params = Form.serialize( results_form ); + + Logger.debug('Ajax.Updater(results,/results) '+form_params); + + new Ajax.Updater( 'results', '/search/results', { + parameters: form_params, + asynchronous: 1, + onLoading: function(request) { + show_searching(); + }, + onLoaded: function(request) { + hide_searching(); + } + } ) ; + return false; + } else { + Logger.debug('no results_form element'); + return undef; + } + return false; +} + +/* + helper functions for submit_results_form() +*/ function show_searching() { + Logger.debug('show_searching'); Element.show('searching'); - new Effect.Fade('results', { duration: 0.3 }); +// new Effect.Fade('results', { duration: 0.3 }); + return false; } function hide_searching() { + Logger.debug('hide_searching'); Element.hide('searching'); - //new Effect.Highlight('results'); - new Effect.Appear('results', { duration: 0.3 }); +// new Effect.Highlight('results'); +// new Effect.Appear('results', { duration: 0.3 }); + return false; +} + +/* + load record nr in some template +*/ + +function load_rec(record_uri, tmp_template_filename) { + if (! tmp_template_filename) tmp_template_filename = template_filename; + Logger.info('load_rec '+record_uri+' in '+tmp_template_filename); + + var results_form = $('results_form'); + + if (results_form) { + var args = '?record_uri='+record_uri+'&template_filename='+tmp_template_filename; + Logger.debug('Ajax.Updater(results,/search/record) '+args); + + new Ajax.Updater( 'results', '/search/record'+args, { + asynchronous: 1, + onLoading: function(request) { + show_searching(); + }, + onLoaded: function(request) { + hide_searching(); + } + } ) ; + return false; + } else { + Logger.debug('no results_form element'); + return undef; + } + return false; } +/* + autocompleter which isn't (a suggest box) + - don't just on first option on appear + - removed fade-in/out effect + - added configurable width (content width? centered?) + - add icon which means suggest + + hopefully, this implementation won't break when I update prototype next time :-) +*/ + + +Ajax.Suggest = Class.create(); +Logger.debug('Created Ajax.Suggest Class'); +Object.extend(Object.extend(Ajax.Suggest.prototype, Ajax.Autocompleter.prototype), { + initialize: function(element, update, url, options) { + this.baseInitialize(element, update, options); + this.options.asynchronous = true; + this.options.onComplete = this.onComplete.bind(this); + this.options.defaultParams = this.options.parameters || null; + this.url = url; + this.ignoreReturn = true; + + Logger.debug('Ajax.Sugget initialize '+element+','+update+','+url); + + this.options.onShow = function(element, update) { + if(!update.style.position || update.style.position=='absolute') { + update.style.position = 'absolute'; + Position.clone(element, update, {setHeight: false, offsetTop: element.offsetHeight}); + } + new Element.show(update); + Logger.debug('Ajax.Suggest.onShow'); + }; + + this.options.onHide = function(element, update) { + new Element.hide(update); + Logger.debug('Ajax.Suggest.onHide'); + }; + }, + + getUpdatedChoices: function() { + entry = encodeURIComponent(this.options.paramName) + '=' + + encodeURIComponent(this.getToken()); + + this.options.parameters = this.options.callback ? + this.options.callback(this.element, entry) : entry; + + if(this.options.defaultParams) + this.options.parameters += '&' + this.options.defaultParams; + + Logger.debug('Ajax.Suggest called '+this.url); + new Ajax.Request(this.url, this.options); + }, + + onComplete: function(request) { + Logger.debug('Ajax.Suggest onComplete called'); + this.updateChoices(request.responseText); + }, + + markPrevious: function() { + if(this.index > 0) this.index-- + // else this.index = this.entryCount-1; + }, + + markNext: function() { + if(this.index < this.entryCount-1) this.index++ + // else this.index = 0; + } + +}); + +