Commits

Dominik Ruf committed ea94efb

init

  • Participants

Comments (0)

Files changed (145)

+syntax: glob
+*.pyc
+src/collective.weblogin.egg-info
+Changelog
+=========
+
+0.1dev (unreleased)
+-------------------
+
+- Package created using zopeskel
+  [Dominik Ruf]

File CONTRIBUTORS.txt

+Dominik Ruf, Author
+.. contents::
+
+Introduction
+============
+

File bootstrap.py

+##############################################################################
+#
+# Copyright (c) 2006 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Bootstrap a buildout-based project
+
+Simply run this script in a directory containing a buildout.cfg.
+The script accepts buildout command-line options, so you can
+use the -c option to specify an alternate configuration file.
+"""
+
+import os, shutil, sys, tempfile, textwrap, urllib, urllib2, subprocess
+from optparse import OptionParser
+
+if sys.platform == 'win32':
+    def quote(c):
+        if ' ' in c:
+            return '"%s"' % c # work around spawn lamosity on windows
+        else:
+            return c
+else:
+    quote = str
+
+# See zc.buildout.easy_install._has_broken_dash_S for motivation and comments.
+stdout, stderr = subprocess.Popen(
+    [sys.executable, '-Sc',
+     'try:\n'
+     '    import ConfigParser\n'
+     'except ImportError:\n'
+     '    print 1\n'
+     'else:\n'
+     '    print 0\n'],
+    stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
+has_broken_dash_S = bool(int(stdout.strip()))
+
+# In order to be more robust in the face of system Pythons, we want to
+# run without site-packages loaded.  This is somewhat tricky, in
+# particular because Python 2.6's distutils imports site, so starting
+# with the -S flag is not sufficient.  However, we'll start with that:
+if not has_broken_dash_S and 'site' in sys.modules:
+    # We will restart with python -S.
+    args = sys.argv[:]
+    args[0:0] = [sys.executable, '-S']
+    args = map(quote, args)
+    os.execv(sys.executable, args)
+# Now we are running with -S.  We'll get the clean sys.path, import site
+# because distutils will do it later, and then reset the path and clean
+# out any namespace packages from site-packages that might have been
+# loaded by .pth files.
+clean_path = sys.path[:]
+import site
+sys.path[:] = clean_path
+for k, v in sys.modules.items():
+    if k in ('setuptools', 'pkg_resources') or (
+        hasattr(v, '__path__') and
+        len(v.__path__)==1 and
+        not os.path.exists(os.path.join(v.__path__[0],'__init__.py'))):
+        # This is a namespace package.  Remove it.
+        sys.modules.pop(k)
+
+is_jython = sys.platform.startswith('java')
+
+setuptools_source = 'http://peak.telecommunity.com/dist/ez_setup.py'
+distribute_source = 'http://python-distribute.org/distribute_setup.py'
+
+# parsing arguments
+def normalize_to_url(option, opt_str, value, parser):
+    if value:
+        if '://' not in value: # It doesn't smell like a URL.
+            value = 'file://%s' % (
+                urllib.pathname2url(
+                    os.path.abspath(os.path.expanduser(value))),)
+        if opt_str == '--download-base' and not value.endswith('/'):
+            # Download base needs a trailing slash to make the world happy.
+            value += '/'
+    else:
+        value = None
+    name = opt_str[2:].replace('-', '_')
+    setattr(parser.values, name, value)
+
+usage = '''\
+[DESIRED PYTHON FOR BUILDOUT] bootstrap.py [options]
+
+Bootstraps a buildout-based project.
+
+Simply run this script in a directory containing a buildout.cfg, using the
+Python that you want bin/buildout to use.
+
+Note that by using --setup-source and --download-base to point to
+local resources, you can keep this script from going over the network.
+'''
+
+parser = OptionParser(usage=usage)
+parser.add_option("-v", "--version", dest="version",
+                          help="use a specific zc.buildout version")
+parser.add_option("-d", "--distribute",
+                   action="store_true", dest="use_distribute", default=False,
+                   help="Use Distribute rather than Setuptools.")
+parser.add_option("--setup-source", action="callback", dest="setup_source",
+                  callback=normalize_to_url, nargs=1, type="string",
+                  help=("Specify a URL or file location for the setup file. "
+                        "If you use Setuptools, this will default to " +
+                        setuptools_source + "; if you use Distribute, this "
+                        "will default to " + distribute_source +"."))
+parser.add_option("--download-base", action="callback", dest="download_base",
+                  callback=normalize_to_url, nargs=1, type="string",
+                  help=("Specify a URL or directory for downloading "
+                        "zc.buildout and either Setuptools or Distribute. "
+                        "Defaults to PyPI."))
+parser.add_option("--eggs",
+                  help=("Specify a directory for storing eggs.  Defaults to "
+                        "a temporary directory that is deleted when the "
+                        "bootstrap script completes."))
+parser.add_option("-t", "--accept-buildout-test-releases",
+                  dest='accept_buildout_test_releases',
+                  action="store_true", default=False,
+                  help=("Normally, if you do not specify a --version, the "
+                        "bootstrap script and buildout gets the newest "
+                        "*final* versions of zc.buildout and its recipes and "
+                        "extensions for you.  If you use this flag, "
+                        "bootstrap and buildout will get the newest releases "
+                        "even if they are alphas or betas."))
+parser.add_option("-c", None, action="store", dest="config_file",
+                   help=("Specify the path to the buildout configuration "
+                         "file to be used."))
+
+options, args = parser.parse_args()
+
+# if -c was provided, we push it back into args for buildout's main function
+if options.config_file is not None:
+    args += ['-c', options.config_file]
+
+if options.eggs:
+    eggs_dir = os.path.abspath(os.path.expanduser(options.eggs))
+else:
+    eggs_dir = tempfile.mkdtemp()
+
+if options.setup_source is None:
+    if options.use_distribute:
+        options.setup_source = distribute_source
+    else:
+        options.setup_source = setuptools_source
+
+if options.accept_buildout_test_releases:
+    args.append('buildout:accept-buildout-test-releases=true')
+args.append('bootstrap')
+
+try:
+    import pkg_resources
+    import setuptools # A flag.  Sometimes pkg_resources is installed alone.
+    if not hasattr(pkg_resources, '_distribute'):
+        raise ImportError
+except ImportError:
+    ez_code = urllib2.urlopen(
+        options.setup_source).read().replace('\r\n', '\n')
+    ez = {}
+    exec ez_code in ez
+    setup_args = dict(to_dir=eggs_dir, download_delay=0)
+    if options.download_base:
+        setup_args['download_base'] = options.download_base
+    if options.use_distribute:
+        setup_args['no_fake'] = True
+    ez['use_setuptools'](**setup_args)
+    if 'pkg_resources' in sys.modules:
+        reload(sys.modules['pkg_resources'])
+    import pkg_resources
+    # This does not (always?) update the default working set.  We will
+    # do it.
+    for path in sys.path:
+        if path not in pkg_resources.working_set.entries:
+            pkg_resources.working_set.add_entry(path)
+
+cmd = [quote(sys.executable),
+       '-c',
+       quote('from setuptools.command.easy_install import main; main()'),
+       '-mqNxd',
+       quote(eggs_dir)]
+
+if not has_broken_dash_S:
+    cmd.insert(1, '-S')
+
+find_links = options.download_base
+if not find_links:
+    find_links = os.environ.get('bootstrap-testing-find-links')
+if find_links:
+    cmd.extend(['-f', quote(find_links)])
+
+if options.use_distribute:
+    setup_requirement = 'distribute'
+else:
+    setup_requirement = 'setuptools'
+ws = pkg_resources.working_set
+setup_requirement_path = ws.find(
+    pkg_resources.Requirement.parse(setup_requirement)).location
+env = dict(
+    os.environ,
+    PYTHONPATH=setup_requirement_path)
+
+requirement = 'zc.buildout'
+version = options.version
+if version is None and not options.accept_buildout_test_releases:
+    # Figure out the most recent final version of zc.buildout.
+    import setuptools.package_index
+    _final_parts = '*final-', '*final'
+    def _final_version(parsed_version):
+        for part in parsed_version:
+            if (part[:1] == '*') and (part not in _final_parts):
+                return False
+        return True
+    index = setuptools.package_index.PackageIndex(
+        search_path=[setup_requirement_path])
+    if find_links:
+        index.add_find_links((find_links,))
+    req = pkg_resources.Requirement.parse(requirement)
+    if index.obtain(req) is not None:
+        best = []
+        bestv = None
+        for dist in index[req.project_name]:
+            distv = dist.parsed_version
+            if _final_version(distv):
+                if bestv is None or distv > bestv:
+                    best = [dist]
+                    bestv = distv
+                elif distv == bestv:
+                    best.append(dist)
+        if best:
+            best.sort()
+            version = best[-1].version
+if version:
+    requirement = '=='.join((requirement, version))
+cmd.append(requirement)
+
+if is_jython:
+    import subprocess
+    exitcode = subprocess.Popen(cmd, env=env).wait()
+else: # Windows prefers this, apparently; otherwise we would prefer subprocess
+    exitcode = os.spawnle(*([os.P_WAIT, sys.executable] + cmd + [env]))
+if exitcode != 0:
+    sys.stdout.flush()
+    sys.stderr.flush()
+    print ("An error occurred when trying to install zc.buildout. "
+           "Look above this message for any errors that "
+           "were output by easy_install.")
+    sys.exit(exitcode)
+
+ws.add_entry(eggs_dir)
+ws.require(requirement)
+import zc.buildout.buildout
+zc.buildout.buildout.main(args)
+if not options.eggs: # clean up temporary egg directory
+    shutil.rmtree(eggs_dir)

File buildout.cfg

+[buildout]
+extends =
+    http://svn.plone.org/svn/collective/buildout/plonetest/plone-4.0.x.cfg
+
+package-name = collective.weblogin
+
+parts += omelette
+
+[test]
+recipe = zc.recipe.testrunner
+eggs =
+    ${instance:eggs}
+    collective.weblogin [test]
+defaults = ['-s', '${buildout:package-name}']
+
+[omelette]
+recipe = collective.recipe.omelette
+eggs = ${instance:eggs}

File docs/LICENSE.GPL

+                    GNU GENERAL PUBLIC LICENSE
+                       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.)  You can apply it to
+your programs, too.
+
+  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
+this service 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.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+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
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the 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 a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                            NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE 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.
+
+                     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
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 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 General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.

File docs/LICENSE.txt

+collective.weblogin Copyright 2012, Dominik Ruf
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 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 General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, 
+MA 02111-1307 USA.
+from setuptools import setup, find_packages
+import os
+
+version = '0.1'
+
+long_description = (
+    open('README.txt').read()
+    + '\n' +
+    'Contributors\n'
+    '============\n'
+    + '\n' +
+    open('CONTRIBUTORS.txt').read()
+    + '\n' +
+    open('CHANGES.txt').read()
+    + '\n')
+
+setup(name='collective.weblogin',
+      version=version,
+      description="A Plone plugin that uses openid-selector, plone.app.openid and collective.facebooklogin "
+        "to allow users to login with different authentication provider.",
+      long_description=long_description,
+      # Get more strings from
+      # http://pypi.python.org/pypi?%3Aaction=list_classifiers
+      classifiers=[
+        "Programming Language :: Python",
+        ],
+      keywords='pas plone',
+      author='Dominik Ruf',
+      author_email='dominikruf@gmail.com',
+      url='https://github.com/domruf/collective.weblogin',
+      license='gpl',
+      packages=find_packages('src'),
+      package_dir = {'': 'src'},
+      namespace_packages=['collective'],
+      include_package_data=True,
+      zip_safe=False,
+      install_requires=[
+          'setuptools',
+          'collective.facebooklogin',
+          'plone.app.openid'
+          # -*- Extra requirements: -*-
+      ],
+      extras_require={'test': ['plone.app.testing']},
+      entry_points="""
+      # -*- Entry points: -*-
+  	  [z3c.autoinclude.plugin]
+  	  target = plone
+      """,
+      )

File src/collective/__init__.py

+__import__('pkg_resources').declare_namespace(__name__)

File src/collective/weblogin/__init__.py

+def initialize(context):
+    """Initializer called when used as a Zope 2 product."""

File src/collective/weblogin/configure.zcml

+<configure
+    xmlns="http://namespaces.zope.org/zope"
+    xmlns:five="http://namespaces.zope.org/five"
+    xmlns:i18n="http://namespaces.zope.org/i18n"
+    xmlns:genericsetup="http://namespaces.zope.org/genericsetup"
+    xmlns:browser="http://namespaces.zope.org/browser"
+    i18n_domain="collective.weblogin">
+
+  <five:registerPackage package="." initialize=".initialize" />
+
+  <browser:resourceDirectory
+      directory="resources"
+      name="collective.weblogin"
+      />
+        
+  <genericsetup:registerProfile
+      name="default"
+      title="collective.weblogin"
+      directory="profiles/default"
+      description="Installs the collective.weblogin package"
+      provides="Products.GenericSetup.interfaces.EXTENSION"
+      />
+  
+</configure>

File src/collective/weblogin/profiles/default/cssregistry.xml

+<?xml version="1.0"?>
+<object name="portal_css" meta_type="Stylesheets Registry">
+    <stylesheet title="" cacheable="True" compression="safe" cookable="True"
+     enabled="1" expression="" id="++resource++collective.weblogin/openid-selector/css/openid.css"
+     media="screen" rel="stylesheet" rendering="import"/>
+</object>

File src/collective/weblogin/profiles/default/jsregistry.xml

+<?xml version="1.0"?>
+<object name="portal_javascripts">
+    <javascript cacheable="True" compression="safe" cookable="True"
+        enabled="True" expression=""
+        id="++resource++collective.weblogin/openid-selector/js/openid-jquery.js"
+        inline="False"/>
+    <javascript cacheable="True" compression="safe" cookable="True"
+        enabled="True" expression=""
+        id="++resource++collective.weblogin/providers.js"
+        inline="False"/>
+    <javascript cacheable="True" compression="safe" cookable="True"
+        enabled="True" expression=""
+        id="++resource++collective.weblogin/openid-wrapper.js"
+        inline="False"/>
+</object>

File src/collective/weblogin/profiles/default/metadata.xml

+<?xml version="1.0"?>
+<metadata>
+  <version>0001</version>
+  <dependencies>
+      <dependency>profile-collective.facebooklogin:default</dependency>
+      <dependency>profile-plone.app.openid:default</dependency>
+  </dependencies>
+</metadata>

File src/collective/weblogin/resources/openid-selector/README.txt

+OVERVIEW
+-------------------
+This is a simple Javascript OpenID selector. It has been designed so 
+that users do not even need to know what OpenID is to use it, they 
+simply select their account by a recognisable logo.
+
+USAGE
+-------------------
+See demo.html source
+
+TROUBLESHOOTING
+----------------------------
+Please remember after you change list of providers, you must run 
+generate-sprite.js <locale> to refresh sprite image
+
+generate-sprite.js requires ImageMagick to be installed and works
+only in Windows (non-Windows users must run ./generate-sprite.sh or
+./generate-sprite.rb)
+
+Before running generate-sprite.js for the first time, check its
+source code and correct line 16 (var imagemagick = '<...>';) to 
+point to ImageMagick install dir.
+
+Please also remember that sprites may be reused: if two 
+localizations have the same provider list that differs only in text,
+it is reasonable to reuse the sprite: for example German 
+localization is reusing sprite from English localization, Ukrainian 
+localization is reusing sprite from Russian localization, etc.
+
+So, if provider list in root localization changes, localizations 
+that reuse the sprite must be also changed, or unlinked or relinked
+to new root localization. 
+
+HOWTO
+-------------------
+1. how to create new (small) provider icon
+   a. launch web browser, go to http://<provider-site>/favicon.ico
+      and save the image as <provider>.ico in ./images.small folder
+   b. launch GIMP or Photoshop and save 16x16 rendition from the 
+      icon as <provider>.ico.gif
+   c. use ImageMagick command like 
+      convert <provider>.ico <provider>.ico.png to convert the icon
+      to PNG format (it might generate several files, just pick 16x16
+      rendition and rename it as <provider>.ico.png w/o .1.)
+
+2. how to create new (large) provider image
+   a. grab provider logo image from its website
+   b. resize the image not to exceed 90x30 rect
+   c. save as the image as <provider>.gif in ./images.large folder
+
+3. how to plug-in facebook provider
+   put the following code in providers_large or providers_small:
+   facebook = {
+     name: 'Facebook',
+     url: "javascript:facebook_click();"
+   }
+   where facebook_click is something like:
+   function facebook_click() {
+     $('#<id of html fbconnect element>').click();
+   }
+   the same mechanism also applies if you want to plug-in any oauth or
+   xauth provider
+
+LICENSE
+-------------------
+This code is licensed under the New BSD License.
+

File src/collective/weblogin/resources/openid-selector/compile-closure.sh

+python ../closure-library/closure/bin/calcdeps.py \
+-i ../closure-library/closure/goog/deps.js \
+-i js/openid-closure.js \
+-p ../closure-library/closure/goog/ \
+-o compiled \
+-c ../closure-compiler/compiler.jar \
+-f "--compilation_level=ADVANCED_OPTIMIZATIONS" \
+-f "--warning_level=VERBOSE" \
+-f "--define=goog.LOCALE='en'" \
+-f "--define=moose.ALLOW_AUTOLOGIN=true" \
+-f "--externs=js/externs.js" > js/openid-closure-compiled.js

File src/collective/weblogin/resources/openid-selector/css/openid-shadow.css

+/*
+	Simple OpenID Plugin
+	http://code.google.com/p/openid-selector/
+	
+	This code is licensed under the New BSD License.
+*/
+
+#openid_form {
+	width: 590px;
+}
+
+#openid_form legend {
+	font-weight: bold;
+}
+
+#openid_choice {
+	display: none;
+}
+
+#openid_input_area {
+	clear: both;
+	padding: 10px;
+}
+
+#openid_btns, #openid_btns br {
+	clear: both;
+}
+
+#openid_highlight {
+	padding: 3px;
+	background-color: #FFFCC9;
+	float: left;
+}
+
+.openid_large_btn {
+	width: 100px;
+	height: 60px;
+/* fix for IE 6 only: http://en.wikipedia.org/wiki/CSS_filter#Underscore_hack */
+	_width: 104px;
+	_height: 64px;
+
+	border: 2px solid #DDD;
+	border-right: 2px solid #ccc;
+	border-bottom: 2px solid #ccc;
+	margin: 3px;
+	float: left;
+	border-radius: 5px;	
+	-moz-border-radius: 5px;
+	-webkit-border-radius: 5px;
+	box-shadow: 2px 2px 4px #ddd;
+	-moz-box-shadow: 2px 2px 4px #ddd;
+	-webkit-box-shadow: 2px 2px 4px #ddd;
+}
+
+.openid_large_btn:hover {
+	margin: 4px 0 0 6px;
+	border: 2px solid #999;
+	box-shadow: none;
+	-moz-box-shadow: none;
+	-webkit-box-shadow: none;
+}
+
+.openid_small_btn {
+	width: 24px;
+	height: 24px;
+/* fix for IE 6 only: http://en.wikipedia.org/wiki/CSS_filter#Underscore_hack */
+	_width: 28px;
+	_height: 28px;
+
+	border: 2px solid #DDD;
+	border-right: 2px solid #ccc;
+	border-bottom: 2px solid #ccc;
+	margin: 3px;
+	float: left;
+	border-radius: 5px;	
+	-moz-border-radius: 5px;
+	-webkit-border-radius: 5px;
+	box-shadow: 2px 2px 4px #ddd;
+	-moz-box-shadow: 2px 2px 4px #ddd;
+	-webkit-box-shadow: 2px 2px 4px #ddd;
+}
+
+.openid_small_btn:hover {
+	margin: 4px 0 0 6px;
+	border: 2px solid #999;
+	box-shadow: none;
+	-moz-box-shadow: none;
+	-webkit-box-shadow: none;
+}
+
+a.openid_large_btn:focus {
+	outline: none;
+}
+
+a.openid_large_btn:focus {
+	-moz-outline-style: none;
+}
+
+.openid_selected {
+	border: 4px solid #DDD;
+}

File src/collective/weblogin/resources/openid-selector/css/openid.css

+/*
+	Simple OpenID Plugin
+	http://code.google.com/p/openid-selector/
+	
+	This code is licensed under the New BSD License.
+*/
+
+#openid_form {
+}
+
+#openid_form legend {
+	font-weight: bold;
+}
+
+#openid_choice {
+	display: none;
+}
+
+#openid_input_area {
+	clear: both;
+	padding: 10px;
+}
+
+#openid_btns, #openid_btns br {
+	clear: both;
+}
+
+#openid_highlight {
+	background-color: #FFFCC9;
+	float: left;
+}
+
+.openid_large_btn {
+	width: 100px;
+	height: 60px;
+/* fix for IE 6 only: http://en.wikipedia.org/wiki/CSS_filter#Underscore_hack */
+	_width: 102px;
+	_height: 62px;
+
+	border: 1px solid #DDD;
+	margin: 3px;
+	float: left;
+}
+
+.openid_small_btn {
+	width: 24px;
+	height: 24px;
+/* fix for IE 6 only: http://en.wikipedia.org/wiki/CSS_filter#Underscore_hack */
+	_width: 26px;
+	_height: 26px;
+
+	border: 1px solid #DDD;
+	margin: 4px;
+	float: left;
+}
+
+a.openid_large_btn:focus {
+	outline: none;
+}
+
+a.openid_large_btn:focus {
+	-moz-outline-style: none;
+}
+
+.openid_selected {
+	border: 4px solid #DDD;
+}

File src/collective/weblogin/resources/openid-selector/demo-closure-compiled.html

+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+	<title>Google Closure Simple OpenID Selector Demo</title>
+	<!-- Simple OpenID Selector -->
+	<link type="text/css" rel="stylesheet" href="css/openid.css" />
+    <script src="js/openid-closure-compiled.js"></script>
+	<script type="text/javascript" src="js/openid-en.js"></script>
+	<!-- /Simple OpenID Selector -->
+	<style type="text/css">
+		/* Basic page formatting */
+		body {
+			font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+		}
+	</style>
+</head>
+
+<body>
+	<h2>Google Closure Simple OpenID Selector Demo</h2>
+	<p>This is a simple example to show how you can include the Javascript into your page.</p>
+	<br/>
+	<!-- Simple OpenID Selector -->
+	<form action="examples/consumer/try_auth.php" method="get" id="openid_form" onsubmit="return openidselectorobject.submit();">
+		<input type="hidden" name="action" value="verify" />
+		<fieldset>
+			<legend>Sign-in or Create New Account</legend>
+			<div id="openid_choice">
+				<p>Please click your account provider:</p>
+				<div id="openid_btns"></div>
+			</div>
+			<div id="openid_input_area">
+				<input id="openid_identifier" name="openid_identifier" type="text" value="http://" />
+				<input id="openid_submit" type="submit" value="Sign-In"/>
+			</div>
+			<noscript>
+				<p>OpenID is service that allows you to log-on to many different websites using a single indentity.
+				Find out <a href="http://openid.net/what/">more about OpenID</a> and <a href="http://openid.net/get/">how to get an OpenID enabled account</a>.</p>
+			</noscript>
+		</fieldset>
+	</form>
+	<!-- /Simple OpenID Selector -->
+  <script> 
+    openid.demo = true;
+    var openidselectorobject = new openidselector('openid_identifier');
+  </script> 
+</body>
+</html>

File src/collective/weblogin/resources/openid-selector/demo-closure.html

+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+	<title>Google Closure Simple OpenID Selector Demo</title>
+	<!-- Simple OpenID Selector -->
+	<link type="text/css" rel="stylesheet" href="css/openid.css" />
+    <script src="../closure-library/closure/goog/base.js"></script>
+    <script>
+        goog.require('goog.dom');
+        goog.require('goog.array');
+        goog.require('goog.object');
+        goog.require('goog.style');
+        goog.require('goog.net.cookies');
+    </script>
+    <script src="js/openid-closure.js"></script>
+	<script type="text/javascript" src="js/openid-en.js"></script>
+	<!-- /Simple OpenID Selector -->
+	<style type="text/css">
+		/* Basic page formatting */
+		body {
+			font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+		}
+	</style>
+</head>
+
+<body>
+	<h2>Google Closure Simple OpenID Selector Demo</h2>
+	<p>This is a simple example to show how you can include the Javascript into your page.</p>
+	<br/>
+	<!-- Simple OpenID Selector -->
+	<form action="examples/consumer/try_auth.php" method="get" id="openid_form" onsubmit="return openidselectorobject.submit();">
+		<input type="hidden" name="action" value="verify" />
+		<fieldset>
+			<legend>Sign-in or Create New Account</legend>
+			<div id="openid_choice">
+				<p>Please click your account provider:</p>
+				<div id="openid_btns"></div>
+			</div>
+			<div id="openid_input_area">
+				<input id="openid_identifier" name="openid_identifier" type="text" value="http://" />
+				<input id="openid_submit" type="submit" value="Sign-In"/>
+			</div>
+			<noscript>
+				<p>OpenID is service that allows you to log-on to many different websites using a single indentity.
+				Find out <a href="http://openid.net/what/">more about OpenID</a> and <a href="http://openid.net/get/">how to get an OpenID enabled account</a>.</p>
+			</noscript>
+		</fieldset>
+	</form>
+	<!-- /Simple OpenID Selector -->
+  <script> 
+    openid.demo = true;
+    var openidselectorobject = new openidselector('openid_identifier');
+  </script> 
+</body>
+</html>

File src/collective/weblogin/resources/openid-selector/demo-mootools.html

+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+	<title>Mootools Simple OpenID Selector Demo</title>
+	<!-- Simple OpenID Selector -->
+	<link type="text/css" rel="stylesheet" href="css/openid.css" />
+	<script type="text/javascript" src="js/mootools-core.js"></script>
+	<script type="text/javascript" src="js/mootools-more.js"></script>
+	<script type="text/javascript" src="js/openid-mootools.js"></script>
+	<script type="text/javascript" src="js/openid-en.js"></script>
+	<script type="text/javascript">
+		window.addEvent('domready', function(){
+			openid.init('openid_identifier');
+			openid.setDemoMode(true); //Stops form submission for client javascript-only test purposes
+		});
+	</script>
+	<!-- /Simple OpenID Selector -->
+	<style type="text/css">
+		/* Basic page formatting */
+		body {
+			font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+		}
+	</style>
+</head>
+
+<body>
+	<h2>Mootools Simple OpenID Selector Demo</h2>
+	<p>This is a simple example to show how you can include the Javascript into your page.</p>
+	<br/>
+	<!-- Simple OpenID Selector -->
+	<form action="examples/consumer/try_auth.php" method="get" id="openid_form">
+		<input type="hidden" name="action" value="verify" />
+		<input id="openid_form_submit" type="submit" style="display: none;" />
+		<fieldset>
+			<legend>Sign-in or Create New Account</legend>
+			<div id="openid_choice">
+				<p>Please click your account provider:</p>
+				<div id="openid_btns"></div>
+			</div>
+			<div id="openid_input_area">
+				<input id="openid_identifier" name="openid_identifier" type="text" value="http://" />
+				<input id="openid_submit" type="submit" value="Sign-In"/>
+			</div>
+			<noscript>
+				<p>OpenID is service that allows you to log-on to many different websites using a single indentity.
+				Find out <a href="http://openid.net/what/">more about OpenID</a> and <a href="http://openid.net/get/">how to get an OpenID enabled account</a>.</p>
+			</noscript>
+		</fieldset>
+	</form>
+	<!-- /Simple OpenID Selector -->
+</body>
+</html>

File src/collective/weblogin/resources/openid-selector/demo-no-framework.html

+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+	<title>No Framework Simple OpenID Selector Demo</title>
+	<!-- Simple OpenID Selector -->
+	<link type="text/css" rel="stylesheet" href="css/openid.css" />
+	<script type="text/javascript" src="js/openid-no-framework.js"></script>
+	<script type="text/javascript" src="js/openid-en.js"></script>
+	<script type="text/javascript">
+		window.onload = function(){
+			openid.init('openid_identifier');
+			openid.setDemoMode(true); //Stops form submission for client javascript-only test purposes
+		};
+	</script>
+	<!-- /Simple OpenID Selector -->
+	<style type="text/css">
+		/* Basic page formatting */
+		body {
+			font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+		}
+	</style>
+</head>
+
+<body>
+	<h2>No Framework Simple OpenID Selector Demo</h2>
+	<p>This is a simple example to show how you can include the Javascript into your page.</p>
+	<br/>
+	<!-- Simple OpenID Selector -->
+	<form action="examples/consumer/try_auth.php" method="get" id="openid_form">
+		<input type="hidden" name="action" value="verify" />
+		<input id="openid_form_submit" type="submit" style="display: none;" />
+		<fieldset>
+			<legend>Sign-in or Create New Account</legend>
+			<div id="openid_choice">
+				<p>Please click your account provider:</p>
+				<div id="openid_btns"></div>
+			</div>
+			<div id="openid_input_area">
+				<input id="openid_identifier" name="openid_identifier" type="text" value="http://" />
+				<input id="openid_submit" type="submit" value="Sign-In"/>
+			</div>
+			<noscript>
+				<p>OpenID is service that allows you to log-on to many different websites using a single indentity.
+				Find out <a href="http://openid.net/what/">more about OpenID</a> and <a href="http://openid.net/get/">how to get an OpenID enabled account</a>.</p>
+			</noscript>
+		</fieldset>
+	</form>
+	<!-- /Simple OpenID Selector -->
+</body>
+</html>

File src/collective/weblogin/resources/openid-selector/demo-prototype.html

+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+	<title>Prototype Simple OpenID Selector Demo</title>
+	<!-- Simple OpenID Selector -->
+	<link type="text/css" rel="stylesheet" href="css/openid.css" />
+	<script type="text/javascript" src="js/prototype.js"></script>
+	<script type="text/javascript" src="js/openid-prototype.js"></script>
+	<script type="text/javascript" src="js/openid-en.js"></script>
+	<script type="text/javascript">
+		document.observe('dom:loaded', function() {
+			openid.init('openid_identifier');
+			openid.setDemoMode(true); //Stops form submission for client javascript-only test purposes
+		});
+	</script>
+	<!-- /Simple OpenID Selector -->
+	<style type="text/css">
+		/* Basic page formatting */
+		body {
+			font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+		}
+	</style>
+</head>
+
+<body>
+	<h2>Prototype Simple OpenID Selector Demo</h2>
+	<p>This is a simple example to show how you can include the Javascript into your page.</p>
+	<br/>
+	<!-- Simple OpenID Selector -->
+	<form action="examples/consumer/try_auth.php" method="get" id="openid_form">
+		<input type="hidden" name="action" value="verify" />
+		<fieldset>
+			<legend>Sign-in or Create New Account</legend>
+			<div id="openid_choice">
+				<p>Please click your account provider:</p>
+				<div id="openid_btns"></div>
+			</div>
+			<div id="openid_input_area">
+				<input id="openid_identifier" name="openid_identifier" type="text" value="http://" />
+				<input id="openid_submit" type="submit" value="Sign-In"/>
+			</div>
+			<noscript>
+				<p>OpenID is service that allows you to log-on to many different websites using a single indentity.
+				Find out <a href="http://openid.net/what/">more about OpenID</a> and <a href="http://openid.net/get/">how to get an OpenID enabled account</a>.</p>
+			</noscript>
+		</fieldset>
+	</form>
+	<!-- /Simple OpenID Selector -->
+</body>
+</html>

File src/collective/weblogin/resources/openid-selector/demo-ru.html

+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+	<title>Демонстрация JQuery Simple OpenID Selector</title>
+	<!-- Simple OpenID Selector -->
+	<link type="text/css" rel="stylesheet" href="css/openid.css" />
+	<script type="text/javascript" src="js/jquery-1.2.6.min.js"></script>
+	<script type="text/javascript" src="js/openid-jquery.js"></script>
+	<script type="text/javascript" src="js/openid-ru.js"></script>
+	<script type="text/javascript">
+		$(document).ready(function() {
+			openid.init('openid_identifier');
+			openid.setDemoMode(true); //Не сабмитить форму, только для тестирования клиентского javascript'а
+		});
+	</script>
+	<!-- /Simple OpenID Selector -->
+	<style type="text/css">
+		/* Basic page formatting */
+		body {
+			font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+		}
+	</style>
+</head>
+
+<body>
+	<h2>Демонстрация JQuery Simple OpenID Selector</h2>
+	<p>Этот простой пример показывает как вы можете включить Javascript на вашей странице.</p>
+	<br/>
+	<!-- Simple OpenID Selector -->
+	<form action="examples/consumer/try_auth.php" method="get" id="openid_form">
+		<input type="hidden" name="action" value="verify" />
+		<fieldset>
+			<legend>Войти или создать новый аккаунт</legend>
+			<div id="openid_choice">
+				<p>Пожайлуста, выберите вашего аккаунт-провайдера:</p>
+				<div id="openid_btns"></div>
+			</div>
+			<div id="openid_input_area">
+				<input id="openid_identifier" name="openid_identifier" type="text" value="http://" />
+				<input id="openid_submit" type="submit" value="Войти"/>
+			</div>
+			<noscript>
+				<p>OpenID это сервис который позволяет вам входить в разные веб-сайты пользуясь одной учетной записью.
+				Узнайте <a href="http://openid.net/what/">больше о OpenID</a> и <a href="http://openid.net/get/">как получить OpenID аккаунт</a>.</p>
+			</noscript>
+		</fieldset>
+	</form>
+	<!-- /Simple OpenID Selector -->
+</body>
+</html>

File src/collective/weblogin/resources/openid-selector/demo-uk.html

+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+	<title>Демонстрація JQuery Simple OpenID Selector</title>
+	<!-- Simple OpenID Selector -->
+	<link type="text/css" rel="stylesheet" href="css/openid.css" />
+	<script type="text/javascript" src="js/jquery-1.2.6.min.js"></script>
+	<script type="text/javascript" src="js/openid-jquery.js"></script>
+	<script type="text/javascript" src="js/openid-uk.js"></script>
+	<script type="text/javascript">
+		$(document).ready(function() {
+			openid.init('openid_identifier');
+			openid.setDemoMode(true); //Не сабмітити форму, тільки для тестування клієнтського javascript'а
+		});
+	</script>
+	<!-- /Simple OpenID Selector -->
+	<style type="text/css">
+		/* Basic page formatting */
+		body {
+			font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+		}
+	</style>
+</head>
+
+<body>
+	<h2>Демонстрація JQuery Simple OpenID Selector</h2>
+	<p>Цей простий приклад показує як ви можете включити Javascript на вашій сторінці.</p>
+	<br/>
+	<!-- Simple OpenID Selector -->
+	<form action="examples/consumer/try_auth.php" method="get" id="openid_form">
+		<input type="hidden" name="action" value="verify" />
+		<fieldset>
+			<legend>Увійти або створити новий акаунт</legend>
+			<div id="openid_choice">
+				<p>Будь-ласка, виберіть вашого акаунт-провайдера:</p>
+				<div id="openid_btns"></div>
+			</div>
+			<div id="openid_input_area">
+				<input id="openid_identifier" name="openid_identifier" type="text" value="http://" />
+				<input id="openid_submit" type="submit" value="Увійти"/>
+			</div>
+			<noscript>
+				<p>OpenID це сервіс який дозволяє вам входити в разні веб-сайти користуючись одним обліковим записом.
+				Взнайте <a href="http://openid.net/what/">більше про OpenID</a> та <a href="http://openid.net/get/">як отримати OpenID акаунт</a>.</p>
+			</noscript>
+		</fieldset>
+	</form>
+	<!-- /Simple OpenID Selector -->
+</body>
+</html>

File src/collective/weblogin/resources/openid-selector/demo-zh_CN.html

+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+	<title>简单的 OpenID 选择器的 jQuery 版演示</title>
+	<!-- Simple OpenID Selector -->
+	<link type="text/css" rel="stylesheet" href="css/openid.css" />
+	<script type="text/javascript" src="js/jquery-1.2.6.min.js"></script>
+	<script type="text/javascript" src="js/openid-jquery.js"></script>
+	<script type="text/javascript" src="js/openid-zh_CN.js"></script>
+	<script type="text/javascript">
+		$(document).ready(function() {
+			openid.init('openid_identifier');
+			openid.setDemoMode(false); //Stops form submission for client javascript-only test purposes
+		});
+	</script>
+	<!-- /Simple OpenID Selector -->
+	<style type="text/css">
+		/* Basic page formatting */
+		body {
+			font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+		}
+	</style>
+</head>
+
+<body>
+	<h2>简单的 OpenID 选择器的 jQuery 版演示</h2>
+	<p>这是一个简单的例子用来说明如何在你的网页里包含该 Javascript。</p>
+	<br/>
+	<!-- Simple OpenID Selector -->
+	<form action="examples/consumer/try_auth.php" method="get" id="openid_form">
+		<input type="hidden" name="action" value="verify" />
+		<fieldset>
+			<legend>登录或创建一个新的帐号</legend>
+			<div id="openid_choice">
+				<p>请点击你的帐号提供商:</p>
+				<div id="openid_btns"></div>
+			</div>
+			<div id="openid_input_area">
+				<input id="openid_identifier" name="openid_identifier" type="text" value="http://" />
+				<input id="openid_submit" type="submit" value="Sign-In"/>
+			</div>
+			<noscript>
+				<p>OpenID 是一个让你可以使用单一的身份标识来登录各种不同的站点的服务。
+				在<a href="http://openid.net/what/">这里</a>可以得到更多关于 OpenID 的介绍,在<a href="http://openid.net/get/">这里</a>可以得到获取 OpenID 帐号的信息。</p>
+			</noscript>
+		</fieldset>
+	</form>
+	<!-- /Simple OpenID Selector -->
+</body>
+</html>

File src/collective/weblogin/resources/openid-selector/demo-zh_TW.html

+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+	<title>JQuery Simple OpenID Selector 示範</title>
+	<!-- Simple OpenID Selector -->
+	<link type="text/css" rel="stylesheet" href="css/openid.css" />
+	<script type="text/javascript" src="js/jquery-1.2.6.min.js"></script>
+	<script type="text/javascript" src="js/openid-jquery.js"></script>
+	<script type="text/javascript" src="js/openid-zh_TW.js"></script>
+	<script type="text/javascript">
+		$(document).ready(function() {
+			openid.init('openid_identifier');
+			openid.setDemoMode(true); //Stops form submission for client javascript-only test purposes
+		});
+	</script>
+	<!-- /Simple OpenID Selector -->
+	<style type="text/css">
+		/* Basic page formatting */
+		body {
+			font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+		}
+	</style>
+</head>
+
+<body>
+	<h2>JQuery Simple OpenID Selector 示範</h2>
+	<p>此簡易範例展示如何在您的網頁內使用Javascrpt.</p>
+	<br/>
+	<!-- Simple OpenID Selector -->
+	<form action="examples/consumer/try_auth.php" method="get" id="openid_form">
+		<input type="hidden" name="action" value="verify" />
+		<fieldset>
+			<legend>登入或建立帳號</legend>
+			<div id="openid_choice">
+				<p>請點選您帳供的供應者:</p>
+				<div id="openid_btns"></div>
+			</div>
+			<div id="openid_input_area">
+				<input id="openid_identifier" name="openid_identifier" type="text" value="http://" />
+				<input id="openid_submit" type="submit" value="Sign-In"/>
+			</div>
+			<noscript>
+				<p>OpenID乃讓您可以以單一識別登入不用網站的服務.
+				Find out <a href="http://openid.net/what/">更多關於OpenID</a>與<a href="http://openid.net/get/">如何取得並啟用OpenID帳號</a>.</p>
+			</noscript>
+		</fieldset>
+	</form>
+	<!-- /Simple OpenID Selector -->
+</body>
+</html>

File src/collective/weblogin/resources/openid-selector/demo.html

+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+	<title>JQuery Simple OpenID Selector Demo</title>
+	<!-- Simple OpenID Selector -->
+	<link type="text/css" rel="stylesheet" href="css/openid.css" />
+	<script type="text/javascript" src="js/jquery-1.2.6.min.js"></script>
+	<script type="text/javascript" src="js/openid-jquery.js"></script>
+	<script type="text/javascript" src="js/openid-en.js"></script>
+	<script type="text/javascript">
+		$(document).ready(function() {
+			openid.init('openid_identifier');
+			openid.setDemoMode(true); //Stops form submission for client javascript-only test purposes
+		});
+	</script>
+	<!-- /Simple OpenID Selector -->
+	<style type="text/css">
+		/* Basic page formatting */
+		body {
+			font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+		}
+	</style>
+</head>
+
+<body>
+	<h2>JQuery Simple OpenID Selector Demo</h2>
+	<p>This is a simple example to show how you can include the Javascript into your page.</p>
+	<br/>
+	<!-- Simple OpenID Selector -->
+	<form action="examples/consumer/try_auth.php" method="get" id="openid_form">
+		<input type="hidden" name="action" value="verify" />
+		<fieldset>
+			<legend>Sign-in or Create New Account</legend>
+			<div id="openid_choice">
+				<p>Please click your account provider:</p>
+				<div id="openid_btns"></div>
+			</div>
+			<div id="openid_input_area">
+				<input id="openid_identifier" name="openid_identifier" type="text" value="http://" />
+				<input id="openid_submit" type="submit" value="Sign-In"/>
+			</div>
+			<noscript>
+				<p>OpenID is service that allows you to log-on to many different websites using a single indentity.
+				Find out <a href="http://openid.net/what/">more about OpenID</a> and <a href="http://openid.net/get/">how to get an OpenID enabled account</a>.</p>
+			</noscript>
+		</fieldset>
+	</form>
+	<!-- /Simple OpenID Selector -->
+</body>
+</html>

File src/collective/weblogin/resources/openid-selector/generate-sprite.js

+/*
+	Simple OpenID Plugin
+	http://code.google.com/p/openid-selector/
+	
+	This code is licensed under the New BSD License.
+*/
+
+function exec(cmd) {
+	var shell = new ActiveXObject('WScript.Shell');
+	var exec = shell.Exec(cmd);
+	while (exec.Status == 0) {
+		WScript.Sleep(100);
+	}
+}
+
+var imagemagick = 'C:/Program Files/ImageMagick-6.6.5-Q16/';
+
+var locale = 'en';
+if (WScript.Arguments.length == 0) {
+	// assuming english locale
+} else {
+	locale = WScript.Arguments(0);
+}
+
+var fso = new ActiveXObject('Scripting.FileSystemObject');
+
+var s;
+var f = fso.OpenTextFile('js/openid-' + locale + '.js');
+try {
+	s = f.ReadAll();
+} finally {
+	f.Close();
+}
+var openid = {};
+eval(s);
+
+if (openid.locale != locale) {
+	WScript.Echo('error: locale setting mismatch in js/openid-' + locale + '.js');
+	WScript.Quit(-1);
+}
+if (openid.locale != openid.sprite) {
+	WScript.Echo('error: ' + openid.locale + ' localization is reusing sprite from ' + openid.sprite 
+			+ ' localization. refresh sprite on original localization or don\'t reuse the sprite');
+	WScript.Quit(-1);
+}
+
+// generate small montage
+var cmd = imagemagick + 'montage';
+var i = 0;
+for (provider_id in providers_large) {
+	cmd += ' images.small/' + provider_id + '.ico.png';
+	i++;
+}
+for (provider_id in providers_small) {
+	cmd += ' images.small/' + provider_id + '.ico.png';
+	i++;
+}
+var small = fso.GetTempName() + '.bmp';
+cmd += ' -tile ' + i + 'x1 -geometry 16x16+4+4 ' + small;
+exec(cmd);
+
+// generate large montage
+cmd = imagemagick + 'montage';
+i = 0;
+for (provider_id in providers_large) {
+	cmd += ' images.large/' + provider_id + '.gif';
+	i++;
+}
+var large = fso.GetTempName() + '.bmp';
+cmd += ' -tile ' + i + 'x1 -geometry 100x60>+0+0 ' + large;
+exec(cmd);
+
+// generate final montage
+var cmd = imagemagick + 'convert ' + large + ' ' + small + ' -append images/openid-providers-' + locale + '.png';
+exec(cmd);
+
+fso.DeleteFile(large);
+fso.DeleteFile(small);
+WScript.Echo("done");

File src/collective/weblogin/resources/openid-selector/generate-sprite.rb

+#!/usr/bin/env ruby
+
+#	Simple OpenID Plugin
+#	http://code.google.com/p/openid-selector/
+#	
+#	This code is licenced under the New BSD License.
+#
+#
+# Requires rubygems (tested with 1.3.7) therubyracer (tested with 0.7.5),
+# and ImageMagick (tested with 6.6.5).