Browse Source

integrated last medor boilerplate from osp

Bachir Soussi Chiadmi 4 years ago
parent
commit
235959b2ce

File diff suppressed because it is too large
+ 0 - 231
LICENSE


+ 661 - 0
agpl-3.0.txt

@@ -0,0 +1,661 @@
+                    GNU AFFERO GENERAL PUBLIC LICENSE
+                       Version 3, 19 November 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU Affero General Public License is a free, copyleft license for
+software and other kinds of works, specifically designed to ensure
+cooperation with the community in the case of network server software.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+our General Public Licenses are intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  Developers that use our General Public Licenses protect your rights
+with two steps: (1) assert copyright on the software, and (2) offer
+you this License which gives you legal permission to copy, distribute
+and/or modify the software.
+
+  A secondary benefit of defending all users' freedom is that
+improvements made in alternate versions of the program, if they
+receive widespread use, become available for other developers to
+incorporate.  Many developers of free software are heartened and
+encouraged by the resulting cooperation.  However, in the case of
+software used on network servers, this result may fail to come about.
+The GNU General Public License permits making a modified version and
+letting the public access it on a server without ever releasing its
+source code to the public.
+
+  The GNU Affero General Public License is designed specifically to
+ensure that, in such cases, the modified source code becomes available
+to the community.  It requires the operator of a network server to
+provide the source code of the modified version running there to the
+users of that server.  Therefore, public use of a modified version, on
+a publicly accessible server, gives the public access to the source
+code of the modified version.
+
+  An older license, called the Affero General Public License and
+published by Affero, was designed to accomplish similar goals.  This is
+a different license, not a version of the Affero GPL, but Affero has
+released a new version of the Affero GPL which permits relicensing under
+this license.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU Affero General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Remote Network Interaction; Use with the GNU General Public License.
+
+  Notwithstanding any other provision of this License, if you modify the
+Program, your modified version must prominently offer all users
+interacting with it remotely through a computer network (if your version
+supports such interaction) an opportunity to receive the Corresponding
+Source of your version by providing access to the Corresponding Source
+from a network server at no charge, through some standard or customary
+means of facilitating copying of software.  This Corresponding Source
+shall include the Corresponding Source for any work covered by version 3
+of the GNU General Public License that is incorporated pursuant to the
+following paragraph.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the work with which it is combined will remain governed by version
+3 of the GNU General Public License.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU Affero General Public 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.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU Affero General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU Affero General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU Affero General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU Affero General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU Affero General Public License for more details.
+
+    You should have received a copy of the GNU Affero General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If your software can interact with users remotely through a computer
+network, you should also make sure that it provides a way for users to
+get its source.  For example, if your program is a web application, its
+interface could display a "Source" link that leads users to an archive
+of the code.  There are many ways you could offer source, and different
+solutions will be better for different programs; see section 13 for the
+specific requirements.
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU AGPL, see
+<http://www.gnu.org/licenses/>.

+ 200 - 0
assets/css/colors.scss

@@ -0,0 +1,200 @@
+//palette identité Médor -------------
+//bleu gris foncé
+$color-A2: rgba(42, 133, 164, 255);
+//brun foncé
+$color-A3: rgba(177, 69, 66, 255);
+//ajune total
+$color-A4: rgba(255, 254, 53, 255);
+//vert gazon
+$color-A4: rgba(57, 145, 79, 255);
+
+//rouge brun
+$color-B2: rgba(219, 40, 35, 255);
+//jaune clair
+$color-B3: rgba(255, 253, 115, 255);
+//vert clair
+$color-B4: rgba(225, 241, 122, 255);
+//bleu ciel
+$color-C1: rgba(137, 203, 225, 255);
+//rouge
+$color-C2: rgba(249, 49, 52, 255);
+//orange
+$color-C3: rgba(250, 181, 71, 255);
+//beige verdâtre
+$color-C4: rgba(243, 253, 207, 255);
+//bleu gris clair
+$color-D1: rgba(169, 213, 222, 255);
+//orange clair
+$color-D3: rgba(247, 229, 149, 255);
+//beige
+$color-E1: rgba(233, 234, 225, 255);
+//nacre
+$color-E3: rgba(254, 250, 194, 255);
+//rose peteur
+$color-F2: rgba(243, 225, 226, 255);
+
+
+// palette Médor#1 --------------------
+//beige
+$color-beige:#fefac2;
+//bleu-gris - portrait #1
+$color-bleu-gris:#1e60e1;
+//bleu clair turquoise - traduction #1
+$color-bleu-clair: #0AB1AF;
+//fushia - libre de droit #1
+$color-fushia:#FE02FC;
+$color-pomme:#e1f17a;
+// vert - lobbycratie #1
+$color-vert:#3AAB0D;
+// orange brun - entretien #1
+$color-brun:#d38d5f;
+
+// palette Médor#2 spyche-riso--------------------
+//bleu riso
+$color-blue-deep:#1b3c6c;
+$color-blue-kashmir:#547291;
+$color-blue-gris-fonce:#51596c;
+$color-blue-egyptien-intense:#293ea2;
+$color-blue-gris-clair:#5791b9;
+//bleu bug
+$color-blue:#0000ff;
+
+//violet riso
+$color-violet-nuit:#662d4d;
+$color-mures-pasmures:#cd4f94;
+$color-fushia:#c54764;
+$color-magenta:#f93134;
+$color-rose-bebe:#f49d92;
+$color-rose-terrecuite:#de7162;
+
+//rouge orangés riso
+$color-rouge-brun:#5d151f;
+$color-ocre-rouge:#ad2519;
+$color-ocre-brun:#a84229;
+$color-orange:#ea6d1d;
+$color-ocre-rose:#d86630;
+$color-brun:#c0682b;
+
+// jaune riso
+$color-jaune-nuit:#ac8b21;
+$color-gold:#d6b229;
+$color-jaune-pasmur:#d2bf1d;
+$color-jaune-marguerite:#ffe645;
+$color-jaune-souris:#ccbc6c;
+$color-gold-luxor:#9f8741;
+
+// vert riso
+$color-vert-canard:#115748;
+$color-vert-hippie:#578454;
+$color-vert-fougere:#518f3f;
+$color-vert-pomme:#54bb42;
+$color-vert-laurier:#80b38a;
+$color-vert-cuir:#6a8a77;
+
+// autres riso
+$color-irish-coffee:#5f4329;
+$color-maron-pale:#9d7955;
+$color-vieille-rose:#b7705e;
+$color-camel:#cdab85;
+$color-maron-bourbon:#a67242;
+
+$color-vert-finlande:#626d5f;
+$color-gris-militaire:#978e63;
+$color-gris-agave:#cabca2;
+$color-rose-pale:#f3e1e2;
+$color-vert-gris-clair:#96a187;
+
+//couleur été (medor 3)
+$color-ete-jaune:#fffd73;
+$color-ete-soleil:#fffe35;
+$color-ete-rose-pale:#ffcce6;
+$color-ete-rose:#ff99cc;
+$color-ete-vert-pale:#a6ffcc;
+$color-ete-vert:#71f6b7;
+$color-ete-majenta:#ff0961;
+$color-ete-nuit:#004080;
+$color-ete-violet:#7f5aa1;
+$color-ete-sapin:#0c443f;
+
+$color-black: black;
+
+$color-bleu-mons:#8cb2bd;
+
+//couleur automne (medor 4)
+
+$color-vieux-turquoise:#a1d0c0;
+$color-jaune-sale:#e1d521;
+$color-orange-sale:#d85b23;
+$color-vieux-rouge:#a4292b;
+$color-bleu-sexe:#1f37ff;
+$color-jaune-sexe:#eeff2a;
+$color-bleu-ciel-sexe:#71f8d2;
+$color-vert-punch-sexe:#5fff00;
+$color-rose-peche-sexe:#f84d22;
+$color-vieille-peche-sexe:#ba536d;
+$color-rose-biche: #fb2928;
+$color-vert-prairie-loup:#acea9a;
+$color-vert-foret-loup:#b1d0a3;
+$color-jaune-maison-loup:#fed137;
+$color-bleu-archives:#6479a0;
+$color-bleu-lumiere-archives:#537fc3;
+$color-bleu-contour-archives:#62e7ff;
+$color-gris-contour-archives:#b3c8d0;
+$color-vert-billet-100:#30721E;
+$color-orange-seventies:#ff8126;
+$color-orange-seventies-petant:#ff8605;
+$color-vert-sapin-fonce:#243f1c;
+$color-vert-moisi:#71BD9F;
+$color-violet-billet-500: #ab4584;
+
+
+//couleur hiver (medor 5)
+
+$color-rouge-fesses:#FF0000;
+$color-jaune-fesses:#FFFF00;
+$color-ciel-fesses:#00FFFF;
+$color-bleu-fesses:#3400FF;
+$color-rose-fesses:#FF00FF;
+
+$color-jaune-messes:#D19E25;
+$color-bleu-messes:#0F1051;
+$color-rose-messes:#EDACB4;
+$color-rouge-messes:#CA3A49;
+$color-beige-messes:#EFC794;
+$color-vert-messes:#019462;
+
+$color-ocre-lumumba:#640a02;
+$color-jaune-lumumba:#ffbc05;
+$color-orange-lumumba:#ff6046;
+
+$color-beau-vert-neo:#40c893;
+$color-saumon-neo:#fddad0;
+$color-jaune-neo:#febe30;
+$color-vert-parc-neo:#3b8d7a;
+$color-bleu-route-neo:#005681;
+
+$color-jaune-flamand:#FCFD19;
+$color-fushia-flamand:#D60FA0;
+$color-bleu-flamand:#0001FE;
+$color-bleu-vert-flamand:#27C2B4;
+$color-vert-flamand:#71F199;
+
+$color-vert-carda:#04ba79;
+
+$color-vert-bleri:#008e6d;
+$color-rouge-bleri:#b94c49;
+
+$color-vert-robert:#4EBE86;
+
+$color-bleu-couv:#3983e5;
+$color-orange-couv:#c75000;
+$color-vert-couv:#2f7500;
+$color-peau-couv:#d696a7;
+$color-rouge-couv:#b82e00;
+$color-bleu-vert-couv:#03745e;
+$color-bleu-vert-gris-couv:#69a29b;
+
+$color-vert-pomme-couv:#d3c643;
+$color-saumon-couv:#e1a57b;
+
+$color-jaune-couv:#fcc703;

