---------------------------------------------------------------- ---------------- AXEL integrator's FAQ -------------------- ---------------------------------------------------------------- Last update: 2013-10-10 by S.Sire This document gives some advices for integrating AXEL into your application. It is presented as a FAQ. You are welcome to share your experience to improve it. PLEASE READ THIS DOCUMENT BEFORE USING AXEL Summary =======
How to build the library ? ========================== The library comes with the latest sources concatenated and minified inside axel/axel.js. However it is wised to make a fresh version by running the "build.lib" target in the scripts directory ("cd scripts" then "ant build.lib"). This requires that you install the Yahoo UI compressor onto your machine, and that you edit the "scripts/ant.properties" file to point to it. You can get the Yahoo UI compressor at http://developer.yahoo.com/yui/compressor/
How to build the library for debugging purpose ? ================================================ Follow the instructions above with "build.debug" target instead. The generated library will be a concatenated version of all the library files including comments, which is more convenient for debugging purpose. This does not requires to installe the Yahoo UI compressor.
How to select which source files to include into the library ? ============================================================== The files to include into the library are defined by the "core.lib.files", "editor.lib.files", "devices.lib.files", "filters.lib.files" and "util.lib.files" in the "scripts/ant.properties" file. You can remove some files to generate a smaller library. The dependencies between the source files are explained in the "How to know which files to include in the library ?" entry of this FAQ.
How to test the core features of the library after checkout ? ============================================================= The first thing to do is to open test/auto/loadSave.html and to hit the "Run Test" button at the upper right, within each browser and on each operating system that you intend to support. You must be aware however that if you open it directly from within your file system (i.e. no web server involved), all of the tests may fail on some browsers and if you click on the [inspect] link you should see a message such as: Exception while loading "XXX" : Access to restricted URI denied This is because the default security policy of the browser prevents the test application to open files from the local file system using the XHR object. This is the case with Firefox for instance. If this happens, you can either start again serving the files from behind a Web server, or find a way to enable access to local files from the XHR object. On Firefox for instance you have to set "security.fileuri.strict_origin_policy" to false in the "about:config" panel. See [1] The test configuration is described in test/auto/configuration.js, hence you can also customize it with your own test. Each test is defined by a template and an XML sample data file produced with the template. The test will load the template, transform it, load the XML sample data, dump the XML data, and compare it with the initial data. It FAILS if there is a difference, which means something is wrong. You are encouraged to create your own configuration and make extensive tests on your own data when ugrading the library to a newer version. Currently all the tests configured by default PASS on Firefox, Safari, Chrome, Opera and Internet Explorer (except the test based on the 'content' plugin). The tests with the "richtext" plugin FAIL on Opera and Internet Explorer. This is due to some minor differences in the serialization results. However it doesn't mean the plugin is not functional but only that different browsers give different HTML serializations which are all valid and can be viewed in any browser. All the tests above can be executed directly from the file system on Firefox 3, Safari 4, Internet Explorer 7, Opera 10, on Windows, Mac OS X, and Linux (Ubuntu). For Google Chrome there is a security restriction that prevents to open URLs with XMLHTTPRequest from the file:// domain. In that case you must launch the test from behind a Web server (see "How to configure scripts/server/server.rb to execute the tests" if you want to use the test server provided with AXEL). [1] http://kb.mozillazine.org/Security.fileuri.strict_origin_policy
How to test the interactive features of the library after checkout ? ==================================================================== The second thing to do is to test the library with user interactions. There are two ways to proceeds, unfortunately none is automatized yet and requires user interaction... The first way is to open each pre-defined template distributed with the library from the test/gui folder inside a target browser. There should be different templates for the core library and each of the plugins. Each template imports the AXEL library which has been generated inside the axel folder (see "How to build the library ?") and transforms itself to become auto-editable. Then follow the instructions of each template that describe some interactive tests to performs. The second way is to open editor/editor.xhtml, select a template (Page shortcut drop down list) and hit the "Visualize" button to generate the corresponding editor and enter data. You can also use the preferences button to load XML data inside a template. There should be at least one sample template for each plugin / filter. You can also directly test your own template by entering its path by hand. We strongly advice that you do so with your own template and test the interactive features before upgrading the library to a newer version. The editor.xhtml application can be run directly from the file system with Firefox 3, Safari 4, Opera 10 and Internet Explorer 8. It renders the templates inside an iframe. This is convenient as it also loads the external CSS files. We have some problems with Internet Explorer 7 not loading correctly the templates (MIME-Type sniffing issue, and/or not injecting the AXEL style sheet inside the iframe). In that case you can use editor/editornoframe.xhtml that does the same thing but without an iframe. The drawback is that in that case any external CSS files included by the template will not be loaded.
How to learn about AXEL API to load and transform templates into editors ? ========================================================================== You should read the AXEL tutorial that starts in tutorial/tutorial.xhtml Alternatively you can look at the source code of: - editor/editor.xhtml : to see how to load a template and transform within an iframe - editor/editornoframe.xhtml : to see how to load a template with an Ajax request and transform it to a div in your application Web page
How to write portable (cross-browser) templates ? ================================================= Use the file templates/samples/Template.xhtml as a starting point for your templates
How to Serve portable (cross-browser) templates ? ================================================= We do not have a definitive answer. But we have noticed the following facts. From the local file system, to open a template file either in a Web page or in an iframe, the file should have a .xhtml extension. In addition for Internet Explorer you should include the following META tag (it seems the META tag prevails for MIME-type sniffing when opening file from the local file system): <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> From the local file system, to open a template with the XMLHTTPRequest object or with an ActiveX object, we have no opinion :) From a Web server, to open a template file either in a Web page or in an iframe you should serve it with the "application/xhtml+xml" MIME type for all browsers excepted for Internet Explorer. For IE you should serve it with a "text/html" MIME-type. Be careful however that the "text/html" MIME-Type will fail on all the other browsers. Hence you should implement content-type switching on the server. Alternatively you can server a template from a Web server to an XMLHTTPRequest object or an ActiveX object. It seems that in that case the best thing to do is to serve it with a "text/xml" MIME-type which is acceptable on all the browsers.
How to configure scripts/server/server.rb to execute the tests ? ================================================================ scripts/server/server.rb starts a Web server that listen on port 8042 (http://localhost:8042/demos/index.html) and that serves the full library distribution. You can use it to launch the sample editor and/or do some testing from behind a Web server in case you have problem to launch them from within the file system. Read the previous entry "How to Serve portable (cross-browser) templates" to learn how to properly configure their MIME-Type. The server.rb script does not implement contextual MIME-TYPE switching, hence you must set your own by hand depending on the case, and using an instruction such as my_mime_types.update({"xhtml" => "text/html"}) (see the source code).
How to get some documentation about the available plugins / filters ? ===================================================================== Some very common plugins are described in the XTiger XML specification [1] (such as "text" and "select"). The rule of thumb is that every plugin / filter should have a How-To style guide in the docs folder, and a demonstration template that you can play with using the editor/editor.xhtml application in the templates folder. Finally you can check the AXEL wiki [2]. [1] ssire.github.com/xtiger-xml-spec/ [2] https://github.com/ssire/axel/wiki
How to know which files to include in the library ? =================================================== All the files in "src/core" are required except "iebrowser.js" which is required only to run on Internet Explorer. All the files in "src/editor/classical" are required except "xmlrobustloader.js" which is required only to use the robust loader algorithm. In that case you may also omit the "xmlloader.js" file if you don't use the basic loader algorithm. You must leave "xmlloader.js" after "xmlrobustloader.js" to set the default loader algorithm to the basic one. You need the files in "src/plugins" according to the primitive editors you use in your templates: text.js: 'text' primitive editor (depends on text.js device) select.js: 'select' primitive editor (depends on popup.js device) link.js: 'link' primitive editor (depends on popup.js device) photo.js: 'photo' upload primitive editor (depends on popup.js, upload devices and documentid.js filter) video.js: 'video' primitive editor for YouTube video (depends on popup.js device) You need the files in "src/devices" according to the primitive editors you use in your templates as stated above. For your information: text.js: input and textarea text entry fields popup.js: popup menu that may segmented lens.js: generic lens device (mega popup) for all lens based primitive editor upload.js: transfers a file (e.g. image file) to a server through an iframe requires a server that implements a corresponding communication protocol You need the files in "src/filters" according to the filters you use in your template. The only exception is "documentid.js" which can be required to use the 'photo' primitive editor. For your information: common.js: 'noxml' filter documentid.js: 'documentid' filter to be used with 'photo' plugin event.js: 'event' filter to generate 'axel-update' events wiki.js: 'wiki' filter of the 'text' primitive editor image.js: image inclusion by URL filter of the 'text' primitive editor initially developed for the Article.xhtml template layout.js: 'layout' filter of the 'text' primitive editor (experimental) video.js: YouTube 'filter' of the 'text' primitive editor, alternative to 'video' plugin debug.js: 'debug' filter for each of the primitive editors
How to choose between the basic XML loading algorithm or the robust one ? ========================================================================= This is an OPTIONAL section you do not need to understand for using the library. When loading XML data in a template with xtiger.util.Form.loadData, as described in the tutorial, the library uses the XML loading algorithm defined by the defaultLoader property of xtiger.editor.Generator. That property is set by the latest of the two source files "xmlrobustloader.js" and "xmlloader.js" which is included in the library. The pre-built "axel.js" file does include only the basic algorithm (i.e. "xmlloader.js"). Alternatively you can explicitly set the loader object by calling the setLoader method of xtiger.util.Form with either a new xtiger.editor.RobustLoader, or a new xtiger.editor.BasicLoader argument to select respectively the robust or the basic algorithms (in that case do not forget to include either "xmlrobustloader.js" or "xmlloader.js" into the library). The robust loader uses a greedy algorithm for loading XML data. It supports some forms of backward compatibility at the data level when a template has been modified. The drawback is that the template must conform to a set of restrictions on the full XTiger XML specification. The modifications themselves are limited to a restricted set of modifications. Both the XTiger XML restrictions and the allowed modifications are defined in a "Guidelines for writing robust XTiger XML templates" document written by Antoine Yersin which is available on demand (contat us). In conclusion be very careful if you want to use the robust XML loading algorithm. In particular USING THE ROBUST XML ALGORITHM ON TEMPLATES WHICH ARE NON ROBUSTS may lead to some data loss and distortions when editing data.