/** * File: ModelAdmin.js */ /** * Javascript handlers for generic model admin. * * Most of the work being done here is intercepting clicks on form submits, * and managing the loading and sequencing of data between the different panels of * the CMS interface. * * @todo add live query to manage application of events to DOM refreshes * @todo alias the $ function instead of literal jQuery */ (function($) { $.entwine('ss', function($){ ////////////////////////////////////////////////////////////////// // Search form ////////////////////////////////////////////////////////////////// /** * Class: #ModelClassSelector select * * If a dropdown is used to choose between the classes, it is handled by this code */ $('#ModelClassSelector select').entwine({ onmatch: function() { // Initialise the form by calling this onchange event straight away this.change(); this._super(); }, /** * Function: onchange * * Set up an onchange function to show the applicable form and hide all others */ onchange: function(e) { var self = this; this.find('option').each(function() { var val = $(this).attr('value'); $('#' + val)[(val == $(self).val()) ? 'show' : 'hide'](); }); } }); /** * Class: #SearchForm_holder form * * Submits a search filter query and attaches event handlers * to the response table, excluding the import form because * file ($_FILES) submission doesn't work using AJAX * * Note: This is used for Form_CreateForm and all Form_SearchForm_* variations */ $('#SearchForm_holder form').entwine({ /** * Function: onsubmit */ onsubmit: function(e) { // Import forms are processed without ajax if(this.attr('id').match(/^Form_ImportForm/)) return true; $('.cms-editor-dialogs').closeRightPanel(); this.trigger('beforeSubmit'); var btn = $(this[0].clickedButton); btn.addClass('loading'); $('.cms-content').loadForm( this.attr('action'), null, function() { btn.removeClass('loading'); }, {data: this.serialize()} ); return false; } }); /** * Class: a.form_frontend_function.toggle_result_assembly * * Column selection in search form */ $('a.form_frontend_function.toggle_result_assembly').entwine({ /** * Function: onclick */ onclick: function(e) { var toggleElement = $(this).next(); toggleElement.toggle(); return false; } }); /** * Class: a.form_frontend_function.tick_all_result_assembly */ $('a.form_frontend_function.tick_all_result_assembly').entwine({ /** * Function: onclick */ onclick: function(e) { var resultAssembly = $(this).prevAll('div#ResultAssembly').find('ul li input'); resultAssembly.attr('checked', 'checked'); return false; } }); $('a.form_frontend_function.untick_all_result_assembly').entwine({ onclick: function(e) { var resultAssembly = $(this).prevAll('div#ResultAssembly').find('ul li input'); resultAssembly.removeAttr('checked'); return false; } }); /** * Class: .resultsTable tbody td * * Table record handler for search result record */ $('.resultsTable tbody td').entwine({ /** * Function: onclick */ onclick: function(e) { var firstLink = this.find('a[href]'); if(!firstLink) return; if(window.History.enabled) { $('.cms-container').loadPanel(firstLink.attr('href'), '', {selector: '.cms-content-fields form:first'}); return false; } } }); /** * Class: #Form_ManagedModelsSelect * * Add object button */ $('#Form_ManagedModelsSelect').entwine({ /** * Function: onsubmit */ onsubmit: function(e) { className = $('select option:selected', this).val(); requestPath = this.attr('action').replace('ManagedModelsSelect', className + '/add'); var $button = $(':submit', this); $('.cms-content').loadForm( requestPath, null, function() { $button.removeClass('loading'); $button = null; } ); return false; } }); /** * Class: .cms-edit-form input[name=action_doDelete] * * RHS panel Delete button */ $('.cms-edit-form :submit[name=action_doDelete]').entwine({ // Function: onclick onclick: function(e) { if(!confirm(ss.i18n._t('ModelAdmin.REALLYDELETE', 'Really delete?'))) { this.removeClass('loading'); return false; } } }); /** * Class: .importSpec * * Toggle import specifications */ $('.importSpec').entwine({ onmatch: function() { this.hide(); this.find('a.detailsLink').click(function() { $('#' + $(this).attr('href').replace(/.*#/,'')).toggle(); return false; }); this._super(); } }); $('.cms-editor-dialogs').entwine({ /** * Close TinyMCE image, link or flash panel. * this function is called everytime a new search, back or add new DataObject are clicked **/ closeRightPanel: function(){ if($('.cms-editor-dialogs').is(':visible')) { $('.cms-editor-dialogs').hide(); $('#Form_EditorToolbarMediaForm').hide(); $('#Form_EditorToolbarLinkForm').hide(); } } }); }); })(jQuery);