+ 4 - 12
assets/css/debug.scss

@@ -2,21 +2,13 @@
  * DEBUG STYLES
  */
 
-.debug .header {
-    outline: 1px solid pink;
-}
-.debug .body {
-    outline: 1px solid purple;
-}
-.debug .footer {
-    outline: 1px solid pink;
-}
+.debug .header { outline: 1px solid pink; }
+.debug .body { outline: 1px solid purple; }
+.debug .footer { outline: 1px solid pink; }
 
 .debug .region-break {
     border-top: 1px dashed blue;
     box-sizing: border-box;
 }
 
-.debug img {
-    outline: 1px solid blue;
-}
+.debug img { outline: 1px solid blue; }

+ 34 - 16
assets/css/dist/gui.css

@@ -1,9 +1,31 @@
+/**
+ * This file is part of HTML2print.
+ *
+ * HTML2print is free software: you can redistribute it and/or modify it under the
+ * terms of the GNU Affero General Public License as published by the Free
+ * Software Foundation, either version 3 of the License, or (at your option) any
+ * later version.
+ *
+ * HTML2print is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE.  See the GNU Affero General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU Affero General Public License along
+ * with HTML2print.  If not, see <http://www.gnu.org/licenses/>.
+ */
+html,
+body {
+  width: 100%;
+  height: 100%;
+  margin: 0;
+  padding: 0; }
+
 #viewport {
   position: fixed;
-  top: 0;
-  bottom: 25px;
-  left: 0;
-  right: 0; }
+  width: 100%;
+  height: calc(100% - 25px);
+  border: none; }
 
 #toolbar {
   background-color: black;
@@ -17,31 +39,32 @@
   font-size: 11px;
   text-transform: uppercase;
   padding: 3px 0;
+  box-sizing: border-box;
   display: flex;
   display: -webkit-flex;
   align-items: center;
   -webkit-align-items: center; }
 
-label {
+#toolbar > label {
   margin-left: 1.5em;
   margin-right: 3px; }
 
-input {
+#toolbar > input {
   border: 1px solid white;
   background-color: white;
   font-size: 11px;
   vertical-align: -2px; }
 
-input[type=number] {
+#toolbar > input[type=number] {
   width: 50px;
   vertical-align: 0px;
   margin-left: 2px; }
 
-input:hover {
+#toolbar > input:hover {
   cursor: pointer;
   background-color: yellow; }
 
