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