blob: 1eff453fff9f7e91e4acf0fcf9eb695f6006f051 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* Runtime JavaScript library for Cocoon forms.
* NOTE: This file will be trimmed down to contain only the necessary
* features for dynamic behaviour on non Ajax-capable browsers.
* Advanced widgets such as double selection list and multivalue
* field will be refactored as Dojo widgets.
* NOTE: (2.1.11) moving support for non-ajax forms to cocoon.forms.common and the SimpleForm Widget.
*
* This file has dependencies on cocoon.forms.common
* /_cocoon/resources/forms/js/common.js
*
* @version $Id$
*/
/**
* Deprecated legacy functions
* To be removed in 2.1.12(?) release
*/
forms_submitForm = function() {
if (dojo) dojo.debug("DEPRECATED: forms_submitForm(), use cocoon.forms.submitForm(element[, name, params]) instead");
// we do not know which form is being submitted, let's at least try to find it.
var form = document.getElementById("_cforms_default_form_"); // maybe forms_onsubmitHandlers.push has been called
if (!form) {
for (var i = 0; i < document.forms.length; i++) {
if (document.forms[i].getAttribute("dojoWidgetId") != "") {
form = document.forms[i];
form.setAttribute("id", "_cforms_default_form_"); // just in case we get here again ...
}
if (form) break;
}
}
if (!form) { // last ditch attempt, maybe dojo is not being used
form = document.forms[0];
}
cocoon.forms.submitForm.apply(cocoon.forms, [form]);
}
forms_getForm = function(element) {
if (dojo) dojo.debug("DEPRECATED: forms_getForm(element), use cocoon.forms.getForm(element) instead");
cocoon.forms.getForm.apply(cocoon.forms, arguments);
}
forms_onsubmit = function() {
if (dojo) dojo.debug("DEPRECATED: forms_onsubmit(), use cocoon.forms.callOnSubmitHandlers(form) instead");
var form = document.getElementById("_cforms_default_form_");
cocoon.forms.callOnSubmitHandlers.apply(cocoon.forms, [form]);
}
forms_onload = function() {
if (dojo) dojo.debug("DEPRECATED: forms_onload(), use cocoon.forms.callOnLoadHandlers() instead");
cocoon.forms.callOnLoadHandlers.apply(cocoon.forms, arguments);
}
var forms_onloadHandlers = new Array();
forms_onloadHandlers.push = function(handler) {
if (dojo) dojo.debug("DEPRECATED: forms_onloadHandlers.push(handler), use cocoon.forms.addOnLoadHandler(handler) instead");
cocoon.forms.addOnLoadHandler.apply(cocoon.forms, arguments)
}
var forms_onsubmitHandlers = new Array();
forms_onsubmitHandlers.push = function(handler) {
if (dojo) dojo.debug("DEPRECATED: forms_onsubmitHandlers.push(handler), use cocoon.forms.addOnSubmitHandler(form, handler) instead");
// we do not know which form the handler is from, let's at least try to find it.
var form = document.getElementById("_cforms_default_form_"); // maybe we did this before
if (!form) {
for (var i = 0; i < document.forms.length; i++) {
if (document.forms[i].getAttribute("dojoWidgetId") != "") {
form = document.forms[i];
form.setAttribute("id", "_cforms_default_form_"); // make it easier to find is there are more submit handlers
}
if (form) break;
}
}
if (!form) { // last ditch attempt, maybe dojo is not being used
form = document.forms[0];
if (form) form.setAttribute("id", "_cforms_default_form_");
}
cocoon.forms.addOnSubmitHandler.apply(cocoon.forms, [form, handler]);
}
// TODO: Not called
function forms_moveInBody(element) {
element.parentNode.removeChild(element);
document.body.appendChild(element);
}
function forms_createOptionTransfer(id, submitOnChange) {
var result = new OptionTransfer(id + ".unselected", id);
result.setAutoSort(true);
// add to onload handlers
result.forms_id = id + ":input";
result.forms_onload = function() {
var form = cocoon.forms.getForm(document.getElementById(this.forms_id));
this.init(form);
sortSelect(this.left);
sortSelect(this.right);
}
result.submitOnChange = submitOnChange;
result.forms_transferLeft = function() {
this.transferLeft();
if (this.submitOnChange) {
cocoon.forms.submitForm(document.getElementById(this.forms_id));
}
}
result.forms_transferRight = function() {
this.transferRight();
if (this.submitOnChange) {
cocoon.forms.submitForm(document.getElementById(this.forms_id));
}
}
result.forms_transferAllLeft = function() {
this.transferAllLeft();
if (this.submitOnChange) {
cocoon.forms.submitForm(document.getElementById(this.forms_id));
}
};
result.forms_transferAllRight = function() {
this.transferAllRight();
if (this.submitOnChange) {
cocoon.forms.submitForm(document.getElementById(this.forms_id));
}
};
cocoon.forms.addOnLoadHandler(result);
// add to onsubmit handlers
result.forms_onsubmit = function() {
// Select all options in the "selected" list to that
// its values are sent.
selectAllOptions(this.right);
}
cocoon.forms.addOnSubmitHandler(document.getElementById(id), result);
return result;
}
/**
* Show a tab in a <wi:group>
*
* @param tabgroup (string) name of the <wi:group>
* @param idx (integer) index of the selected tab
* @param length (integer) total number of tabs
* @param state (string, optional) name of the input storing the tabgroup state
*/
function forms_showTab(tabgroup, idx, length, state) {
// Change state value
if (state.length > 0) {
document.getElementById(state).value = idx;
}
for (var i = 0; i < length; i++) {
// Change tab status (selected/unselected)
var tab = document.getElementById(tabgroup + "_tab_" + i);
if (tab != null) {
tab.className = (i == idx) ? 'forms-tab forms-activeTab': 'forms-tab';
}
// Change tab content visibilty
var tabitems = document.getElementById(tabgroup + "_items_" + i);
if (tabitems != null) {
tabitems.style.display = (i == idx) ? '' : 'none';
// execute event handler if any
if (i == idx &&
window.onTabShownHandlers != null &&
window.onTabShownHandlers[tabgroup] != null) {
var onShowHandler = window.onTabShownHandlers[tabgroup][tabgroup + "_items_" + i];
if (onShowHandler != null) {
eval(onShowHandler);
}
}
}
}
}