[Cluster-devel] conga/luci/plone-custom Makefile README base.c ...

kupcevic at sourceware.org kupcevic at sourceware.org
Wed Jul 26 16:55:40 UTC 2006


CVSROOT:	/cvs/cluster
Module name:	conga
Changes by:	kupcevic at sourceware.org	2006-07-26 16:55:37

Added files:
	luci/plone-custom: Makefile README base.css colophon 
	                   default_error_message_CUSTOM 
	                   document_edit_form_TEST dropdown.js_TEST 
	                   failsafe_login_form footer global_searchbox 
	                   highlightsearchterms.js_TEST login.js_TEST 
	                   login_failed login_form login_form_TEST 
	                   login_form_validate login_initial login_next 
	                   login_password login_success logo.jpg 
	                   main_template portlet_login registered 

Log message:
	luci/portal_skins/custom directory

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/Makefile.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/README.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/base.css.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/colophon.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/default_error_message_CUSTOM.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/document_edit_form_TEST.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/dropdown.js_TEST.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/failsafe_login_form.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/footer.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/global_searchbox.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/highlightsearchterms.js_TEST.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/login.js_TEST.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/login_failed.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/login_form.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/login_form_TEST.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/login_form_validate.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/login_initial.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/login_next.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/login_password.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/login_success.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/logo.jpg.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/main_template.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/portlet_login.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/registered.diff?cvsroot=cluster&r1=NONE&r2=1.1

