Add tooltips style display of help_text, instead of widening the form with
authorTodd Larsen <tlarsen@google.com>
Mon, 27 Oct 2008 19:19:44 +0000
changeset 426 114fe0f840c8
parent 425 95058c81a065
child 427 d0de6c01d768
Add tooltips style display of help_text, instead of widening the form with another (often ridiculously large) column. Also, version the .css and .js files so that browsers won't display the wrong cached one when we change something. Patch by: Dmitri Gaskin, Todd Larsen Review by: Todd Larsen
app/soc/content/css/soc-081027.css
app/soc/content/css/soc.css
app/soc/content/js/blog-080819.js
app/soc/content/js/blog.js
app/soc/content/js/menu-081026.js
app/soc/content/js/menu.js
app/soc/content/js/tips-081027.js
app/soc/templates/soc/base.html
app/soc/templates/soc/home/public.html
app/soc/templates/soc/templatetags/_field_as_table_row.html
app/soc/templates/soc/templatetags/_readonly_field_as_table_row.html
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/soc/content/css/soc-081027.css	Mon Oct 27 19:19:44 2008 +0000
@@ -0,0 +1,472 @@
+/*
+Copyright 2008 the Melange authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+ */
+ 
+/* 
+ * STANDARD HTML TAGS 
+ */ 
+
+body {
+  background-color: white;
+  color: black;
+
+  font-family: Arial, sans-serif;
+  font-size: medium;
+
+  margin: 8px;
+  margin-top: 3px;
+}
+
+img {
+  border: 0;
+}
+
+form {
+  margin: 0;
+  padding: 0;
+}
+
+li {
+  margin-bottom: 0.25em;
+}
+
+/* HEADERS */
+h1 {
+  font-size: x-large;
+  margin-top: 0px;
+}
+
+h2 {
+  font-size: large;
+}
+
+h3 {
+  font-size: medium;
+}
+
+h4 {
+  font-size: small;
+}
+
+/* PRE-FORMATTED TEXT */
+pre, code {
+  color: #007000;
+  font-family: "bogus font here", monospace;
+  font-size: 100%;
+}
+
+pre {
+  border: 1px solid silver;
+  background-color: #f5f5f5;
+  padding: 0.5em;
+  overflow: auto;
+  margin: 2em;
+}
+
+pre ins {
+  color: #cc0000;
+  font-weight: bold;
+  text-decoration: none;
+}
+
+/* LINKS AND ANCHORS */ 
+a:link {
+  color: #0000cc;
+}
+
+a:active {
+  color: #cc0000;
+}
+
+a:visited {
+  color: #551a8b;
+}
+
+a.selected, .selected a, .selected {
+  color: black;
+  font-weight: bold;
+  text-decoration: none;
+}
+
+a.novisit {
+  color: #2a55a3;
+}
+
+a.noul, a.noulv {
+  color: #4182fa; /* #93b7fa; */
+  text-decoration: none;
+}
+
+a:hover.noul {
+  text-decoration: underline;
+}
+
+a:visited.noul {
+  color: #a32a91; /* #2a55a3; */
+}
+
+
+/* Styles used by Django Forms */
+ul.errorlist {
+  color: #FF0000;
+  font-size: small;
+}
+
+
+/* TABLES */
+table {
+  border-collapse: collapse;
+}
+
+th, td {
+  /*padding: 0;*/
+  padding:2px 5px;
+  vertical-align: top;
+  text-align: left;
+}
+
+/* FORM TABLE FIELDS */ 
+td.formfieldrequired {
+  font-style: italic;
+  font-size: small;
+}
+
+td.formfieldhelptext {
+  font-style: italic;
+  font-size: small;
+}
+
+td.formfielderror {
+  color: #FF0000;
+  font-size: small;
+}
+
+td.formfieldheading {
+  font-weight: bold;
+  font-size: small;
+}
+
+td.formfieldlabel {
+  font-weight: bold;
+  font-size: small;
+}
+
+td.formfielderrorlabel {
+  font-weight: bold;
+  color: #FF0000;
+  font-size: small;
+}
+
+/* TABLE QUEUES (used with .list) */
+table#queues {
+  border-collapse: collapse;
+  width: 100%;
+}
+
+table#queues tr {
+  border-bottom: thin solid lightgray;
+}
+
+table#queues td {
+  padding: 2px;
+}  
+
+/* 
+ * PAGE ELEMENTS 
+ */
+
+#title {
+  border-top: 1px solid #3366cc;
+  background-color: #e5ecf9;
+  font-size: large;
+  font-weight: bold;
+  margin: 0;
+  padding: 0;
+  padding-top: 1px;
+  padding-bottom: 1px;
+  margin-top: 5px;
+  margin-left: 200px;
+  padding-left: 3px;
+}
+
+#notice {
+  margin-left: 200px;
+  padding: 3px;
+}
+
+#logo {
+  padding-right: 18px;
+  position: absolute;
+  left: 0;
+  top: -5px;
+}
+
+#login {
+  text-align: right;
+}
+
+#badge {
+  clear: both;
+  margin-top: 3.5em;
+  margin-bottom: 1em;
+  height: 53px;
+  font-style: italic;
+}
+
+#body {
+  border-left: 1px dotted silver;
+  margin-left: 200px;
+  margin-right: 25px;
+  padding-left: 18px;
+  padding-bottom: 25px;
+}
+
+#body .buttons {
+  margin-right: 4px;
+  margin-top: 20px;
+}
+  
+#body a.button, input[type^="submit"], input[type^="button"] {
+  margin: 0;
+  padding: 2px 5px 2px 5px;
+  font-family: Arial, Sans-serif;
+  font-size: 12px;
+  text-decoration: none;
+  color: #222;
+  cursor: default;
+  background: #ddd url("/soc/content/images/button-background.gif") repeat-x 0 0;
+  border: 1px solid #aaa;
+}
+
+#body a.button:hover, input[type^="submit"]:hover, input[type^="button"]:hover {
+  border-color: #9cf #69e #69e #7af;
+}
+
+#header {
+  height: 50px;
+  margin-bottom: 11px;
+  position: relative;
+}
+
+#footer {
+  clear: both;
+  text-align: center;
+  margin-top: 3.5em;
+  margin-bottom: 1em;
+  background-image: url("http://www.google.com/images/art.gif");
+  height: 53px;
+  background-repeat: no-repeat;
+  background-position: left center;
+}
+
+#footer .text {
+  padding-top: 20px;
+}
+
+#lastmodified {
+  text-align: right;
+  font-size: small;
+}
+
+#createdon {
+  text-align: right;
+  font-size: small;
+}
+
+#createdby {
+  text-align: right;
+  font-size: small;
+}
+
+/* SIDEBAR MENU */
+#side {
+  width: 200px;
+  margin-bottom: 3em;
+  float: left;
+  font-size: small;
+}
+
+#menu ul {
+  margin: 0;
+  padding: 0;
+  list-style-type: none;
+  margin-bottom: 1em;
+  font-size: 95%;
+}
+
+#menu ul ul {
+  margin-left: 10px;
+  margin-bottom: 0;
+}
+
+#menu li {
+  margin-top: 4px;
+}
+
+#menu li.leaf {
+  list-style-type: none;
+  list-style-image: none;
+}
+
+#menu li.expandable {
+  list-style-type: disc;
+  list-style-image: url(../images/minus.gif);
+}
+
+#menu li.closed {
+  list-style-image: url(../images/plus.gif);
+}
+
+#menu h4 {
+  margin: 0;
+  padding: 0;
+  margin-bottom: 1em;
+}
+
+ 
+/* SEARCH FIELD */ 
+#search {
+  margin-top: 2em;
+}
+
+#search .header {
+  font-weight: bold;
+  font-size: 90%;
+  margin-bottom: 1px;
+}
+
+#search .button {
+  margin-top: 1px;
+}
+
+#search .input input {
+  width: 125px;
+}
+
+/* BLOG FEEDS */
+.blog {
+  border: 10px solid #e5ecf9;
+  border-top: 1px solid #3366cc;
+}
+
+.blog h2 {
+  margin-top: 0.1em;
+  background-color: #e5ecf9;
+}
+
+.blog h2 a {
+  text-decoration: none;
+  color: black;
+}
+
+.blog h2 a:visited {
+  text-decoration: none;
+  color: black;
+}
+
+
+.blog .entry {
+  margin-bottom: 1em;
+}
+
+.blog .title {
+   font-size: medium;
+}
+
+.blog .author {
+  color: gray;
+  margin-bottom: 0.5em;
+}
+
+.blog .snippet {
+  background-color: white;
+}
+
+/* LIST */
+.list {
+  background-color: #E5ECF9;
+  border: 1px solid  #93b7fa;
+  border-bottom: 2px solid #93b7fa;
+  padding: 3px;
+  -moz-border-radius: 5px 5px 0px 0px;
+}
+
+.list .pagination {
+  text-align: right;
+  padding: 3px;
+}
+
+.list table{
+  background-color: white;
+}
+  
+.list table th {
+  background-color: #eeeeec;
+  border-right: 1px solid lightgray;
+  border-top: 1px solid lightgray;
+}
+
+.list table tr.on {
+  background-color: #ff9;
+}
+
+.list table tr.off {
+  background-color: #fff;
+}
+
+.list table td.last {
+  border-right: 1px solid lightgray;
+}
+
+.list table .first {
+  border-left: 1px solid lightgray;
+}
+
+/* 
+ * CUSTOM CLASSES 
+ */
+
+.todo {
+  color: #cc0000;
+  font-size: 80%;
+}
+
+.newmark {
+  color: red;
+  font-size: 80%;
+  vertical-align: top;
+}
+
+.error {
+  color: red;
+}
+
+.notice { 
+  background:#fad163; 
+  font-size: small;
+  font-weight: bold;
+}
+
+.rounded_ul { background: url(/soc/content/images/ul.gif) no-repeat top left; }
+.rounded_ur { background: url(/soc/content/images/ur.gif) no-repeat top right; }
+.rounded_ll { background: url(/soc/content/images/ll.gif) no-repeat bottom left; }
+.rounded_lr { background: url(/soc/content/images/lr.gif) no-repeat bottom right; }
+
+/* Disabled text. */
+.disabled {
+  color: gray;
+}
+
+
--- a/app/soc/content/css/soc.css	Mon Oct 27 18:54:53 2008 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,472 +0,0 @@
-/*
-Copyright 2008 the Melange authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
- */
- 
-/* 
- * STANDARD HTML TAGS 
- */ 
-
-body {
-  background-color: white;
-  color: black;
-
-  font-family: Arial, sans-serif;
-  font-size: medium;
-
-  margin: 8px;
-  margin-top: 3px;
-}
-
-img {
-  border: 0;
-}
-
-form {
-  margin: 0;
-  padding: 0;
-}
-
-li {
-  margin-bottom: 0.25em;
-}
-
-/* HEADERS */
-h1 {
-  font-size: x-large;
-  margin-top: 0px;
-}
-
-h2 {
-  font-size: large;
-}
-
-h3 {
-  font-size: medium;
-}
-
-h4 {
-  font-size: small;
-}
-
-/* PRE-FORMATTED TEXT */
-pre, code {
-  color: #007000;
-  font-family: "bogus font here", monospace;
-  font-size: 100%;
-}
-
-pre {
-  border: 1px solid silver;
-  background-color: #f5f5f5;
-  padding: 0.5em;
-  overflow: auto;
-  margin: 2em;
-}
-
-pre ins {
-  color: #cc0000;
-  font-weight: bold;
-  text-decoration: none;
-}
-
-/* LINKS AND ANCHORS */ 
-a:link {
-  color: #0000cc;
-}
-
-a:active {
-  color: #cc0000;
-}
-
-a:visited {
-  color: #551a8b;
-}
-
-a.selected, .selected a, .selected {
-  color: black;
-  font-weight: bold;
-  text-decoration: none;
-}
-
-a.novisit {
-  color: #2a55a3;
-}
-
-a.noul, a.noulv {
-  color: #4182fa; /* #93b7fa; */
-  text-decoration: none;
-}
-
-a:hover.noul {
-  text-decoration: underline;
-}
-
-a:visited.noul {
-  color: #a32a91; /* #2a55a3; */
-}
-
-
-/* Styles used by Django Forms */
-ul.errorlist {
-  color: #FF0000;
-  font-size: small;
-}
-
-
-/* TABLES */
-table {
-  border-collapse: collapse;
-}
-
-th, td {
-  /*padding: 0;*/
-  padding:2px 5px;
-  vertical-align: top;
-  text-align: left;
-}
-
-/* FORM TABLE FIELDS */ 
-td.formfieldrequired {
-  font-style: italic;
-  font-size: small;
-}
-
-td.formfieldhelptext {
-  font-style: italic;
-  font-size: small;
-}
-
-td.formfielderror {
-  color: #FF0000;
-  font-size: small;
-}
-
-td.formfieldheading {
-  font-weight: bold;
-  font-size: small;
-}
-
-td.formfieldlabel {
-  font-weight: bold;
-  font-size: small;
-}
-
-td.formfielderrorlabel {
-  font-weight: bold;
-  color: #FF0000;
-  font-size: small;
-}
-
-/* TABLE QUEUES (used with .list) */
-table#queues {
-  border-collapse: collapse;
-  width: 100%;
-}
-
-table#queues tr {
-  border-bottom: thin solid lightgray;
-}
-
-table#queues td {
-  padding: 2px;
-}  
-
-/* 
- * PAGE ELEMENTS 
- */
-
-#title {
-  border-top: 1px solid #3366cc;
-  background-color: #e5ecf9;
-  font-size: large;
-  font-weight: bold;
-  margin: 0;
-  padding: 0;
-  padding-top: 1px;
-  padding-bottom: 1px;
-  margin-top: 5px;
-  margin-left: 200px;
-  padding-left: 3px;
-}
-
-#notice {
-  margin-left: 200px;
-  padding: 3px;
-}
-
-#logo {
-  padding-right: 18px;
-  position: absolute;
-  left: 0;
-  top: -5px;
-}
-
-#login {
-  text-align: right;
-}
-
-#badge {
-  clear: both;
-  margin-top: 3.5em;
-  margin-bottom: 1em;
-  height: 53px;
-  font-style: italic;
-}
-
-#body {
-  border-left: 1px dotted silver;
-  margin-left: 200px;
-  margin-right: 25px;
-  padding-left: 18px;
-  padding-bottom: 25px;
-}
-
-#body .buttons {
-  margin-right: 4px;
-  margin-top: 20px;
-}
-  
-#body a.button, input[type^="submit"], input[type^="button"] {
-  margin: 0;
-  padding: 2px 5px 2px 5px;
-  font-family: Arial, Sans-serif;
-  font-size: 12px;
-  text-decoration: none;
-  color: #222;
-  cursor: default;
-  background: #ddd url("/soc/content/images/button-background.gif") repeat-x 0 0;
-  border: 1px solid #aaa;
-}
-
-#body a.button:hover, input[type^="submit"]:hover, input[type^="button"]:hover {
-  border-color: #9cf #69e #69e #7af;
-}
-
-#header {
-  height: 50px;
-  margin-bottom: 11px;
-  position: relative;
-}
-
-#footer {
-  clear: both;
-  text-align: center;
-  margin-top: 3.5em;
-  margin-bottom: 1em;
-  background-image: url("http://www.google.com/images/art.gif");
-  height: 53px;
-  background-repeat: no-repeat;
-  background-position: left center;
-}
-
-#footer .text {
-  padding-top: 20px;
-}
-
-#lastmodified {
-  text-align: right;
-  font-size: small;
-}
-
-#createdon {
-  text-align: right;
-  font-size: small;
-}
-
-#createdby {
-  text-align: right;
-  font-size: small;
-}
-
-/* SIDEBAR MENU */
-#side {
-  width: 200px;
-  margin-bottom: 3em;
-  float: left;
-  font-size: small;
-}
-
-#menu ul {
-  margin: 0;
-  padding: 0;
-  list-style-type: none;
-  margin-bottom: 1em;
-  font-size: 95%;
-}
-
-#menu ul ul {
-  margin-left: 10px;
-  margin-bottom: 0;
-}
-
-#menu li {
-  margin-top: 4px;
-}
-
-#menu li.leaf {
-  list-style-type: none;
-  list-style-image: none;
-}
-
-#menu li.expandable {
-  list-style-type: disc;
-  list-style-image: url(../images/minus.gif);
-}
-
-#menu li.closed {
-  list-style-image: url(../images/plus.gif);
-}
-
-#menu h4 {
-  margin: 0;
-  padding: 0;
-  margin-bottom: 1em;
-}
-
- 
-/* SEARCH FIELD */ 
-#search {
-  margin-top: 2em;
-}
-
-#search .header {
-  font-weight: bold;
-  font-size: 90%;
-  margin-bottom: 1px;
-}
-
-#search .button {
-  margin-top: 1px;
-}
-
-#search .input input {
-  width: 125px;
-}
-
-/* BLOG FEEDS */
-.blog {
-  border: 10px solid #e5ecf9;
-  border-top: 1px solid #3366cc;
-}
-
-.blog h2 {
-  margin-top: 0.1em;
-  background-color: #e5ecf9;
-}
-
-.blog h2 a {
-  text-decoration: none;
-  color: black;
-}
-
-.blog h2 a:visited {
-  text-decoration: none;
-  color: black;
-}
-
-
-.blog .entry {
-  margin-bottom: 1em;
-}
-
-.blog .title {
-   font-size: medium;
-}
-
-.blog .author {
-  color: gray;
-  margin-bottom: 0.5em;
-}
-
-.blog .snippet {
-  background-color: white;
-}
-
-/* LIST */
-.list {
-  background-color: #E5ECF9;
-  border: 1px solid  #93b7fa;
-  border-bottom: 2px solid #93b7fa;
-  padding: 3px;
-  -moz-border-radius: 5px 5px 0px 0px;
-}
-
-.list .pagination {
-  text-align: right;
-  padding: 3px;
-}
-
-.list table{
-  background-color: white;
-}
-  
-.list table th {
-  background-color: #eeeeec;
-  border-right: 1px solid lightgray;
-  border-top: 1px solid lightgray;
-}
-
-.list table tr.on {
-  background-color: #ff9;
-}
-
-.list table tr.off {
-  background-color: #fff;
-}
-
-.list table td.last {
-  border-right: 1px solid lightgray;
-}
-
-.list table .first {
-  border-left: 1px solid lightgray;
-}
-
-/* 
- * CUSTOM CLASSES 
- */
-
-.todo {
-  color: #cc0000;
-  font-size: 80%;
-}
-
-.newmark {
-  color: red;
-  font-size: 80%;
-  vertical-align: top;
-}
-
-.error {
-  color: red;
-}
-
-.notice { 
-  background:#fad163; 
-  font-size: small;
-  font-weight: bold;
-}
-
-.rounded_ul { background: url(/soc/content/images/ul.gif) no-repeat top left; }
-.rounded_ur { background: url(/soc/content/images/ur.gif) no-repeat top right; }
-.rounded_ll { background: url(/soc/content/images/ll.gif) no-repeat bottom left; }
-.rounded_lr { background: url(/soc/content/images/lr.gif) no-repeat bottom right; }
-
-/* Disabled text. */
-.disabled {
-  color: gray;
-}
-
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/soc/content/js/blog-080819.js	Mon Oct 27 19:19:44 2008 +0000
@@ -0,0 +1,76 @@
+/* Copyright 2008 the Melange authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+function BlogPreview(container) {
+  this.container_ = container;
+}
+
+BlogPreview.prototype.show = function(url, title, title_link) {
+  var feed = new google.feeds.Feed(url);
+  var preview = this;
+  feed.load(function(result) {
+    preview.render_(result, title, title_link);
+  });
+}
+
+BlogPreview.prototype.render_ = function(result, title, title_link) {
+  if (!result.feed || !result.feed.entries) return;
+  while (this.container_.firstChild) {
+    this.container_.removeChild(this.container_.firstChild);
+  }
+
+  var blog = this.createDiv_(this.container_, "blog");
+  var header = this.createElement_("h2", blog, "");
+  if (!title) {
+    title = result.feed.title;
+  }
+  if (!title_link) {
+    title_link = result.feed.link;
+  }
+  this.createLink_(header, title_link, title);
+
+  for (var i = 0; i < result.feed.entries.length; i++) {
+    var entry = result.feed.entries[i];
+    var div = this.createDiv_(blog, "entry");
+    var linkDiv = this.createDiv_(div, "title");
+    this.createLink_(linkDiv, entry.link, entry.title);
+    if (entry.author) {
+      this.createDiv_(div, "author", "Posted by " + entry.author);
+    }
+    this.createDiv_(div, "snippet", entry.contentSnippet);
+  }
+}
+
+BlogPreview.prototype.createDiv_ = function(parent, className, opt_text) {
+  return this.createElement_("div", parent, className, opt_text);
+}
+
+BlogPreview.prototype.createLink_ = function(parent, href, text) {
+  var link = this.createElement_("a", parent, "", text);
+  link.href = href;
+  return link;
+}
+
+BlogPreview.prototype.createElement_ = function(tagName, parent, className,
+                                                opt_text) {
+  var div = document.createElement(tagName);
+  div.className = className;
+  parent.appendChild(div);
+  if (opt_text) {
+    div.appendChild(document.createTextNode(opt_text));
+  }
+  return div;
+}
+
--- a/app/soc/content/js/blog.js	Mon Oct 27 18:54:53 2008 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,76 +0,0 @@
-/* Copyright 2008 the Melange authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-function BlogPreview(container) {
-  this.container_ = container;
-}
-
-BlogPreview.prototype.show = function(url, title, title_link) {
-  var feed = new google.feeds.Feed(url);
-  var preview = this;
-  feed.load(function(result) {
-    preview.render_(result, title, title_link);
-  });
-}
-
-BlogPreview.prototype.render_ = function(result, title, title_link) {
-  if (!result.feed || !result.feed.entries) return;
-  while (this.container_.firstChild) {
-    this.container_.removeChild(this.container_.firstChild);
-  }
-
-  var blog = this.createDiv_(this.container_, "blog");
-  var header = this.createElement_("h2", blog, "");
-  if (!title) {
-    title = result.feed.title;
-  }
-  if (!title_link) {
-    title_link = result.feed.link;
-  }
-  this.createLink_(header, title_link, title);
-
-  for (var i = 0; i < result.feed.entries.length; i++) {
-    var entry = result.feed.entries[i];
-    var div = this.createDiv_(blog, "entry");
-    var linkDiv = this.createDiv_(div, "title");
-    this.createLink_(linkDiv, entry.link, entry.title);
-    if (entry.author) {
-      this.createDiv_(div, "author", "Posted by " + entry.author);
-    }
-    this.createDiv_(div, "snippet", entry.contentSnippet);
-  }
-}
-
-BlogPreview.prototype.createDiv_ = function(parent, className, opt_text) {
-  return this.createElement_("div", parent, className, opt_text);
-}
-
-BlogPreview.prototype.createLink_ = function(parent, href, text) {
-  var link = this.createElement_("a", parent, "", text);
-  link.href = href;
-  return link;
-}
-
-BlogPreview.prototype.createElement_ = function(tagName, parent, className,
-                                                opt_text) {
-  var div = document.createElement(tagName);
-  div.className = className;
-  parent.appendChild(div);
-  if (opt_text) {
-    div.appendChild(document.createTextNode(opt_text));
-  }
-  return div;
-}
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/soc/content/js/menu-081026.js	Mon Oct 27 19:19:44 2008 +0000
@@ -0,0 +1,27 @@
+$(function() {
+  var li = $('#side #menu span').parents('li').filter(':has(ul)');
+  li.children('a').dblclick(function() {
+    window.location = $(this).attr('href');
+  }).add(li.children('span')).click(function() {
+    $($(this).parents('li')[0]).toggleClass('closed').children("ul").toggle();
+    return false;
+  });
+});
+$(function() {
+  var li = $('#side #menu span').parents('li').filter(':has(ul)');
+  li.children('a').dblclick(function() {
+    window.location = $(this).attr('href');
+  }).add(li.children('span')).click(function() {
+    $($(this).parents('li')[0]).toggleClass('closed').children("ul").toggle();
+    return false;
+  });
+});
+$(function() {
+  var li = $('#side #menu span').parents('li').filter(':has(ul)');
+  li.children('a').dblclick(function() {
+    window.location = $(this).attr('href');
+  }).add(li.children('span')).click(function() {
+    $($(this).parents('li')[0]).toggleClass('closed').children("ul").toggle();
+    return false;
+  });
+});
--- a/app/soc/content/js/menu.js	Mon Oct 27 18:54:53 2008 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-$(function() {
-  var li = $('#side #menu span').parents('li').filter(':has(ul)');
-  li.children('a').dblclick(function() {
-    window.location = $(this).attr('href');
-  }).add(li.children('span')).click(function() {
-    $($(this).parents('li')[0]).toggleClass('closed').children("ul").toggle();
-    return false;
-  });
-});
-$(function() {
-  var li = $('#side #menu span').parents('li').filter(':has(ul)');
-  li.children('a').dblclick(function() {
-    window.location = $(this).attr('href');
-  }).add(li.children('span')).click(function() {
-    $($(this).parents('li')[0]).toggleClass('closed').children("ul").toggle();
-    return false;
-  });
-});
-$(function() {
-  var li = $('#side #menu span').parents('li').filter(':has(ul)');
-  li.children('a').dblclick(function() {
-    window.location = $(this).attr('href');
-  }).add(li.children('span')).click(function() {
-    $($(this).parents('li')[0]).toggleClass('closed').children("ul").toggle();
-    return false;
-  });
-});
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/soc/content/js/tips-081027.js	Mon Oct 27 19:19:44 2008 +0000
@@ -0,0 +1,3 @@
+$(function() {
+  $('tr[title]').bt();
+});
\ No newline at end of file
--- a/app/soc/templates/soc/base.html	Mon Oct 27 18:54:53 2008 +0000
+++ b/app/soc/templates/soc/base.html	Mon Oct 27 19:19:44 2008 +0000
@@ -16,7 +16,7 @@
  <head>
   <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
 	{% block stylesheet %}
-  <link rel="stylesheet" href="/soc/content/css/soc.css" type="text/css"/>
+  <link rel="stylesheet" href="/soc/content/css/soc-081027.css" type="text/css"/>
 	{% endblock %}
   <title>
     {% block page_title %}
@@ -28,7 +28,9 @@
     {% endblock %}
   </title>
 	<script src="/jquery/jquery-1.2.6.js"></script>
-	<script src="/soc/content/js/menu.js"></script>
+	<script src="/jquery/jquery-bt-0.7.js"></script>
+	<script src="/soc/content/js/menu-081026.js"></script>
+	<script src="/soc/content/js/tips-081027.js"></script>
 	{% block scripts %}{% endblock %}
  </head>
 
--- a/app/soc/templates/soc/home/public.html	Mon Oct 27 18:54:53 2008 +0000
+++ b/app/soc/templates/soc/home/public.html	Mon Oct 27 19:19:44 2008 +0000
@@ -16,7 +16,7 @@
 {% block scripts %}
 {% if home_settings.feed_url %}
     <script type="text/javascript" src="http://www.google.com/jsapi"></script>
-    <script type="text/javascript" src="/soc/content/js/blog.js"></script>
+    <script type="text/javascript" src="/soc/content/js/blog-080819.js"></script>
     <script type="text/javascript">
 
     google.load("feeds", "1");
@@ -59,4 +59,4 @@
  {% if home_settings.feed_url %}
     <div id="blog"></div>
  {% endif %}
-{% endblock %}
\ No newline at end of file
+{% endblock %}
--- a/app/soc/templates/soc/templatetags/_field_as_table_row.html	Mon Oct 27 18:54:53 2008 +0000
+++ b/app/soc/templates/soc/templatetags/_field_as_table_row.html	Mon Oct 27 19:19:44 2008 +0000
@@ -14,12 +14,12 @@
 {% if field.errors %}
 <tr>
  <td>&nbsp;</td>
- <td colspan="3" class="formfielderror">
+ <td colspan="2" class="formfielderror">
   {{ field.errors|join:"<br />" }}
  </td>
 </tr>
 {% endif %}
-<tr>
+<tr title="{{ field.help_text }}">
 {% if field.errors %}
  <td class="formfielderrorlabel">
 {% else %} 
@@ -28,13 +28,12 @@
   <label for="{{ field.auto_id }}">{{ field.label }}:
   </label> 
  </td>
+ <td class="formfieldrequired">
+   {% if field.field.required %}(required){% endif %}
+ </td>
  <td>
   {{ field }}
  </td>
- <td class="formfieldrequired">
-   {% if field.field.required %}(required){% endif %}
- </td>
- <td class="formfieldhelptext">
-  {{ field.help_text }}
- </td>
 </tr>
+
+
--- a/app/soc/templates/soc/templatetags/_readonly_field_as_table_row.html	Mon Oct 27 18:54:53 2008 +0000
+++ b/app/soc/templates/soc/templatetags/_readonly_field_as_table_row.html	Mon Oct 27 19:19:44 2008 +0000
@@ -11,10 +11,11 @@
 See the License for the specific language governing permissions and
 limitations under the License.
 {% endcomment %}
-<tr>
+<tr title="{{ field.help_text }}">
  <td class="formfieldlabel">
 	{{ field_label }}:
  </td>
+ <td>&nbsp;</td>
  <td class="formfieldvalue">
 	{{ field_value }}
  </td>