{ "info": { "author": "Maurits van Rees", "author_email": "m.van.rees@zestsoftware.nl", "bugtrack_url": null, "classifiers": [ "Framework :: Plone", "Framework :: Plone :: 4.1", "Framework :: Plone :: 4.2", "Framework :: Plone :: 4.3", "Framework :: Zope2", "Programming Language :: Python", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": ".. contents::\n\nCollective edit skin switcher\n=============================\n\nFor a customer of `Zest Software`_ I [Maurits van Rees] created a\npackage called ``collective.editskinswitcher``. I gladly took some code\nfrom colleague Mark van Lent who did something similar for a different\nweb site. The package is on the Python Package Index so it can be easy\ninstalled. And the code is in the Plone github collective_.\n\n.. _`Zest Software`: http://zestsoftware.nl\n.. _collective: https://github.com/collective/collective.editskinswitcher\n\n\nCompatibility\n-------------\n\n``collective.editskinswitcher`` 3.0 is compatible with Plone version\n4.1 until and including 4.3. For earlier Plone versions please use\n``collective.editskinswitcher`` 2.x.\n\n\nWhat does it do?\n----------------\n\nLet's say you have a Plone Site. Anyway, whatever site you have is\navailable on two urls: ``www.example.com`` and ``edit.example.com``.\nSome day you should ask your local Apache guru how he did that.\n\nWith ``collective.editskinswitcher`` installed (with the portal quick\ninstaller), visitors that go to the website with the url\n``edit.example.com`` will see the Editor Skin. (This can be set in\na property, as we shall see later.) Visitors to\n``www.example.com`` will see whatever skin you have set as the\ndefault skin in portal_skins. Can be pretty handy.\n\nTo avoid confusion: we will call what you have set as \"default skin\"\nthe Visitor Skin. And the skin meant for editors we call the Editor\nSkin.\n\nDeveloper types probably like the fact that you also get the Visitor\nSkin when visiting ``localhost`` and the Editor Skin when you go to\n``127.0.0.1``.\n\nYou can also set a different default skin in a\nfolder. So you can set it up so that folder-1 uses a red theme,\nfolder-2 a blue theme and when you edit either folder you still use\nSunburst Theme. See also the `Per-folder default skin`_ section.\n\n\nOther options\n-------------\n\nThere are some options you can set. Go to ``portal_properties``, and\nthen go to the ``editskin_switcher`` property sheet. These options\nare available:\n\n- ``edit_skin``: set the skin that editors get. The default is \"Plone\n Default\".\n\n- ``switch_skin_action``: choose the url condition that is used for\n switching to the edit skin. Note: this is a multiple select: if\n *one* of the selected options gives a positive result, then we\n switch to the edit skin. Options are:\n\n - based on edit URL: With this you get the behaviour described above.\n This is the default.\n\n - based on specific domain: If this is specified the edit skin is\n used when the first part of the url matches one of the entries in\n the ``specific_domains`` property. This url is the url for the\n root of the Plone Site; so usually this will be a domain, like\n ``http://special.example.com/``. Note that you need to very\n explicitly use the exact url to your Plone Site root. For\n example, when trying this locally you may need something like\n this: ``http://localhost:8080/Plone``\n\n - based on admin header: If this is chosen you will need to set up your proxy\n server, eg. Apache, to add a 'HTTP_PLONEADMIN' header to the request. It can\n do this based on the url for instance. An example is given in\n /tests/ploneadmin_header.txt\n\n - based on SSL: If this is chosen, then any urls that are SSL\n will get the edit skin and others will get the default skin.\n\n - No URL based switching: do not base the skin switching on the url;\n instead we check the ``need_authentication`` option.\n\n- ``need_authentication``: when True you need to be logged in before\n your skin is switched. By default this is set to False. See\n the section `Am I authenticated?`_ below for some notes.\n\n- ``force_login_header``: when the request has this header, only\n authenticated use is allowed. This does not actually switch the\n skin; you just get redirected to the login_form. By default this is\n set to the string ``X_FORCE_LOGIN``. Note that this is not done for\n the login_form and other pages like that. Such a page probably\n looks ugly though, as you still are forced to login before you can\n get the css and images for that page.\n\nIf you combine the switch skin action and the authentication, then you\nneed to have the right url and you need to be logged in.\n\nWhen both are not used, nothing happens: then you might as well simply\nuninstall this product as it is not useful.\n\n\nAm I authenticated?\n-------------------\n\nThe ``need_authentication`` option looks for the ``__ac`` cookie that\nPlone gives you when logged in. There are a few possible problems\nwith this:\n\n- Logging in via the Zope Management Interface is handled without\n cookies, so the editskin switcher regards you as anonymous then.\n\n- We do not check if the the cookie is actually valid. This can\n mostly give a surprise when you are developing multiple websites on\n your own local computer: Plone stores the ``__ac`` cookie for the\n localhost domain, without differentiating between multiple Plone\n sites. So if you are logged into Plone Site A on localhost with a\n cookie, then the skin switcher thinks you are authenticated for all\n websites on localhost.\n\nAlternatively, we could check ``getSecurityManager().getUser()``, but\nthat check always thinks we are anonymous, presumably because our\ncheck is done during traversal, which apparently is too soon for\nanyone to be recognized as being logged in.\n\n\nWhy not CMFUrlSkinSwitcher?\n---------------------------\n\nI looked at CMFUrlSkinSwitcher first but it had not been touched in\ntwo years. One import error (CMFCorePermissions) could easily be\nfixed as that import was not even used. But after that tests were\nfailing all over the place. Theoretically always fixable of course,\nbut rolling an own package seemed easier, cleaner and faster.\n\nAlso, CMFUrlSkinSwitcher does some more things. At least it messes\naround with some methods like absolute_url. It could be that I find\nout later that this is necessary in ``collective.editskinswitcher`` too,\nbut currently it does not look like that will be the case.\n\n\nHow do I know this is working?\n------------------------------\n\nThe easiest way to test this package in a default plone site (apart\nfrom running the tests of course), is:\n\n- Install ``collective.editskinswitcher``.\n\n- Go to portal_skins in the ZMI.\n\n- Create a new skin selection based on Sunburst Theme. Call this\n \"Visitor Skin\".\n\n- Make Visitor Skin the default skin.\n\n- Remove the custom skin layer from Sunburst Theme.\n\n- Customize the main template or the logo or something else that\n is easy to spot.\n\n- Visit ``127.0.0.1:8080/plonesite`` and you will see default Plone.\n\n- Visit ``localhost:8080/plonesite`` and you will see Plone with\n your customization.\n\n\nOn Linux you can edit ``/etc/hosts`` and add a line like::\n\n 127.0.0.1 edit.example.com www.example.com\n\nNow visiting ``edit.example.com`` should give you the Editor Skin\nand ``www.example.com`` should give you the Visitor Skin with the\ncustomizations.\n\n\nYou can also let the edit urls begin with ``cms`` or ``manage``. As\nlong as the url is something like::\n\n ...//(edit|cms|manage).something.something....\n\nyou end up in the edit skin.\n\n\nPreview\n-------\n\nThe preview option allows you to see the default skin via the edit skin.\n\nIt does so by using an iframe which accesses the edit skin content but flips\nit to the default skin. This allows you to easily view previous versions,\nprivate content etc. as it will appear in the default skin if published.\n\nThis is particularly useful in cases where your default skin differs\nradically from the edit skin. It allows the edit interface to maintain some\nwysiwyg functionality.\n\nPreview can either be used as a separate preview tab, or as a replacement\nfor the view tab content in the edit skin.\n\nBoth are implemented within the tests folder and tested, but neither is\nused by default.\n\nFor the preview of editskinswitcher to be of use it requires an\naccompanying theme.egg holding the configuration for the default (and\nedit) skins. In order to use preview, it must be turned on within\nthis accompanying theme egg. Example code to do this are within the\ntests folder.\n\nInstructions for replacing view with preview are given in\ntests/skins/README.txt\n\nTo add it as a separate preview tab:\n\n1. Add the browser view by putting what is in testing.zcml in your\n theme egg configure.zcml or loading that file in the part of your\n buildout that creates the ``zope2instance``, something like::\n\n zcml =\n collective.editskinswitcher-testing\n\n2. Within tests/add_preview.py there is ACTIONSCONFIG\n Add this as a profiles/default/actions.xml file.\n Change the default visible=False property to True. Or do it by\n hand by going to portal_actions, object, and adding a preview\n action with url expression ``string:${object_url}/@@preview``.\n\nNote that it looks like currently our ``++resourece++iframe.js`` is\nnot properly loaded, which in my tests unhelpfully makes the iframe\nabout two centimeters high, though that probably depends on what you\nhave set as the edit skin. If you use this feature and are hit by\nthis bug and maybe even know how to fix it, contact me.\n\n\nPer-folder default skin\n-----------------------\n\nSelecting a default skin for a specific folder is also supported. A\n'Skins' menu entry should show up in the content area, right next to\nthe 'Display' and 'Actions' menu. Once you select a skin from that\ndropdown, it will be used as the default skin when visiting that\nfolder instead of the site-wide default skin.\n\nThis menu is available for everyone who has the ``Set default skin``\npermission, which by default is for Managers and Owners. So if you do\nnot want anyone to have this menu, you can do so by not giving anyone\nthis permission. In the rolemap.xml file of your GenericSetup profile\nthat would look like this::\n\n \n \n \n \n \n \n\n\nSub sites with navigation root\n------------------------------\n\nUsing the `Per-folder default skin`_ menu you already mostly have a to\nmake simple subsites. The only other basic thing needed is to set the\nfolder as a navigation root, so giving it the\n``plone.app.layout.navigation.interfaces.INavigationRoot`` marker\ninferface. This option has now been added to the menu, guarded by new\npermission \"Set navigation root\", by default only for Manager.\n\n\nInstallation using zc.buildout\n------------------------------\n\nFor using collective.editskinswitcher with zc.buildout you have to add\n``collective.editskinswitcher`` to the ``eggs`` section::\n\n eggs = collective.editskinswitcher\n ...\n\n\nHave fun!\n\nMaurits van Rees\n\n\nChangelog for collective.editskinswitcher\n=========================================\n\n3.2 (2015-03-24)\n----------------\n\n- Remove no longer needed ``based_on_url`` property. Merge it with\n the ``switch_skin_action`` property.\n [maurits]\n\n- Remove backwards compatibility code that is not needed on the\n supported Plone 4.1 and higher.\n [maurits]\n\n- Fix upgrade error when coming from really old version, like 0.5.\n Fixes ValueError: The property switch_skin_action does not exist\n [maurits]\n\n\n3.1 (2013-09-16)\n----------------\n\n- Fix handling the specific_domains property. It seems this has only\n worked when the exact url of a page is in the property, but the\n domain (including the protocol) should be enough.\n Fixes https://github.com/collective/collective.editskinswitcher/issues/1\n [davidemoro, realefab, maurits]\n\n\n3.0 (2013-02-16)\n----------------\n\n- Removed zope.app dependencies.\n [maurits]\n\n- Compatible with Plone 4.1, 4.2, 4.3.\n [maurits]\n\n\n2.5 (2013-02-15)\n----------------\n\n- Nothing changed yet.\n\n\n2.4 (2012-09-13)\n----------------\n\n- Added dependencies for Plone 4.2 compatibility:\n zope.app.publication and zope.app.publisher.\n [maurits]\n\n- Moved to github:\n https://github.com/collective/collective.editskinswitcher\n [maurits]\n\n\n2.3 (2012-04-11)\n----------------\n\n- using Sunburst Theme as default theme (we are now in Plone 4 country \n since a while)\n [ajung]\n\n\n2.2 (2012-02-15)\n----------------\n\n- Fixed broken release by fixing MANIFEST.in.\n [maurits]\n\n\n2.1 (2012-02-15)\n----------------\n\n- Changed the calculation for the iframe height. With the original\n code Firefox was behaving quircky, the height was 150px. That is\n too small. With help of Mark we could fix this.\n [mirella]\n\n\n2.0 (2011-09-28)\n----------------\n\n- Added MANIFEST.in so we can automatically include .mo files with\n zest.pocompile.\n [maurits]\n\n- Replace the PAGE_WHITE_LIST and SUFFIX_WHITE_LIST with a list of\n regular expressions (WHITELIST_REGEXPS). Using regexps we can also\n whitelist more complex URLs, e.g. for the password reset tool\n (/passwordreset/1234...). [markvl]\n\n\n1.6 (2011-06-11)\n----------------\n\n- Also set the theme specific browser layers when switching skins.\n Code heavily inspired by themetweaker.themeswitcher. [markvl]\n\n\n1.5 (2011-01-04)\n----------------\n\n- Always show the Styles menu when the user has the \"Set navigation\n root\" permission.\n [maurits]\n\n- Check our permissions on the folder when we are on a default page.\n This might give a difference.\n [maurits]\n\n\n1.4 (2010-12-31)\n----------------\n\n- Added menu item to set the context as a navigation root\n (plone.app.layout.navigation.interfaces.INavigationRoot) guarded by\n new permission \"Set navigation root\", by default only for Manager.\n [maurits]\n\n\n1.3 (2010-12-14)\n----------------\n\n- Do not show the Styles menu when there are no styles to choose.\n [maurits]\n\n- Moved PAGE_WHITE_LIST and SUFFIX_WHITE_LIST from traversal.py to new\n config.py.\n [maurits]\n\n- Added SUFFIX_WHITE_LIST to avoid triggering a forced login for css\n or javascript files, otherwise the login form will look ugly. Also\n added logo.jpg/png/gif and favicon.ico to the PAGE_WHITE_LIST for\n the same reason.\n [maurits]\n\n\n1.2 (2010-12-07)\n----------------\n\n- Do not force logging in when you get this header for a login page\n (specified by the PAGE_WHITE_LIST).\n [maurits]\n\n\n1.1 (2010-12-07)\n----------------\n\n- Use ``get_header`` instead of ``get`` when looking for headers to\n force logging in or force using the edit skin.\n [maurits]\n\n- Allow setting a default skin on a folder, using the new Styles\n context menu.\n [dreamcatcher]\n\n\n1.0 (2010-06-07)\n----------------\n\n- Fix: when we need authentication and we are anonymous then we do\n *not* want to switch: we want to have the default behaviour of\n getting the standard skin instead of the edit skin. Added some more\n inline documentation.\n [maurits]\n\n- Switch back to checking the ``__ac`` cookie to see if someone is\n anonymous or not; the getSecurityManager check always says we are\n anonymous, though I thought I had seen it working previously.\n [maurits]\n\n- Add logging lines for debugging.\n [maurits]\n\n\n0.9 (2010-04-19)\n----------------\n\n- Change the switch skin action to a multiple selection. When one\n of the selected actions returns True, we switch the skin.\n [maurits]\n\n- Also accept urls like admin.example.org as edit urls.\n [maurits]\n\n\n0.8 (2010-04-16)\n----------------\n\n- Slightly better check for anonymous users, using getSecurityManager\n instead of checking for an ``__ac`` cookie.\n [maurits]\n\n- When a X_FORCE_LOGIN header is passed (exact spelling is configurable)\n only allow access to logged in users (you get redirected usually).\n [maurits]\n\n- Allow specifying the admin_header; defaults to HTTP_PLONEADMIN.\n [maurits]\n\n- Added z3c.autoinclude.plugin entry point for plone, to avoid having\n collective.editskinswitcher in the zcml option of your zope\n instance; only effective in Plone 3.3 or higher. In earlier\n versions you still need to do this manually.\n [maurits]\n\n\n0.7 (2008-10-04)\n----------------\n\n- Added switching option based on a request header flag set by the\n proxy server (eg. Apache)\n [Ed Crewe, ILRT - University of Bristol]\n\n\n0.6 (2008-08-27)\n----------------\n\n- New preview feature so that the default skin can be seen via the\n edit skin interface to preserve some level of WYSIWYG for editing.\n (Based on part of an unreleased plone 2 product by Dominic Hiles.)\n Preview feature is available as a viewlet for use via a view or a\n viewletManager, but it is turned off by default. Examples of how to\n enable it are included in the tests, where it is enabled and tested.\n [Ed Crewe, ILRT - University of Bristol]\n\n- Extra URL skin switching options of SSL or specific URLs\n [Ed Crewe, ILRT - University of Bristol]\n\n- Setting eol style in subversion correctly. [reinout]\n\n\n0.5 (2008-03-07)\n----------------\n\n- Bug fix: when called on the zope root (can happen in some cases)\n portal_properties was not found, which was not caught correctly.\n [maurits]\n\n\n0.4 (2008-02-12)\n----------------\n\n- Bug fix: if object has no changeSkin, try its context. Happens at\n least on the sharing tab when searching for users, as object is a\n KSS view then.\n [maurits]\n\n\n0.3 (2008-01-30)\n----------------\n\n- Instead of an Access Rule, use a pre-traversal hook. Idea: David\n Convent. Thanks! Is a lot cleaner.\n [maurits]\n\n- Avoid confusion in README.txt: talk about Editor Skin and Visitor\n Skin instead of Plone Default and the default skin.\n [maurits]\n\n- Update README.txt to tell about the new options introduced in\n version 0.2.\n [maurits]\n\n\n0.2 (2008-01-28)\n----------------\n\n- When testing if the user is logged in, check for the __ac cookie in\n the request instead of portal_membership.isAnonymousUser as this\n does not work in real life; probably because we use an AccessRule.\n [maurits]\n\n- Add based_on_url property (default: True). When True, the skin\n switching is done when you visit the site via an edit url. When\n combined with need_authentication=True, only logged-in users on the\n edit url get the edit skin.\n [maurits]\n\n- Add need_authentication property (default: False). When True, the\n skin switching is only done when you are authenticated (logged in).\n [maurits]\n\n- In the base test cases, create the new default skin.\n [maurits]\n\n- Split tests/setup.txt in two files for separating some unrelated\n tests.\n [maurits]\n\n- Add a more readable README.txt and move the old one into the\n tests directory as it contains most of our tests.\n [maurits]\n\n\n0.1 (2008-01-25)\n----------------\n\n- Add a property sheet editskin_switcher with property edit_skin.\n Default value: Plone Default. Use that for determining which\n skin to give to editors.\n [maurits]\n\n- Initial package structure.\n [zopeskel]", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/collective/collective.editskinswitcher", "keywords": "", "license": "GPL", "maintainer": null, "maintainer_email": null, "name": "collective.editskinswitcher", "package_url": "https://pypi.org/project/collective.editskinswitcher/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/collective.editskinswitcher/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/collective/collective.editskinswitcher" }, "release_url": "https://pypi.org/project/collective.editskinswitcher/3.2/", "requires_dist": null, "requires_python": null, "summary": "Switch to the edit skin for certain domains.", "version": "3.2" }, "last_serial": 1475702, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "943c1b1bd6fac4aa4b93c62bcd44a78e", "sha256": "e13a2cb0f14149a153c41f2f2adb325d4c30b04bfe46f513d17b6ce65f670854" }, "downloads": -1, "filename": "collective.editskinswitcher-0.1-py2.4.egg", "has_sig": false, "md5_digest": "943c1b1bd6fac4aa4b93c62bcd44a78e", "packagetype": "bdist_egg", "python_version": "2.4", "requires_python": null, "size": 14041, "upload_time": "2008-01-25T19:00:08", "url": "https://files.pythonhosted.org/packages/06/85/d7f0c41d8c69cfa1dd4bf74d7d8e18d318f1b4af46583041661d5d0c563a/collective.editskinswitcher-0.1-py2.4.egg" }, { "comment_text": "", "digests": { "md5": "c42c570eab8221a726922314204ba237", "sha256": "5709ec3ade03a4fda607ab9a7ed94e0398a50caa3d7cd7fa81c0a72937274a44" }, "downloads": -1, "filename": "collective.editskinswitcher-0.1.tar.gz", "has_sig": false, "md5_digest": "c42c570eab8221a726922314204ba237", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4746, "upload_time": "2008-01-25T19:00:19", "url": "https://files.pythonhosted.org/packages/9c/86/13a483249476b12e970e987cd57849ffa6430cc27004fd252acc8d5cf42f/collective.editskinswitcher-0.1.tar.gz" } ], "0.1.devel.0": [ { "comment_text": "", "digests": { "md5": "9fd60a5411d0432297bc538cd4beb613", "sha256": "173b3204a245621256cb74fd17a476c76d0415b03c4b5b0738d1d71ae67d1449" }, "downloads": -1, "filename": "collective.editskinswitcher-0.1.devel.0-py2.4.egg", "has_sig": false, "md5_digest": "9fd60a5411d0432297bc538cd4beb613", "packagetype": "bdist_egg", "python_version": "2.4", "requires_python": null, "size": 15346, "upload_time": "2008-01-22T18:47:35", "url": "https://files.pythonhosted.org/packages/65/51/3ee99621688edb25e13780194092cb2d55040bc2d4d6c4ef07e0caeb26df/collective.editskinswitcher-0.1.devel.0-py2.4.egg" }, { "comment_text": "", "digests": { "md5": "4040ec4e8ca62ec004e809202c25e78f", "sha256": "87da424dd2b8f55af00da05091ccdf88333810aad3bc18091cb888703cfc5016" }, "downloads": -1, "filename": "collective.editskinswitcher-0.1.devel.0.tar.gz", "has_sig": false, "md5_digest": "4040ec4e8ca62ec004e809202c25e78f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10691, "upload_time": "2008-01-22T18:47:41", "url": "https://files.pythonhosted.org/packages/db/8a/2df24375cfc74aec78bf6da665eac3dff2167eacbea52c3b3cc8fdc5d5db/collective.editskinswitcher-0.1.devel.0.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "c4fb49f0bda451f2541ec9dca9806bad", "sha256": "6c66434348fdc82bf5f3dad4ac9f9977b6129def13200f2edd990bafc4d14c84" }, "downloads": -1, "filename": "collective.editskinswitcher-0.2-py2.4.egg", "has_sig": false, "md5_digest": "c4fb49f0bda451f2541ec9dca9806bad", "packagetype": "bdist_egg", "python_version": "2.4", "requires_python": null, "size": 23845, "upload_time": "2008-01-28T14:59:13", "url": "https://files.pythonhosted.org/packages/30/ea/0ccc11db0aeecdc2d29ea38c15a1490fd88737ef3844f77ad740fb291912/collective.editskinswitcher-0.2-py2.4.egg" }, { "comment_text": "", "digests": { "md5": "7ee95edbc4109475ae1d6b7988eb6865", "sha256": "eec0100928be581dffe77867408fed34cd63febedfe972f3e4b2a56479d24086" }, "downloads": -1, "filename": "collective.editskinswitcher-0.2.tar.gz", "has_sig": false, "md5_digest": "7ee95edbc4109475ae1d6b7988eb6865", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15787, "upload_time": "2008-01-28T14:59:13", "url": "https://files.pythonhosted.org/packages/82/0d/8f864ff95b20173e8ce872f4285e68466643b3d0244a329ce6d863beccb4/collective.editskinswitcher-0.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "3e62fc45caf7a0e9e68711c6ff0c7637", "sha256": "6f874d6612ae6759840be8d06e5b60d820752b313c61cb624025d034806dfba5" }, "downloads": -1, "filename": "collective.editskinswitcher-0.3-py2.4.egg", "has_sig": false, "md5_digest": "3e62fc45caf7a0e9e68711c6ff0c7637", "packagetype": "bdist_egg", "python_version": "2.4", "requires_python": null, "size": 22517, "upload_time": "2008-01-30T15:48:17", "url": "https://files.pythonhosted.org/packages/ca/cd/8bc1cb23391176c4ce3ad0144faa34c8c74cae3a7c931e91fad10fb511e9/collective.editskinswitcher-0.3-py2.4.egg" }, { "comment_text": "", "digests": { "md5": "63f5a0c36368ddd63673d4c3f9b51a05", "sha256": "18223f0256551300e9945266f67d6316a328222fc60afc910f43d3b4e5c590b0" }, "downloads": -1, "filename": "collective.editskinswitcher-0.3.tar.gz", "has_sig": false, "md5_digest": "63f5a0c36368ddd63673d4c3f9b51a05", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16530, "upload_time": "2008-01-30T15:05:57", "url": "https://files.pythonhosted.org/packages/90/ea/ec89c5aba6d56a82c9d787ba44e1da92ad53b885e9008a0a1e5e072c73d0/collective.editskinswitcher-0.3.tar.gz" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "6420ca26fb72f908d3750f50e2a4aa57", "sha256": "56b4245747b995e7124da4a4bdc1212f86e5127d9801a478cbe529a267cb3991" }, "downloads": -1, "filename": "collective.editskinswitcher-0.4-py2.4.egg", "has_sig": false, "md5_digest": "6420ca26fb72f908d3750f50e2a4aa57", "packagetype": "bdist_egg", "python_version": "2.4", "requires_python": null, "size": 22638, "upload_time": "2008-02-12T17:07:30", "url": "https://files.pythonhosted.org/packages/f1/69/ca206d4806d1f81e588734987999639263de8d6fe0a4d7dcbcca7e871d6f/collective.editskinswitcher-0.4-py2.4.egg" }, { "comment_text": "", "digests": { "md5": "85a8526dbfd3e6c14e965e5360d420c8", "sha256": "bc6ea9301d5b52b5c9a3e71318f19dc56ed20d45761c716a1f14356795a6a18e" }, "downloads": -1, "filename": "collective.editskinswitcher-0.4.tar.gz", "has_sig": false, "md5_digest": "85a8526dbfd3e6c14e965e5360d420c8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16562, "upload_time": "2008-02-12T17:07:39", "url": "https://files.pythonhosted.org/packages/fc/ca/2eb5f93382c18c959dd929631dccc7ad832b57cc7a11086b2dabf8b8c18f/collective.editskinswitcher-0.4.tar.gz" } ], "0.5": [ { "comment_text": "", "digests": { "md5": "4f14c7e3a4551e72e766ac41806ee550", "sha256": "559f9529c502b0e317da4ae1d04e93a4083cba8551387caacc3dd405bca838a9" }, "downloads": -1, "filename": "collective.editskinswitcher-0.5-py2.4.egg", "has_sig": false, "md5_digest": "4f14c7e3a4551e72e766ac41806ee550", "packagetype": "bdist_egg", "python_version": "2.4", "requires_python": null, "size": 22996, "upload_time": "2008-03-07T15:42:14", "url": "https://files.pythonhosted.org/packages/5b/f2/893ae6cc9247dc427168a9db3469364627ee4accb34e62d9d507dbf9d53f/collective.editskinswitcher-0.5-py2.4.egg" }, { "comment_text": "", "digests": { "md5": "5dcfbd930ece4cbc527f27faaa37cfab", "sha256": "33559bf8762f1ee2d370f975331ccf9e1fed08d86b9a5f5735b17900c57bb6a1" }, "downloads": -1, "filename": "collective.editskinswitcher-0.5.tar.gz", "has_sig": false, "md5_digest": "5dcfbd930ece4cbc527f27faaa37cfab", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17023, "upload_time": "2008-03-07T15:42:15", "url": "https://files.pythonhosted.org/packages/32/51/9bf4f62cca0d860fb96b6806ff4b11b39a6e3495f5d1fb1d8e190bae1edd/collective.editskinswitcher-0.5.tar.gz" } ], "0.6": [ { "comment_text": "", "digests": { "md5": "429a4abe36a39ca59d2dd1a4300c383c", "sha256": "77cee1b27461408412c632c65c79bdfec8d671c49b575aa9aa78eca9511b4983" }, "downloads": -1, "filename": "collective.editskinswitcher-0.6.tar.gz", "has_sig": false, "md5_digest": "429a4abe36a39ca59d2dd1a4300c383c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29200, "upload_time": "2008-08-27T20:25:00", "url": "https://files.pythonhosted.org/packages/1a/14/9c852d28244bef5dab6703bbba2c67d54b2ee4b6218e7655903cb7168ac4/collective.editskinswitcher-0.6.tar.gz" } ], "0.7": [ { "comment_text": "", "digests": { "md5": "c2e6cfeae5c15c49f210f51e4967219e", "sha256": "e81f3e5b628670d4f8ae0d22483f0f8192c65034d7561256822ebd6fa9050d68" }, "downloads": -1, "filename": "collective.editskinswitcher-0.7.tar.gz", "has_sig": false, "md5_digest": "c2e6cfeae5c15c49f210f51e4967219e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30308, "upload_time": "2008-10-04T02:34:26", "url": "https://files.pythonhosted.org/packages/28/94/2179fe9aa4209dd3fae06906bebd1047e2132fe7e1d4ec817c1dcf116f39/collective.editskinswitcher-0.7.tar.gz" } ], "0.8": [ { "comment_text": "", "digests": { "md5": "660bd5999ac979afa8319f8349d043cb", "sha256": "cdaa33ec5ae3c4efd1b20ea59752847a3ef6f3ffc2cb24268e753f4e07442538" }, "downloads": -1, "filename": "collective.editskinswitcher-0.8.zip", "has_sig": false, "md5_digest": "660bd5999ac979afa8319f8349d043cb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 58979, "upload_time": "2010-04-16T18:05:02", "url": "https://files.pythonhosted.org/packages/82/97/f0c77c3c9091d4d89df62412da9016b52b955cfc2e99b0c9d7b46046641f/collective.editskinswitcher-0.8.zip" } ], "0.9": [ { "comment_text": "", "digests": { "md5": "bd53bfac98ea3c39c13c386279dd67c9", "sha256": "0336815950e8beefc19144c7b5bc3ca655c9806d42c3957ed9ecc9ce96814c04" }, "downloads": -1, "filename": "collective.editskinswitcher-0.9.zip", "has_sig": false, "md5_digest": "bd53bfac98ea3c39c13c386279dd67c9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 59704, "upload_time": "2010-04-19T14:26:18", "url": "https://files.pythonhosted.org/packages/9c/c3/a8005645558d0f4b087455600abe357ee291d950856af81eedd84653f658/collective.editskinswitcher-0.9.zip" } ], "1.0": [ { "comment_text": "", "digests": { "md5": "3072176480bee59c83dd0d8b75c0d1da", "sha256": "b9a7ea87c0cf1146bfc63fb18dd8a06180b0974b96bdcc932a0eaba1b1ce42b0" }, "downloads": -1, "filename": "collective.editskinswitcher-1.0.zip", "has_sig": false, "md5_digest": "3072176480bee59c83dd0d8b75c0d1da", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 63603, "upload_time": "2010-06-07T18:05:33", "url": "https://files.pythonhosted.org/packages/07/da/2ea3f73b02104b63697388e22e4a19abbb6cf06b4ea72c9c151289cccb0b/collective.editskinswitcher-1.0.zip" } ], "1.1": [ { "comment_text": "", "digests": { "md5": "7a9b7f37af51ddeb59b348797c0b5c66", "sha256": "420e8136c0a3878755d13488766b949fea7da59e57c0c027c4d2d78984c5d8cb" }, "downloads": -1, "filename": "collective.editskinswitcher-1.1.zip", "has_sig": false, "md5_digest": "7a9b7f37af51ddeb59b348797c0b5c66", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 73675, "upload_time": "2010-12-07T14:08:19", "url": "https://files.pythonhosted.org/packages/47/60/f11bb30eca97c7cd124bd54c88068f7210393cf27dbce6ee27d683ecf9bc/collective.editskinswitcher-1.1.zip" } ], "1.2": [ { "comment_text": "", "digests": { "md5": "1eb4c376b474b9c0c5f317f8b900cbe9", "sha256": "2a18529f6501b75f22cf95dc71ad5d0c2c2a5ad0ec308bee16070916f03ed66f" }, "downloads": -1, "filename": "collective.editskinswitcher-1.2.zip", "has_sig": false, "md5_digest": "1eb4c376b474b9c0c5f317f8b900cbe9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 74652, "upload_time": "2010-12-07T16:50:49", "url": "https://files.pythonhosted.org/packages/b0/d9/011c6c3561c66959e2dee036d190727466ced6bc5e1239c58eda2160c9e4/collective.editskinswitcher-1.2.zip" } ], "1.3": [ { "comment_text": "", "digests": { "md5": "318a448ba9080188fea031ae5a8bd6d2", "sha256": "a4904687a80f53bc24f555ad1c6e4ab3d7f291646425e7c2bfd8bb70eb6d4fe2" }, "downloads": -1, "filename": "collective.editskinswitcher-1.3.zip", "has_sig": false, "md5_digest": "318a448ba9080188fea031ae5a8bd6d2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 76041, "upload_time": "2010-12-14T11:18:30", "url": "https://files.pythonhosted.org/packages/7c/b9/e6ce22f673e9500b66cc47634ffa82c2bc0e22bb31ac98d57d247da770f4/collective.editskinswitcher-1.3.zip" } ], "1.4": [ { "comment_text": "", "digests": { "md5": "99258db5685572ec778539179d3ad0d2", "sha256": "683929fe07341b1edf9136dfbe6924e7d8c92dca49beb1e5192048468b2ee8dc" }, "downloads": -1, "filename": "collective.editskinswitcher-1.4.zip", "has_sig": false, "md5_digest": "99258db5685572ec778539179d3ad0d2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 79498, "upload_time": "2010-12-31T16:34:28", "url": "https://files.pythonhosted.org/packages/c8/68/4c6fba10141e355ecd21d666db4bfba2e86b55479e3988d6bcea2ca5db15/collective.editskinswitcher-1.4.zip" } ], "1.5": [ { "comment_text": "", "digests": { "md5": "023802c4c4bfb084e2aa0cdf8d5bbc1c", "sha256": "ae5ee41218287e11313488a83e17d7e074565fedbd85aabb5260ab1b2a26eb20" }, "downloads": -1, "filename": "collective.editskinswitcher-1.5.zip", "has_sig": false, "md5_digest": "023802c4c4bfb084e2aa0cdf8d5bbc1c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 79733, "upload_time": "2011-01-04T17:16:05", "url": "https://files.pythonhosted.org/packages/18/66/44bedc43cef4259f9d03075e36eaf35eb6a11151b6f90ecca65fafeebdba/collective.editskinswitcher-1.5.zip" } ], "1.6": [ { "comment_text": "", "digests": { "md5": "bd35bc382e0a6a5b176de9fa3d54ba9c", "sha256": "2bbebff4353b29dd39b563a5485e630f8990760dc63f3443256ccdf914cb0ab1" }, "downloads": -1, "filename": "collective.editskinswitcher-1.6.zip", "has_sig": false, "md5_digest": "bd35bc382e0a6a5b176de9fa3d54ba9c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 83096, "upload_time": "2011-06-11T04:42:59", "url": "https://files.pythonhosted.org/packages/0f/ea/1be41fef85407c2bc0ee8912fccc8f40e871f01233a3b8c18c0209dc5c0e/collective.editskinswitcher-1.6.zip" } ], "2.0": [ { "comment_text": "", "digests": { "md5": "c450f9b8e7aa96c0f49d5d6c41f61526", "sha256": "3f8595ac1c36341b793386ca45764b352a20aa8988a5cb030906c7bd5b224365" }, "downloads": -1, "filename": "collective.editskinswitcher-2.0.zip", "has_sig": false, "md5_digest": "c450f9b8e7aa96c0f49d5d6c41f61526", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 85874, "upload_time": "2011-09-28T11:35:03", "url": "https://files.pythonhosted.org/packages/e1/03/a08cfdae12ba15894342e0aefc22389a419ce2269162c5efd079736666b2/collective.editskinswitcher-2.0.zip" } ], "2.1": [ { "comment_text": "", "digests": { "md5": "d27f69a38ced25d0abdb24695c7d67d2", "sha256": "0512e3e06eee45a8cb3c2bd796d66421e254966e2ad0be66e0e0ddd146187a7c" }, "downloads": -1, "filename": "collective.editskinswitcher-2.1.tar.gz", "has_sig": false, "md5_digest": "d27f69a38ced25d0abdb24695c7d67d2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39478, "upload_time": "2012-02-15T15:31:00", "url": "https://files.pythonhosted.org/packages/38/07/cac65275502903c7f724e7d42966e62cba3844c5399913544db8030c521a/collective.editskinswitcher-2.1.tar.gz" } ], "2.2": [ { "comment_text": "", "digests": { "md5": "4c582a1a7215e9ff4cbdc02262a71542", "sha256": "31169a9968cb8dd4bca2de8997fa2d47f1300e6b87cd91f3601b23e208cf8127" }, "downloads": -1, "filename": "collective.editskinswitcher-2.2.tar.gz", "has_sig": false, "md5_digest": "4c582a1a7215e9ff4cbdc02262a71542", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 53640, "upload_time": "2012-02-15T15:55:27", "url": "https://files.pythonhosted.org/packages/e0/1e/d9a95c032baa0b29cf09fc320163fccfe81b2dc8301eb6949d93c5f81336/collective.editskinswitcher-2.2.tar.gz" } ], "2.3": [ { "comment_text": "", "digests": { "md5": "30ba57beb8547e5b1e461f2418c9dfce", "sha256": "77657de89d0b4397a81ba5108ce597c273d30fde48cafd5c7398f407bd5af326" }, "downloads": -1, "filename": "collective.editskinswitcher-2.3.zip", "has_sig": false, "md5_digest": "30ba57beb8547e5b1e461f2418c9dfce", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 90013, "upload_time": "2012-04-11T17:41:45", "url": "https://files.pythonhosted.org/packages/5e/0b/f641a003e35d33b04da0055b699dfc98dd2832429328d75e2305622e9565/collective.editskinswitcher-2.3.zip" } ], "2.4": [ { "comment_text": "", "digests": { "md5": "e49d66f55b4c32b072e1d123f21b716e", "sha256": "0d4eeb4eae3cea47361b86ebaa3fc9bd41e181be028356b3d9027e6583487085" }, "downloads": -1, "filename": "collective.editskinswitcher-2.4.zip", "has_sig": false, "md5_digest": "e49d66f55b4c32b072e1d123f21b716e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 94709, "upload_time": "2012-09-13T13:44:32", "url": "https://files.pythonhosted.org/packages/4a/7f/8e4b12e6e07ca5212307e2817ed37dcad84a1a0612dbca69fec2268322c3/collective.editskinswitcher-2.4.zip" } ], "2.5": [ { "comment_text": "", "digests": { "md5": "eb4745db046dbea036341756e61367ad", "sha256": "4eee91c33a18ac792f9e167bed4a06312e62509a055f9e0ef5f29a7b5b83c283" }, "downloads": -1, "filename": "collective.editskinswitcher-2.5.zip", "has_sig": false, "md5_digest": "eb4745db046dbea036341756e61367ad", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 97429, "upload_time": "2013-02-15T21:24:18", "url": "https://files.pythonhosted.org/packages/57/dd/50778e72274be2e2f4646414c0bc310be122bc76d7f58965cca014252e65/collective.editskinswitcher-2.5.zip" } ], "3.0": [ { "comment_text": "", "digests": { "md5": "0d5b17b6e69d6c435cabac64f9243f1c", "sha256": "2e5536a5a0434f1869b6136102f87247619d75d6bf1d1f0a1480f25615e99f75" }, "downloads": -1, "filename": "collective.editskinswitcher-3.0.zip", "has_sig": false, "md5_digest": "0d5b17b6e69d6c435cabac64f9243f1c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 94265, "upload_time": "2013-02-15T23:05:13", "url": "https://files.pythonhosted.org/packages/97/f9/fa942be103c158c12985bb199854e57b00e655df623d7ef1bab8bf285075/collective.editskinswitcher-3.0.zip" } ], "3.1": [ { "comment_text": "", "digests": { "md5": "835910a06a909336287c4c532f809a35", "sha256": "824d76089b53f9a66a0111e688a73aba96e6ab0ccad9ca377d30e23d2999d780" }, "downloads": -1, "filename": "collective.editskinswitcher-3.1.zip", "has_sig": false, "md5_digest": "835910a06a909336287c4c532f809a35", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 94765, "upload_time": "2013-09-16T16:03:26", "url": "https://files.pythonhosted.org/packages/14/c3/45bf80ee9f3e893ae547b8adcbac252fadea8ee32cbbf5af8554aad91d96/collective.editskinswitcher-3.1.zip" } ], "3.2": [ { "comment_text": "", "digests": { "md5": "97ba9aec34134ba500a7c085dca0d00c", "sha256": "9ea581915e8df2e30aae92b3856c110ddd802f0cbf9ad58e7bedc9ab18d95d64" }, "downloads": -1, "filename": "collective.editskinswitcher-3.2.zip", "has_sig": false, "md5_digest": "97ba9aec34134ba500a7c085dca0d00c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 92788, "upload_time": "2015-03-24T17:46:54", "url": "https://files.pythonhosted.org/packages/d5/0f/463ae8467d9155665acba88dbc41fe64f0428666a86de044043856f9abee/collective.editskinswitcher-3.2.zip" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "97ba9aec34134ba500a7c085dca0d00c", "sha256": "9ea581915e8df2e30aae92b3856c110ddd802f0cbf9ad58e7bedc9ab18d95d64" }, "downloads": -1, "filename": "collective.editskinswitcher-3.2.zip", "has_sig": false, "md5_digest": "97ba9aec34134ba500a7c085dca0d00c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 92788, "upload_time": "2015-03-24T17:46:54", "url": "https://files.pythonhosted.org/packages/d5/0f/463ae8467d9155665acba88dbc41fe64f0428666a86de044043856f9abee/collective.editskinswitcher-3.2.zip" } ] }