/cvs/cluster/conga/luci/plone-custom/Makefile,v  -->  standard output
revision 1.1
--- conga/luci/plone-custom/Makefile
+++ -	2006-07-26 16:55:37.612213000 +0000
@@ -0,0 +1,15 @@
+LUCI_USER=admin
+LUCI_PASS=changeme
+LUCI_FTP=luci:8021
+LUCI_HTTP=http://luci:8080/luci
+
+# import page local page templates to the Luci server
+import:
+	@if test "$(FILES)"; then \
+		../load_site.py -u $(LUCI_USER):$(LUCI_PASS) $(LUCI_HTTP)/portal_skins/custom/ $(FILES) ; \
+	else \
+		find . -follow -maxdepth 1 -type f -not -name Makefile -not -name ".*" -not -name custom.xml -not -name README -print0 | xargs -0 ../load_site.py -u $(LUCI_USER):$(LUCI_PASS) $(LUCI_HTTP)/portal_skins/custom/ ; \
+	fi
+
+export:
+	@wget -q -r -nH --cut-dirs=3 "ftp://$(LUCI_USER):$(LUCI_PASS)@$(LUCI_FTP)/luci/portal_skins/custom/*"
/cvs/cluster/conga/luci/plone-custom/README,v  -->  standard output
revision 1.1
--- conga/luci/plone-custom/README
+++ -	2006-07-26 16:55:37.694665000 +0000
@@ -0,0 +1,4 @@
+custom.xml is a backup of whole portal_skins/custom directory, including methods, types and permisions. 
+Other files are a content of the same dir.
+
+So, custom.xml is to be restored first, thru ZMI, the rest of files can be pushed using Makefile.
/cvs/cluster/conga/luci/plone-custom/base.css,v  -->  standard output
revision 1.1
--- conga/luci/plone-custom/base.css
+++ -	2006-07-26 16:55:37.779450000 +0000
@@ -0,0 +1,239 @@
+/*
+** Plone style sheet - Base Elements
+**
+** Style sheet documentation can be found at http://plone.org/documentation
+**
+** You should preferrably use ploneCustom.css to add your own CSS classes and to
+** customize your portal, as these are the base fundaments of Plone, and will
+** change and be refined in newer versions. Keeping your changes in
+** ploneCustom.css will make it easier to upgrade.
+**
+** Feel free to use whole or parts of this for your own designs, but give credit
+** where credit is due.
+**
+*/
+
+/* <dtml-with base_properties> (do not remove this :) */
+/* <dtml-call "REQUEST.set('portal_url', portal_url())"> (not this either :) */
+
+
+body {
+    font: &dtml-fontBaseSize; <dtml-var fontFamily>;
+    background-color: &dtml-backgroundColor;;
+    color: &dtml-fontColor;;
+    margin: 0;
+    padding: 0;
+}
+
+table {
+    font-size: 100%;
+}
+
+a {
+    color: &dtml-linkColor;;
+    background-color: transparent;
+}
+img {
+    border: none;
+    vertical-align: middle;
+}
+p {
+    margin: 0 0 0.75em 0;
+    line-height: 1.5em;
+}
+
+p img {
+    border: none;
+    margin: 0;
+}
+
+hr {
+    border: 0;
+    height: &dtml-borderWidth;;
+    color: &dtml-globalBorderColor;;
+    background-color: &dtml-globalBorderColor;;
+    margin: 0.5em 0 1em 0;
+}
+
+
+h1, h2, h3, h4, h5, h6 {
+    color: &dtml-fontColor;;
+    background-color: transparent;
+    font-family: <dtml-var headingFontFamily>;
+    font-weight: normal;
+    margin: 0 0 0.25em 0;
+    border-bottom: &dtml-borderWidth; &dtml-borderStyle; &dtml-globalBorderColor;;
+}
+
+h1 a,
+h2 a,
+h3 a,
+h4 a,
+h5 a,
+h6 a {
+    color: &dtml-fontColor; ! important;
+    text-decoration: none;
+}
+
+h1 {
+    font-size: 160%;
+}
+
+h2 {
+    font-size: 150%;
+}
+
+h3 {
+    font-size: 125%;
+    border-bottom: none;
+    font-weight: bold;
+}
+
+h4 {
+    font-size: 110%;
+    border-bottom: none;
+    font-weight: bold;
+}
+
+h5 {
+    font-size: 100%;
+    border-bottom: none;
+    font-weight: bold;
+}
+
+h6 {
+    font-size: &dtml-fontSmallSize;;
+    border-bottom: none;
+    font-weight: bold;
+}
+
+ul {
+    line-height: 1.5em;
+    margin: 0.5em 0 0 1.5em;
+    padding: 0;
+    list-style-image: url(&dtml-portal_url;/bullet.gif);
+    list-style-type: square;
+}
+
+ol {
+    line-height: 1.5em;
+    margin: 0.5em 0 0 2.5em;
+    padding: 0;
+    list-style-image: none;
+}
+
+li {
+    margin-bottom: 0.5em;
+}
+
+dt {
+    font-weight: bold;
+}
+
+dd {
+    line-height: 1.5em;
+    margin-bottom: 1em;
+}
+
+fieldset {
+    border: &dtml-borderWidth; &dtml-borderStyle; &dtml-globalBorderColor;;
+    margin: 1em 0em 1em 0em;
+    padding: 0em 1em 1em 1em;
+    line-height: 1.5em;
+    width: auto;
+}
+legend {
+    background: &dtml-backgroundColor;;
+    padding: 0.5em;
+    font-size: 90%;
+}
+
+form {
+    border: none;
+    margin: 0;
+}
+
+label {
+    font-weight: bold;
+}
+
+textarea {
+    font: 100% Monaco, "Courier New", Courier, monospace;
+    border: &dtml-borderWidth; solid &dtml-globalBorderColor;;
+    color: &dtml-inputFontColor;;
+    background: White url(&dtml-portal_url;/input_background.gif) repeat-x;
+    width: 100%;
+}
+
+input {
+    font-family: <dtml-var fontFamily>;
+    border: &dtml-borderWidth; solid &dtml-globalBorderColor;;
+    color: &dtml-inputFontColor;;
+    vertical-align: middle;
+    background: White url(&dtml-portal_url;/input_background.gif) repeat-x;
+}
+select {
+    border: &dtml-borderWidth; solid &dtml-globalBorderColor;;
+    color: &dtml-inputFontColor;;
+    background-color: White;
+    vertical-align: top;
+}
+abbr, acronym, .explain {
+    border-bottom: &dtml-borderWidth; dotted &dtml-fontColor;;
+    color: &dtml-fontColor;;
+    background-color: transparent;
+    cursor: help;
+}
+q {
+    font-family: Baskerville, Georgia, serif;
+    font-style: italic;
+    font-size: 120%;
+}
+blockquote {
+    padding-left: 0.5em;
+    margin-left: 0;
+    border-left: 4px solid &dtml-globalBorderColor;;
+    color: &dtml-discreetColor;;
+}
+code {
+    font-family: Monaco, "Courier New", Courier, monospace;
+    font-size: 120%;
+    color: &dtml-fontColor;;
+    background-color: &dtml-globalBackgroundColor;;
+    padding: 0 0.1em;
+}
+pre {
+    font-family: Monaco, "Courier New", Courier, monospace;
+    font-size: 100%;
+    padding: 1em;
+    border: &dtml-borderWidth; &dtml-borderStyle; &dtml-globalBorderColor;;
+    color: &dtml-fontColor;;
+    background-color: &dtml-globalBackgroundColor;;
+    overflow: auto;
+}
+
+ins {
+    color: green;
+    text-decoration: none;
+}
+
+del {
+    color: red;
+    text-decoration: line-through;
+}
+
+/* Helper element to work with CSS floats */
+
+.visualClear {
+    display: block;
+    clear: both;
+}
+
+/* Hiding helper elements for old browsers */
+
+.netscape4 {
+    display: none;
+}
+
+
+/* </dtml-with> */
/cvs/cluster/conga/luci/plone-custom/colophon,v  -->  standard output
revision 1.1
--- conga/luci/plone-custom/colophon
+++ -	2006-07-26 16:55:37.866110000 +0000
@@ -0,0 +1,12 @@
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xml:lang="en" lang="en"
+      i18n:domain="plone">
+
+  <head><title></title></head>
+  <body>
+
+    <div id="portal-colophon" metal:define-macro="colophon" i18n:domain="plone">
+    </div>
+
+  </body>
+</html>
/cvs/cluster/conga/luci/plone-custom/default_error_message_CUSTOM,v  -->  standard output
revision 1.1
--- conga/luci/plone-custom/default_error_message_CUSTOM
+++ -	2006-07-26 16:55:37.951052000 +0000
@@ -0,0 +1,5 @@
+<html>
+
+Sorry, some internal error has occured :(
+
+</html>
/cvs/cluster/conga/luci/plone-custom/document_edit_form_TEST,v  -->  standard output
revision 1.1
--- conga/luci/plone-custom/document_edit_form_TEST
+++ -	2006-07-26 16:55:38.271118000 +0000
@@ -0,0 +1,185 @@
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+      lang="en"
+      metal:use-macro="here/main_template/macros/master"
+      i18n:domain="plone">
+
+  <body>
+
+    <div metal:fill-slot="main"
+         tal:define="errors options/state/getErrors;
+                     editor python:member.getProperty('wysiwyg_editor','None');
+                     wysiwyg python:test(editor and editor!='None', editor, 'None');
+                     lockable python:hasattr(here, 'wl_isLocked');
+                     isLocked python:lockable and here.wl_isLocked();">
+
+      <h1 i18n:translate="heading_edit_item">
+        Edit
+        <span i18n:name="itemtype">
+          <span i18n:translate=""
+                tal:content="python:here.getTypeInfo().Title()"
+                tal:omit-tag="">Item type</span>
+        </span>
+      </h1>
+
+      <p i18n:translate="description_edit_document">
+        Fill in the details of this document.
+      </p>
+
+      <form name="edit_form"
+            action="."
+            method="post"
+            enctype="multipart/form-data"
+            tal:attributes="action string:${here/getId}/${template/getId}" >
+
+        <fieldset>
+
+          <legend i18n:translate="legend_document_details">Document Details</legend>
+
+          <div class="field"
+               tal:condition="python:site_properties.getProperty('visible_ids', None)"
+               tal:define="error errors/id | nothing;
+                           id python:request.get('id', test(here.show_id(),here.getId(),''));"
+               tal:attributes="class python:test(error, 'field error', 'field')">
+
+            <label for="id" i18n:translate="label_short_name">Short Name</label>
+
+            <div class="formHelp" i18n:translate="help_shortname">
+                   Short Name is part of the item's web address. 
+		           For accessibility reasons, do not use spaces, upper case, 
+                   underscores, or special characters.
+            </div>
+
+            <div tal:content="error">Validation error output</div>
+
+            <input type="text"
+                   id="id"
+                   name="id"
+                   value=""
+                   tal:attributes="value id"
+                   />
+
+          </div>
+
+          <input type="hidden"
+                 name="id"
+                 tal:condition="python:not site_properties.getProperty('visible_ids', '')"
+                 tal:attributes="value python:request.get('id', here.getId())"
+                 />
+
+          <div class="field"
+               tal:define="error errors/title|nothing;
+                           Title request/title | here/Title;"
+               tal:attributes="class python:test(error, 'field error', 'field')">
+
+            <label for="title" i18n:translate="label_title">Title</label>
+
+            <span class="fieldRequired" title="Required"
+                  i18n:attributes="title title_required;"
+                  i18n:translate="label_required">(Required)</span>
+
+                  <div tal:content="error">Validation error output</div>
+
+                  <input type="text"
+                         id="title"
+                         name="title"
+                         value=""
+                         tal:attributes="value Title;"
+                         />
+
+          </div>
+
+          <div class="field"
+               tal:define="description request/description | here/Description ">
+
+            <label for="description" 
+                   i18n:translate="label_description">Description</label>
+
+            <div class="formHelp" i18n:translate="help_description">
+              A brief description of the item.
+            </div>
+
+            <textarea id="description"
+                      name="description"
+                      tal:content="description">
+              Description
+            </textarea>
+          </div>
+
+          <div class="field"
+               tal:define="text python:request.get('text', getattr(here,'text',''));
+                           cooked_text python:request.get('text',getattr(here,'cooked_text',''))">
+
+            <label for="text" i18n:translate="label_body_text">Body Text</label>
+
+            <tal:editor define="inputname  string:text;
+                                formname   string:edit_form;
+                                inputvalue text;
+                                cooked_inputvalue cooked_text;">
+              <div metal:use-macro="here/wysiwyg_support/macros/wysiwygEditorBox">
+                The WYSIWYG code
+              </div>
+            </tal:editor>
+
+            <div metal:use-macro="here/wysiwyg_support/macros/textFormatSelector">
+              Format box, if needed
+            </div>
+
+          </div>
+
+          <div class="field"
+               tal:define="error errors/file|nothing;"
+               tal:attributes="class python:test(error, 'field error', 'field')">
+
+            <label for="file" i18n:translate="label_upload_contents_optional">Upload contents (optional)</label>
+
+            <div class="formHelp" i18n:translate="help_uploads">
+              Uploaded files will replace the body text entered above.
+            </div>
+
+            <div tal:content="error">Validation error output</div>
+
+            <input type="file"
+                   id="file"
+                   name="file"
+                   value=""
+                   />
+          </div>
+
+
+          <div class="formControls"
+               tal:define="process_creation request/process_creation|nothing;">
+
+            <img src="" class="context"
+                   tal:define="locked portal_object/lock_icon.gif;"
+                   tal:condition="isLocked"
+                   tal:replace="structure python:locked.tag(title='This item is locked')"
+                   alt="Object locked"
+                   i18n:attributes="alt"/>
+
+            <input class="context"
+                   type="submit"
+                   name="form.button.Save"
+                   value="Save"
+                   i18n:attributes="value label_save;"
+                   tal:attributes="disabled python:test(isLocked, 'disabled', None);" />
+
+            <input class="standalone"
+                   type="submit"
+                   name="form.button.Cancel"
+                   value="Cancel"
+                   i18n:attributes="value label_cancel;" />
+          </div>
+        </fieldset>
+
+        <input type="hidden" name="form.submitted" value="1" />
+
+      </form>
+
+      <div metal:use-macro="here/document_byline/macros/byline">
+        Get the byline - contains details about author and modification date.
+      </div>
+
+    </div>
+
+  </body>
+</html>
/cvs/cluster/conga/luci/plone-custom/dropdown.js_TEST,v  -->  standard output
revision 1.1
--- conga/luci/plone-custom/dropdown.js_TEST
+++ -	2006-07-26 16:55:38.352754000 +0000
@@ -0,0 +1,170 @@
+/*
+ * This is the code for the dropdown menus. It uses the following markup:
+ *
+ * <dl class="actionMenu" id="uniqueIdForThisMenu">
+ *   <dt class="actionMenuHeader">
+ *     <!-- The following a-tag needs to be clicked to dropdown the menu -->
+ *     <a href="some_destination">A Title</a>
+ *   </dt>
+ *   <dd class="actionMenuContent">
+ *     <!-- Here can be any content you want -->
+ *   </dd>
+ * </dl>
+ *
+ * When the menu is toggled, then the dl with the class actionMenu will get an
+ * additional class which switches between 'activated' and 'deactivated'.
+ * You can use this to style it accordingly, for example:
+ *
+ * .actionMenu.activated {
+ *   display: block;
+ * }
+ *
+ * .actionMenu.deactivated {
+ *   display: none;
+ * }
+ *
+ * When you click somewhere else than the menu, then all open menus will be
+ * deactivated. When you move your mouse over the a-tag of another menu, then
+ * that one will be activated and all others deactivated. When you click on a
+ * link inside the actionMenuContent element, then the menu will be closed and
+ * the link followed.
+ *
+ * This file uses functions from register_function.js, cssQuery.js and
+ * nodeutils.js.
+ *
+ */
+
+function isActionMenu(node) {
+    if (hasClassName(node, 'actionMenu')) {
+        return true;
+    }
+    return false;
+};
+
+function hideAllMenus() {
+    var menus = cssQuery('dl.actionMenu');
+    for (var i=0; i < menus.length; i++) {
+        replaceClassName(menus[i], 'activated', 'deactivated', true);
+    }
+};
+
+function toggleMenuHandler(event) {
+    if (!event) var event = window.event; // IE compatibility
+
+    // terminate if we hit a non-compliant DOM implementation
+    // returning true, so the link is still followed
+    if (!W3CDOM){return true;}
+
+    var container = findContainer(this, isActionMenu);
+    if (!container) {
+        return true;
+    }
+
+    // check if the menu is visible
+    if (hasClassName(container, 'activated')) {
+        // it's visible - hide it
+        replaceClassName(container, 'activated', 'deactivated', true);
+    } else {
+        // it's invisible - make it visible
+        replaceClassName(container, 'deactivated', 'activated', true);
+    }
+
+    return false;
+};
+
+function hideMenusHandler(event) {
+    if (!event) var event = window.event; // IE compatibility
+
+    hideAllMenus();
+
+    // we want to follow this link
+    return true;
+};
+
+function actionMenuDocumentMouseDown(event) {
+    if (!event) var event = window.event; // IE compatibility
+
+    if (event.target)
+        targ = event.target;
+    else if (event.srcElement)
+        targ = event.srcElement;
+
+    var container = findContainer(targ, isActionMenu);
+    if (container) {
+        // targ is part of the menu, so just return and do the default
+        return true;
+    }
+
+    hideAllMenus();
+
+    return true;
+};
+
+function actionMenuMouseOver(event) {
+    if (!event) var event = window.event; // IE compatibility
+
+    if (!this.tagName && (this.tagName == 'A' || this.tagName == 'a')) {
+        return true;
+    }
+
+    var container = findContainer(this, isActionMenu);
+    if (!container) {
+        return true;
+    }
+    var menu_id = container.id;
+
+    var switch_menu = false;
+    // hide all menus
+    var menus = cssQuery('dl.actionMenu');
+    for (var i=0; i < menus.length; i++) {
+        var menu = menus[i]
+        // check if the menu is visible
+        if (hasClassName(menu, 'activated')) {
+            switch_menu = true;
+        }
+        // turn off menu when it's not the current one
+        if (menu.id != menu_id) {
+            replaceClassName(menu, 'activated', 'deactivated', true);
+        }
+    }
+
+    if (switch_menu) {
+        var menu = cssQuery('#'+menu_id)[0];
+        if (menu) {
+            replaceClassName(menu, 'deactivated', 'activated', true);
+        }
+    }
+
+    return true;
+};
+
+function initializeMenus() {
+    // terminate if we hit a non-compliant DOM implementation
+    if (!W3CDOM) {return false;}
+
+    document.onmousedown = actionMenuDocumentMouseDown;
+
+    hideAllMenus();
+
+    // add toggle function to header links
+    var menu_headers = cssQuery('dl.actionMenu > dt.actionMenuHeader > a');
+    for (var i=0; i < menu_headers.length; i++) {
+        var menu_header = menu_headers[i];
+
+        menu_header.onclick = toggleMenuHandler;
+        menu_header.onmouseover = actionMenuMouseOver;
+    }
+
+    // add hide function to all links in the dropdown, so the dropdown closes
+    // when any link is clicked
+    var menu_contents = cssQuery('dl.actionMenu > dd.actionMenuContent');
+    for (var i=0; i < menu_contents.length; i++) {
+        menu_contents[i].onclick = hideMenusHandler;
+    }
+
+    // uncomment to enable sorting of elements
+    //var nodes = cssQuery('#objectMenu > dd.actionMenuContent li');
+    //sortNodes(nodes, getInnerTextFast);
+};
+
+registerPloneFunction(initializeMenus);
/cvs/cluster/conga/luci/plone-custom/failsafe_login_form,v  -->  standard output
revision 1.1
--- conga/luci/plone-custom/failsafe_login_form
+++ -	2006-07-26 16:55:38.436151000 +0000
@@ -0,0 +1,152 @@
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
+      i18n:domain="plone">
+<head>
+    <script type="text/javascript" tal:attributes="src python:context.portal_url()+'/login.js'" />
+</head>
+
+<body>
+
+<div tal:define="checkPermission nocall:here/portal_membership/checkPermission;
+                 actions python:context.portal_actions.listFilteredActionsFor(context);
+                 Iterator python:modules['Products.CMFPlone'].IndexIterator;
+                 tabindex python:Iterator(pos=30000);
+                 auth nocall:here/cookie_authentication|nothing;
+                 came_from request/came_from|request/HTTP_REFERER|nothing;
+                 came_from python:test(here.portal_url.isURLInPortal(came_from), came_from, None);
+                 ztutils modules/ZTUtils;
+                 errors options/state/getErrors;">
+
+<h1 i18n:translate="heading_sign_in">Please log in</h1>
+
+<p i18n:translate="description_sign_in">
+To access this part of the site, you need to log in with your user name and password.
+</p>
+
+<div id="enable_cookies_message" i18n:translate="enable_cookies_message" class="portalMessage" style="display:none">
+  Cookies are not enabled. You must <span i18n:name="enable_cookies">
+  <a href="enabling_cookies" i18n:translate="label_enable_cookies">enable cookies</a></span> before you can log in.
+</div>
+
+<div tal:condition="python: not auth" i18n:translate="login_form_disabled">
+    While cookie authentication is disabled, cookie-based login is not available.
+</div>
+
+<form tal:attributes="action python:context.absolute_url()+'/'+template.id"
+      method="post"
+      id="login_form"
+      tal:condition="python:auth">
+
+    <fieldset tal:define="ac_name auth/name_cookie;
+	                  ac_password auth/pw_cookie;
+	                  ac_persist auth/persist_cookie">
+
+        <legend i18n:translate="legend_account_details">Account details</legend>
+
+        <input type="hidden"
+            name="came_from"
+            value=""
+	    tal:attributes="value came_from" />
+
+        <input type="hidden" name="form.submitted" value="1" />
+        <input type="hidden" name="js_enabled" id="js_enabled" value="0" />
+        <input type="hidden" name="cookies_enabled" id="cookies_enabled" value="" />
+        <input type="hidden" name="login_name" id="login_name" value="" />
+        <input type="hidden" name="pwd_empty" id="pwd_empty" value="0" />
+
+        <div class="field"
+             tal:define="error python:errors.get(ac_name, None);
+                         value python:request.get('login_name', request.get(ac_name, None));"
+             tal:attributes="class python:test(error, 'field error', 'field')">
+
+            <label i18n:translate="label_login_name"
+                   tal:attributes="for ac_name">Login Name</label>
+
+            <div i18n:translate="help_login_name_caps"
+                 class="formHelp">
+    		Login names are case sensitive, make sure the caps lock key is not enabled.
+            </div>
+
+            <div tal:content="error">Validation error output</div>
+
+            <input type="text"
+                   size="15"
+                   tabindex=""
+                   tal:attributes="name ac_name;
+                                   id ac_name;
+                                   value value;
+                                   tabindex tabindex/next;"
+                   />
+
+	</div>
+
+	<div class="field"
+             tal:define="error python:errors.get(ac_password, None);"
+             tal:attributes="class python:test(error, 'field error', 'field')">
+
+            <label i18n:translate="label_password"
+                   tal:attributes="for ac_password">Password</label>
+
+            <div class="formHelp">
+                <div i18n:translate="help_capslock_password">
+                    Case sensitive, make sure caps lock is not enabled.
+                </div>
+            </div>
+
+            <div tal:content="error">Validation error output</div>
+
+            <input type="password"
+                   size="15"
+                   tabindex=""
+                   tal:attributes="name ac_password;
+                                   id ac_password;
+                                   tabindex tabindex/next;"
+                   />
+	</div>
+
+        <div class="field">
+
+            <input type="checkbox"
+                   class="noborder formRememberName"
+                   value="1"
+                   checked="checked"
+                   id="cb_remember"
+                   tabindex=""
+                   tal:attributes="name ac_persist;
+                                   tabindex tabindex/next;
+                                   checked python:request.get(ac_name, '') and 'checked' or None;"
+                   />
+
+            <label for="cb_remember" i18n:translate="label_remember_my_name">Remember my name.</label>
+
+            <div i18n:translate="help_remember_my_name"
+                 class="formHelp">
+                Check this to have your user name filled in automatically when you log in later.
+            </div>
+
+        </div>
+
+        <div class="formControls">
+
+            <input class="context"
+                   tabindex=""
+                   type="submit"
+                   name="submit"
+                   value="Log in"
+                   i18n:attributes="value label_log_in;"
+                   tal:attributes="tabindex tabindex/next;
+	                           onclick string:javascript:return setLoginVars('$ac_name','login_name','$ac_password','pwd_empty','js_enabled','cookies_enabled');"
+                   />
+
+        </div>
+
+        <p i18n:translate="remember_to_log_out">
+            Please log out or exit your browser when you're done.
+        </p>
+
+    </fieldset>
+
+</form>
+</div>
+
+</body>
+</html>
/cvs/cluster/conga/luci/plone-custom/footer,v  -->  standard output
revision 1.1
--- conga/luci/plone-custom/footer
+++ -	2006-07-26 16:55:38.520401000 +0000
@@ -0,0 +1,31 @@
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<body>
+<div id="portal-footer" metal:define-macro="portal_footer">
+
+<p>
+    <span i18n:translate="description_copyright" tal:omit-tag="">
+    The 
+    <span>
+        <a href="http://redhat.com">Conga Cluster and Storage Management System</a>
+    </span>
+    is Copyright
+    <acronym title="Copyright" i18n:name="copyright" i18n:attributes="title title_copyright;">©</acronym>
+    2000-<span i18n:name="current_year" 
+               tal:define="now modules/DateTime/DateTime" 
+               tal:content="now/year" />
+    by <a href="http://redhat.com/Conga">Red Hat, Inc</a>
+    </span>
+</p>
+
+<p>
+    <span i18n:translate="description_license">
+    Distributed under the 
+        <span i18n:name="license">
+            <a href="http://creativecommons.org/licenses/GPL/2.0/" i18n:translate="label_gnu_gpl_licence">GNU GPL license</a>
+        </span>.
+    </span>
+</p>
+
+</div>
+</body>
+</html>
\ No newline at end of file
/cvs/cluster/conga/luci/plone-custom/global_searchbox,v  -->  standard output
revision 1.1
--- conga/luci/plone-custom/global_searchbox
+++ -	2006-07-26 16:55:38.602568000 +0000
@@ -0,0 +1,56 @@
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
+      i18n:domain="plone">
+
+<body>
+
+<!-- THE SEARCHBOX DEFINITION -->
+<div id="portal-searchbox" metal:define-macro="quick_search" tal:condition="not:isAnon">
+    <form name="searchform"
+          action="search"
+          tal:define="livesearch site_properties/enable_livesearch|nothing"
+          tal:attributes="action string:${portal_url}/search;
+                          onsubmit python:test(livesearch==True,'return liveSearchSubmit()','')"
+          style="white-space:nowrap">
+
+        <label for="searchGadget" class="hiddenStructure"
+                    i18n:translate="text_search">Search Site</label>
+
+        <div class="LSBox">
+        <input id="searchGadget"
+               tabindex=""
+               name="SearchableText"
+               type="text"
+               size="15"
+               value=""
+               title="Search Site"
+               accesskey="4"
+               i18n:attributes="title title_search_site;"
+               tal:attributes="value request/SearchableText|nothing;
+                               tabindex tabindex/next"
+               class="visibility:visible" />
+
+        <input class="searchButton"
+               type="submit"
+               tabindex=""
+               value="Search"
+               tal:attributes="tabindex tabindex/next"
+               i18n:attributes="value label_search;" />
+
+        <div class="LSResult" id="LSResult" style=""><div class="LSShadow" id="LSShadow"></div></div>
+        </div>
+    </form>
+
+    <div id="portal-advanced-search"
+         class="hiddenStructure">
+        <a href="#"
+           tal:attributes="href string:$portal_url/search_form"
+           i18n:translate="label_advanced_search"
+           accesskey="5">
+            Advanced Search…
+        </a>
+    </div>
+
+</div>
+
+</body>
+</html>
/cvs/cluster/conga/luci/plone-custom/highlightsearchterms.js_TEST,v  -->  standard output
revision 1.1
--- conga/luci/plone-custom/highlightsearchterms.js_TEST
+++ -	2006-07-26 16:55:38.683685000 +0000
@@ -0,0 +1,79 @@
+function highlightTermInNode(node, word) {
+    var contents = node.nodeValue;
+    var index = contents.toLowerCase().indexOf(word.toLowerCase());
+    if (index < 0){return false};
+
+    var parent = node.parentNode;
+    if (parent.className != "highlightedSearchTerm") {
+        // make 3 shiny new nodes
+        var hiword = document.createElement("span");
+        hiword.className = "highlightedSearchTerm";
+        hiword.appendChild(document.createTextNode(contents.substr(index, word.length)));
+        parent.insertBefore(document.createTextNode(contents.substr(0, index)), node);
+        parent.insertBefore(hiword, node);
+        parent.insertBefore(document.createTextNode(contents.substr(index+word.length)), node);
+        parent.removeChild(node);
+    }
+}
+
+function highlightSearchTerms(terms, startnode) {
+    // terminate if we hit a non-compliant DOM implementation
+    if (!W3CDOM){return false};
+    if (!terms){return false};
+    if (!startnode){return false};
+
+    for (var term_index=0; term_index < terms.length; term_index++) {
+        // don't highlight reserved catalog search terms
+        var term = terms[term_index];
+        var term_lower = term.toLowerCase();
+        if (term_lower != 'not'
+            && term_lower != 'and'
+            && term_lower != 'or') {
+            walkTextNodes(startnode, highlightTermInNode, term);
+        }
+    }
+}
+
+function getSearchTermsFromURI(uri) {
+    var query;
+    if (typeof decodeURI != 'undefined') {
+        query = decodeURI(uri);
+    } else if (typeof unescape != 'undefined') {
+        // _robert_ ie 5 does not have decodeURI 
+        query = unescape(uri);
+    } else {
+        // we just try to be lucky, for single words this will still work
+    }
+    var result = new Array();
+    if (window.decodeReferrer) {
+        var referrerSearch = decodeReferrer();
+        if (null != referrerSearch && referrerSearch.length > 0) {
+            result = referrerSearch;
+        }
+    }
+    var qfinder = new RegExp("searchterm=([^&]*)", "gi");
+    var qq = qfinder.exec(query);
+    if (qq && qq[1]) {
+        var terms = qq[1].replace(/\+/g,' ').split(/\s+/);
+        for (var i=0; i < terms.length; i++) {
+            if (terms[i] != '') {
+                result.push(terms[i]);
+            }
+        }
+        return result;
+    }
+    return result.length == 0 ? false : result;
+}
+
+function highlightSearchTermsFromURI() {
+    // terminate if we hit a non-compliant DOM implementation
+    if (!W3CDOM){return false};
+
+    // search-term-highlighter function --  Geir Bækholt
+    var terms = getSearchTermsFromURI(window.location.search);
+    // make sure we start the right place so we don't higlight menuitems or breadcrumb
+    var contentarea = getContentArea();
+    highlightSearchTerms(terms, contentarea);
+}
+
+registerPloneFunction(highlightSearchTermsFromURI);
/cvs/cluster/conga/luci/plone-custom/login.js_TEST,v  -->  standard output
revision 1.1
--- conga/luci/plone-custom/login.js_TEST
+++ -	2006-07-26 16:55:38.764417000 +0000
@@ -0,0 +1,74 @@
+// Functions used by login pages
+
+function cookiesEnabled() {
+  // Test whether cookies are enabled by attempting to set a cookie and then change its value
+  // set test cookie
+  var c = "areYourCookiesEnabled=0";
+  document.cookie = c;
+  var dc = document.cookie;
+  // cookie not set?  fail
+  if (dc.indexOf(c) == -1) return 0;
+  // change test cookie
+  c = "areYourCookiesEnabled=1";
+  document.cookie = c;
+  dc = document.cookie;
+  // cookie not changed?  fail
+  if (dc.indexOf(c) == -1) return 0;
+  // delete cookie
+  document.cookie = "areYourCookiesEnabled=; expires=Thu, 01-Jan-70 00:00:01 GMT";
+  return 1;
+}
+
+function setLoginVars(user_name_id, alt_user_name_id, password_id, empty_password_id, js_enabled_id, cookies_enabled_id) {
+  // Indicate that javascript is enabled, set cookie status, copy username and password length info to 
+  // alternative variables since these vars are removed from the request by zope's authentication mechanism.
+  if (js_enabled_id) {
+    el = document.getElementById(js_enabled_id);
+    if (el) { el.value = 1; }
+  }
+  if (cookies_enabled_id) {
+    el = document.getElementById(cookies_enabled_id);
+    // Do a fresh cookies enabled test every time we press the login button
+    //   so that we are up to date in case the user enables cookies after seeing
+    //   the cookies message.
+    if (el) { el.value = cookiesEnabled(); } 
+  }
+  if (user_name_id && alt_user_name_id) {
+    user_name = document.getElementById(user_name_id)
+    alt_user_name = document.getElementById(alt_user_name_id)
+    if (user_name && alt_user_name) {
+       alt_user_name.value = user_name.value;
+    } 
+  }
+  if (password_id && empty_password_id) {
+    password = document.getElementById(password_id)
+    empty_password = document.getElementById(empty_password_id)
+    if (password && empty_password) {
+       if (password.value.length==0) {
+          empty_password.value = '1';
+       } else {
+          empty_password.value = '0';
+       }
+    }
+  }
+  return 1;
+}
+
+function showCookieMessage(msg_id) {
+  // Show the element with the given id if cookies are not enabled
+  msg = document.getElementById(msg_id)
+  if (msg) {
+     if (cookiesEnabled()) {
+        msg.style.display = 'none';
+     } else {
+        msg.style.display = 'block';
+     }
+  }
+}
+
+function showEnableCookiesMessage() {
+  // Show the element with the id 'enable_cookies_message' if cookies are not enabled
+  showCookieMessage('enable_cookies_message')
+}
+// Call showEnableCookiesMessage after the page loads
+registerPloneFunction(showEnableCookiesMessage);
/cvs/cluster/conga/luci/plone-custom/login_failed,v  -->  standard output
revision 1.1
--- conga/luci/plone-custom/login_failed
+++ -	2006-07-26 16:55:38.952488000 +0000
@@ -0,0 +1,55 @@
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+      lang="en"
+      metal:use-macro="here/main_template/macros/master"
+      i18n:domain="plone">
+
+<body>
+
+<div metal:fill-slot="main">
+  <div metal:define-macro="login_failed"
+       tal:define="login_name python:request.get('login_name', '');">
+
+    <h1 i18n:translate="heading_sign_in_failure_auth">Sign-in failure</h1>
+
+    <p i18n:translate="description_not_logged_in_username_incorrect">
+      You are not currently logged in. Your user name and/or password
+      may be incorrect.
+    </p>
+
+    <p tal:condition="python: login_name == 'admin'">
+If you have forgotten your password, you can reset the password by logging in to the server as root and running the command <code>luci_admin password</code>.
+    </p>
+
+    <p i18n:translate="description_enable_cookies">
+      If your user name and password are correct, the problem may be that
+      your browser is not configured to <span i18n:name="link">
+      <a href="enabling_cookies"
+        i18n:translate="description_login_fail_enable_cookies">
+          accept cookies
+      </a></span>.
+    </p>
+
+    <p i18n:translate="description_still_failure">
+      If you are still reaching this page after correctly configuring
+      your browser, here are some possible reasons:
+    </p>
+
+    <ul>
+      <li i18n:translate="description_still_failure_reason1">
+        You may be running web filtering software that
+        disables cookies.  If so, you will need to configure the
+        software so that it enables you to accept cookies from
+        <span tal:content="utool" tal:omit-tag="" i18n:name="url">url</span>
+      </li>
+      <li i18n:translate="description_still_failure_reason2">
+        Your computer may be behind a firewall or proxy server
+        that prevents cookies from being sent to or from your browser.
+        If so, you will need to ask your systems administrator if the
+        problem can be fixed.
+      </li>
+    </ul>
+  </div>
+</div>
+
+</body>
+</html>
/cvs/cluster/conga/luci/plone-custom/login_form,v  -->  standard output
revision 1.1
--- conga/luci/plone-custom/login_form
+++ -	2006-07-26 16:55:39.036214000 +0000
@@ -0,0 +1,165 @@
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
+      metal:use-macro="here/main_template/macros/master"
+      i18n:domain="plone">
+
+<head>
+    <script type="text/javascript" metal:fill-slot="javascript_head_slot">
+    </script>
+    <metal:block fill-slot="top_slot"
+                 tal:define="dummy python:request.set('disable_border',1)" />
+    </head>
+
+<body>
+
+<div metal:fill-slot="main"
+     tal:define="auth nocall:here/cookie_authentication|nothing;
+                 came_from request/came_from|request/HTTP_REFERER|nothing;
+                 came_from python:test(utool.isURLInPortal(came_from), came_from, None);
+                 errors options/state/getErrors;">
+
+<h1 tal:condition="python:here.siteIsSetup()" i18n:translate="heading_sign_in">Please log in</h1>
+
+<p tal:condition="python:here.siteIsSetup()" i18n:translate="description_sign_in">
+To access this part of the site, you need to log in with your user name and password.
+</p>
+
+<div id="enable_cookies_message" i18n:translate="enable_cookies_message" class="portalMessage" style="display:none">
+  Cookies are not enabled. You must <span i18n:name="enable_cookies">
+  <a href="enabling_cookies" i18n:translate="label_enable_cookies">enable cookies</a></span> before you can log in.
+</div>
+
+<div tal:condition="python: not auth" i18n:translate="login_form_disabled">
+    While cookie authentication is disabled, cookie-based login is not available.
+</div>
+
+<div tal:omit-tag="" tal:condition="python: not here.siteIsSetup()">
+<h1>This site has not yet been initialized.</h1>
+<p>Please login to the server as root and run the command <code>luci_admin init</code> to initialize it.
+</div>
+
+<div style="margin-top:1em"
+  tal:define="ac_name auth/name_cookie;login_name python:request.get('login_name', request.get(ac_name, ''));"
+  tal:condition="python: errors and login_name == 'admin'" >
+If you have forgotten your password, you can reset the password by logging in to the server as root and running the command <code>luci_admin password</code>.
+</div> 
+
+
+
+<form tal:attributes="action python:context.absolute_url()+'/'+template.id"
+      method="post"
+      id="login_form"
+      tal:condition="python:auth and here.siteIsSetup()">
+
+    <fieldset tal:define="ac_name auth/name_cookie;
+                      ac_password auth/pw_cookie;
+                      ac_persist auth/persist_cookie;
+              login_name python:request.get('login_name', request.get(ac_name, ''));">
+
+        <legend i18n:translate="legend_account_details">Account details</legend>
+
+        <input type="hidden"
+            name="came_from"
+            value=""
+        tal:attributes="value came_from" />
+
+        <input type="hidden" name="form.submitted" value="1" />
+        <input type="hidden" name="js_enabled" id="js_enabled" value="0" />
+        <input type="hidden" name="cookies_enabled" id="cookies_enabled" value="" />
+        <input type="hidden" name="login_name" id="login_name" value="" />
+        <input type="hidden" name="pwd_empty" id="pwd_empty" value="0" />
+
+        <div class="field"
+             tal:define="error python:errors.get(ac_name, None);"
+             tal:attributes="class python:test(error, 'field error', 'field')">
+
+            <label i18n:translate="label_login_name"
+                   tal:attributes="for ac_name">Login Name</label>
+
+            <div i18n:translate="help_login_name_caps"
+                 class="formHelp">
+            Login names are case sensitive, make sure the caps lock key is not enabled.
+            </div>
+
+            <div tal:content="error">Validation error output</div>
+
+            <input type="text"
+                   size="15"
+                   tabindex=""
+                   tal:attributes="name ac_name;
+                                   id ac_name;
+                                   value login_name;
+                                   tabindex tabindex/next;"
+                   />
+
+    </div>
+
+    <div class="field"
+             tal:define="error python:errors.get(ac_password, None);"
+             tal:attributes="class python:test(error, 'field error', 'field')">
+            <label i18n:translate="label_password"
+                   tal:attributes="for ac_password">Password</label>
+
+            <div class="formHelp">
+                <div i18n:translate="help_capslock_password">
+                    Case sensitive, make sure caps lock is not enabled.
+                </div>
+            </div>
+
+            <div tal:content="error">Validation error output</div>
+
+            <input type="password"
+                   size="15"
+                   tabindex=""
+                   tal:attributes="name ac_password;
+                                   id ac_password;
+                                   tabindex tabindex/next;"
+                   />
+    </div>
+
+        <div class="field">
+
+            <input type="checkbox"
+                   class="noborder formRememberName"
+                   value="1"
+                   checked="checked"
+                   id="cb_remember"
+                   tabindex=""
+                   tal:attributes="name ac_persist;
+                                   tabindex tabindex/next;
+                                   checked python:request.get(ac_name, '') and 'checked' or None;"
+                   />
+
+            <label for="cb_remember" i18n:translate="label_remember_my_name">Remember my name.</label>
+
+            <div i18n:translate="help_remember_my_name"
+                 class="formHelp">
+                Check this to have your user name filled in automatically when you log in later.
+            </div>
+
+        </div>
+
+        <div class="formControls">
+
+            <input class="context"
+                   tabindex=""
+                   type="submit"
+                   name="submit"
+                   value="Log in"
+                   i18n:attributes="value label_log_in;"
+                   tal:attributes="tabindex tabindex/next;
+                               onclick string:javascript:return setLoginVars('$ac_name','login_name','$ac_password','pwd_empty','js_enabled','cookies_enabled');"
+                   />
+
+        </div>
+
+        <p i18n:translate="remember_to_log_out">
+            Please log out or exit your browser when you're done.
+        </p>
+
+    </fieldset>
+
+</form>
+</div>
+
+</body>
+</html>
/cvs/cluster/conga/luci/plone-custom/login_form_TEST,v  -->  standard output
revision 1.1
--- conga/luci/plone-custom/login_form_TEST
+++ -	2006-07-26 16:55:39.125829000 +0000
@@ -0,0 +1,178 @@
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
+      metal:use-macro="here/main_template/macros/master"
+      i18n:domain="plone">
+
+<head>
+    <script type="text/javascript" metal:fill-slot="javascript_head_slot">
+    </script>
+    <metal:block fill-slot="top_slot"
+                 tal:define="dummy python:request.set('disable_border',1)" />
+</head>
+
+<body>
+
+<div metal:fill-slot="main"
+     tal:define="auth nocall:here/cookie_authentication|nothing;
+                 came_from request/came_from|request/HTTP_REFERER|nothing;
+                 came_from python:test(utool.isURLInPortal(came_from), came_from, None);
+                 errors options/state/getErrors;">
+
+<h1 i18n:translate="heading_sign_in">Please log in</h1>
+
+<p i18n:translate="description_sign_in">
+To access this part of the site, you need to log in with your user name and password.
+</p>
+
+<p i18n:translate="description_no_account"
+   tal:define="join python:[a['url'] for a in actions['user'] if a['id']=='join']"
+   tal:condition="python: join and checkPermission('Add portal member', here)">
+
+If you do not have an account here, head over to the
+
+<span i18n:name="registration_form">
+    <a href=""
+       tal:define="join python:join.pop();
+                   join join;
+                   join python:join+test(join.find('?')==-1, '?', '&')+ztu.make_query(came_from=came_from);"
+       tal:attributes="href join"
+       i18n:translate="description_no_account_registration_linktext">
+        registration form</a></span>.
+
+</p>
+
+<div id="enable_cookies_message" i18n:translate="enable_cookies_message" class="portalMessage" style="display:none">
+  Cookies are not enabled. You must <span i18n:name="enable_cookies">
+  <a href="enabling_cookies" i18n:translate="label_enable_cookies">enable cookies</a></span> before you can log in.
+</div>
+
+<div tal:condition="python: not auth" i18n:translate="login_form_disabled">
+    While cookie authentication is disabled, cookie-based login is not available.
+</div>
+
+<form tal:attributes="action python:context.absolute_url()+'/'+template.id"
+      method="post"
+      id="login_form"
+      tal:condition="python:auth">
+
+    <fieldset tal:define="ac_name auth/name_cookie;
+                      ac_password auth/pw_cookie;
+                      ac_persist auth/persist_cookie;
+              login_name python:request.get('login_name', request.get(ac_name, ''));">
+
+        <legend i18n:translate="legend_account_details">Account details</legend>
+
+        <input type="hidden"
+            name="came_from"
+            value=""
+        tal:attributes="value came_from" />
+
+        <input type="hidden" name="form.submitted" value="1" />
+        <input type="hidden" name="js_enabled" id="js_enabled" value="0" />
+        <input type="hidden" name="cookies_enabled" id="cookies_enabled" value="" />
+        <input type="hidden" name="login_name" id="login_name" value="" />
+        <input type="hidden" name="pwd_empty" id="pwd_empty" value="0" />
+
+        <div class="field"
+             tal:define="error python:errors.get(ac_name, None);"
+             tal:attributes="class python:test(error, 'field error', 'field')">
+
+            <label i18n:translate="label_login_name"
+                   tal:attributes="for ac_name">Login Name</label>
+
+            <div i18n:translate="help_login_name_caps"
+                 class="formHelp">
+            Login names are case sensitive, make sure the caps lock key is not enabled.
+            </div>
+
+            <div tal:content="error">Validation error output</div>
+
+            <input type="text"
+                   size="15"
+                   tabindex=""
+                   tal:attributes="name ac_name;
+                                   id ac_name;
+                                   value login_name;
+                                   tabindex tabindex/next;"
+                   />
+
+    </div>
+
+    <div class="field"
+             tal:define="error python:errors.get(ac_password, None);"
+             tal:attributes="class python:test(error, 'field error', 'field')">
+
+            <label i18n:translate="label_password"
+                   tal:attributes="for ac_password">Password</label>
+
+            <div class="formHelp">
+                <div i18n:translate="help_capslock_password">
+                    Case sensitive, make sure caps lock is not enabled.
+                </div>
+                <div tal:condition="python:checkPermission('Mail forgotten password', here)"
+                     i18n:translate="help_password_retrieval">
+                    If you have forgotten your password,
+                    <span i18n:name="click_here">
+                        <a tal:attributes="href python:'mail_password_form?'+ztu.make_query(userid=login_name)"
+                           i18n:translate="label_click_here_to_retrieve">click here to retrieve it</a>
+                    </span>.
+                </div>
+            </div>
+
+            <div tal:content="error">Validation error output</div>
+
+            <input type="password"
+                   size="15"
+                   tabindex=""
+                   tal:attributes="name ac_password;
+                                   id ac_password;
+                                   tabindex tabindex/next;"
+                   />
+    </div>
+
+        <div class="field">
+
+            <input type="checkbox"
+                   class="noborder formRememberName"
+                   value="1"
+                   checked="checked"
+                   id="cb_remember"
+                   tabindex=""
+                   tal:attributes="name ac_persist;
+                                   tabindex tabindex/next;
+                                   checked python:request.get(ac_name, '') and 'checked' or None;"
+                   />
+
+            <label for="cb_remember" i18n:translate="label_remember_my_name">Remember my name.</label>
+
+            <div i18n:translate="help_remember_my_name"
+                 class="formHelp">
+                Check this to have your user name filled in automatically when you log in later.
+            </div>
+
+        </div>
+
+        <div class="formControls">
+
+            <input class="context"
+                   tabindex=""
+                   type="submit"
+                   name="submit"
+                   value="Log in"
+                   i18n:attributes="value label_log_in;"
+                   tal:attributes="tabindex tabindex/next;
+                               onclick string:javascript:return setLoginVars('$ac_name','login_name','$ac_password','pwd_empty','js_enabled','cookies_enabled');"
+                   />
+
+        </div>
+
+        <p i18n:translate="remember_to_log_out">
+            Please log out or exit your browser when you're done.
+        </p>
+
+    </fieldset>
+
+</form>
+</div>
+
+</body>
+</html>
/cvs/cluster/conga/luci/plone-custom/login_form_validate,v  -->  standard output
revision 1.1
--- conga/luci/plone-custom/login_form_validate
+++ -	2006-07-26 16:55:39.210468000 +0000
@@ -0,0 +1,50 @@
+## Controller Validator "login_form_validate"
+##bind container=container
+##bind context=context
+##bind namespace=
+##bind script=script
+##bind state=state
+##bind subpath=traverse_subpath
+##parameters=
+##title=Validate login
+##
+LOGIN_FAILED_MESSAGE = 'Login failed'  # TODO need a friendlier message here
+
+request = context.REQUEST
+js_enabled = request.get('js_enabled',0) # is javascript enabled?
+js_enabled = js_enabled=='1' or js_enabled==1
+cookies_enabled = request.get('cookies_enabled',0) # are cookies enabled?
+cookies_enabled = cookies_enabled=='1' or cookies_enabled==1
+
+if js_enabled and not cookies_enabled:
+    # auth cookie won't persist -- erase it so users aren't confused
+    context.portal_membership.immediateLogout()
+    state.set(status='enable_cookies', portal_status_message='You must enable cookies before you can log in')
+    return state
+
+mt=context.portal_membership
+if mt.isAnonymousUser():
+    if js_enabled: # javascript is enabled - we can diagnose the failure
+        auth = getattr(context, 'cookie_authentication', None) # using cookie authentication?
+        if auth:
+            user_name = request.get('login_name', None)
+            password_empty = request.get('pwd_empty', None)=='1'
+            ac_name = auth.name_cookie
+            ac_password = auth.pw_cookie
+
+            if not user_name:
+                # no user name
+                state.setError(ac_name, 'Please enter your login name.', 'login_name_required')
+            if password_empty:
+                state.setError(ac_password, 'Please enter your password.', 'password_required')
+            verify_login_name = context.portal_properties.site_properties.getProperty('verify_login_name', 0)
+            if user_name and verify_login_name:
+                if mt.getMemberById(user_name) is None:
+                    state.setError(ac_name, 'Authentication Error.', 'password_incorrect')
+                elif not password_empty:
+                    state.setError(ac_password, 'Authentication Error.', 'password_incorrect')
+        state.set(status='failure', portal_status_message=LOGIN_FAILED_MESSAGE)
+    else: # no javascript - do low tech login failure
+        state.set(status='failure_page', portal_status_message=LOGIN_FAILED_MESSAGE)
+
+return state
/cvs/cluster/conga/luci/plone-custom/login_initial,v  -->  standard output
revision 1.1
--- conga/luci/plone-custom/login_initial
+++ -	2006-07-26 16:55:39.305913000 +0000
@@ -0,0 +1,13 @@
+## Controller Python Script "login_initial"
+##bind container=container
+##bind context=context
+##bind namespace=
+##bind script=script
+##bind state=state
+##bind subpath=traverse_subpath
+##parameters=
+##title=Handle a user's initial login
+##
+# do anything that must be done during a user's initial login here
+state.set(status='login_change_password')
+return state
/cvs/cluster/conga/luci/plone-custom/login_next,v  -->  standard output
revision 1.1
--- conga/luci/plone-custom/login_next
+++ -	2006-07-26 16:55:39.392837000 +0000
@@ -0,0 +1,50 @@
+## Controller Python Script "login_next"
+##bind container=container
+##bind context=context
+##bind namespace=
+##bind script=script
+##bind state=state
+##bind subpath=traverse_subpath
+##parameters=
+##title=login
+##
+from DateTime import DateTime
+import ZTUtils
+
+REQUEST=context.REQUEST
+
+membership_tool=context.portal_membership
+if membership_tool.isAnonymousUser():
+    REQUEST.RESPONSE.expireCookie('__ac', path='/')
+    return state.set(status='failure', portal_status_message='Login failed')
+
+came_from = REQUEST.get('came_from', None)
+util = context.plone_utils
+
+# if we weren't called from something that set 'came_from' or if HTTP_REFERER
+# is the 'logged_out' page, return the default 'login_success' form
+if came_from is not None:
+    scheme, location, path, parameters, query, fragment = util.urlparse(came_from)
+    template_id = path.split('/')[-1]
+    if template_id in ['login', 'login_success', 'login_password', 'login_failed', 'login_form', 'logged_in', 'logged_out', 'registered', 'mail_password', 'mail_password_form', 'join_form', 'require_login', 'member_search_results']:
+        came_from = ''
+    # It is probably a good idea in general to filter out urls outside the portal.
+    # An added bonus: this fixes some problems with a Zope bug that doesn't
+    # properly unmangle the VirtualHostMonster stuff when setting ACTUAL_URL
+    if not context.portal_url.isURLInPortal(came_from):
+        came_from = ''
+came_from = '/luci/homebase/'
+js_enabled = REQUEST.get('js_enabled','1') != '0'
+if came_from and js_enabled:
+    # If javascript is not enabled, it is possible that cookies are not enabled.
+    # If cookies aren't enabled, the redirect will log the user out, and confusion
+    # may arise.  Redirect only if we know for sure that cookies are enabled.
+
+    # Add portal_status_message to the query string of the url we came from
+    query = context.create_query_string(query, portal_status_message='Welcome! You are now logged in.')
+    came_from = util.urlunparse((scheme, location, path, parameters, query, fragment))
+
+    REQUEST.RESPONSE.redirect(came_from)
+    
+state.set(came_from=came_from)
+return state
/cvs/cluster/conga/luci/plone-custom/login_password,v  -->  standard output
revision 1.1
--- conga/luci/plone-custom/login_password
+++ -	2006-07-26 16:55:39.508045000 +0000
@@ -0,0 +1,109 @@
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+      lang="en"
+      metal:use-macro="here/main_template/macros/master"
+      i18n:domain="plone">
+
+<body>
+
+<tal:block tal:condition="exists: here/portal_skins | nothing"
+           tal:replace="nothing">
+
+    <tal:block tal:condition="here/portal_skins/updateSkinCookie | nothing"
+       tal:define="dummy here/setupCurrentSkin" />
+
+</tal:block>
+
+<div metal:fill-slot="main"
+     tal:define="errors options/state/getErrors;">
+
+            <h1 i18n:translate="heading_welcome">Welcome!</h1>
+
+            <p>
+            <span i18n:translate="description_logged_in">
+                This is the first time that you've logged in to
+                <span tal:content="portal_properties/title" tal:omit-tag="" i18n:name="here">here</span>.
+            </span>
+
+            </p>
+
+            <p i18n:translate="description_use_form_to_change_password">
+            Please use the form below to change your password.
+            </p>
+
+            <form tal:attributes="action python:context.absolute_url()+'/'+template.id"
+                  name="change_password"
+                  method="post">
+
+                <fieldset>
+                <legend i18n:translate="legend_password_details">Password Details</legend>
+
+		    <input type="hidden" name="form.submitted" value="1" />
+		    <input type="hidden" name="initial_login" value="1" />
+                    <input type="hidden"
+                           name="came_from"
+                           value=""
+                           tal:define="came_from request/came_from|nothing"
+                           tal:condition="came_from"
+                           tal:attributes="value came_from"
+                           />
+    
+    
+		    <div class="field"
+             		 tal:define="error python:errors.get('password', None);"
+                         tal:attributes="class python:test(error, 'field error', 'field')">
+
+                        <label i18n:translate="label_new_password">New password</label>
+
+                        <div class="formHelp" i18n:translate="help_new_password">
+                        Enter your new password. Minimum 5 characters.
+                        </div>
+    
+                        <div tal:content="error">Validation error output</div>
+
+                        <input type="password"
+                               name="password"
+                               size="10"
+                               tabindex=""
+                               tal:attributes="tabindex tabindex/next;"
+                               />
+                    </div>
+    
+		    <div class="field"
+             		 tal:define="error python:errors.get('confirm', None);"
+                         tal:attributes="class python:test(error, 'field error', 'field')">
+
+                        <label i18n:translate="label_confirm_password">Confirm password</label>
+
+                        <div class="formHelp" i18n:translate="help_confirm_password">
+                            Re-enter the password. Make sure the passwords are identical.
+                        </div>
+    
+		        <div tal:content="error">Validation error output</div>
+
+                        <input type="password"
+                               name="confirm"
+                               size="10"
+                               tabindex=""
+                               tal:attributes="tabindex tabindex/next;"
+                               />
+                    </div>
+    
+                    <div class="formControls">
+                        <input class="standalone"
+                               type="submit"
+                               name="submit"
+                               value="Change Password"
+                               tabindex=""
+                               i18n:attributes="value label_change_password;"
+                               tal:attributes="tabindex tabindex/next;" />
+                    </div>
+    
+                </fieldset>
+            
+            </form>
+
+</div>
+
+</body>
+</html>
+
/cvs/cluster/conga/luci/plone-custom/login_success,v  -->  standard output
revision 1.1
--- conga/luci/plone-custom/login_success
+++ -	2006-07-26 16:55:39.614976000 +0000
@@ -0,0 +1,74 @@
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+      lang="en"
+      metal:use-macro="here/main_template/macros/master"
+      i18n:domain="plone">
+
+<head>
+    <metal:block fill-slot="top_slot"
+                 tal:define="dummy python:request.set('disable_border',1)" />
+</head>
+
+<body>
+
+<tal:block tal:condition="exists: here/portal_skins | nothing"
+           tal:replace="nothing">
+    <tal:block tal:condition="here/portal_skins/updateSkinCookie | nothing"
+               tal:define="dummy here/setupCurrentSkin" />
+</tal:block>
+
+<div metal:fill-slot="main">
+  <div tal:condition="not:isAnon">
+    <div tal:define="came_from request/came_from|nothing;
+                     initial_login request/initial_login|nothing;
+             js_enabled python:request.get('js_enabled','1')!='0';">
+
+      <h1 i18n:translate="heading_you_are_now_logged_in">You are now logged in</h1>
+
+      <p tal:condition="came_from">
+        <a href=""
+           tal:attributes="href came_from"
+           i18n:translate="label_login_continue">
+          Continue</a>
+      </p>
+
+      <p tal:condition="python:not came_from">
+        <a href=""
+           tal:attributes="href came_from"
+           i18n:translate="label_login_continue_to_home_page">
+          Continue to the
+          <span tal:content="portal/title" i18n:name="portal_title">
+              portal title
+          </span>
+          home page
+          </a>
+      </p>
+
+      <div tal:condition="not:js_enabled">
+         <p i18n:translate="description_javascript_advantage">
+            You can take fuller advantage of the features of this site
+            if you enable javascript in your browser. 
+         </p>
+
+         <p i18n:translate="description_enable_cookies_for_login">
+            Note: If you do not remain logged in after leaving this
+            page, it is because you need to
+            <span i18n:name="enable_cookies">
+                <a href="enabling_cookies"
+                   i18n:translate="label_enable_cookies">
+                    enable cookies
+                </a>
+            </span>
+            in your browser.
+         </p>
+      </div>
+
+    </div>
+  </div>
+  <div tal:condition="isAnon">
+    <div metal:use-macro="here/login_failed/macros/login_failed" />
+  </div>
+</div>
+
+</body>
+</html>
+
/cvs/cluster/conga/luci/plone-custom/logo.jpg,v  -->  standard output
revision 1.1
Binary files /cvs/cluster/conga/luci/plone-custom/logo.jpg and - differ
co: output error: Broken pipe
co aborted
/cvs/cluster/conga/luci/plone-custom/main_template,v  -->  standard output
revision 1.1
--- conga/luci/plone-custom/main_template
+++ -	2006-07-26 16:55:39.822498000 +0000
@@ -0,0 +1,200 @@
+<metal:page define-macro="master"><metal:doctype define-slot="doctype"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"></metal:doctype>
+<metal:block define-slot="top_slot" />
+<metal:block use-macro="here/global_defines/macros/defines" />
+
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xml:lang="en"
+      lang="en"
+      tal:attributes="lang language;
+                      xml:lang language">
+
+  <head metal:use-macro="here/header/macros/html_header">
+
+    <metal:fillbase fill-slot="base">
+      <metal:baseslot define-slot="base">
+        <base href="" tal:attributes="href here/renderBase" />
+      </metal:baseslot>
+    </metal:fillbase>
+
+    <metal:headslot fill-slot="head_slot"
+                    tal:define="lang language;
+                                charset site_properties/default_charset|string:utf-8">
+
+      <metal:cache use-macro="here/global_cache_settings/macros/cacheheaders">
+        Get the global cache headers located in global_cache_settings.
+      </metal:cache>
+
+      <metal:headslot define-slot="head_slot" />
+      <tal:comment replace="nothing"> A slot where you can insert elements in the header from a template </tal:comment>
+    </metal:headslot>
+
+    <metal:cssslot fill-slot="css_slot">
+      <tal:comment replace="nothing"> A slot where you can insert CSS in the header from a template </tal:comment>
+      <metal:cssslot define-slot="css_slot" />
+    </metal:cssslot>
+
+    <metal:javascriptslot fill-slot="javascript_head_slot">
+      <tal:comment replace="nothing"> A slot where you can insert javascript in the header from a template </tal:comment>
+      <metal:javascriptslot define-slot="javascript_head_slot" />
+    </metal:javascriptslot>
+  </head>
+
+  <body tal:attributes="class here/getSectionFromURL;
+                        dir python:test(isRTL, 'rtl', 'ltr')">
+    <div id="visual-portal-wrapper">
+
+      <div id="portal-top" i18n:domain="plone">
+
+        <div id="portal-header">
+          <a class="hiddenStructure"
+             accesskey="2"
+             tal:attributes="href string:${request/ACTUAL_URL}#documentContent"
+             i18n:translate="label_skiptocontent">Skip to content.</a>
+
+          <a class="hiddenStructure"
+             accesskey="6"
+             tal:attributes="href string:${request/ACTUAL_URL}#portlet-navigation-tree"
+             i18n:translate="label_skiptonavigation">Skip to navigation</a>
+
+             <div tal:condition="not:isAnon" metal:use-macro="here/global_siteactions/macros/site_actions">
+               Site-wide actions (Contact, Sitemap, Help, Style Switcher etc)
+             </div>
+
+             <div tal:condition="not:isAnon" metal:use-macro="here/global_searchbox/macros/quick_search">
+               The quicksearch box, normally placed at the top right
+             </div>
+
+             <a metal:use-macro="here/global_logo/macros/portal_logo">
+               The portal logo, linked to the portal root
+             </a>
+
+             <div tal:condition="not:isAnon" metal:use-macro="here/global_sections/macros/portal_tabs">
+               The global sections tabs. (Welcome, News etc)
+             </div>
+          </div>
+
+          <div metal:use-macro="here/global_personalbar/macros/personal_bar">
+             The personal bar. (log in, logout etc...)
+           </div>
+
+           <div tal:condition="not:isAnon" metal:use-macro="here/global_pathbar/macros/path_bar">
+             The breadcrumb navigation ("you are here")
+           </div>
+      </div>
+
+      <div class="visualClear"><!-- --></div>
+
+      <tal:comment replace="nothing">
+      The wrapper table. It contains the three columns. There's a table-less
+      alternative in the plone_tableless skin layer that you can use if you
+      prefer layouts that don't use tables.
+      </tal:comment>
+
+      <table id="portal-columns">
+        <tbody>
+          <tr>
+            <tal:comment replace="nothing"> Start of the left column </tal:comment>
+            <td id="portal-column-one"
+                metal:define-slot="column_one_slot"
+                tal:define="lccond1 sl;lccond2 isAnon" tal:condition="python:(lccond1 and not lccond2)">
+
+              <div class="visualPadding">
+                <metal:portlets define-slot="portlets_one_slot">
+                  <metal:leftportlets use-macro="here/portlets_fetcher/macros/left_column">
+                    This instruction gets the portlets (boxes) for the left column.
+                  </metal:leftportlets>
+                </metal:portlets>
+                 
+              </div>
+            </td>
+            <tal:comment replace="nothing"> End of the left column </tal:comment>
+
+            <tal:comment replace="nothing"> Start of main content block </tal:comment>
+            <td id="portal-column-content"
+                tal:define="tabindex python:Iterator(pos=0)">
+
+              <metal:block define-slot="content">
+                <div id="content"
+                     metal:define-macro="content"
+                     tal:define="show_border python:here.showEditableBorder(template_id=template_id, actions=actions );"
+                     tal:attributes="class python:test(show_border,'documentEditable','')">
+
+                  <metal:ifborder tal:condition="show_border" >
+                    <div metal:use-macro="here/global_contentviews/macros/content_views">
+                      The content views (View, Edit, Properties, Workflow)
+                    </div>
+
+                    <div metal:use-macro="here/global_contentviews/macros/content_actions">
+                      The content bar
+                    </div>
+                  </metal:ifborder>
+
+                  <div class="documentContent" id="region-content">
+
+                    <a name="documentContent"></a>
+
+                    <div metal:use-macro="here/global_statusmessage/macros/portal_message">
+                      Portal status message
+                    </div>
+
+                    <metal:header metal:define-slot="header" tal:content="nothing">
+                      Visual Header
+                    </metal:header>
+
+                    <metal:bodytext metal:define-slot="main" tal:content="nothing">
+                      Page body text
+                    </metal:bodytext>
+
+                    <metal:sub metal:define-slot="sub">
+                      <metal:discussion use-macro="here/viewThreadsAtBottom/macros/discussionView" />
+                    </metal:sub>
+
+                  </div>
+
+                </div>
+
+              </metal:block>
+            </td>
+            <tal:comment replace="nothing"> End of main content block </tal:comment>
+
+            <tal:comment replace="nothing"> Start of right column </tal:comment>
+            <td id="portal-column-two"
+                metal:define-slot="column_two_slot"
+                tal:define="rccond1 sr;rccond2 isAnon" tal:condition="python:(rccond1 and not rccond2)">
+              <div class="visualPadding">
+                <metal:portlets define-slot="portlets_two_slot">
+                  <metal:rightportlets use-macro="here/portlets_fetcher/macros/right_column">
+                    This instruction gets the portlets (boxes) for the right column.
+                  </metal:rightportlets>
+                </metal:portlets>
+                 
+              </div>
+            </td>
+            <tal:comment replace="nothing"> End of the right column </tal:comment>
+          </tr>
+        </tbody>
+      </table>
+      <tal:comment replace="nothing"> end column wrapper </tal:comment>
+
+      <div class="visualClear"><!-- --></div>
+
+
+      <hr class="netscape4" />
+
+      <metal:block i18n:domain="plone">
+
+        <metal:footer use-macro="here/footer/macros/portal_footer">
+          Footer
+        </metal:footer>
+
+        <metal:colophon use-macro="here/colophon/macros/colophon">
+          The colophon area - contains details about the production of
+          the site. Typically "powered by" buttons, standards, tools used.
+        </metal:colophon>
+      </metal:block>
+
+    </div>
+
+</body>
+</html>
+</metal:page>
/cvs/cluster/conga/luci/plone-custom/portlet_login,v  -->  standard output
revision 1.1
--- conga/luci/plone-custom/portlet_login
+++ -	2006-07-26 16:55:39.907478000 +0000
@@ -0,0 +1,115 @@
+<html xmlns:tal="http://xml.zope.org/namespaces/tal"
+      xmlns:metal="http://xml.zope.org/namespaces/metal"
+      i18n:domain="plone">
+<body tal:define="Iterator python:modules['Products.CMFPlone'].IndexIterator;
+                  tabindex python:Iterator()">
+<div metal:define-macro="portlet"
+     tal:omit-tag=""
+     tal:define="pageloc python: request.URL.split('/')[-1];
+                 okToShowHere python: not pageloc in ('login_form', 'join_form');
+                 auth nocall:here/cookie_authentication|nothing"
+     tal:condition="python: isAnon and okToShowHere">
+
+<dl class="portlet"
+    id="portlet-login"
+    tal:define="ac_name auth/name_cookie|nothing;
+                ac_password auth/pw_cookie|nothing;
+                ac_persist auth/persist_cookie|nothing;
+                join python:[a['url'] for a in actions['user'] if a['id']=='join'];
+                canRegister python:test(join and hasattr(here,'portal_registration') and checkPermission('Add portal member', here), 1, 0);
+                canRequestPassword python:checkPermission('Mail forgotten password', here)"
+    tal:condition="python: auth">
+
+    <dt class="portletHeader">
+        <a href="#" 
+           tal:attributes="href string:$portal_url/login_form"
+           i18n:translate="box_sign_in">Log in</a>
+    </dt>
+
+    <dd class="portletItem odd">
+        <form action="login_form"
+              name="loginform"
+              method="post"
+              tal:attributes="action string:${portal_url}/login_form">
+
+            <input type="hidden" name="form.submitted" value="1" />
+            <input type="hidden" name="came_from" value=""
+                   tal:attributes="value here/getCurrentUrl" />
+            <input type="hidden" name="js_enabled" id="js_enabled" value="0" />
+            <input type="hidden" name="cookies_enabled" id="cookies_enabled" value="" />
+            <input type="hidden" name="login_name" id="login_name" value="" />
+            <input type="hidden" name="pwd_empty" id="pwd_empty" value="0" />
+
+            <div class="field">
+                <label for="__ac_name"
+                       i18n:translate="label_login_name">Login Name</label>
+                <br />
+                <input type="text"
+                       size="10"
+                       alt="Login Name"
+                       onclick="showCookieMessage('cookies_message')"
+                       tal:attributes="name ac_name; id ac_name;
+                                       value python:request.get(ac_name, '');
+                                       tabindex tabindex/next"
+                       i18n:attributes="alt label_login_name;"/>
+            </div>
+            
+            <div class="field">
+                <label for="__ac_password"
+                       i18n:translate="label_password">Password</label>
+                <br />
+                <input type="password"
+                       size="10"
+                       alt="Password"
+                       onclick="showCookieMessage('cookies_message')"
+                       tal:attributes="name ac_password; id ac_password;
+                                       tabindex tabindex/next;"
+                       i18n:attributes="alt label_password;"/>
+            </div>
+
+            <div id="cookies_message" i18n:translate="enable_cookies_message" class="portalMessage" style="display:none">
+                Cookies are not enabled. You must <span i18n:name="enable_cookies">
+                <a href="enabling_cookies" i18n:translate="label_enable_cookies">enable cookies</a></span> before you can log in.
+            </div>
+            
+            <div class="formControls">
+            
+                <input class="context"
+                       type="submit"
+                       name="submit"
+                       value="Log in"
+                       alt="Log in"
+                       tal:attributes="tabindex tabindex/next;
+                                  onclick string:javascript:return setLoginVars('$ac_name','login_name','$ac_password','pwd_empty','js_enabled','cookies_enabled');"
+                       i18n:attributes="value label_log_in; alt label_log_in;"/>
+            </div>
+        </form>
+    </dd>
+    
+ </dl>
+
+
+
+
+<dl class="portlet"
+    id="portlet-login"
+    tal:condition="python: not auth">
+
+    <dt class="portletHeader">
+        <a href="#" i18n:translate="box_sign_in">Log in</a>
+    </dt>
+
+    <dd class="portletItem"
+        tal:condition="python: not auth"
+        i18n:translate="login_portlet_disabled">
+        Cookie authentication is disabled. 
+        Login portlet not available.
+    </dd>
+
+</dl>
+
+
+
+</div>
+</body>
+</html>
/cvs/cluster/conga/luci/plone-custom/registered,v  -->  standard output
revision 1.1
--- conga/luci/plone-custom/registered
+++ -	2006-07-26 16:55:39.988150000 +0000
@@ -0,0 +1,71 @@
+<html xmlns:tal="http://xml.zope.org/namespaces/tal"
+      xmlns:metal="http://xml.zope.org/namespaces/metal"
+      metal:use-macro="here/main_template/macros/master"
+      i18n:domain="plone">
+<body>
+
+<div metal:fill-slot="main"
+     tal:define="auth nocall:here/cookie_authentication|nothing">
+
+<div tal:condition="python: not auth" i18n:translate="registered_disabled">
+   Cookie authentication has been disabled.
+</div>
+
+<div tal:define="ve site_properties/validate_email"
+     tal:condition="python: auth">
+
+<h1 i18n:translate="heading_welcome">Welcome!</h1>
+
+<tal:block condition="python:not(ve)">
+    <p i18n:translate="description_you_can_log_on_now">Click the button to log in immediately.</p>
+
+    <div id="enable_cookies_message" i18n:translate="enable_cookies_message" class="portalMessage" style="display:none">
+      Cookies are not enabled. You must <span i18n:name="enable_cookies">
+      <a href="enabling_cookies" i18n:translate="label_enable_cookies">enable cookies</a></span> before you can log in.
+    </div>
+
+    <form action=""
+          method="post"
+          tal:define="username request/username;
+                      password request/password;
+                      ac_name auth/name_cookie;
+                      ac_password auth/pw_cookie;
+                      ac_persist auth/persist_cookie;"
+          tal:attributes="action python:'%s/login_form' % portal_url">
+
+         <input type="hidden" name="form.submitted" value="1" />
+         <input type="hidden" name="js_enabled" id="js_enabled" value="0" />
+         <input type="hidden" name="cookies_enabled" id="cookies_enabled" value="0" />
+         <input type="hidden" name="login_name" id="login_name" value="" />
+         <input type="hidden" name="pwd_empty" id="pwd_empty" value="0" />
+
+        <input type="hidden"
+               name="came_from"
+               value=""
+               tal:attributes="value request/came_from|nothing;" />
+        <input type="hidden"
+               name="ac_name"
+               value=""
+               tal:attributes="id ac_name;
+                               name ac_name;
+                               value username;" />
+        <input type="hidden"
+               name="ac_password"
+               value=""
+               tal:attributes="name ac_password;
+                               id ac_password;
+                               value password;" />
+        <input class="standalone"
+               type="submit"
+               value="Log in"
+               i18n:attributes="value label_log_in;"
+               tal:attributes="onclick string:javascript:return setLoginVars('$ac_name','login_name','$ac_password','pwd_empty','js_enabled','cookies_enabled');"
+               />
+    </form>
+</tal:block>
+
+</div>
+
+</div>
+</body>
+</html>




More information about the Cluster-devel mailing list