-button {
+#toolbar > button {
   border: 1px solid white;
   background-color: white;
   font-size: 11px;
@@ -49,16 +72,11 @@ button {
   margin-right: 1em;
   height: 19px; }
 
-button:hover {
+#toolbar > button:hover {
   cursor: pointer;
   background-color: yellow; }
 
-.separator {
+#toolbar > .separator {
   content: " ";
   flex-grow: 2;
   -webkit-flex-grow: 2; }
-
-iframe {
-  width: 100%;
-  height: 100%;
-  border: 0; }

+ 6 - 0
assets/css/fonts.scss

@@ -0,0 +1,6 @@
+/**
+ * This file holds the declaration of the fonts used in our layout.
+ */
+
+ @import "/assets/fonts/dejavu/dejavu.css";
+ @import "/assets/fonts/opensans/opensans.css";

+ 169 - 0
assets/css/grid.scss

@@ -0,0 +1,169 @@
+$body-width: $page-width - $page-margin-inside - $page-margin-outside;
+$body-height: $page-height - $page-margin-top - $page-margin-bottom;
+
+$col-width: ($body-width - (($col-number - 1) * $col-gutter)) / $col-number;
+$row-height: ($body-height - (($row-number - 1) * $row-gutter)) / $row-number;
+
+$col-gutter-width: $col-width + $col-gutter;
+$row-gutter-height: $row-height + $row-gutter;
+
+
+/* x classes */
+// .create-x-classes($i:0) when($i < $col-number) {
+//     .x#{i}{
+//        left: ($i * $col-width) + ($i * $col-gutter);
+//     }
+//     .create-x-classes($i + 1);
+// }
+// .create-x-classes();
+@for $i from 0 through $col-number - 1{
+    .x#{$i}{
+       left: ($i * $col-width) + ($i * $col-gutter);
+    }
+}
+
+/* y classes */
+// .create-y-classes($i:0) when($i < $row-number) {
+//     .y#{i}{
+//        top: ($i * $row-height) + ($i * $row-gutter);
+//     }
+//     .create-y-classes($i + 1);
+// }
+// .create-y-classes();
+@for $i from 0 through $row-number - 1 {
+    .y#{$i}{
+       top: ($i * $row-height) + ($i * $row-gutter);
+    }
+}
+
+/* width classes */
+// .create-w-classes($i:1) when($i <= $col-number) {
+//     .w#{i}{
+//        width: ($col-width * $i) + ($col-gutter * ($i - 1));
+//     }
+//     .create-w-classes($i + 1);
+// }
+// .create-w-classes();
+@for $i from 1 through $col-number {
+    .w#{$i}{
+       width: ($col-width * $i) + ($col-gutter * ($i - 1));
+    }
+}
+
+/* height classes */
+// .create-h-classes($i:1) when($i <= $row-number) {
+//     .h#{i}{
+//        height: ($row-height * $i) + ($row-gutter * ($i - 1));
+//     }
+//     .create-h-classes($i + 1);
+// }
+// .create-h-classes();
+@for $i from 1 through $row-number {
+    .h#{$i}{
+       height: ($row-height * $i) + ($row-gutter * ($i - 1));
+    }
+}
+
+
+// .create-grid-classes($prop: left, $class-name: x, $max-size: 100, $i: 0, $offset: 0, $odd: true) when ($offset <= $max-size) {
+//     .#{class-name}#{i} {
+//        #{prop}: $offset;
+//     };
+//
+//     & when ($odd) {
+//         .create-grid-classes($prop, $class-name, $max-size, $i + 1, $offset + $col-width, false)
+//     };
+//
+//     & when not ($odd) {
+//         .create-grid-classes($prop, $class-name, $max-size, $i + 1, $offset + $col-gutter, true)
+//     };
+// }
+@mixin create-grid-classes($prop: left, $class-name: x, $max-size: 100, $i: 0, $offset: 0, $odd: true){
+  $i:0;
+
+  .#{$class-name}#{$i} {
+     #{$prop}: $offset;
+  };
+
+  @while $offset<=$max-size {
+    @if $odd{
+      $offset:$offset+$col-width;
+      $odd:false;
+    }@else{
+      $offset:$offset+$col-gutter;
+      $odd:true;
+    }
+    .#{$class-name}#{$i} {
+       #{$prop}: $offset;
+    };
+    $i: $i+1;
+  }
+}
+
+
+html:not(.facing) .paper:nth-child(odd) .l-1,
+html.facing .paper:nth-child(even) .l-1 { left: -( $page-margin-inside + 14pt); }
+
+html:not(.facing) .paper:nth-child(even) .l-1,
+html.facing .paper:nth-child(odd) .l-1 { left: -( $page-margin-outside + 14pt); }
+
+// .create-grid-classes(left, l, $body-width);
+@include create-grid-classes(left, l, $body-width);
+
+html:not(.facing) .paper:nth-child(odd) .r-1,
+html.facing .paper:nth-child(even) .r-1 { right: -( $page-margin-outside + 14pt); }
+
+html:not(.facing) .paper:nth-child(even) .r-1,
+html.facing .paper:nth-child(odd) .r-1 { right: -( $page-margin-inside + 14pt); }
+
+// .create-grid-classes(right, r, $body-width);
+@include create-grid-classes(right, r, $body-width);
+
+.t-1 { top: -( $page-margin-top + 14pt); }
+// .create-grid-classes(top, t, $body-height);
+@include create-grid-classes(top, t, $body-height);
+
+.b-1 { bottom: -( $page-margin-bottom + 14pt); }
+// .create-grid-classes(bottom, b, $body-height);
+@include create-grid-classes(bottom, b, $body-height);
+
+
+.grid .body {
+    outline: 1px solid $grid-color;
+    background-attachment: local;
+    background-size: 100% $row-gutter-height,
+                     $col-gutter-width 100%,
+                     100% $row-gutter-height,
+                     $col-gutter-width 100%,
+                     100% 12pt;
+    background-position: -1px -1px,
+                         -1px -1px,
+                         -($col-gutter + 0) -($row-gutter + 0),
+                         -($col-gutter + 0) -($row-gutter + 0),
+                         0 -1px;
+    background-image: -webkit-linear-gradient(top, $grid-color 1px, transparent 1px),
+                      -webkit-linear-gradient(left, $grid-color 1px, transparent 1px),
+                      -webkit-linear-gradient(top, $grid-color 1px, transparent 1px),
+                      -webkit-linear-gradient(left, $grid-color 1px, transparent 1px),
+                      -webkit-linear-gradient(top, $baseline-grid-color 1px, transparent 1px);
+    background-image:    -moz-linear-gradient(top, $grid-color 1px, transparent 1px),
+                         -moz-linear-gradient(left, $grid-color 1px, transparent 1px),
+                         -moz-linear-gradient(top, $grid-color 1px, transparent 1px),
+                         -moz-linear-gradient(left, $grid-color 1px, transparent 1px),
+                         -moz-linear-gradient(top, $baseline-grid-color 1px, transparent 1px);
+    background-image:     -ms-linear-gradient(top, $grid-color 1px, transparent 1px),
+                          -ms-linear-gradient(left, $grid-color 1px, transparent 1px),
+                          -ms-linear-gradient(top, $grid-color 1px, transparent 1px),
+                          -ms-linear-gradient(left, $grid-color 1px, transparent 1px),
+                          -ms-linear-gradient(top, $baseline-grid-color 1px, transparent 1px);
+    background-image:      -o-linear-gradient(top, $grid-color 1px, transparent 1px),
+                           -o-linear-gradient(left, $grid-color 1px, transparent 1px),
+                           -o-linear-gradient(top, $grid-color 1px, transparent 1px),
+                           -o-linear-gradient(left, $grid-color 1px, transparent 1px),
+                           -o-linear-gradient(top, $baseline-grid-color 1px, transparent 1px);
+    background-image: linear-gradient(to bottom, $grid-color 1px, transparent 1px),
+                      linear-gradient(to right, $grid-color 1px, transparent 1px),
+                      linear-gradient(to bottom, $grid-color 1px, transparent 1px),
+                      linear-gradient(to right, $grid-color 1px, transparent 1px),
+                      linear-gradient(to bottom, $baseline-grid-color 1px, transparent 1px);
+}

+ 42 - 17
assets/css/gui.scss

@@ -1,9 +1,35 @@
+/**
+ * This file is part of HTML2print.
+ *
+ * HTML2print is free software: you can redistribute it and/or modify it under the
+ * terms of the GNU Affero General Public License as published by the Free
+ * Software Foundation, either version 3 of the License, or (at your option) any
+ * later version.
+ *
+ * HTML2print is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE.  See the GNU Affero General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU Affero General Public License along
+ * with HTML2print.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+html,
+body {
+    width: 100%;
+    height: 100%;
+
+    margin: 0;
+    padding: 0;
+}
+
 #viewport {
     position: fixed;
-    top: 0;
-    bottom: 25px;
-    left: 0;
-    right: 0;
+    width: 100%;
+    height: calc(100% - 25px);
+    border: none;
 }
 
 #toolbar {
@@ -18,34 +44,37 @@
     font-size: 11px;
     text-transform: uppercase;
     padding: 3px 0;
+    box-sizing: border-box;
     display: flex;
     display: -webkit-flex;
     align-items: center;
     -webkit-align-items: center;
 }
 
-label {
+#toolbar > label {
     margin-left: 1.5em;
     margin-right: 3px;
 }
 
-input {
+#toolbar > input {
     border: 1px solid white;
     background-color: white;
     font-size: 11px;
     vertical-align: -2px;
 }
-input[type=number]{
+
+#toolbar > input[type=number]{
     width: 50px;
     vertical-align: 0px;
     margin-left: 2px;
 }
-input:hover {
+
+#toolbar > input:hover {
     cursor: pointer;
     background-color: yellow;
 }
 
-button {
+#toolbar > button {
     border: 1px solid white;
     background-color: white;
     font-size: 11px;
@@ -53,18 +82,14 @@ button {
     margin-right: 1em;
     height: 19px;
 }
-button:hover {
+
+#toolbar > button:hover {
     cursor: pointer;
     background-color: yellow;
 }
-.separator {
+
+#toolbar > .separator {
     content: " ";
     flex-grow: 2;
     -webkit-flex-grow: 2;
 }
-
-iframe {
-    width: 100%;
-    height: 100%;
-    border: 0;
-}

+ 139 - 97
assets/css/html2print.scss

@@ -1,26 +1,49 @@
 /**
- * Computation
+ * This file is part of HTML2print.
+ *
+ * HTML2print is free software: you can redistribute it and/or modify it under the
+ * terms of the GNU Affero General Public License as published by the Free
+ * Software Foundation, either version 3 of the License, or (at your option) any
+ * later version.
+ *
+ * HTML2print is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE.  See the GNU Affero General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU Affero General Public License along
+ * with HTML2print.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 
-/* EXTRA SPACE AROUND THE PAGE: BLEED + CROP */
-// TODO: find a more appropriate name
-$crop: $crop-size + $bleed;
-
-/* GEOMETRY OF THE PAPER SHEET */
-$paper-width: $page-width + ( $crop * 2 );
-$paper-height: $page-height + ( $crop * 2 );
+/**
+ * Computation
+ */
 
