You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lo...@apache.org on 2014/09/04 18:07:38 UTC
svn commit: r1622508 [2/3] - in /myfaces/tobago/trunk:
tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/declaration/
tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/html/
tobago-example/ tobago-example/tobago-example-de...
Copied: myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/tobago-tab.js (from r1622174, myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/tobago.js)
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/tobago-tab.js?p2=myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/tobago-tab.js&p1=myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/tobago.js&r1=1622174&r2=1622508&rev=1622508&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/tobago.js (original)
+++ myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/tobago-tab.js Thu Sep 4 16:07:37 2014
@@ -15,2464 +15,6 @@
* limitations under the License.
*/
-var Tobago = {
-
- // -------- Constants -------------------------------------------------------
-
- /**
- * Component separator constant
- * @const
- * @type {string}
- */
- COMPONENT_SEP: ':',
-
- /**
- * Tobago's subComponent separator constant
- * @const
- * @type {string}
- */
- SUB_COMPONENT_SEP: '::',
-
- EMPTY_HREF: window.all ? '#' : 'javascript:;',
-
- /**
- * regexp to find non valid javascript name characters in scriptIds
- */
- scriptIdRegExp: new RegExp('[/.-]', 'g'),
-
- scriptFragmentRegExp: /(?:<script(?:\n|.)*?>)(?:(?:\n|\s)*?<!--)?((\n|.)*?)(?:<\/script>)/,
-
- // -------- Variables -------------------------------------------------------
-
- /**
- * the html body object of current page.
- * set via init function
- */
- page: null,
-
- /**
- * The html form object of current page.
- * set via init function
- */
- form: null,
-
- /**
- * The hidden html input object for submitted actionId.
- * set via init function
- */
- action: null,
-
- /**
- * The hidden html input object for the contextPath.
- * set via init function
- */
- contextPath: null,
-
- /**
- * Blank page e. g. useful to set src of iframes (to prevent https problems in ie, see TOBAGO-538)
- */
- blankPage: null,
-
- /**
- * The id of the element which should became the focus after loading.
- * Set via renderer if requested.
- */
- focusId: undefined,
-
- errorFocusId: undefined,
-
- lastFocusId: undefined,
-
- /**
- * The resize action is a function which should be executed when the window was resized.
- * Can be defined as facet in the page.
- */
- resizeAction: undefined,
- resizeEventCount: 0,
-
- htmlIdIndex: 0,
-
- createHtmlId: function() {
- var id = '__tbg_id_' + this.htmlIdIndex++;
- console.debug('created id = ' + id); // @DEV_ONLY
- return id;
- },
-
- reloadTimer: {},
-
- jsObjects: new Array(),
-
- eventListeners: new Array(),
-
- /**
- * Check browser types and versions.
- * Please try to use jQuery.support instead of this object!
- */
- browser: {
- isMsie: false,
- isMsie6: false,
- isMsie67: false,
- isMsie678: false,
- isMsie6789: false,
- isMsie678910: false,
- isGecko: false,
- isWebkit: false
- },
-
- /**
- * Object to store already loaded script files
- * to prevent multiple loading via Ajax requests.
- */
- registeredScripts: {},
-
- /**
- * Array to queue ScriptLoaders.
- */
- scriptLoaders: new Array(),
-
- ajaxComponents: {},
-
- /**
- * Flag indicating that the page is completely loaded.
- */
- pageIsComplete: false,
-
- /**
- * Flag indicating that currently a scriptLoader is running.
- */
- scriptLoadingActive: false,
-
- isSubmit: false,
-
- initMarker: false,
-
- listeners: {
- documentReady: [[], [], [], []],
- windowLoad: [[], [], [], []],
- beforeSubmit: [[], [], [], []],
- afterUpdate: [[], [], [], []],
- beforeUnload: [[], [], [], []],
- beforeExit: [[], [], [], []]
- },
-
- // -------- Functions -------------------------------------------------------
-
- /**
- * Register a function to be executed on certain events.
- * @param listener Function to be executed.
- * @param phase The phase when code should be executed (e. g. Tobago.Phase.DOCUMENT_READY).
- * @param order An optional order to sort function they depend on others (default: Tobago.Phase.Order.NORMAL).
- */
- registerListener: function(listener, phase, order) {
-
- if (order == undefined) {
- order = Tobago.Phase.Order.NORMAL;
- }
-
- var phaseMap;
- if (Tobago.Phase.DOCUMENT_READY == phase) {
- phaseMap = Tobago.listeners.documentReady;
- } else if (Tobago.Phase.WINDOW_LOAD == phase) {
- phaseMap = Tobago.listeners.windowLoad;
- } else if (Tobago.Phase.BEFORE_SUBMIT == phase) {
- phaseMap = Tobago.listeners.beforeSubmit;
- } else if (Tobago.Phase.AFTER_UPDATE == phase) {
- phaseMap = Tobago.listeners.afterUpdate;
- } else if (Tobago.Phase.BEFORE_UNLOAD == phase) {
- phaseMap = Tobago.listeners.beforeUnload;
- } else if (Tobago.Phase.BEFORE_EXIT == phase) {
- phaseMap = Tobago.listeners.beforeExit;
- } else {
- console.error("Unknown phase: " + phase); // @DEV_ONLY
- return;
- }
-
- phaseMap[order].push(listener);
- },
-
- /**
- * Tobago's central init function.
- * Called when the document (DOM) is ready
- */
- init: function() {
-
- if (this.initMarker) {
- return;
- }
- this.initMarker = true;
-
- console.time("[tobago] init"); // @DEV_ONLY
- console.time("[tobago] init (main thread)"); // @DEV_ONLY
- var page = jQuery(".tobago-page");
- this.page = page.get(0);
- this.form = page.find("form").get(0); // find() seems to be faster than children()
- this.addBindEventListener(this.form, 'submit', this, 'onSubmit');
- this.action = this.element(this.page.id + this.SUB_COMPONENT_SEP + 'form-action');
- this.contextPath = this.element(this.page.id + this.SUB_COMPONENT_SEP + 'context-path');
- this.blankPage = this.contextPath.value + '/org/apache/myfaces/tobago/renderkit/html/standard/blank.html';
- this.actionPosition = this.element(this.page.id + this.SUB_COMPONENT_SEP + 'action-position');
-
- this.addBindEventListener(window, 'unload', this, 'onUnload');
-
- for (var order = 0; order < Tobago.listeners.documentReady.length; order++) {
- var list = Tobago.listeners.documentReady[order];
- for (var i = 0; i < list.length; i++) {
- console.time("[tobago] init " + order + " " + i); // @DEV_ONLY
- list[i]();
- console.timeEnd("[tobago] init " + order + " " + i); // @DEV_ONLY
- }
- }
-
- console.time("[tobago] applicationOnload"); // @DEV_ONLY
- if (this.applicationOnload) {
- this.applicationOnload();
- }
- console.timeEnd("[tobago] applicationOnload"); // @DEV_ONLY
-
- if (Tobago.resizeAction) {
- // firefox submits an onresize event
- window.setTimeout(Tobago.registerResizeAction, 1000);
- }
-
- Tobago.ensureScrollbarWeights();
- window.setTimeout(Tobago.finishPageLoading, 1);
- console.timeEnd("[tobago] init (main thread)"); // @DEV_ONLY
- },
-
- finishPageLoading: function() {
- Tobago.registerCurrentScripts();
- console.time("[tobago] startScriptLoaders"); // @DEV_ONLY
- Tobago.startScriptLoaders();
- console.timeEnd("[tobago] startScriptLoaders"); // @DEV_ONLY
- Tobago.pageIsComplete = true;
- Tobago.setFocus();
- console.timeEnd("[tobago] init"); // @DEV_ONLY
- },
-
- registerResizeAction: function() {
- Tobago.addEventListener(window, 'resize', Tobago.resizePage);
- },
-
- onSubmit: function(listenerOptions) {
- var result = true; // Do not continue if any function returns false
- for (var order = 0; order < Tobago.listeners.beforeSubmit.length; order++) {
- var list = Tobago.listeners.beforeSubmit[order];
- for (var i = 0; i < list.length; i++) {
- result = list[i](listenerOptions);
- if (result == false) {
- break;
- }
- }
- }
- if (result != false && jQuery.isFunction(Tobago.applicationOnsubmit)) {
- result = Tobago.applicationOnsubmit(listenerOptions);
- }
- if (result == false) {
- this.isSubmit = false;
- return false;
- }
- var hidden = Tobago.element('tobago::partialIds');
- if (hidden) {
- this.form.removeChild(hidden);
- Tobago.partialRequestIds = undefined;
- }
- this.isSubmit = true;
-
- Tobago.storeClientDimension();
-
- Tobago.Popup.unlockBehind(jQuery(".tobago-popup-markup-modal"));
-
- Tobago.onBeforeUnload();
-
- return true;
- },
-
- storeClientDimension: function() {
- var page = jQuery(".tobago-page");
- page.children("form").first()
- .children(Tobago.Utils.escapeClientId(this.page.id + this.SUB_COMPONENT_SEP + 'form-clientDimension'))
- .val(Math.floor(page.width()) + ';' + Math.floor(page.height()));
- },
-
- onBeforeUnload: function() {
- if (Tobago.transition) {
- jQuery(".tobago-page").overlay();
- }
- Tobago.transition = Tobago.oldTransition;
- },
-
- /**
- * @deprecated
- */
- createOverlay: function (element, error, ajax) {
- element.overlay({error: error, ajax: ajax});
- },
-
- /**
- * @deprecated
- */
- deleteOverlay:function (element) {
- element.overlay("destroy");
- },
-
- /**
- * Wrapper function to call application generated onunload function
- */
- onUnload: function() {
-
- var phase = this.isSubmit ? Tobago.listeners.beforeUnload : Tobago.listeners.beforeExit;
-
- for (var order = 0; order < phase.length; order++) {
- var list = phase[order];
- for (var i = 0; i < list.length; i++) {
- list[i]();
- }
- }
-
- // deprecated:
- if (this.isSubmit && this.applicationOnunload) {
- this.applicationOnunload();
- } else if (!this.isSubmit && this.applicationOnexit) {
- this.applicationOnexit();
- }
- this.destroyObjects();
- },
-
- addJsObject: function(obj) {
- this.jsObjects[this.jsObjects.length] = obj;
- },
-
- destroyObjects: function() {
- this.removeEventListeners();
-
- for (var i = 0; i < this.jsObjects.length; i++) {
- try {
- this.destroyObject(this.jsObjects[i]);
- } catch (ex) {
- // ignore
- }
- }
- this.jsObjects.length = 0;
- delete this.jsObjects;
-
- delete this.page;
- delete this.form;
- delete this.action;
- delete this.actionPosition;
- delete this.contextPath;
- delete this.blankPage;
- delete this.lastFocusId;
- },
-
- removeEventListeners: function() {
- var count = 0;
- for (var i = 0; i < this.eventListeners.length; i++) {
- var el = this.eventListeners[i];
- this.removeEventListener(el);
- delete el.element;
- delete el.event;
- delete el.func;
- this.eventListeners[i] = undefined;
- count++;
- }
- delete this.eventListeners;
-// alert(count + " EverntListener geloescht");
- },
-
- destroyObject: function(obj) {
- if (obj.htmlElement) {
- // test
- delete obj.htmlElement.jsObjects;
- delete obj.htmlElement;
- } else {
- // Unknown Object --> delete all properties
- if (typeof obj == 'Object') {
- this.destroyJsObject(obj);
- } else if (typeof obj == 'Array') {
- obj.length = 0;
- delete obj;
- }
- }
- },
-
- destroyJsObject: function(obj) {
- try {
- for (var item in obj) {
- delete obj[item];
- }
- delete obj;
- } catch (ex) {
- // ignore
- }
- },
-
- /**
- * return true if page loading is complete.
- */
- isPageComplete: function() {
- return this.pageIsComplete;
- },
-
- /**
- * Submitting the page with specified actionId.
- * options.transition
- * options.target
- * options.focus
- */
- submitAction: function(source, actionId, options) {
- options = options || {};
-
- var transition = options.transition === undefined || options.transition == null || options.transition;
-
- if (options.focus) {
- var lastFocusId = this.createInput('hidden', this.page.id + this.SUB_COMPONENT_SEP + 'lastFocusId', options.focus);
- this.form.appendChild(lastFocusId);
- }
-
- Tobago.setActionPosition(source);
-
- Tobago.Transport.request(function() {
- if (!this.isSubmit) {
- this.isSubmit = true;
- var oldTarget = Tobago.form.target;
- Tobago.action.value = actionId;
- if (options.target) {
- Tobago.form.target = options.target;
- }
- Tobago.oldTransition = Tobago.transition;
- Tobago.transition = transition && !options.target;
-
- var listenerOptions = {
- source: source,
- actionId: actionId,
- options: options
- };
- var onSubmitResult = Tobago.onSubmit(listenerOptions);
- if (onSubmitResult) {
- try {
- // console.debug("submit form with action: " + Tobago.action.value);
- Tobago.form.submit();
- if (Tobago.browser.isMsie) {
- // without this "redundant" code the animation will not be animated in IE (tested with 6,7,8,9,10,11)
- var image = jQuery(".tobago-page-overlayCenter img");
- image.appendTo(image.parent());
- }
- } catch (e) {
- jQuery(".tobago-page").overlay("destroy");
- Tobago.isSubmit = false;
- alert('Submit failed: ' + e); // XXX localization, better error handling
- }
- }
- if (options.target) {
- Tobago.form.target = oldTarget;
- }
- if (options.target || !transition || !onSubmitResult) {
- this.isSubmit = false;
- Tobago.Transport.pageSubmitted = false;
- }
- }
- if (!this.isSubmit) {
- Tobago.Transport.requestComplete(); // remove this from queue
- }
-
-
- }, true);
- },
-
- setActionPosition: function(source) {
- var offset = jQuery(source).offset();
- var sourceWidth = Tobago.getWidth(source);
- var sourceHeight = Tobago.getHeight(source);
- Tobago.actionPosition.value
- = (offset ? parseInt(offset.left) + 'px,' : '0px,')
- + (offset ? parseInt(offset.top) + 'px,' : '0px,')
- + sourceWidth + 'px,' + sourceHeight + 'px';
-// alert("source='" + source + "' action-position=" + Tobago.actionPosition.value);
- },
-
- getJsfState: function() {
- var stateContainer = Tobago.element(Tobago.page.id + Tobago.SUB_COMPONENT_SEP + 'jsf-state-container');
- var jsfState = '';
- if (stateContainer) {
- for (var i = 0; i < stateContainer.childNodes.length; i++) {
- var child = stateContainer.childNodes[i];
- if (child.tagName == 'INPUT') {
- if (jsfState.length > 0) {
- jsfState += '&';
- }
- jsfState += encodeURIComponent(child.name);
- jsfState += '=';
- jsfState += encodeURIComponent(child.value);
- }
- }
- }
-// console.debug("jsfState = " + jsfState);
- return jsfState;
- },
-
- replaceJsfState: function(state) {
- if (state.indexOf('<script type') == 0) {
- state = state.match(new RegExp(Tobago.scriptFragmentRegExp, 'im'), '')[1];
-// console.debug("eval(" + state + ")");
- eval(state);
- return;
- }
- var stateContainer = Tobago.element(this.page.id + this.SUB_COMPONENT_SEP + 'jsf-state-container');
- if (stateContainer) {
- stateContainer.innerHTML = state;
- } else {
- console.error("Can't find stateContainer!"); // @DEV_ONLY
- }
- },
-
- clearReloadTimer: function(id) {
- var timer = Tobago.reloadTimer[id];
- if (timer) {
- clearTimeout(timer);
- }
- },
-
- addReloadTimeout: function(id, func, time) {
- Tobago.clearReloadTimer(id);
- Tobago.reloadTimer[id] = setTimeout(func, time);
- },
-
- /**
- * Reset the form element.
- */
- resetForm: function() {
- this.form.reset();
- },
-
- /**
- * Load a specified URL into client
- */
- navigateToUrl: function(toUrl) {
- document.location.href = toUrl;
- },
-
- /**
- * Register a script file to prevent multiple loadings via Ajax.
- */
- registerScript: function(scriptId) {
- console.debug('register: ' + scriptId); // @DEV_ONLY
- this.registeredScripts[this.genScriptId(scriptId)] = true;
- },
-
- /**
- * Check if a script is already registered.
- */
- hasScript: function(scriptId) {
- return this.registeredScripts[this.genScriptId(scriptId)];
- },
-
- /**
- * Generate an id usable as javascript name.
- */
- genScriptId: function(script) {
- script = script.substring(script.indexOf('/html/'));
- return script.replace(this.scriptIdRegExp, '_');
- },
-
- /**
- * Check if a style file is already loaded, to prevent multiple loadings
- * from Ajax requests.
- */
- styleFileLoaded: function(name) {
- var children = document.getElementsByTagName('head')[0].childNodes;
- for (var i = 0; i < children.length; i++) {
- var child = children[i];
- if (child.tagName && child.tagName.toUpperCase() == 'LINK') {
- if (child.rel == 'stylesheet'
- && child.type == 'text/css'
- && name == child.href.replace(/^http:\/\/.*?\//, '/')) {
- return true;
- }
- }
- }
- return false;
- },
-
- /**
- * Ensure that a style file is loaded.
- */
- ensureStyleFile: function(name) {
- if (!this.styleFileLoaded(name)) {
- var style = document.createElement('link');
- style.rel = 'stylesheet';
- style.type = 'text/css';
- style.href = name;
- var head = document.getElementsByTagName('head')[0];
- head.appendChild(style);
- }
- },
-
- /**
- * Ensure that an array of style files is loaded.
- */
- ensureStyleFiles: function(names) {
- for (var i = 0; i < names.length; i++) {
- this.ensureStyleFile(names[i]);
- }
- },
-
- /**
- * Register all already loaded script files.
- */
- registerCurrentScripts: function() {
- var children = document.getElementsByTagName('head')[0].childNodes;
- for (var i = 0; i < children.length; i++) {
- var child = children[i];
- if (child.nodeType == 1 && child.tagName.toUpperCase() == 'SCRIPT' && typeof child.src == 'string') {
- Tobago.registerScript(child.src);
- }
- }
- },
-
- /**
- * Add a scriptLoader to the queue or start it directly.
- */
- addScriptLoader: function(scriptLoader) {
- if (! this.pageIsComplete || this.scriptLoadingActive) {
-// console.debug("add one scriptLoader");
- this.scriptLoaders.push(scriptLoader);
- } else {
-// console.debug("executing one scriptLoader");
- this.scriptLoadingActive = true;
- scriptLoader.ensureScripts();
- }
- },
-
- /**
- * Start script loaders from queue
- */
- startScriptLoaders: function() {
- if (! this.pageIsComplete) {
- while (this.scriptLoaders.length > 0) {
- var scriptLoader = this.scriptLoaders.shift();
- scriptLoader.executeCommands();
- }
- } else {
- var start = new Date().getTime(); // @DEV_ONLY
- console.debug('start 1 of ' + this.scriptLoaders.length + ' Loaders'); // @DEV_ONLY
- if (this.tbgScLoSt) { // @DEV_ONLY
- console.debug('time scriptLoader ' + (start - this.tbgScLoSt)); // @DEV_ONLY
- } // @DEV_ONLY
- this.tbgScLoSt = start; // @DEV_ONLY
- if (this.scriptLoaders.length > 0) {
- this.scriptLoadingActive = true;
- this.scriptLoaders.shift().ensureScripts();
- } else {
- this.scriptLoadingActive = false;
- console.debug('last time scriptLoader ' + (new Date().getTime() - this.tbgScLoSt)); // @DEV_ONLY
- delete this.tbgScLoSt;
- }
- }
- },
-
- /**
- * Register components which can be updated via ajax.
- *
- * Remark: It is no longer needed to register components which can be replaced completely (since 1.5.0), this
- * was done by leaving the second parameter blank.
- *
- * @param componentId Id of the element which can be updated via ajax.
- * @param container Either a JS-Object which handles the ajax update, or a id of the element which shall be updated, or nothing (deprecated).
- */
- addAjaxComponent: function(componentId, container) {
- if (! container) {
- console.warn('Call of addAjaxComponent() without a container is no longer needed! componentId=' + componentId); // @DEV_ONLY
- } else {
- this.ajaxComponents[componentId] = container;
- }
- },
-
-/**
- *
- * @param id is a string or an array
- */
- reloadComponent: function(source, id, actionId, options) {
-
- // TODO: it seems if there is a container and is is an array, this will not work.
-
- var container = this.ajaxComponents[id];
- if (typeof container == 'string') {
- if (!actionId) {
- actionId = container;
- }
- Tobago.Updater.update(source, actionId, id, options);
- } else if ((typeof container == 'object') && container.tagName) {
- if (!actionId) {
- actionId = container.id;
- }
- Tobago.Updater.update(source, actionId, id, options);
- } else if ((typeof container == 'object') && (typeof container.reloadWithAction == 'function')) {
- if (!actionId) {
- if (container.id) {
- actionId = container.id;
- } else {
- actionId = '_tbg_no_action_';
- }
- }
- container.reloadWithAction(source, actionId, options);
- } else if (container === undefined) {
- Tobago.Updater.update(source, actionId, id, options);
- } else {
- console.warn('Illegal Container for reload:' + (typeof container)); // @DEV_ONLY
- }
- },
-
- /**
- * Focus function for toolbar buttons.
- * IE only.
- */
- toolbarFocus: function(element, event) {
- if (window.event && event.altKey) {
- // ie only set focus on keyboard access, so do the click here.
- //console.debug(" alt=" + event.altKey + " keycode=" + event.keyCode)
- element.click();
- }
- },
-
-
- /**
- * Onchange function for SelectOneListbox.
- * @deprecated since Tobago 2.0.0. Is replaces with SelectOneListbox.init()
- */
- selectOneListboxChange: function(element) {
- if (element.oldValue == undefined) {
- element.oldValue = -1;
- }
- },
-
- /**
- * Onclick function for SelectOneListbox.
- * @deprecated since Tobago 2.0.0. Is replaces with SelectOneListbox.init()
- */
- selectOneListboxClick: function(element) {
- if (element.oldValue == undefined || element.oldValue == element.selectedIndex) {
- element.selectedIndex = -1;
- }
- element.oldValue = element.selectedIndex;
- },
-
- /**
- * Init function for SelectOneRadio.
- * @deprecated since Tobago 2.0.0. Is replaces with SelectOneRadio.init()
- */
- selectOneRadioInit: function(name) {
- var elements = document.getElementsByName(name);
- for (var i = 0; i < elements.length; i++) {
- elements[i].oldValue = elements[i].checked;
- }
- },
-
- /**
- * Onclick function for SelectOneRadio.
- * @deprecated since Tobago 2.0.0. Is replaces with SelectOneRadio.init()
- */
- selectOneRadioClick: function(element, name, required, readonly) {
- var elements = document.getElementsByName(name);
- for (var i = 0; i < elements.length; i++) {
- if (readonly) {
- elements[i].checked = elements[i].oldValue;
- } else {
- if (elements[i] != element) {
- elements[i].checked = false;
- elements[i].oldValue = false;
- }
- }
- }
- if (!required && !readonly) {
- if (element.oldValue == element.checked) {
- element.checked = false;
- }
- element.oldValue = element.checked;
- }
- },
-
- resizePage: function(event) {
- Tobago.resizeEventCount++;
- window.setTimeout(Tobago.resizePageAction, 250);
- },
-
- resizePageAction: function() {
- Tobago.resizeEventCount--;
- if (Tobago.resizeEventCount == 0) {
- Tobago.resizeAction();
- }
- },
-
- initCommand: function(command) {
- // command is jQuery object
- // setupInputFacetCommand
- var commands = command.data("tobago-commands");
-
- if (commands.click) {
- command.click(function(event) {
- if (commands.click.omit != true) {
- if (commands.click.confirmation == null || confirm(commands.click.confirmation)) {
- var popup = commands.click.popup;
- if (popup && popup.command == "close" && popup.immediate) {
- Tobago.Popup.close(this);
- } else {
- if (popup && popup.command == "close") {
- Tobago.Popup.unlockBehind();
- }
- var action = commands.click.action ? commands.click.action : jQuery(this).attr("id");
- if (commands.click.partially) {
- if (popup && popup.command == "open") {
- Tobago.Popup.openWithAction(this, commands.click.partially, action);
- } else {
- Tobago.reloadComponent(this, commands.click.partially, action, commands.click);
- }
- event.preventDefault();
- event.stopPropagation();
- } else if (commands.click.url) {
- if (commands.click.target) {
- window.open(commands.click.url, commands.click.target)
- } else {
- Tobago.navigateToUrl(commands.click.url);
- event.preventDefault();
- event.stopPropagation();
- return false;
- }
- } else if (commands.click.script) { // XXX this case is deprecated.
- // not allowed with Content Security Policy (CSP)
- new Function('event' , commands.click.script)(event);
- } else {
- Tobago.submitAction(this, action, commands.click);
- }
- if (popup && popup.command == "close") {
- Tobago.Popup.close(this);
- }
- }
- }
- }
- });
- }
- if (commands.change) {
- command.change(function() {
- if (commands.change.partially) {
- Tobago.reloadComponent(this, commands.change.partially, commands.change.action, commands.change);
- } else {
- Tobago.submitAction(this, commands.change.action, commands.change);
- }
- });
- }
- if (commands.complete) {
- if (commands.complete.partially) {
- Tobago.reloadComponent(this, commands.complete.partially, commands.complete.action, commands.complete);
- } else {
- Tobago.submitAction(this, commands.complete.action, commands.complete);
- }
- }
- if (commands.resize) {
- Tobago.resizeAction = function() {
- Tobago.submitAction(this, commands.resize.action, commands.resize);
- }
- }
- if (commands.action) {
- setTimeout(function () {
- Tobago.submitAction(this, commands.action.action, commands.action);
- },
- commands.action.delay || 100);
- }
- },
-
- initDom: function(elements) {
-
- // focus
- var autofocus = Tobago.Utils.selectWidthJQuery(elements, '[autofocus]');
- autofocus.each(function () {
- // setupFocus
- Tobago.focusId = jQuery(this).attr("id");
- Tobago.setFocus();
- });
-
- // commands
- Tobago.Utils.selectWidthJQuery(elements, '[data-tobago-commands]')
- .each(function () {Tobago.initCommand(jQuery(this));});
-
-/*
- // access keys
- var accesskeys = Tobago.Utils.selectWidthJQuery(elements, '[accesskey]');
- accesskeys.each(function () {
- // setupAccessKey
- var el = jQuery(this);
- new Tobago.AcceleratorKey(function () {
- Tobago.clickOnElement(el.attr("id"))}, el.attr("accesskey"));
- });
-*/
-
- Tobago.initScrollPosition(elements ? elements : jQuery(".tobago-page"));
- },
-
- initScrollPosition: function(elements) {
- var scrollPanels;
- if (elements.data("tobago-scroll-panel")) {
- scrollPanels = elements;
- } else {
- scrollPanels = elements.find("[data-tobago-scroll-panel]");
- }
- scrollPanels.bind("scroll", function () {
- var panel = jQuery(this);
- var scrollLeft = panel.prop("scrollLeft");
- var scrollTop = panel.prop("scrollTop");
- // store the position in a hidden field
- panel.children("[data-tobago-scroll-position]").val(scrollLeft + ";" + scrollTop);
- });
- scrollPanels.each(function () {
- var panel = jQuery(this);
- var hidden = panel.children("[data-tobago-scroll-position]");
- var sep = hidden.val().indexOf(";");
- if (sep != -1) {
- var scrollLeft = hidden.val().substr(0, sep);
- var scrollTop = hidden.val().substr(sep + 1);
- panel.prop("scrollLeft", scrollLeft);
- panel.prop("scrollTop", scrollTop);
- }
- });
- },
-
- initCss: function(elements) {
- // element styles
- console.time("[tobago] initCss"); // @DEV_ONLY
- Tobago.Utils.selectWidthJQuery(elements, "[data-tobago-style]").each(function () {
- var element = jQuery(this);
- if (Tobago.browser.isMsie678) { // IE before 9 doesn't support multiple backgrounds, so we use only the first.
- Tobago.fixMultiBackgroundIE8(element);
- }
- element.css(element.data("tobago-style"));
- });
- console.timeEnd("[tobago] initCss"); // @DEV_ONLY
- },
-
- /* supports only two background images in the moment */
- fixMultiBackgroundIE8: function (element) {
- var style = element.data("tobago-style");
- var index;
- var backgroundImage = style.backgroundImage;
- var backgroundImage2;
- if (backgroundImage) {
- index = backgroundImage.indexOf(",");
- if (index > -1) {
- style.backgroundImage = backgroundImage.substring(0, index);
- backgroundImage2 = backgroundImage.substring(index + 1);
- }
- }
- var backgroundPosition = style.backgroundPosition;
- var backgroundPosition2;
- if (backgroundPosition) {
- index = backgroundPosition.indexOf(",");
- if (index > -1) {
- style.backgroundPosition = backgroundPosition.substring(0, index);
- backgroundPosition2 = backgroundPosition.substring(index + 1);
- }
- }
- if (backgroundImage2) {
- var extra = jQuery("<span>").appendTo(element);
- extra.css({
- backgroundImage: backgroundImage2,
- backgroundPosition: backgroundPosition2,
- backgroundRepeat: "no-repeat",
- position: "absolute",
- left: "0",
- right: "0",
- top: "0",
- bottom: "0"
- });
- element.css({
- position: "relative"
- });
- }
- },
-
- preventFrameAttacks: function() {
- if (self == top) {
- jQuery(".tobago-page-preventFrameAttacks").removeClass("tobago-page-preventFrameAttacks");
- }
- },
-
-// -------- Util functions ----------------------------------------------------
-
- /**
- * @deprecated Please use Tobago.Utils.escapeClientId()
- */
- escapeClientId: function(id) {
- console.warn("Deprecated method was called. Please use Tobago.Utils.escapeClientId()"); // @DEV_ONLY
- return Tobago.Utils.escapeClientId(id);
- },
-
- /**
- * @deprecated Please use Tobago.Utils.selectWidthJQuery()
- */
- selectWidthJQuery: function(elements, selector) {
- console.warn("Deprecated method was called. Please use Tobago.Utils.selectWidthJQuery()"); // @DEV_ONLY
- return Tobago.Utils.selectWidthJQuery(elements, selector);
- },
-
- ensureScrollbarWeights: function() {
- var id = Tobago.page.id + Tobago.SUB_COMPONENT_SEP + 'scrollbarWeight';
- var hidden = jQuery(Tobago.Utils.escapeClientId(id));
- if (hidden.val().length == 0) {
- var outer = hidden.prev();
- hidden.val(''
- + (100 - outer.prop('clientWidth')) + ';'
- + (100 - outer.prop('clientHeight')));
- } else {
- var scrollbarWeights = hidden.val().split(",");
- if (scrollbarWeights.length == 2) {
- Tobago.Config.set('Tobago', 'verticalScrollbarWeight', scrollbarWeights[0]);
- Tobago.Config.set('Tobago', 'horizontalScrollbarWeight', scrollbarWeights[1]);
- }
- }
- },
-
- clickOnElement: function(id) {
- var element = this.element(id);
-// console.debug("id = " + id + " element = " + typeof element);
- if (element) {
- if (element.click) {
-// console.debug("click on element");
- element.click();
- } else {
-// console.debug("click on new button");
- var a = document.createElement('input');
- a.type = 'button';
- a.style.width = '0px;';
- a.style.height = '0px;';
- a.style.border = '0px;';
- a.style.padding = '0px;';
- a.style.margin = '0px;';
-// a.addEventListener("click", function(event) {console.debug("button onclick : event " + typeof event);}, false);
- element.appendChild(a);
- a.click();
- element.removeChild(a);
- }
- }
- },
-
- /**
- * Sets the focus to the requested element or to the first possible if
- * no element is explicitly requested.
- */
- setFocus: function() {
- var elementId;
- if (this.errorFocusId !== undefined) {
- elementId = this.errorFocusId;
- } else if (this.lastFocusId !== undefined) {
- elementId = this.lastFocusId;
- } else {
- elementId = this.focusId;
- }
- var focusElement = this.element(elementId);
- if (!focusElement && elementId !== undefined) {
- // search for input elements in tc:select* controls
- var elements = document.getElementsByName(elementId);
- if (elements.length > 0) {
- focusElement = elements[0];
- }
- }
- if (focusElement) {
- try { // focus() on not visible elements breaks IE
- focusElement.focus();
- } catch (ex) {
- console.warn('Exception when setting focus on : \"' + this.focusId + '\"'); // @DEV_ONLY
- }
- } else if (typeof this.focusId == 'undefined') {
- var lowestTabIndex = 32768; // HTML max tab index value + 1
- var candidate = null;
- var candidateWithTabIndexZero = null;
- foriLoop: for (var i = 0; i < document.forms.length; i++) {
- var form = document.forms[i];
- if (form != null) {
- for (var j = 0; j < form.elements.length; j++) {
- var element = form.elements[j];
- if (element != null) {
- if (!element.disabled && !element.readOnly
- && this.isFocusType(element.type)) {
- if (lowestTabIndex > element.tabIndex && element.tabIndex > 0) {
- lowestTabIndex = element.tabIndex;
- candidate = element;
- if (lowestTabIndex == 1) {
- // optimization: stop on first field with lowest possible tab index 1
- break foriLoop;
- }
- }
- if (candidateWithTabIndexZero == null && element.tabIndex == 0) {
- candidateWithTabIndexZero = element;
- }
- }
- }
- }
- }
- }
- if (candidate != null) {
- try {
- // focus() on not visible elements breaks IE
- candidate.focus();
- } catch (ex) {
- }
- } else if (candidateWithTabIndexZero != null) {
- try {
- // focus() on not visible elements breaks IE
- candidateWithTabIndexZero.focus();
- } catch (ex) {
- }
- }
- } else if (this.focusId.length > 0) {
- console.warn('Cannot find component to set focus : \"' + this.focusId + '\"'); // @DEV_ONLY
- }
-
- },
-
-
- /**
- * check if a component type is valid to receive the focus
- */
- isFocusType: function(type) {
- if (type == 'text'
- || type == 'textarea'
- || type == 'select-one'
- || type == 'select-multiple'
- // || type == 'button'
- || type == 'checkbox'
- // || type == 'file'
- || type == 'password'
- || type == 'radio'
- || type == 'reset'
- || type == 'submit'
- ) {
- return true;
- }
- else {
- return false;
- }
- },
-
- isInputElement: function(tagName) {
- tagName = tagName.toUpperCase();
- if (tagName == 'INPUT'
- || tagName == 'TEXTAREA'
- || tagName == 'SELECT'
- || tagName == 'A'
- || tagName == 'BUTTON'
- ) {
- return true;
- }
- return false;
- },
-
- /**
- * Create a HTML input element with given type, name and value.
- */
- createInput: function(type, name, value) {
- var input = document.createElement('INPUT');
- if (type) {
- input.type = type;
- }
- if (name) {
- input.name = name;
- }
- if (value) {
- input.value = value;
- }
- return input;
- },
-
- /**
- * Add a CSS class name to the className property of an HTML element
- */
- addCssClass: function(element, className) {
- element = Tobago.element(element);
- element.className = element.className + ' ' + className;
- },
-
- /**
- * remove a CSS class name from the className property of an HTML element
- */
- removeCssClass: function(element, className) {
- element = Tobago.element(element);
- var classes = ' ' + element.className + ' ';
- var re = new RegExp(' ' + className + ' ', 'g');
- while (classes.match(re)) {
- classes = classes.replace(re, ' ');
- }
- classes = classes.replace(/ /g, ' ');
- element.className = classes;
- },
-
- /**
- * Clear the selection.
- */
- clearSelection: function() {
- if (document.selection) { // IE
- try {
- document.selection.empty();
- } catch (error) {
- // Ignore error: seems to be a browser bug (TOBAGO-1201)
- }
- } else if (window.getSelection) { // GECKO
- window.getSelection().removeAllRanges();
- }
- },
-
- /**
- * Returns the computedStyle of an HTML element
- */
- getRuntimeStyle: function(element) {
- if (element.runtimeStyle) { // IE
- return element.runtimeStyle;
- } else {
- return document.defaultView.getComputedStyle(element, null);
- }
- },
-
- /**
- * Return ancestor with given type.
- */
- // TODO what if no ancestor found? XXX rename anchestor -> ancestor
- findAnchestorWithTagName: function(element, tagName) {
- element = this.element(element);
- while (element.parentNode && (!element.tagName ||
- (element.tagName.toUpperCase() != tagName.toUpperCase())))
- element = element.parentNode;
- return element;
- },
-
- /**
- * Set the width of an HTML element via style
- */
- setElementWidth: function(id, width) {
- var element = this.element(id);
- if (element) {
- element.style.width = width;
- }
- },
-
- /**
- * Add an event listener to an HTML element
- */
- addEventListener: function(element, event, myFunction) {
- var el = new Tobago.EventListener(element, event, myFunction);
- if (el.element.addEventListener) { // this is DOM2
- el.element.addEventListener(el.event, el.func, false);
- } else { // IE
- el.element.attachEvent('on' + el.event, el.func);
- }
- },
-
- /**
- * Remove an event listener from an HTML element
- */
- removeEventListener: function(element, event, myFunction) {
- if (!event && !myFunction && element.element && element.event && element.func) {
- myFunction = element.func;
- event = element.event;
- element = element.element;
- }
- if (element.removeEventListener) { // this is DOM2
- element.removeEventListener(event, myFunction, true);
- }
- else if (element.detachEvent) { // IE
- element.detachEvent('on' + event, myFunction);
- } else {
- console.debug('Unknown Element: ' + typeof element); // @DEV_ONLY
- }
-
- },
-
- /**
- * Returns a function which binds the named function 'func' of the object 'object'.
- * additional arguments to bind function are added to the arguments at
- * function call.
- * E.g.:
- * var f = Tobago.bind(Tobago, "setElementWidth");
- * will bind Tobago.setElementWidth(...) to f(...)
- * and
- * var f = Tobago.bind(Tobago, "setElementWidth", id, width);
- * will bind Tobago.setElementWidth(id, widt) to f()
- * and
- * var f = Tobago.bind(Tobago, "setElementWidth", width);
- * will bind Tobago.setElementWidth(id, width) to f(id)
- *
- */
- bind: function(object, func) {
- var rest = [];
- for (var i = 2; i < arguments.length; i++) {
- rest.push(arguments[i]);
- }
- return function() {
- var args = [];
- for (var i = 0; i < arguments.length; i++) {
- args.push(arguments[i]);
- }
- object[func].apply(object, args.concat(rest));
- };
- },
-
- bind2: function(object, func) {
- var rest = [];
- for (var i = 2; i < arguments.length; i++) {
- rest.push(arguments[i]);
- }
- return function() {
- for (var i = 0; i < arguments.length; i++) {
- rest.push(arguments[i]);
- }
- object[func].apply(object, rest);
- };
- },
-
- /**
- * Returns a function which binds the named function 'func' of the object 'object'
- * as eventListener.
- * E.g.:
- * var f = Tobago.bindAsEventListener(Tobago, "doSomthing");
- * will bind Tobago.doSomthing(event) to f(event)
- */
- bindAsEventListener: function(object, func) {
- return function(event) {
- object[func].call(object, event || window.event);
- };
- },
-
- /**
- * Adds a function which binds the named function 'func' of the object 'object'
- * as eventListener to an element.
- */
- addBindEventListener: function(element, event, object, func) {
- this.addEventListener(element, event, this.bindAsEventListener(object, func));
- },
-
-
- /**
- * Stop event bubbling
- */
- stopEventPropagation: function(event) {
- if (! event) {
- event = window.event;
- }
- event.cancelBubble = true; // this is IE, no matter if not supported by actual browser
- if (event.stopPropagation) {
- event.stopPropagation(); // this is DOM2
- }
- if (event.preventDefault) {
- event.preventDefault();
- } else {
- event.returnValue = false;
- }
- },
-
- /**
- * Returns the absolute top value, related to the body element, for an HTML element.
- */
- getAbsoluteTop: function(element) {
- var top = 0;
- var parent = false;
- while (element && element.offsetParent) {
- top += element.offsetTop;
- top -= element.scrollTop;
- if (parent && element.currentStyle) { // IE only
- top += element.currentStyle.borderTopWidth.replace(/\D/g, '') - 0;
- }
- element = element.offsetParent;
- parent = true;
- }
- return Math.max(top, 0);
- },
-
- getWidth: function(element) {
- var width = 0;
- if (element) {
- width = element.offsetWidth;
- if (width === undefined) {
- width = 0;
- }
- }
- return width;
- },
-
- getHeight: function(element) {
- var height = 0;
- if (element) {
- height = element.offsetHeight;
- if (height === undefined) {
- height = 0;
- }
- }
- return height;
- },
-
-
- /**
- * Returns the absolute left, related to the body element, value for an HTML element.
- * @deprecated since Tobago 2.0.0
- */
- getAbsoluteLeft: function(element) {
- console.error("getAbsoluteLeft() is no long functional!"); // @DEV_ONLY
- return 0;
- },
-
- /**
- * Returns the scroll-x value of the body element.
- * @deprecated since Tobago 2.0.0
- */
- getBrowserInnerLeft: function() {
- console.error("getBrowserInnerLeft() is no long functional!"); // @DEV_ONLY
- return 0;
- },
-
- /**
- * Returns the scroll-y value of the body element.
- * @deprecated since Tobago 2.0.0
- */
- getBrowserInnerTop: function() {
- console.error("getBrowserInnerTop() is no long functional!"); // @DEV_ONLY
- return 0;
- },
-
- /**
- * @deprecated since Tobago 2.0.0
- */
- doEditorCommand: function(element, id) {
- console.error("doEditorCommand() is no long functional!"); // @DEV_ONLY
- },
-
- /**
- * Returns an HTML element.
- * valid input types are:
- * 'string' : returns the result of document.getElementById()
- * 'Event' : returns the currentTarget/srcElement property
- * 'HtmlElement' : returns the element itself
- * For all other types return 'undefined'
- */
- element: function(arg) {
-// console.debug("arg = " + arg);
-
- try {
- if (typeof arg === 'string') {
-// console.debug("arg is string ");
- return document.getElementById(arg);
- }
- if (typeof arg.currentTarget == 'object') {
-// console.debug("arg is DOM event ");
- return arg.currentTarget;
- }
- if (typeof arg.srcElement == 'object') {
-// console.debug("arg is IE event ");
- return arg.srcElement; // IE doesn't support currentTarget, hope src target helps
- }
- if (typeof arg.tagName == 'string') {
-// console.debug("arg is HTML element ");
- return arg;
- }
-
- } catch (ex) {
- return undefined;
- }
- if (! (arg === undefined)) { // @DEV_ONLY
- console.debug('arg is unknown: ' + typeof arg + ' : ' + arg); // @DEV_ONLY
- } // @DEV_ONLY
- return undefined;
- },
-
- extend: function(target, source) {
- for (var property in source) {
- target[property] = source[property];
- }
- return target;
- },
-
- fixPngAlphaAll: function() {
- // we need only an implementation in the IE6 file.
- },
-
- fixPngAlpha: function(element) {
- // we need only an implementation in the IE6 file.
- },
-
- /** @deprecated since Tobago 2.0.0 */
- replaceElement: function(item, newTag) {
- console.error("replaceElement() is no long functional!"); // @DEV_ONLY
- },
-
- parsePartialIds: function(ajaxComponentIds) {
- if (jQuery.isArray(ajaxComponentIds)) {
- return ajaxComponentIds;
- }
- return ajaxComponentIds.split(',');
- },
-
- /** @deprecated since Tobago 1.5.7 and 2.0.0 */
- setDefaultAction: function(defaultActionId) {
- console.error("setDefaultAction() is no long functional!"); // @DEV_ONLY
- },
-
- isFunction: function(func) {
- return (typeof func == 'function') || ((typeof func == 'object') && func.call);
- },
-
- raiseEvent: function(eventType, element) {
- var event;
- if (document.createEvent) {
- event = document.createEvent('Events');
- event.initEvent(eventType, true, true);
- element.dispatchEvent(event);
- }
- else if (document.createEventObject) {
- event = document.createEventObject();
- element.fireEvent('on' + eventType, event);
- }
- },
-
- toString: function(element) {
- var result = '';
- for (var property in element) {
- if (property && element[property]) {
- var value = '' + element[property];
- if (value != '') {
- result += '\r\n' + property + '=' + value;
- }
- }
- }
- return result;
- },
-
- initBrowser: function() {
- var ua = navigator.userAgent;
- if (ua.indexOf("MSIE") > -1 || ua.indexOf("Trident") > -1) {
- Tobago.browser.isMsie = true;
- if (ua.indexOf("MSIE 6") > -1) {
- Tobago.browser.isMsie6 = true;
- Tobago.browser.isMsie67 = true;
- Tobago.browser.isMsie678 = true;
- Tobago.browser.isMsie6789 = true;
- Tobago.browser.isMsie678910 = true;
- } else if (ua.indexOf("MSIE 7") > -1) {
- Tobago.browser.isMsie67 = true;
- Tobago.browser.isMsie678 = true;
- Tobago.browser.isMsie6789 = true;
- Tobago.browser.isMsie678910 = true;
- } else if (ua.indexOf("MSIE 8") > -1) {
- Tobago.browser.isMsie678 = true;
- Tobago.browser.isMsie6789 = true;
- Tobago.browser.isMsie678910 = true;
- } else if (ua.indexOf("MSIE 9") > -1) {
- Tobago.browser.isMsie6789 = true;
- Tobago.browser.isMsie678910 = true;
- } else if (ua.indexOf("MSIE 10") > -1) {
- Tobago.browser.isMsie678910 = true;
- }
- } else if (ua.indexOf("AppleWebKit") > -1) {
- Tobago.browser.isWebkit = true;
- } else if (ua.indexOf("Gecko") > -1) {
- Tobago.browser.isGecko = true;
- }
- }
-};
-
-Tobago.initBrowser();
-
-jQuery(document).ready(function() {
- Tobago.init();
-});
-
-jQuery(window).load(function() {
- for (var order = 0; order < Tobago.listeners.windowLoad.length; order++) {
- var list = Tobago.listeners.windowLoad[order];
- for (var i = 0; i < list.length; i++) {
- list[i]();
- }
- }
-});
-
-Tobago.Phase = {
- /** after the DOM was build */
- DOCUMENT_READY:{},
- /** after all images and CSS was loaded */
- WINDOW_LOAD:{},
- /** before sending a normal submit action */
- BEFORE_SUBMIT:{},
- /** after an AJAX call */
- AFTER_UPDATE:{},
- /** before ending a page */
- BEFORE_UNLOAD:{},
- /** before closing a window or tab */
- BEFORE_EXIT:{},
-
- Order:{
- EARLY:0,
- NORMAL:1,
- LATE:2,
- LATER:3
- }
-};
-
-Tobago.Config = {
- set: function(name, key, value) {
- if (!this[name]) {
- this[name] = {};
- }
- this[name][key] = value;
- },
-
- get: function(name, key) {
- while (name && !(this[name] && this[name][key])) {
- name = this.getFallbackName(name);
- }
-
- if (name) {
- return this[name][key];
- } else {
- console.warn("Tobago.Config.get(" + name + ", " + key + ") = undefined"); // @DEV_ONLY
- return 0;
- }
- },
-
- fallbackNames: {},
-
- getFallbackName: function(name){
- if (this.fallbackNames[name]) {
- return this.fallbackNames[name];
- } else if (name == "Tobago") {
- return undefined;
- } else {
- return "Tobago";
- }
- }
-};
-
-Tobago.Config.set("Tobago", "themeConfig", "standard/standard");
-Tobago.registerListener(Tobago.preventFrameAttacks, Tobago.Phase.DOCUMENT_READY);
-// using Tobago.Phase.Order.LATE, because the command event generated by data-tobago-commands
-// may produce a submit, but we need to do something before the submit (and also on click,
-// e. g. selectOne in a toolBar).
-Tobago.registerListener(Tobago.initDom, Tobago.Phase.DOCUMENT_READY, Tobago.Phase.Order.LATER);
-Tobago.registerListener(Tobago.initDom, Tobago.Phase.AFTER_UPDATE, Tobago.Phase.Order.LATER);
-
-// the inline css should be applied early, so that other init functions can use the dimensions
-Tobago.registerListener(Tobago.initCss, Tobago.Phase.DOCUMENT_READY, Tobago.Phase.Order.EARLY);
-Tobago.registerListener(Tobago.initCss, Tobago.Phase.AFTER_UPDATE, Tobago.Phase.Order.EARLY);
-
-// XXX: 2nd parameter enableAjax is deprecated
-Tobago.Panel = function(panelId, enableAjax, autoReload) {
- this.id = panelId;
- this.autoReload = autoReload;
- this.options = {
- };
-
- this.setup();
- Tobago.addAjaxComponent(this.id, this);
-};
-
-Tobago.Panel.init = function(elements) {
- var reloads = Tobago.Utils.selectWidthJQuery(elements, ".tobago-panel[data-tobago-reload]");
- reloads.each(function(){
- var id = jQuery(this).attr("id");
- var period = jQuery(this).data("tobago-reload");
- new Tobago.Panel(id, true, period);
- });
-};
-
-Tobago.Panel.prototype.setup = function() {
- this.initReload();
-};
-
-Tobago.Panel.prototype.afterDoUpdateSuccess = function() {
- this.setup();
-};
-
-Tobago.Panel.prototype.afterDoUpdateNotModified = function() {
- this.setup();
-};
-
-Tobago.Panel.prototype.afterDoUpdateError = function() {
- this.setup();
-};
-
-Tobago.Panel.prototype.initReload = function() {
- if (typeof this.autoReload == 'number' && this.autoReload > 0) {
- Tobago.addReloadTimeout(this.id, Tobago.bind2(this, 'reloadWithAction', null, this.id), this.autoReload);
- }
-};
-
-Tobago.Panel.prototype.reloadWithAction = function(source, action, options) {
- var reloadOptions = Tobago.extend({}, this.options);
- reloadOptions = Tobago.extend(reloadOptions, options);
- Tobago.Updater.update(source, action, this.id, reloadOptions);
-};
-
-Tobago.Panel.prototype.prepareReload = function() {
- jQuery(Tobago.Utils.escapeClientId(this.id)).overlay({error: false, ajax: true});
-};
-
-Tobago.registerListener(Tobago.Panel.init, Tobago.Phase.DOCUMENT_READY);
-Tobago.registerListener(Tobago.Panel.init, Tobago.Phase.AFTER_UPDATE);
-
-Tobago.EventListener = function(element, event, func) {
- this.element = element;
- this.event = event;
- this.func = func;
- Tobago.eventListeners[Tobago.eventListeners.length] = this;
-};
-
-Tobago.ScriptLoader = function(names, doAfter) {
- this.scriptIndex = 0;
- this.names = names;
- this.doAfter = doAfter || ';';
-
- this.ensureScript = function(src) {
- this.actualScript = src;
- if (!Tobago.hasScript(this.actualScript)) {
- console.debug('Load script ' + src); // @DEV_ONLY
- this.scriptElement = document.createElement('script');
- this.scriptElement.type = 'text/javascript';
- this.scriptElement.src = src;
- if (typeof(this.scriptElement.onreadystatechange) != 'undefined') {
-// console.debug("Set script.onreadystatechange ");
- this.scriptElement.onreadystatechange = Tobago.bind(this, 'stateReady');
- } else {
-// console.debug("Set script.onload");
- this.scriptElement.onload = Tobago.bind(this, 'stateOnLoad');
- }
- var head = document.getElementsByTagName('head')[0];
- head.appendChild(this.scriptElement);
- } else {
- console.debug('found script ' + src); // @DEV_ONLY
- this.ensureScripts();
- }
-
- };
-
- this.stateReady = function() {
-// console.debug("State " + window.event.srcElement.readyState + " : " + this.actualScript);
- if (window.event.srcElement.readyState == 'loaded'
- || window.event.srcElement.readyState == 'complete') {
- this.scriptElement.onreadystatechange = null;
- Tobago.registerScript(this.actualScript);
- this.ensureScripts();
- }
- };
-
- this.stateOnLoad = function() {
-// console.debug("OnLoad " + this.actualScript);
- this.scriptElement.onload = null;
- Tobago.registerScript(this.actualScript);
- this.ensureScripts();
- };
-
- this.ensureScripts = function() {
-// console.debug("scriptIndex = " + this.scriptIndex + "/" + this.names.length );
- if (this.scriptIndex < this.names.length) {
- this.ensureScript(this.names[this.scriptIndex++]);
- } else {
-// console.debug("now do After() : file=" + this.actualScript);
-// if (this.actualScript.indexOf('tabgroup') > -1) {
-// console.debug("doAfter=" + this.doAfter);
-// }
- this.executeCommands();
-// } else {
-// console.debug("doAfter = " + this.doAfter)
-// }
- if (this.scriptElement) {
- if (this.scriptElement.onreadystatechange) {
- delete this.scriptElement.onreadystatechange;
- }
- if (this.scriptElement.onload) {
- delete this.scriptElement.onload;
- }
- if (this.scriptElement) {
- delete this.scriptElement;
- }
- }
- delete this.actualScript;
- delete this.names;
- delete this.doAfter;
- Tobago.startScriptLoaders();
- }
- };
-
- this.executeCommands = function() {
- try {
- eval(this.doAfter);
- } catch (ex) {
- console.error(ex); // @DEV_ONLY
- console.error('errorCode: ' + this.doAfter.valueOf()); // @DEV_ONLY
- throw ex;
- }
- };
-
- Tobago.addScriptLoader(this);
-};
-
-Tobago.Transport = {
- requests: [],
- currentActionId: null,
- pageSubmitted: false,
- ajaxTransport: undefined,
-
- initTransport: function() {
- if (this.ajaxTransport === undefined) {
- try {
- new XMLHttpRequest();
- this.ajaxTransport = Tobago.Transport.JqueryTransport;
- } catch (e) {
- try {
- new ActiveXObject('Msxml2.XMLHTTP');
- this.ajaxTransport = Tobago.Transport.JqueryTransport;
- } catch (e) {
- try {
- new ActiveXObject('Microsoft.XMLHTTP');
- this.ajaxTransport = Tobago.Transport.JqueryTransport;
- } catch (e) {
- this.ajaxTransport = false;
- }
- }
- }
- }
- return this.ajaxTransport && typeof this.ajaxTransport.request == 'function';
- },
-
- /**
- * @return true if the request is queued or ignored, because of a double request.
- */
- request: function(req, submitPage, actionId) {
- var index = 0;
- if (submitPage) {
- this.pageSubmitted = true;
- index = this.requests.push(req);
- //console.debug('index = ' + index)
- } else if (!this.pageSubmitted) { // AJAX case
- console.debug('Current ActionId = ' + this.currentActionId + ' action= ' + actionId); // @DEV_ONLY
- if (actionId && this.currentActionId == actionId) {
- console.debug('Ignoring request'); // @DEV_ONLY
- // If actionId equals currentActionId assume double request: do nothing
- return true;
- }
- index = this.requests.push(req);
- //console.debug('index = ' + index)
- this.currentActionId = actionId;
- } else {
- return false;
- }
- //console.debug('index = ' + index)
- if (index == 1) {
- console.debug('Execute request!'); // @DEV_ONLY
- this.startTime = new Date().getTime();
- this.requests[0]();
- } else {
- console.debug('Request queued!'); // @DEV_ONLY
- }
- return true;
- },
-
- requestComplete: function() {
- this.requests.shift();
- this.currentActionId = null;
- console.debug('Request complete! Duration: ' + (new Date().getTime() - this.startTime) + 'ms; Queue size : ' + this.requests.length); // @DEV_ONLY
- if (this.requests.length > 0) {
- console.debug('Execute request!'); // @DEV_ONLY
- this.startTime = new Date().getTime();
- this.requests[0]();
- }
- }
-};
-
-Tobago.Transport.JqueryTransport = {
-
- transportOptions: {
-
- dataType: 'json',
- type: 'POST',
- cache: false,
-
- complete: function() {
- // scripts included in response are executed via setTimeout(..., 10)
- // because of replaceJsfState() is in this scripts the next request
- // must delayed more than that.
- setTimeout(Tobago.bind(Tobago.Transport, 'requestComplete'), 15);
- }
- },
-
- request: function(requestOptions) {
-
- var requestObject = Tobago.extend({}, this.transportOptions);
-
- requestObject.timeout = requestOptions.timeout;
-
- requestObject.success = function(data, textStatus) {
- console.debug("requestObject.success(): status='" + textStatus + "'"); // @DEV_ONLY
- requestOptions.resultData = data;
- requestOptions.textStatus = textStatus;
-
- Tobago.Updater.onSuccess(requestOptions);
- };
-
- requestObject.error = function(xhr, textStatus, errorThrown) {
- console.warn("requestOptions.error(): status='" + textStatus + "' error='" + errorThrown + "'"); // @DEV_ONLY
- requestOptions.xhr = xhr;
- requestOptions.textStatus = textStatus;
- Tobago.Updater.onError(requestOptions);
- };
-
- return Tobago.Transport.request(function() {
- requestObject.url = requestOptions.url;
- Tobago.action.value = requestOptions.actionId;
- Tobago.partialRequestIds.value = requestOptions.ajaxComponentIds;
- requestObject.data = jQuery(Tobago.form).serialize();
- requestOptions.xhr = jQuery.ajax(requestObject);
- }, false, requestOptions.actionId);
- }
-};
-
-function tobago_showHidden() {
- for (var i = 0; i < document.forms.length; i++) {
- var form = document.forms[i];
- for (var j = 0; j < form.elements.length; j++) {
- if (form.elements[j].type == 'hidden') {
- form.elements[j].type = 'text';
- }
- }
- }
-}
-
-/** @nosideeffects */
-var LOG = {
- /** @nosideeffects */
- debug: function(text) {
- },
- /** @nosideeffects */
- info: function(text) {
- },
- /** @nosideeffects */
- warn: function(text) {
- },
- /** @nosideeffects */
- error: function(text) {
- },
- /** @nosideeffects */
- show: function() {
- }
-};
-
-// The AJAX response is a JavaScript object:
-
-/*
-var response = {
- tobagoAjaxResponse: true,
- responseCode: CODE_SUCCESS | CODE_RELOAD_REQUIRED | CODE_ERROR,
- jsfState: "html content of jsf state container"
- ajaxPart_1: {
- ajaxId: "ajaxId",
- responseCode: CODE_SUCCESS | CODE_NOT_MODIFIED,
- html: "html source of the component",
- script: "javascript code"
- },
- ajaxPart_2: {...}, ...
-}
-*/
-
-Tobago.Updater = {
- CODE_SUCCESS: 200,
-
- CODE_REDIRECT: 302,
-
- CODE_NOT_MODIFIED: 304,
-
- CODE_RELOAD_REQUIRED: 309,
-
- CODE_ERROR: 500,
-
- WAIT_ON_ERROR: false,
-
- WAIT_ON_RELOAD: false,
-
- options: {
- createOverlay: true,
- timeout: 5000
- },
-
- update: function(source, actionId, ajaxComponentIds, options) {
-
- console.debug('Updater.update(\"' + actionId + '\", \"' + ajaxComponentIds + '\")'); // @DEV_ONLY
-
- if (Tobago.Transport.initTransport()) {
- var listenerOptions = {
- source: source,
- ajaxComponentIds: ajaxComponentIds,
- actionId: actionId,
- options: options
- };
-
- var result = true; // Do not continue if any function returns false
- for (var order = 0; order < Tobago.listeners.beforeSubmit.length; order++) {
- var list = Tobago.listeners.beforeSubmit[order];
- for (var i = 0; i < list.length; i++) {
- result = list[i](listenerOptions);
- if (!result) {
- break;
- }
- }
- }
- if (result != false && jQuery.isFunction(Tobago.applicationOnsubmit)) {
- result = Tobago.applicationOnsubmit(listenerOptions);
- }
- if (!result) {
- return false;
- }
-
- var requestOptions = Tobago.extend({}, this.options);
- if (options) {
- Tobago.extend(requestOptions, options);
- }
-
- requestOptions.source = source;
- requestOptions.actionId = actionId;
- requestOptions.ajaxComponentIds = ajaxComponentIds;
- var form = jQuery(Tobago.form);
- if (form.data("tobago-partial-action") != undefined) {
- requestOptions.url = form.data("tobago-partial-action");
- } else {
- requestOptions.url = form.attr("action");
- }
-
- var ids;
- if (requestOptions.createOverlay) {
- ids = Tobago.parsePartialIds(ajaxComponentIds);
- for (var i = 0; i < ids.length; i++) {
- var id = ids[i];
- var container = Tobago.ajaxComponents[id];
- if (container && typeof container.prepareReload == 'function') {
- container.prepareReload();
- } else if (container) {
- container.overlay({error: false, ajax: true});
- } else {
- jQuery(Tobago.Utils.escapeClientId(id)).overlay({error: false, ajax: true});
- }
- }
- }
-
- Tobago.setActionPosition(source);
-
-
- if (!Tobago.partialRequestIds) {
- var hidden = document.createElement('input');
- hidden.type = 'hidden';
- hidden.id = 'tobago::partialIds';
- hidden.name = hidden.id;
- Tobago.form.appendChild(hidden);
- Tobago.partialRequestIds = hidden;
- }
-
- Tobago.storeClientDimension();
-
- if (!Tobago.Transport.ajaxTransport.request(requestOptions)) {
- console.error('Page was submitted, request not queued!'); // @DEV_ONLY
- Tobago.Updater.handleMissingResponses(ajaxComponentIds, {});
- }
- } else {
- console.info('No Ajax transport found! Doing full page reload.'); // @DEV_ONLY
- Tobago.submitAction(source, actionId);
- }
- },
-
- doErrorUpdate: function(errorIds) {
- for (var i = 0; i < errorIds.length; i++) {
- var id = errorIds[i];
- var data = {
- ajaxId: id,
- responseCode: Tobago.Updater.CODE_ERROR
- };
- this.updateComponent(data);
- }
- },
-
- showFailureMessage: function() {
- console.info('Ajax request failed!'); // @DEV_ONLY
- },
-
- onSuccess: function(requestOptions) {
- console.debug('Tobago.Updater.onSuccess()'); // @DEV_ONLY
- if (requestOptions.textStatus === 'notmodified') {
- Tobago.Updater.handle304Response(Tobago.parsePartialIds(requestOptions.ajaxComponentIds));
- return;
- } else if (!requestOptions.resultData || !requestOptions.resultData.tobagoAjaxResponse) {
- // unknown response do full page reload
- console.warn('initiating full reload'); // @DEV_ONLY
- if (Tobago.Updater.WAIT_ON_ERROR) {
- alert('wait: initiating full reload');
- }
- Tobago.submitAction(null, Tobago.page.id);
- } else if (requestOptions.resultData.responseCode == Tobago.Updater.CODE_RELOAD_REQUIRED) {
- // update required do full page reload
- // XXX todo: check if the second call of this code (aprox. 10 lines later) is okay.
- if (requestOptions.resultData.jsfState) {
- Tobago.replaceJsfState(requestOptions.resultData.jsfState);
- }
- console.info('full reload requested'); // @DEV_ONLY
- if (Tobago.Updater.WAIT_ON_RELOAD) {
- alert('wait: full reload requeste: responseCode = ' + requestOptions.resultData.responseCode);
- }
- Tobago.navigateToUrl(requestOptions.resultData.location);
- return;
- } else if (requestOptions.resultData.responseCode == Tobago.Updater.CODE_REDIRECT) {
- window.location = requestOptions.resultData.location;
- return;
- }
-
- if (requestOptions.resultData.jsfState) {
- Tobago.replaceJsfState(requestOptions.resultData.jsfState);
- }
-
- var doneIds = {};
- for (var partId in requestOptions.resultData) {
- console.debug(partId + '= ' + requestOptions.resultData[partId]); // @DEV_ONLY
- if (partId.indexOf('ajaxPart_') == 0) {
- console.debug('doUpdate partId = ' + partId); // @DEV_ONLY
- this.updateComponent(requestOptions.resultData[partId]);
- doneIds[requestOptions.resultData[partId].ajaxId] = true;
- }
- }
-
- Tobago.Updater.handleMissingResponses(requestOptions.ajaxComponentIds, doneIds);
-
- if (typeof requestOptions.afterDoUpdateSuccess == 'function') {
- requestOptions.afterDoUpdateSuccess(requestOptions);
- }
- },
-
- handleMissingResponses: function(ids, doneIds) {
- var requestedIds = Tobago.parsePartialIds(ids);
- var data;
- for (var i = 0; i < requestedIds.length; i++) {
- var id = requestedIds[i];
- if (! doneIds[id]) {
- console.debug('handleMissingResponse id = ' + id); // @DEV_ONLY
- if (!data) {
- data = {responseCode: Tobago.Updater.CODE_NOT_MODIFIED, html: 'error', script: function() {
- }};
- }
- data.ajaxId = id;
- try {
- this.updateComponent(data);
- } catch (e) {
- }
- }
- }
- },
-
- handle304Response: function(ids) {
- for (var i = 0; i < ids.length; i++) {
- var id = ids[i];
- console.debug('handle304Response id = ' + id); // @DEV_ONLY
- var data = {
- ajaxId: id,
- responseCode: Tobago.Updater.CODE_NOT_MODIFIED,
- html: 'error',
- script: function() {
- }
- };
- Tobago.Updater.updateComponent(data);
- }
- },
-
-
- onError: function(requestObject) {
-
- console.warn('Request failed : ' + requestObject.textStatus); // @DEV_ONLY
-
- try {
- var data = jQuery.parseJSON(requestObject.xhr.responseText);
- if (data.tobagoAjaxResponse && data.responseCode == 302) {
- window.location = data.location;
- return;
- }
- } catch (e) {
- }
-
- if (requestObject.textStatus === 'timeout') {
- if (Tobago.Config.get("Ajax", "timeoutAction") == "fullReload") {
- Tobago.submitAction(null, Tobago.page.id);
- } else {
- Tobago.Updater.doErrorUpdate(Tobago.parsePartialIds(requestObject.ajaxComponentIds));
- }
- } else if (requestObject.textStatus === 'notmodified') {
- Tobago.Updater.handle304Response(Tobago.parsePartialIds(requestObject.ajaxComponentIds));
- } else {
- Tobago.Updater.doErrorUpdate(Tobago.parsePartialIds(requestObject.ajaxComponentIds));
- }
-
- if (typeof requestObject.afterDoUpdateError == 'function') {
- requestObject.afterDoUpdateError();
- }
-
- },
-
- updateComponent: function(componentData) {
- var ajaxId = componentData.ajaxId;
- console.debug('update Component = ' + ajaxId); // @DEV_ONLY
- if (componentData.responseCode == Tobago.Updater.CODE_RELOAD_REQUIRED) {
- console.debug('nop do reload = '); // @DEV_ONLY
- // nop
- } else {
- var container = Tobago.ajaxComponents[ajaxId];
- if (container) {
- if (typeof container == 'string') {
- container = Tobago.element(container);
- }
- if (typeof container.doUpdate != 'function') {
- container.doUpdate = Tobago.Updater.doUpdate;
- }
-
- container.doUpdate(componentData);
- } else {
- Tobago.Updater.doUpdate(componentData);
- }
- }
-
- /* TOBAGO-1087: Wait Cursor after AJAX in IE with Websphere 6.1 */
- if (Tobago.browser.isMsie) {
- var page = jQuery(".tobago-page");
- var originalCursor = page.css("cursor");
- page.css("cursor", "default");
- page.css("cursor", originalCursor);
- }
- },
-
- doUpdate: function(data) {
- if (typeof this.beforeDoUpdate == 'function') {
- if (!this.beforeDoUpdate()) {
- return; // the update should be canceled.
- }
- }
- var c = Tobago.ajaxComponents[data.ajaxId];
- var overlay;
- if (c != null && c.tagName != null) { // is an html element
- overlay = jQuery(c);
- } else if (c != null && c.id != null) { // in an JS element like e. g. Tobago.Panel
- overlay = jQuery(Tobago.Utils.escapeClientId(c.id));
- } else { // just use the id (not the mapped value)
- overlay = jQuery(Tobago.Utils.escapeClientId(data.ajaxId))
- }
- switch (data.responseCode) {
- case Tobago.Updater.CODE_SUCCESS:
- var element = jQuery(Tobago.Utils.escapeClientId(data.ajaxId));
- // if there is html data, we replace the ajax element with the new data
- if (data.html.length > 0) {
- var newElement = jQuery(data.html);
- if (element.size() == 0 && newElement.hasClass("tobago-popup")) {
- element = jQuery("<div id='" + data.ajaxId + "' />");
- jQuery('form').append(element);
- }
- element.replaceWith(newElement);
- }
- try {
- if (data.script != null) {
- // XXX this case is deprecated.
- // not allowed with Content Security Policy (CSP)
- eval('var updateScript = ' + data.script);
- eval('updateScript();');
- }
- if (typeof this.afterDoUpdateSuccess == 'function') {
- this.afterDoUpdateSuccess();
- }
- if (data.html.length > 0) {
-
- for (var order = 0; order < Tobago.listeners.afterUpdate.length; order++) {
- var list = Tobago.listeners.afterUpdate[order];
- for (var i = 0; i < list.length; i++) {
- list[i](newElement);
- }
- }
- }
- } catch (e) {
- console.error('Error in doUpdate: ' + e); // @DEV_ONLY
- throw e;
- }
- break;
- case Tobago.Updater.CODE_NOT_MODIFIED:
- if (typeof this.afterDoUpdateNotModified == 'function') {
- this.afterDoUpdateNotModified();
- }
- overlay.overlay("destroy");
- break;
- case Tobago.Updater.CODE_ERROR:
- if (typeof this.afterDoUpdateError == 'function') {
- this.afterDoUpdateError();
- }
- // XXX Here also a double click will be logged, but "warn" is not appropriate.
- console.warn("ERROR 500 when updating component id = '" + data.ajaxId + "'"); // @DEV_ONLY
-// overlay.overlay("destroy");
- if (Tobago.Config.get("Ajax", "errorAction") == "fullReload") {
- Tobago.submitAction(null, Tobago.page.id);
- } else {
- overlay.overlay({error:true, ajax:true});
- }
- break;
- default:
- console.error('Unknown response code: ' + data.responseCode + " for component id = '" + data.ajaxId + "'"); // @DEV_ONLY
- overlay.overlay("destroy");
- break;
- }
- }
-
-};
-
-// -------- ToolBar ----------------------------------------------------
-
-Tobago.ToolBar = {};
-
-/**
- * Initializes the tool bars.
- * @param elements a jQuery object to initialize (ajax) or null for initializing the whole document (full load).
- */
-Tobago.ToolBar.init = function(elements) {
-
- // doing the same for 3 renderer names
- // XXX put this in a loop (the first try doesn't work, because we can't use local variables in a anonymous function)
-
- Tobago.Utils.selectWidthJQuery(elements, ".tobago-toolBar").find('.tobago-toolBar-item')
- .not('.tobago-toolBar-item-markup-disabled')
- .hover(function() {
- jQuery(this).toggleClass('tobago-toolBar-item-markup-hover');
- })
- .children('.tobago-toolBar-button, .tobago-toolBar-menu')
- .mouseenter(function() {
- jQuery(this)
- .addClass('tobago-toolBar-button-markup-hover').children('img')
- .each(function() {
- // set the src to the hover src url.
- var hover = jQuery(this).data('tobago-src-hover');
- if (hover) {
- jQuery(this).attr('src', hover);
- }
- });
- })
- .mouseleave(function() {
- jQuery(this)
- .removeClass('tobago-toolBar-button-markup-hover')
- .children('img')
- .each(function() {
- // restore the original/normal src url.
- var normal = jQuery(this).data('tobago-src-default');
- if (normal) {
- jQuery(this).attr('src', normal);
- }
- });
- });
-
- Tobago.Utils.selectWidthJQuery(elements, ".tobago-box-headerToolBar").find('.tobago-boxToolBar-item')
- .not('.tobago-boxToolBar-item-markup-disabled')
- .hover(function() {
- jQuery(this).toggleClass('tobago-boxToolBar-item-markup-hover');
- })
- .children('.tobago-boxToolBar-button, .tobago-boxToolBar-menu')
- .mouseenter(function() {
- jQuery(this)
- .addClass('tobago-boxToolBar-button-markup-hover').children('img')
- .each(function() {
- // set the src to the hover src url.
- var hover = jQuery(this).data('tobago-src-hover');
- if (hover) {
- jQuery(this).attr('src', hover);
- }
- });
- })
- .mouseleave(function() {
- jQuery(this)
- .removeClass('tobago-boxToolBar-button-markup-hover')
- .children('img')
- .each(function() {
- // restore the original/normal src url.
- var normal = jQuery(this).data('tobago-src-default');
- if (normal) {
- jQuery(this).attr('src', normal);
- }
- });
- });
-
- Tobago.Utils.selectWidthJQuery(elements, ".tobago-tabGroup-toolBar")
- .find(".tobago-menu[data-tobago-index]").each(function () {
- var menu = jQuery(this);
- menu.data("tobago-tabGroup", menu.closest(".tobago-tabGroup"));
- menu.click(function (event) {
- var menu = jQuery(this);
- var tabGroup = menu.data("tobago-tabGroup");
- var tab = tabGroup.find(".tobago-tab[tabgroupindex=" + menu.data("tobago-index") + "]");
- tab.click();
- event.stopPropagation();
- })
- });
-
- Tobago.Utils.selectWidthJQuery(elements, ".tobago-tabGroup-toolBar").find('.tobago-tabGroupToolBar-item')
- .not('.tobago-tabGroupToolBar-item-markup-disabled')
- .hover(function() {
- jQuery(this).toggleClass('tobago-tabGroupToolBar-item-markup-hover');
- })
- .children('.tobago-tabGroupToolBar-button, .tobago-tabGroupToolBar-menu')
- .mouseenter(function() {
- jQuery(this)
- .addClass('tobago-tabGroupToolBar-button-markup-hover').children('img')
- .each(function() {
- // set the src to the hover src url.
- var hover = jQuery(this).data('tobago-src-hover');
- if (hover) {
- jQuery(this).attr('src', hover);
- }
- });
- })
- .mouseleave(function() {
- jQuery(this)
- .removeClass('tobago-tabGroupToolBar-button-markup-hover')
- .children('img')
- .each(function() {
- // restore the original/normal src url.
- var normal = jQuery(this).data('tobago-src-default');
- if (normal) {
- jQuery(this).attr('src', normal);
- }
- });
- });
-
- Tobago.Utils.selectWidthJQuery(elements, ".tobago-toolBar-selectOne").find(".tobago-toolBar-button")
- .click(function () {
- var button = jQuery(this);
- var hidden = button.closest(".tobago-toolBar-selectOne").children("input[type=hidden]");
- hidden.val(button.data("tobago-value"));
- });
-
- Tobago.Utils.selectWidthJQuery(elements, ".tobago-toolBar-selectBoolean").find(".tobago-toolBar-button")
- .click(function () {
- var button = jQuery(this);
- var hidden = button.closest(".tobago-toolBar-selectBoolean").children("input[type=hidden]");
- hidden.val(hidden.val() == "true" ? "false" : "true");
- });
-};
-
-/**
- * @deprecated since 2.0.0, use class tobago-toolBar-selectBoolean
- */
-Tobago.ToolBar.checkToggle = function(id) {
- var element = document.getElementById(id);
- element.value = 'true' == element.value ? 'false' : 'true';
-};
-
-/**
- * @deprecated since 2.0.0, use class tobago-toolBar-selectOne
- */
-Tobago.ToolBar.setRadioValue = function(id, value) {
- var element = document.getElementById(id);
- element.value = value;
-};
-
-Tobago.registerListener(Tobago.ToolBar.init, Tobago.Phase.DOCUMENT_READY);
-Tobago.registerListener(Tobago.ToolBar.init, Tobago.Phase.AFTER_UPDATE);
-
-// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-// TabGroup
-
Tobago.TabGroup = {};
/**
@@ -2506,10 +48,15 @@ Tobago.TabGroup.init = function(elements
tabGroups.filter("[switchType='reloadTab']").each(function() {
jQuery(this).find(".tobago-tabGroup-headerInner").first()
.children(".tobago-tab").not(".tobago-tab-markup-disabled").click(function() {
- var activeIndex = Tobago.TabGroup.updateHidden(jQuery(this));
+ var tab = jQuery(this);
+ var activeIndex = Tobago.TabGroup.updateHidden(tab);
console.debug("todo: ajax reload, activeIndex=" + activeIndex); // @DEV_ONLY
- var tabGroup = jQuery(this).parents(".tobago-tabGroup:first");
- Tobago.Updater.update(tabGroup, tabGroup.attr("id"), tabGroup.attr("id"), {});
+ var tabGroup = tab.parents(".tobago-tabGroup:first");
+ var partialIds = tabGroup.data("tobago-partial-ids");
+ if (!partialIds) {
+ partialIds = tabGroup.attr("id");
+ }
+ Tobago.Updater.update(tabGroup, tabGroup.attr("id"), partialIds, {});
})
});
@@ -2599,332 +146,3 @@ Tobago.TabGroup.ensureScrollPosition = f
Tobago.registerListener(Tobago.TabGroup.init, Tobago.Phase.DOCUMENT_READY);
Tobago.registerListener(Tobago.TabGroup.init, Tobago.Phase.AFTER_UPDATE);
-
-// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-// Commands
-
-Tobago.Command = {};
-
-Tobago.Command.initEnter = function(elements) {
- var page = Tobago.Utils.selectWidthJQuery(elements, ".tobago-page");
- page.keypress(function (event) {
- var code = event.which;
- if (code == 0) {
- code = event.keyCode;
- }
- if (code == 13) {
- var target = event.target;
- if (target.tagName == "A" || target.tagName == "BUTTON") {
- return;
- }
- if (target.tagName == "TEXTAREA") {
- if (!event.metaKey && !event.ctrlKey) {
- return;
- }
- }
- var id = target.id;
- while (id != null) {
- var command = jQuery("[data-tobago-default='" + id + "']");
- if (command.size() > 0) {
- command.click();
- break;
- }
- id = Tobago.Utils.getNamingContainerId(id);
- }
- return false;
- }
- })};
-
-Tobago.Command.initInputElements = function(elements) {
- var inputElements = Tobago.Utils.selectWidthJQuery(elements, "input, select, textarea, a, button");
- inputElements.focus(function (event) {
- var target = event.target;
- var id = target.id;
- var command;
- if (target.tagName == "A" || target.tagName == "BUTTON") {
- command = jQuery(target);
- } else {
- while (id != null) {
- command = jQuery("[data-tobago-default='" + id + "']");
- if (command.size() > 0) {
- break;
- }
- id = Tobago.Utils.getNamingContainerId(id);
- }
- }
-
- if (command.size() > 0) {
- // add new classes
- command.filter("a").addClass("tobago-link-markup-default");
- command.filter("button").addClass("tobago-button-markup-default");
- }
- });
- inputElements.blur(function (event) {
- var target = event.target;
- var id = target.id;
- var command;
- if (target.tagName == "A" || target.tagName == "BUTTON") {
- command = jQuery(target);
- } else {
- while (id != null) {
- command = jQuery("[data-tobago-default='" + id + "']");
- if (command.size() > 0) {
- break;
- }
- id = Tobago.Utils.getNamingContainerId(id);
- }
- }
-
- if (command.size() > 0) {
- // remove old
- command.filter("a").removeClass("tobago-link-markup-default");
- command.filter("button").removeClass("tobago-button-markup-default");
- }
- });
-};
-
-Tobago.registerListener(Tobago.Command.initEnter, Tobago.Phase.DOCUMENT_READY);
-
-Tobago.registerListener(Tobago.Command.initInputElements, Tobago.Phase.DOCUMENT_READY);
-Tobago.registerListener(Tobago.Command.initInputElements, Tobago.Phase.AFTER_UPDATE);
-
-// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-Tobago.SelectManyShuttle = {};
-
-Tobago.SelectManyShuttle.init = function(elements) {
-
- var shuttles = Tobago.Utils.selectWidthJQuery(elements, ".tobago-selectManyShuttle:not(.tobago-selectManyShuttle-disabled)");
-
- shuttles.find(".tobago-selectManyShuttle-unselected").dblclick(function() {
- Tobago.SelectManyShuttle.moveSelectedItems(jQuery(this).parents(".tobago-selectManyShuttle"), true, false);
- });
-
- shuttles.find(".tobago-selectManyShuttle-selected").dblclick(function() {
- Tobago.SelectManyShuttle.moveSelectedItems(jQuery(this).parents(".tobago-selectManyShuttle"), false, false);
- });
-
- shuttles.find(".tobago-selectManyShuttle-addAll").click(function() {
- Tobago.SelectManyShuttle.moveSelectedItems(jQuery(this).parents(".tobago-selectManyShuttle"), true, true);
- });
-
- shuttles.find(".tobago-selectManyShuttle-add").click(function() {
- Tobago.SelectManyShuttle.moveSelectedItems(jQuery(this).parents(".tobago-selectManyShuttle"), true, false);
- });
-
- shuttles.find(".tobago-selectManyShuttle-removeAll").click(function() {
- Tobago.SelectManyShuttle.moveSelectedItems(jQuery(this).parents(".tobago-selectManyShuttle"), false, true);
- });
-
- shuttles.find(".tobago-selectManyShuttle-remove").click(function() {
- Tobago.SelectManyShuttle.moveSelectedItems(jQuery(this).parents(".tobago-selectManyShuttle"), false, false);
- });
-};
-
-Tobago.SelectManyShuttle.moveSelectedItems = function(shuttle, direction, all) {
- var unselected = shuttle.find(".tobago-selectManyShuttle-unselected");
- var selected = shuttle.find(".tobago-selectManyShuttle-selected");
- var count = selected.children().size();
- var source = direction ? unselected : selected;
- var target = direction ? selected : unselected;
- var shifted = source.find(all ? "option:not(:disabled)" : "option:selected").remove().appendTo(target);
-
- // synchronize the hidden select
- var hidden = shuttle.find(".tobago-selectManyShuttle-hidden");
- var hiddenOptions = hidden.find("option");
- // todo: may be optimized: put values in a hash map?
- shifted.each(function() {
- var option = jQuery(this);
- hiddenOptions.filter("[value='" + option.val() + "']").prop("selected", direction);
- });
-
- if (count != selected.children().size()) {
- var e = jQuery.Event("change");
- // trigger an change event for command facets
- hidden.trigger( e );
- }
-};
-
-Tobago.registerListener(Tobago.SelectManyShuttle.init, Tobago.Phase.DOCUMENT_READY);
-Tobago.registerListener(Tobago.SelectManyShuttle.init, Tobago.Phase.AFTER_UPDATE);
-
-// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-Tobago.SelectOneRadio = {};
-
-Tobago.SelectOneRadio.init = function(elements) {
- var selectOneRadios = Tobago.Utils.selectWidthJQuery(elements, ".tobago-selectOneRadio");
- selectOneRadios.each(function() {
- var ul = jQuery(this);
- var radios = jQuery('input[name="' + ul.attr('id').replace(/:/g, '\\:') + '"]');
- radios.each(function () {
- var selectOneRadio = jQuery(this);
- selectOneRadio.data("oldValue", selectOneRadio.prop("checked"));
- });
- radios.click(function() {
- var selectOneRadio = jQuery(this);
- var readonly = selectOneRadio.prop("readonly");
- var required = selectOneRadio.prop("required");
- if (!required && !readonly) {
- if (selectOneRadio.data("oldValue") == selectOneRadio.prop("checked")) {
- selectOneRadio.prop("checked", false);
- }
- selectOneRadio.data("oldValue", selectOneRadio.prop("checked"));
- }
- var radios = jQuery('input[name="' + ul.attr('id').replace(/:/g, '\\:') + '"]');
- if (readonly) {
- radios.each(function () {
- var radio = jQuery(this);
- radio.prop("checked", radio.data("oldValue"));
- });
- } else {
- radios.each(function () {
- if (this.id != selectOneRadio.get(0).id) {
- var radio = jQuery(this);
- radio.prop("checked", false);
- radio.data("oldValue", radio.prop("checked"));
- }
- });
- }
- });
- });
-};
-
-Tobago.registerListener(Tobago.SelectOneRadio.init, Tobago.Phase.DOCUMENT_READY);
-Tobago.registerListener(Tobago.SelectOneRadio.init, Tobago.Phase.AFTER_UPDATE);
-
-// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-Tobago.SelectOneListbox = {};
-
-Tobago.SelectOneListbox.init = function (elements) {
- var selects = Tobago.Utils.selectWidthJQuery(elements, ".tobago-selectOneListbox");
- var notRequired = selects.not(".tobago-selectOneListbox-markup-required");
- notRequired
- .change(function () {
- var element = jQuery(this);
- if (element.data("tobago-oldvalue") == undefined) {
- element.data("tobago-oldvalue", -1);
- }
- }).click(function () {
- var element = jQuery(this);
- if (element.data("tobago-oldvalue") == undefined
- || element.data("tobago-oldvalue") == element.prop("selectedIndex")) {
- element.prop("selectedIndex", -1);
- }
- element.data("tobago-oldvalue", element.prop("selectedIndex"));
- });
-};
-
-Tobago.registerListener(Tobago.SelectOneListbox.init, Tobago.Phase.DOCUMENT_READY);
-Tobago.registerListener(Tobago.SelectOneListbox.init, Tobago.Phase.AFTER_UPDATE);
-
-// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-Tobago.SelectBooleanCheckbox = {};
-
-Tobago.SelectBooleanCheckbox.init = function(elements) {
- var checkboxes = Tobago.Utils.selectWidthJQuery(elements, ".tobago-selectBooleanCheckbox-markup-readonly input");
- checkboxes.each(function() {
- // Save the initial state to restore it, when the user tries to manipulate it.
- var initial = jQuery(this).is(":checked");
- jQuery(this).click(function() {
- jQuery(this).prop("checked", initial);
- });
- });
-};
-
-Tobago.registerListener(Tobago.SelectBooleanCheckbox.init, Tobago.Phase.DOCUMENT_READY);
-Tobago.registerListener(Tobago.SelectBooleanCheckbox.init, Tobago.Phase.AFTER_UPDATE);
-
-// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-Tobago.SelectManyCheckbox = {};
-
-Tobago.SelectManyCheckbox.init = function(elements) {
- var checkboxes = Tobago.Utils.selectWidthJQuery(elements, ".tobago-selectManyCheckbox-markup-readonly input");
- checkboxes.each(function() {
- // Save the initial state to restore it, when the user tries to manipulate it.
- var initial = jQuery(this).is(":checked");
- jQuery(this).click(function() {
[... 82 lines stripped ...]