From 2374306a346a48eb02bcedf0ce19694a1b0b7c25 Mon Sep 17 00:00:00 2001 From: Radek Czajka Date: Thu, 5 Dec 2013 12:42:41 +0100 Subject: [PATCH] Initial commit --- .gitignore | 32 + LICENSE | 661 ++++++++++++++++++ NOTICE | 19 + fabfile.py | 11 + requirements-dev.txt | 1 + requirements.txt | 16 + src/chunks/__init__.py | 0 src/chunks/admin.py | 17 + src/chunks/locale/de/LC_MESSAGES/django.mo | Bin 0 -> 850 bytes src/chunks/locale/de/LC_MESSAGES/django.po | 74 ++ src/chunks/locale/en/LC_MESSAGES/django.mo | Bin 0 -> 814 bytes src/chunks/locale/en/LC_MESSAGES/django.po | 53 ++ src/chunks/locale/es/LC_MESSAGES/django.mo | Bin 0 -> 876 bytes src/chunks/locale/es/LC_MESSAGES/django.po | 53 ++ src/chunks/locale/fr/LC_MESSAGES/django.mo | Bin 0 -> 855 bytes src/chunks/locale/fr/LC_MESSAGES/django.po | 53 ++ src/chunks/locale/it/LC_MESSAGES/django.mo | Bin 0 -> 846 bytes src/chunks/locale/it/LC_MESSAGES/django.po | 54 ++ src/chunks/locale/jp/LC_MESSAGES/django.mo | Bin 0 -> 378 bytes src/chunks/locale/jp/LC_MESSAGES/django.po | 54 ++ src/chunks/locale/lt/LC_MESSAGES/django.mo | Bin 0 -> 847 bytes src/chunks/locale/lt/LC_MESSAGES/django.po | 54 ++ src/chunks/locale/pl/LC_MESSAGES/django.mo | Bin 0 -> 1069 bytes src/chunks/locale/pl/LC_MESSAGES/django.po | 58 ++ src/chunks/locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 958 bytes src/chunks/locale/ru/LC_MESSAGES/django.po | 53 ++ src/chunks/locale/uk/LC_MESSAGES/django.mo | Bin 0 -> 906 bytes src/chunks/locale/uk/LC_MESSAGES/django.po | 53 ++ src/chunks/migrations/0001_initial.py | 53 ++ src/chunks/migrations/__init__.py | 0 src/chunks/models.py | 43 ++ src/chunks/templatetags/__init__.py | 0 src/chunks/templatetags/chunks.py | 39 ++ src/copyspeak/__init__.py | 0 src/copyspeak/locale/pl/LC_MESSAGES/django.mo | Bin 0 -> 677 bytes src/copyspeak/locale/pl/LC_MESSAGES/django.po | 28 + src/copyspeak/settings/__init__.py | 18 + src/copyspeak/settings/apps.py | 23 + src/copyspeak/settings/auth.py | 8 + src/copyspeak/settings/basic.py | 37 + src/copyspeak/settings/context.py | 15 + src/copyspeak/settings/contrib.py | 5 + src/copyspeak/settings/custom.py | 0 src/copyspeak/settings/locale.py | 30 + src/copyspeak/settings/logging.py | 28 + src/copyspeak/settings/middleware.py | 23 + src/copyspeak/settings/paths.py | 3 + src/copyspeak/settings/static.py | 39 ++ src/copyspeak/static/css/base.css | 195 ++++++ src/copyspeak/static/css/base.scss | 267 +++++++ src/copyspeak/static/img/bg/chaotic.png | Bin 0 -> 44094 bytes src/copyspeak/static/img/bg/info.png | Bin 0 -> 8493 bytes src/copyspeak/static/img/bg/lawful.png | Bin 0 -> 43099 bytes src/copyspeak/static/img/bg/neutral.png | Bin 0 -> 42372 bytes src/copyspeak/static/img/brackets.png | Bin 0 -> 287 bytes src/copyspeak/static/img/logofnp.png | Bin 0 -> 6904 bytes src/copyspeak/static/img/logofnp_white.png | Bin 0 -> 5004 bytes src/copyspeak/templates/404.html | 14 + src/copyspeak/templates/500.html | 5 + src/copyspeak/templates/base.html | 53 ++ .../templates/flatpages/default.html | 11 + src/copyspeak/urls.py | 37 + src/copyspeak/wsgi.py | 32 + src/manage.py | 10 + src/words/__init__.py | 0 src/words/admin.py | 9 + src/words/migrations/0001_initial.py | 42 ++ src/words/migrations/__init__.py | 0 src/words/models.py | 30 + src/words/templates/words/home.html | 89 +++ src/words/templates/words/word_detail.html | 59 ++ src/words/tests.py | 16 + src/words/views.py | 25 + 73 files changed, 2602 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 NOTICE create mode 100644 fabfile.py create mode 100644 requirements-dev.txt create mode 100644 requirements.txt create mode 100644 src/chunks/__init__.py create mode 100644 src/chunks/admin.py create mode 100644 src/chunks/locale/de/LC_MESSAGES/django.mo create mode 100644 src/chunks/locale/de/LC_MESSAGES/django.po create mode 100644 src/chunks/locale/en/LC_MESSAGES/django.mo create mode 100644 src/chunks/locale/en/LC_MESSAGES/django.po create mode 100644 src/chunks/locale/es/LC_MESSAGES/django.mo create mode 100644 src/chunks/locale/es/LC_MESSAGES/django.po create mode 100644 src/chunks/locale/fr/LC_MESSAGES/django.mo create mode 100644 src/chunks/locale/fr/LC_MESSAGES/django.po create mode 100644 src/chunks/locale/it/LC_MESSAGES/django.mo create mode 100644 src/chunks/locale/it/LC_MESSAGES/django.po create mode 100644 src/chunks/locale/jp/LC_MESSAGES/django.mo create mode 100644 src/chunks/locale/jp/LC_MESSAGES/django.po create mode 100644 src/chunks/locale/lt/LC_MESSAGES/django.mo create mode 100644 src/chunks/locale/lt/LC_MESSAGES/django.po create mode 100644 src/chunks/locale/pl/LC_MESSAGES/django.mo create mode 100644 src/chunks/locale/pl/LC_MESSAGES/django.po create mode 100644 src/chunks/locale/ru/LC_MESSAGES/django.mo create mode 100644 src/chunks/locale/ru/LC_MESSAGES/django.po create mode 100644 src/chunks/locale/uk/LC_MESSAGES/django.mo create mode 100644 src/chunks/locale/uk/LC_MESSAGES/django.po create mode 100644 src/chunks/migrations/0001_initial.py create mode 100644 src/chunks/migrations/__init__.py create mode 100644 src/chunks/models.py create mode 100644 src/chunks/templatetags/__init__.py create mode 100644 src/chunks/templatetags/chunks.py create mode 100644 src/copyspeak/__init__.py create mode 100644 src/copyspeak/locale/pl/LC_MESSAGES/django.mo create mode 100644 src/copyspeak/locale/pl/LC_MESSAGES/django.po create mode 100644 src/copyspeak/settings/__init__.py create mode 100644 src/copyspeak/settings/apps.py create mode 100644 src/copyspeak/settings/auth.py create mode 100644 src/copyspeak/settings/basic.py create mode 100644 src/copyspeak/settings/context.py create mode 100644 src/copyspeak/settings/contrib.py create mode 100644 src/copyspeak/settings/custom.py create mode 100644 src/copyspeak/settings/locale.py create mode 100644 src/copyspeak/settings/logging.py create mode 100644 src/copyspeak/settings/middleware.py create mode 100644 src/copyspeak/settings/paths.py create mode 100644 src/copyspeak/settings/static.py create mode 100644 src/copyspeak/static/css/base.css create mode 100644 src/copyspeak/static/css/base.scss create mode 100644 src/copyspeak/static/img/bg/chaotic.png create mode 100644 src/copyspeak/static/img/bg/info.png create mode 100644 src/copyspeak/static/img/bg/lawful.png create mode 100644 src/copyspeak/static/img/bg/neutral.png create mode 100644 src/copyspeak/static/img/brackets.png create mode 100644 src/copyspeak/static/img/logofnp.png create mode 100644 src/copyspeak/static/img/logofnp_white.png create mode 100644 src/copyspeak/templates/404.html create mode 100644 src/copyspeak/templates/500.html create mode 100644 src/copyspeak/templates/base.html create mode 100644 src/copyspeak/templates/flatpages/default.html create mode 100644 src/copyspeak/urls.py create mode 100644 src/copyspeak/wsgi.py create mode 100755 src/manage.py create mode 100644 src/words/__init__.py create mode 100644 src/words/admin.py create mode 100644 src/words/migrations/0001_initial.py create mode 100644 src/words/migrations/__init__.py create mode 100644 src/words/models.py create mode 100755 src/words/templates/words/home.html create mode 100755 src/words/templates/words/word_detail.html create mode 100644 src/words/tests.py create mode 100644 src/words/views.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..df7fd47 --- /dev/null +++ b/.gitignore @@ -0,0 +1,32 @@ +localsettings.py +*~ +*.orig +*.log + +# Python garbage +*.pyc +.coverage +pip-log.txt +nosetests.xml +/build +/dist +*.egg-info +/var + +# Mac OS X garbage +.DS_Store + +# Windows garbage +thumbs.db + +# Eclipse +.project +.settings +.pydevproject +.tmp_* + +# Tags file +TAGS + +.sass-cache + diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..2def0e8 --- /dev/null +++ b/LICENSE @@ -0,0 +1,661 @@ + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + 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. + + + Copyright (C) + + 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 . + +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 +. \ No newline at end of file diff --git a/NOTICE b/NOTICE new file mode 100644 index 0000000..cd6c957 --- /dev/null +++ b/NOTICE @@ -0,0 +1,19 @@ + + FNP CopySpeak.org + + Copyright © 2012 Fundacja Nowoczesna Polska + + For full list of contributors see AUTHORS file. + + 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 . diff --git a/fabfile.py b/fabfile.py new file mode 100644 index 0000000..c5ff246 --- /dev/null +++ b/fabfile.py @@ -0,0 +1,11 @@ +from fnpdjango.deploy import * + +env.project_name = 'copyspeak' +env.hosts = ['giewont.icm.edu.pl'] +env.user = 'copyspeak' +env.app_path = '/srv/copyspeak.org' +env.services = [ + DebianGunicorn('copyspeak'), +] +env.django_root_path = 'src' + diff --git a/requirements-dev.txt b/requirements-dev.txt new file mode 100644 index 0000000..108a2ec --- /dev/null +++ b/requirements-dev.txt @@ -0,0 +1 @@ +fabric>=1.5,<1.6 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..5319e8b --- /dev/null +++ b/requirements.txt @@ -0,0 +1,16 @@ +-i http://pypi.nowoczesnapolska.org.pl/simple + +Django>=1.6,<1.7 +South>=0.7.4 +django-pipeline>=1.2,<1.3 +django-piwik +#pyScss +#git+git://github.com/Kronuz/pyScss.git@d8f4da23a3c87696a75b3830ed4ab49b75550a93#egg=pyScss +#TODO: pyScss support, for now just install sass + +django_cas>=2.1,<2.2 +fnpdjango<0.2 + +ipython + +django-markupfield diff --git a/src/chunks/__init__.py b/src/chunks/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/chunks/admin.py b/src/chunks/admin.py new file mode 100644 index 0000000..fc45cb7 --- /dev/null +++ b/src/chunks/admin.py @@ -0,0 +1,17 @@ +from django.contrib import admin +from fnpdjango.utils.models.translation import translated_fields +from .models import Chunk, Attachment + + +class ChunkAdmin(admin.ModelAdmin): + list_display = ('key', 'description',) + search_fields = ('key', ) + translated_fields(('content',)) + +admin.site.register(Chunk, ChunkAdmin) + + +class AttachmentAdmin(admin.ModelAdmin): + list_display = ('key',) + search_fields = ('key',) + +admin.site.register(Attachment, AttachmentAdmin) \ No newline at end of file diff --git a/src/chunks/locale/de/LC_MESSAGES/django.mo b/src/chunks/locale/de/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..be5f8ae0ebfa0e0671a8b3482bf4660bec197078 GIT binary patch literal 850 zcma)(-)_?|7{v{Ye*tbl+<|0n-~zlQ>3}H(MAvmwwT)F>n7Bh;>Ly+ir`XQM_8vS0 z@6fwF1vfkcyaC5eN8tjAPdfhjOOB7e#NY2OeIY0hdH@yB9cT)<`T;$HenL;6dzTt- z8@z>n6TAuz!E4|L@H+T${yqh-pf_Luoj@z-zg{M!4SoZi|2|ANz=xpAdkng~XLGi| z+vp?E&AJ65irj>jAhf^Bopa@K5kJdyXIw7n&|1k)wV;ZZf{rUqZ6*!n*777Pg|h#0 zBw4L;T8(K^DeHWH99e7)nfaO(&D=W@CedSi11Pe5))7Xc$J%Uo^fQZY+y6SEk^$(h=R}r7Y;H{D|j8omVF&mv7UO z%VIgH$~WE)S82^t!D7Kn40O?ByW8LGEj}n%_PuWN16X`I!Jt-rwkwl@OVy@H#2f=B-273VgRzAWX1W^7*UX4NNC)5 literal 0 HcmV?d00001 diff --git a/src/chunks/locale/de/LC_MESSAGES/django.po b/src/chunks/locale/de/LC_MESSAGES/django.po new file mode 100644 index 0000000..7fbf84e --- /dev/null +++ b/src/chunks/locale/de/LC_MESSAGES/django.po @@ -0,0 +1,74 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-07-19 11:39+0200\n" +"PO-Revision-Date: 2012-04-11 22:56+0100\n" +"Last-Translator: Kamil \n" +"Language-Team: \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: models.py:11 models.py:33 +msgid "key" +msgstr "Schlüssel" + +#: models.py:11 +msgid "A unique name for this chunk of content" +msgstr "Die einzigartige Bezeichnung für dieses Chunk von Inhalten" + +#: models.py:12 +msgid "description" +msgstr "Beschreibung" + +#: models.py:13 +msgid "content" +msgstr "Inhalt" + +#: models.py:17 +msgid "chunk" +msgstr "Chunk" + +#: models.py:18 +msgid "chunks" +msgstr "Chunks" + +#: models.py:33 +msgid "A unique name for this attachment" +msgstr "Die einzigartige Bezeichnung für diese Beilage" + +#: models.py:38 +msgid "attachment" +msgstr "Beilage" + +#: models.py:38 +msgid "attachments" +msgstr "Beilagen" + +#~ msgid "title" +#~ msgstr "Titel" + +#~ msgid "slug" +#~ msgstr "Slug" + +#~ msgid "file" +#~ msgstr "Datei" + +#~ msgid "author" +#~ msgstr "Autor" + +#~ msgid "slideshare ID" +#~ msgstr "Dia-ID" + +#~ msgid "HTML" +#~ msgstr "HTML" + +#~ msgid "document" +#~ msgstr "Dokument" diff --git a/src/chunks/locale/en/LC_MESSAGES/django.mo b/src/chunks/locale/en/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a81e430a792d5e7e9792e8865732ce3983d3abd7 GIT binary patch literal 814 zcma)3(QeZ)6g4my3qnXB@r01~gaq<%x*?5hAWG?`igc?=Ht~kM)J?s$cCa1jK7@bZ zBlrS7f^PuckvMLKf{-e4m2*$7eeUs1{O$J2CxVE8d%zU9348%Ud{!s1bWv6^>;lq0!(lV;w6+@M5oomkDk0xW)J;i(53_ zOtzjr;xXqCvZ4H-g84r>zJ->AKdE)8aGqsWXg3w!*o4mKbGnQ4JW7QwDp5$5Nij=k z+CJDn3M1~O>5Hk_Ft%tk7_Hyycbo5tH+a;kzn^92CFb;U?jM&^q4W;TC&D`EpB-g; rY`f8gF~-ueuFlO!=^~-qC(1|5E~WYL%M_)Ox%`i7Tj, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-07-19 11:39+0200\n" +"PO-Revision-Date: 2012-03-04 20:05+0100\n" +"Last-Translator: xxx \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: models.py:11 models.py:33 +msgid "key" +msgstr "key" + +#: models.py:11 +msgid "A unique name for this chunk of content" +msgstr "A unique name for this piece of content" + +#: models.py:12 +msgid "description" +msgstr "description" + +#: models.py:13 +msgid "content" +msgstr "content" + +#: models.py:17 +msgid "chunk" +msgstr "piece" + +#: models.py:18 +msgid "chunks" +msgstr "pieces" + +#: models.py:33 +msgid "A unique name for this attachment" +msgstr "A unique name for this attachment" + +#: models.py:38 +msgid "attachment" +msgstr "attachment" + +#: models.py:38 +msgid "attachments" +msgstr "attachments" diff --git a/src/chunks/locale/es/LC_MESSAGES/django.mo b/src/chunks/locale/es/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..83f03fb4dcd119d11aa9963b3ee86a9e3ff93c63 GIT binary patch literal 876 zcmaKq&u-H|5XKFZe+Gnr8{#mWkcu|g4ib?YP(yI5K+;sft>9E`*BfV3d)Mr40(}sk zgd2iW--9zpcmrk=w*e$r>GN;L{$@Pu@weM+A3aK>{<-9UXox%C5eAN3RU0Cnfw z(z}7YhVd5iB65VhgnWa%j6A5H=g12f8)Sldk6Oq0>v_)$k>8Owk$2H_3%QQGf@~wN zB9od!LN%3yRLDG`LSZS~mVSrjo z*`(ys{>#B8GkFAR3`|Mue7~ivw#HldmRAgFZ^jMNqOw9s?}#6JyIM^-v!s`ieXb4O zj$yacebw1cU_TkX?hSYR5wDcCWMFcUk>|7AkW|Is?+#Pa)ttIoB*n+Sb2hq~kr^b?0Q)vonm5!k!C54x&s-R7!pi|s! z<|P$HgQ@bF-={L4(VUZ%(=vvBXJ>oQ_1*6GHw)2FI$wFP-$8GXtPUAA0>8WbC?q|u zuzAZr*hf`Ch1>u(q1tf!bT8c^t(DL9Hs+cnlBrC{Jcibxu)dcRAXRy&Ih=f!f+?t| zrofHmKsB3)xdNI^XVR+wS$Vu<^5fuj`3GnmNedJ;@ReO-Y&hKI1?wI Kq{j+6=iV>iY36eP literal 0 HcmV?d00001 diff --git a/src/chunks/locale/es/LC_MESSAGES/django.po b/src/chunks/locale/es/LC_MESSAGES/django.po new file mode 100644 index 0000000..4130ea1 --- /dev/null +++ b/src/chunks/locale/es/LC_MESSAGES/django.po @@ -0,0 +1,53 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-07-19 11:39+0200\n" +"PO-Revision-Date: 2012-02-18 13:02+0100\n" +"Last-Translator: Anna Jopp \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: models.py:11 models.py:33 +msgid "key" +msgstr "clave" + +#: models.py:11 +msgid "A unique name for this chunk of content" +msgstr "El nombre único para este elemento del contenido" + +#: models.py:12 +msgid "description" +msgstr "descripción" + +#: models.py:13 +msgid "content" +msgstr "contenido" + +#: models.py:17 +msgid "chunk" +msgstr "elemento" + +#: models.py:18 +msgid "chunks" +msgstr "elementos" + +#: models.py:33 +msgid "A unique name for this attachment" +msgstr "El nombre único para este archivo adjunto" + +#: models.py:38 +msgid "attachment" +msgstr "archivo adjunto" + +#: models.py:38 +msgid "attachments" +msgstr "archivos adjuntos" diff --git a/src/chunks/locale/fr/LC_MESSAGES/django.mo b/src/chunks/locale/fr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1ef6af2864abe18a3e54109574511be48f65d526 GIT binary patch literal 855 zcmZ{h-)_?|6vhLLe?=1#T*AfS281S;G~1++jcKLprb4?_C7ZZIUh1aaQajiVV-LbR zz&q@2@4*c(0B^wO{#iE(EPeU;B;Pqc&iVOh;ah-Jfu2G+vhJZ@eX(!?16W{kKkSK)AV}=-a>4_ZRiwwj`;j$5WEC`f&RQjm>z;pz*)fxCf%t*yCe_m&^Czm(N4_aXo)O-)B&#QpwMyAjL<52HKDtN=w{1o(@Ms zx&JxRVX00?4=B~jdEb?k`PK$w-{gs4>g@}g8d*50Rd6ECg09iWB6Y0QXNSUAypE|` zZ@jPXHtDe0`_S6otMo*njbj~~$v%5qW|k#7rb>4|VGSd=uf?{x6EQ_$En?v^t3^~> zj#pkUg|#q*k@dtE>5E_UMJ$St60b%RUz=OU62q0vxzi@5X3psySK4vf;3IBio=dyB zby`%5e6!N#Dl2&=SR(i+rgnXA_rSNk(Qa?$vZ_rs_n_TQtJ9p{u~rQ$jmbY@$ytHk zo%rfr6*-q`ozfvUR=76@$qrka`+REyVOUe8x-V50)7p`AmEb^;(xcft3tbvYg>!-m xdGS3JbgU&N^=}&u4A1, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-07-19 11:39+0200\n" +"PO-Revision-Date: 2012-02-22 20:52+0100\n" +"Last-Translator: Ela Janota \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: models.py:11 models.py:33 +msgid "key" +msgstr "clé" + +#: models.py:11 +msgid "A unique name for this chunk of content" +msgstr "Un nom unique pour ce fragment du contenu" + +#: models.py:12 +msgid "description" +msgstr "description" + +#: models.py:13 +msgid "content" +msgstr "contenu" + +#: models.py:17 +msgid "chunk" +msgstr "fragment" + +#: models.py:18 +msgid "chunks" +msgstr "fragments" + +#: models.py:33 +msgid "A unique name for this attachment" +msgstr "Un nom unique pour cette pièce jointe" + +#: models.py:38 +msgid "attachment" +msgstr "pièce jointe" + +#: models.py:38 +msgid "attachments" +msgstr "pièces jointes" diff --git a/src/chunks/locale/it/LC_MESSAGES/django.mo b/src/chunks/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a07410f3e807f92ead7d558a25bcc518601eee1b GIT binary patch literal 846 zcmaix-;NS76vjtg|BW#*dS&9p!5iI}t_%sf4q`+ELWEs{vm5VBcPK;Mp~bedvc89J z<0JSCK7!FV@GC>Wm>5sypd7jheT97dgeuT4=mB)+Lg{UQ zH;{M1%itKi0=@&Ug74S+8F&e~1rz8KR6+jjV#y!iHRQKo^1KWBI`=_eXBWH_}+SQXDRit2Iw>7!~? zt-{F0;!OJDfB9+=MNi^-t@I7Jbu2Ml*_=CVVp=Yj;ee~G;F(~F;PaRUt%Kf?Z|?bE z@G_Ts+GH;_9yB%V4?EkNM0?e+UEZ7}=L>Y`#L_)pv|!BlU%2%E-{nqi54hU&h#@ruL#;R$, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-07-19 11:39+0200\n" +"PO-Revision-Date: 2012-02-21 16:52+0100\n" +"Last-Translator: xxx\n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +#: models.py:11 models.py:33 +msgid "key" +msgstr "Chiave" + +#: models.py:11 +msgid "A unique name for this chunk of content" +msgstr "un nome unico per questo allegato" + +#: models.py:12 +msgid "description" +msgstr "descrizione" + +#: models.py:13 +msgid "content" +msgstr "contenuto" + +#: models.py:17 +msgid "chunk" +msgstr "blocco" + +#: models.py:18 +msgid "chunks" +msgstr "blocchi" + +#: models.py:33 +msgid "A unique name for this attachment" +msgstr "Un nome unico per questo allegato" + +#: models.py:38 +msgid "attachment" +msgstr "allegato" + +#: models.py:38 +msgid "attachments" +msgstr "allegati" diff --git a/src/chunks/locale/jp/LC_MESSAGES/django.mo b/src/chunks/locale/jp/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ad2faa7ae531da84be2bb0022dc78d2241d88ab8 GIT binary patch literal 378 zcmYL^K~KUk7=|%=+R?Lz9=zd)9mI$g4V4vKTsJZXiQX#IIfL!e6{A1Izvpl9TVmu* zp7hY?Yv1qZ_~^TXIY3U3Q{)giL)r|HFRvWn6l?@b@kzk$`FmYOW9D+!B%}AeyeV_xN7bF}odfBBRr6@wK zKdSceKkrfS9ApL&C-)hXarY@pMUbe*L*bNZw#r+_$aI+`B;`_&k&rx2#ypC0u~^)q zYRa7|H56LCGm`Lhwrnepl4QKCde)VD2dm0hiv50Jj|LNKyf*mVSB<^B{`BYdR#oPj htY4LDw7*#vQyA{Ow$_VwAk5lsDpN8te6D=Z`2|k7W;_4@ literal 0 HcmV?d00001 diff --git a/src/chunks/locale/jp/LC_MESSAGES/django.po b/src/chunks/locale/jp/LC_MESSAGES/django.po new file mode 100644 index 0000000..dcc303c --- /dev/null +++ b/src/chunks/locale/jp/LC_MESSAGES/django.po @@ -0,0 +1,54 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-07-19 11:39+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: models.py:11 models.py:33 +msgid "key" +msgstr "" + +#: models.py:11 +msgid "A unique name for this chunk of content" +msgstr "" + +#: models.py:12 +msgid "description" +msgstr "" + +#: models.py:13 +msgid "content" +msgstr "" + +#: models.py:17 +msgid "chunk" +msgstr "" + +#: models.py:18 +msgid "chunks" +msgstr "" + +#: models.py:33 +msgid "A unique name for this attachment" +msgstr "" + +#: models.py:38 +msgid "attachment" +msgstr "" + +#: models.py:38 +msgid "attachments" +msgstr "" diff --git a/src/chunks/locale/lt/LC_MESSAGES/django.mo b/src/chunks/locale/lt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6131fd5170b25ea597424b3d556ea126b60f1a5c GIT binary patch literal 847 zcmZ{f&2G~`6on0xKO;6Eb|8iYVu2>u4MoMJh!D~ek+e}rs_v>=d*V!!%!HY7ArHa> z^gY;i$t&;%Nbm-niK7H6G1Bqp>wE6?nICu7z6LlUbRQZ+x1n#4KfjZnXsvmQzx|wMq(Cpj6M;mnyG&&tE=` z;wXZVcg3mn%P;t%n8h!WxLW#JWF7ArQg%#En}pSra1^#kK&uIAT#{qf!lnzLFyv7nYr$NzJB4iVUDr v%9Natz0h}skqW+?j%oalZ$1fsNg2!?s7uOVJ~^`iO%0u&&HQRZBM1BeAJf_l literal 0 HcmV?d00001 diff --git a/src/chunks/locale/lt/LC_MESSAGES/django.po b/src/chunks/locale/lt/LC_MESSAGES/django.po new file mode 100644 index 0000000..a78804a --- /dev/null +++ b/src/chunks/locale/lt/LC_MESSAGES/django.po @@ -0,0 +1,54 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-07-19 11:39+0200\n" +"PO-Revision-Date: 2012-03-01 16:13+0100\n" +"Last-Translator: Aneta\n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.3\n" + +#: models.py:11 models.py:33 +msgid "key" +msgstr "raktas" + +#: models.py:11 +msgid "A unique name for this chunk of content" +msgstr "Unikalus šio turinio gabalo pavadnimas" + +#: models.py:12 +msgid "description" +msgstr "aprašymas" + +#: models.py:13 +msgid "content" +msgstr "turinys" + +#: models.py:17 +msgid "chunk" +msgstr "gabalas" + +#: models.py:18 +msgid "chunks" +msgstr "gabalai" + +#: models.py:33 +msgid "A unique name for this attachment" +msgstr "Unikalus šio priedo pavadnimas" + +#: models.py:38 +msgid "attachment" +msgstr "priedas" + +#: models.py:38 +msgid "attachments" +msgstr "priedai" diff --git a/src/chunks/locale/pl/LC_MESSAGES/django.mo b/src/chunks/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2cc484021a55f748c04eb1c1315f9c291facd505 GIT binary patch literal 1069 zcma))J#P~+7{?8iw*V4lU}7*8Qjw4^cYQ(SNTY@js*1FYLV}Q(9`2mPxvPEH4rwx0 zLa;J)Dj$FeiGdBaWAOIG3x>4R_wv;?B8o zdIEBBN(UFi#Umx!lj3EMQwckqwv?u}BMb#=A?oaKX-`r_ot{jnYSBnZ>vT=SX#r?Q z^VaHI$J#8+=k2bsgOqzpxASww2H&+J<%K*HsToKMyB;}~=xA!lIQry|i)n_Kn@Eey z3MEOx2c)J|mq(Uu#Ox{82Dd|6E0rIY)+_XBrT%1Ndn;GxnbMYRnzo49gI?RPh6-t} zw%uT5&B4WD55e+~F8IMB3j(%qmj+9r@89tQ-$x;<^H;(J|F#O z>k#vVmWR+yfEF~w3O#)<8gHyg)mPDw8wr_8O#<$Qyeuu|svz4vXmi%!uoKd1X=}ad z`YBYaYpHOuVs3L|vvSmN;Q6`oV2PAmn`-bwC?#SDTGTY~@Jj3T<)C zDl$^BknNDJybw0`>~9M^W=%78#9b^&F|9C+1?qdt-XaRux#W7%YEAK2SQ?;bDMy-8 zB#=tL7d7kyjZ?sa+KLWgw0HPA8anrhq6GRV!yB`jj}9V1nxij+E;Y$$4`M0)|ABer hSia+PK_)qPGMyv>-F?tjjSddq5S0l-lC&2M$seglB|iWF literal 0 HcmV?d00001 diff --git a/src/chunks/locale/pl/LC_MESSAGES/django.po b/src/chunks/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 0000000..4e0416a --- /dev/null +++ b/src/chunks/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,58 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-11-26 14:00+0100\n" +"PO-Revision-Date: 2013-11-26 14:01+0100\n" +"Last-Translator: Radek Czajka \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.3\n" +"X-Generator: Poedit 1.5.4\n" + +#: models.py:13 models.py:39 +msgid "key" +msgstr "klucz" + +#: models.py:13 +msgid "A unique name for this chunk of content" +msgstr "Unikalna nazwa dla tego kawałka treści" + +#: models.py:14 +msgid "description" +msgstr "opis" + +#: models.py:18 +msgid "chunk" +msgstr "kawałek" + +#: models.py:19 +msgid "chunks" +msgstr "kawałki" + +#: models.py:33 +msgid "content" +msgstr "zawartość" + +#: models.py:34 +msgid "Use Textile syntax." +msgstr "Użyj składni Textile." + +#: models.py:39 +msgid "A unique name for this attachment" +msgstr "Unikalna nazwa dla tego załącznika" + +#: models.py:44 +msgid "attachment" +msgstr "załącznik" + +#: models.py:44 +msgid "attachments" +msgstr "załączniki" diff --git a/src/chunks/locale/ru/LC_MESSAGES/django.mo b/src/chunks/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e1d650c7fc5026f4aa713af3cfd96bb9fedd4459 GIT binary patch literal 958 zcmb7<&2G~`6om&Ue?~~Cuw*f;SfD9(+C^~-A`NL3k+e~8B6etSCXPvB2YUjk#DXFu z7W`zz6TpIHB$^7fA$^7M3-AJL;0-v_LQBcBDTCj^OJEu% z%?fw{Y=E=ivq`@<>3;;zpg#Z+Mb1Jq5X#?6&!Lx|1Mvrb{XRV>Nz+c?Kkf(`@Rp#p zFru>V$COLS-Fiy|@?Q?O-U%8stWh@%r1t%BWcnME1K;?IV&bie*p2+Q^uvHO#3m_5 z;UnQnmaDRgh+?#DT1;o|rq{Bxk}ciKZLAw5(GDZY3bE%`*-FQYnG@R7C~i0`6A7-f z*c~o~O;e_oV&*)vQq-Ea7j9fLEz^XNmBbTYhad8p3pACoEpzP4^H?$`;z8WxGK_56 z?RM!hKDUfK54;Zd1aky$*)*SCUn}bom-G4CO@A(oyr~DH6>^2_^gY&`X=KLlXU=9D zb4t;b*V|3*2TRng^C%YbX4zR~i&LK-qb4Gj4cxHm2cAtAANtZD>Vx{KzNlT*S9{4D z{EyUtqA^T*RBfZzqsiOk1=^q0h^qbMIX3rD?x=x2ne_fMB6*33KGKFd0LgutY$0!3 t4Y09;tx4*UtJHw}_5Q<&, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-07-19 11:39+0200\n" +"PO-Revision-Date: 2012-03-04 22:10+0100\n" +"Last-Translator: xxx \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: models.py:11 models.py:33 +msgid "key" +msgstr "ключ" + +#: models.py:11 +msgid "A unique name for this chunk of content" +msgstr "Уникальное имя для этого фрагмента содержания" + +#: models.py:12 +msgid "description" +msgstr "описание" + +#: models.py:13 +msgid "content" +msgstr "содержание" + +#: models.py:17 +msgid "chunk" +msgstr "фрагмент" + +#: models.py:18 +msgid "chunks" +msgstr "фрагменты" + +#: models.py:33 +msgid "A unique name for this attachment" +msgstr "Уникальное имя для этого приложения" + +#: models.py:38 +msgid "attachment" +msgstr "приложение" + +#: models.py:38 +msgid "attachments" +msgstr "приложения" diff --git a/src/chunks/locale/uk/LC_MESSAGES/django.mo b/src/chunks/locale/uk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7c5388e7ca96d40ddfc17d0678946c3afb01ffb8 GIT binary patch literal 906 zcma)%&2G~`6om&Ue@3u?EsJ5r0!^{gN-b`w8bVq{q)imuiWO*ZCXQ)h2YUkPG9b|n zf(?WRV8b#3B%-tpuP}ZAwrt@IIMYP9MXJO|XFlJVbFa_*xIFcqU>VR=r~zGs_8`4} zLD!()&~@m_iLrM9ynuQIJPlUBGvEX8Ecj@0?}4XK$Dj#4hn7%(I!Q8}BG4-l~Y*$ZttM49J$)Cgmu6B3#J| zRkkUj7{@j(XLI+mt9iPauiP(`){Tm2g^^@yvFBIWowgS8_o)wPklN@O++joxM9@~Je$rx_N778N41~y)KK-+Zt_~~t3K76 z`ldeX&#yRrOOsc)8mTX8q)$drKY5{s$;Z|9V;8Lh{9{1zlf9&;5A>vT j@JJ00mqRrmM>_jQ%K=FT5v2RB21%FTNxR9LWQY6#=g2nU literal 0 HcmV?d00001 diff --git a/src/chunks/locale/uk/LC_MESSAGES/django.po b/src/chunks/locale/uk/LC_MESSAGES/django.po new file mode 100644 index 0000000..edb9b06 --- /dev/null +++ b/src/chunks/locale/uk/LC_MESSAGES/django.po @@ -0,0 +1,53 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-07-19 11:39+0200\n" +"PO-Revision-Date: 2012-03-04 17:29+0100\n" +"Last-Translator: xxx \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: models.py:11 models.py:33 +msgid "key" +msgstr "ключ" + +#: models.py:11 +msgid "A unique name for this chunk of content" +msgstr "Унікальна назва для цієї частини змісту" + +#: models.py:12 +msgid "description" +msgstr "опис" + +#: models.py:13 +msgid "content" +msgstr "зміст" + +#: models.py:17 +msgid "chunk" +msgstr "частина" + +#: models.py:18 +msgid "chunks" +msgstr "частини" + +#: models.py:33 +msgid "A unique name for this attachment" +msgstr "Унікальна назва для цього додатку" + +#: models.py:38 +msgid "attachment" +msgstr "додаток" + +#: models.py:38 +msgid "attachments" +msgstr "додатки" diff --git a/src/chunks/migrations/0001_initial.py b/src/chunks/migrations/0001_initial.py new file mode 100644 index 0000000..f7d859f --- /dev/null +++ b/src/chunks/migrations/0001_initial.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding model 'Chunk' + db.create_table(u'chunks_chunk', ( + ('key', self.gf('django.db.models.fields.CharField')(max_length=255, primary_key=True)), + ('description', self.gf('django.db.models.fields.CharField')(max_length=255, blank=True)), + ('content', self.gf('markupfield.fields.MarkupField')(rendered_field=True, blank=True)), + ('content_markup_type', self.gf('django.db.models.fields.CharField')(default='textile', max_length=30, blank=True)), + ('_content_rendered', self.gf('django.db.models.fields.TextField')()), + )) + db.send_create_signal(u'chunks', ['Chunk']) + + # Adding model 'Attachment' + db.create_table(u'chunks_attachment', ( + ('key', self.gf('django.db.models.fields.CharField')(max_length=255, primary_key=True)), + ('attachment', self.gf('django.db.models.fields.files.FileField')(max_length=100)), + )) + db.send_create_signal(u'chunks', ['Attachment']) + + + def backwards(self, orm): + # Deleting model 'Chunk' + db.delete_table(u'chunks_chunk') + + # Deleting model 'Attachment' + db.delete_table(u'chunks_attachment') + + + models = { + u'chunks.attachment': { + 'Meta': {'ordering': "('key',)", 'object_name': 'Attachment'}, + 'attachment': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}), + 'key': ('django.db.models.fields.CharField', [], {'max_length': '255', 'primary_key': 'True'}) + }, + u'chunks.chunk': { + 'Meta': {'ordering': "('key',)", 'object_name': 'Chunk'}, + '_content_rendered': ('django.db.models.fields.TextField', [], {}), + 'content': ('markupfield.fields.MarkupField', [], {'rendered_field': 'True', 'blank': 'True'}), + 'content_markup_type': ('django.db.models.fields.CharField', [], {'default': "'textile'", 'max_length': '30', 'blank': 'True'}), + 'description': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'key': ('django.db.models.fields.CharField', [], {'max_length': '255', 'primary_key': 'True'}) + } + } + + complete_apps = ['chunks'] \ No newline at end of file diff --git a/src/chunks/migrations/__init__.py b/src/chunks/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/chunks/models.py b/src/chunks/models.py new file mode 100644 index 0000000..a3188fd --- /dev/null +++ b/src/chunks/models.py @@ -0,0 +1,43 @@ +from django.core.cache import cache +from django.db import models +from django.utils.translation import ugettext_lazy as _ +from markupfield.fields import MarkupField + + +class Chunk(models.Model): + """ + A Chunk is a piece of content associated with a unique key that can be inserted into + any template with the use of a special template tag. + """ + key = models.CharField(_('key'), help_text=_('A unique name for this chunk of content'), primary_key=True, max_length=255) + description = models.CharField(_('description'), blank=True, max_length=255) + content = MarkupField(_('content'), blank=True, markup_type='textile', + help_text=_('Use Textile syntax.')) + + class Meta: + ordering = ('key',) + verbose_name = _('chunk') + verbose_name_plural = _('chunks') + + def __unicode__(self): + return self.key + + def cache_key(self): + return 'chunk_' + self.key + + def save(self, *args, **kwargs): + ret = super(Chunk, self).save(*args, **kwargs) + cache.delete(self.cache_key()) + return ret + + +class Attachment(models.Model): + key = models.CharField(_('key'), help_text=_('A unique name for this attachment'), primary_key=True, max_length=255) + attachment = models.FileField(upload_to='chunks/attachment') + + class Meta: + ordering = ('key',) + verbose_name, verbose_name_plural = _('attachment'), _('attachments') + + def __unicode__(self): + return self.key diff --git a/src/chunks/templatetags/__init__.py b/src/chunks/templatetags/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/chunks/templatetags/chunks.py b/src/chunks/templatetags/chunks.py new file mode 100644 index 0000000..fa57c22 --- /dev/null +++ b/src/chunks/templatetags/chunks.py @@ -0,0 +1,39 @@ +from django import template +from django.db import models +from django.core.cache import cache +from ..models import Chunk, Attachment + + +register = template.Library() + + +@register.simple_tag +def chunk(key, cache_time=0, raw=False): + try: + cache_key = 'chunk_' + key + c = cache.get(cache_key) + if c is None: + c = Chunk.objects.get(key=key) + cache.set(cache_key, c, int(cache_time)) + content = c.content + except Chunk.DoesNotExist: + n = Chunk(key=key) + n.save() + return '' + print content + return content.raw if raw else content + + +@register.simple_tag +def attachment(key, cache_time=0): + try: + cache_key = 'attachment_' + key + c = cache.get(cache_key) + if c is None: + c = Attachment.objects.get(key=key) + cache.set(cache_key, c, int(cache_time)) + return c.attachment.url + except Attachment.DoesNotExist: + return '' + + diff --git a/src/copyspeak/__init__.py b/src/copyspeak/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/copyspeak/locale/pl/LC_MESSAGES/django.mo b/src/copyspeak/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..bd158445e84edb351902de677fca2161ccd473a2 GIT binary patch literal 677 zcmZvY&u-H|5XQ~Fiw_)-xN(>Zr4_8}4Xp@nTpB`JML4aMy1l{>Z(YakuC==+t<@9n zz>%lm2@v8ncoxQvP&hEsPdod~H>;ib{pkKzhvFXbgxDb-5E0SFN8%xY#0#P#e%x`K zZ*)E;KHPPjZ8~c@N$#S3i>|APF%uw_g$q^7)JZM{RIPNQYFG*_pj4{JWkz)ksS-v$ zvmmZ>V?8IiqlabBD=e&LV|Gxgp7oo8%(I`!cR_Op{ zn2G{M4K50VfyPu(W$Dd3;XtaTnm05JR;n}wdP-+rRqneH%B-dZuteZh0MYRH=&YS* z5Jd-N-rCk4nqxYdj@QF;&v!>kS|RB#Hx&(K#kJk8O3dXR%r8+JVZ*cJkoDKT_RkkW zv$343lr|ke|5I+=xU4mn>`>_|6M(F`s|jE3!72?mWf*dJ13pmsDfjoo9&BuM=^)%` z)6G`)2i%9-+fHvi{ucFc>gjE{&Z*T(BFJ1oBe4_>tr`ESh5h+miv^gbF3>b9mogTA KeZhb1p7RHnDZn8B literal 0 HcmV?d00001 diff --git a/src/copyspeak/locale/pl/LC_MESSAGES/django.po b/src/copyspeak/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 0000000..ffd5d7b --- /dev/null +++ b/src/copyspeak/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,28 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-11-19 15:57+0100\n" +"PO-Revision-Date: 2012-11-19 15:58+0100\n" +"Last-Translator: Radek Czajka \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" + +#: templates/404.html:4 +#: templates/404.html.py:8 +msgid "Page not found" +msgstr "Strona nie znaleziona" + +#: templates/404.html:11 +msgid "The page you were looking for doesn't exist." +msgstr "Strona której szukasz nie została znaleziona." + diff --git a/src/copyspeak/settings/__init__.py b/src/copyspeak/settings/__init__.py new file mode 100644 index 0000000..8ce1902 --- /dev/null +++ b/src/copyspeak/settings/__init__.py @@ -0,0 +1,18 @@ +from .paths import * +from .basic import * +from .apps import * +from .locale import * +from .auth import * +from .context import * +from .middleware import * +from .static import * +from .logging import * +from .contrib import * +from .custom import * + + +# Load localsettings, if they exist +try: + from ..localsettings import * +except ImportError: + pass diff --git a/src/copyspeak/settings/apps.py b/src/copyspeak/settings/apps.py new file mode 100644 index 0000000..3dae8b6 --- /dev/null +++ b/src/copyspeak/settings/apps.py @@ -0,0 +1,23 @@ +INSTALLED_APPS = ( + 'copyspeak', + 'words', + 'chunks', + + 'fnpdjango', + 'south', + 'pipeline', + # Disable, if not using Piwik. + 'piwik', + # Disable, if not using CAS. + 'django_cas', + + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.sites', + 'django.contrib.messages', + 'django.contrib.staticfiles', + 'django.contrib.admin', + 'django.contrib.admindocs', + 'django.contrib.flatpages', +) diff --git a/src/copyspeak/settings/auth.py b/src/copyspeak/settings/auth.py new file mode 100644 index 0000000..91b062e --- /dev/null +++ b/src/copyspeak/settings/auth.py @@ -0,0 +1,8 @@ +from . import INSTALLED_APPS + + +if 'django_cas' in INSTALLED_APPS: + AUTHENTICATION_BACKENDS = ( + 'django.contrib.auth.backends.ModelBackend', + 'django_cas.backends.CASBackend', + ) diff --git a/src/copyspeak/settings/basic.py b/src/copyspeak/settings/basic.py new file mode 100644 index 0000000..2f4f155 --- /dev/null +++ b/src/copyspeak/settings/basic.py @@ -0,0 +1,37 @@ +from os import path +from . import PROJECT_DIR + + +DEBUG = False +TEMPLATE_DEBUG = DEBUG + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'. + 'NAME': path.join(PROJECT_DIR, 'var', 'dev.db'), # Or path to database file if using sqlite3. + 'USER': '', # Not used with sqlite3. + 'PASSWORD': '', # Not used with sqlite3. + 'HOST': '', # Set to empty string for localhost. Not used with sqlite3. + 'PORT': '', # Set to empty string for default. Not used with sqlite3. + } +} + +SITE_ID = 1 + +# List of callables that know how to import templates from various sources. +TEMPLATE_LOADERS = ( + 'django.template.loaders.filesystem.Loader', + 'django.template.loaders.app_directories.Loader', +# 'django.template.loaders.eggs.Loader', +) + +ROOT_URLCONF = 'copyspeak.urls' + +# Python dotted path to the WSGI application used by Django's runserver. +WSGI_APPLICATION = 'copyspeak.wsgi.application' + +TEMPLATE_DIRS = ( + # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates". + # Always use forward slashes, even on Windows. + # Don't forget to use absolute paths, not relative paths. +) diff --git a/src/copyspeak/settings/context.py b/src/copyspeak/settings/context.py new file mode 100644 index 0000000..ec4ef61 --- /dev/null +++ b/src/copyspeak/settings/context.py @@ -0,0 +1,15 @@ +from . import INSTALLED_APPS + + +TEMPLATE_CONTEXT_PROCESSORS = tuple(x for x in ( + "django.contrib.auth.context_processors.auth" + if "django.contrib.auth" in INSTALLED_APPS else None, + "django.core.context_processors.debug", + "django.core.context_processors.i18n", + "django.core.context_processors.media", + "django.core.context_processors.static", + "django.core.context_processors.tz", + "django.contrib.messages.context_processors.messages" + if 'django.contrib.messages' in INSTALLED_APPS else None, + "django.core.context_processors.request" +) if x is not None) diff --git a/src/copyspeak/settings/contrib.py b/src/copyspeak/settings/contrib.py new file mode 100644 index 0000000..946997b --- /dev/null +++ b/src/copyspeak/settings/contrib.py @@ -0,0 +1,5 @@ +CAS_SERVER_URL = 'http://logowanie.nowoczesnapolska.org.pl/cas/' +CAS_VERSION = '1' + +PIWIK_SITE_ID = 0 +PIWIK_URL = '' diff --git a/src/copyspeak/settings/custom.py b/src/copyspeak/settings/custom.py new file mode 100644 index 0000000..e69de29 diff --git a/src/copyspeak/settings/locale.py b/src/copyspeak/settings/locale.py new file mode 100644 index 0000000..d77583d --- /dev/null +++ b/src/copyspeak/settings/locale.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- + +LANGUAGES = ( + ('pl', u'polski'), +# ('en', u'English'), +) + +# Local time zone for this installation. Choices can be found here: +# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name +# although not all choices may be available on all operating systems. +# On Unix systems, a value of None will cause Django to use the same +# timezone as the operating system. +# If running in a Windows environment this must be set to the same as your +# system time zone. +TIME_ZONE = None + +# Language code for this installation. All choices can be found here: +# http://www.i18nguy.com/unicode/language-identifiers.html +LANGUAGE_CODE = 'pl' + +# If you set this to False, Django will make some optimizations so as not +# to load the internationalization machinery. +USE_I18N = True + +# If you set this to False, Django will not format dates, numbers and +# calendars according to the current locale. +USE_L10N = True + +# If you set this to False, Django will not use timezone-aware datetimes. +USE_TZ = True diff --git a/src/copyspeak/settings/logging.py b/src/copyspeak/settings/logging.py new file mode 100644 index 0000000..3d91c9c --- /dev/null +++ b/src/copyspeak/settings/logging.py @@ -0,0 +1,28 @@ +# A sample logging configuration. The only tangible logging +# performed by this configuration is to send an email to +# the site admins on every HTTP 500 error when DEBUG=False. +# See http://docs.djangoproject.com/en/dev/topics/logging for +# more details on how to customize your logging configuration. +LOGGING = { + 'version': 1, + 'disable_existing_loggers': False, + 'filters': { + 'require_debug_false': { + '()': 'django.utils.log.RequireDebugFalse' + } + }, + 'handlers': { + 'mail_admins': { + 'level': 'ERROR', + 'filters': ['require_debug_false'], + 'class': 'django.utils.log.AdminEmailHandler' + } + }, + 'loggers': { + 'django.request': { + 'handlers': ['mail_admins'], + 'level': 'ERROR', + 'propagate': True, + }, + } +} diff --git a/src/copyspeak/settings/middleware.py b/src/copyspeak/settings/middleware.py new file mode 100644 index 0000000..05f1465 --- /dev/null +++ b/src/copyspeak/settings/middleware.py @@ -0,0 +1,23 @@ +from . import INSTALLED_APPS + + +MIDDLEWARE_CLASSES = tuple(x for x in ( + 'django.contrib.sessions.middleware.SessionMiddleware' + if "django.contrib.sessions" in INSTALLED_APPS else None, + #'django.middleware.locale.LocaleMiddleware', + 'fnpdjango.middleware.URLLocaleMiddleware', + + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware' + if "django.contrib.auth" in INSTALLED_APPS else None, + 'django_cas.middleware.CASMiddleware' + if "django_cas" in INSTALLED_APPS else None, + 'django.contrib.messages.middleware.MessageMiddleware' + if "django.contrib.messages" in INSTALLED_APPS else None, + # Uncomment the next line for simple clickjacking protection: + # 'django.middleware.clickjacking.XFrameOptionsMiddleware', + 'pagination.middleware.PaginationMiddleware' + if "pagination" in INSTALLED_APPS else None, + 'fnpdjango.middleware.SetRemoteAddrFromXRealIP' +) if x is not None) diff --git a/src/copyspeak/settings/paths.py b/src/copyspeak/settings/paths.py new file mode 100644 index 0000000..3b1a69e --- /dev/null +++ b/src/copyspeak/settings/paths.py @@ -0,0 +1,3 @@ +from os import path + +PROJECT_DIR = path.dirname(path.dirname(path.dirname(path.abspath(path.dirname(__file__))))) diff --git a/src/copyspeak/settings/static.py b/src/copyspeak/settings/static.py new file mode 100644 index 0000000..d506058 --- /dev/null +++ b/src/copyspeak/settings/static.py @@ -0,0 +1,39 @@ +from os import path +from paths import PROJECT_DIR + + +MEDIA_ROOT = path.join(PROJECT_DIR, 'var/media/') +MEDIA_URL = '/media/' +STATIC_ROOT = path.join(PROJECT_DIR, 'var/static/') +STATIC_URL = '/static/' + +STATICFILES_FINDERS = ( + 'django.contrib.staticfiles.finders.FileSystemFinder', + 'django.contrib.staticfiles.finders.AppDirectoriesFinder', +# 'django.contrib.staticfiles.finders.DefaultStorageFinder', +) + +STATICFILES_STORAGE = 'pipeline.storage.PipelineCachedStorage' +PIPELINE_CSS_COMPRESSOR = None +PIPELINE_JS_COMPRESSOR = None +PIPELINE_CSS = { + 'base': { + 'source_filenames': ( + 'css/base.scss', + ), + 'output_filename': 'compressed/base.css', + }, +} +PIPELINE_JS = { + 'base': { + 'source_filenames': ( + ), + 'output_filename': 'compressed/base.js', + }, +} + +PIPELINE_COMPILERS = ( + 'pipeline.compilers.sass.SASSCompiler', +) + +PIPELINE_STORAGE = 'pipeline.storage.PipelineFinderStorage' diff --git a/src/copyspeak/static/css/base.css b/src/copyspeak/static/css/base.css new file mode 100644 index 0000000..c88f0cc --- /dev/null +++ b/src/copyspeak/static/css/base.css @@ -0,0 +1,195 @@ +html, body { + margin: 0; + padding: 0; + height: 100%; + background: black; + color: #ccc; + font-family: Lato; } + +header { + font-size: 16px; } + header a { + text-decoration: none; + color: #ddd; + display: block; + padding: .5em; + float: left; } + header a:before { + content: url(/static/img/brackets.png); + margin-right: .5em; + vertical-align: middle; } + header #buy { + padding: 4px 10px 0 10px; + float: right; } + +.fnp-logo { + text-align: right; + margin-top: 8.5em; + text-align: center; } + .fnp-logo img { + height: 4em; } + +h1.main { + margin-left: 1em; + font-size: 5vw; } + @media screen and (min-width: 45em) { + h1.main { + font-size: 2vw; } } + +#intro { + background-color: #222; } + +.desc-container, .right-desc-container { + display: flex; + flex-direction: column; + justify-content: space-around; + position: absolute; + left: 4.75em; + top: 6.75em; + bottom: 6.75em; + right: 4.75em; } + +.right-desc-container { + top: 14em; } + +.card-container, .three-container { + display: block; + line-height: 1.3em; + position: relative; + font-size: 4vw; + clear: both; + width: 100%; } + @media screen and (min-width: 45em) { + .card-container, .three-container { + font-size: 2vw; + width: 50%; + display: inline-block; } } + .card-container .card-dummy, .three-container .card-dummy { + padding-top: 148.39%; } + +.three-container { + font-size: 4vw; } + @media screen and (min-width: 45em) { + .three-container { + font-size: 1.3333vw; + width: 33.33%; + display: inline-block; } } + +.list-card { + font-size: 1.5em; + padding: 1em; + display: flex; + flex-direction: column; + justify-content: space-around; } + .list-card ul { + column-count: 2; + -moz-column-count: 2; + -webkit-column-count: 2; + column-gap: 1.5em; + -moz-column-gap: 1.5em; + -webkit-column-gap: 1.5em; + list-style: none; + padding: 0; + margin: 0; + line-height: 1em; } + .list-card ul li { + margin-bottom: 0.6em; } + +.card, .list-card { + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; } + .card h1, .list-card h1 { + font-size: 1.5em; + margin-top: 1.5em; + width: 14.9em; + text-align: right; + text-transform: uppercase; + line-height: 1.3em; } + .card h1 .next, .list-card h1 .next { + display: block; + margin-right: 2em; } + .card a, .list-card a { + color: #ccc; + text-decoration: none; } + .card a:hover, .list-card a:hover { + text-decoration: underline; } + .card .examples p, .list-card .examples p, .card .usage p, .list-card .usage p, .card .recommendations p, .list-card .recommendations p { + font-size: .85em; + margin: .5em 0; } + .card .examples, .list-card .examples { + text-transform: uppercase; + text-align: center; } + .card .examples p, .list-card .examples p { + font-size: 1em; + line-height: 1.2em; } + .card .usage, .list-card .usage { + hyphens: auto; + -moz-hyphens: auto; } + .card .recommendations, .list-card .recommendations { + hyphens: auto; + -moz-hyphens: auto; } + .card .inside-card, .list-card .inside-card { + margin: 0 5em; } + +.chaotic { + background-image: url(/static/img/bg/chaotic.png); + background-size: 100%; } + +.neutral { + background-image: url(/static/img/bg/neutral.png); + background-size: 100%; + color: #fff; } + .neutral a { + color: #fff; } + +.lawful { + background-image: url(/static/img/bg/lawful.png); + background-size: 100%; } + +.info { + background-image: url(/static/img/bg/info.png); + background-size: 100%; + color: #656263; } + .info a { + color: #656263; } + +.btn { + background: #fac878; + background-image: -webkit-linear-gradient(top, #85db81, #2e8a0f); + background-image: -moz-linear-gradient(top, #85db81, #2e8a0f); + background-image: -ms-linear-gradient(top, #85db81, #2e8a0f); + background-image: -o-linear-gradient(top, #85db81, #2e8a0f); + background-image: linear-gradient(to bottom, #85db81, #2e8a0f); + -webkit-border-radius: 100%; + -moz-border-radius: 100%; + border-radius: 100%; + border: 1em double white; + color: #ffffff; + padding: 2em; + text-decoration: none; + cursor: pointer; + font-size: 3.75vw; } + @media screen and (min-width: 45em) { + .btn { + font-size: 1.25vw; } } + +.btn:hover { + background: #fcba58; + background-image: -webkit-linear-gradient(top, #abe6a9, #3db814); + background-image: -moz-linear-gradient(top, #abe6a9, #3db814); + background-image: -ms-linear-gradient(top, #abe6a9, #3db814); + background-image: -o-linear-gradient(top, #abe6a9, #3db814); + background-image: linear-gradient(to bottom, #abe6a9, #3db814); + text-decoration: none; } + +.flatpage { + background: #ddd; + color: black; + padding: 3em; } + +footer { + margin: 3em 1em; + font-size: .8em; } diff --git a/src/copyspeak/static/css/base.scss b/src/copyspeak/static/css/base.scss new file mode 100644 index 0000000..583c7c1 --- /dev/null +++ b/src/copyspeak/static/css/base.scss @@ -0,0 +1,267 @@ +html, body { + margin: 0; + padding: 0; + height: 100%; + background: black; + color: #ccc; + font-family: Lato; +} + +header { + font-size: 16px; + + a { + text-decoration: none; + color: #ddd; + display: block; + padding: .5em; + float: left; + + &:before { + content: url(/static/img/brackets.png); + margin-right: .5em; + vertical-align:middle; + } + } + + #buy { + padding: 4px 10px 0 10px; + float: right; + } +} + +.fnp-logo { + text-align:right; + margin-top: 8.5em; + text-align: center; + + img { + height: 4em; + } +} + +h1.main { + margin-left: 1em; + font-size: 5vw; + @media screen and (min-width: 45em) { + font-size: 2vw; + } +} + +#intro { + background-color: #222; +} + +.desc-container { + display: flex; + flex-direction: column; + justify-content: space-around; + position: absolute; + left: 4.75em; + top: 6.75em; + bottom: 6.75em; + right: 4.75em; +} + +.right-desc-container { + @extend .desc-container; + top: 14em; +} + +.card-container { + display: block; + line-height: 1.3em; + position: relative; + font-size: 4vw; + clear: both; + + width: 100%; + @media screen and (min-width: 45em) { + font-size: 2vw; + width: 50%; + display: inline-block; + } + + .card-dummy { + padding-top: 148.39%; + } +} + +.three-container { + @extend .card-container; + font-size: 4vw; + + @media screen and (min-width: 45em) { + font-size: 1.3333vw; + width: 33.33%; + display: inline-block; + } +} + + + +.list-card { + @extend .card; + font-size: 1.5em; + padding: 1em; + + display: flex; + flex-direction: column; + justify-content: space-around; + + ul { + column-count: 2; + -moz-column-count: 2; + -webkit-column-count: 2; + column-gap: 1.5em; + -moz-column-gap: 1.5em;; + -webkit-column-gap: 1.5em;; + + list-style: none; + padding: 0; + margin: 0; + line-height: 1em; + + li { + margin-bottom: .6em + } + } +} + + +.card { + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + + h1 { + font-size: 1.5em; + margin-top: 1.5em; + width: 14.9em; + text-align: right; + text-transform: uppercase; + + line-height: 1.3em; + + .next { + display: block; + margin-right: 2em; + } + } + + a { + color: #ccc; + text-decoration: none; + &:hover { + text-decoration: underline; + } + } + + %body { + + p { + font-size: .85em; + margin: .5em 0; + } + } + .examples { + @extend %body; + text-transform: uppercase; + text-align: center; + + p { + font-size: 1em; + line-height: 1.2em; + } + } + .usage { + @extend %body; + hyphens: auto; + -moz-hyphens: auto; + } + .recommendations { + @extend %body; + hyphens: auto; + -moz-hyphens: auto; + } + + .inside-card { + margin: 0 5em; + } +} + +.chaotic { + background-image: url(/static/img/bg/chaotic.png); + background-size: 100%; +} +.neutral { + background-image: url(/static/img/bg/neutral.png); + background-size: 100%; + + color: #fff; + a { color: #fff; } +} +.lawful { + background-image: url(/static/img/bg/lawful.png); + background-size: 100%; +} +.info { + background-image: url(/static/img/bg/info.png); + background-size: 100%; + + color: #656263; + a { color: #656263; } +} + + + +$g11: #85db81; +$g12: darken(#3db814, 10%); +$g21: lighten($g11, 10%); +$g22: lighten($g12, 10%); +.btn { + background: #fac878; + background-image: -webkit-linear-gradient(top, $g11, $g12); + background-image: -moz-linear-gradient(top, $g11, $g12); + background-image: -ms-linear-gradient(top, $g11, $g12); + background-image: -o-linear-gradient(top, $g11, $g12); + background-image: linear-gradient(to bottom, $g11, $g12); + -webkit-border-radius: 100%; + -moz-border-radius: 100%; + border-radius: 100%; + border: 1em double white; + color: #ffffff; + padding: 2em; + text-decoration: none; + cursor: pointer; + + font-size: 3.75vw; + @media screen and (min-width: 45em) { + font-size: 1.25vw; + } +} + +.btn:hover { + background: #fcba58; + background-image: -webkit-linear-gradient(top, $g21, $g22); + background-image: -moz-linear-gradient(top, $g21, $g22); + background-image: -ms-linear-gradient(top, $g21, $g22); + background-image: -o-linear-gradient(top, $g21, $g22); + background-image: linear-gradient(to bottom, $g21, $g22); + text-decoration: none; +} + + +.flatpage { + background: #ddd; + color: black; + padding: 3em; +} + + +footer { + margin: 3em 1em; + font-size: .8em; +} diff --git a/src/copyspeak/static/img/bg/chaotic.png b/src/copyspeak/static/img/bg/chaotic.png new file mode 100644 index 0000000000000000000000000000000000000000..73a8dbd87e06ccdbd00a18b6933096f4b4fc5def GIT binary patch literal 44094 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 CKF_HD literal 0 HcmV?d00001 diff --git a/src/copyspeak/static/img/bg/neutral.png b/src/copyspeak/static/img/bg/neutral.png new file mode 100644 index 0000000000000000000000000000000000000000..b9ce0d3a1b5c5496346bc40e9e93396a7c7cc834 GIT binary patch literal 42372 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 X;Jsbi)6G|N3HWKM>OrejY$N{%!^6~> literal 0 HcmV?d00001 diff --git a/src/copyspeak/static/img/brackets.png b/src/copyspeak/static/img/brackets.png new file mode 100644 index 0000000000000000000000000000000000000000..b148785f3600453be25fafda63811dfad98e6050 GIT binary patch literal 287 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE-VORdudnZL#^7JdUC?>p>G`qdxYSyN;Pt1e= z98X>)IV;jlQEAh+d-uI%7IrCqCS_K*wx8mKDMmKfYLr}+FS)`N4p6{Yql&HM!Y9cQSao`njxgN@xNAG+1OZ literal 0 HcmV?d00001 diff --git a/src/copyspeak/static/img/logofnp.png b/src/copyspeak/static/img/logofnp.png new file mode 100644 index 0000000000000000000000000000000000000000..3d5b6b20b9b7cc2913ea2dd379887de4b73c5d26 GIT binary patch literal 6904 zcmbVxcQl)S{BIDXwaZsy6I=T=YqWMzvnWzT?Nwsco-w*?MeUK=6}xS$h*4_PYN^<> zHZhCRhWmWa@7#0m{r5iSJfA$t$$7^6{eF%2`-w9))TX=6ejNk?(dp`Fnt(uLVBpvs zLItcV&Wanr2iWhvt{DW_!XZwv!1rrDI+lJQkYMe9I~n4avnTK)o4=NYzp1y2e~`Ve zGbku1NZic}>E~$g<1Fs&>zcQx#0~OsQq6U{9rI+6*=DOR6x=4dt0f!R*-tQJ;!mc z;Tj{8CinIJK}I2Ph|tz-1Tr$xY+|@&B4uvx1$b=Tj(`V@XdDs?kK;HH9@W=nGPua_N-IhKN%f8`j4x(9H{K;lYE6ivk z*E`oX{b1!VxKRN$uyh#gPAjhwJZo1Y+c{zt$|>%Rot_vg({I|}*%@pJK~B~txr`Q) z-1&(c!+AG{vZa1)B-OS7x%6CyOL-Bqdio5%<>qd)8EI zEK;q1)JyjB=sY}N=962U?2NgQ(Wo3AkN+1$B9ZR-tq+;Adn(eJh-U>wU2JgC6%-T< zrwcv22a7L0jEIQnP~2<&X)}`@El5h@A%1MV%1XE?feP50Yk7odghRkf4tBkn+?ubN z-l}a9i9{;;fMWy#QAl;_UP?-2lQ~T&-eii>1x`r0M>Q2V>sc39y!qpacoU;S`}af5 zN1q@H2+d58r|v=r=;p7}Qxz)CZ%=K3=f$%q+~kFjS7Re7Q5Bete-ge>a}fIkX}gPK z=dMXUTj?<(n@lN3n^gMiA(1;qB_cDdyy(%h485`z;5HV?9yn9{n3)L;WzjOHRR2bk z$l>;9YrF!@sP&y|Ab|Sd_|uRCo01g^yrBK*_u{R*=2@=jKqgCsSVl7ULuz%#Z~;7P z>fMqpe%fwFIF@;eb(3-dbc6|w!=9#>Z26f=&V3AtmOO2ig2dp{7t2vh+Am{0F!R;g z#Ui=1`SjIPjTG%Nxyfb$^v09~vOWom`ghKy5wZR9QEHl()filzO&oo^wYg}n8$#(BV)FS9c*kLfDa!%cG)d%x)5M<(~{ZVs65O0iY~ zJ$;Ow^1OD&Z!8MBOFF%(g1)7Lul!NxkGb!pQWPps&*1!9% zve$MzGVj|mCk4WU>Ni+Cp|h(Y1uf~=E&8@76&Z`P&HeuAsno~mH)IB%XS2{#;>$+V zJf4lZ;UP%g1(iYiEsi4;=`CBx6R=D zH<&=hBB4Cr>eY-VQb4i&4sdIlA)Rsp9SxXiy04{O6~DK?Z#(tlhd-+t7BNgmI34bZ zkb9>KuMiq-Jb{2mV-*z6`CvvARtR1ts$C%%8iZ=Dyyxle9x4~_u+|dW7WQIzT=vuf zUK0x$xbx>WyBRpXe{bZZd+Vgy@?#-oE%$P;oFEUG@x&Kc8ujJ1Y>Iqp8{R~%OA(kd z2y?NL$()@U@St!pIoZJ#hiHQJI;UedUG)tWd8v7Kvc|-eFL;bX8{N=Sdq6X5)1(#=xD00}@d)BN`gFEkCS^E~V(=m=zTj{cv*p$p)o|3qllsa8kRYN|8luOn9Iw1a}q1ndxLZIX}}>*u^vaLtit z7v4`=_QEKyVVOgh3D%B$yTU;E{g{1|>RhMxJh_CV!3~OTrgq)V|PwhSn;D zE>F|CZ_6!qVg(*g>VTgR1VSY1mFv?|hcSla;BQaFgB&kB&ciRM9KvYKP6X;Spo;l5 zn0@03SGgwvJ^(%=tgWrnkI(<+i^S7|Y^YijzO2NiR8p(^*kBO_OUc^sQL~A&%IzKg z-JNZB?8VM1LTmMK#O5@wCs=&jnYd*T8rCCT9vvhjD=v%#s0wiY79eYm^ z5`%qt-`+WQkw9n^qwNl~o8^TRrrU>$sn{jn^(dv_x#iJM-v#B*d#1oWD%1sVC$|xu z1mpkD8kuQNJ3c)(Hwbi8%fWZ zPZW8%xfejx9Pgm?OunuiMNhZ~JZ!KCKN^P49<2=?*R@}4^TCep7a2d@)CmTPsWwB; zc@c=)6F}<5lL|+`knVc8<|!biVV_ci8T2!6PdAuUwly_1okdT7bY(cu*dCQmOlz98 zq(TxMdo~uy#Fa*Bi(g!;t@gtmKPj#WMaIyUzfg*oXIsnnEc+`^l)Msy0d0$JeYIXOG|{p%ZnLK;~3My|S@S9^I0(6>_q&|5CU#*g!$Mg{*&^|%5)37Qh9W9La}|ap zrdUX2L9OlA#1tgC};nkpdZQk$6;rJg9|5IlzO_U*N@U8O$KR>@=%c|J7^Ply~ zOcJ2~fYtM?$}wISkftG`Hr$){P)h-v4nNVJ9y39FB{YCe#@Z0!hd+P zr_27;N;Tk19_K>3eQv_>9u(H2jRcf^_R)aG>OOAVP%&a;`2FK5TZ&VT;!Aa}&onO@ z21&3ZHmcBjD!vPCA=r+DXFq!*sHTQRulNt#mSFjA^_W7|SN6BmShSp*G??zvIuvM0 zmjynf{LHd}Ff~#q%vk1pxEVD{VJkpinzpd(9C|qVu^Zfy$|3W zn~kOuqh-k|KxAw%p$|;%aQ~+D(Gt(vi7S4ebrS7CPx;i-Q#tKIRJPMzKTCXG<=WnM z`>#kHt|$O*rmxGc*~<1lp|-1;C(|Jb>oI~|nP{#@nfjFffF0paPfwBe6cw+ku-KCT zf)NQR@kVOBX)mc7i!Q$0!5Ch_V79(rZEmwBp!K)Im1(>AHCLNUSL`cYe~QGP2B5X! z`x2}PMj)dX_6pjX3ptq?gKOpYizKrtX0wu{(BM0?-L6`z@`jef!?Qhc%&rX!2`rt` zjzb|J09{P*e{lt&(UK1;&BU-v0P9p^2!us-##O#c$5NF|_qDPt8w_b#>ydw5Z2t16 zJX&KB7J?-*i>dAznaSEGMULQ{U=n(VNL0pDR0xyw${i8Ar&WlGblhNNkazh|f!^dx zjOoN02!QQ`BrVTFSMko;!7Pcb{A-^T6;0)TbfEU-yIQE z0((Axs)@fk5K&(;?H~RDH_+>+BlrtCm3Ix z8`jJVc|`;7NXRpun0fpRkYwr~A*fRs@aP+`dVSFP&QW$=KWZyVc`QLB{wpkv>W*jb z9k($Q=APhIoqT-pl^&iA&{Rod*YR(2b8S#w%l6fRV&VCSi^9UfirJZ&xiwu4a=`e~ z?tE@D6DxrH^(-gl42%gy^j50{YaemE<%I-BPidE6Ppdjp26k0Ie<&8c+}-arJP}9N zH#G31D|IATp@+a78^olSTEAz;v$;#r?SkiVKlfBvK_uJnsDJ!~vh{RK2uT4Ym@GpN1j$UF*1K75;E-rR=zZ`HD zs|F#%7ZN$it>WL3O!wPGP0N2(y0;c88^ag#GI8;>nhl%c-lsli)9@2z1*DyW{NWZ) zL_wJyKz~GJi_h}sI6z_wwnl5rE6v0MvQ#@UypR!R-pGN{y6Z7^eMKlFq55uL&6C@# z`<~w3-ogZ#IRj3&8D|8bUG+?{{qY9(ILsXs<(IQ)3;FJzPC25R2(9CX%7A<~uR06I z7gJb!hOlT^`YlOI^0!>ROYh+1g~Y63LIoPaj&t0Wd2NSXE$Zfm9s(KVA!z%le5=U@ z*FUU72dKtAVwnKn2ZS@?5lb2C+ek{G`xPHjl5^Cq)FowQ z&UX(gd|SdTA|oS*n=y5D-iN!>A8|KiRu$tiQbZ}2GS&Cy86UCK^zVNA0lsf;J~{I6 z;ltYGo>4}n?&3~qVJ^)_Z>gLzcp)yhjOV--d*w2x5Zv8!H|3y&(E`4?wbc^LnbVlC z;$)xeUPwo}f76QbL=NLV_xtSy!|&aU`_mMvMW}1ii%>u2=k-nlX?@RJ_+Tdf9h>Tm ze|0pyd{H<7Mfyj0lUS=_EIM?I$GIRDO?sx57)Er`%-EF|l)-jX-DAs_2*k`iA?NtXLlXU8#8zT$E)S`IF&Bhh056e47cKzmh+MDf#Br;c{**ICWzSq@YuWrF2^J?}1tk~Wnd2*7oy?K`zkqGA{K>c`&7p4_F*kZex41XIfRJnVJce zY1AsZr1NMSrWTmnK7yhAFU27r>@4d#2+%e7j~%h{`2GOc(fQDnxFKC4KtWz#uKmaz zdVE=jv5EeuUxcAak}{%|E>C^e^N~9Xmc#Xy1#q(*Kr@EcA^lPrT$`Vt*O*?S?mq?N_XCTx9qoT3#alfNnS>$?L zzf{k4++>`Q6RN`Ec3@e6meWfNeRdJ;{es14AnL(K`^S_H$RYmpFeL$)d1F)4VkWT@ z>SqMt;}XEf)oY8xR{2Ak3k4q}K}= z**B>wKZ@?DCWY?zRV7Nv)50Ucq!FP&v9zNXQtQb{#GvXG%Fk2F!FGGE#4M5CWS79W zW9r#r(sFkvrQrpcT?r+5L&$!m;YC)|O-M-((EeB&QgSyE=-F^xA5T^&V_YSL$W$8% zp~yk0S2rP!d09Sl>CV|Bot=DzHJm{IH=7Tc(+(#;Kz0t~9Ho$7NzC>m6v=)oG^8Do zdQuZJ$pjq@%o{ItbYgn_8T-tq3a7@8y`y=cjt^F&rw}-<1M6+;fkm%G%k0Xa8wY%L z>eZbok_9a3rWVF?k7ogK-HUU%NJBv^xlp9NyVNb zI|U61P7dlJ;0CnTdiKXLU;D(2{XCWJV>H?5BHl>*QX==r@Trg z;;!!`eWtH9cOew#@JI`!Fq!Ru6MAPv8n9?(Hqhp9&OXy$7F{&pltKEOU+mi{!I9}b ziicF2^#nuDU*&|Eh*#jNXZb~XSdQlN6W2iw$ z&*+PKXGUr&qW)K5is|O(lgx_yN|{p`EraITK7aV7-6-khdw11c;u(hO3G^K6LkOJw z3HdtRQoccf+mF5)@NWh?o+UIJV!9PBvo7$iA~}aJ(;XMY;=*9E*Q%kK5PG&MLGH@# zxBx2rM6l5$O@<|71I--`tam&4rexA<$*a<#LVDVuu`VUmX*>+Z^8r-g;4J@IqZr-i9|=Nw!w1*I#i9FTED|we(}OZP&HSRU?f5)I7`Owe*xQqe4;&UzS1=;kG2L)fL6xf)9xqwQo{bK1S z%$hKrg);;}9WS$@y}o?3T~?RsttM|*)_g|Opxi_3#1dvwQ9a2#c{ zhKuol(TENv{iQwB4~mgmzvGy=6R&JU%2o1A7YySSt19J89*jC3XjT{n`j*E?Pp|BI zmgEj3?M#o=^@kDJJDzd2(utns?2d9!u_35w1EIDQm1`|8+eDC)@v%%zN>-XvzKFh6 zjh$q)dRX{SNc!1l-5%VHGy3s)>7}Q_5v|zM;>0&rx+FPdAk`hA(PzKeVk#beKwO;B zr;VWOK8zpGIV6TmL;c9=We!b>!rr*cPz~sZuqjYlY_C3avfKRNQCe2LSM-R~_xL56 zFPMEzbepSsH%nCYO|;U4P9I^W&h-M2hDov}fCi|!VRE8|&ol;IEjFW z!KKDp)1%}~fz%V1#4XSI{V!1*?*k<48nCBwD>`4M>w-?5xuc}k>jnbXL=8{xb}A2? z40oPId#3rTdHi9#fxhJQaCNA1ZDxyM)L;MioFh(d`dBD!cP&yl9Zz?t+fyxRLHYL& zq_yMuZ)l@F$01Fg^1&}{_Mp^2YoQ1XHc<{?q-|6Z@Y(W$MlL zCPVYe$p=z)BYWr#fx)U%_n`dPK7WsX%1+#0qTo_W#iLzt=0Cn$n{(uS^eX;4KwMSIbbd_P$-r F{{pQ4fBFCb literal 0 HcmV?d00001 diff --git a/src/copyspeak/static/img/logofnp_white.png b/src/copyspeak/static/img/logofnp_white.png new file mode 100644 index 0000000000000000000000000000000000000000..4cd8bee42802979ae891fb431ced8ab12986db6a GIT binary patch literal 5004 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 bApmP?-Hm+&hxl$LX8{% trans "Page not found" %} + +