-/* SIZE OF SPREAD */
-$spread: $page-width * 2;
 
+/* computes the edge size of the paper, which is the sum of the bleed and the
+ * crop sizes */
+$edge: $crop-size + $bleed;
 
+/* Computes the size of the paper sheet */
+$paper-width: $page-width + ( $edge * 2 );
+$paper-height: $page-height + ( $edge * 2 );
 
 /**
  * DEFINITION OF THE PAPER SHEET
  */
+
+/**
+ * The $page CSS at-rule is used to define some properties of printed
+ * documents. We make it the size of the elements with the .paper class and
+ * remove any margins so they don't add up with margins specifed in elements
+ * with the .page class (or it's children, like .header, .body and .footer)
+ *
+ * We add 2pt to circumvent a rounding number bug in some browsers that make
+ * them include extra pages or shifts.
+ */
 @page {
-    size: $paper-width ($paper-height + 1);
+    size: $paper-width $paper-height + 2pt;
     margin: 0;
 }
 
@@ -32,120 +55,140 @@ $spread: $page-width * 2;
 @media all {
     body {
         margin: 0;
+
+        /* Activate opentype features and kernings */
+        -webkit-font-feature-settings: "liga", "dlig", "clig", "kern";
+        text-rendering: optimizeLegibility;
     }
+
     .paper {
         width: $paper-width;
         height: $paper-height;
         box-sizing: border-box;
 
-        counter-increment: page-counter;
+        /* defines a named counter and increments it every page, so we can use
+         * it to compute the page number */
+        counter-increment: folio;
 
-        // To make sure that one paper sheet is not splitted into different pages in the PDF
+        /* makes sure that pages aren't cut because of pootential unprecise unit
+         * conversion at printing time */
         page-break-inside: avoid;
         page-break-after: always;
+
+        /* clips the content if it goes out of the page, so it doesn't increase
+         * the format */
         overflow: hidden;
 
         /* Crop marks */
-        padding: $crop;
+        padding: $edge;
         position: relative;
-        .crops {
-            width: $paper-width;
-            height: $paper-height;
-            position: absolute;
-            top: 0;
-            left: 0;
-
-            div {
-                border-style: solid;
-                border-color: black;
-                border-width: 0;
-                width: $crop;
-                height: $crop;
-                position: absolute;
-                box-sizing: border-box;
-
-                span {
-                    width: $bleed;
-                    height: $bleed;
-                    background-color: white;
-                    position: absolute;
-                }
-            }
-            .crop-top-left {
-                border-right-width: 1px;
-                border-bottom-width: 1px;
-                top: 0;
-                left: 0;
-
-                span { right: -1px; bottom: -1px;}
-            }
-            .crop-top-right {
-                border-left-width: 1px;
-                border-bottom-width: 1px;
-                top: 0;
-                right: 0;
-
-                span { left: -1px; bottom: -1px;}
-            }
-            .crop-bottom-right {
-                border-left-width: 1px;
-                border-top-width: 1px;
-                right: 0;
-                bottom: 0;
-
-                span { left: -1px; top: -1px;}
-            }
-            .crop-bottom-left {
-                border-right-width: 1px;
-                border-top-width: 1px;
-                left: 0;
-                bottom: 0;
-
-                span { right: -1px; top: -1px;}
-            }
-        }
+
+        /* Crop marks */
+        background-image:
+            -webkit-linear-gradient(90deg, black 0, black 100%),
+            -webkit-linear-gradient(0deg, black 0, black 100%),
+            -webkit-linear-gradient(90deg, black 0, black 100%),
+            -webkit-linear-gradient(0deg, black 0, black 100%),
+            -webkit-linear-gradient(90deg, black 0, black 100%),
+            -webkit-linear-gradient(0deg, black 0, black 100%),
+            -webkit-linear-gradient(90deg, black 0, black 100%),
+            -webkit-linear-gradient(0deg, black 0, black 100%)
+        ;
+        background-size:
+            $crop-size 1px,
+            1px $crop-size,
+            $crop-size 1px,
+            1px $crop-size,
+            $crop-size 1px,
+            1px $crop-size,
+            $crop-size 1px,
+            1px $crop-size
+        ;
+        background-position:
+            left $edge,
+            $edge top,
+            right $edge,
+            ($paper-width - $edge) top,
+            right ($paper-height - $edge),
+            ($paper-width - $edge) bottom,
+            left ($paper-height - $edge),
+            $edge bottom
+        ;
+        background-repeat: no-repeat;
     }
+
     .page {
+        /* defines the page size */
         width: $page-width;
         height: $page-height;
-        position: relative;
-        box-sizing: border-box;
-        overflow: hidden;
+
+        /* allows for absolutely positioned elements as settings the position
+         * property to relative as the side effect of making this elements
+         * top-left corner the reference point */
+        /*position: relative;*/
+        position: absolute; // FIXME: test it for printing issues
     }
 
     // TODO: changer le format du papier en spread pour pouvoir imprimer en planche
-    .spread {
-        .paper {
-            float: left;
-        }
-        .paper:nth-child(odd) {
-            margin-left: -$crop;
-        }
-        .paper:nth-child(even) {
-            margin-right: -$crop;
-        }
-        .paper:first-child {
-            margin-left: $page-width;
-        }
-    }
+    .spread .paper { float: left; }
+
+    .spread:not(.facing) .paper:nth-child(odd) { margin-left: -$edge; }
+    .spread:not(.facing) .paper:nth-child(even) { margin-right: -$edge; }
+    .spread:not(.facing) .paper:first-child { margin-left: $page-width; }
+
+    .spread.facing .paper:nth-child(even) { margin-right: initial; margin-left: -$edge; }
+    .spread.facing .paper:nth-child(odd) { margin-left: initial; margin-right: -$edge; }
+    .spread.facing .paper:first-child { margin-left: 0; }
 }
 
-@media print {
-    html {
+@media screen {
+    /* defines the background color of the workspace */
+    /* UI */
+    body { background-color: #F0F0F0; }
+
+    #pages {
         width: $paper-width;
+        height: $paper-height;
+
+        margin-left: auto;
+        margin-right: auto;
     }
-    body {
-        /* Allows printing of background colors */
+    /* FIXME: allows for printing spreads as well */
+    .spread #pages {
+        width: $paper-width * 2;
+        height: $paper-height * 2;
+    }
+    .paper {
+        /* centrer la page à l'écran */
+        /* UI */
         background-color: white;
-        -webkit-print-color-adjust: exact;
-                print-color-adjust: exact;
-        /* Activate opentype features and kernings */
-        -webkit-font-feature-settings: "liga", "dlig", "clig", "kern";
-        text-rendering: optimizeLegibility;
+        /* UI */
+        margin-top: 1em;
+        /* UI */
+        margin-bottom: 1em;
+    }
+    /* UI */
+    .normal .page { outline: 1px dotted lightsalmon; }
+    /* UI */
+    .preview .paper { background: transparent; }
+    /* UI */
+    .preview .page {
+        outline: 1px solid lightgray;
+        background-color: white;
+        overflow: hidden;
     }
 }
 
 
+@media print {
+    html { width: $paper-width; }
+    body {
+        /* Allows for background colors printing */
+        background-color: transparent;
+        -webkit-print-color-adjust: exact;
+                print-color-adjust: exact;
+    }
+}
 
 /**
  * Helpers
@@ -158,5 +201,4 @@ $spread: $page-width * 2;
      * if you want to put manual page breaks without attaching it to an HTML element
      */
     -webkit-region-break-before: always;
-                   break-before: always;
 }

+ 95 - 91
assets/css/layout.scss

@@ -1,109 +1,113 @@
-.header,
+/**
+ * Macro-structure
+ * ===============
+ */
+
 .body,
-.footer {
-    box-sizing: border-box;
-}
+.body:before,
+.body:after { position: absolute; }
 
-/* __________________________________ HEADER __________________________________ */
-.header {
-    top: 0;
-    margin: 0;
-    padding-top: $page-margin-top;
-    width: 100%;
-    height: $header-height;
-    text-align: left;
+.body:before,
+.body:after { z-index: 500; }
+
+
+/**
+ * Zone de composition principale
+ * ------------------------------
+ */
 
-    &:after {
-        content: $header-text;
-    }
-}
-/* __________________________________ MAIN SECTION __________________________________ */
 .body {
-    height: $page-height - $header-height - $footer-height;
-    width: $page-width;
-    margin-bottom: $page-margin-bottom;
-    padding-top: $page-margin-top + $header-height;
-    padding-bottom: $page-margin-bottom;
-    position: absolute;
+    top: $page-margin-top;
+    bottom: $page-margin-bottom;
 }
 
-.recipient {
-    -webkit-flow-from: myStory;
-            flow-from: myStory;
-}
+/* TODO: move into grid.less? */
+.bloc { position: absolute; z-index: 500; }
+.debug .header,
+.debug .footer,
+.debug .body,
+.debug .bloc { outline: 1px solid purple; }
 
-#my-story {
-    -webkit-flow-into: myStory;
-            flow-into: myStory;
-}
-/* __________________________________ FOOTER __________________________________ */
-.footer {
-    position: absolute;
-    bottom: 0;
-    margin: 0;
-    width: 100%;
-    height: $footer-height;
-    text-align: center;
-
-    &:after {
-        content: $footer-text;
-    }
-}
+/**
+ * Pieds de page
+ * -------------
+ */
 
