Wiki source code of JavaScriptAPI

Version 15.2 by Guillaume Delhumeau on 2011/12/15

Hide last authors
Sergiu Dumitriu 10.1 1 {{box cssClass="floatinginfobox" title="**Contents**"}}{{toc/}}{{/box}}
Sergiu Dumitriu 9.1 2
3 = XWiki JavaScript API =
Jerome 1.1 4
Sergiu Dumitriu 9.1 5 == Observable XWiki Events ==
6
Jerome 1.1 7 Stay in touch with what happens in the wiki! XWiki will fire custom javascript events on certain moment and upon certain actions that occur in the navigation flow.
8
Sergiu Dumitriu 9.1 9 Event names are build on the following model: ##xwiki:modulename:eventname##. Your JavaScript script or extension can get notified of such an event the following way:
Jerome 1.1 10
Sergiu Dumitriu 10.1 11 {{code language="javascript"}}
12 document.observe("xwiki:modulename:eventname", function(event) {
13 // Here, do something that will be executed at the moment the event is fired
14 doSomething();
Jerome 1.1 15
Sergiu Dumitriu 10.1 16 // The event can have an option memo object to pass to its observers some information:
17 console.log(event.memo.somethingINeedToKnow);
Sergiu Dumitriu 9.1 18 });
19 {{/code}}
Jerome 1.1 20
Sergiu Dumitriu 9.1 21 Check out the real examples below, or [[read more>>http://prototypejs.org/api/element/fire]] about Prototype.js's event system
Jerome 1.1 22
Sergiu Dumitriu 9.1 23 === DOM Events (xwiki.js) ===
Jerome 1.1 24
Sergiu Dumitriu 11.1 25 * **##xwiki:dom:loaded##**
26 This event is similar to [[prototype's dom:loaded event>>http://www.prototypejs.org/api/document/observe]], with the difference that in the time-lapse between ##dom:loaded## and ##xwiki:dom:loaded##, XWiki may have transformed the DOM. Example of DOM transformations operated by XWiki is setting the right target of links that have rel="external" attribute so that the document can be XHTML valid and still have the desired effect, making internal rendering error messages expandable, insert document template handlers for links to non-existent documents, and so on. In the future there might be more transformations operated by XWiki upon DOM initialization. This event is meant for code to be notified of loading of the XWiki-transformed version of the initial DOM. As ##dom:loaded##, it can be used as follow:(((
Sergiu Dumitriu 9.1 27 {{code}}
Jerome 1.1 28 document.observe("xwiki:dom:loaded", function(){
Sergiu Dumitriu 10.1 29 // Initialization that can rely on the fact the DOM is XWiki-tranformed goes here.
Jerome 1.1 30 });
Sergiu Dumitriu 11.1 31 {{/code}})))
Denis Gervalle 15.1 32
Sergiu Dumitriu 9.1 33 **It is recommended to bind startup scripts to this event** instead of ##window.load## or ##document.dom:loaded##.
Sergiu Dumitriu 11.1 34 * **##xwiki:dom:loading##**
Sergiu Dumitriu 9.1 35 ##xwiki:dom:loading## is sent between ##dom:loaded## and ##xwiki:dom:loaded##, before XWiki changes the DOM. This is the event that should start all scripts making important DOM changes that other scripts should see.
Sergiu Dumitriu 1.5 36
Denis Gervalle 15.1 37 {{warning}}
38 If your script is loaded **deferred**, all these events may be triggered **before your script is executed** and therefore **before it has the ablity to observe these events**. Since 3.1.1, to prevent your handler to never being called, never use ##dom:loaded## anymore, and check ##XWiki.isInitialized## before waiting for ##xwiki:dom:loading##, and ##XWiki.domIsLoaded## before waiting for ##xwiki:dom:loaded##. If the flag is true, you should proceed immediately with your handler. Here is a simple construct to properly handle this:(((
39 {{code}}
40 function init() {
41 // This is your initialization handler, that you generally hook to xwiki:dom:loaded
42 }
43 (XWiki && XWiki.domIsLoaded && init()) || document.observe("xwiki:dom:loaded", init);
44 {{/code}})))
45 {{/warning}}
46
Sergiu Dumitriu 9.1 47 === Document content events (actionButtons.js) ===
Sergiu Dumitriu 3.1 48
Sergiu Dumitriu 10.1 49 * **##xwiki:document:saved##**
50 This event is sent after the document has been successfully saved in an asynchronous request (i.e. after clicking the //Save and Continue// button).
51 * **##xwiki:document:saveFailed##**
52 This event is sent when a save and continue attempt failed for some reason. The XMLHttpRequest response object is sent in the memo, as ##event.memo.response##.
Sergiu Dumitriu 3.1 53
Sergiu Dumitriu 9.1 54 === Action events (actionButtons.js) ===
Jerome 1.1 55
Sergiu Dumitriu 9.1 56 * **##xwiki:actions:cancel##**
Sergiu Dumitriu 3.2 57 This event is sent after the user clicks the "Cancel" button of an editor (Wiki, WYSIWYG, object, rights, etc.), but before actually cancelling the edit.
Sergiu Dumitriu 9.1 58 * **##xwiki:actions:preview##**
Guillaume Delhumeau 15.2 59 This event is sent after the user clicks the "Preview" button of an editor (Wiki, WYSIWYG, object, rights, etc.), but before actually leaving the edit mode.
Sergiu Dumitriu 11.1 60 * **##xwiki:actions:save##**
Sergiu Dumitriu 12.1 61 This event is sent after the user clicks the "Save" or "Save & Continue" button of an editor (Wiki, WYSIWYG, object, rights, etc.), but before actually submitting the form. A memo is available if you need to know if the intend is to continue after the save, in ##event.memo['continue']##. You can use it as follows:(((
Sergiu Dumitriu 10.1 62 {{code language="javascript"}}
Sergiu Dumitriu 12.1 63 document.observe("xwiki:actions:save", function(event){
64 var doContinue = event.memo['continue'];
Sergiu Dumitriu 10.1 65 if (doContinue) {
66 // do something specific
67 }
Jerome 1.1 68 });
Sergiu Dumitriu 11.1 69 {{/code}})))
Jerome 1.1 70
Sergiu Dumitriu 12.1 71 {{warning}}Caveat: While most properties can be accessed as ##event.memo.property##, this doesn't work with ##event.memo.continue## since ##continue## is a reserved keyword.{{/warning}}
72
Sergiu Dumitriu 10.1 73 All these events contain as extra information, in the second parameter sent to event listeners (the memo), the original click event (if any, and which can be stopped to prevent the action from completing), and the form being submitted, as ##event.memo.originalEvent##, and ##event.memo.form## respectively.
Sergiu Dumitriu 1.5 74
Sergiu Dumitriu 9.1 75 === Document extra events (xwiki.js) ===
Jerome 1.1 76
Sergiu Dumitriu 11.1 77 * **##xwiki:docextra:loaded##**
78 This event is fired upon reception of the content of a document footer tab by AJAX. This event is useful if you need to operate transformations of the received content. You can filter on which tab content to operate (comments or attachment or information or ...) using the event memo. The DOM element in which the retrieved content has been injected is also passed to facilitate transformations.(((
Sergiu Dumitriu 10.1 79 {{code language="javascript"}}
Jerome 1.1 80 document.observe("xwiki:docextra:loaded", function(event){
81 var tabID = event.memo.id;
82 if (tabID == "attachments") {
83 // do something with the attachments tab retrieved content.
84 doSomething(event.memo.element);
85 }
86 });
Sergiu Dumitriu 9.1 87 {{/code}}
Sergiu Dumitriu 10.1 88 )))
Sergiu Dumitriu 9.1 89 * **##xwiki:docextra:activated##**
90 This event is fired upon activation of a tab. It differs from the loaded event since tabs are loaded only once if the user clicks going back and forth between tabs. This event will notify of each tab activation, just after the tab content is actually made visible. The tab ID is passed in the memo as for ##xwiki:docextra:loaded##
Oana Florea 4.1 91
Sergiu Dumitriu 9.1 92 === WYSIWYG events (XWikiWysiwyg.js) ===
Ecaterina Moraru (Valica) 5.1 93
Vincent Massol 11.3 94 WYSIWYG has it's own custom [[events list>>extensions:Extension.WYSIWYG Editor Module#HCustomevents]].
Ecaterina Moraru (Valica) 5.1 95
Sergiu Dumitriu 9.1 96 === Suggest events (ajaxSuggest.js) ===
Ecaterina Moraru (Valica) 8.1 97
Sergiu Dumitriu 9.1 98 * **##xwiki:suggest:selected##** (since 2.3)
Sergiu Dumitriu 11.1 99 This event is fired on the target input when a value was selected.
Ecaterina Moraru (Valica) 8.1 100
Marius Dumitru Florea 14.1 101 === Fullscreen events (fullScreenEdit.js) ===
Oana Florea 4.1 102
Marius Dumitru Florea 14.1 103 * **##xwiki:fullscreen:enter##** (since 3.0 M3) (fired before entering full screen editing)
104 * **##xwiki:fullscreen:entered##** (since 2.5.1) (fired after entering full screen editing)
105 * **##xwiki:fullscreen:exit##** (since 3.0 M3) (fired before exiting full screen editing)
106 * **##xwiki:fullscreen:exited##** (since 2.5.1) (fired after exiting full screen editing)
107 * **##xwiki:fullscreen:resized##** (since 2.5.1)
Ecaterina Moraru (Valica) 6.1 108
Sergiu Dumitriu 11.1 109 All events have the target DOM element in ##event.memo.target##.
110
Sergiu Dumitriu 9.1 111 === Annotations events (AnnotationCode/Settings jsx) ===
Ecaterina Moraru (Valica) 6.1 112
Sergiu Dumitriu 9.1 113 * **##xwiki:annotations:filter:changed##**
114 * **##xwiki:annotations:settings:loaded##**
Ecaterina Moraru (Valica) 6.1 115
Sergiu Dumitriu 9.1 116 === Livetable events (livetable.js) ===
Ecaterina Moraru (Valica) 6.1 117
Sergiu Dumitriu 11.1 118 * **##xwiki:livetable:newrow##** (##event.memo.row## holds the new row)
Sergiu Dumitriu 9.1 119 * **##xwiki:livetable:loadingEntries##** (since 2.3 RC1)
Sergiu Dumitriu 11.1 120 * **##xwiki:livetable:receivedEntries##** (since 2.3 RC1) (##event.memo.data## contains the received JSON data)
121 * **##xwiki:livetable:loadingComplete##** (since 2.4 M1) (##event.memo.status## contains the response status code)
Sergiu Dumitriu 9.1 122 * **##xwiki:livetable:displayComplete##** (since 2.4 M1)
123 * **##xwiki:livetable:ready##** (since 2.4.4)
Denis Gervalle 15.1 124 * **##xwiki:livetable:loading##** (since 3.1.1) (should be used in place of ##xwiki:dom:loading## to startup livetables)
Sergiu Dumitriu 11.1 125
126 The livetable sends both generic events, named as above, and events specific to each livetable, containing the table name on the third position, such as ##xwiki:livetable:alldocs:loadingEntries##. The generic event has the table name in the memo, as ##event.memo.tableId##.

Get Connected