+ {% trans "The page you were looking for doesn't exist." %} +

+ +{% endblock %} diff --git a/src/copyspeak/templates/500.html b/src/copyspeak/templates/500.html new file mode 100644 index 0000000..be751c1 --- /dev/null +++ b/src/copyspeak/templates/500.html @@ -0,0 +1,5 @@ +

Wystąpił błąd serwera.

+ +

Coś poszło nie tak. Administratorzy zostali już powiadomieni.

+ +

Przepraszamy!

diff --git a/src/copyspeak/templates/base.html b/src/copyspeak/templates/base.html new file mode 100644 index 0000000..5233101 --- /dev/null +++ b/src/copyspeak/templates/base.html @@ -0,0 +1,53 @@ + +{% load i18n static %} +{% load fnp_common fnp_share fnp_lang macros %} +{% load compressed %} +{% load tracking_code from piwik_tags %} +{% load chunk from chunks %} + +{% macro title %} + {% block title %}{% endblock %} +{% endmacro %} +{% macro site_name %}CopySpeak.org{% endmacro %} + + + + + {% block full_title %}{% usemacro title %} | {% usemacro site_name %}{% endblock %} + + {% compressed_css 'base' %} + + + + + + + + + + + +
+ CopySpeak.org: How to talk about copyright? + +
+
+ + + +
+
+ +
+
+ + {% block body %}{% endblock %} + +
+ {% chunk 'footer' %} +
+ + {% compressed_js 'base' %} + {% tracking_code %} + + diff --git a/src/copyspeak/templates/flatpages/default.html b/src/copyspeak/templates/flatpages/default.html new file mode 100644 index 0000000..42f670e --- /dev/null +++ b/src/copyspeak/templates/flatpages/default.html @@ -0,0 +1,11 @@ +{% extends "base.html" %} +{% load textile_pl from fnp_markup %} + +{% block title %}{{ flatpage.title }}{% endblock %} + + +{% block body %} +
+{{ flatpage.content|textile_pl }} +
+{% endblock %} diff --git a/src/copyspeak/urls.py b/src/copyspeak/urls.py new file mode 100644 index 0000000..e9ffc2e --- /dev/null +++ b/src/copyspeak/urls.py @@ -0,0 +1,37 @@ +from django.conf.urls import patterns, include, url +from django.conf import settings +from words.views import HomeView, WordView + +urlpatterns = patterns('', + url(r'^$', HomeView.as_view(), name='home'), +) + +# Admin stuff, if necessary. +if 'django.contrib.admin' in settings.INSTALLED_APPS: + from django.contrib import admin + admin.autodiscover() + + urlpatterns += patterns('', + url(r'^admin/doc/', include('django.contrib.admindocs.urls')), + url(r'^admin/', include(admin.site.urls)), + url(r'^about/', include('django.contrib.flatpages.urls')), + ) + +urlpatterns += patterns('', + url(r'^(?P[^/]+)/$', WordView.as_view(), name='words_word'), +) + +# Auth stuff, if necessary +if 'django_cas' in settings.INSTALLED_APPS: + urlpatterns += patterns('', + (r'^accounts/login/$', 'django_cas.views.login'), + (r'^accounts/logout/$', 'django_cas.views.logout'), + ) + +# Media in DEBUG mode +if settings.DEBUG: + urlpatterns += patterns('', + url(r'^media/(?P.*)$', 'django.views.static.serve', { + 'document_root': settings.MEDIA_ROOT, + }), + ) diff --git a/src/copyspeak/wsgi.py b/src/copyspeak/wsgi.py new file mode 100644 index 0000000..259a384 --- /dev/null +++ b/src/copyspeak/wsgi.py @@ -0,0 +1,32 @@ +""" +WSGI config for copyspeak project. + +This module contains the WSGI application used by Django's development server +and any production WSGI deployments. It should expose a module-level variable +named ``application``. Django's ``runserver`` and ``runfcgi`` commands discover +this application via the ``WSGI_APPLICATION`` setting. + +Usually you will have the standard Django WSGI application here, but it also +might make sense to replace the whole Django WSGI application with a custom one +that later delegates to the Django one. For example, you could introduce WSGI +middleware here, or combine a Django application with an application of another +framework. + +""" +import os + +# We defer to a DJANGO_SETTINGS_MODULE already in the environment. This breaks +# if running multiple sites in the same mod_wsgi process. To fix this, use +# mod_wsgi daemon mode with each site in its own daemon process, or use +# os.environ["DJANGO_SETTINGS_MODULE"] = "copyspeak.settings" +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "copyspeak.settings") + +# This application object is used by any WSGI server configured to use this +# file. This includes Django's development server, if the WSGI_APPLICATION +# setting points here. +from django.core.wsgi import get_wsgi_application +application = get_wsgi_application() + +# Apply WSGI middleware here. +# from helloworld.wsgi import HelloWorldApplication +# application = HelloWorldApplication(application) diff --git a/src/manage.py b/src/manage.py new file mode 100755 index 0000000..6e06489 --- /dev/null +++ b/src/manage.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python +import os +import sys + +if __name__ == "__main__": + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "copyspeak.settings") + + from django.core.management import execute_from_command_line + + execute_from_command_line(sys.argv) diff --git a/src/words/__init__.py b/src/words/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/words/admin.py b/src/words/admin.py new file mode 100644 index 0000000..e386519 --- /dev/null +++ b/src/words/admin.py @@ -0,0 +1,9 @@ +from django.contrib import admin +from .models import Word + +class WordAdmin(admin.ModelAdmin): + list_display = ('word', 'alignment') + list_filter = ('alignment',) + prepopulated_fields = {"slug": ("word",)} + +admin.site.register(Word, WordAdmin) diff --git a/src/words/migrations/0001_initial.py b/src/words/migrations/0001_initial.py new file mode 100644 index 0000000..9c284a1 --- /dev/null +++ b/src/words/migrations/0001_initial.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding model 'Word' + db.create_table(u'words_word', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('word', self.gf('django.db.models.fields.CharField')(max_length=255)), + ('slug', self.gf('django.db.models.fields.SlugField')(unique=True, max_length=50)), + ('alignment', self.gf('django.db.models.fields.CharField')(max_length=64)), + ('examples', self.gf('django.db.models.fields.TextField')()), + ('usage', self.gf('django.db.models.fields.TextField')()), + ('recommendations', self.gf('django.db.models.fields.TextField')()), + )) + db.send_create_signal(u'words', ['Word']) + + + def backwards(self, orm): + # Deleting model 'Word' + db.delete_table(u'words_word') + + + models = { + u'words.word': { + 'Meta': {'object_name': 'Word'}, + 'alignment': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'examples': ('django.db.models.fields.TextField', [], {}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'recommendations': ('django.db.models.fields.TextField', [], {}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}), + 'usage': ('django.db.models.fields.TextField', [], {}), + 'word': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + } + } + + complete_apps = ['words'] \ No newline at end of file diff --git a/src/words/migrations/__init__.py b/src/words/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/words/models.py b/src/words/models.py new file mode 100644 index 0000000..095382b --- /dev/null +++ b/src/words/models.py @@ -0,0 +1,30 @@ +from django.core.urlresolvers import reverse +from django.db import models +from django.utils.translation import ugettext_lazy as _ + + +ALIGNMENTS = ( + (u'lawful', u'Lawful'), + (u'neutral', u'Neutral'), + (u'chaotic', u'Chaotic'), +) + + +class Word(models.Model): + word = models.CharField(_('word'), max_length=255, db_index=True) + slug = models.SlugField(_('slug'), unique=True) + alignment = models.CharField(_('alignment'), max_length=64, choices=ALIGNMENTS) + examples = models.TextField(_('examples')) + usage = models.TextField(_('usage')) + recommendations = models.TextField(_('recommendations')) + + class Meta: + verbose_name = _('word') + verbose_name_plural = _('words') + ordering = ('word',) + + def __unicode__(self): + return self.word + + def get_absolute_url(self): + return reverse('words_word', args=[self.slug]) diff --git a/src/words/templates/words/home.html b/src/words/templates/words/home.html new file mode 100755 index 0000000..98afa4c --- /dev/null +++ b/src/words/templates/words/home.html @@ -0,0 +1,89 @@ +{% extends "base.html" %} +{% load chunk from chunks %} + +{% block title %}How to talk about copyright?{% endblock %} + +{% block body %} + +
+ +
+
+
+