-/* mirrored pages */
-.paper {
-    &:nth-child(odd) .header {
-        text-align: right;
-    }
-
-    &:nth-child(odd) .header,
-    &:nth-child(odd) .body,
-    &:nth-child(odd) .footer {
-        padding-left: $page-margin-inside;
-        padding-right: $page-margin-outside;
-    }
-    &:nth-child(even) .header,
-    &:nth-child(even) .body,
-    &:nth-child(even) .footer {
-        padding-left: $page-margin-outside;
-        padding-right: $page-margin-inside;
-    }
+.body:before,
+.body:after {
+    display: block;
+    font-family: "Belgika8th", sans-serif;
+    font-size: 6pt;
+    line-height: $line-height;
+    letter-spacing: 0.25pt;
+    z-index: 500;
 }
 
-img {
-    max-width: 100%;
+.body:before,
+.body:after { bottom: $line-height * -3; }
+
+/*gauche*/
+/*.body:before { content: "Type d'article — Titre de l'article"; } */
+/*droite*/
+/*.body:before { content: "Médor n°1 —  printemps 2015"; }*/
+.paper:nth-child(even) .body:before { content: "Médor — hiver 2016-2017"; }
+
+.body:after  { content: counter(folio); z-index: 499;}
+
+
+
+/**
+ * Miroir
+ * -------
+ */
+
+/**
+ * Placement en miroir des éléments en fonction de si ils se trouvent sur une
+ * page paire ou une page impaire, en utilisant le pseudo-sélecteur `nth-child`
+ */
+
+html:not(.facing) .paper:nth-child(odd) .body,
+html.facing .paper:nth-child(even) .body {
+    right: $page-margin-outside;
+    left: $page-margin-inside;
 }
 
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
-    /* Avoids headings to be cut or to be orphans.
-     * But it doesn't seem to work
-     * if the element after has a page-break-inside avoid. It tries its best! */
-    -webkit-region-break-inside: avoid;
-                   break-inside: avoid;
-    -webkit-region-break-after: avoid;
-                   break-after: avoid;
+html:not(.facing) .paper:nth-child(even) .body,
+html.facing .paper:nth-child(odd) .body {
+    left: $page-margin-outside;
+    right: $page-margin-inside;
 }
 
-/* AN EXAMPLE TO AVOID PAGE BREAK INSIDE,
- * HERE NO PARAGRAPH WILL BE CUT,
- * BUT YOU MIGHT WANT TO DEACTIVATE THIS */
-p {
-    /*-webkit-region-break-inside: avoid;*/
-    /*               break-inside: avoid;*/
+html:not(.facing) .paper:nth-child(odd) .body:before,
+html.facing .paper:nth-child(even) .body:before {
+    @extend .x1;
+    @extend .w4;
+}
+html:not(.facing) .paper:nth-child(even) .body:before,
+html.facing .paper:nth-child(odd) .body:before {
+    @extend .x5;
+    @extend .w4;
+}
+html:not(.facing) .paper:nth-child(odd) .body:after,
+html.facing .paper:nth-child(even) .body:after {
+    @extend .x5;
+    @extend .w1;
+    text-align: left;
+}
+html:not(.facing) .paper:nth-child(even) .body:after,
+html.facing .paper:nth-child(odd) .body:after {
+    @extend .x1;
+    @extend .w1;
+    text-align: left;
 }
 
-.story-page, .page-break {
-    /* Apply this class to an element to put it on a new region.
-     * Hint:
-     * You can also use an empty <div class="page-break"></div>
-     * if you want to put manual page breaks without attaching it to an HTML element
-     */
 
-    -webkit-region-break-after:always;
-                   break-after:always;
+#flow-main {
+    -webkit-flow-into: flow-main;
+            flow-into: flow-main;
+}
+
+.flow-main {
+    -webkit-flow-from: flow-main;
+            flow-from: flow-main;
 }

+ 148 - 3
assets/css/main.scss

@@ -1,6 +1,151 @@
-@import "setup.scss";
+/**
+ * This file is part of HTML2print.
+ *
+ * HTML2print is free software: you can redistribute it and/or modify it under the
+ * terms of the GNU Affero General Public License as published by the Free
+ * Software Foundation, either version 3 of the License, or (at your option) any
+ * later version.
+ *
+ * HTML2print is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE.  See the GNU Affero General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU Affero General Public License along
+ * with HTML2print.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+/**
+ * The less CSS is splitted accross different files for a better organisation.
+ *
+ * This is the main less css file that defines custom values and requires all
+ * the the neccessary dependencies.
+ */
+
+
+
+/**
+ * THE CODE BELOW IS REQUIRED TO MAKE HTML2PRINT WORK.
+ */
+
+@function mm2pt($mm){
+  @return $mm*2.8346pt;
+}
+
+/**
+ * Defines and loads the rules that set the geometry of the page and its
+ * representation on screen. This is the core of html2print.
+ *
+ * Customize the variables to your needs.
+ */
+
+/* the geometry of the page */
+$page-width: mm2pt(90);
+$page-height: mm2pt(150);
+
+/* the size of the crop marks based on scribus defaults */
+$crop-size: mm2pt(12);
+
+/* the size of bleed */
+$bleed: mm2pt(5);
+
+/* loads the core file */
+// @import "html2print.scss";
+
+
+/**
+ * THE CODE BELOW IS NOT REQUIRED TO MAKE HTML2PRINT WORK, ALTHOUGH IT PROVES
+ * USEFUL IN MANY SITUATIONS.
+ *
+ * YOU ARE ENCOURAGED TO CUSTOMIZE IT TO YOU NEEDS.
+ */
+
+
+
+/**
+ * Defines and generate helper css rules to absolutly position elements on a
+ * grid.
+ *
+ * Customize the variables to your needs.
+ */
+
+$col-number: 9;
+$col-gutter: mm2pt(3);
+
+//$row-number: 13;
+$row-number: 12;
+$row-gutter: mm2pt(4);
+
+$grid-color: rgba(255, 0, 0, 0.25);
+$baseline-grid-color: rgba(0, 255, 255, 0.15);
+
+/* Loads the rules for using grids */
+// @import "grid.scss";
+
+
+
+/**
+ * Loads the rules to outline the main blocs
+ */
+
+// @import "debug.scss";
+
+
+
+/**
+ * Loads a few less helpers
+ */
+
+// @import "mixins.scss";
+
+
+
+/**
+ * Defines and loads the rules that set the base layout of the document
+ * (header, body, footer)
+ *
+ * Customize the variables to your needs.
+ */
+
+// FIXME: make a case for single page layouts
+$page-margin-inside: mm2pt(13);
+$page-margin-outside: mm2pt(8);
+$page-margin-top: mm2pt(8);
+$page-margin-bottom: mm2pt(22);
+
+// @import "layout.scss";
+
+
+/**
+ * Loads your own styles.
+ *
+ * Customize the file/path to you needs.
+ */
+
+/*@import '/vendors/reset-css/reset.css';*/
+/*@import "../vendors/normalize.css/normalize.css";*/
+/*@import "../vendors/normalize-opentype.css/normalize-opentype.css";*/
+// @import "fonts.scss";
+// @import "colors.scss";
+
+$line-height: mm2pt(4);
+// @import "styles.scss";
+
 @import "html2print.scss";
-@import "layout.scss";
+
+@import "grid.scss";
+
 @import "debug.scss";
-@import "ui.scss";
+
+@import "mixins.scss";
+
+@import "layout.scss";
+
+@import "fonts.scss";
+
+@import "colors.scss";
+
 @import "styles.scss";
+
+/*@import "export.scss";*/

+ 27 - 0
assets/css/mixins.scss

@@ -0,0 +1,27 @@
+/**
+ * Mixins
+ * ======
+ */
+
+@mixin flow-into($flow) {
+    -webkit-flow-into: $flow;
+            flow-into: $flow;
+}
+
+@mixin flow-from($flow) {
+    -webkit-flow-from: $flow;
+            flow-from: $flow;
+}
+
+// Pas de footer sur ces pages
+@mixin no-footer($page) {
+    .paper:nth-of-type(#{$page}) .body:before,
+    .paper:nth-of-type(#{$page}) .body:after { content: "" }
+}
+
+@mixin trans($rotate, $skew, $originY, $originX) {
+  -webkit-transform: skewY($skew) rotate($rotate);
+          transform: skewY($skew) rotate($rotate);
+  -webkit-transform-origin: $originY $originX;
+          transform-origin: $originY $originX;
+}

+ 0 - 25
assets/css/setup.scss

@@ -1,25 +0,0 @@
-/* the geometry of the page */
-$page-width: 210mm;
-$page-height: 297mm;
-
-/* the size of the crop marks*/
-$crop-size: 7mm;
-
-/* the size of bleed */
-$bleed: 5mm;
-
-// page layouts
-// 1 for single page
-// 2 for double page
-$page-layout:1;
-
-$page-margin-inside: 20mm;
-$page-margin-outside: 10mm;
-$page-margin-top: 10mm;
-$page-margin-bottom: 15mm;
-
-// Header & footer variables
-$header-height: 10mm;
-$header-text: "TDSM";
-$footer-height: 10mm;
-$footer-text: counter(page-counter);

+ 4 - 0
assets/css/styles.scss

@@ -1 +1,5 @@
 // your styles here
+
+#stories{
+  font-family: "DejaVuSansMono" sans-serif;
+}

+ 0 - 151
assets/css/ui.scss

@@ -1,151 +0,0 @@
-/**
- * User Interface
- */
-@media screen {
-    // C A N V A S
-    body {
-        background-color: #F0F0F0;
-    }
-    #pages {
-        width: $paper-width;
-        height: $paper-height;
-
-        margin-left: auto;
-        margin-right: auto;
-    }
-    .spread #pages {
-        width: $paper-width * 2;
-        height: $paper-height * 2;
-    }
-    .paper {
-        /* centrer la page à l'écran */
-        background-color: white;
-        margin-top: 1em;
-        margin-bottom: 1em;
-    }
-    .normal .paper {
-        //outline: 1px solid lightgray;
-    }
-    .normal .page {
-        outline: 1px dashed lightsalmon;
-    }
-    .preview .paper {
-        background: none;
-    }
-    .preview .page {
-        outline: 1px solid lightgray;
-        background-color: white;
-    }
-    .preview .crops { visibility: hidden; }
-
-
-
-    // M E N U
-    .button {
-        z-index: 1000;
-        background-color: black;
-        font-family: sans-serif;
-        text-transform: uppercase;
-        font-size: 9pt !important;
-        letter-spacing: 1pt;
-        color: white;
-        margin: 0;
-        padding: 5pt 7pt;
-        cursor: pointer;
-        border: 0;
-    }
-    .button:hover {
-        background-color: white;
-        color: black;
-        outline: 1pt solid black;
-    }
-    .button-active {
-        background-color: white;
-        color: black;
-        outline: 1pt solid black;
-    }
-    .lo-res {
-        outline: 10px solid red;
-    }
-    #interface {
-        font-family: sans-serif;
-        text-transform: uppercase;
-        font-size: 10pt !important;
-        line-height: 14pt;
-        letter-spacing: 1pt;
-        position: fixed;
-        bottom: 10pt;
-        right: 10pt;
-    }
-
-    #interface a {
-        text-decoration: none;
-        position: static;
-    }
-
-
-    div.dropdown {
-        display: inline-block;
-        position: relative;
-
-        ul {
-            padding: 0.5em 0;
-            display: none;
-            background-color: black;
-            position: absolute;
-            right: 0;
-            bottom: 2em;
-            height: 200pt;
-            width: 80pt;
-            overflow: auto;
-
-            a {
-                padding: 0 1em;
-                color: white;
-                display: block;
-
-                &:hover {
-                    background-color: white;
-                    color: black;
-                }
-            }
-        }
-        button {
-            width: 80pt;
-        }
-    }
-
-    #toc {
-        display: inline-block;
-    }
-    #toc-pages {
-        padding: 0.5em 0;
-        display: none;
-        background-color: black;
-        position: absolute;
-        right: 0;
-        bottom: 2em;
-        height: 200pt;
-        width: 80pt;
-        overflow: auto;
-    }
-    #toc-pages a {
-        padding: 0 1em;
-        color: white;
-    }
-    #toc-pages a:hover {
-        background-color: white;
-        color: black;
-    }
-    #toc-pages button {
-        width: 80pt;
-    }
-}
-
-
-
-@media print {
-    #interface {
-        display: none;
-    }
-}

