Author: gabriel.walt
Date: Sun May 3 16:22:42 2009
New Revision: 495
Added:
branches/electron/pages/media/pages/images/loading.gif
- copied unchanged from r494,
/branches/electron/pages/media/pages/images/waiting.gif
Removed:
branches/electron/pages/media/pages/images/waiting.gif
Modified:
branches/electron/pages/media/pages/css/pages.css
branches/electron/pages/media/pages/javascript/pages.js
branches/electron/pages/media/pages/javascript/pages_list.js
branches/electron/pages/templates/admin/pages/page/change_list_table.html
branches/electron/pages/templates/admin/pages/page/menu.html
Log:
Cleaned and enhanced the JS of the page list
Modified: branches/electron/pages/media/pages/css/pages.css
==============================================================================
--- branches/electron/pages/media/pages/css/pages.css (original)
+++ branches/electron/pages/media/pages/css/pages.css Sun May 3 16:22:42
2009
@@ -1,42 +1,26 @@
/* specific CSS for the django page admin application */
+/* clearfix =========================================== */
-.placeholder-row textarea,
-.placeholder-row input {
- float:left;
-}
-
-.placeholder-row .revisions {
- float:left;
- margin-left:2em;
-}
-
-.placeholder-row .revisions ul {
- padding:0;
- margin-left:0;
+.clearfix:after {
+ content: ".";
+ display: block;
+ clear: both;
+ visibility: hidden;
+ line-height: 0;
+ height: 0;
}
-
-#status-row ul li {
- list-style-type:none;
+.clearfix {
+ display: inline-block;
}
-
-
-
-/* **** */
-
-.sidebar div.description {
- margin: 5px;
+html[xmlns] .clearfix {
+ display: block;
}
-
-.clear {
- clear: both;
+* html .clearfix {
+ height: 1%;
}
-.float-left {
- float: left;
- width: 60%;
-}
/* auto-complete =========================================== */
@@ -74,7 +58,7 @@
overflow: hidden;
}
.ac_loading {
- background: white url('../waiting.gif') right center no-repeat;
+ background: white url('../loading.gif') right center no-repeat;
}
.ac_odd {
background-color: #eee;
@@ -85,26 +69,194 @@
}
-/* clearfix =========================================== */
+/* change-list page =========================================== */
-.clearfix:after {
- content: ".";
+.object-tools {
+ display: none;
+}
+
+/* Table-wide */
+.change-list tbody tr:hover {
+ background: #f0f2f8;
+}
+.change-list tbody tr.highlighted {
+ background: #ffb;
+}
+
+/* Title cell */
+.change-list thead th.title-cell {
+ padding: 5px 10px;
+}
+.change-list .title-cell-container {
+ position: relative;
+ text-align: left;
+ font-weight: bold;
+ height: 100%;
+}
+.change-list .title-cell .changelink {
+ margin: 0 0 0 20px;
+ padding: 0 14px 0 0;
+ background: none;
+}
+.change-list .title-cell .changelink:hover {
+ background: url(../images/icons/edit.gif) right 0.2em no-repeat;
+}
+
+/* Expand-collapse link */
+.change-list .expand-collapse {
+ position: absolute;
+ left: 4px; top: 1px;
+ font-family: monospace;
+ font-size: 16px;
+}
+.change-list .expand,
+.change-list .expanded .collapse,
+.change-list .loading .expand-loading {
display: block;
- clear: both;
- visibility: hidden;
- line-height: 0;
- height: 0;
}
-.clearfix {
- display: inline-block;
+.change-list .collapse,
+.change-list .expanded .expand,
+.change-list .loading .expand,
+.change-list .loading .collapse,
+.change-list .expand-loading {
+ display: none;
}
-html[xmlns] .clearfix {
+.change-list .expand-loading {
+ position: relative;
+ top: -2px;
+ left: -4px;
+}
+
+/* Languages */
+.change-list .translation {
+ position: absolute;
+ right: -5px; top: 0;
+ margin: 0; padding: 0;
+}
+.change-list .highlighted .translation,
+.change-list .insertable .translation {
+ display: none;
+}
+.change-list .translation li {
+ float: left;
+ list-style: none;
+ padding: 0
+}
+.change-list .translation .changelink {
+ margin: 0 4px 0 0;
+ padding: 0 14px 0 0;
+ font-weight: normal;
+ text-transform: uppercase;
+}
+
+/* Move links */
+.change-list .insert {
+ display: none;
+ position: absolute;
+ right: 4px; top: -4px;
+}
+.change-list .insertable .insert {
display: block;
}
-* html .clearfix {
- height: 1%;
+.change-list .insert a {
+ float: left;
+ width: 10px; height: 21px;
+ padding: 0 5px;
+ background: url(../images/icons/insert.gif) no-repeat;
+}
+.change-list .insert a.left {
background-position: 5px 0; }
+.change-list .insert a.right {
background-position: -10px 0; }
+.change-list .insert a.first-child {
background-position: -25px 0; width: 14px; }
+.change-list .insert-add tr:hover .insert a.left,
+.change-list .insert-add .insert a.left:hover {
background-position: 5px -21px; }
+.change-list .insert-add tr:hover .insert a.right,
+.change-list .insert-add .insert a.right:hover {
background-position: -10px -21px; }
+.change-list .insert-add tr:hover .insert a.first-child,
+.change-list .insert-add .insert a.first-child:hover {
background-position: -25px -21px; }
+.change-list .insert-move tr:hover .insert a.left,
+.change-list .insert-move .insert a.left:hover {
background-position: 5px -42px; }
+.change-list .insert-move tr:hover .insert a.right,
+.change-list .insert-move .insert a.right:hover {
background-position: -10px -42px; }
+.change-list .insert-move tr:hover .insert a.first-child,
+.change-list .insert-move .insert a.first-child:hover {
background-position: -25px -42px; }
+.change-list .insert a span {
+ display: none;
+ position: absolute;
+ top: -24px;
+ padding: 2px;
+ border: 1px solid #888;
+ font-size: 12px;
+ font-weight: normal;
+ color: #333;
+ background: #ffb;
+ white-space: nowrap;
+}
+.change-list .insert a:hover span {
+ display: block;
+}
+.change-list .insert-loading {
+ position: absolute;
+ right: 12px; top: -2px;
}
+/* Actions */
+.change-list .action-cell {
+ width: 1%;
+ white-space: nowrap;
+ padding: 5px 10px;
+}
+.change-list .action-cell a.viewlink {
+ padding-left: 13px;
+ background: url(../images/icons/view.gif) no-repeat 0 0.25em;
+}
+.change-list .action-cell a.movelink {
+ padding-left: 13px;
+ background: url(../images/icons/move.gif) no-repeat 0 0.25em;
+}
+.change-list .action-cell a.addlink {
+ padding-left: 14px;
+ color: #28662C;
+}
+.change-list .action-cell a.addlink:hover {
+ color: #091B0B;
+}
+.change-list .action-cell a.deletelink {
+ padding-left: 13px;
+}
+
+/* Publication status */
+.change-list .publish-cell {
+ width: 1%;
+ white-space: nowrap;
+ padding: 0 10px;
+}
+.change-list th.publish-cell {
+ padding: 5px 10px;
+}
+.change-list .publish-cell img {
+ width: 10px;
+ height: 10px;
+}
+.change-list .publish-cell .publish-select {
+ margin: 2px;
+ padding: 1px;
+}
+
+/* Publication status */
+.change-list .template-cell {
+ width: 1%;
+ white-space: nowrap;
+ padding: 5px 10px;
+}
+
+/* Publication status */
+.change-list .author-cell {
+ width: 1%;
+ white-space: nowrap;
+ padding: 5px 10px;
+}
+
+
/* change-form page =========================================== */
/* Global */
@@ -126,6 +278,9 @@
margin-left: 0;
padding: 0;
}
+.change-form .sidebar div.description {
+ margin: 5px;
+}
/* Title */
.module-general .title label {
@@ -235,123 +390,5 @@
/* Submit */
.change-form .submit-row {
clear: both;
-}
-
-
-/* change-list page =========================================== */
-
-/* Table-wide */
-.change-list tbody tr:hover {
- background: #f0f2f8;
-}
-.change-list tbody tr.highlighted {
- background: #ffb;
-}
-
-/* Title cell */
-.change-list .title-cell {
- position: relative;
- text-align: left;
- font-weight: bold;
- height: 100%;
-}
-.change-list .title-cell .changelink {
- float: left;
- margin-left: 20px;
- padding: 0 14px 0 0;
- background: none;
-}
-.change-list .title-cell .changelink:hover {
- background: url(../images/icons/edit.gif) right 0.2em no-repeat;
-}
-
-/* Expand-collapse link */
-.change-list .title-cell .expand-collapse span {
- position: absolute;
- left: 4px; top: 1px;
- font-family: monospace;
- font-size: 16px;
-}
-.change-list .title-cell .collapse,
-.change-list .title-cell .expanded .expand {
- display: none;
-}
-.change-list .title-cell .expand,
-.change-list .title-cell .expanded .collapse {
- display: block;
-}
-
-/* Move links */
-.change-list .insert {
- display: none;
- position: absolute;
- right: 4px; top: -4px;
-}
-.change-list .insertable .insert {
- display: block;
-}
-.change-list .insert a {
- float: left;
- width: 10px; height: 21px;
- padding: 0 5px;
- background: url(../images/icons/insert.gif) no-repeat;
-}
-.change-list .insert a.left { background-position: 5px 0; }
-.change-list .insert a.right { background-position: -10px 0; }
-.change-list .insert a.first-child { background-position: -25px 0;
width: 14px; }
-.change-list tr:hover .insert a.left,
-.change-list .insert a.left:hover { background-position: 5px
-21px; }
-.change-list tr:hover .insert a.right,
-.change-list .insert a.right:hover { background-position: -10px
-21px; }
-.change-list tr:hover .insert a.first-child,
-.change-list .insert a.first-child:hover { background-position: -25px
-21px; }
-.change-list .insert a span {
- display: none;
- position: absolute;
- top: -24px;
- padding: 2px;
- border: 1px solid #888;
- font-size: 12px;
- font-weight: normal;
- color: #333;
- background: #ffb;
- white-space: nowrap;
-}
-.change-list .insert a:hover span {
- display: block;
-}
-
-/* **** */
-
-.change-list .action-cell a.viewlink {
- padding-left: 13px;
- background: url(../images/icons/view.gif) no-repeat 0 0.25em;
-}
-.change-list .action-cell a.movelink {
- padding-left: 13px;
- background: url(../images/icons/move.gif) no-repeat 0 0.25em;
-}
-.change-list .action-cell a.addlink {
- padding-left: 14px;
- color: #28662C;
-}
-.change-list .action-cell a.addlink:hover {
- color: #091B0B;
-}
-.change-list .action-cell a.deletelink {
- padding-left: 13px;
-}
-
-
-.change-list .publish-cell img {
- width: 10px;
- height: 10px;
-}
-.change-list .publish-cell .publish-select {
- margin: 2px;
- padding: 1px;
-}
-.change-list .publish-cell {
- padding: 0 5px;
}
Modified: branches/electron/pages/media/pages/javascript/pages.js
==============================================================================
--- branches/electron/pages/media/pages/javascript/pages.js (original)
+++ branches/electron/pages/media/pages/javascript/pages.js Sun May 3
16:22:42 2009
@@ -46,7 +46,7 @@
pages.fade_color = function (elem, o) {
o = $.extend({
- duration: 1000, // Time [ms] the animation should last
+ duration: 2000, // Time [ms] the animation should last
frame: 50, // Time [ms] a frame lasts
color1: 'FFFFBB', // Color to start the animation with
color2: 'FFFFFF', // Color to end the animation with
@@ -78,12 +78,12 @@
pages.update_published_icon = function (url, select, img) {
var opt = { 0: 'draft', 1: 'published', 3: 'hidden' };
img.attr({
- 'src': img.attr('src').replace(/icons\/.*/, 'waiting.gif'),
+ 'src': img.attr('src').replace(/icons\/.*/, 'loading.gif'),
'alt': 'Loading'
});
$.post(url+'change-status-'+opt[select.val()]+'/', {1:1},
function(val) {
img.attr({
- 'src':
img.attr('src').replace('waiting.gif', 'icons/'+opt[val]+'.gif'),
+ 'src':
img.attr('src').replace('loading.gif', 'icons/'+opt[val]+'.gif'),
'alt': opt[val]
});
});
Modified: branches/electron/pages/media/pages/javascript/pages_list.js
==============================================================================
--- branches/electron/pages/media/pages/javascript/pages_list.js
(original)
+++ branches/electron/pages/media/pages/javascript/pages_list.js Sun May
3
16:22:42 2009
@@ -1,10 +1,23 @@
/* Initialization of the change_list page - this script is run once
everything is ready. */
+/*
+TODO:
+- Show the whole language list on the pages, even the languages in which
the page doesn't exist
+- Manage better the display of the table for narrow windows
+- Test & debug for IE
+*/
$(function () {
var action = false;
var selected_page = false;
var submenu_cache = [];
+ function reset_states() {
+ action = selected_page = '';
+ $('#changelist').removeClass('insert-add insert-move');
+ $('#changelist .action-cell a').removeClass('selected');
+ $('#changelist tr').removeClass('insertable highlighted');
+ }
+
// Get an array of the TR elements that are children of the given page
id
// The list argument should not be used (it is only used by the
recursion)
function get_children(id, list) {
@@ -17,21 +30,26 @@
}
// Request and insert to the table the children of the given page id
- function add_children(id) {
- submenu_cache[id] ? add() : $.get(id+'/sub-menu/', add);
+ function add_children(id, callback) {
+ var page_row = $('#page-row-'+id);
+ var link = $('.expand-collapse', page_row).addClass('loading');
function add(html) {
html && (submenu_cache[id] = html); // If a new request was
made, save the HTML to the cache
- $('#page-row-'+id).after(submenu_cache[id]);
+ page_row.after(submenu_cache[id]);
+ link.removeClass('loading');
var expanded = get_expanded();
- $('.child-of-'+id).each(function() {
+ var children = $('.child-of-'+id).each(function() {
var i = this.id.substring(9);
if ($.inArray(i, expanded) != -1) {
- $('#c'+i).addClass('expanded');
- add_children(i);
+ $('#c'+i).addClass('expanded loading');
+ add_children(i, callback);
}
});
+ callback && callback(children);
}
+
+ submenu_cache[id] ? add() : $.get(id+'/sub-menu/', add);
}
// Remove the children of the given page id from the table
@@ -81,26 +99,25 @@
if (link.length) {
// Toggles a previous action to come back to the initial state
if (link.hasClass('selected')) {
- selected_page = action = '';
- link.removeClass('selected');
- $('#changelist tr').removeClass('highlighted insertable');
+ reset_states();
return false;
// Ask where to move the page to
} else if (link.hasClass('movelink')) {
+ reset_states();
action = 'move';
- $('#changelist a').removeClass('selected');
selected_page =
link.addClass('selected').attr('id').split('move-link-')[1];
- $('#changelist tr').removeClass('highlighted insertable');
+ $('#changelist').addClass('insert-move');
$('#page-row-'+selected_page).add(get_children(selected_page)).addClass('highlighted');
$('#changelist
tr:not(.highlighted)').addClass('insertable');
return false;
// Ask where to insert the new page
} else if (link.hasClass('addlink')) {
+ reset_states();
action = 'add';
selected_page =
link.addClass('selected').attr('id').split('add-link-')[1];
- $('#changelist tr').removeClass('highlighted insertable');
+ $('#changelist').addClass('insert-add');
$('#page-row-'+selected_page).addClass('highlighted
insertable');
return false;
@@ -109,15 +126,17 @@
var position = link.attr('class').match(/left|right|
first-child/)[0];
var id = link.parent().attr('id').split('move-target-')[1];
- $('#changelist a').removeClass('selected');
+ $('#changelist').removeClass('insert-add insert-move');
+ $('#changelist .action-cell a').removeClass('selected');
$('#changelist tr').removeClass('insertable');
- $('#page-row-'+selected_page+' th').append('<img
src="/media/pages/images/waiting.gif" alt="Loading" />');
+ $('#page-row-'+selected_page+' .insert').after('<img
class="insert-loading" src="/media/pages/images/loading.gif" alt="Loading"
/>');
if (action == 'move') {
$.post(selected_page+'/move-page/', { position:
position, target: id },
function (html) {
$('#changelist').html(html);
pages.fade_color($('#page-row-'+selected_page).add(get_children(selected_page)));
+ action = selected_page = '';
}
);
} else if (action == 'add') {
@@ -130,7 +149,15 @@
var id = link.attr('id').substring(1);
if (link.toggleClass('expanded').hasClass('expanded')) {
add_expanded(id);
- add_children(id);
+ add_children(id, function(children) {
+ // Update the move and add links of the inserted
rows
+ if (action == 'move') {
+
$('#page-row-'+selected_page).add(get_children(selected_page)).addClass('highlighted');
+ $('#changelist
tr:not(.highlighted)').addClass('insertable');
+ } else if (action == 'add') {
+
$('#page-row-'+selected_page).addClass('highlighted insertable');
+ }
+ });
} else {
rem_expanded(id);
rem_children(id);
Modified:
branches/electron/pages/templates/admin/pages/page/change_list_table.html
==============================================================================
---
branches/electron/pages/templates/admin/pages/page/change_list_table.html
(original)
+++
branches/electron/pages/templates/admin/pages/page/change_list_table.html
Sun May 3 16:22:42 2009
@@ -1,20 +1,17 @@
{% load i18n pages_tags %}
<table cellspacing="0" id="page-list">
-<thead>
-<tr>
-<th style="text-align:left;width:35%">{% trans "title" %}</th>
-<th>{% trans "quick actions" %}</th>
-<th>{% trans "translations" %}</th>
-<th>{% trans "published" %}</th>
-<th>{% trans "template" %}</th>
-<th>{% trans "creator" %}</th>
-</tr>
-</thead>
-<tbody>
-
-{% for page in pages %}
- {% pages_admin_menu page %}
-{% endfor %}
-
-</tbody>
+ <thead>
+ <tr>
+ <th class="title-cell">{% trans "title" %}</th>
+ <th class="action-cell">{% trans "quick actions" %}</th>
+ <th class="publish-cell">{% trans "published" %}</th>
+ <th class="template-cell">{% trans "template" %}</th>
+ <th class="author-cell">{% trans "creator" %}</th>
+ </tr>
+ </thead>
+ <tbody>
+ {% for page in pages %}
+ {% pages_admin_menu page %}
+ {% endfor %}
+ </tbody>
</table>
Modified: branches/electron/pages/templates/admin/pages/page/menu.html
==============================================================================
--- branches/electron/pages/templates/admin/pages/page/menu.html
(original)
+++ branches/electron/pages/templates/admin/pages/page/menu.html Sun May
3
16:22:42 2009
@@ -1,61 +1,63 @@
{% load pages_tags i18n adminmedia cache %}
{% if has_permission %}
-<tr id="page-row-{{ page.id }}" class="child-of-{{ page.parent_id }}">
-<th>
- <div class="title-cell" style="margin-left:{{ page.margin_level }}em">
- {% if page.children.count %}
- <a href="#" class="expand-collapse {% if expanded %}expanded{%
endif %}" id="c{{ page.id }}">
- <span class="expand">+</span>
- <span class="collapse">-</span>
- </a>
- {% endif %}
- <a href="{{ url }}{{ page.id }}/" class="changelink">{%
show_content page "slug" %}</a>
-
- <div id="move-target-{{ page.id }}" class="insert container">
- <a href="#" class="move-target left"><span>{% trans "insert
above" %}</span></a>
- <a href="#" class="move-target right"><span>{% trans "insert
below" %}</span></a>
- <a href="#" class="move-target first-child"><span>{%
trans "insert as child" %}</span></a>
- </div>
- </div>
-</th>
-<td class="action-cell">
- <a class="viewlink" href="{{ page.get_absolute_url }}"
target="_blank">{% trans "view" %}</a> |
- <a class="movelink" id="move-link-{{ page.id }}" href="#">{%
trans "move" %}</a> |
- <a class="addlink" id="add-link-{{ page.id }}" href="#">{%
trans "add" %}</a> |
- <a class="deletelink" href="{{ page.id }}/delete/">{%
trans "delete" %}</a>
-</td>
-<td class="translation-cell">
- {% for lang in page.get_languages %}
- <a href="{{ url }}{{ page.id }}/?language={{ lang }}"
class="changelink">{{ lang }}</a>
- <span style="font-weight:normal">{% if not forloop.last %}|{%
endif %}</span>
- {% endfor %}
-</td>
-<td class="publish-cell">
- {% ifequal page.status page.DRAFT %}
- <img src="/media/pages/images/icons/draft.gif" alt="draft" />
- {% else %}{% ifequal page.status page.PUBLISHED %}
- <img src="/media/pages/images/icons/published.gif" alt="published"
/>
- {% else %}
- <img src="/media/pages/images/icons/hidden.gif" alt="hidden"/>
- {% endifequal %}{% endifequal %}
-
- <select class="publish-select" name="select-status-{{ page.id }}">
- <option value="0" {% ifequal page.status
page.DRAFT %}selected="selected"{% endifequal %}>{%
trans "Draft" %}</option>
- <option value="1" {% ifequal page.status
page.PUBLISHED %}selected="selected"{% endifequal %}>{% trans "In
navigation" %}</option>
- <option value="3" {% ifequal page.status
page.HIDDEN %}selected="selected"{% endifequal %}>{%
trans "Hidden" %}</option>
- </select>
-
-</td>
-<td>
- {{ page.get_template }}
-</td>
-<td>
-{% cache 10000 page_author page.author_id %}
- {% firstof page.author.get_full_name page.author.first_name
page.author.username %}
-{% endcache %}
-</td>
-</tr>
+ <tr id="page-row-{{ page.id }}" class="child-of-{{ page.parent_id }}">
+ <th class="title-cell">
+ <div class="title-cell-container" style="margin-left:{{
page.margin_level }}em">
+ {% if page.children.count %}
+ <a href="#" class="expand-collapse {% if
expanded %}expanded{% endif %}" id="c{{ page.id }}">
+ <span class="expand">+</span>
+ <span class="collapse">-</span>
+ <img class="expand-loading"
src="/media/pages/images/loading.gif" alt="loading" />
+ </a>
+ {% endif %}
+ <a href="{{ url }}{{ page.id }}/" class="changelink">{%
show_content page "slug" %}</a>
+
+ <ul class="translation">
+ {% for lang in page.get_languages %}
+ <li class="{% if not forloop.last %}last{%
endif %}">
+ <a href="{{ url }}{{ page.id }}/?language={{
lang }}" class="changelink">{{ lang }}</a>
+ </li>
+ {% endfor %}
+ </ul>
+
+ <div id="move-target-{{ page.id }}" class="insert
container">
+ <a href="#" class="move-target left"><span>{%
trans "insert above" %}</span></a>
+ <a href="#" class="move-target right"><span>{%
trans "insert below" %}</span></a>
+ <a href="#" class="move-target first-child"><span>{%
trans "insert as child" %}</span></a>
+ </div>
+ </div>
+ </th>
+ <td class="action-cell">
+ <a class="viewlink" href="{{ page.get_absolute_url }}"
target="_blank">{% trans "view" %}</a> |
+ <a class="movelink" id="move-link-{{ page.id }}" href="#">{%
trans "move" %}</a> |
+ <a class="addlink" id="add-link-{{ page.id }}" href="#">{%
trans "add" %}</a> |
+ <a class="deletelink" href="{{ page.id }}/delete/">{%
trans "delete" %}</a>
+ </td>
+ <td class="publish-cell">
+ {% ifequal page.status page.DRAFT %}
+ <img src="/media/pages/images/icons/draft.gif" alt="draft"
/>
+ {% else %}{% ifequal page.status page.PUBLISHED %}
+ <img src="/media/pages/images/icons/published.gif"
alt="published" />
+ {% else %}
+ <img src="/media/pages/images/icons/hidden.gif"
alt="hidden"/>
+ {% endifequal %}{% endifequal %}
+
+ <select class="publish-select" name="select-status-{{ page.id
}}">
+ <option value="0" {% ifequal page.status
page.DRAFT %}selected="selected"{% endifequal %}>{%
trans "Draft" %}</option>
+ <option value="1" {% ifequal page.status
page.PUBLISHED %}selected="selected"{% endifequal %}>{% trans "In
navigation" %}</option>
+ <option value="3" {% ifequal page.status
page.HIDDEN %}selected="selected"{% endifequal %}>{%
trans "Hidden" %}</option>
+ </select>
+ </td>
+ <td class="template-cell">
+ {{ page.get_template }}
+ </td>
+ <td class="author-cell">
+ {% cache 10000 page_author page.author_id %}
+ {% firstof page.author.get_full_name
page.author.first_name page.author.username %}
+ {% endcache %}
+ </td>
+ </tr>
{% endif %}
{% if expanded %}
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"pinax-updates" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/pinax-updates?hl=en
-~----------~----~----~----~------~----~------~--~---