8 changed files with 812 additions and 20 deletions
-
1.gitignore
-
451documentation/fdl-1.2.texi
-
346documentation/movim-core.texi
-
4lib/Ajaxer.php
-
17lib/Widget.php
-
2lib/WidgetWrapper.php
-
4lib/widgets/Poller/Poller.php
-
7lib/widgets/Wall/Wall.php
@ -0,0 +1,451 @@ |
|||
@c The GNU Free Documentation License. |
|||
@center Version 1.2, November 2002 |
|||
|
|||
@c This file is intended to be included within another document, |
|||
@c hence no sectioning command or @node. |
|||
|
|||
@display |
|||
Copyright @copyright{} 2000,2001,2002 Free Software Foundation, Inc. |
|||
51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA |
|||
|
|||
Everyone is permitted to copy and distribute verbatim copies |
|||
of this license document, but changing it is not allowed. |
|||
@end display |
|||
|
|||
@enumerate 0 |
|||
@item |
|||
PREAMBLE |
|||
|
|||
The purpose of this License is to make a manual, textbook, or other |
|||
functional and useful document @dfn{free} in the sense of freedom: to |
|||
assure everyone the effective freedom to copy and redistribute it, |
|||
with or without modifying it, either commercially or noncommercially. |
|||
Secondarily, this License preserves for the author and publisher a way |
|||
to get credit for their work, while not being considered responsible |
|||
for modifications made by others. |
|||
|
|||
This License is a kind of ``copyleft'', which means that derivative |
|||
works of the document must themselves be free in the same sense. It |
|||
complements the GNU General Public License, which is a copyleft |
|||
license designed for free software. |
|||
|
|||
We have designed this License in order to use it for manuals for free |
|||
software, because free software needs free documentation: a free |
|||
program should come with manuals providing the same freedoms that the |
|||
software does. But this License is not limited to software manuals; |
|||
it can be used for any textual work, regardless of subject matter or |
|||
whether it is published as a printed book. We recommend this License |
|||
principally for works whose purpose is instruction or reference. |
|||
|
|||
@item |
|||
APPLICABILITY AND DEFINITIONS |
|||
|
|||
This License applies to any manual or other work, in any medium, that |
|||
contains a notice placed by the copyright holder saying it can be |
|||
distributed under the terms of this License. Such a notice grants a |
|||
world-wide, royalty-free license, unlimited in duration, to use that |
|||
work under the conditions stated herein. The ``Document'', below, |
|||
refers to any such manual or work. Any member of the public is a |
|||
licensee, and is addressed as ``you''. You accept the license if you |
|||
copy, modify or distribute the work in a way requiring permission |
|||
under copyright law. |
|||
|
|||
A ``Modified Version'' of the Document means any work containing the |
|||
Document or a portion of it, either copied verbatim, or with |
|||
modifications and/or translated into another language. |
|||
|
|||
A ``Secondary Section'' is a named appendix or a front-matter section |
|||
of the Document that deals exclusively with the relationship of the |
|||
publishers or authors of the Document to the Document's overall |
|||
subject (or to related matters) and contains nothing that could fall |
|||
directly within that overall subject. (Thus, if the Document is in |
|||
part a textbook of mathematics, a Secondary Section may not explain |
|||
any mathematics.) The relationship could be a matter of historical |
|||
connection with the subject or with related matters, or of legal, |
|||
commercial, philosophical, ethical or political position regarding |
|||
them. |
|||
|
|||
The ``Invariant Sections'' are certain Secondary Sections whose titles |
|||
are designated, as being those of Invariant Sections, in the notice |
|||
that says that the Document is released under this License. If a |
|||
section does not fit the above definition of Secondary then it is not |
|||
allowed to be designated as Invariant. The Document may contain zero |
|||
Invariant Sections. If the Document does not identify any Invariant |
|||
Sections then there are none. |
|||
|
|||
The ``Cover Texts'' are certain short passages of text that are listed, |
|||
as Front-Cover Texts or Back-Cover Texts, in the notice that says that |
|||
the Document is released under this License. A Front-Cover Text may |
|||
be at most 5 words, and a Back-Cover Text may be at most 25 words. |
|||
|
|||
A ``Transparent'' copy of the Document means a machine-readable copy, |
|||
represented in a format whose specification is available to the |
|||
general public, that is suitable for revising the document |
|||
straightforwardly with generic text editors or (for images composed of |
|||
pixels) generic paint programs or (for drawings) some widely available |
|||
drawing editor, and that is suitable for input to text formatters or |
|||
for automatic translation to a variety of formats suitable for input |
|||
to text formatters. A copy made in an otherwise Transparent file |
|||
format whose markup, or absence of markup, has been arranged to thwart |
|||
or discourage subsequent modification by readers is not Transparent. |
|||
An image format is not Transparent if used for any substantial amount |
|||
of text. A copy that is not ``Transparent'' is called ``Opaque''. |
|||
|
|||
Examples of suitable formats for Transparent copies include plain |
|||
@sc{ascii} without markup, Texinfo input format, La@TeX{} input |
|||
format, @acronym{SGML} or @acronym{XML} using a publicly available |
|||
@acronym{DTD}, and standard-conforming simple @acronym{HTML}, |
|||
PostScript or @acronym{PDF} designed for human modification. Examples |
|||
of transparent image formats include @acronym{PNG}, @acronym{XCF} and |
|||
@acronym{JPG}. Opaque formats include proprietary formats that can be |
|||
read and edited only by proprietary word processors, @acronym{SGML} or |
|||
@acronym{XML} for which the @acronym{DTD} and/or processing tools are |
|||
not generally available, and the machine-generated @acronym{HTML}, |
|||
PostScript or @acronym{PDF} produced by some word processors for |
|||
output purposes only. |
|||
|
|||
The ``Title Page'' means, for a printed book, the title page itself, |
|||
plus such following pages as are needed to hold, legibly, the material |
|||
this License requires to appear in the title page. For works in |
|||
formats which do not have any title page as such, ``Title Page'' means |
|||
the text near the most prominent appearance of the work's title, |
|||
preceding the beginning of the body of the text. |
|||
|
|||
A section ``Entitled XYZ'' means a named subunit of the Document whose |
|||
title either is precisely XYZ or contains XYZ in parentheses following |
|||
text that translates XYZ in another language. (Here XYZ stands for a |
|||
specific section name mentioned below, such as ``Acknowledgements'', |
|||
``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title'' |
|||
of such a section when you modify the Document means that it remains a |
|||
section ``Entitled XYZ'' according to this definition. |
|||
|
|||
The Document may include Warranty Disclaimers next to the notice which |
|||
states that this License applies to the Document. These Warranty |
|||
Disclaimers are considered to be included by reference in this |
|||
License, but only as regards disclaiming warranties: any other |
|||
implication that these Warranty Disclaimers may have is void and has |
|||
no effect on the meaning of this License. |
|||
|
|||
@item |
|||
VERBATIM COPYING |
|||
|
|||
You may copy and distribute the Document in any medium, either |
|||
commercially or noncommercially, provided that this License, the |
|||
copyright notices, and the license notice saying this License applies |
|||
to the Document are reproduced in all copies, and that you add no other |
|||
conditions whatsoever to those of this License. You may not use |
|||
technical measures to obstruct or control the reading or further |
|||
copying of the copies you make or distribute. However, you may accept |
|||
compensation in exchange for copies. If you distribute a large enough |
|||
number of copies you must also follow the conditions in section 3. |
|||
|
|||
You may also lend copies, under the same conditions stated above, and |
|||
you may publicly display copies. |
|||
|
|||
@item |
|||
COPYING IN QUANTITY |
|||
|
|||
If you publish printed copies (or copies in media that commonly have |
|||
printed covers) of the Document, numbering more than 100, and the |
|||
Document's license notice requires Cover Texts, you must enclose the |
|||
copies in covers that carry, clearly and legibly, all these Cover |
|||
Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on |
|||
the back cover. Both covers must also clearly and legibly identify |
|||
you as the publisher of these copies. The front cover must present |
|||
the full title with all words of the title equally prominent and |
|||
visible. You may add other material on the covers in addition. |
|||
Copying with changes limited to the covers, as long as they preserve |
|||
the title of the Document and satisfy these conditions, can be treated |
|||
as verbatim copying in other respects. |
|||
|
|||
If the required texts for either cover are too voluminous to fit |
|||
legibly, you should put the first ones listed (as many as fit |
|||
reasonably) on the actual cover, and continue the rest onto adjacent |
|||
pages. |
|||
|
|||
If you publish or distribute Opaque copies of the Document numbering |
|||
more than 100, you must either include a machine-readable Transparent |
|||
copy along with each Opaque copy, or state in or with each Opaque copy |
|||
a computer-network location from which the general network-using |
|||
public has access to download using public-standard network protocols |
|||
a complete Transparent copy of the Document, free of added material. |
|||
If you use the latter option, you must take reasonably prudent steps, |
|||
when you begin distribution of Opaque copies in quantity, to ensure |
|||
that this Transparent copy will remain thus accessible at the stated |
|||
location until at least one year after the last time you distribute an |
|||
Opaque copy (directly or through your agents or retailers) of that |
|||
edition to the public. |
|||
|
|||
It is requested, but not required, that you contact the authors of the |
|||
Document well before redistributing any large number of copies, to give |
|||
them a chance to provide you with an updated version of the Document. |
|||
|
|||
@item |
|||
MODIFICATIONS |
|||
|
|||
You may copy and distribute a Modified Version of the Document under |
|||
the conditions of sections 2 and 3 above, provided that you release |
|||
the Modified Version under precisely this License, with the Modified |
|||
Version filling the role of the Document, thus licensing distribution |
|||
and modification of the Modified Version to whoever possesses a copy |
|||
of it. In addition, you must do these things in the Modified Version: |
|||
|
|||
@enumerate A |
|||
@item |
|||
Use in the Title Page (and on the covers, if any) a title distinct |
|||
from that of the Document, and from those of previous versions |
|||
(which should, if there were any, be listed in the History section |
|||
of the Document). You may use the same title as a previous version |
|||
if the original publisher of that version gives permission. |
|||
|
|||
@item |
|||
List on the Title Page, as authors, one or more persons or entities |
|||
responsible for authorship of the modifications in the Modified |
|||
Version, together with at least five of the principal authors of the |
|||
Document (all of its principal authors, if it has fewer than five), |
|||
unless they release you from this requirement. |
|||
|
|||
@item |
|||
State on the Title page the name of the publisher of the |
|||
Modified Version, as the publisher. |
|||
|
|||
@item |
|||
Preserve all the copyright notices of the Document. |
|||
|
|||
@item |
|||
Add an appropriate copyright notice for your modifications |
|||
adjacent to the other copyright notices. |
|||
|
|||
@item |
|||
Include, immediately after the copyright notices, a license notice |
|||
giving the public permission to use the Modified Version under the |
|||
terms of this License, in the form shown in the Addendum below. |
|||
|
|||
@item |
|||
Preserve in that license notice the full lists of Invariant Sections |
|||
and required Cover Texts given in the Document's license notice. |
|||
|
|||
@item |
|||
Include an unaltered copy of this License. |
|||
|
|||
@item |
|||
Preserve the section Entitled ``History'', Preserve its Title, and add |
|||
to it an item stating at least the title, year, new authors, and |
|||
publisher of the Modified Version as given on the Title Page. If |
|||
there is no section Entitled ``History'' in the Document, create one |
|||
stating the title, year, authors, and publisher of the Document as |
|||
given on its Title Page, then add an item describing the Modified |
|||
Version as stated in the previous sentence. |
|||
|
|||
@item |
|||
Preserve the network location, if any, given in the Document for |
|||
public access to a Transparent copy of the Document, and likewise |
|||
the network locations given in the Document for previous versions |
|||
it was based on. These may be placed in the ``History'' section. |
|||
You may omit a network location for a work that was published at |
|||
least four years before the Document itself, or if the original |
|||
publisher of the version it refers to gives permission. |
|||
|
|||
@item |
|||
For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve |
|||
the Title of the section, and preserve in the section all the |
|||
substance and tone of each of the contributor acknowledgements and/or |
|||
dedications given therein. |
|||
|
|||
@item |
|||
Preserve all the Invariant Sections of the Document, |
|||
unaltered in their text and in their titles. Section numbers |
|||
or the equivalent are not considered part of the section titles. |
|||
|
|||
@item |
|||
Delete any section Entitled ``Endorsements''. Such a section |
|||
may not be included in the Modified Version. |
|||
|
|||
@item |
|||
Do not retitle any existing section to be Entitled ``Endorsements'' or |
|||
to conflict in title with any Invariant Section. |
|||
|
|||
@item |
|||
Preserve any Warranty Disclaimers. |
|||
@end enumerate |
|||
|
|||
If the Modified Version includes new front-matter sections or |
|||
appendices that qualify as Secondary Sections and contain no material |
|||
copied from the Document, you may at your option designate some or all |
|||
of these sections as invariant. To do this, add their titles to the |
|||
list of Invariant Sections in the Modified Version's license notice. |
|||
These titles must be distinct from any other section titles. |
|||
|
|||
You may add a section Entitled ``Endorsements'', provided it contains |
|||
nothing but endorsements of your Modified Version by various |
|||
parties---for example, statements of peer review or that the text has |
|||
been approved by an organization as the authoritative definition of a |
|||
standard. |
|||
|
|||
You may add a passage of up to five words as a Front-Cover Text, and a |
|||
passage of up to 25 words as a Back-Cover Text, to the end of the list |
|||
of Cover Texts in the Modified Version. Only one passage of |
|||
Front-Cover Text and one of Back-Cover Text may be added by (or |
|||
through arrangements made by) any one entity. If the Document already |
|||
includes a cover text for the same cover, previously added by you or |
|||
by arrangement made by the same entity you are acting on behalf of, |
|||
you may not add another; but you may replace the old one, on explicit |
|||
permission from the previous publisher that added the old one. |
|||
|
|||
The author(s) and publisher(s) of the Document do not by this License |
|||
give permission to use their names for publicity for or to assert or |
|||
imply endorsement of any Modified Version. |
|||
|
|||
@item |
|||
COMBINING DOCUMENTS |
|||
|
|||
You may combine the Document with other documents released under this |
|||
License, under the terms defined in section 4 above for modified |
|||
versions, provided that you include in the combination all of the |
|||
Invariant Sections of all of the original documents, unmodified, and |
|||
list them all as Invariant Sections of your combined work in its |
|||
license notice, and that you preserve all their Warranty Disclaimers. |
|||
|
|||
The combined work need only contain one copy of this License, and |
|||
multiple identical Invariant Sections may be replaced with a single |
|||
copy. If there are multiple Invariant Sections with the same name but |
|||
different contents, make the title of each such section unique by |
|||
adding at the end of it, in parentheses, the name of the original |
|||
author or publisher of that section if known, or else a unique number. |
|||
Make the same adjustment to the section titles in the list of |
|||
Invariant Sections in the license notice of the combined work. |
|||
|
|||
In the combination, you must combine any sections Entitled ``History'' |
|||
in the various original documents, forming one section Entitled |
|||
``History''; likewise combine any sections Entitled ``Acknowledgements'', |
|||
and any sections Entitled ``Dedications''. You must delete all |
|||
sections Entitled ``Endorsements.'' |
|||
|
|||
@item |
|||
COLLECTIONS OF DOCUMENTS |
|||
|
|||
You may make a collection consisting of the Document and other documents |
|||
released under this License, and replace the individual copies of this |
|||
License in the various documents with a single copy that is included in |
|||
the collection, provided that you follow the rules of this License for |
|||
verbatim copying of each of the documents in all other respects. |
|||
|
|||
You may extract a single document from such a collection, and distribute |
|||
it individually under this License, provided you insert a copy of this |
|||
License into the extracted document, and follow this License in all |
|||
other respects regarding verbatim copying of that document. |
|||
|
|||
@item |
|||
AGGREGATION WITH INDEPENDENT WORKS |
|||
|
|||
A compilation of the Document or its derivatives with other separate |
|||
and independent documents or works, in or on a volume of a storage or |
|||
distribution medium, is called an ``aggregate'' if the copyright |
|||
resulting from the compilation is not used to limit the legal rights |
|||
of the compilation's users beyond what the individual works permit. |
|||
When the Document is included in an aggregate, this License does not |
|||
apply to the other works in the aggregate which are not themselves |
|||
derivative works of the Document. |
|||
|
|||
If the Cover Text requirement of section 3 is applicable to these |
|||
copies of the Document, then if the Document is less than one half of |
|||
the entire aggregate, the Document's Cover Texts may be placed on |
|||
covers that bracket the Document within the aggregate, or the |
|||
electronic equivalent of covers if the Document is in electronic form. |
|||
Otherwise they must appear on printed covers that bracket the whole |
|||
aggregate. |
|||
|
|||
@item |
|||
TRANSLATION |
|||
|
|||
Translation is considered a kind of modification, so you may |
|||
distribute translations of the Document under the terms of section 4. |
|||
Replacing Invariant Sections with translations requires special |
|||
permission from their copyright holders, but you may include |
|||
translations of some or all Invariant Sections in addition to the |
|||
original versions of these Invariant Sections. You may include a |
|||
translation of this License, and all the license notices in the |
|||
Document, and any Warranty Disclaimers, provided that you also include |
|||
the original English version of this License and the original versions |
|||
of those notices and disclaimers. In case of a disagreement between |
|||
the translation and the original version of this License or a notice |
|||
or disclaimer, the original version will prevail. |
|||
|
|||
If a section in the Document is Entitled ``Acknowledgements'', |
|||
``Dedications'', or ``History'', the requirement (section 4) to Preserve |
|||
its Title (section 1) will typically require changing the actual |
|||
title. |
|||
|
|||
@item |
|||
TERMINATION |
|||
|
|||
You may not copy, modify, sublicense, or distribute the Document except |
|||
as expressly provided for under this License. Any other attempt to |
|||
copy, modify, sublicense or distribute the Document is void, and will |
|||
automatically terminate your rights under this License. However, |
|||
parties who have received copies, or rights, from you under this |
|||
License will not have their licenses terminated so long as such |
|||
parties remain in full compliance. |
|||
|
|||
@item |
|||
FUTURE REVISIONS OF THIS LICENSE |
|||
|
|||
The Free Software Foundation may publish new, revised versions |
|||
of the GNU Free Documentation License from time to time. Such new |
|||
versions will be similar in spirit to the present version, but may |
|||
differ in detail to address new problems or concerns. See |
|||
@uref{http://www.gnu.org/copyleft/}. |
|||
|
|||
Each version of the License is given a distinguishing version number. |
|||
If the Document specifies that a particular numbered version of this |
|||
License ``or any later version'' applies to it, you have the option of |
|||
following the terms and conditions either of that specified version or |
|||
of any later version that has been published (not as a draft) by the |
|||
Free Software Foundation. If the Document does not specify a version |
|||
number of this License, you may choose any version ever published (not |
|||
as a draft) by the Free Software Foundation. |
|||
@end enumerate |
|||
|
|||
@page |
|||
@heading ADDENDUM: How to use this License for your documents |
|||
|
|||
To use this License in a document you have written, include a copy of |
|||
the License in the document and put the following copyright and |
|||
license notices just after the title page: |
|||
|
|||
@smallexample |
|||
@group |
|||
Copyright (C) @var{year} @var{your name}. |
|||
Permission is granted to copy, distribute and/or modify this document |
|||
under the terms of the GNU Free Documentation License, Version 1.2 |
|||
or any later version published by the Free Software Foundation; |
|||
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover |
|||
Texts. A copy of the license is included in the section entitled ``GNU |
|||
Free Documentation License''. |
|||
@end group |
|||
@end smallexample |
|||
|
|||
If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, |
|||
replace the ``with@dots{}Texts.'' line with this: |
|||
|
|||
@smallexample |
|||
@group |
|||
with the Invariant Sections being @var{list their titles}, with |
|||
the Front-Cover Texts being @var{list}, and with the Back-Cover Texts |
|||
being @var{list}. |
|||
@end group |
|||
@end smallexample |
|||
|
|||
If you have Invariant Sections without Cover Texts, or some other |
|||
combination of the three, merge those two alternatives to suit the |
|||
situation. |
|||
|
|||
If your document contains nontrivial examples of program code, we |
|||
recommend releasing these examples in parallel under your choice of |
|||
free software license, such as the GNU General Public License, |
|||
to permit their use in free software. |
|||
|
|||
@c Local Variables: |
|||
@c ispell-local-pdict: "ispell-dict" |
|||
@c End: |
|||
|
@ -0,0 +1,346 @@ |
|||
\input texinfo @c -*-texinfo-*- |
|||
@c %**start of header |
|||
@documentencoding UTF-8 |
|||
@setfilename movim-core.info |
|||
@settitle Movim-core |
|||
@setchapternewpage on |
|||
@c %**end of header |
|||
|
|||
@set VERSION 0.1 |
|||
@set UPDATED 19 February 2011 |
|||
|
|||
@copying |
|||
This manual documents Movim-Core (version @value{VERSION}, @value{UPDATED}). |
|||
|
|||
Copyright @copyright{} 2009-2011 Movim-Core project. |
|||
@sp 1 |
|||
@quotation |
|||
Permission is granted to copy, distribute and/or modify this document |
|||
under the terms of the GNU Free Documentation License, Version 1.2 |
|||
or any later version published by the Free Software Foundation; |
|||
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover |
|||
Texts. A copy of the license is included in the section entitled ``GNU |
|||
Free Documentation License''. |
|||
@end quotation |
|||
@end copying |
|||
|
|||
@titlepage |
|||
@title MOVIM-CORE |
|||
@subtitle version @value{VERSION}, @value{UPDATED} |
|||
@vskip 4cm |
|||
@author Guillaume Pasquet, Timothée Jaussoin |
|||
@c Copyright page |
|||
@page |
|||
@vskip 0pt plus 1filll |
|||
@insertcopying |
|||
@end titlepage |
|||
|
|||
|
|||
@contents |
|||
|
|||
@ifnottex |
|||
@node Top |
|||
@top MOVIM-CORE |
|||
|
|||
This is Movim-core @value{VERSION}'s manual. |
|||
@end ifnottex |
|||
|
|||
@menu |
|||
* foreword:: What this document is all about |
|||
* introduction:: What is Movim-core and how to use this document |
|||
* structure:: A description of Movim-core's internals |
|||
* API:: Documentation of the widget's API |
|||
@end menu |
|||
|
|||
@node foreword |
|||
@chapter Foreword |
|||
Movim-core is an XMPP communication platform. It is extensible and uses a |
|||
widget-based system for the user interface. Please note that this is not |
|||
designed to be used directly by an end-user. |
|||
|
|||
This document describes the principles on which Movim-core is built and the |
|||
necessary knowledge to implement new widgets. |
|||
|
|||
@node introduction |
|||
@chapter Introduction |
|||
Movim-core is designed to ease the implementation of XMPP web-based clients, |
|||
using massively asynchronous javascript and abstracting XMPP calls into an |
|||
events-based API. |
|||
|
|||
The widgets API doesn't only provide the necessary abstraction and framework to |
|||
communicate through XMPP, it also features a javascript abstration system that |
|||
lets you write as little javascript as possible. Moreover, widgets can embed |
|||
their own resources --- pictures, css, javascript. |
|||
|
|||
@section Requirements |
|||
Movim-core is a web framework written in PHP. To run it, you need the following |
|||
software: |
|||
|
|||
@itemize @bullet |
|||
@item |
|||
PHP5.3 or greater with the Curl library. |
|||
@item |
|||
A web server: apache, lighttpd etc. (Note that weird web servers like IIS |
|||
haven't been tested.) |
|||
@end itemize |
|||
|
|||
@section Getting Movim-core |
|||
Movim-core may be downloaded from @url{http://www.movim.eu}. |
|||
|
|||
Note that if you like risks, you may also check out the latest development |
|||
version at @url{http://gitorious.org/movim}. |
|||
|
|||
@section Installing Movim |
|||
After downloading the Movim-core archive, simply extract it somewhere in your |
|||
web server's root directory, and off you go. |
|||
|
|||
@section Helping out |
|||
Movim-core is Free software under the AGPL license. You can check out the latest |
|||
code at @url{http://gitorious.org/movim}. Feel free to send in merge requests if |
|||
you want to lend a hand. |
|||
|
|||
You can also help by reporting new bugs or proposing new ideas. |
|||
|
|||
@node structure |
|||
@chapter Internal structure |
|||
Understanding Movim-core's internals isn't necessary to use it. However, it may |
|||
help finding out problems and developing more efficiently. |
|||
|
|||
Movim-core is consists of a widgets system and an XMPP abstration that |
|||
communicate together through an asynchronous event handler. This is all |
|||
triggered by a controller, which is loaded depending on the page you visit. |
|||
|
|||
@section XMPP connection |
|||
The XMPP connection is managed by the JAXL library. It abstracts the raw sending |
|||
and reception of XML documents. Each message is handled and seen as events from |
|||
the widgets point of view. |
|||
|
|||
Each loaded widget declares its event handlers for different types of |
|||
events. These are triggered when the pertaining event comes through. |
|||
|
|||
@section Controller |
|||
The controller's job is to bootstrap the other systems. It doesn't do much all |
|||
by itself. |
|||
|
|||
@section Widgets |
|||
Widgets are small pieces of software that plug into Movim-core to provide extra |
|||
ability to the system. These are mostly graphical, and generate ajax code |
|||
automatically. |
|||
|
|||
Movim-core comes with several widgets. These sit in the @file{lib/widgets} |
|||
directory. User-defined widgets should be in the @file{widgets} directory. Note |
|||
that user-defined widgets always shadow the system widgets. |
|||
|
|||
Widgets can declare ajax functions and XMPP event handlers in order to interact |
|||
with their GUI part and the XMPP subsystem. @xref{widget-api} for more |
|||
information. |
|||
|
|||
@node widget-api |
|||
@chapter Widget API |
|||
Widgets inherit from the @emph{Widget} base class. The base class automagically |
|||
generates ajax calls and javascript functions for you. |
|||
|
|||
The basic template of a Movim widget is as follows: |
|||
|
|||
@cartouche |
|||
@verbatim |
|||
class Widget extends Widget |
|||
{ |
|||
function WidgetLoad() |
|||
{ |
|||
$this->registerEvent('incomemessage', 'onIncomingMessage'); |
|||
} |
|||
|
|||
function onIncomingMessage($data) |
|||
{ |
|||
$this->sendto('movim_prepend', array( |
|||
'chatMessages', |
|||
$data['message'], |
|||
)); |
|||
} |
|||
|
|||
function build() |
|||
{ |
|||
?> |
|||
<div id="chatMessages"> |
|||
</div> |
|||
<? |
|||
} |
|||
} |
|||
@end verbatim |
|||
@end cartouche |
|||
|
|||
Note that the constructor is not reimplemented. Instead the parent class |
|||
provides a @code{WidgetLoad()} function that is called right at the end of the |
|||
standard constructor. |
|||
|
|||
Event handlers must be defined into @code{WidgetLoad()}. |
|||
|
|||
The @code{build()} function is called when the widget is being written onto the |
|||
interface. That's typically where you should put your HTML code. |
|||
|
|||
|
|||
@section Events |
|||
XMPP triggers many different kinds of events that are run against all the loaded |
|||
widgets. In order to process an event, you may register one or more handlers in |
|||
your widget. |
|||
|
|||
@subsection Handling events |
|||
A widget handler is a public method that only takes one parameter: |
|||
@code{$data}, which usually is an array that contains the data returned by the |
|||
XMPP server. |
|||
|
|||
Your handlers must be registered in @code{WidgetLoad()} using the method: |
|||
|
|||
@cartouche |
|||
@verbatim |
|||
Widget::registerEvent($eventType, $handler) |
|||
@end verbatim |
|||
@end cartouche |
|||
|
|||
@code{$handler} is a the name of the method as a string, and @code{$eventType} |
|||
is the name of the event as a string. |
|||
|
|||
@subsection Event types |
|||
The XMPP subsystem raises the following events: |
|||
|
|||
@table @code |
|||
@item postdisconnect |
|||
Event that is triggered immediately after the account has been |
|||
disconnected on the user's request. |
|||
@item incomingemptybody |
|||
A message that comes in without body. This is typically a presence ping. |
|||
@item vcardreceived |
|||
The user's vcard was received. @code{$data} contains the vcard as a base64 |
|||
encoded string. |
|||
@item rosterreceived |
|||
The roster's list was received. @code{$data} is an array of groups and |
|||
users. |
|||
@item incomeactive |
|||
The contact is currently looking at his message list. |
|||
@item incomecomposing |
|||
The contact is writing a message. |
|||
@item incomemessage |
|||
A new message was received (contained in @code{$data}). |
|||
@item incomeoffline |
|||
A contact as gone offline. |
|||
@item incomeaway |
|||
A contact is now marked as away. |
|||
@item incomednd |
|||
A contact is now marked as @emph{do not disturb}. |
|||
@item incomeonline |
|||
A contact is now online. |
|||
@end table |
|||
|
|||
@node sendto |
|||
@subsection Sending messages to JS |
|||
Widgets are split in two parts. One is the GUI-javascript part, the other is the |
|||
PHP script. Both communicate asynchronously. The GUI part can send data to the |
|||
PHP part through AJAX calls (@xref{ajaxcalls}), and event handler can also send |
|||
messages to their GUI counterpart through Movim-core's long polling. |
|||
|
|||
This is achieved by calling the method: |
|||
|
|||
@cartouche |
|||
@verbatim |
|||
Widget::sendto($callback, array $parameters); |
|||
@end verbatim |
|||
@end cartouche |
|||
|
|||
The principle is very simple, @code{sendto()} sends an XMLRPC call to the GUI |
|||
part that runs the specified @code{$callback} function with the provided |
|||
@code{$parameters} that are ordered as appropriated. |
|||
|
|||
Additionally, binary data should be base64 encoded and wrapped in a CDATA |
|||
container. To simplify the matter, the method @code{Widget::cdata()} is |
|||
provided. |
|||
|
|||
@node js-callbacks |
|||
@subsection Standard javascript callbacks |
|||
You may define your own javascript callback functions and use them as |
|||
appropriate. Alternatively, Movim-core comes with a standard set of javascript |
|||
callbacks that allow simple operations on HTML elements (picked up by ID). |
|||
|
|||
@table @code |
|||
@item movim_append(target, string) |
|||
Appends @code{string} to the html element with ID @code{target}. |
|||
@item movim_prepend(target, string) |
|||
Prepends @code{string} to the html element with ID @code{target}. |
|||
@item movim_fill(target, string) |
|||
Fills @code{string} to the html element with ID @code{target}. |
|||
@item movim_drop() |
|||
Doesn't do anything. |
|||
@end table |
|||
|
|||
@node ajaxcalls |
|||
@subsection Ajax calls |
|||
Any method defined in your widget that starts with @code{ajax} will have a |
|||
javascript ajax call automatically generated. |
|||
|
|||
This ajax call can be explicitely called upon with the method: |
|||
|
|||
@cartouche |
|||
@verbatim |
|||
Widget::callAjax($funcname, $callback, $target, ...) |
|||
@end verbatim |
|||
@end cartouche |
|||
|
|||
@code{$funcname} is the name of the ajax function. @code{$callback} is the name |
|||
of the javascript callback to handle the return, @code{$target} is the ID of the |
|||
element in which to apply the return. |
|||
|
|||
Note that you can pass an arbitrary number of arguments, the extra arguments are |
|||
mapped to those of the ajax function. Here is an example: |
|||
|
|||
@cartouche |
|||
@verbatim |
|||
class MyWidget extends Widget |
|||
{ |
|||
function ajaxTest($param1, $param2) |
|||
{ |
|||
... |
|||
} |
|||
|
|||
function build() |
|||
{ |
|||
?> |
|||
<div id="test"></div> |
|||
<input type="button" |
|||
onclick="<? $this->callAjax( |
|||
'ajaxTest', |
|||
'movim_fill', |
|||
"'test'", |
|||
'1', |
|||
'2' |
|||
);?>"/> |
|||
<? |
|||
} |
|||
} |
|||
@end verbatim |
|||
@end cartouche |
|||
|
|||
Note that strings that needs to be passed to javascript must be double-quoted. |
|||
|
|||
@node widget-resource |
|||
@subsection Widget resource |
|||
Widgets can come along with their own resources, in particular their CSS and |
|||
javascript. |
|||
|
|||
The @code{Widget} base class includes two methods to ease the integration of |
|||
custom javascript and css: |
|||
|
|||
@cartouche |
|||
@verbatim |
|||
Widget::addjs($jsfile) |
|||
Widget::addcss($cssfile) |
|||
@end verbatim |
|||
@end cartouche |
|||
|
|||
The file paths given to these functions are relative to the widget's directory. |
|||
|
|||
@node license |
|||
@comment node-name, next, previous, up |
|||
@chapter GNU Free Documentation License |
|||
@include fdl-1.2.texi |
|||
|
|||
@bye |
Write
Preview
Loading…
Cancel
Save
Reference in new issue