{% chunk 'intro-1-title' raw=1 %}

+ +
+

{% chunk 'intro-1' %}

+
+ +
+
+
+
+ +

{% chunk 'intro-2-title' raw=1 %}

+ +
+ + + +
+ +
+ {% chunk 'intro-2' %} +
+ + + +
+
+
+
+

{% chunk 'intro-3-title' raw=1 %}

+ +
+

{% chunk 'intro-3' %}

+
+
+
+ + +
+ +
+

The words

+ +
+
+
+
    +{% for word in words.lawful %} +
  • {{ word }}
  • +{% endfor %} +
+
+
+
+
+
    +{% for word in words.neutral %} +
  • {{ word }}
  • +{% endfor %} +
+
+
+
+
+
    +{% for word in words.chaotic %} +
  • {{ word }}
  • +{% endfor %} +
+
+
+ +
+{% endblock %} diff --git a/src/words/templates/words/word_detail.html b/src/words/templates/words/word_detail.html new file mode 100755 index 0000000..d687857 --- /dev/null +++ b/src/words/templates/words/word_detail.html @@ -0,0 +1,59 @@ +{% extends "base.html" %} +{% load static from staticfiles %} + + +{% block title %}{{ object }}{% endblock %} + + +{% block body %} + +
+
+
+