+ 171 - 144
assets/js/gui.js

@@ -1,150 +1,177 @@
-$(function() {
-
-
-  $('select[name="document"]').change(function(e){
-    console.log("document selection",this);
-    $('iframe').attr('src', this.value);
-  });
-
-  $.getJSON('build/toc.json', function(data){
-    console.log(data);
-    for (book in data) {
-      console.log(data[book]);
-      // var $optgroup = $('<optgroup>').attr('label', data[book].label);
-      // for (page of data[book].pages) {
-      //   // console.log(page);
-      //   $optgroup.append($('<option>').attr('value', data[book].label+'/'+page.file).text(data[book].label+' : '+page.label));
-      // }
-      $('[name="document"]').append(
-        $('<option>')
-          .attr('value', data[book].file).text(data[book].label)
-      );
-    }
-
-    console.log(window.location.hash);
-
-    var hash = parseInt(window.location.hash.replace('#',''));
-    console.log(hash);
-
-    var value = $('[name="document"] option:eq('+hash+')').attr('value');
-    console.log('value', value);
-
-    $('[name="document"]').val(value).change();
-  })
-
-  // activate toolbar events when iframe is loaded
-  $('iframe').load(function() {
-    initIframe();
-  });
-
-  function initIframe(){
-    var doc = $("iframe").contents().find("html");
-    console.log('initIframe :: doc', doc);
-
-    $('input[name="preview"]').change(function(e) {
-      console.log('Preview',e);
-      if($(this).is(":checked")) {
-          doc.addClass("preview");
-          doc.removeClass("normal");
-      } else {
-          doc.removeClass("preview");
-          doc.addClass("normal");
-      }
-    });
-    if(preview){
-      $('input[name="preview"]').prop('checked', true).change();
-    }
-
-    $('[name="debug"]').change(function() {
-      if($(this).is(":checked")) {
-          doc.addClass("debug");
-      } else {
-          doc.removeClass("debug");
-      }
-    });
-
-    $('[name="spread"]').change(function() {
-        if($(this).is(":checked")) {
-            doc.addClass("spread");
-        } else {
-            doc.removeClass("spread");
+/**
+ * This file is part of HTML2print.
+ *
+ * HTML2print is free software: you can redistribute it and/or modify it under the
+ * terms of the GNU Affero General Public License as published by the Free
+ * Software Foundation, either version 3 of the License, or (at your option) any
+ * later version.
+ *
+ * HTML2print is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE.  See the GNU Affero General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU Affero General Public License along
+ * with HTML2print.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+(function($, undefined) {
+    'use strict';
+
+    var $viewport = $("#viewport")[0]
+        , $previewBtn = $('[name="preview"]')[0]
+        , $gridBtn = $('[name="grid"]')[0]
+        , $debugBtn = $('[name="debug"]')[0]
+        , $spreadBtn = $('[name="spread"]')[0]
+        , $zoomBtn = $('[name="zoom"]')[0]
+        , $pageBtn = $('[name="page"]')[0]
+        , $displayBtn = $('[name="display"]')[0]
+        , $reloadBtn = $('#reload')[0]
+        , $printBtn = $('#print')[0]
+        , $designmodeBtn = $('[name="designmode"]')[0]
+    ;
+
+    $viewport.addEventListener("load", function(event) {
+        var $contentDoc = this.contentDocument;
+        var $doc = this.contentDocument.getElementsByTagName('html')[0]
+
+        function switchPreview(event) {
+            if(this.checked) {
+                $doc.classList.add("preview");
+                $doc.classList.remove("normal");
+            } else {
+                $doc.classList.add("normal");
+                $doc.classList.remove("preview");
+            }
         }
-    });
-    if(spread){
-      $('[name="spread"]').prop('checked', true).change();
-    }
-
-    //$('[name="hi-res"]').change(function() {
-        //if($(this).is(":checked")) {
-            //doc.addClass("export");
-        //} else {
-            //doc.removeClass("export");
-        //}
-    //});
-
-    $('[name="zoom"]').change(function() {
-        zoomLevel = $(this).val() / 100;
-
-        doc.find("#pages").css({
-            "-webkit-transform": "scale(" + zoomLevel + ")",
-            "-webkit-transform-origin": "0 0"
-        });
-    });
-
-    //$(".paper").each(function(){
-        //page = $(this).attr("id");
-        //$("#toc-pages").append("<li><a href='#" + page + "'>" + page.replace("-", " ") + "</a></li>")
-    //});
-
-    $('[name="page"]').change(function() {
-        var pageNumber = $(this).val() - 1;
-
-        var target = doc.find('.paper:eq(' + pageNumber + ')');
-        var offsetTop = target.offset().top;
-
-        doc.find('body').scrollTop(offsetTop);
-    });
-
-    $("#print").on('click', function() {
-        $("iframe").get(0).contentWindow.print();
-    });
-  }
-
-    //// __________________________________ HIGH RESOLUTION __________________________________ //
-    //$("#hi-res").click(function(e){
-        //e.preventDefault();
-        //$(this).toggleClass("button-active");
-        //$("html").toggleClass("export");
-        //$("img").each(function(){
-            //var hires = $(this).attr("data-alt-src");
-            //var lores = $(this).attr("src");
-            //$(this).attr("data-alt-src", lores)
-            //$(this).attr("src", hires)
-        //});
-        //console.log("Wait for hi-res images to load");
-        //window.setTimeout(function(){
-            //console.log("Check image resolution");
-            //// Redlights images too small for printing
-            //$("img").each(function(){
-                //if (Math.ceil(this.naturalHeight / $(this).height()) < 3) {
-                    //console.log($(this).attr("src") + ": " + Math.floor(this.naturalHeight / $(this).height()) );
-                    //if($(this).parent().hasClass("moveable")) {
-                        //$(this).parent().toggleClass("lo-res");
-                    //} else {
-                        //$(this).toggleClass("lo-res");
-                    //}
+
+        function switchGrid(event) {
+            console.log(event);
+            if (this.checked) {
+                $doc.classList.add("grid");
+            } else {
+                $doc.classList.remove("grid");
+            }
+        }
+
+        function switchDebug(event) {
+            if(this.checked) {
+                $doc.classList.add("debug");
+            } else {
+                $doc.classList.remove("debug");
+            }
+        }
+
+        function switchSpread(event) {
+            if(this.checked) {
+                $doc.classList.add("spread");
+            } else {
+                $doc.classList.remove("spread");
+            }
+        }
+
+        function switchDesignMode(event) {
+            if(this.checked) {
+                $contentDoc.designMode = "on";
+            } else {
+                $contentDoc.designMode = "off";
+            }
+        }
+
+        function setZoom(event) {
+            var zoomLevel = this.value / 100;
+            var elt = $doc.querySelector("#pages");
+
+            elt.style.webkitTransform = "scale(" + zoomLevel + ")";
+            elt.style.webkitTransformOrigin = "0 0";
+        }
+
+        function changePage(event) {
+            var pageNumber = this.value - 1;
+
+            var target = $doc.querySelectorAll('.paper')[pageNumber];
+            var offsetTop = target.offsetTop;
+
+            $doc.querySelector('body').scrollTop = offsetTop;
+        }
+
+        function changeDisplay(event) {
+            var htmlelt = $doc.querySelectorAll('html')[0];
+            var elts = $doc.querySelectorAll('img');
+
+            $doc.classList.remove("low");
+            $doc.classList.remove("bw");
+            $doc.classList.remove("color");
+            $doc.classList.add(this.value);
+
+            //for (var i = 0, l = elts.length; i < l; i ++) {
+                //var elt = elts[i];
+
+                //if (!elt.dataset.low) { elt.dataset.low = elt.src; }
+
+                //elt.style.visibility = 'visible';
+
+                //if (elt.dataset[this.value]) {
+                    //elt.src = elt.dataset[this.value];
+                //} else {
+                    //elt.src = "";
+                    //elt.style.visibility = 'hidden'
                 //}
-            //});
-        //}, 2000);
-    //});
+            //}
+
+            //console.log("Wait for hi-res images to load");
+            //window.setTimeout(function(){
+                console.log("Check image resolution");
+                // Redlights images too small for printing
+                var images = $doc.getElementsByTagName("img");
+
+                for (var i=0; i < images.length; i++) {
+                    if (Math.ceil(images[i].naturalHeight / images[i].height) < 1.8) {
+                        console.log(images[i] + ": " + Math.floor(images[i].naturalHeight / images[i].height) );
+                        images[i].className += "lo-res";
+                    }
+                    if (Math.ceil(images[i].naturalHeight / images[i].height) < 4.5) {
+                        console.log(images[i] + ": " + Math.floor(images[i].naturalHeight / images[i].height) );
+                        images[i].className += "too-big";
+                    }
+                }
+                console.log("done checking resolution");
+            //}, 2000);
+
+            //
+            // TODO: change le titre ici
+            //console.log(document.title)
+            //console.log($contentDoc.title)
+            //
+        }
 
+        function reload(event) {
+           $viewport.contentWindow.location.reload();
+        }
 
-});
+        function print(event) {
+            $viewport.contentWindow.print();
+        }
 
-//(function($) {
-    //'use strict';
 
-    //$('iframe')[0].addEventListener("load", function(event) {
-        //console.log(arguments);
-    //}, false);
-//})(document.querySelectorAll.bind(document));
+        $previewBtn.addEventListener("change", switchPreview);
+        $gridBtn.addEventListener("change", switchGrid);
+        $debugBtn.addEventListener("change", switchDebug);
+        $spreadBtn.addEventListener("change", switchSpread);
+        $zoomBtn.addEventListener("change", setZoom);
+        $pageBtn.addEventListener("change", changePage);
+        $reloadBtn.addEventListener("click", reload);
+        $printBtn.addEventListener("click", print);
+        $displayBtn.addEventListener("change", changeDisplay);
+        $designmodeBtn.addEventListener("change", switchDesignMode);
+
+
+        switchPreview.bind($previewBtn)();
+        switchGrid.bind($gridBtn)();
+        switchDebug.bind($debugBtn)();
+        switchSpread.bind($spreadBtn)();
+        setZoom.bind($zoomBtn)();
+        //changePage.bind($pageBtn)();
+    }, false);
+})(document.querySelectorAll.bind(document));

+ 0 - 96
assets/js/html2print.js

@@ -1,16 +1,5 @@
-// html2print needs CSS regions
-// load a ‘polyfill’ if the browser does not support it
-if (window.chrome) {
-    console.log('running chrome, no support for css regions; loading the polyfill');
-    var script = document.createElement('script');
-    script.setAttribute('src', 'assets/lib/css-regions.min.js');
-    document.getElementsByTagName('head')[0].appendChild(script);
-};
 
 $(function() {
-    // ________________________________ INIT __________________________________ //
-    // Creating crop marks
-    $("#master-page").append("<div class='crops'><div class='crop-top-left'><span class='bleed'></span></div><div class='crop-top-right'><span class='bleed'></span></div><div class='crop-bottom-right'><span class='bleed'></span></div><div class='crop-bottom-left'><span class='bleed'></span></div></div>")
 
     // Cloning the master page
     for (i = 1; i < nb_page; i++){
@@ -18,89 +7,4 @@ $(function() {
     }
     $("#master-page").attr("data-width", $(".paper:first-child").width()).hide();
 
-    // Loads main content into <article id="my-story">
-    // if (content) {
-    //     $("#my-story").load(content);
-    // }
-
-
-    // ________________________________ PREVIEW __________________________________ //
-    $("#preview").click(function(e){
-        e.preventDefault();
-        $(this).toggleClass("button-active");
-        $("html").toggleClass("preview normal");
-    });
-
-    // __________________________________ DEBUG __________________________________ //
-    $("#debug").click(function(e){
-        e.preventDefault();
-        $(this).toggleClass("button-active");
-        $("html").toggleClass("debug");
-    });
-
-    // __________________________________ SPREAD __________________________________ //
-    $("#spread").click(function(e){
-        e.preventDefault();
-        $(this).toggleClass("button-active");
-        $("body").toggleClass("spread");
-    });
-
-    // __________________________________ HIGH RESOLUTION __________________________________ //
-    $("#hi-res").click(function(e){
-        e.preventDefault();
-        $(this).toggleClass("button-active");
-        $("html").toggleClass("export");
-        $("img").each(function(){
-            var hires = $(this).attr("data-alt-src");
-            var lores = $(this).attr("src");
-            $(this).attr("data-alt-src", lores)
-            $(this).attr("src", hires)
-        });
-        console.log("Wait for hi-res images to load");
-        window.setTimeout(function(){
-            console.log("Check image resolution");
-            // Redlights images too small for printing
-            $("img").each(function(){
-                if (Math.ceil(this.naturalHeight / $(this).height()) < 3) {
-                    console.log($(this).attr("src") + ": " + Math.floor(this.naturalHeight / $(this).height()) );
-                    if($(this).parent().hasClass("moveable")) {
-                        $(this).parent().toggleClass("lo-res");
-                    } else {
-                        $(this).toggleClass("lo-res");
-                    }
-                }
-            });
-        }, 2000);
-    });
-
-
-    // __________________________________ TOC __________________________________ //
-    $(".paper").each(function(){
-        page = $(this).attr("id");
-        $("#toc-pages").append("<li><a href='#" + page + "'>" + page.replace("-", " ") + "</a></li>")
-    });
-
-    $("#goto").click(function(e){
-        e.preventDefault();
-        $(this).toggleClass("button-active");
-        $("#toc-pages").toggle();
-    });
-
-
-    // __________________________________ ZOOM __________________________________ //
-    $("#zoom").click(function(e){
-        e.preventDefault();
-        $(this).toggleClass("button-active");
-        $("#zoom-list").toggle();
-    });
-    $("#zoom-list a").click(function(e){
-        e.preventDefault();
-        zoom = $(this).attr("title") / 100 ;
-        unzoom = 1 / zoom;
-        $("#pages").css("-webkit-transform", "scale(" + zoom + ")");
-        $("#pages").css("-webkit-transform-origin", "0 0");
-    });
-
-
-
 });

+ 0 - 4
assets/js/setup.js

@@ -1,5 +1 @@
 nb_page = 100;
-// ui options default values
-// TODO: add default values for all gui options
-preview = true;
-spread = true;

+ 1 - 1
bin/build.py

@@ -89,7 +89,7 @@ def generate_html(book, toc):
    # replace title
    # template_dom.html.head.title.contents[0].replaceWith(book_name)
    # get story div
-   story_dom = template_dom.find('div', {"id":"my-story"})
+   story_dom = template_dom.find('div', {"id":"flow-main"})
 
    #
    # loop through pages to convert them to html and add it to main html file

+ 18 - 5
index.html

@@ -8,9 +8,8 @@
 
 </head>
 <body>
-    <div id="viewport">
-        <iframe src="build/stories.html"></iframe>
-    </div>
+    <iframe id="viewport" src="build/stories.html"></iframe>
+
 
     <div id="toolbar">
         <label for="preview">preview</label>
@@ -19,11 +18,21 @@
         <label for="debug">debug</label>
         <input name="debug" value="true" type="checkbox">
 
+        <label for="grid">grid</label>
+        <input name="grid" value="true" type="checkbox">
+
         <label for="spread">spread</label>
         <input name="spread" value="true" type="checkbox">
 
-        <label for="hi-res">hi-res</label>
-        <input name="hi-res" value="true" type="checkbox">
+        <!--<label for="hi-res">hi-res</label>-->
+        <!--<input name="hi-res" value="true" type="checkbox">-->
+
+        <label for="display">display</label>
+        <select name="display">
+            <option value="low" selected>low</option>
+            <option value="bw">black</option>
+            <option value="color">color</option>
+        </select>
 
         <label for="zoom">zoom</label>
         <input name="zoom" value="100" type="number" min="25" max="1600" step="25">
@@ -31,8 +40,12 @@
         <label for="page">page</label>
         <input name="page" value="1" type="number" min="1" max="100" step="1">
 
+        <label for="designmode">design mode</label>
+        <input name="designmode" value="false" type="checkbox">
+
         <div class="separator"></div>
 
+        <button id="reload">reload</button>
         <button id="print">print</button>
     </div>
 

+ 12 - 9
templates/main.tpl.html

@@ -4,24 +4,27 @@
     <meta charset="utf-8">
     <title>Html 2 print</title>
 
-    <link rel="stylesheet" href="/assets/fonts/amiri/amiri.css">
     <link rel="stylesheet" href="/assets/css/dist/main.css">
 
-
   </head>
   <body>
     <!-- PAGES -->
     <div id="pages">
-        <div id="master-page" class="paper">
-            <div class="page">
-                <section class="header"></section>
-                <section class="body recipient"></section>
-                <section class="footer"></section>
-            </div>
+
+      <div id="master-page" class="paper">
+        <div class="page">
+          <div class="body">
+            <div class="bloc x1 y1 w8 b0 flow-main" style="margin-bottom:0pt;"></div>
+            <!-- <div class="bloc x0 w1 flow-fn" style="bottom: 115pt;"></div> -->
+          </div>
         </div>
+      </div>
+
     </div>
+
+
     <div id="stories">
-      <div id="my-story">
+      <div id="flow-main">
 
       </div>
       <!-- // my-story -->