{{ object }}

+ +
+
+ {{ object.examples|linebreaks|safe }} +
+ +
+

/used:/

+ {{ object.usage|linebreaks|safe }} +
+
+ +
+ + + +
+
+

/recommendations:/

+ {{ object.recommendations|linebreaks|safe }} +
+
+ +
+ + + + + +{% endblock %} diff --git a/src/words/tests.py b/src/words/tests.py new file mode 100644 index 0000000..501deb7 --- /dev/null +++ b/src/words/tests.py @@ -0,0 +1,16 @@ +""" +This file demonstrates writing tests using the unittest module. These will pass +when you run "manage.py test". + +Replace this with more appropriate tests for your application. +""" + +from django.test import TestCase + + +class SimpleTest(TestCase): + def test_basic_addition(self): + """ + Tests that 1 + 1 always equals 2. + """ + self.assertEqual(1 + 1, 2) diff --git a/src/words/views.py b/src/words/views.py new file mode 100644 index 0000000..15b4c21 --- /dev/null +++ b/src/words/views.py @@ -0,0 +1,25 @@ +from django.views.generic import TemplateView, DetailView +from .models import Word + +class HomeView(TemplateView): + template_name = 'words/home.html' + + def get_context_data(self): + all_words = Word.objects.all().order_by('word') + words = {} + for word in all_words: + words.setdefault(word.alignment, []).append(word) + + return { + 'words': words, + #'random': Word.objects.order_by('?')[0], + } + +class WordView(DetailView): + model = Word + + def get_context_data(self, object): + return { + 'object': object, + 'words': Word.objects.all(), + } -- 2.20.1