Commit e365a9d3 authored by Vivek's avatar Vivek

added slickgrid spreadsheet files

parent aaa154ad
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Folder" module="OFS.Folder"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_objects</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>slickgrid</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>slickgrid</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271257.09</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>MIT-LICENSE.txt</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/plain</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string>Copyright (c) 2010 Michael Leibman, http://github.com/mleibman/slickgrid\n
\n
Permission is hereby granted, free of charge, to any person obtaining\n
a copy of this software and associated documentation files (the\n
"Software"), to deal in the Software without restriction, including\n
without limitation the rights to use, copy, modify, merge, publish,\n
distribute, sublicense, and/or sell copies of the Software, and to\n
permit persons to whom the Software is furnished to do so, subject to\n
the following conditions:\n
\n
The above copyright notice and this permission notice shall be\n
included in all copies or substantial portions of the Software.\n
\n
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\n
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>1096</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>MIT-LICENSE.txt</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271197.48</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>README.md</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>application/octet-stream</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="cdata"><![CDATA[
# Welcome to SlickGrid\n
\n
Find documentation and examples in [the wiki](https://github.com/mleibman/SlickGrid/wiki).\n
\n
\n
**UPDATE: March 5th, 2014 - I have too many things going on in my life right now to really give SlickGrid support and development the time and attention it deserves. I am not stopping it, but I will most likely be unresponsive for some time. Sorry.**\n
\n
## SlickGrid is an advanced JavaScript grid/spreadsheet component\n
\n
Some highlights:\n
\n
* Adaptive virtual scrolling (handle hundreds of thousands of rows with extreme responsiveness)\n
* Extremely fast rendering speed\n
* Supports jQuery UI Themes\n
* Background post-rendering for richer cells\n
* Configurable & customizable\n
* Full keyboard navigation\n
* Column resize/reorder/show/hide\n
* Column autosizing & force-fit\n
* Pluggable cell formatters & editors\n
* Support for editing and creating new rows.\n
* Grouping, filtering, custom aggregators, and more!\n
* Advanced detached & multi-field editors with undo/redo support.\n
* “GlobalEditorLock” to manage concurrent edits in cases where multiple Views on a page can edit the same data.\n
* Support for [millions of rows](http://stackoverflow.com/a/2569488/1269037)\n
]]></string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>1177</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>README.md</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Folder" module="OFS.Folder"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_objects</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>controls</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>controls</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271196.61</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>slick.columnpicker.css</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/css</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string>.slick-columnpicker {\n
border: 1px solid #718BB7;\n
background: #f0f0f0;\n
padding: 6px;\n
-moz-box-shadow: 2px 2px 2px silver;\n
-webkit-box-shadow: 2px 2px 2px silver;\n
box-shadow: 2px 2px 2px silver;\n
min-width: 100px;\n
cursor: default;\n
}\n
\n
.slick-columnpicker li {\n
list-style: none;\n
margin: 0;\n
padding: 0;\n
background: none;\n
}\n
\n
.slick-columnpicker input {\n
margin: 4px;\n
}\n
\n
.slick-columnpicker li a {\n
display: block;\n
padding: 4px;\n
font-weight: bold;\n
}\n
\n
.slick-columnpicker li a:hover {\n
background: white;\n
}\n
</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>529</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>slick.columnpicker.css</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271195.44</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>slick.columnpicker.js</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>application/javascript</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="cdata"><![CDATA[
(function ($) {\n
function SlickColumnPicker(columns, grid, options) {\n
var $menu;\n
var columnCheckboxes;\n
\n
var defaults = {\n
fadeSpeed:250\n
};\n
\n
function init() {\n
grid.onHeaderContextMenu.subscribe(handleHeaderContextMenu);\n
grid.onColumnsReordered.subscribe(updateColumnOrder);\n
options = $.extend({}, defaults, options);\n
\n
$menu = $("<span class=\'slick-columnpicker\' style=\'display:none;position:absolute;z-index:20;\' />").appendTo(document.body);\n
\n
$menu.bind("mouseleave", function (e) {\n
$(this).fadeOut(options.fadeSpeed)\n
});\n
$menu.bind("click", updateColumn);\n
\n
}\n
\n
function destroy() {\n
grid.onHeaderContextMenu.unsubscribe(handleHeaderContextMenu);\n
grid.onColumnsReordered.unsubscribe(updateColumnOrder);\n
$menu.remove();\n
}\n
\n
function handleHeaderContextMenu(e, args) {\n
e.preventDefault();\n
$menu.empty();\n
updateColumnOrder();\n
columnCheckboxes = [];\n
\n
var $li, $input;\n
for (var i = 0; i < columns.length; i++) {\n
$li = $("<li />").appendTo($menu);\n
$input = $("<input type=\'checkbox\' />").data("column-id", columns[i].id);\n
columnCheckboxes.push($input);\n
\n
if (grid.getColumnIndex(columns[i].id) != null) {\n
$input.attr("checked", "checked");\n
}\n
\n
$("<label />")\n
.text(columns[i].name)\n
.prepend($input)\n
.appendTo($li);\n
}\n
\n
$("<hr/>").appendTo($menu);\n
$li = $("<li />").appendTo($menu);\n
$input = $("<input type=\'checkbox\' />").data("option", "autoresize");\n
$("<label />")\n
.text("Force fit columns")\n
.prepend($input)\n
.appendTo($li);\n
if (grid.getOptions().forceFitColumns) {\n
$input.attr("checked", "checked");\n
}\n
\n
$li = $("<li />").appendTo($menu);\n
$input = $("<input type=\'checkbox\' />").data("option", "syncresize");\n
$("<label />")\n
.text("Synchronous resize")\n
.prepend($input)\n
.appendTo($li);\n
if (grid.getOptions().syncColumnCellResize) {\n
$input.attr("checked", "checked");\n
}\n
\n
$menu\n
.css("top", e.pageY - 10)\n
.css("left", e.pageX - 10)\n
.fadeIn(options.fadeSpeed);\n
}\n
\n
function updateColumnOrder() {\n
// Because columns can be reordered, we have to update the `columns`\n
// to reflect the new order, however we can\'t just take `grid.getColumns()`,\n
// as it does not include columns currently hidden by the picker.\n
// We create a new `columns` structure by leaving currently-hidden\n
// columns in their original ordinal position and interleaving the results\n
// of the current column sort.\n
var current = grid.getColumns().slice(0);\n
var ordered = new Array(columns.length);\n
for (var i = 0; i < ordered.length; i++) {\n
if ( grid.getColumnIndex(columns[i].id) === undefined ) {\n
// If the column doesn\'t return a value from getColumnIndex,\n
// it is hidden. Leave it in this position.\n
ordered[i] = columns[i];\n
} else {\n
// Otherwise, grab the next visible column.\n
ordered[i] = current.shift();\n
}\n
}\n
columns = ordered;\n
}\n
\n
function updateColumn(e) {\n
if ($(e.target).data("option") == "autoresize") {\n
if (e.target.checked) {\n
grid.setOptions({forceFitColumns:true});\n
grid.autosizeColumns();\n
} else {\n
grid.setOptions({forceFitColumns:false});\n
}\n
return;\n
}\n
\n
if ($(e.target).data("option") == "syncresize") {\n
if (e.target.checked) {\n
grid.setOptions({syncColumnCellResize:true});\n
} else {\n
grid.setOptions({syncColumnCellResize:false});\n
}\n
return;\n
}\n
\n
if ($(e.target).is(":checkbox")) {\n
var visibleColumns = [];\n
$.each(columnCheckboxes, function (i, e) {\n
if ($(this).is(":checked")) {\n
visibleColumns.push(columns[i]);\n
}\n
});\n
\n
if (!visibleColumns.length) {\n
$(e.target).attr("checked", "checked");\n
return;\n
}\n
\n
grid.setColumns(visibleColumns);\n
}\n
}\n
\n
function getAllColumns() {\n
return columns;\n
}\n
\n
init();\n
\n
return {\n
"getAllColumns": getAllColumns,\n
"destroy": destroy\n
};\n
}\n
\n
// Slick.Controls.ColumnPicker\n
$.extend(true, window, { Slick:{ Controls:{ ColumnPicker:SlickColumnPicker }}});\n
})(jQuery);\n
]]></string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>4522</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>slick.columnpicker.js</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271196.25</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>slick.pager.css</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/css</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string>.slick-pager {\n
width: 100%;\n
height: 26px;\n
border: 1px solid gray;\n
border-top: 0;\n
background: url(\'../images/header-columns-bg.gif\') repeat-x center bottom;\n
vertical-align: middle;\n
}\n
\n
.slick-pager .slick-pager-status {\n
display: inline-block;\n
padding: 6px;\n
}\n
\n
.slick-pager .ui-icon-container {\n
display: inline-block;\n
margin: 2px;\n
border-color: gray;\n
}\n
\n
.slick-pager .slick-pager-nav {\n
display: inline-block;\n
float: left;\n
padding: 2px;\n
}\n
\n
.slick-pager .slick-pager-settings {\n
display: block;\n
float: right;\n
padding: 2px;\n
}\n
\n
.slick-pager .slick-pager-settings * {\n
vertical-align: middle;\n
}\n
\n
.slick-pager .slick-pager-settings a {\n
padding: 2px;\n
text-decoration: underline;\n
cursor: pointer;\n
}\n
</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>728</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>slick.pager.css</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271195.88</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>slick.pager.js</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>application/javascript</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="cdata"><![CDATA[
(function ($) {\n
function SlickGridPager(dataView, grid, $container) {\n
var $status;\n
\n
function init() {\n
dataView.onPagingInfoChanged.subscribe(function (e, pagingInfo) {\n
updatePager(pagingInfo);\n
});\n
\n
constructPagerUI();\n
updatePager(dataView.getPagingInfo());\n
}\n
\n
function getNavState() {\n
var cannotLeaveEditMode = !Slick.GlobalEditorLock.commitCurrentEdit();\n
var pagingInfo = dataView.getPagingInfo();\n
var lastPage = pagingInfo.totalPages - 1;\n
\n
return {\n
canGotoFirst: !cannotLeaveEditMode && pagingInfo.pageSize != 0 && pagingInfo.pageNum > 0,\n
canGotoLast: !cannotLeaveEditMode && pagingInfo.pageSize != 0 && pagingInfo.pageNum != lastPage,\n
canGotoPrev: !cannotLeaveEditMode && pagingInfo.pageSize != 0 && pagingInfo.pageNum > 0,\n
canGotoNext: !cannotLeaveEditMode && pagingInfo.pageSize != 0 && pagingInfo.pageNum < lastPage,\n
pagingInfo: pagingInfo\n
}\n
}\n
\n
function setPageSize(n) {\n
dataView.setRefreshHints({\n
isFilterUnchanged: true\n
});\n
dataView.setPagingOptions({pageSize: n});\n
}\n
\n
function gotoFirst() {\n
if (getNavState().canGotoFirst) {\n
dataView.setPagingOptions({pageNum: 0});\n
}\n
}\n
\n
function gotoLast() {\n
var state = getNavState();\n
if (state.canGotoLast) {\n
dataView.setPagingOptions({pageNum: state.pagingInfo.totalPages - 1});\n
}\n
}\n
\n
function gotoPrev() {\n
var state = getNavState();\n
if (state.canGotoPrev) {\n
dataView.setPagingOptions({pageNum: state.pagingInfo.pageNum - 1});\n
}\n
}\n
\n
function gotoNext() {\n
var state = getNavState();\n
if (state.canGotoNext) {\n
dataView.setPagingOptions({pageNum: state.pagingInfo.pageNum + 1});\n
}\n
}\n
\n
function constructPagerUI() {\n
$container.empty();\n
\n
var $nav = $("<span class=\'slick-pager-nav\' />").appendTo($container);\n
var $settings = $("<span class=\'slick-pager-settings\' />").appendTo($container);\n
$status = $("<span class=\'slick-pager-status\' />").appendTo($container);\n
\n
$settings\n
.append("<span class=\'slick-pager-settings-expanded\' style=\'display:none\'>Show: <a data=0>All</a><a data=\'-1\'>Auto</a><a data=25>25</a><a data=50>50</a><a data=100>100</a></span>");\n
\n
$settings.find("a[data]").click(function (e) {\n
var pagesize = $(e.target).attr("data");\n
if (pagesize != undefined) {\n
if (pagesize == -1) {\n
var vp = grid.getViewport();\n
setPageSize(vp.bottom - vp.top);\n
} else {\n
setPageSize(parseInt(pagesize));\n
}\n
}\n
});\n
\n
var icon_prefix = "<span class=\'ui-state-default ui-corner-all ui-icon-container\'><span class=\'ui-icon ";\n
var icon_suffix = "\' /></span>";\n
\n
$(icon_prefix + "ui-icon-lightbulb" + icon_suffix)\n
.click(function () {\n
$(".slick-pager-settings-expanded").toggle()\n
})\n
.appendTo($settings);\n
\n
$(icon_prefix + "ui-icon-seek-first" + icon_suffix)\n
.click(gotoFirst)\n
.appendTo($nav);\n
\n
$(icon_prefix + "ui-icon-seek-prev" + icon_suffix)\n
.click(gotoPrev)\n
.appendTo($nav);\n
\n
$(icon_prefix + "ui-icon-seek-next" + icon_suffix)\n
.click(gotoNext)\n
.appendTo($nav);\n
\n
$(icon_prefix + "ui-icon-seek-end" + icon_suffix)\n
.click(gotoLast)\n
.appendTo($nav);\n
\n
$container.find(".ui-icon-container")\n
.hover(function () {\n
$(this).toggleClass("ui-state-hover");\n
});\n
\n
$container.children().wrapAll("<div class=\'slick-pager\' />");\n
}\n
\n
\n
function updatePager(pagingInfo) {\n
var state = getNavState();\n
\n
$container.find(".slick-pager-nav span").removeClass("ui-state-disabled");\n
if (!state.canGotoFirst) {\n
$container.find(".ui-icon-seek-first").addClass("ui-state-disabled");\n
}\n
if (!state.canGotoLast) {\n
$container.find(".ui-icon-seek-end").addClass("ui-state-disabled");\n
}\n
if (!state.canGotoNext) {\n
$container.find(".ui-icon-seek-next").addClass("ui-state-disabled");\n
}\n
if (!state.canGotoPrev) {\n
$container.find(".ui-icon-seek-prev").addClass("ui-state-disabled");\n
}\n
\n
if (pagingInfo.pageSize == 0) {\n
var totalRowsCount = dataView.getItems().length;\n
var visibleRowsCount = pagingInfo.totalRows;\n
if (visibleRowsCount < totalRowsCount) {\n
$status.text("Showing " + visibleRowsCount + " of " + totalRowsCount + " rows");\n
} else {\n
$status.text("Showing all " + totalRowsCount + " rows");\n
}\n
$status.text("Showing all " + pagingInfo.totalRows + " rows");\n
} else {\n
$status.text("Showing page " + (pagingInfo.pageNum + 1) + " of " + pagingInfo.totalPages);\n
}\n
}\n
\n
init();\n
}\n
\n
// Slick.Controls.Pager\n
$.extend(true, window, { Slick:{ Controls:{ Pager:SlickGridPager }}});\n
})(jQuery);\n
]]></string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>5023</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>slick.pager.js</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Folder" module="OFS.Folder"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_objects</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>css</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>css</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Folder" module="OFS.Folder"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_objects</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>smoothness</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>smoothness</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Folder" module="OFS.Folder"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_objects</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>images</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>images</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271209.15</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>ui-bg_flat_0_aaaaaa_40x100.png</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/png</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAACgAAABkCAYAAAD0ZHJ6AAAAe0lEQVRoge3OMQHAIBAAMcC/kjdZ
JHTI0A4XBdkz86wfO18H3hRUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFV
UBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUF8O8A8WdY6opAAAA
AElFTkSuQmCC</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>180</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>ui-bg_flat_0_aaaaaa_40x100.png</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271205.37</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>ui-bg_flat_75_ffffff_40x100.png</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/png</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAACgAAABkCAYAAAD0ZHJ6AAAAeUlEQVRoge3OMQHAIBAAsVL/nh8J
DDfAkCjImpn5HvbfDpwIVoKVYCVYCVaClWAlWAlWgpVgJVgJVoKVYCVYCVaClWAlWAlWgpVgJVgJ
VoKVYCVYCVaClWAlWAlWgpVgJVgJVoKVYCVYCVaClWAlWAlWgpVgJVgJVhtqiwTEKTLXTgAAAABJ
RU5ErkJggg==</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>178</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>ui-bg_flat_75_ffffff_40x100.png</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271206.55</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>ui-bg_glass_55_fbf9ee_1x400.png</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/png</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAAAEAAAGQCAYAAABvWArbAAAAP0lEQVQ4je3PMQrAMABC0a/3v2zX
0mCXNkOgc6C4PARd5DqPGKCU8luS8SbAQhiCQRgJE56kZTfbbP9RSvnkBsWcEAZRWcgqAAAAAElF
TkSuQmCC</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>120</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>ui-bg_glass_55_fbf9ee_1x400.png</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271202.07</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>ui-bg_glass_65_ffffff_1x400.png</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/png</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAAAEAAAGQCAYAAABvWArbAAAAMElEQVQ4je3LIQ4AIBTD0O3f/8wr
FgmKhMy8pKJKwkhSKeVbbGuAPU9f4PIopTxgAeS0DRtI4yK0AAAAAElFTkSuQmCC</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>105</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>ui-bg_glass_65_ffffff_1x400.png</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271205.75</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>ui-bg_glass_75_dadada_1x400.png</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/png</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAAAEAAAGQCAYAAABvWArbAAAANklEQVQ4jWN48uTJfyYGBgaGUWKU
GCWGLfHt2zcoi5GREYNgYmJCZiG42IiB98woMUqMEtgIAMdjCdyg+eEBAAAAAElFTkSuQmCC</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>111</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>ui-bg_glass_75_dadada_1x400.png</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271207.62</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>ui-bg_glass_75_e6e6e6_1x400.png</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/png</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAAAEAAAGQCAYAAABvWArbAAAANUlEQVQ4je3LMQoAIBADwb38/6t5
wFXaWAiCtUiaYZvF9hBACOFbuntVVe11B0CSjjeE8BwThQIJ8dhEl0YAAAAASUVORK5CYII=</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>110</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>ui-bg_glass_75_e6e6e6_1x400.png</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271208.33</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>ui-bg_glass_95_fef1ec_1x400.png</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/png</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAAAEAAAGQCAYAAABvWArbAAAAPklEQVQ4je3PMQqAMABD0Z/c/7aC
IAXjJIhD10LJ8vgZw30eMUApZV/GhZNgSTjoLYElY/hNMJ/S6gullCkPiCIPCr4NiEwAAAAASUVO
RK5CYII=</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>119</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>ui-bg_glass_95_fef1ec_1x400.png</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271206.1</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>ui-bg_highlight-soft_75_cccccc_1x100.png</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/png</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAAAEAAABkCAYAAABHLFpgAAAALElEQVQYlWN49OjRfyYGBgaGIUT8
//8fSqBx0Yh///4RL8vAwAAVQ2MNOwIAl6g6KkOJwk8AAAAASUVORK5CYII=</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>101</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>ui-bg_highlight-soft_75_cccccc_1x100.png</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271204.22</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>ui-icons_222222_256x240.png</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/png</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEUkIiQkIiQkIiQkIiQkIiQk
IiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQk
IiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQk
IiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQk
IiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiTww4gUAAAA
TnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWN
qa2zKP2fJO8KBgKPo2KVoa9s351GPm5+kWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp
7FpLOmfzkmxr126tmi2p03RJ1/Xe/3EGgARxPyAgRbIk2/hkSz4CJO4+HsE7AJSVysjI2AMUUOxa
hZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb//cqktwD5QEFFwfUs7P
oCCA7y4bEJVFizcIob8KmhAplwwqVjt+9FBl3uINQniwEiryEyw9JHqGpQdEFNi+B4QQ7QOiHhys
IPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ/bEx8P
EANC+uhbpSSggCBAVODVabpI1S/k4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ
2hLjAYWiO9Dy1PDB7tPhIqLx+uMB8grZaR+Qxl2/C2RkZGRkZGRk7A7rBf7J0DR5/LUTjzUPIPSP
GvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqw
HaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4/MzFNo97qLpFiKFYv/k
NR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x/+jaZkZGRkZGRcV+x/rLUNcMMqUAscgnFocmpqkTz
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</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>4369</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>ui-icons_222222_256x240.png</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271203.69</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>ui-icons_2e83ff_256x240.png</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/png</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEUsgvwsgvwsgvwsgvwsgvws
gvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvws
gvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvws
gvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvws
gvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvzLrJBNAAAA
TnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWN
qa2zKP2fJO8KBgKPo2KVoa9s351GPm5+kWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp
7FpLOmfzkmxr126tmi2p03RJ1/Xe/3EGgARxPyAgRbIk2/hkSz4CJO4+HsE7AJSVysjI2AMUUOxa
hZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb//cqktwD5QEFFwfUs7P
oCCA7y4bEJVFizcIob8KmhAplwwqVjt+9FBl3uINQniwEiryEyw9JHqGpQdEFNi+B4QQ7QOiHhys
IPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ/bEx8P
EANC+uhbpSSggCBAVODVabpI1S/k4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ
2hLjAYWiO9Dy1PDB7tPhIqLx+uMB8grZaR+Qxl2/C2RkZGRkZGRk7A7rBf7J0DR5/LUTjzUPIPSP
GvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqw
HaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4/MzFNo97qLpFiKFYv/k
NR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x/+jaZkZGRkZGRcV+x/rLUNcMMqUAscgnFocmpqkTz
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</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>4369</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>ui-icons_2e83ff_256x240.png</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271204.77</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>ui-icons_454545_256x240.png</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/png</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEVERkRERkRERkRERkRERkRE
RkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRE
RkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRE
RkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRE
RkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkQfbf86AAAA
TnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWN
qa2zKP2fJO8KBgKPo2KVoa9s351GPm5+kWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp
7FpLOmfzkmxr126tmi2p03RJ1/Xe/3EGgARxPyAgRbIk2/hkSz4CJO4+HsE7AJSVysjI2AMUUOxa
hZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb//cqktwD5QEFFwfUs7P
oCCA7y4bEJVFizcIob8KmhAplwwqVjt+9FBl3uINQniwEiryEyw9JHqGpQdEFNi+B4QQ7QOiHhys
IPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ/bEx8P
EANC+uhbpSSggCBAVODVabpI1S/k4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ
2hLjAYWiO9Dy1PDB7tPhIqLx+uMB8grZaR+Qxl2/C2RkZGRkZGRk7A7rBf7J0DR5/LUTjzUPIPSP
GvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqw
HaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4/MzFNo97qLpFiKFYv/k
NR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x/+jaZkZGRkZGRcV+x/rLUNcMMqUAscgnFocmpqkTz
qymwVAPxfJ5PnIUUQOUKT04tEdWZyv3JCQSn96WS4pD97QfyW25A7NhSAbyhmVj0FEltA4vdiygB
ibXhoUYgykCUP7HwPTDeEqAIcHVMkZg7Zx4k0uFANs63hPQXCoRLAwdgGsr9Az7Qv7sgQGgg1aPl
/BJLExBWgG4RFRLFImGmIquPC/klEGyCG0AuAXaJJC+B8FVe9NYQDEcXB8g6AQcjYJ1goJIggHWC
rFR0S6kRHN5+4BzFi8NaoN35NRxUvL+JJdZr7PV4wK6fj8nIyMjIyNhr3OxdXAYq7FHZwB6bDSzS
h4sF0utChqo0NAvaT1hLzXwFinmCzmeDucEQK18TTaQoFgP7bNC+RZ4OT4T6gQogDFYk+1QxQlj1
9QGSAWKiLYp8P0Ag1Gbz1ULfWHLg9iUnQNK5QQJcukm04blKLH2GgEJCY+HzXAZWCvHKco3Bp6MI
aCjSXXRJyOxeqhnzEaF93MfFGW/O16ZvDL5TM4MJIjujz/cHypkQuuzRwWJ93BKdIt+wCRAPl9kp
e2Ikkb2mFgGlxh/i40d3EHfdvoyMjIyMu43ylt/IAmGHnN5iIt7wKfbv01RAcJqFRl9lcjYQSnbQ
qKgC4fYOwSJt6N6trE0twZ9kN/PqNpTQeICvr4TLsDYC06U7BMjshS+v1/aT7IwQYD5LcgRQXMT2
FrBfBLjZ6151jDElk9tPFfpUgk2yregusX25BJbwAFEfM+YI6vGAti4bTtizB+TjfQCrERyhKb2X
8D6A9wX75P4t4neBYJeP6pdhg/gQl8MWvytzeSTjgOQBynQdh/iXKdxOrGJ/RkZGRsb9QmXihGr5
+g8GGg9uTh+KoVZuNIzV+CwRucFBEyr1mVjx4irOxwM1BhirB6Q+2eNQi4eqR+aF6mELtoMzCR7V
9RAFe/ZvQogNiyY8FPSUTFsLp8TeTmMui5mtw7bcaT0Yw2AA4wFRQIlkgq+1DQrNhkmoxS5Jq+u6
bMAIGRECEANgXHTgWzwgBOhDH2l0oTQ4D8D5NMktBgNywAEMjo8rwATMZrPY7JGxBoJCkIBDQiAY
09EGTUiBCWkUpISfGPR5AAwBfZiG2z7Ayc1yeKTxid39xBNwfHr4O0LA48ePFTvhYrF1r4tyAoz9
n2MCqEuBtp/6GDR0oAYfG/R6wJExHYZHfhygsv7fEWCOj4bYmsP5A+pL4MkTfAnMlD4F+r3bobKv
TyTA2P/w7PN+Agq2QW8piqMCpTBwenoKvX0AHGkGtP2YAPvTEWA7QUTAudn7/NxtOG46wWNmDtpB
EkBzN7rBEvAFHp+YTB/q97qPAN4gHFqgBi8uLsC7qPCA6mg41G/+ErByPwEXDdoNxRhOx+M5jPEz
QugS0ht+b1/Y3gEnYMAIAOIBE29/hIDucE8tmMsNOgK4B1RHFu4UCRlMHzv0xzcajcfdXWDs2h8T
ArBCkoDUJYDLmz6w7ip3BFS0ve5wTRwAn6keMA9I3QYbfSZ0DKbyt+7OXjGI1idPcfNyAyfAMlCr
zaGqphYrxHocLHRJVycnfGUcbtT+jIyMjIw9x7Nn8fJSzG0TmFtO8rZT+XT3S3ub+tKJbbLd5diT
Vp50+zahyeHSslJ/YPrU0fuazrZO2CZ92/ZCCVXlGRiZKPJyPPRxyIFWeXLQBXJBKiq/3divEAN6
ZwM200Qjm7EJBZeWm/PRWVCbYK7s7u2l4XaCz+lzgOfMfhMonXr7TWzeZb98dbgIzBT8Ub8eYYUq
fZ4rVJ/MDbIDgPqTulJ/xvntWAtjIisqnwxOkGz0n077FARoY79GdA6HPE4rOy196NiMWHTZlSSA
pcOgXpy/fHV2joaNKu3ffsAnRcBf4K/6NcIG6tIxk3HyoXPjASqfUgXbYN5PzpL2njkR9QMjeDTV
HDTCgRuxOegjoO0FvKzP/t/gmVdI24+G7NIe8JX6Wv3dDyldMA+4YB5wwTygtd+dwRqaTqrLb1l7
3zTSN52CNpnHuQOYPsDblybgxfkXh/oVtr+N1DEBJdhRJyd/Bd/q1z+cbNrD17iVKyajcnv9arhO
kRPgsruuD6DmNPwpDNrLw2CoTgHni4yALr0L29+tiKAEIPn868ejx//8rpWP3OEOl5On9OwpcQm0
MhafP/ey8f1uvDNIgGLQG8z4YO99ENgg95etwv4uYJYY8fUGHYH6j6fscHFZMftlAl9i+9XL73X3
N/n+ZStOzfVfRvYXhrbdKOpEgVQTg/wsDuDD3kwOfQNMTJ5y+/ltUDWLunyxnRF46IqlBzGMY4X7
inggREFioIyMjIyMHWCIB6ZNKAcXseo3vLTQTkVE7348dlwJJSz0+wLfmi8BhZqfw3D4ww/wHVLn
Ed5/fgYvXsDZ3MlsvYUbbnDjDZ3MN3TJG4+bxjAaDl8TBri9qxEw1ccao2wTNAMLHo2f+sjrXwb/
9qHoYqgPMBXJTVfOpmrZH23y6uvo0LHSyY6fHGwKfHJlAuMFvObjDYrIqxBgQi20h7Hd/nYVLmno
+eaNUm/eeH2GCuopntnhBJAlI2AHo9CCh1I1QxUdAbqqGY9BBLwyc3W4wYVhvY8A4BoIc1l5M7vn
PWphZW9/Ses3n37y9a0uGqFwFQZsQQbd386DogpgEk+dzynsAZMJXq8+ns9NeukJ0PYrNATGGefJ
QlhkLo7DTXr+y3bNiOsDvrXTz/C2q1DXZH84iRNwrP88Nj+u2DjYEE6RBxD9Knj16ujVHC67A742
2o02RwD3gB+t7EblWvu9geOFxSnd3ROmT+nJyQkhoPlsxVONc/3TEdBos+jtA+ZzcwHgTvD1cDja
YCcItA8w9i88A8b+mqSjc6Pvqd998QguEQPmQMeo23ODN86+p0/bn1buBkT6+oBhNZ/PYY4ZAHYb
3PRd4LkZmPX68NRtMZn4ASvdA+qf0jMA5MP9eeg28Nug9QiLnj5A33U1MAES6xHAUNpz/9zFAYE1
gqQDMT3G6xI9pwdw/aIgKoHCS1YGlRnSq9yCjdXjgN3j+N27YyROHxmuNAeNKPpYuXIyIyMjYy0M
8eros59MF/PT2c602T7eA7zvhJ9dr/vzDjXaLp4Yc5+0wllzxzHv3gdmMMM7/CcQzKgVBqYTmFn+
Z+mKm8J7k0A5F/jgCfjQ1WBhQyiOqD0lYuqBb+AyzMw9Ha2G3m6c8qQx+AlqnIceQp+Sb6i9UyQW
bhr54+AjnZ0VzW2TAN0DmBT6PWmc6jDBE2PK2u+nF43dyP7Q0t1pOcX2fdRvH0mF2Q4JqN35rnHj
VIeaXfIAVyUuw/aHCCiJy9iF5l1621zweI8KZrPZ9iJdb7DXJ3US0OSrtZ10imt7wHY7QesAzUMz
1oZ3noB3qFJ/H18j97FYuw8QDN4oeKf30osvcSW2ExLo+VcbuAuo/sUIm8fMG9xocO3Ea19J9gFY
ivnHJ2KnyfovZlgW3v6ySx32abQiIyMjIyPjhlFDTLxpwIgFMnTp6A3g4IDKNY+stkwAMAoIAbas
xBXqUWneSAWTMjt50lTqT29rFjvXohjsDNm2YPXDFlICmrJOZ3t6tHm8AiEAl0sCeLIIorIRt+cF
bew/QRsoAXb4o1XSfoywzm0FTMAoYBNvLyFu8v8HpLBtD1iKgC17wHb7AI6d9wFbvguAIGTHd4E9
wG7jgIyMjIyM+434c2R3HeV/Ffx6jtZu6ijl8h59T655jhR+rdHzDOP6beABCheb8O8/WFXeOyzg
f5oAhVYnKxP7CwaAf1afJu8bSrhS6tdaXeGnrRenOqOlz9d6QwYnA/3TLd+GE7qe3chA5YF5DfY0
vK3adfOX/gyNp2BW25MHdxAB9qvRiiP3/XpQQFGYDU4+Mi///XumXG8pjvaUAOsBGlf4jJt+YYEz
eEzAdw06F19R3juM7D1wita86GR0CKfDHgLuXCc4Bri6vMLdfjMc4VNSUNsdodo2xu/1+Xl/K5+a
z8jIyMhYG/z5gJTMF1GtKq/a3rpyCvz5gJTMl9GtKq/a3rpyCmfQ4WwZmS+kXFVetb115ST48wEf
/AGcfG1iw+tWbpbS2vJ3nQxcVr3lH3z5h972FUTLzYpOVk7l5hD+eYcYwDcAnewOotrZ4OtrPDuc
qi/LRX0/RR4qx7Nn4U8g+qjffvuN6Gf+nC85vwauHjaYyubqvWYKY4VEfSUMitdnBCT1Ue63R543
9m+OgCn6DroAAaHPVQxKth/wkJgHmG8bmQMsT0D6EjDfvhVRKO3ywOQUgRA7nmL1uawZmHf1k+DP
BwQ6NdcJ+k6Md1LA5f5ONdhJ8vZ5J0vLHT99srkGOjmJbd/G1r2Nriqnse1AZt1AalU5jW2HsuuG
0qvKGRkZGRkZGRG0gcONyXsP9v8D0/IdJADiBNiXl3327WRGgOL/9HC/0XwlIURkRhC4tz6Z/fu7
fUf2gHvfB9z3u0BGRkZGRkbGplHcnkgguQoSqtUXuhbs/wPtMwqV0HUJAvj5vk32b8IDuL23yn7q
AXZ5u32hbRX7d3o82Df1FZXvbh9QOfhyxldr/+3xgXU9oKmvsHyr7F/XA269/eveBXrsv7N9QALe
/tvjA0kPWAXGbvebkbHn+D/J5nMcHzx1UAAAAABJRU5ErkJggg==</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>4369</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>ui-icons_454545_256x240.png</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271207.23</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>ui-icons_888888_256x240.png</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/png</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEWMioyMioyMioyMioyMioyM
ioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyM
ioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyM
ioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyM
ioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMiozJxoFPAAAA
TnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWN
qa2zKP2fJO8KBgKPo2KVoa9s351GPm5+kWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp
7FpLOmfzkmxr126tmi2p03RJ1/Xe/3EGgARxPyAgRbIk2/hkSz4CJO4+HsE7AJSVysjI2AMUUOxa
hZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb//cqktwD5QEFFwfUs7P
oCCA7y4bEJVFizcIob8KmhAplwwqVjt+9FBl3uINQniwEiryEyw9JHqGpQdEFNi+B4QQ7QOiHhys
IPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ/bEx8P
EANC+uhbpSSggCBAVODVabpI1S/k4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ
2hLjAYWiO9Dy1PDB7tPhIqLx+uMB8grZaR+Qxl2/C2RkZGRkZGRk7A7rBf7J0DR5/LUTjzUPIPSP
GvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqw
HaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4/MzFNo97qLpFiKFYv/k
NR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x/+jaZkZGRkZGRcV+x/rLUNcMMqUAscgnFocmpqkTz
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</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>4369</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>ui-icons_888888_256x240.png</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271202.82</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>ui-icons_cd0a0a_256x240.png</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/png</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEXMCgzMCgzMCgzMCgzMCgzM
CgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzM
CgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzM
CgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzM
CgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzrDkZjAAAA
TnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWN
qa2zKP2fJO8KBgKPo2KVoa9s351GPm5+kWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp
7FpLOmfzkmxr126tmi2p03RJ1/Xe/3EGgARxPyAgRbIk2/hkSz4CJO4+HsE7AJSVysjI2AMUUOxa
hZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb//cqktwD5QEFFwfUs7P
oCCA7y4bEJVFizcIob8KmhAplwwqVjt+9FBl3uINQniwEiryEyw9JHqGpQdEFNi+B4QQ7QOiHhys
IPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ/bEx8P
EANC+uhbpSSggCBAVODVabpI1S/k4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ
2hLjAYWiO9Dy1PDB7tPhIqLx+uMB8grZaR+Qxl2/C2RkZGRkZGRk7A7rBf7J0DR5/LUTjzUPIPSP
GvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqw
HaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4/MzFNo97qLpFiKFYv/k
NR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x/+jaZkZGRkZGRcV+x/rLUNcMMqUAscgnFocmpqkTz
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</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>4369</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>ui-icons_cd0a0a_256x240.png</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271210.35</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>jquery-ui-1.8.16.custom.css</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/css</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="cdata"><![CDATA[
/*\n
* jQuery UI CSS Framework 1.8.16\n
*\n
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)\n
* Dual licensed under the MIT or GPL Version 2 licenses.\n
* http://jquery.org/license\n
*\n
* http://docs.jquery.com/UI/Theming/API\n
*/\n
\n
/* Layout helpers\n
----------------------------------*/\n
.ui-helper-hidden { display: none; }\n
.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }\n
.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }\n
.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }\n
.ui-helper-clearfix { display: inline-block; }\n
/* required comment for clearfix to work in Opera \\*/\n
* html .ui-helper-clearfix { height:1%; }\n
.ui-helper-clearfix { display:block; }\n
/* end clearfix */\n
.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }\n
\n
\n
/* Interaction Cues\n
----------------------------------*/\n
.ui-state-disabled { cursor: default !important; }\n
\n
\n
/* Icons\n
----------------------------------*/\n
\n
/* states and images */\n
.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }\n
\n
\n
/* Misc visuals\n
----------------------------------*/\n
\n
/* Overlays */\n
.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }\n
\n
\n
/*\n
* jQuery UI CSS Framework 1.8.16\n
*\n
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)\n
* Dual licensed under the MIT or GPL Version 2 licenses.\n
* http://jquery.org/license\n
*\n
* http://docs.jquery.com/UI/Theming/API\n
*\n
* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana,Arial,sans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=02_glass.png&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px\n
*/\n
\n
\n
/* Component containers\n
----------------------------------*/\n
.ui-widget { font-family: Verdana,Arial,sans-serif; font-size: 1.1em; }\n
.ui-widget .ui-widget { font-size: 1em; }\n
.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif; font-size: 1em; }\n
.ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; }\n
.ui-widget-content a { color: #222222; }\n
.ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; }\n
.ui-widget-header a { color: #222222; }\n
\n
/* Interaction states\n
----------------------------------*/\n
.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3; background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #555555; }\n
.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; text-decoration: none; }\n
.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999; background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }\n
.ui-state-hover a, .ui-state-hover a:hover { color: #212121; text-decoration: none; }\n
.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }\n
.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; text-decoration: none; }\n
.ui-widget :active { outline: none; }\n
\n
/* Interaction Cues\n
----------------------------------*/\n
.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fcefa1; background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x; color: #363636; }\n
.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }\n
.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; }\n
.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; }\n
.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; }\n
.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }\n
.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }\n
.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }\n
\n
/* Icons\n
----------------------------------*/\n
\n
/* states and images */\n
.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }\n
.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }\n
.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }\n
.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png); }\n
.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }\n
.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }\n
.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); }\n
.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); }\n
\n
/* positioning */\n
.ui-icon-carat-1-n { background-position: 0 0; }\n
.ui-icon-carat-1-ne { background-position: -16px 0; }\n
.ui-icon-carat-1-e { background-position: -32px 0; }\n
.ui-icon-carat-1-se { background-position: -48px 0; }\n
.ui-icon-carat-1-s { background-position: -64px 0; }\n
.ui-icon-carat-1-sw { background-position: -80px 0; }\n
.ui-icon-carat-1-w { background-position: -96px 0; }\n
.ui-icon-carat-1-nw { background-position: -112px 0; }\n
.ui-icon-carat-2-n-s { background-position: -128px 0; }\n
.ui-icon-carat-2-e-w { background-position: -144px 0; }\n
.ui-icon-triangle-1-n { background-position: 0 -16px; }\n
.ui-icon-triangle-1-ne { background-position: -16px -16px; }\n
.ui-icon-triangle-1-e { background-position: -32px -16px; }\n
.ui-icon-triangle-1-se { background-position: -48px -16px; }\n
.ui-icon-triangle-1-s { background-position: -64px -16px; }\n
.ui-icon-triangle-1-sw { background-position: -80px -16px; }\n
.ui-icon-triangle-1-w { background-position: -96px -16px; }\n
.ui-icon-triangle-1-nw { background-position: -112px -16px; }\n
.ui-icon-triangle-2-n-s { background-position: -128px -16px; }\n
.ui-icon-triangle-2-e-w { background-position: -144px -16px; }\n
.ui-icon-arrow-1-n { background-position: 0 -32px; }\n
.ui-icon-arrow-1-ne { background-position: -16px -32px; }\n
.ui-icon-arrow-1-e { background-position: -32px -32px; }\n
.ui-icon-arrow-1-se { background-position: -48px -32px; }\n
.ui-icon-arrow-1-s { background-position: -64px -32px; }\n
.ui-icon-arrow-1-sw { background-position: -80px -32px; }\n
.ui-icon-arrow-1-w { background-position: -96px -32px; }\n
.ui-icon-arrow-1-nw { background-position: -112px -32px; }\n
.ui-icon-arrow-2-n-s { background-position: -128px -32px; }\n
.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }\n
.ui-icon-arrow-2-e-w { background-position: -160px -32px; }\n
.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }\n
.ui-icon-arrowstop-1-n { background-position: -192px -32px; }\n
.ui-icon-arrowstop-1-e { background-position: -208px -32px; }\n
.ui-icon-arrowstop-1-s { background-position: -224px -32px; }\n
.ui-icon-arrowstop-1-w { background-position: -240px -32px; }\n
.ui-icon-arrowthick-1-n { background-position: 0 -48px; }\n
.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }\n
.ui-icon-arrowthick-1-e { background-position: -32px -48px; }\n
.ui-icon-arrowthick-1-se { background-position: -48px -48px; }\n
.ui-icon-arrowthick-1-s { background-position: -64px -48px; }\n
.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }\n
.ui-icon-arrowthick-1-w { background-position: -96px -48px; }\n
.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }\n
.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }\n
.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }\n
.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }\n
.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }\n
.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }\n
.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }\n
.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }\n
.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }\n
.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }\n
.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }\n
.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }\n
.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }\n
.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }\n
.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }\n
.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }\n
.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }\n
.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }\n
.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }\n
.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }\n
.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }\n
.ui-icon-arrow-4 { background-position: 0 -80px; }\n
.ui-icon-arrow-4-diag { background-position: -16px -80px; }\n
.ui-icon-extlink { background-position: -32px -80px; }\n
.ui-icon-newwin { background-position: -48px -80px; }\n
.ui-icon-refresh { background-position: -64px -80px; }\n
.ui-icon-shuffle { background-position: -80px -80px; }\n
.ui-icon-transfer-e-w { background-position: -96px -80px; }\n
.ui-icon-transferthick-e-w { background-position: -112px -80px; }\n
.ui-icon-folder-collapsed { background-position: 0 -96px; }\n
.ui-icon-folder-open { background-position: -16px -96px; }\n
.ui-icon-document { background-position: -32px -96px; }\n
.ui-icon-document-b { background-position: -48px -96px; }\n
.ui-icon-note { background-position: -64px -96px; }\n
.ui-icon-mail-closed { background-position: -80px -96px; }\n
.ui-icon-mail-open { background-position: -96px -96px; }\n
.ui-icon-suitcase { background-position: -112px -96px; }\n
.ui-icon-comment { background-position: -128px -96px; }\n
.ui-icon-person { background-position: -144px -96px; }\n
.ui-icon-print { background-position: -160px -96px; }\n
.ui-icon-trash { background-position: -176px -96px; }\n
.ui-icon-locked { background-position: -192px -96px; }\n
.ui-icon-unlocked { background-position: -208px -96px; }\n
.ui-icon-bookmark { background-position: -224px -96px; }\n
.ui-icon-tag { background-position: -240px -96px; }\n
.ui-icon-home { background-position: 0 -112px; }\n
.ui-icon-flag { background-position: -16px -112px; }\n
.ui-icon-calendar { background-position: -32px -112px; }\n
.ui-icon-cart { background-position: -48px -112px; }\n
.ui-icon-pencil { background-position: -64px -112px; }\n
.ui-icon-clock { background-position: -80px -112px; }\n
.ui-icon-disk { background-position: -96px -112px; }\n
.ui-icon-calculator { background-position: -112px -112px; }\n
.ui-icon-zoomin { background-position: -128px -112px; }\n
.ui-icon-zoomout { background-position: -144px -112px; }\n
.ui-icon-search { background-position: -160px -112px; }\n
.ui-icon-wrench { background-position: -176px -112px; }\n
.ui-icon-gear { background-position: -192px -112px; }\n
.ui-icon-heart { background-position: -208px -112px; }\n
.ui-icon-star { background-position: -224px -112px; }\n
.ui-icon-link { background-position: -240px -112px; }\n
.ui-icon-cancel { background-position: 0 -128px; }\n
.ui-icon-plus { background-position: -16px -128px; }\n
.ui-icon-plusthick { background-position: -32px -128px; }\n
.ui-icon-minus { background-position: -48px -128px; }\n
.ui-icon-minusthick { background-position: -64px -128px; }\n
.ui-icon-close { background-position: -80px -128px; }\n
.ui-icon-closethick { background-position: -96px -128px; }\n
.ui-icon-key { background-position: -112px -128px; }\n
.ui-icon-lightbulb { background-position: -128px -128px; }\n
.ui-icon-scissors { background-position: -144px -128px; }\n
.ui-icon-clipboard { background-position: -160px -128px; }\n
.ui-icon-copy { background-position: -176px -128px; }\n
.ui-icon-contact { background-position: -192px -128px; }\n
.ui-icon-image { background-position: -208px -128px; }\n
.ui-icon-video { background-position: -224px -128px; }\n
.ui-icon-script { background-position: -240px -128px; }\n
.ui-icon-alert { background-position: 0 -144px; }\n
.ui-icon-info { background-position: -16px -144px; }\n
.ui-icon-notice { background-position: -32px -144px; }\n
.ui-icon-help { background-position: -48px -144px; }\n
.ui-icon-check { background-position: -64px -144px; }\n
.ui-icon-bullet { background-position: -80px -144px; }\n
.ui-icon-radio-off { background-position: -96px -144px; }\n
.ui-icon-radio-on { background-position: -112px -144px; }\n
.ui-icon-pin-w { background-position: -128px -144px; }\n
.ui-icon-pin-s { background-position: -144px -144px; }\n
.ui-icon-play { background-position: 0 -160px; }\n
.ui-icon-pause { background-position: -16px -160px; }\n
.ui-icon-seek-next { background-position: -32px -160px; }\n
.ui-icon-seek-prev { background-position: -48px -160px; }\n
.ui-icon-seek-end { background-position: -64px -160px; }\n
.ui-icon-seek-start { background-position: -80px -160px; }\n
/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */\n
.ui-icon-seek-first { background-position: -80px -160px; }\n
.ui-icon-stop { background-position: -96px -160px; }\n
.ui-icon-eject { background-position: -112px -160px; }\n
.ui-icon-volume-off { background-position: -128px -160px; }\n
.ui-icon-volume-on { background-position: -144px -160px; }\n
.ui-icon-power { background-position: 0 -176px; }\n
.ui-icon-signal-diag { background-position: -16px -176px; }\n
.ui-icon-signal { background-position: -32px -176px; }\n
.ui-icon-battery-0 { background-position: -48px -176px; }\n
.ui-icon-battery-1 { background-position: -64px -176px; }\n
.ui-icon-battery-2 { background-position: -80px -176px; }\n
.ui-icon-battery-3 { background-position: -96px -176px; }\n
.ui-icon-circle-plus { background-position: 0 -192px; }\n
.ui-icon-circle-minus { background-position: -16px -192px; }\n
.ui-icon-circle-close { background-position: -32px -192px; }\n
.ui-icon-circle-triangle-e { background-position: -48px -192px; }\n
.ui-icon-circle-triangle-s { background-position: -64px -192px; }\n
.ui-icon-circle-triangle-w { background-position: -80px -192px; }\n
.ui-icon-circle-triangle-n { background-position: -96px -192px; }\n
.ui-icon-circle-arrow-e { background-position: -112px -192px; }\n
.ui-icon-circle-arrow-s { background-position: -128px -192px; }\n
.ui-icon-circle-arrow-w { background-position: -144px -192px; }\n
.ui-icon-circle-arrow-n { background-position: -160px -192px; }\n
.ui-icon-circle-zoomin { background-position: -176px -192px; }\n
.ui-icon-circle-zoomout { background-position: -192px -192px; }\n
.ui-icon-circle-check { background-position: -208px -192px; }\n
.ui-icon-circlesmall-plus { background-position: 0 -208px; }\n
.ui-icon-circlesmall-minus { background-position: -16px -208px; }\n
.ui-icon-circlesmall-close { background-position: -32px -208px; }\n
.ui-icon-squaresmall-plus { background-position: -48px -208px; }\n
.ui-icon-squaresmall-minus { background-position: -64px -208px; }\n
.ui-icon-squaresmall-close { background-position: -80px -208px; }\n
.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }\n
.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }\n
.ui-icon-grip-solid-vertical { background-position: -32px -224px; }\n
.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }\n
.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }\n
.ui-icon-grip-diagonal-se { background-position: -80px -224px; }\n
\n
\n
/* Misc visuals\n
----------------------------------*/\n
\n
/* Corner radius */\n
.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -khtml-border-top-left-radius: 4px; border-top-left-radius: 4px; }\n
.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -khtml-border-top-right-radius: 4px; border-top-right-radius: 4px; }\n
.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -khtml-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }\n
.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; -khtml-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }\n
\n
/* Overlays */\n
.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }\n
.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -khtml-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/*\n
* jQuery UI Resizable 1.8.16\n
*\n
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)\n
* Dual licensed under the MIT or GPL Version 2 licenses.\n
* http://jquery.org/license\n
*\n
* http://docs.jquery.com/UI/Resizable#theming\n
*/\n
.ui-resizable { position: relative;}\n
.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block; }\n
.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }\n
.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }\n
.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }\n
.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }\n
.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }\n
.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }\n
.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }\n
.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }\n
.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*\n
* jQuery UI Selectable 1.8.16\n
*\n
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)\n
* Dual licensed under the MIT or GPL Version 2 licenses.\n
* http://jquery.org/license\n
*\n
* http://docs.jquery.com/UI/Selectable#theming\n
*/\n
.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }\n
/*\n
* jQuery UI Slider 1.8.16\n
*\n
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)\n
* Dual licensed under the MIT or GPL Version 2 licenses.\n
* http://jquery.org/license\n
*\n
* http://docs.jquery.com/UI/Slider#theming\n
*/\n
.ui-slider { position: relative; text-align: left; }\n
.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }\n
.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }\n
\n
.ui-slider-horizontal { height: .8em; }\n
.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }\n
.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }\n
.ui-slider-horizontal .ui-slider-range-min { left: 0; }\n
.ui-slider-horizontal .ui-slider-range-max { right: 0; }\n
\n
.ui-slider-vertical { width: .8em; height: 100px; }\n
.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }\n
.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }\n
.ui-slider-vertical .ui-slider-range-min { bottom: 0; }\n
.ui-slider-vertical .ui-slider-range-max { top: 0; }/*\n
* jQuery UI Datepicker 1.8.16\n
*\n
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)\n
* Dual licensed under the MIT or GPL Version 2 licenses.\n
* http://jquery.org/license\n
*\n
* http://docs.jquery.com/UI/Datepicker#theming\n
*/\n
.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }\n
.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }\n
.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }\n
.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }\n
.ui-datepicker .ui-datepicker-prev { left:2px; }\n
.ui-datepicker .ui-datepicker-next { right:2px; }\n
.ui-datepicker .ui-datepicker-prev-hover { left:1px; }\n
.ui-datepicker .ui-datepicker-next-hover { right:1px; }\n
.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }\n
.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }\n
.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }\n
.ui-datepicker select.ui-datepicker-month-year {width: 100%;}\n
.ui-datepicker select.ui-datepicker-month, \n
.ui-datepicker select.ui-datepicker-year { width: 49%;}\n
.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }\n
.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }\n
.ui-datepicker td { border: 0; padding: 1px; }\n
.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }\n
.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }\n
.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }\n
.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }\n
\n
/* with multiple calendars */\n
.ui-datepicker.ui-datepicker-multi { width:auto; }\n
.ui-datepicker-multi .ui-datepicker-group { float:left; }\n
.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }\n
.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }\n
.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }\n
.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }\n
.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }\n
.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }\n
.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }\n
.ui-datepicker-row-break { clear:both; width:100%; font-size:0em; }\n
\n
/* RTL support */\n
.ui-datepicker-rtl { direction: rtl; }\n
.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }\n
.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }\n
.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }\n
.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }\n
.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }\n
.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }\n
.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }\n
.ui-datepicker-rtl .ui-datepicker-group { float:right; }\n
.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }\n
.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }\n
\n
/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */\n
.ui-datepicker-cover {\n
display: none; /*sorry for IE5*/\n
display/**/: block; /*sorry for IE5*/\n
position: absolute; /*must have*/\n
z-index: -1; /*must have*/\n
filter: mask(); /*must have*/\n
top: -4px; /*must have*/\n
left: -4px; /*must have*/\n
width: 200px; /*must have*/\n
height: 200px; /*must have*/\n
}
]]></string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>25635</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>jquery-ui-1.8.16.custom.css</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271197.04</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>gadget_slickgrid.js</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>application/javascript</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="cdata"><![CDATA[
/*jslint indent: 2 */\n
/*global window, jQuery, rJS*/\n
"use strict";\n
\n
(function (window, $, rJS) {\n
\n
function requiredFieldValidator(value) {\n
if (value == null || value == undefined || !value.length) {\n
return {valid: false, msg: "This is a required field"};\n
} else {\n
return {valid: true, msg: null};\n
}\n
}\n
\n
rJS(window).\n
declareMethod(\'getContent\', function () {\n
return this.props.grid.getData();\n
})\n
\n
.declareMethod(\'setContent\', function (content) {\n
return;\n
})\n
\n
.declareMethod(\'clearContent\', function () {\n
return;\n
})\n
\n
.declareMethod(\'initStateTransfer\', function () {\n
var gadget = this,\n
current_state = {},\n
grid = gadget.props.grid,\n
temp_data = grid.getData(),\n
temp_columns = grid.getColumns(),\n
columns = [],\n
data = [],\n
column_index_dict = {},\n
temp_row,\n
i, j;\n
for(i = 0; i < temp_columns.length; i += 1) {\n
var title = (temp_columns[i].name === null ? \'\' : temp_columns[i].name);\n
columns.push({\n
title: title,\n
id: i\n
})\n
column_index_dict[temp_columns[i].field] = grid.getColumnIndex(temp_columns[i].id);\n
}\n
for(i = 0; i < temp_data.length; i += 1) {\n
var d = (data[i] = {}),\n
item;\n
temp_row = temp_data[i];\n
for(item in temp_row) { \n
d[column_index_dict[item]] = temp_row[item];\n
}\n
}\n
current_state.columns = columns;\n
current_state.content = data;\n
return current_state;\n
})\n
\n
.declareMethod(\'finishStateTransfer\', function (current_state) {\n
var gadget = this,\n
content = current_state.content,\n
temp_columns = current_state.columns,\n
grid = gadget.props.grid,\n
columns = [],\n
data = [],\n
temp_row,\n
i, j;\n
for(i = 0; i < temp_columns.length; i += 1) {\n
var name = temp_columns[i].title;\n
columns.push({\n
"name": name,\n
"id": i,\n
"field": i,\n
"editor": Slick.Editors.Text \n
})\n
}\n
for(i = 0; i < content.length; i += 1) {\n
var d = (data[i] = {});\n
temp_row = content[i];\n
for(j = 0; j < Object.keys(temp_row).length; j += 1) {\n
d[columns[j].field] = temp_row[j];\n
}\n
}\n
grid.setColumns(columns);\n
grid.setData(data);\n
grid.render();\n
return;\n
})\n
.declareMethod(\'initSubGadget\', function () {\n
var gadget = this;\n
var grid,\n
options,\n
data = [],\n
columns = [],\n
k;\n
for(k = 1; k < 7; k += 1) {\n
columns.push({id: k, name: "", field: k, editor: Slick.Editors.Text});\n
} \n
$(function () {\n
var i, j;\n
for (i = 0; i < 20; i += 1) {\n
var d = (data[i] = {});\n
for (j = 1; j < 7; j += 1) {\n
d[j] = "";\n
}\n
}\n
gadget.props.options = {\n
editable: true,\n
enableAddRow: true,\n
enableCellNavigation: true,\n
asyncEditorLoading: false,\n
autoEdit: false\n
};\n
gadget.props.grid = new Slick.Grid("#myGrid", data, columns, gadget.props.options);\n
grid = gadget.props.grid;\n
grid.setSelectionModel(new Slick.CellSelectionModel());\n
grid.onAddNewRow.subscribe(function (e, args) {\n
var item = args.item;\n
grid.invalidateRow(data.length);\n
data.push(item);\n
grid.updateRowCount();\n
grid.render();\n
});\n
})\n
})\n
\n
.ready(function (g) {\n
g.props = {};\n
});\n
\n
}(window, jQuery, rJS));\n
]]></string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>3628</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>gadget_slickgrid.js</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Folder" module="OFS.Folder"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_objects</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>images</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>images</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271221.67</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>actions.gif</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/gif</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">R0lGODlhEwATAKIHAP///7m5udjY2MjIyOzs7JiYmGZmZv///yH5BAEAAAcALAAAAAATABMAAANv
eCpT/i8IRYckIGtARBjVsI3bAHpkmkmSmnoF5o6EM6f2Pear4f+GwIbXAwqHBQ5hCQj8jkuMLcp0
CqnSZEfQwVwFYDDAsQQPwNEwunYxud/vDgvACHzs94+gOTFx6nh6GCYVFylyIBQHMBAQEhQJADs=</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>170</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>actions.gif</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271215.03</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>ajax-loader-small.gif</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/gif</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">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
YwSRlycNcWskCkApIyEAOwAAAAAAAAAAAA==</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>1849</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>ajax-loader-small.gif</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271222.64</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>arrow_redo.png</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/png</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACA0lEQVQ4y6WST0iUURTFzzeOhlqk
Y2Y5DoSC1NpV1KLc2KoJZhEFEWS7UGxRCtlSyJUFbtpF0CLDoIQ2hWUtciOFYX9wnMFkoDZZkWN8
95z7tdBsRBdlFx6Pe3nvwLnnF0RRhP+p2L88PjOS6Tt150TZlgUY6jSNN0tnQamF7medKadnJHWI
ahNVTwoygRQaa5JwCnOF3I2xC4971gl0P+08KKk3WdWUrq1MoLq8GvFYHIoEucNdYCSYiDfZaWQ/
zg08ufSiPw4AXePnUi7v3Z84kG6o3oNlFhELykAXtHo80lpvRtBYAQBxABCVSW5vStdX7QadCElk
P79D/lMeaxaMaNyVhCTMzeeGJ668vFwq0LFzWw2KtgTJMf52fEHU6MjZsYulC2sfPDwt49RE/2TX
uhRItVWWVyFADIUvBdC44fNKCrxrxvOlszgA0AiKCIIAJoIhN43x+dXJgU1BYqipxR+LWLYiEjvq
YMbMsetHh/6GjSCKIpy8fbynsTY51LK3BYocS8tLmJ2fRX4hD9ofDkSt9BJmhj8EaxbMOJor5I5U
lFWk6xMNCBGitbkVzfta4JHg7qALDofc8fDe2HoL9zsfLVjIwVfvXz+Yyc7g29fvKP4sruxDgrmg
SOAqUKI2R7n92qEUTRmSHTK1kaqTKSYKkuP37XLkbs0HGwS2Ur8Aicdo641Z/7sAAAAASUVORK5C
YII=</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>572</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>arrow_redo.png</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271212.77</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>arrow_right_peppermint.png</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/png</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAAAsAAAALCAYAAACprHcmAAAAR0lEQVQY02P4//8/A7EYQ6B6fjAX
KYo/ATEPsYr/A/E3bBpwKYZpYCdG8T8gfgfEzMQoBilkI8YZ97EpxKWYheigIylS8GEA3+RWM4/w
1PAAAAAASUVORK5CYII=</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>128</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>arrow_right_peppermint.png</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271229.16</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>arrow_right_spearmint.png</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/png</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAAAsAAAALCAYAAACprHcmAAAAR0lEQVQY02P4//8/A7EYQ2DPo3ou
UhR/AmIeYhX/B+Jv2DTgUgzTwE6M4n9A/A6ImYlRDFLIRowz7mNTiEsxC9FBR1Kk4MMAaclj81QR
GZoAAAAASUVORK5CYII=</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>128</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>arrow_right_spearmint.png</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271224.72</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>arrow_undo.png</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/png</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACCUlEQVQ4y6VTPWiTURQ9+RrEUqFC
is0PwdDSSRdxEJSq1YIo0ggZguDQRSooSHFwcBGXUh1aFMFCJxVBJENQ0OAiohbELE62+cTaYGmR
8NlKIObec59DSTRWsNILl/e4cM7j3HNeyDmHzZSHTVa4cbn0esSZGYwG0kBl4zQKK6osUlhQ1dyj
4SflBi7UkDD68qw7HD8C5wBzhDkHOoJG1KSGoBpgKViG/6WUV+H44/PPZ1okkLYGMgWdQU1BI+gI
z2tD+9Z29CX6sGvn7rSIXh680Z9skUAlCv5TkIQKQSVUCQoR355AqjsFhEPojkSR3JFMl+ZLLwBM
hjbiQvrOsQkVzRzccyjJkOJbsII372aevbr69viGXMifK4yKaK68VEYIHrZ1dEBE966z8czDTNvp
+6eu/I1E6woloaYQI1R0fQ5UdFpEs3+CB8YOTEhdM12RLlSlikpQgQqLLUvM3hu6FeuMD6sSJ28P
OpW1VyhEPJpAKplCeEsYnnlYXJwDRQtNguzdoevRztiF3lgvDA49iZ6mhTQDHfH9xyo8evi8UEZp
zs9TmWsSiGhdVSEmMAfQEWaEGmGOqNVqWAlWMbfsw5/181Qb/zDll1uSeOLm0clYJHpRaZhf+ASV
XzlQ5Vcqi1QWSOZmpz42owznXLMHxvZP91/b9/732b+6xQWp64iKPvif3/gTE/mFkuoV5e0AAAAA
SUVORK5CYII=</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>578</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>arrow_undo.png</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271213.51</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>bullet_blue.png</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/png</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAuElEQVQ4y+2SuwnCUABFj2JAENTC
SkRcwF4HyQriFgnoFBnAJjPYKTZ2rmAEEQvz8qLJ+7mARSSdeMtbHLiH23DOUSdNauYHAK1PZWPD
EFhgtY8pQb9iVB655ehSCQAswqkN5n14aY/jTQWrQwYQVptgSn/Ws+wTw/asGLQ9KIVf3YF+8igN
qTIU1iG1hSL9QmIh49M9Z9KFcceRZg8QSVxZIiqL1rsrKOlTCBCXGHmNPgr/X7k+4A2UK1KSfG8v
HAAAAABJRU5ErkJggg==</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>241</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>bullet_blue.png</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271224.33</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>bullet_star.png</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/png</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA3klEQVQ4y2NgGL6gqalJC4jroFiL
HAP+L1qUB8RZ/0FsUjVfAml68sQBiI3BBoDEiNLY1tbwf8GCov+HDkX9//8/GIjt/x854gwUS/7f
1laL3yCQTWfPJgI1RQJxJhDPAuJ2IDYBYhGgnDl+74BMb25u/H/jhg9QQzYQzwHiTiC2AIpp/29u
biDsFZANM2YUAzXpQTWXAzE/UCyHuMAEKlqxdGkGUJP+/58/BYCYB+z8pUvjQAasICog16+PBQac
2/+urkowPnLE4f/69SFEx4QWNNrANkIxjK81DPMMADePzQymn2U/AAAAAElFTkSuQmCC</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>279</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>bullet_star.png</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271220.48</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>bullet_toggle_minus.png</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/png</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAAYUlEQVQoz2P4z4AfMtBRwZG9+//v
+r/l//r/K/8v3otFwd7/h+Bw1n8sCrYAJdaC4aH/E7ApWAOUgIBD/9uxKViMZEI9NgWzkNxQhk3B
hHVd/1uAeiv/l/zPXzcwIUm2AgDIkx96UzWvhQAAAABJRU5ErkJggg==</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>154</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>bullet_toggle_minus.png</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271214.24</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>bullet_toggle_plus.png</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/png</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAAY0lEQVQoz2P4z4AfMtBRwZG9+//v
+r/l//r/K/8v3otFwd7/h+Bw1n8sCrYAJdb+/w/Eh/5PwKZgDVACAg79b8emYDGSCfXYFMxCckMZ
NgUT1nX9bwHqrfxf8j9/3cCEJNkKAH1KIB7GpgZnAAAAAElFTkSuQmCC</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>156</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>bullet_toggle_plus.png</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271215.68</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>calendar.gif</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/gif</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">R0lGODlhEAAQAPcAAAAAAG2taG6vam+va3GwbHKxbnOxb3Syb3WzcHi0c3m1dHq1dVKEw1SGxFWG
xlaHx16KxVyKxl+MxlmKyFuKyV+NyF6Oy2OSzmSTzmmW0W+b1HSd1HWh13ei2Hyh0Hqk2X2l3H6o
3f99O/9/Pf+EQv+LR/+QTf+UUv+VVP+WVP+YV/+ZWP+aWv+dXP+eXf+fX/+nVP+rWv+gYP+hYf+i
Yv+jZP+kZP+kZf+wYf+zaP+4bf+5cf+7df+9eYCp3YKq35K034Ss4Ieu4Yiv4oyx44yy5I+05ZC1
5pO355W24ZS355a66Zi66Zq8652+656/7JXSjpvUlJ/A7abD6anE6KrG6ajF76zH6KzG6azH6q7I
6K7J6a7J6qzH8LDI6LDJ6bDJ6rPL6bLL6rPM6rXM6LXN6rfO6rrP6rrQ673R677S68DT68jW6svY
68zZ683Z7Nji8Nvk8dzl8t3m8t7n8+Lq9Obt9urw9+3y+O7y+fDz+fDz+vD0+vH2+vL2+/T3+///
/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAQABAA
AAjoAP8JHEiw4MAuUpw0WYLkSJEhQXyASCLQyp+LGDNe7CDwyZ8bNWS4WJHCRAkSI/5oENjkj40e
PHboyIEjBgwRfzIIZPKxBo0ZL1qwUIHixB8MApX8mQKICqAqgK4A8gLojgWBRvpUwZIFy5YvBAQE
IDNngkAifbgAAgMoDCADUAYAiuNAoBA+YsYsUJDADIIDBbSwaSDwRx4zgBZEUQDojJ89beZUEBgi
Dxo0CzKnKcPHTRw+EQR+yKMGUOk1gLK8iaMnjwSBHPDcsVOHThw4bOTw0cMHgkAgGzJcsEDhAYPj
yD0YXE4wIAA7</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>1035</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>calendar.gif</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271229.79</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>collapse.gif</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/gif</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">R0lGODlhCQAJAPcAAAFGeoCAgNXz/+v5/+v6/+z5/+36//L7//X8//j9/wAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAACQAJAAAIMwADCBxI
UIDBgwIEChgwwECBAgQUFjBAkaJCABgxGlB4AGHCAAIQiBypEEECkScJqgwQEAA7</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>846</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>collapse.gif</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271222.1</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>comment_yellow.gif</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/gif</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">R0lGODlhEAAQAMQAAP/99v/qaOvOSem4M+zSSv/ypf/ug//1w//2zP/xnv/te//zrf/0uv/41/nW
dufBMP/vkevTVf/rcv/0s//wlv/57OvRM//vi+/OQtaXIuuYEuvTLNyhJ+vHUP///////yH5BAEA
AB8ALAAAAAAQABAAAAV+4CeOZEl6aKqWHhG9BIFZ1uaNnqN6QHMgCNsn50EwJotCIkGBHCoWlO6Y
ZEIuBgPggSIAkEoKVkE+cD2YClhsUEjelAEK06hC2pKAXsFBCRBJbHl6AQYZN2gIBw2KDHoUDIc4
ApQdHQNIGpInOwMVGjcmLAOgoiYepaYsoR8hADs=</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>257</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>comment_yellow.gif</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271223.95</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>down.gif</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/gif</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">R0lGODlhDgAOAIABADtKYwAAACH5BAEAAAEALAAAAAAOAA4AAAISjI+py+0PHZgUsGobhTn6DxoF
ADs=</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>59</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>down.gif</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271225.8</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>drag-handle.png</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/png</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAMAAABhq6zVAAADAFBMVEUAAACWlpbY2NgAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAADmpIfcAAABAHRSTlP/////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////8AU/cHJQAA
ABlJREFUCNdj+I8EGFA5jHAA5DDBAW2VIQEAmyRUB6U7kZIAAAAASUVORK5CYII=</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>1130</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>drag-handle.png</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271225.24</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>editor-helper-bg.gif</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/gif</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">R0lGODlhCQBYAvcAAAAAAEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAJAFgC
AAj/AP8JHPgvQACCAw0iFKhwYUOEDwlGTHjQYUWIFyVmpLiw4EaPGw1GFPmQZEOTJU1qFIlxIsiO
Lj3C/CjT4sybNnNixLlTp0aeP31yFMqQZsyjRpMCHdqzaVCnTJ9KjUq16FKrRGtCxbpV61SuX71W
FQt2LNKrZNOezbq2a9uwb80qZTvXbV24d+WijVu2r9q8fvn+3Qt4MF3CiA8rtpuY8WK8jSE/1js5
cGHBmC9rjkzZsWfJnzuDHi26tGXOpysbDp2a9WrSrWG/Nj07Nu3MqGvrxq2at2vfsoHf3tyb+G/j
wZEPzy3ctvPdyp83h848OvXi1bNj335ce3fuyb2HaQe/nLx069PTo18vvvz39+Phu49Pf7798+3x
m78uX39//vX5FyCA9xEoYIHq5Wfgggnu1+B/Dw4YIYLsOVghhBdKmCGFCk544IcMbgiihyF2KGKJ
FpqoYoosYrjifx3FKOOMNNZoo40BAQA7</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>1164</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>editor-helper-bg.gif</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271219.33</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>expand.gif</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/gif</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">R0lGODlhCQAJAPcAAAFGeoCAgNXz/+v5/+v6/+z5/+36//L7//X8//j9/wAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAACQAJAAAIOAADCBxI
UIDBgwIEChgwAECBAgQUFjAAQIABAwoBaNSIMYCAAwIqGlSIAEHFkiQTIBCgkqDLAAEBADs=</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>851</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>expand.gif</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271219.75</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>header-bg.gif</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/gif</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">R0lGODlhAQAsAYcAAISgxKvH7LjP7rrQ7rzS773T77/U8MHV8MLW8MTY8cbZ8cja8snb8svd883e
88/f89Dg9NLh9NTi9NXk9dfl9djm9trn9vP3+////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAP8ALAAAAAABACwB
AAhFAAFcsGChAoUJEiJAeOAggIABBAoYOIAggYIFDBo42Mixo8ePIEOKHEmypMmTKD1iWMmypcuX
MGPKnEmzps2bOHPaBBAQADs=</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>872</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>header-bg.gif</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271212.08</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>header-columns-bg.gif</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/gif</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">R0lGODlhAgAYAIcAANDQ0Ovs7uzt7+3u8O7v8e/w8vDx8/Hy9Pn5+QAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAP8ALAAAAAACABgA
AAghABEIHEiwYMEDCA8YWMiwgMMCBAgMmDhAgIAAGAMAABAQADs=</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>836</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>header-columns-bg.gif</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271211.4</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>header-columns-over-bg.gif</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/gif</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">R0lGODlhAgAWAIcAAKrM9tno++vz/QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAP8ALAAAAAACABYA
AAgUAAUIHEiwoIAACBMqXMhwIQAAAQEAOw==</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>823</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>header-columns-over-bg.gif</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271223.09</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>help.png</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/png</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAAAsAAAALCAYAAACprHcmAAABIElEQVQY02P4//8/AxAr/P37t+bf
v3/Hgewff/78OfH169eGx48fqzAwMDBB1TDAFC57/+3R/4fvjv+//nILmAbxP3/+vPbQoUNaQA3M
YMUgE0ES115u/t8xqfR/cVXK/9q2XDAfJP706dNOoGJukA0MIKtBJl19sfH/0s09YDozPxZMg8S/
fPlyHqhQDIhZQc74AbIaJAnCIRG+/2ctawazQeJAw34CFcoBMScDyDMwk0F454nZcDZIHOjuC0CF
ikDMxQDyNczNIAX1HflgGubm69evT4KbDAoekK+xhcbz58+31dTUOMHdDPIlKHhAvgZ5BuRGkNUg
E6EKpeGhAQ4/YDhCBcSgVipCaTGoODMsUmAamKBWcYI9A6FZkWMQADaPH8ayNoT8AAAAAElFTkSu
QmCC</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>345</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>help.png</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271216.44</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>info.gif</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/gif</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">R0lGODlhDAANAJECAAAAAPTFIwAAAAAAACH5BAEAAAIALAAAAAAMAA0AAAIhlI8Hy20QoozgyXXt
zAIGxnmfWHUXqY0hBX7pVjZymdQFADs=</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>80</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>info.gif</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271221.18</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>listview.gif</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/gif</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">R0lGODlh3gcwAMQWAM3P1M/R1dbX28/S1rG0utbX2s7R1czN08rM0cDDybG1u8bJzr3BxrO2vbW4
vre5wcLFy8XHzbm8wru9xcjL0LCzuf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEA
ABYALAAAAADeBzAAAAX/oCVaRmCeaKqubOu+cCzPdG3feK7vfO//wKBwSCwaj8ikcslsOp/QqHRK
rVqv2Kx2y+16v+Cw+DoYjQqGtHrNbrvf8Lh8Tq/b7/i8fs/v+/+AgYKDhIWGh4iJiouMjY6PkJGS
k5SVlpeYmZqbnJ2en6ChoqOkpZ5mAgCqq6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrL
zM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj5OXm4SMH6uvs7e7v8PHy8/T19vf4+fr7/P3+/wADChxI
sKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDihxJsqTJkSQQ/6hcybKly5cwY8qcSbOm
zZs4c+rcybOnz59AgwodSrSo0aNIkypdyrSp06dQo0qdSrWq1atYs2rdyrWr169gw4odS7as2bEG
KKhdy7at27dw48qdS7eu3bt48+rdy7ev37+AAwseTLiw4cOIEytezLix48eQI0ueTLmy5cuYM2ve
zLmz58+gQ4seTbq06dILUqtezbq169ewY8ueTbu27du4c+vezbu379/AgwsfTry48ePIkytfzry5
8+fQo0ufTr269evYs2vfzr279+/gw4sfT748+Qjo06tfz769+/fw48ufT7++/fv48+vfz7+///8A
BijggAQWaOCBCCao4P+CDDbo4IMQRijhhBRWaOGFGGao4YYcdujhhyCGKOKIJI4IwYkopqjiiiy2
6OKLMMYo44w01mjjjTjmqOOOPPbo449ABinkkEQWaeSRSCap5JJMNunkk1BGKeWUVFZp5ZVYZqnl
llx26eWXYIYp5phiJmDmmWimqeaabLbp5ptwxinnnHTWaeedeOap55589unnn4AGKuighBZq6KGI
Jqrooow26uijkEYq6aSUVmrppZhmqummnHbq6aeghipqqAyUauqpqKaq6qqsturqq7DGKuustNZq
66245qrrrrz26uuvwAYr7LDEFmvsscgmq+yyzDbr7LPQRivttNRWa+3/tdhmq+223Hbr7bfghgvu
BOSWa+656Kar7rrstuvuu/DGK++89NZr77345qvvvvz26++/AAcs8MAEF2zwwQgnrPDCDDfs8MMQ
RyzxxBRXbPHFGGes8cYcd+zxxyB/LMHIJJds8skop6zyyiy37PLLMMcs88w012zzzTjnrPPOPPfs
889ABy300EQXbfTRSCet9NJMN+3001BHLfXUVFdt9dVYZ6311lx37fXXXj8g9thkl2322Winrfba
bLft9ttwxy333HTXbffdeOet99589+3334AHLvjghBdu+OGIJ6744ow37vjjkEcu+eSUV2755Zhn
rvnmnHfueecOhC76/+ikl2766ainrvrqrLfu+uuwxy777LTXbvvtuOeu++689+7778AHL/zwxBdv
/PHIJ6/88sw37/zz0Ecv/fTUV2/99dhnr/323HfPfQPghy/++OSXb/756Kev/vrst+/++/DHL//8
9Ndv//3456///vz37///AAygAAdIwAIa8IAITKACF8jABjrwgRCMoAQnSMEKWvCCGMygBjfIwQ0q
4IMgDKEIR0jCEprwhChMoQpXyMIWuvCFMIyhDGdIwxra8IY4zKEOd8jDHvrwh0AMohCHSMQiGvGI
SEyiEpfIxCY68YlQjKIUp0jFKlrxiljMoha3qMUKePGLYAyjGMdIxv8ymvGMaEyjGtfIxja68Y1w
jKMc50jHOtrxjnjMox73yMc++vGPgAykIAdJyEIa8pCITKQiF8nIRjrykZCMpCQnSclKWvKSmMyk
JjfJyU568pOgDKUoR0nKUprylKhMpSpXycpWuvKVsIylLGdJy1ra8pa4zKUud8nLXvryl8AMpjCH
ScxiGvOYyEymMpfJzGY685nQjKY0p0nNalrzmtjMpja3yc1uevOb4AynOMdJznKa85zoTKc618nO
drrznfCMpzznSc962vOe+MynPvfJz376858ADahAByrKMRj0oAhNqEIXytCGOvShEI2oRCdK0Ypa
9KIYzahGN8rRjnr/9AqmCKlIR0rSkpr0pChNqUpXytKWuvSlMI2pTGdK05ra9KY4zakmzsHTnvr0
p0ANqlCHStSiGvWoSE2qUpfK1KY69alQjapUp0rVbZzkqljNqla3ytWuevWrYA2rWMdK1rKa9axo
Tata18rWtrr1rRs5i1znSte62vWueM2rXvfK17769a+ADaxgB0vYwhr2sIhNrGK3cprGOvaxkI2s
ZCdL2cpa9rKYzaxmN8vZznr2s6ANrWhHS9rSbsY8qE2talfL2ta69rWwja1sZ0vb2tr2trjNrW53
y9ve+va3wNVOiYZL3OIa97jITa5yl8vc5jr3udCNrnSnS93qWve6/9jNrna3myEyefe74A2veMdL
3vKa97zoTa9618ve9rr3vfCNr3znS9/62hdLo8qvfvfL3/76978ADrCAB0zgAhv4wAhOsIIXzOAG
O/jBEI7wpcRF4Qpb+MIYzrCGN8zhDnv4wyAOsYhHTOISm/jEKE6xilfMYmuF7MUwjrGMZ0zjGtv4
xjjOsY53zOMe+/jHQA6ykIdM5CIb+cgVA5uSl8zkJjv5yVCOspSnTOUqW/nKWM6ylrfM5S57+ctg
DrOYqfa5Mpv5zGhOs5rXzOY2u/nNcI6znOdM5zrb+c54zrOe98znPk/Oe4AOtKAHTehCG/rQiE60
ohfN6EY7+tGQjsm0pCdN6Upb+tKYll4HN83pTnv606AOtahHTepSm/rUqE61qlfN6la7+tWwjrWs
Zx1BLtr61rjOta53zete+/rXwA62sIdN7GIb+9jITrayl83sZjsbigSNtrSnTe1qW/va2M62trfN
7W57+9vgDre4x03ucgfTAuZOt7rXze52u/vd8I73J0Ug73rb+974zre+981vbI+AAP0OuMAHTvCC
G/zgCMelGdCd8IY7/OEQj7jEJ07xMi6c3hXPuMY3zvGOe/zj/TRDCAAAOw==</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>2380</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>listview.gif</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271228.14</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>pencil.gif</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/gif</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">R0lGODlhCgAPAPcAAH5tXnl5eZV7PYpmR49+VNBvHNJ/O+NvFPV8GOx/JaZ2grV2h9pxjupxmqCE
QqeHa/uBH/+SL/+ZNvu6Gv+hOsCWc9GfdtumVM2gd/+9R//EH//VGf/fHv/eH/jBJP/EL//KJP/N
Iv/BMv/KMv/UJf/QLP/bIv/bI//cIf/lGoKAgZmVhqCYmqKemaqnqbKwqcGks8K9usS9vf+JuP+O
7P+h1/+n//+88MrAtcnBuMnCufDVt//ltsjIyNvF0NLRz9fX19zX0t/f3+vZ3v/v0f/73eDg4OXl
5efn5/Tz8/X08/X19fr39fv7+//7/f78+////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAACgAPAAAIdwChCBzo
ZMjAg1AUzFigBCGLGzZqMDh4xIELHzQaHCQw4oIKGTAG/phwQoSBAQObCOhAIsKBIANfbDDxAcGD
gUY8cCghocCTgStSoPgAAcfAHiE0gKBg4WALIjwyJGByUEeRHRhyIAwAoEIMIUDCIlkCJQnCgQEB
ADs=</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>914</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>pencil.gif</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271227.58</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>row-over-bg.gif</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/gif</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">R0lGODlhAQAdAIcAAAAAAAEBAQICAgMDAwQEBAUFBQYGBgcHBwgICAkJCQoKCgsLCwwMDA0NDQ4O
Dg8PDxAQEBERERISEhMTExQUFBUVFRYWFhcXFxgYGBkZGRoaGhsbGxwcHB0dHR4eHh8fHyAgICEh
ISIiIiMjIyQkJCUlJSYmJicnJygoKCkpKSoqKisrKywsLC0tLS4uLi8vLzAwMDExMTIyMjMzMzQ0
NDU1NTY2Njc3Nzg4ODk5OTo6Ojs7Ozw8PD09PT4+Pj8/P0BAQEFBQUJCQkNDQ0REREVFRUZGRkdH
R0hISElJSUpKSktLS0xMTE1NTU5OTk9PT1BQUFFRUVJSUlNTU1RUVFVVVVZWVldXV1hYWFlZWVpa
WltbW1xcXF1dXV5eXl9fX2BgYGFhYWJiYmNjY2RkZGVlZWZmZmdnZ2hoaGlpaWpqamtra2xsbG1t
bW5ubm9vb3BwcHFxcXJycnNzc3R0dHV1dXZ2dnd3d3h4eHl5eXp6ent7e3x8fH19fX5+fn9/f4CA
gIGBgYKCgoODg4SEhIWFhYaGhoeHh4iIiImJiYqKiouLi4yMjI2NjY6Ojo+Pj5CQkJGRkZKSkpOT
k5SUlJWVlZaWlpeXl5iYmJmZmZqampubm5ycnJ2dnZ6enp+fn6CgoKGhoaKioqOjo6SkpKWlpaam
pqenp6ioqKmpqaqqqqurq6ysrK2tra6urq+vr7CwsLGxsbKysrOzs7S0tLW1tba2tre3t7i4uLm5
ubq6uru7u7y8vL29vb6+vr+/v8DAwMHBwcLCwsPDw8TExMXFxcbGxsfHx8jIyMnJycrKysvLy8zM
zM3Nzc7Ozs/Pz9DQ0NHR0dLS0tPT09TU1NXV1dbW1tfX19jY2NnZ2dra2tvb29zc3N3d3d7e3t/f
3+Dg4OHh4eLi4uPj4+Tk5OXl5ebm5ufn5+jo6Onp6erq6uvr6+zs7O3t7e7u7u/v7/Dw8PHx8fLy
8vPz8/T09PX19fb29vf39/j4+Pn5+fr6+vv7+/z8/P39/f7+/v///yH5BAAAAP8ALAAAAAABAB0A
AAgUAO/ds1eP3jx58eC9W8iwoUOHAQEAOw==</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>823</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>row-over-bg.gif</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271217.22</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>sort-asc.gif</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/gif</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">R0lGODlhDQAFAIcAAGGQzUD/QOPu+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAMAAAEALAAAAAANAAUA
AAgbAAMIDABgoEGDABIeRJhQ4cKGEA8KmEiRosGAADs=</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>830</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>sort-asc.gif</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271228.63</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>sort-asc.png</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/png</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAMElEQVQI12NgQAXsQMzMgAPwAPE3
IH4HxGy4JP8D8T90RVxA/AkqiYzvAzELAyEAAEDLC89q7ZR0AAAAAElFTkSuQmCC</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>105</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>sort-asc.png</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271218.63</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>sort-desc.gif</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/gif</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">R0lGODlhDQAFAIcAAGGQzUD/QOPu+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAMAAAEALAAAAAANAAUA
AAgeAAUAGEgQgIAACBEKLHgwYcKFBh1KFNhQosOKEgMCADs=</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>833</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>sort-desc.gif</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271217.87</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>sort-desc.png</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/png</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAMklEQVQI12NgIAJwAfEnIP6Phu8D
MQtMEQ8Qf4NK/APid0DMhm4STBFWSRhgB2JmZAEAPLwLz6hj83EAAAAASUVORK5CYII=</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>107</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>sort-desc.png</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271223.53</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>stripes.png</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/png</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAAAkAAAASCAMAAAC+XgR6AAADAFBMVEUAAADExMQAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAD5DxdUAAABAHRSTlP/////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////8AU/cHJQAA
ABRJREFUCNdj+A8DDFRiMWJhUdcOAAZ8n2PdNOHmAAAAAElFTkSuQmCC</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>1125</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>stripes.png</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271226.24</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>tag_red.png</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/png</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAB4ElEQVQ4T4WSW2taQRSFz5/Ia0v+
hXDo7wsNMTZpXto0SUPfvKJ4R1NFxRuK13hBRERR8fGkR5zxsDJ7wjnVauzDetmz17fXnhml3W6j
1Wqh0WigXq+jVquhWq2iUqmgXC6fAFCOSWk2mzAMY0+TyURCCoXCUYhCk8kwHo/l5NFoZEGoJlIg
m82+C1EoMjXTNCqUSqWKpmngnMs6AfP5PFKp1EGIQlPNRmFei8jj1WoFvpiDpX/Ls+FwiEwmg2Qy
uQdRaLIZebPZgMyb5RLsix3s8xlY6kmeDQYDSoFYLLYDUcSO+lIYqIkxBj4Xkx128Ntv4A93YFeX
FqTf71MKhEIhC6IUi8VPYkd9sVi8QZ7bYOdn4He34L8ewX/e70B6vR6lgN/vlxBJyeVyqthRn4vp
EtLtYn15AX6/BXFcgCUT8rzT6VAKeL3eE2uXdDqtih312Wy2D3l8ALu5hvb1CoZ4HUoRiUTgdrs/
7tyo2E9NJBL6dDr9C7Gfg1078OfHd6xftG3zqbXCtuLxuBqNRnX6iRLSecZamA3xOqbZ5XJJ80EA
KRwOq8FgUKefaD4xmUV9x/wugBQIBGzipnX6YF2xyiHzUQDJ5/PZPB6PTman07ln/i+AJKbahPnD
v3VTr2iBM+T1htWmAAAAAElFTkSuQmCC</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>537</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>tag_red.png</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271226.7</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>tick.png</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/png</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABq0lEQVQ4y72T2S5DYRSFe+c472Ju
1RhTQqqGVCfq6ClFKY0bqqetVqtDSgzHpRhqjsQUlCASl1rVhmcQL6G6/JVowoUYEhf/3b/W3vvb
awsACP7yBP9uoF5r4luW6p2/MlCtNvKmYz36D1hI+CruRwbKYAM/eNSF2Xs3vDdW6LbUqPAU2b4l
VqxIeeOhDtNxF6biTnRut6LSW4wSh5BKfzJesjWGM6bns1i+LOVTLU/GnAjEHG+Vy93iRPFYAZUe
wXjBlvWeMk/ctQnsrnLoXUxg8X37WgTuxuC/s4PdVKHMVZgosudTaYj959ra3lD7oy/MYTo2Ds2W
LEFgDckWJVOGPQa+qB3eWw4dGwqUjosSYlse9WGNPSeaTP1hG8xXA5h78MAbtsJ4pIPpRI+JsAXu
WwuYdTlKnMKXQutHcXoEZkdOk8owhfRvc/qjNrgiZrjCZmjWWlKwkiIul/oySAQWLVuQoHu3He7I
KBw3w2gLykBgJUWWHOpbSZTMV9N1M5WkZQXUK80gsJLC0WzqR1Em+6XLJ8QgsJ4LzNkZv7oFAovO
H8nK+JdrfAW+oqk8UgoDSAAAAABJRU5ErkJggg==</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>484</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>tick.png</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271227.17</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>user_identity.gif</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/gif</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">R0lGODlhEAAQAPcAAAAAAI6WNK6Sd7CSeLnEQ7icgb+ih8OpksSsk8WumMqzlsyznc60m9S6nc62
ocy6o9fFs9vJtt7JttjIuOPKsPLYvfPav+nYx/HbwfPdxPPexvXdwvDfz/fiy/Dh0fPi0fbl1Pbo
2fjn0vjo1fjp2fjs3vnt3/nt4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAQABAA
AAhmAP8JHEiwoMF/BgYccHCQ4IICAhJEkNBQIIMKHzxwYFiRQoYQJ05cqPgPgwYSJkqEIPnPgogR
IFj+a7ChwwOZEBQgmMAygM+fFQMQGEo0wEGhRJMaLYg06dClBJs6hTpQqlKZBwMCADs=</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>905</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>user_identity.gif</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271220.13</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>user_identity_plus.gif</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/gif</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">R0lGODlhDgAPAOZJAMe+s/bo2fnt4M62oaWSgce+ssSsk/Dfz8a9ssyznZmId1dXHMW6rvDh0ZiH
d5aEcunYx5yHdbicgePKsINsVo11YPnt356Levfiy/jp2ZmCbPXdwvHbwa6Sd8qzlr+ih9fFs7qt
n7Khkq+hkvPexvbl1MW3qt7JtoVyYsa6qp2KdvPav8C0p/LYvfPi0dS6naKPeMy6o7CSeHJbRvjo
1cSxm9vJtot1X8CypqOVgsOpkq2gk/jn0tjIuPjs3sa1opmGc/PdxM60m8WumHJyJXJ4KpSdNo6W
NLnEQ////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5
BAEAAEkALAAAAAAOAA8AAAd/gEmCg0kaFREEhIIfMjoDMzcXIyKECRIdQzYnDyw4iYNCLS4NBwMO
AAAhhBNBAQICEAoFCAyEHCQZFj4BQCkmikkrPDQlFDU/OcAvGxgxKDAqO8AgHgY9C0XZRYRH3d5E
RuHbSUdI5udH4OLl5+3p6+3u6kXs8UjvRvT25keEgQA7</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>546</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>user_identity_plus.gif</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Folder" module="OFS.Folder"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_objects</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>lib</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>lib</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271231.6</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>firebugx.js</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>application/javascript</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="cdata"><![CDATA[
if (typeof console === "undefined" || typeof console.log === "undefined") {\n
var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml",\n
"group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];\n
\n
window.console = {};\n
for (var i = 0; i < names.length; ++i) {\n
window.console[names[i]] = function() {}\n
}\n
}
]]></string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>366</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>firebugx.js</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271253.18</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>jquery-1.7.min.js</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>application/javascript</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>94020</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>jquery-1.7.min.js</string> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="Pdata" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value> <string encoding="cdata"><![CDATA[
/*! jQuery v1.7 jquery.com | jquery.org/license */\n
(function(a,b){function cA(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cx(a){if(!cm[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cn||(cn=c.createElement("iframe"),cn.frameBorder=cn.width=cn.height=0),b.appendChild(cn);if(!co||!cn.createElement)co=(cn.contentWindow||cn.contentDocument).document,co.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),co.close();d=co.createElement(a),co.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cn)}cm[a]=e}return cm[a]}function cw(a,b){var c={};f.each(cs.concat.apply([],cs.slice(0,b)),function(){c[this]=a});return c}function cv(){ct=b}function cu(){setTimeout(cv,0);return ct=f.now()}function cl(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ck(){try{return new a.XMLHttpRequest}catch(b){}}function ce(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cd(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function cc(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bG.test(a)?d(a,e):cc(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)cc(a+"["+e+"]",b[e],c,d);else d(a,b)}function cb(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function ca(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bV,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=ca(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=ca(a,c,d,e,"*",g));return l}function b_(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bR),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bE(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bz:bA;if(d>0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bB(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function br(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bi,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bq(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bp(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bp)}function bp(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bo(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bn(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bm(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c+(i[c][d].namespace?".":"")+i[c][d].namespace,i[c][d],i[c][d].data)}h.data&&(h.data=f.extend({},h.data))}}function bl(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function X(a){var b=Y.split(" "),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function W(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(R.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function V(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function N(){return!0}function M(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function K(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(K,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\\w\\W]+>)[^>]*$|#([\\w\\-]*)$)/,j=/\\S/,k=/^\\s+/,l=/\\s+$/,m=/\\d/,n=/^<(\\w+)\\s*\\/?>(?:<\\/\\1>)?$/,o=/^[\\],:{}\\s]*$/,p=/\\\\(?:["\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\\\\n\\r]*"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g,r=/(?:^|:|,)(?:\\s*\\[)+/g,s=/(webkit)[ \\/]([\\w.]+)/,t=/(opera)(?:.*version)?[ \\/]([\\w.]+)/,u=/(msie) ([\\w.]+)/,v=/(mozilla)(?:.*? rv:([\\w.]+))?/,w=/-([a-z]|[0-9])/ig,x=/^-ms-/,y=function(a,b){return(b+"").toUpperCase()},z=d.userAgent,A,B,C,D=Object.prototype.toString,E=Object.prototype.hasOwnProperty,F=Array.prototype.push,G=Array.prototype.slice,H=String.prototype.trim,I=Array.prototype.indexOf,J={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7",length:0,size:function(){return this.length},toArray:function(){return G.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?F.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),B.add(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(G.apply(this,arguments),"slice",G.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:F,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;B.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!B){B=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",C,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",C),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&K()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return a!=null&&m.test(a)&&!isNaN(a)},type:function(a){return a==null?String(a):J[D.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!E.call(a,"constructor")&&!E.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||E.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(x,"ms-").replace(w,y)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:H?function(a){return a==null?"":H.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?F.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(I)return I.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=G.call(arguments,2),g=function(){return a.apply(c,f.concat(G.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=s.exec(a)||t.exec(a)||u.exec(a)||a.indexOf("compatible")<0&&v.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){J["[object "+b+"]"]=b.toLowerCase()}),A=e.uaMatch(z),A.browser&&(e.browser[A.browser]=!0,e.browser.version=A.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\\s\\xA0]+/,l=/[\\s\\xA0]+$/),h=e(c),c.addEventListener?C=function(){c.removeEventListener("DOMContentLoaded",C,!1),e.ready()}:c.attachEvent&&(C=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",C),e.ready())}),typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return e});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?m(g):h==="function"&&(!a.unique||!o.has(g))&&c.push(g)},n=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,l=j||0,j=0,k=c.length;for(;c&&l<k;l++)if(c[l].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}i=!1,c&&(a.once?e===!0?o.disable():c=[]:d&&d.length&&(e=d.shift(),o.fireWith(e[0],e[1])))},o={add:function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){i&&f<=k&&(k--,f<=l&&l--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&o.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(i?a.once||d.push([b,c]):(!a.once||!e)&&n(b,c));return this},fire:function(){o.fireWith(this,arguments);return this},fired:function(){return!!e}};return o};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){return i.done.apply(i,arguments).fail.apply(i,arguments)},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var a=c.createElement("div"),b=c.documentElement,d,e,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;a.setAttribute("className","t"),a.innerHTML=" <link/><table></table><a href=\'/a\' style=\'top:1px;float:left;opacity:.55;\'>a</a><input type=\'checkbox\'/><nav></nav>",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,unknownElems:!!a.getElementsByTagName("nav").length,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",enctype:!!c.createElement("form").enctype,submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.lastChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},m&&f.extend(p,{position:"absolute",left:"-999px",top:"-999px"});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style=\'width:4px;\'></div>",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style=\'padding:0;border:0;display:none\'></td><td>t</td></tr></table>",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;f(function(){var a,b,d,e,g,h,i=1,j="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",l="visibility:hidden;border:0;",n="style=\'"+j+"border:5px solid #000;padding:0;\'",p="<div "+n+"><div></div></div>"+"<table "+n+" cellpadding=\'0\' cellspacing=\'0\'>"+"<tr><td></td></tr></table>";m=c.getElementsByTagName("body")[0];!m||(a=c.createElement("div"),a.style.cssText=l+"width:0;height:0;position:static;top:0;margin-top:"+i+"px",m.insertBefore(a,m.firstChild),o=c.createElement("div"),o.style.cssText=j+l,o.innerHTML=p,a.appendChild(o),b=o.firstChild,d=b.firstChild,g=b.nextSibling.firstChild.firstChild,h={doesNotAddBorder:d.offsetTop!==5,doesAddBorderForTableAndCells:g.offsetTop===5},d.style.position="fixed",d.style.top="20px",h.fixedPosition=d.offsetTop===20||d.offsetTop===15,d.style.position=d.style.top="",b.style.overflow="hidden",b.style.position="relative",h.subtractsBorderForOverflowNotVisible=d.offsetTop===-5,h.doesNotIncludeMarginInBodyOffset=m.offsetTop!==i,m.removeChild(a),o=a=null,f.extend(k,h))}),o.innerHTML="",n.removeChild(o),o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var j=/^(?:\\{.*\\}|\\[.*\\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[f.expando]:a[f.expando]&&f.expando,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[f.expando]=n=++f.uuid:n=f.expando),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[f.expando]:f.expando;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)?b=b:b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" "));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[f.expando]:a.removeAttribute?a.removeAttribute(f.expando):a[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h=null;if(typeof a=="undefined"){if(this.length){h=f.data(this[0]);if(this[0].nodeType===1&&!f._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var i=0,j=e.length;i<j;i++)g=e[i].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),l(this[0],g,h[g]));f._data(this[0],"parsedAttrs",!0)}}return h}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split("."),d[1]=d[1]?"."+d[1]:"";if(c===b){h=this.triggerHandler("getData"+d[1]+"!",[d[0]]),h===b&&this.length&&(h=f.data(this[0],a),h=l(this[0],a,h));return h===b&&d[1]?this.data(d[0]):h}return this.each(function(){var b=f(this),e=[d[0],c];b.triggerHandler("setData"+d[1]+"!",e),f.data(this,a,c),b.triggerHandler("changeData"+d[1]+"!",e)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise()}});var o=/[\\n\\t\\r]/g,p=/\\s+/,q=/\\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];if(!arguments.length){if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}return b}e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!a||j===3||j===8||j===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g},removeAttr:function(a,b){var c,d,e,g,h=0;if(a.nodeType===1){d=(b||"").split(p),g=d.length;for(;h<g;h++)e=d[h].toLowerCase(),c=f.propFix[e]||e,f.attr(a,e,""),a.removeAttribute(v?e:c),u.test(e)&&c in a&&(a[c]=!1)}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can\'t be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!a||i===3||i===8||i===2)return b;h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/\\.(.*)$/,A=/^(?:textarea|input|select)$/i,B=/\\./g,C=/ /g,D=/[^\\w\\s.|`]/g,E=/^([^\\.]*)?(?:\\.(.+))?$/,F=/\\bhover(\\.\\S+)?/,G=/^key/,H=/^(?:mouse|contextmenu)|click/,I=/^(\\w*)(?:#([\\w\\-]+))?(?:\\.([\\w\\-]+))?$/,J=function(a){var b=I.exec(a);b&&\n
(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\\\s)"+b[3]+"(?:\\\\s|$)"));return b},K=function(a,b){return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||a.id===b[2])&&(!b[3]||b[3].test(a.className))},L=function(a){return f.event.special.hover?a:a.replace(F,"mouseenter$1 mouseleave$1")};f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=L(c).split(" ");for(k=0;k<c.length;k++){l=E.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,namespace:n.join(".")},p),g&&(o.quick=J(g),!o.quick&&f.expr.match.POS.test(g)&&(o.isPositional=!0)),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d){var e=f.hasData(a)&&f._data(a),g,h,i,j,k,l,m,n,o,p,q;if(!!e&&!!(m=e.events)){b=L(b||"").split(" ");for(g=0;g<b.length;g++){h=E.exec(b[g])||[],i=h[1],j=h[2];if(!i){j=j?"."+j:"";for(l in m)f.event.remove(a,l+j,c,d);return}n=f.event.special[i]||{},i=(d?n.delegateType:n.bindType)||i,p=m[i]||[],k=p.length,j=j?new RegExp("(^|\\\\.)"+j.split(".").sort().join("\\\\.(?:.*\\\\.)?")+"(\\\\.|$)"):null;if(c||j||d||n.remove)for(l=0;l<p.length;l++){q=p[l];if(!c||c.guid===q.guid)if(!j||j.test(q.namespace))if(!d||d===q.selector||d==="**"&&q.selector)p.splice(l--,1),q.selector&&p.delegateCount--,n.remove&&n.remove.call(a,q)}else p.length=0;p.length===0&&k!==p.length&&((!n.teardown||n.teardown.call(a,j)===!1)&&f.removeEvent(a,i,e.handle),delete m[i])}f.isEmptyObject(m)&&(o=e.handle,o&&(o.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\\\.)"+i.join("\\\\.(?:.*\\\\.)?")+"(\\\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"",(g||!e)&&c.preventDefault();if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,n=null;for(m=e.parentNode;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length;l++){m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d);if(c.isPropagationStopped())break}c.type=h,c.isDefaultPrevented()||(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=(f.event.special[c.type]||{}).handle,j=[],k,l,m,n,o,p,q,r,s,t,u;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!=="click"))for(m=c.target;m!=this;m=m.parentNode||this){o={},q=[];for(k=0;k<e;k++)r=d[k],s=r.selector,t=o[s],r.isPositional?t=(t||(o[s]=f(s))).index(m)>=0:t===b&&(t=o[s]=r.quick?K(m,r.quick):f(m).is(s)),t&&q.push(r);q.length&&j.push({elem:m,matches:q})}d.length>e&&j.push({elem:this,matches:d.slice(e)});for(k=0;k<j.length&&!c.isPropagationStopped();k++){p=j[k],c.currentTarget=p.elem;for(l=0;l<p.matches.length&&!c.isImmediatePropagationStopped();l++){r=p.matches[l];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace))c.data=r.data,c.handleObj=r,n=(i||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}return c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement wheelDelta".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},focus:{delegateType:"focusin",noBubble:!0},blur:{delegateType:"focusout",noBubble:!0},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?N:M):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=N;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=N;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=N,this.stopPropagation()},isDefaultPrevented:M,isPropagationStopped:M,isImmediatePropagationStopped:M},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]=f.event.special[b]={delegateType:b,bindType:b,handle:function(a){var b=this,c=a.relatedTarget,d=a.handleObj,e=d.selector,g,h;if(!c||d.origType===a.type||c!==b&&!f.contains(b,c))g=a.type,a.type=d.origType,h=d.handler.apply(this,arguments),a.type=g;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){this.parentNode&&f.event.simulate("submit",this.parentNode,a,!0)}),d._submit_attached=!0)})},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(A.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;A.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return A.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=M;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on.call(this,a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.type+"."+e.namespace:e.type,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=M);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),G.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),H.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\\((?:\\([^()]+\\)|[^()]+)+\\)|\\[(?:\\[[^\\[\\]]*\\]|[\'"][^\'"]*[\'"]|[^\\[\\]\'"]+)+\\]|\\\\.|[^ >+~,(\\[\\\\]+)+|[>+~])(\\s*,\\s*)?((?:.|\\r|\\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\\\/g,k=/\\r\\n/g,l=/\\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw"Syntax error, unrecognized expression: "+a};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)/,CLASS:/\\.((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)/,NAME:/\\[name=[\'"]*((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)[\'"]*\\]/,ATTR:/\\[\\s*((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)\\s*(?:(\\S?=)\\s*(?:([\'"])(.*?)\\3|(#?(?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)*)|)|)\\s*\\]/,TAG:/^((?:[\\w\\u00c0-\\uFFFF\\*\\-]|\\\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\\(\\s*(even|odd|(?:[+\\-]?\\d+|(?:[+\\-]?\\d*)?n\\s*(?:[+\\-]\\s*\\d+)?))\\s*\\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\\((\\d*)\\))?(?=[^\\-]|$)/,PSEUDO:/:((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)(?:\\(([\'"]?)((?:\\([^\\)]+\\)|[^\\(\\)]*)+)\\2\\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\\t\\n\\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\\+|\\s*/g,"");var b=/(-?)(\\d*)(?:n([+\\-]?\\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\\[]*\\])(?![^\\(]*\\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\\r|\\n)*?)/.source+o.match[r].source.replace(/\\\\(\\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name=\'"+d+"\'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href=\'#\'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class=\'TEST\'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\\w+$)|^\\.([\\w\\-]+$)|^#([\\w\\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\\s*[+~]/.test(b);l?n=n.replace(/\'/g,"\\\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id=\'"+n+"\'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!=\'\']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\\=\\s*([^\'"\\]]*)\\s*\\]/g,"=\'$1\']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class=\'test e\'></div><div class=\'test\'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var O=/Until$/,P=/^(?:parents|prevUntil|prevAll)/,Q=/,/,R=/^.[^:#\\[\\.,]*$/,S=Array.prototype.slice,T=f.expr.match.POS,U={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(W(this,a,!1),"not",a)},filter:function(a){return this.pushStack(W(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?T.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=T.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(V(c[0])||V(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=S.call(arguments);O.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!U[a]?f.unique(e):e,(this.length>1||Q.test(d))&&P.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var Y="abbr article aside audio canvas datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",Z=/ jQuery\\d+="(?:\\d+|null)"/g,$=/^\\s+/,_=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/ig,ba=/<([\\w:]+)/,bb=/<tbody/i,bc=/<|&#?\\w+;/,bd=/<(?:script|style)/i,be=/<(?:script|object|embed|option|style)/i,bf=new RegExp("<(?:"+Y.replace(" ","|")+")","i"),bg=/checked\\s*(?:[^=]|=\\s*.checked.)/i,bh=/\\/(java|ecma)script/i,bi=/^\\s*<!(?:\\[CDATA\\[|\\-\\-)/,bj={option:[1,"<select multiple=\'multiple\'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bk=X(c);bj.optgroup=bj.option,bj.tbody=bj.tfoot=bj.colgroup=bj.caption=bj.thead,bj.th=bj.td,f.support.htmlSerialize||(bj._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after"\n
,arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Z,""):null;if(typeof a=="string"&&!bd.test(a)&&(f.support.leadingWhitespace||!$.test(a))&&!bj[(ba.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(_,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bg.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bl(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,br)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!be.test(j)&&(f.support.checkClone||!bg.test(j))&&!f.support.unknownElems&&bf.test(j)&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bn(a,d),e=bo(a),g=bo(d);for(h=0;e[h];++h)g[h]&&bn(e[h],g[h])}if(b){bm(a,d);if(c){e=bo(a),g=bo(d);for(h=0;e[h];++h)bm(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!bc.test(k))k=b.createTextNode(k);else{k=k.replace(_,"<$1></$2>");var l=(ba.exec(k)||["",""])[1].toLowerCase(),m=bj[l]||bj._default,n=m[0],o=b.createElement("div");b===c?bk.appendChild(o):X(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=bb.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&$.test(k)&&o.insertBefore(b.createTextNode($.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bq(k[i]);else bq(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||bh.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bs=/alpha\\([^)]*\\)/i,bt=/opacity=([^)]*)/,bu=/([A-Z]|^ms)/g,bv=/^-?\\d+(?:px)?$/i,bw=/^-?\\d/,bx=/^([\\-+])=([\\-+.\\de]+)/,by={position:"absolute",visibility:"hidden",display:"block"},bz=["Left","Right"],bA=["Top","Bottom"],bB,bC,bD;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bB(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bx.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bB)return bB(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bE(a,b,d);f.swap(a,by,function(){e=bE(a,b,d)});return e}},set:function(a,b){if(!bv.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bt.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bs,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bs.test(g)?g.replace(bs,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bB(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bC=function(a,c){var d,e,g;c=c.replace(bu,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bD=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bv.test(f)&&bw.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bB=bC||bD,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bF=/%20/g,bG=/\\[\\]$/,bH=/\\r?\\n/g,bI=/#.*$/,bJ=/^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/mg,bK=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bL=/^(?:about|app|app\\-storage|.+\\-extension|file|res|widget):$/,bM=/^(?:GET|HEAD)$/,bN=/^\\/\\//,bO=/\\?/,bP=/<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi,bQ=/^(?:select|textarea)/i,bR=/\\s+/,bS=/([?&])_=[^&]*/,bT=/^([\\w\\+\\.\\-]+:)(?:\\/\\/([^\\/?#:]*)(?::(\\d+))?)?/,bU=f.fn.load,bV={},bW={},bX,bY,bZ=["*/"]+["*"];try{bX=e.href}catch(b$){bX=c.createElement("a"),bX.href="",bX=bX.href}bY=bT.exec(bX.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bU)return bU.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bP,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bQ.test(this.nodeName)||bK.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bH,"\\r\\n")}}):{name:b.name,value:c.replace(bH,"\\r\\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?cb(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),cb(a,b);return a},ajaxSettings:{url:bX,isLocal:bL.test(bY[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bZ},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:b_(bV),ajaxTransport:b_(bW),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cd(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=ce(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bJ.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bI,"").replace(bN,bY[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bR),d.crossDomain==null&&(r=bT.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bY[1]&&r[2]==bY[2]&&(r[3]||(r[1]==="http:"?80:443))==(bY[3]||(bY[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),ca(bV,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bM.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bO.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bS,"$1_="+x);d.url=y+(y===d.url?(bO.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bZ+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=ca(bW,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){s<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)cc(g,a[g],c,e);return d.join("&").replace(bF,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cf=f.now(),cg=/(\\=)\\?(&|$)|\\?\\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cf++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cg.test(b.url)||e&&cg.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(cg,l),b.url===j&&(e&&(k=k.replace(cg,l)),b.data===k&&(j+=(/\\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var ch=a.ActiveXObject?function(){for(var a in cj)cj[a](0,1)}:!1,ci=0,cj;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ck()||cl()}:ck,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,ch&&delete cj[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++ci,ch&&(cj||(cj={},f(a).unload(ch)),cj[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cm={},cn,co,cp=/^(?:toggle|show|hide)$/,cq=/^([+\\-]=)?([\\d+.\\-]+)([a-z%]*)$/i,cr,cs=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],ct;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cw("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cx(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cw("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cw("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cx(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cp.test(h)?(o=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),o?(f._data(this,"toggle"+i,o==="show"?"hide":"show"),j[o]()):j[h]()):(k=cq.exec(h),l=j.cur(),k?(m=parseFloat(k[2]),n=k[3]||(f.cssNumber[i]?"":"px"),n!=="px"&&(f.style(this,i,(m||1)+n),l=(m||1)/j.cur()*l,f.style(this,i,l+n)),k[1]&&(m=(k[1]==="-="?-1:1)*m+l),j.custom(l,m,n)):j.custom(l,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:cw("show",1),slideUp:cw("hide",1),slideToggle:cw("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=ct||cu(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){e.options.hide&&f._data(e.elem,"fxshow"+e.prop)===b&&f._data(e.elem,"fxshow"+e.prop,e.start)},h()&&f.timers.push(h)&&!cr&&(cr=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=ct||cu(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cr),cr=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(["width","height"],function(a,b){f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now))}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cy=/^t(?:able|d|h)$/i,cz=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cA(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.support.fixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cy.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.support.fixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cz.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cz.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cA(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cA(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window);
]]></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271243.33</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>jquery.event.drag-2.2.js</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>application/javascript</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="cdata"><![CDATA[
/*! \n
* jquery.event.drag - v 2.2\n
* Copyright (c) 2010 Three Dub Media - http://threedubmedia.com\n
* Open Source MIT License - http://threedubmedia.com/code/license\n
*/\n
// Created: 2008-06-04 \n
// Updated: 2012-05-21\n
// REQUIRES: jquery 1.7.x\n
\n
;(function( $ ){\n
\n
// add the jquery instance method\n
$.fn.drag = function( str, arg, opts ){\n
\t// figure out the event type\n
\tvar type = typeof str == "string" ? str : "",\n
\t// figure out the event handler...\n
\tfn = $.isFunction( str ) ? str : $.isFunction( arg ) ? arg : null;\n
\t// fix the event type\n
\tif ( type.indexOf("drag") !== 0 ) \n
\t\ttype = "drag"+ type;\n
\t// were options passed\n
\topts = ( str == fn ? arg : opts ) || {};\n
\t// trigger or bind event handler\n
\treturn fn ? this.bind( type, opts, fn ) : this.trigger( type );\n
};\n
\n
// local refs (increase compression)\n
var $event = $.event, \n
$special = $event.special,\n
// configure the drag special event \n
drag = $special.drag = {\n
\t\n
\t// these are the default settings\n
\tdefaults: {\n
\t\twhich: 1, // mouse button pressed to start drag sequence\n
\t\tdistance: 0, // distance dragged before dragstart\n
\t\tnot: \':input\', // selector to suppress dragging on target elements\n
\t\thandle: null, // selector to match handle target elements\n
\t\trelative: false, // true to use "position", false to use "offset"\n
\t\tdrop: true, // false to suppress drop events, true or selector to allow\n
\t\tclick: false // false to suppress click events after dragend (no proxy)\n
\t},\n
\t\n
\t// the key name for stored drag data\n
\tdatakey: "dragdata",\n
\t\n
\t// prevent bubbling for better performance\n
\tnoBubble: true,\n
\t\n
\t// count bound related events\n
\tadd: function( obj ){ \n
\t\t// read the interaction data\n
\t\tvar data = $.data( this, drag.datakey ),\n
\t\t// read any passed options \n
\t\topts = obj.data || {};\n
\t\t// count another realted event\n
\t\tdata.related += 1;\n
\t\t// extend data options bound with this event\n
\t\t// don\'t iterate "opts" in case it is a node \n
\t\t$.each( drag.defaults, function( key, def ){\n
\t\t\tif ( opts[ key ] !== undefined )\n
\t\t\t\tdata[ key ] = opts[ key ];\n
\t\t});\n
\t},\n
\t\n
\t// forget unbound related events\n
\tremove: function(){\n
\t\t$.data( this, drag.datakey ).related -= 1;\n
\t},\n
\t\n
\t// configure interaction, capture settings\n
\tsetup: function(){\n
\t\t// check for related events\n
\t\tif ( $.data( this, drag.datakey ) ) \n
\t\t\treturn;\n
\t\t// initialize the drag data with copied defaults\n
\t\tvar data = $.extend({ related:0 }, drag.defaults );\n
\t\t// store the interaction data\n
\t\t$.data( this, drag.datakey, data );\n
\t\t// bind the mousedown event, which starts drag interactions\n
\t\t$event.add( this, "touchstart mousedown", drag.init, data );\n
\t\t// prevent image dragging in IE...\n
\t\tif ( this.attachEvent ) \n
\t\t\tthis.attachEvent("ondragstart", drag.dontstart ); \n
\t},\n
\t\n
\t// destroy configured interaction\n
\tteardown: function(){\n
\t\tvar data = $.data( this, drag.datakey ) || {};\n
\t\t// check for related events\n
\t\tif ( data.related ) \n
\t\t\treturn;\n
\t\t// remove the stored data\n
\t\t$.removeData( this, drag.datakey );\n
\t\t// remove the mousedown event\n
\t\t$event.remove( this, "touchstart mousedown", drag.init );\n
\t\t// enable text selection\n
\t\tdrag.textselect( true ); \n
\t\t// un-prevent image dragging in IE...\n
\t\tif ( this.detachEvent ) \n
\t\t\tthis.detachEvent("ondragstart", drag.dontstart ); \n
\t},\n
\t\t\n
\t// initialize the interaction\n
\tinit: function( event ){ \n
\t\t// sorry, only one touch at a time\n
\t\tif ( drag.touched ) \n
\t\t\treturn;\n
\t\t// the drag/drop interaction data\n
\t\tvar dd = event.data, results;\n
\t\t// check the which directive\n
\t\tif ( event.which != 0 && dd.which > 0 && event.which != dd.which ) \n
\t\t\treturn; \n
\t\t// check for suppressed selector\n
\t\tif ( $( event.target ).is( dd.not ) ) \n
\t\t\treturn;\n
\t\t// check for handle selector\n
\t\tif ( dd.handle && !$( event.target ).closest( dd.handle, event.currentTarget ).length ) \n
\t\t\treturn;\n
\n
\t\tdrag.touched = event.type == \'touchstart\' ? this : null;\n
\t\tdd.propagates = 1;\n
\t\tdd.mousedown = this;\n
\t\tdd.interactions = [ drag.interaction( this, dd ) ];\n
\t\tdd.target = event.target;\n
\t\tdd.pageX = event.pageX;\n
\t\tdd.pageY = event.pageY;\n
\t\tdd.dragging = null;\n
\t\t// handle draginit event... \n
\t\tresults = drag.hijack( event, "draginit", dd );\n
\t\t// early cancel\n
\t\tif ( !dd.propagates )\n
\t\t\treturn;\n
\t\t// flatten the result set\n
\t\tresults = drag.flatten( results );\n
\t\t// insert new interaction elements\n
\t\tif ( results && results.length ){\n
\t\t\tdd.interactions = [];\n
\t\t\t$.each( results, function(){\n
\t\t\t\tdd.interactions.push( drag.interaction( this, dd ) );\n
\t\t\t});\n
\t\t}\n
\t\t// remember how many interactions are propagating\n
\t\tdd.propagates = dd.interactions.length;\n
\t\t// locate and init the drop targets\n
\t\tif ( dd.drop !== false && $special.drop ) \n
\t\t\t$special.drop.handler( event, dd );\n
\t\t// disable text selection\n
\t\tdrag.textselect( false ); \n
\t\t// bind additional events...\n
\t\tif ( drag.touched )\n
\t\t\t$event.add( drag.touched, "touchmove touchend", drag.handler, dd );\n
\t\telse \n
\t\t\t$event.add( document, "mousemove mouseup", drag.handler, dd );\n
\t\t// helps prevent text selection or scrolling\n
\t\tif ( !drag.touched || dd.live )\n
\t\t\treturn false;\n
\t},\t\n
\t\n
\t// returns an interaction object\n
\tinteraction: function( elem, dd ){\n
\t\tvar offset = $( elem )[ dd.relative ? "position" : "offset" ]() || { top:0, left:0 };\n
\t\treturn {\n
\t\t\tdrag: elem, \n
\t\t\tcallback: new drag.callback(), \n
\t\t\tdroppable: [],\n
\t\t\toffset: offset\n
\t\t};\n
\t},\n
\t\n
\t// handle drag-releatd DOM events\n
\thandler: function( event ){ \n
\t\t// read the data before hijacking anything\n
\t\tvar dd = event.data;\t\n
\t\t// handle various events\n
\t\tswitch ( event.type ){\n
\t\t\t// mousemove, check distance, start dragging\n
\t\t\tcase !dd.dragging && \'touchmove\': \n
\t\t\t\tevent.preventDefault();\n
\t\t\tcase !dd.dragging && \'mousemove\':\n
\t\t\t\t// drag tolerance, x≤ + y≤ = distance≤\n
\t\t\t\tif ( Math.pow( event.pageX-dd.pageX, 2 ) + Math.pow( event.pageY-dd.pageY, 2 ) < Math.pow( dd.distance, 2 ) ) \n
\t\t\t\t\tbreak; // distance tolerance not reached\n
\t\t\t\tevent.target = dd.target; // force target from "mousedown" event (fix distance issue)\n
\t\t\t\tdrag.hijack( event, "dragstart", dd ); // trigger "dragstart"\n
\t\t\t\tif ( dd.propagates ) // "dragstart" not rejected\n
\t\t\t\t\tdd.dragging = true; // activate interaction\n
\t\t\t// mousemove, dragging\n
\t\t\tcase \'touchmove\':\n
\t\t\t\tevent.preventDefault();\n
\t\t\tcase \'mousemove\':\n
\t\t\t\tif ( dd.dragging ){\n
\t\t\t\t\t// trigger "drag"\t\t\n
\t\t\t\t\tdrag.hijack( event, "drag", dd );\n
\t\t\t\t\tif ( dd.propagates ){\n
\t\t\t\t\t\t// manage drop events\n
\t\t\t\t\t\tif ( dd.drop !== false && $special.drop )\n
\t\t\t\t\t\t\t$special.drop.handler( event, dd ); // "dropstart", "dropend"\t\t\t\t\t\t\t\n
\t\t\t\t\t\tbreak; // "drag" not rejected, stop\t\t\n
\t\t\t\t\t}\n
\t\t\t\t\tevent.type = "mouseup"; // helps "drop" handler behave\n
\t\t\t\t}\n
\t\t\t// mouseup, stop dragging\n
\t\t\tcase \'touchend\': \n
\t\t\tcase \'mouseup\': \n
\t\t\tdefault:\n
\t\t\t\tif ( drag.touched )\n
\t\t\t\t\t$event.remove( drag.touched, "touchmove touchend", drag.handler ); // remove touch events\n
\t\t\t\telse \n
\t\t\t\t\t$event.remove( document, "mousemove mouseup", drag.handler ); // remove page events\t\n
\t\t\t\tif ( dd.dragging ){\n
\t\t\t\t\tif ( dd.drop !== false && $special.drop )\n
\t\t\t\t\t\t$special.drop.handler( event, dd ); // "drop"\n
\t\t\t\t\tdrag.hijack( event, "dragend", dd ); // trigger "dragend"\t\n
\t\t\t\t}\n
\t\t\t\tdrag.textselect( true ); // enable text selection\n
\t\t\t\t// if suppressing click events...\n
\t\t\t\tif ( dd.click === false && dd.dragging )\n
\t\t\t\t\t$.data( dd.mousedown, "suppress.click", new Date().getTime() + 5 );\n
\t\t\t\tdd.dragging = drag.touched = false; // deactivate element\t\n
\t\t\t\tbreak;\n
\t\t}\n
\t},\n
\t\t\n
\t// re-use event object for custom events\n
\thijack: function( event, type, dd, x, elem ){\n
\t\t// not configured\n
\t\tif ( !dd ) \n
\t\t\treturn;\n
\t\t// remember the original event and type\n
\t\tvar orig = { event:event.originalEvent, type:event.type },\n
\t\t// is the event drag related or drog related?\n
\t\tmode = type.indexOf("drop") ? "drag" : "drop",\n
\t\t// iteration vars\n
\t\tresult, i = x || 0, ia, $elems, callback,\n
\t\tlen = !isNaN( x ) ? x : dd.interactions.length;\n
\t\t// modify the event type\n
\t\tevent.type = type;\n
\t\t// remove the original event\n
\t\tevent.originalEvent = null;\n
\t\t// initialize the results\n
\t\tdd.results = [];\n
\t\t// handle each interacted element\n
\t\tdo if ( ia = dd.interactions[ i ] ){\n
\t\t\t// validate the interaction\n
\t\t\tif ( type !== "dragend" && ia.cancelled )\n
\t\t\t\tcontinue;\n
\t\t\t// set the dragdrop properties on the event object\n
\t\t\tcallback = drag.properties( event, dd, ia );\n
\t\t\t// prepare for more results\n
\t\t\tia.results = [];\n
\t\t\t// handle each element\n
\t\t\t$( elem || ia[ mode ] || dd.droppable ).each(function( p, subject ){\n
\t\t\t\t// identify drag or drop targets individually\n
\t\t\t\tcallback.target = subject;\n
\t\t\t\t// force propagtion of the custom event\n
\t\t\t\tevent.isPropagationStopped = function(){ return false; };\n
\t\t\t\t// handle the event\t\n
\t\t\t\tresult = subject ? $event.dispatch.call( subject, event, callback ) : null;\n
\t\t\t\t// stop the drag interaction for this element\n
\t\t\t\tif ( result === false ){\n
\t\t\t\t\tif ( mode == "drag" ){\n
\t\t\t\t\t\tia.cancelled = true;\n
\t\t\t\t\t\tdd.propagates -= 1;\n
\t\t\t\t\t}\n
\t\t\t\t\tif ( type == "drop" ){\n
\t\t\t\t\t\tia[ mode ][p] = null;\n
\t\t\t\t\t}\n
\t\t\t\t}\n
\t\t\t\t// assign any dropinit elements\n
\t\t\t\telse if ( type == "dropinit" )\n
\t\t\t\t\tia.droppable.push( drag.element( result ) || subject );\n
\t\t\t\t// accept a returned proxy element \n
\t\t\t\tif ( type == "dragstart" )\n
\t\t\t\t\tia.proxy = $( drag.element( result ) || ia.drag )[0];\n
\t\t\t\t// remember this result\t\n
\t\t\t\tia.results.push( result );\n
\t\t\t\t// forget the event result, for recycling\n
\t\t\t\tdelete event.result;\n
\t\t\t\t// break on cancelled handler\n
\t\t\t\tif ( type !== "dropinit" )\n
\t\t\t\t\treturn result;\n
\t\t\t});\t\n
\t\t\t// flatten the results\t\n
\t\t\tdd.results[ i ] = drag.flatten( ia.results );\t\n
\t\t\t// accept a set of valid drop targets\n
\t\t\tif ( type == "dropinit" )\n
\t\t\t\tia.droppable = drag.flatten( ia.droppable );\n
\t\t\t// locate drop targets\n
\t\t\tif ( type == "dragstart" && !ia.cancelled )\n
\t\t\t\tcallback.update(); \n
\t\t}\n
\t\twhile ( ++i < len )\n
\t\t// restore the original event & type\n
\t\tevent.type = orig.type;\n
\t\tevent.originalEvent = orig.event;\n
\t\t// return all handler results\n
\t\treturn drag.flatten( dd.results );\n
\t},\n
\t\t\n
\t// extend the callback object with drag/drop properties...\n
\tproperties: function( event, dd, ia ){\t\t\n
\t\tvar obj = ia.callback;\n
\t\t// elements\n
\t\tobj.drag = ia.drag;\n
\t\tobj.proxy = ia.proxy || ia.drag;\n
\t\t// starting mouse position\n
\t\tobj.startX = dd.pageX;\n
\t\tobj.startY = dd.pageY;\n
\t\t// current distance dragged\n
\t\tobj.deltaX = event.pageX - dd.pageX;\n
\t\tobj.deltaY = event.pageY - dd.pageY;\n
\t\t// original element position\n
\t\tobj.originalX = ia.offset.left;\n
\t\tobj.originalY = ia.offset.top;\n
\t\t// adjusted element position\n
\t\tobj.offsetX = obj.originalX + obj.deltaX; \n
\t\tobj.offsetY = obj.originalY + obj.deltaY;\n
\t\t// assign the drop targets information\n
\t\tobj.drop = drag.flatten( ( ia.drop || [] ).slice() );\n
\t\tobj.available = drag.flatten( ( ia.droppable || [] ).slice() );\n
\t\treturn obj;\t\n
\t},\n
\t\n
\t// determine is the argument is an element or jquery instance\n
\telement: function( arg ){\n
\t\tif ( arg && ( arg.jquery || arg.nodeType == 1 ) )\n
\t\t\treturn arg;\n
\t},\n
\t\n
\t// flatten nested jquery objects and arrays into a single dimension array\n
\tflatten: function( arr ){\n
\t\treturn $.map( arr, function( member ){\n
\t\t\treturn member && member.jquery ? $.makeArray( member ) : \n
\t\t\t\tmember && member.length ? drag.flatten( member ) : member;\n
\t\t});\n
\t},\n
\t\n
\t// toggles text selection attributes ON (true) or OFF (false)\n
\ttextselect: function( bool ){ \n
\t\t$( document )[ bool ? "unbind" : "bind" ]("selectstart", drag.dontstart )\n
\t\t\t.css("MozUserSelect", bool ? "" : "none" );\n
\t\t// .attr("unselectable", bool ? "off" : "on" )\n
\t\tdocument.unselectable = bool ? "off" : "on"; \n
\t},\n
\t\n
\t// suppress "selectstart" and "ondragstart" events\n
\tdontstart: function(){ \n
\t\treturn false; \n
\t},\n
\t\n
\t// a callback instance contructor\n
\tcallback: function(){}\n
\t\n
};\n
\n
// callback methods\n
drag.callback.prototype = {\n
\tupdate: function(){\n
\t\tif ( $special.drop && this.available.length )\n
\t\t\t$.each( this.available, function( i ){\n
\t\t\t\t$special.drop.locate( this, i );\n
\t\t\t});\n
\t}\n
};\n
\n
// patch $.event.$dispatch to allow suppressing clicks\n
var $dispatch = $event.dispatch;\n
$event.dispatch = function( event ){\n
\tif ( $.data( this, "suppress."+ event.type ) - new Date().getTime() > 0 ){\n
\t\t$.removeData( this, "suppress."+ event.type );\n
\t\treturn;\n
\t}\n
\treturn $dispatch.apply( this, arguments );\n
};\n
\n
// event fix hooks for touch events...\n
var touchHooks = \n
$event.fixHooks.touchstart = \n
$event.fixHooks.touchmove = \n
$event.fixHooks.touchend =\n
$event.fixHooks.touchcancel = {\n
\tprops: "clientX clientY pageX pageY screenX screenY".split( " " ),\n
\tfilter: function( event, orig ) {\n
\t\tif ( orig ){\n
\t\t\tvar touched = ( orig.touches && orig.touches[0] )\n
\t\t\t\t|| ( orig.changedTouches && orig.changedTouches[0] )\n
\t\t\t\t|| null; \n
\t\t\t// iOS webkit: touchstart, touchmove, touchend\n
\t\t\tif ( touched ) \n
\t\t\t\t$.each( touchHooks.props, function( i, prop ){\n
\t\t\t\t\tevent[ prop ] = touched[ prop ];\n
\t\t\t\t});\n
\t\t}\n
\t\treturn event;\n
\t}\n
};\n
\n
// share the same special event configuration with related events...\n
$special.draginit = $special.dragstart = $special.dragend = drag;\n
\n
})( jQuery );
]]></string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>12832</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>jquery.event.drag-2.2.js</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271254.19</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>jquery.event.drop-2.2.js</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>application/javascript</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="cdata"><![CDATA[
/*! \n
* jquery.event.drop - v 2.2\n
* Copyright (c) 2010 Three Dub Media - http://threedubmedia.com\n
* Open Source MIT License - http://threedubmedia.com/code/license\n
*/\n
// Created: 2008-06-04 \n
// Updated: 2012-05-21\n
// REQUIRES: jquery 1.7.x, event.drag 2.2\n
\n
;(function($){ // secure $ jQuery alias\n
\n
// Events: drop, dropstart, dropend\n
\n
// add the jquery instance method\n
$.fn.drop = function( str, arg, opts ){\n
\t// figure out the event type\n
\tvar type = typeof str == "string" ? str : "",\n
\t// figure out the event handler...\n
\tfn = $.isFunction( str ) ? str : $.isFunction( arg ) ? arg : null;\n
\t// fix the event type\n
\tif ( type.indexOf("drop") !== 0 ) \n
\t\ttype = "drop"+ type;\n
\t// were options passed\n
\topts = ( str == fn ? arg : opts ) || {};\n
\t// trigger or bind event handler\n
\treturn fn ? this.bind( type, opts, fn ) : this.trigger( type );\n
};\n
\n
// DROP MANAGEMENT UTILITY\n
// returns filtered drop target elements, caches their positions\n
$.drop = function( opts ){ \n
\topts = opts || {};\n
\t// safely set new options...\n
\tdrop.multi = opts.multi === true ? Infinity : \n
\t\topts.multi === false ? 1 : !isNaN( opts.multi ) ? opts.multi : drop.multi;\n
\tdrop.delay = opts.delay || drop.delay;\n
\tdrop.tolerance = $.isFunction( opts.tolerance ) ? opts.tolerance : \n
\t\topts.tolerance === null ? null : drop.tolerance;\n
\tdrop.mode = opts.mode || drop.mode || \'intersect\';\n
};\n
\n
// local refs (increase compression)\n
var $event = $.event, \n
$special = $event.special,\n
// configure the drop special event\n
drop = $.event.special.drop = {\n
\n
\t// these are the default settings\n
\tmulti: 1, // allow multiple drop winners per dragged element\n
\tdelay: 20, // async timeout delay\n
\tmode: \'overlap\', // drop tolerance mode\n
\t\t\n
\t// internal cache\n
\ttargets: [], \n
\t\n
\t// the key name for stored drop data\n
\tdatakey: "dropdata",\n
\t\t\n
\t// prevent bubbling for better performance\n
\tnoBubble: true,\n
\t\n
\t// count bound related events\n
\tadd: function( obj ){ \n
\t\t// read the interaction data\n
\t\tvar data = $.data( this, drop.datakey );\n
\t\t// count another realted event\n
\t\tdata.related += 1;\n
\t},\n
\t\n
\t// forget unbound related events\n
\tremove: function(){\n
\t\t$.data( this, drop.datakey ).related -= 1;\n
\t},\n
\t\n
\t// configure the interactions\n
\tsetup: function(){\n
\t\t// check for related events\n
\t\tif ( $.data( this, drop.datakey ) ) \n
\t\t\treturn;\n
\t\t// initialize the drop element data\n
\t\tvar data = { \n
\t\t\trelated: 0,\n
\t\t\tactive: [],\n
\t\t\tanyactive: 0,\n
\t\t\twinner: 0,\n
\t\t\tlocation: {}\n
\t\t};\n
\t\t// store the drop data on the element\n
\t\t$.data( this, drop.datakey, data );\n
\t\t// store the drop target in internal cache\n
\t\tdrop.targets.push( this );\n
\t},\n
\t\n
\t// destroy the configure interaction\t\n
\tteardown: function(){ \n
\t\tvar data = $.data( this, drop.datakey ) || {};\n
\t\t// check for related events\n
\t\tif ( data.related ) \n
\t\t\treturn;\n
\t\t// remove the stored data\n
\t\t$.removeData( this, drop.datakey );\n
\t\t// reference the targeted element\n
\t\tvar element = this;\n
\t\t// remove from the internal cache\n
\t\tdrop.targets = $.grep( drop.targets, function( target ){ \n
\t\t\treturn ( target !== element ); \n
\t\t});\n
\t},\n
\t\n
\t// shared event handler\n
\thandler: function( event, dd ){ \n
\t\t// local vars\n
\t\tvar results, $targets;\n
\t\t// make sure the right data is available\n
\t\tif ( !dd ) \n
\t\t\treturn;\n
\t\t// handle various events\n
\t\tswitch ( event.type ){\n
\t\t\t// draginit, from $.event.special.drag\n
\t\t\tcase \'mousedown\': // DROPINIT >>\n
\t\t\tcase \'touchstart\': // DROPINIT >>\n
\t\t\t\t// collect and assign the drop targets\n
\t\t\t\t$targets = $( drop.targets );\n
\t\t\t\tif ( typeof dd.drop == "string" )\n
\t\t\t\t\t$targets = $targets.filter( dd.drop );\n
\t\t\t\t// reset drop data winner properties\n
\t\t\t\t$targets.each(function(){\n
\t\t\t\t\tvar data = $.data( this, drop.datakey );\n
\t\t\t\t\tdata.active = [];\n
\t\t\t\t\tdata.anyactive = 0;\n
\t\t\t\t\tdata.winner = 0;\n
\t\t\t\t});\n
\t\t\t\t// set available target elements\n
\t\t\t\tdd.droppable = $targets;\n
\t\t\t\t// activate drop targets for the initial element being dragged\n
\t\t\t\t$special.drag.hijack( event, "dropinit", dd ); \n
\t\t\t\tbreak;\n
\t\t\t// drag, from $.event.special.drag\n
\t\t\tcase \'mousemove\': // TOLERATE >>\n
\t\t\tcase \'touchmove\': // TOLERATE >>\n
\t\t\t\tdrop.event = event; // store the mousemove event\n
\t\t\t\tif ( !drop.timer )\n
\t\t\t\t\t// monitor drop targets\n
\t\t\t\t\tdrop.tolerate( dd ); \n
\t\t\t\tbreak;\n
\t\t\t// dragend, from $.event.special.drag\n
\t\t\tcase \'mouseup\': // DROP >> DROPEND >>\n
\t\t\tcase \'touchend\': // DROP >> DROPEND >>\n
\t\t\t\tdrop.timer = clearTimeout( drop.timer ); // delete timer\t\n
\t\t\t\tif ( dd.propagates ){\n
\t\t\t\t\t$special.drag.hijack( event, "drop", dd ); \n
\t\t\t\t\t$special.drag.hijack( event, "dropend", dd ); \n
\t\t\t\t}\n
\t\t\t\tbreak;\n
\t\t\t\t\n
\t\t}\n
\t},\n
\t\t\n
\t// returns the location positions of an element\n
\tlocate: function( elem, index ){ \n
\t\tvar data = $.data( elem, drop.datakey ),\n
\t\t$elem = $( elem ), \n
\t\tposi = $elem.offset() || {}, \n
\t\theight = $elem.outerHeight(), \n
\t\twidth = $elem.outerWidth(),\n
\t\tlocation = { \n
\t\t\telem: elem, \n
\t\t\twidth: width, \n
\t\t\theight: height,\n
\t\t\ttop: posi.top, \n
\t\t\tleft: posi.left, \n
\t\t\tright: posi.left + width, \n
\t\t\tbottom: posi.top + height\n
\t\t};\n
\t\t// drag elements might not have dropdata\n
\t\tif ( data ){\n
\t\t\tdata.location = location;\n
\t\t\tdata.index = index;\n
\t\t\tdata.elem = elem;\n
\t\t}\n
\t\treturn location;\n
\t},\n
\t\n
\t// test the location positions of an element against another OR an X,Y coord\n
\tcontains: function( target, test ){ // target { location } contains test [x,y] or { location }\n
\t\treturn ( ( test[0] || test.left ) >= target.left && ( test[0] || test.right ) <= target.right\n
\t\t\t&& ( test[1] || test.top ) >= target.top && ( test[1] || test.bottom ) <= target.bottom ); \n
\t},\n
\t\n
\t// stored tolerance modes\n
\tmodes: { // fn scope: "$.event.special.drop" object \n
\t\t// target with mouse wins, else target with most overlap wins\n
\t\t\'intersect\': function( event, proxy, target ){\n
\t\t\treturn this.contains( target, [ event.pageX, event.pageY ] ) ? // check cursor\n
\t\t\t\t1e9 : this.modes.overlap.apply( this, arguments ); // check overlap\n
\t\t},\n
\t\t// target with most overlap wins\t\n
\t\t\'overlap\': function( event, proxy, target ){\n
\t\t\t// calculate the area of overlap...\n
\t\t\treturn Math.max( 0, Math.min( target.bottom, proxy.bottom ) - Math.max( target.top, proxy.top ) )\n
\t\t\t\t* Math.max( 0, Math.min( target.right, proxy.right ) - Math.max( target.left, proxy.left ) );\n
\t\t},\n
\t\t// proxy is completely contained within target bounds\t\n
\t\t\'fit\': function( event, proxy, target ){\n
\t\t\treturn this.contains( target, proxy ) ? 1 : 0;\n
\t\t},\n
\t\t// center of the proxy is contained within target bounds\t\n
\t\t\'middle\': function( event, proxy, target ){\n
\t\t\treturn this.contains( target, [ proxy.left + proxy.width * .5, proxy.top + proxy.height * .5 ] ) ? 1 : 0;\n
\t\t}\n
\t},\t\n
\t\n
\t// sort drop target cache by by winner (dsc), then index (asc)\n
\tsort: function( a, b ){\n
\t\treturn ( b.winner - a.winner ) || ( a.index - b.index );\n
\t},\n
\t\t\n
\t// async, recursive tolerance execution\n
\ttolerate: function( dd ){\t\t\n
\t\t// declare local refs\n
\t\tvar i, drp, drg, data, arr, len, elem,\n
\t\t// interaction iteration variables\n
\t\tx = 0, ia, end = dd.interactions.length,\n
\t\t// determine the mouse coords\n
\t\txy = [ drop.event.pageX, drop.event.pageY ],\n
\t\t// custom or stored tolerance fn\n
\t\ttolerance = drop.tolerance || drop.modes[ drop.mode ];\n
\t\t// go through each passed interaction...\n
\t\tdo if ( ia = dd.interactions[x] ){\n
\t\t\t// check valid interaction\n
\t\t\tif ( !ia )\n
\t\t\t\treturn; \n
\t\t\t// initialize or clear the drop data\n
\t\t\tia.drop = [];\n
\t\t\t// holds the drop elements\n
\t\t\tarr = []; \n
\t\t\tlen = ia.droppable.length;\n
\t\t\t// determine the proxy location, if needed\n
\t\t\tif ( tolerance )\n
\t\t\t\tdrg = drop.locate( ia.proxy ); \n
\t\t\t// reset the loop\n
\t\t\ti = 0;\n
\t\t\t// loop each stored drop target\n
\t\t\tdo if ( elem = ia.droppable[i] ){ \n
\t\t\t\tdata = $.data( elem, drop.datakey );\n
\t\t\t\tdrp = data.location;\n
\t\t\t\tif ( !drp ) continue;\n
\t\t\t\t// find a winner: tolerance function is defined, call it\n
\t\t\t\tdata.winner = tolerance ? tolerance.call( drop, drop.event, drg, drp ) \n
\t\t\t\t\t// mouse position is always the fallback\n
\t\t\t\t\t: drop.contains( drp, xy ) ? 1 : 0; \n
\t\t\t\tarr.push( data );\t\n
\t\t\t} while ( ++i < len ); // loop \n
\t\t\t// sort the drop targets\n
\t\t\tarr.sort( drop.sort );\t\t\t\n
\t\t\t// reset the loop\n
\t\t\ti = 0;\n
\t\t\t// loop through all of the targets again\n
\t\t\tdo if ( data = arr[ i ] ){\n
\t\t\t\t// winners...\n
\t\t\t\tif ( data.winner && ia.drop.length < drop.multi ){\n
\t\t\t\t\t// new winner... dropstart\n
\t\t\t\t\tif ( !data.active[x] && !data.anyactive ){\n
\t\t\t\t\t\t// check to make sure that this is not prevented\n
\t\t\t\t\t\tif ( $special.drag.hijack( drop.event, "dropstart", dd, x, data.elem )[0] !== false ){ \t\n
\t\t\t\t\t\t\tdata.active[x] = 1;\n
\t\t\t\t\t\t\tdata.anyactive += 1;\n
\t\t\t\t\t\t}\n
\t\t\t\t\t\t// if false, it is not a winner\n
\t\t\t\t\t\telse\n
\t\t\t\t\t\t\tdata.winner = 0;\n
\t\t\t\t\t}\n
\t\t\t\t\t// if it is still a winner\n
\t\t\t\t\tif ( data.winner )\n
\t\t\t\t\t\tia.drop.push( data.elem );\n
\t\t\t\t}\n
\t\t\t\t// losers... \n
\t\t\t\telse if ( data.active[x] && data.anyactive == 1 ){\n
\t\t\t\t\t// former winner... dropend\n
\t\t\t\t\t$special.drag.hijack( drop.event, "dropend", dd, x, data.elem ); \n
\t\t\t\t\tdata.active[x] = 0;\n
\t\t\t\t\tdata.anyactive -= 1;\n
\t\t\t\t}\n
\t\t\t} while ( ++i < len ); // loop \t\t\n
\t\t} while ( ++x < end ) // loop\n
\t\t// check if the mouse is still moving or is idle\n
\t\tif ( drop.last && xy[0] == drop.last.pageX && xy[1] == drop.last.pageY ) \n
\t\t\tdelete drop.timer; // idle, don\'t recurse\n
\t\telse // recurse\n
\t\t\tdrop.timer = setTimeout(function(){ \n
\t\t\t\tdrop.tolerate( dd ); \n
\t\t\t}, drop.delay );\n
\t\t// remember event, to compare idleness\n
\t\tdrop.last = drop.event; \n
\t}\n
\t\n
};\n
\n
// share the same special event configuration with related events...\n
$special.dropinit = $special.dropstart = $special.dropend = drop;\n
\n
})(jQuery); // confine scope\t
]]></string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>9420</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>jquery.event.drop-2.2.js</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271248.53</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>jquery.jsonp-2.4.min.js</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>application/javascript</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="cdata"><![CDATA[
// jquery.jsonp 2.4.0 (c)2012 Julian Aubourg | MIT License\n
// https://github.com/jaubourg/jquery-jsonp\n
(function(e){function t(){}function n(e){C=[e]}function r(e,t,n){return e&&e.apply&&e.apply(t.context||t,n)}function i(e){return/\\?/.test(e)?"&":"?"}function O(c){function Y(e){z++||(W(),j&&(T[I]={s:[e]}),D&&(e=D.apply(c,[e])),r(O,c,[e,b,c]),r(_,c,[c,b]))}function Z(e){z++||(W(),j&&e!=w&&(T[I]=e),r(M,c,[c,e]),r(_,c,[c,e]))}c=e.extend({},k,c);var O=c.success,M=c.error,_=c.complete,D=c.dataFilter,P=c.callbackParameter,H=c.callback,B=c.cache,j=c.pageCache,F=c.charset,I=c.url,q=c.data,R=c.timeout,U,z=0,W=t,X,V,J,K,Q,G;return S&&S(function(e){e.done(O).fail(M),O=e.resolve,M=e.reject}).promise(c),c.abort=function(){!(z++)&&W()},r(c.beforeSend,c,[c])===!1||z?c:(I=I||u,q=q?typeof q=="string"?q:e.param(q,c.traditional):u,I+=q?i(I)+q:u,P&&(I+=i(I)+encodeURIComponent(P)+"=?"),!B&&!j&&(I+=i(I)+"_"+(new Date).getTime()+"="),I=I.replace(/=\\?(&|$)/,"="+H+"$1"),j&&(U=T[I])?U.s?Y(U.s[0]):Z(U):(E[H]=n,K=e(y)[0],K.id=l+N++,F&&(K[o]=F),L&&L.version()<11.6?(Q=e(y)[0]).text="document.getElementById(\'"+K.id+"\')."+p+"()":K[s]=s,A&&(K.htmlFor=K.id,K.event=h),K[d]=K[p]=K[v]=function(e){if(!K[m]||!/i/.test(K[m])){try{K[h]&&K[h]()}catch(t){}e=C,C=0,e?Y(e[0]):Z(a)}},K.src=I,W=function(e){G&&clearTimeout(G),K[v]=K[d]=K[p]=null,x[g](K),Q&&x[g](Q)},x[f](K,J=x.firstChild),Q&&x[f](Q,J),G=R>0&&setTimeout(function(){Z(w)},R)),c)}var s="async",o="charset",u="",a="error",f="insertBefore",l="_jqjsp",c="on",h=c+"click",p=c+a,d=c+"load",v=c+"readystatechange",m="readyState",g="removeChild",y="<script>",b="success",w="timeout",E=window,S=e.Deferred,x=e("head")[0]||document.documentElement,T={},N=0,C,k={callback:l,url:location.href},L=E.opera,A=!!e("<div>").html("<!--[if IE]><i><![endif]-->").find("i").length;O.setup=function(t){e.extend(k,t)},e.jsonp=O})(jQuery)
]]></string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>1853</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>jquery.jsonp-2.4.min.js</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271254.74</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>jquery.simulate.js</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>application/javascript</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="cdata"><![CDATA[
/*\n
* jquery.simulate - simulate browser mouse and keyboard events\n
*\n
* Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)\n
* Dual licensed under the MIT (MIT-LICENSE.txt)\n
* and GPL (GPL-LICENSE.txt) licenses.\n
*\n
*/\n
\n
;(function($) {\n
\n
$.fn.extend({\n
\tsimulate: function(type, options) {\n
\t\treturn this.each(function() {\n
\t\t\tvar opt = $.extend({}, $.simulate.defaults, options || {});\n
\t\t\tnew $.simulate(this, type, opt);\n
\t\t});\n
\t}\n
});\n
\n
$.simulate = function(el, type, options) {\n
\tthis.target = el;\n
\tthis.options = options;\n
\n
\tif (/^drag$/.test(type)) {\n
\t\tthis[type].apply(this, [this.target, options]);\n
\t} else {\n
\t\tthis.simulateEvent(el, type, options);\n
\t}\n
}\n
\n
$.extend($.simulate.prototype, {\n
\tsimulateEvent: function(el, type, options) {\n
\t\tvar evt = this.createEvent(type, options);\n
\t\tthis.dispatchEvent(el, type, evt, options);\n
\t\treturn evt;\n
\t},\n
\tcreateEvent: function(type, options) {\n
\t\tif (/^mouse(over|out|down|up|move)|(dbl)?click$/.test(type)) {\n
\t\t\treturn this.mouseEvent(type, options);\n
\t\t} else if (/^key(up|down|press)$/.test(type)) {\n
\t\t\treturn this.keyboardEvent(type, options);\n
\t\t}\n
\t},\n
\tmouseEvent: function(type, options) {\n
\t\tvar evt;\n
\t\tvar e = $.extend({\n
\t\t\tbubbles: true, cancelable: (type != "mousemove"), view: window, detail: 0,\n
\t\t\tscreenX: 0, screenY: 0, clientX: 0, clientY: 0,\n
\t\t\tctrlKey: false, altKey: false, shiftKey: false, metaKey: false,\n
\t\t\tbutton: 0, relatedTarget: undefined\n
\t\t}, options);\n
\n
\t\tvar relatedTarget = $(e.relatedTarget)[0];\n
\n
\t\tif ($.isFunction(document.createEvent)) {\n
\t\t\tevt = document.createEvent("MouseEvents");\n
\t\t\tevt.initMouseEvent(type, e.bubbles, e.cancelable, e.view, e.detail,\n
\t\t\t\te.screenX, e.screenY, e.clientX, e.clientY,\n
\t\t\t\te.ctrlKey, e.altKey, e.shiftKey, e.metaKey,\n
\t\t\t\te.button, e.relatedTarget || document.body.parentNode);\n
\t\t} else if (document.createEventObject) {\n
\t\t\tevt = document.createEventObject();\n
\t\t\t$.extend(evt, e);\n
\t\t\tevt.button = { 0:1, 1:4, 2:2 }[evt.button] || evt.button;\n
\t\t}\n
\t\treturn evt;\n
\t},\n
\tkeyboardEvent: function(type, options) {\n
\t\tvar evt;\n
\n
\t\tvar e = $.extend({ bubbles: true, cancelable: true, view: window,\n
\t\t\tctrlKey: false, altKey: false, shiftKey: false, metaKey: false,\n
\t\t\tkeyCode: 0, charCode: 0\n
\t\t}, options);\n
\n
\t\tif ($.isFunction(document.createEvent)) {\n
\t\t\ttry {\n
\t\t\t\tevt = document.createEvent("KeyEvents");\n
\t\t\t\tevt.initKeyEvent(type, e.bubbles, e.cancelable, e.view,\n
\t\t\t\t\te.ctrlKey, e.altKey, e.shiftKey, e.metaKey,\n
\t\t\t\t\te.keyCode, e.charCode);\n
\t\t\t} catch(err) {\n
\t\t\t\tevt = document.createEvent("Events");\n
\t\t\t\tevt.initEvent(type, e.bubbles, e.cancelable);\n
\t\t\t\t$.extend(evt, { view: e.view,\n
\t\t\t\t\tctrlKey: e.ctrlKey, altKey: e.altKey, shiftKey: e.shiftKey, metaKey: e.metaKey,\n
\t\t\t\t\tkeyCode: e.keyCode, charCode: e.charCode\n
\t\t\t\t});\n
\t\t\t}\n
\t\t} else if (document.createEventObject) {\n
\t\t\tevt = document.createEventObject();\n
\t\t\t$.extend(evt, e);\n
\t\t}\n
\t\tif ($.browser.msie || $.browser.opera) {\n
\t\t\tevt.keyCode = (e.charCode > 0) ? e.charCode : e.keyCode;\n
\t\t\tevt.charCode = undefined;\n
\t\t}\n
\t\treturn evt;\n
\t},\n
\n
\tdispatchEvent: function(el, type, evt) {\n
\t\tif (el.dispatchEvent) {\n
\t\t\tel.dispatchEvent(evt);\n
\t\t} else if (el.fireEvent) {\n
\t\t\tel.fireEvent(\'on\' + type, evt);\n
\t\t}\n
\t\treturn evt;\n
\t},\n
\n
\tdrag: function(el) {\n
\t\tvar self = this, center = this.findCenter(this.target), \n
\t\t\toptions = this.options,\tx = Math.floor(center.x), y = Math.floor(center.y), \n
\t\t\tdx = options.dx || 0, dy = options.dy || 0, target = this.target;\n
\t\tvar coord = { clientX: x, clientY: y };\n
\t\tthis.simulateEvent(target, "mousedown", coord);\n
\t\tcoord = { clientX: x + 1, clientY: y + 1 };\n
\t\tthis.simulateEvent(document, "mousemove", coord);\n
\t\tcoord = { clientX: x + dx, clientY: y + dy };\n
\t\tthis.simulateEvent(document, "mousemove", coord);\n
\t\tthis.simulateEvent(document, "mousemove", coord);\n
\t\tthis.simulateEvent(target, "mouseup", coord);\n
\t},\n
\tfindCenter: function(el) {\n
\t\tvar el = $(this.target), o = el.offset();\n
\t\treturn {\n
\t\t\tx: o.left + el.outerWidth() / 2,\n
\t\t\ty: o.top + el.outerHeight() / 2\n
\t\t};\n
\t}\n
});\n
\n
$.extend($.simulate, {\n
\tdefaults: {\n
\t\tspeed: \'sync\'\n
\t},\n
\tVK_TAB: 9,\n
\tVK_ENTER: 13,\n
\tVK_ESC: 27,\n
\tVK_PGUP: 33,\n
\tVK_PGDN: 34,\n
\tVK_END: 35,\n
\tVK_HOME: 36,\n
\tVK_LEFT: 37,\n
\tVK_UP: 38,\n
\tVK_RIGHT: 39,\n
\tVK_DOWN: 40\n
});\n
\n
})(jQuery);\n
]]></string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>4185</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>jquery.simulate.js</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271245.4</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>jquery.sparkline.min.js</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>application/javascript</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="cdata"><![CDATA[
/* jquery.sparkline 1.4.3 - http://omnipotent.net/jquery.sparkline/ */\n
\n
(function($){$.fn.simpledraw=function(width,height,use_existing){if(use_existing&&this[0].vcanvas)return this[0].vcanvas;if(width==undefined)width=$(this).innerWidth();if(height==undefined)height=$(this).innerHeight();if($.browser.hasCanvas){return new vcanvas_canvas(width,height,this);}else if($.browser.msie){return new vcanvas_vml(width,height,this);}else{return false;}};var pending=[];$.fn.sparkline=function(uservalues,options){var options=$.extend({type:\'line\',lineColor:\'#00f\',fillColor:\'#cdf\',defaultPixelsPerValue:3,width:\'auto\',height:\'auto\',composite:false},options?options:{});return this.each(function(){var render=function(){var values=(uservalues==\'html\'||uservalues==undefined)?$(this).text().split(\',\'):uservalues;var width=options.width==\'auto\'?values.length*options.defaultPixelsPerValue:options.width;if(options.height==\'auto\'){if(!options.composite||!this.vcanvas){var tmp=document.createElement(\'span\');tmp.innerHTML=\'a\';$(this).html(tmp);height=$(tmp).innerHeight();$(tmp).remove();}}else{height=options.height;}\n
$.fn.sparkline[options.type].call(this,values,options,width,height);}\n
if(($(this).html()&&$(this).is(\':hidden\'))||($.fn.jquery<"1.3.0"&&$(this).parents().is(\':hidden\'))){pending.push([this,render]);}else{render.call(this);}});};$.sparkline_display_visible=function(){for(var i=pending.length-1;i>=0;i--){var el=pending[i][0];if($(el).is(\':visible\')&&!$(el).parents().is(\':hidden\')){pending[i][1].call(el);pending.splice(i,1);}}};$.fn.sparkline.line=function(values,options,width,height){var options=$.extend({spotColor:\'#f80\',spotRadius:1.5,minSpotColor:\'#f80\',maxSpotColor:\'#f80\',lineWidth:1,normalRangeMin:undefined,normalRangeMax:undefined,normalRangeColor:\'#ccc\',chartRangeMin:undefined,chartRangeMax:undefined},options?options:{});var xvalues=[],yvalues=[],yminmax=[];for(i=0;i<values.length;i++){var v=values[i];var isstr=typeof(values[i])==\'string\';var isarray=typeof(values[i])==\'object\'&&values[i]instanceof Array;var sp=isstr&&values[i].split(\':\');if(isstr&&sp.length==2){xvalues.push(Number(sp[0]));yvalues.push(Number(sp[1]));yminmax.push(Number(sp[1]));}else if(isarray){xvalues.push(values[i][0]);yvalues.push(values[i][1]);yminmax.push(values[i][1]);}else{xvalues.push(i);if(values[i]===null||values[i]==\'null\'){yvalues.push(null);}else{yvalues.push(Number(values[i]));yminmax.push(Number(values[i]));}}}\n
if(options.xvalues){xvalues=options.xvalues;}\n
var maxy=Math.max.apply(Math,yminmax);var maxyval=maxy;var miny=Math.min.apply(Math,yminmax);var minyval=miny;var maxx=Math.max.apply(Math,xvalues);var maxxval=maxx;var minx=Math.min.apply(Math,xvalues);var minxval=minx;if(options.normalRangeMin!=undefined){if(options.normalRangeMin<miny)\n
miny=options.normalRangeMin;if(options.normalRangeMax>maxy)\n
maxy=options.normalRangeMax;}\n
if(options.chartRangeMin!=undefined&&options.chartRangeMin<miny){miny=options.chartRangeMin;}\n
if(options.chartRangeMax!=undefined&&options.chartRangeMax>maxy){maxy=options.chartRangeMax;}\n
var rangex=maxx-minx==0?1:maxx-minx;var rangey=maxy-miny==0?1:maxy-miny;var vl=yvalues.length-1;if(vl<1){this.innerHTML=\'\';return;}\n
var target=$(this).simpledraw(width,height,options.composite);if(target){var canvas_width=target.pixel_width;var canvas_height=target.pixel_height;var canvas_top=0;var canvas_left=0;if(options.spotRadius&&(canvas_width<(options.spotRadius*4)||canvas_height<(options.spotRadius*4))){options.spotRadius=0;}\n
if(options.spotRadius){if(options.minSpotColor||(options.spotColor&&yvalues[vl]==miny))\n
canvas_height-=Math.ceil(options.spotRadius);if(options.maxSpotColor||(options.spotColor&&yvalues[vl]==maxy)){canvas_height-=Math.ceil(options.spotRadius);canvas_top+=Math.ceil(options.spotRadius);}\n
if(options.minSpotColor||options.maxSpotColor&&(yvalues[0]==miny||yvalues[0]==maxy)){canvas_left+=Math.ceil(options.spotRadius);canvas_width-=Math.ceil(options.spotRadius);}\n
if(options.spotColor||(options.minSpotColor||options.maxSpotColor&&(yvalues[vl]==miny||yvalues[vl]==maxy)))\n
canvas_width-=Math.ceil(options.spotRadius);}\n
canvas_height--;if(options.normalRangeMin!=undefined){var ytop=canvas_top+Math.round(canvas_height-(canvas_height*((options.normalRangeMax-miny)/rangey)));var height=Math.round((canvas_height*(options.normalRangeMax-options.normalRangeMin))/rangey);target.drawRect(canvas_left,ytop,canvas_width,height,undefined,options.normalRangeColor);}\n
var path=[];var paths=[path];for(var i=0;i<yvalues.length;i++){var x=xvalues[i],y=yvalues[i];if(y===null){if(i){if(yvalues[i-1]!==null){path=[];paths.push(path);}}}else{if(!path.length){path.push([canvas_left+Math.round((x-minx)*(canvas_width/rangex)),canvas_top+canvas_height]);}\n
path.push([canvas_left+Math.round((x-minx)*(canvas_width/rangex)),canvas_top+Math.round(canvas_height-(canvas_height*((y-miny)/rangey)))]);}}\n
for(var i=0;i<paths.length;i++){path=paths[i];if(!path.length)\n
continue;if(options.fillColor){path.push([path[path.length-1][0],canvas_top+canvas_height-1]);target.drawShape(path,undefined,options.fillColor);path.pop();}\n
if(path.length>2){path[0]=[path[0][0],path[1][1]];}\n
target.drawShape(path,options.lineColor,undefined,options.lineWidth);}\n
if(options.spotRadius&&options.spotColor){target.drawCircle(canvas_left+canvas_width,canvas_top+Math.round(canvas_height-(canvas_height*((yvalues[vl]-miny)/rangey))),options.spotRadius,undefined,options.spotColor);}\n
if(maxy!=minyval){if(options.spotRadius&&options.minSpotColor){var x=xvalues[yvalues.indexOf(minyval)];target.drawCircle(canvas_left+Math.round((x-minx)*(canvas_width/rangex)),canvas_top+Math.round(canvas_height-(canvas_height*((minyval-miny)/rangey))),options.spotRadius,undefined,options.minSpotColor);}\n
if(options.spotRadius&&options.maxSpotColor){var x=xvalues[yvalues.indexOf(maxyval)];target.drawCircle(canvas_left+Math.round((x-minx)*(canvas_width/rangex)),canvas_top+Math.round(canvas_height-(canvas_height*((maxyval-miny)/rangey))),options.spotRadius,undefined,options.maxSpotColor);}}}else{this.innerHTML=\'\';}};$.fn.sparkline.bar=function(values,options,width,height){var options=$.extend({type:\'bar\',barColor:\'#00f\',negBarColor:\'#f44\',zeroColor:undefined,zeroAxis:undefined,barWidth:4,barSpacing:1,chartRangeMax:undefined,chartRangeMin:undefined,colorMap:{}},options?options:{});var width=(values.length*options.barWidth)+((values.length-1)*options.barSpacing);var num_values=[];for(var i=0;i<values.length;i++){if(values[i]==\'null\'||values[i]===null){values[i]=null;}else{values[i]=Number(values[i]);num_values.push(Number(values[i]));}}\n
var max=Math.max.apply(Math,num_values);var min=Math.min.apply(Math,num_values);if(options.chartRangeMin!=undefined&&options.chartRangeMin<min){min=options.chartRangeMin;}\n
if(options.chartRangeMax!=undefined&&options.chartRangeMax>max){max=options.chartRangeMax;}\n
if(options.zeroAxis==undefined)options.zeroAxis=min<0;var range=max-min==0?1:max-min;var target=$(this).simpledraw(width,height);if(target){var canvas_width=target.pixel_width;var canvas_height=target.pixel_height;var yzero=min<0&&options.zeroAxis?canvas_height-Math.round(canvas_height*(Math.abs(min)/range))-1:canvas_height-1;for(var i=0;i<values.length;i++){var x=i*(options.barWidth+options.barSpacing);var val=values[i];if(val===null){continue;}\n
var color=(val<0)?options.negBarColor:options.barColor;if(options.zeroAxis&&min<0){var height=Math.round(canvas_height*((Math.abs(val)/range)))+1;var y=(val<0)?yzero:yzero-height;}else{var height=Math.round(canvas_height*((val-min)/range))+1;var y=canvas_height-height;}\n
if(val==0&&options.zeroColor!=undefined){color=options.zeroColor;}\n
if(options.colorMap[val]){color=options.colorMap[val];}\n
target.drawRect(x,y,options.barWidth-1,height-1,color,color);}}else{this.innerHTML=\'\';}};$.fn.sparkline.tristate=function(values,options,width,height){values=$.map(values,Number);var options=$.extend({barWidth:4,barSpacing:1,posBarColor:\'#6f6\',negBarColor:\'#f44\',zeroBarColor:\'#999\',colorMap:{}},options);var width=(values.length*options.barWidth)+((values.length-1)*options.barSpacing);var target=$(this).simpledraw(width,height);if(target){var canvas_width=target.pixel_width;var canvas_height=target.pixel_height;var half_height=Math.round(canvas_height/2);for(var i=0;i<values.length;i++){var x=i*(options.barWidth+options.barSpacing);if(values[i]<0){var y=half_height;var height=half_height-1;var color=options.negBarColor;}else if(values[i]>0){var y=0;var height=half_height-1;var color=options.posBarColor;}else{var y=half_height-1;var height=2;var color=options.zeroBarColor;}\n
if(options.colorMap[values[i]]){color=options.colorMap[values[i]];}\n
target.drawRect(x,y,options.barWidth-1,height-1,color,color);}}else{this.innerHTML=\'\';}};$.fn.sparkline.discrete=function(values,options,width,height){values=$.map(values,Number);var options=$.extend({lineHeight:\'auto\',thresholdColor:undefined,thresholdValue:0,chartRangeMax:undefined,chartRangeMin:undefined},options);width=options.width==\'auto\'?values.length*2:width;var interval=Math.floor(width/values.length);var target=$(this).simpledraw(width,height);if(target){var canvas_width=target.pixel_width;var canvas_height=target.pixel_height;var line_height=options.lineHeight==\'auto\'?Math.round(canvas_height*0.3):options.lineHeight;var pheight=canvas_height-line_height;var min=Math.min.apply(Math,values);var max=Math.max.apply(Math,values);if(options.chartRangeMin!=undefined&&options.chartRangeMin<min){min=options.chartRangeMin;}\n
if(options.chartRangeMax!=undefined&&options.chartRangeMax>max){max=options.chartRangeMax;}\n
var range=max-min;for(var i=0;i<values.length;i++){var val=values[i];var x=(i*interval);var ytop=Math.round(pheight-pheight*((val-min)/range));target.drawLine(x,ytop,x,ytop+line_height,(options.thresholdColor&&val<options.thresholdValue)?options.thresholdColor:options.lineColor);}}else{this.innerHTML=\'\';}};$.fn.sparkline.bullet=function(values,options,width,height){values=$.map(values,Number);var options=$.extend({targetColor:\'red\',targetWidth:3,performanceColor:\'blue\',rangeColors:[\'#D3DAFE\',\'#A8B6FF\',\'#7F94FF\'],base:undefined},options);width=options.width==\'auto\'?\'4.0em\':width;var target=$(this).simpledraw(width,height);if(target&&values.length>1){var canvas_width=target.pixel_width-Math.ceil(options.targetWidth/2);var canvas_height=target.pixel_height;var min=Math.min.apply(Math,values);var max=Math.max.apply(Math,values);if(options.base==undefined){var min=min<0?min:0;}else{min=options.base;}\n
var range=max-min;for(i=2;i<values.length;i++){var rangeval=parseInt(values[i]);var rangewidth=Math.round(canvas_width*((rangeval-min)/range));target.drawRect(0,0,rangewidth-1,canvas_height-1,options.rangeColors[i-2],options.rangeColors[i-2]);}\n
var perfval=parseInt(values[1]);var perfwidth=Math.round(canvas_width*((perfval-min)/range));target.drawRect(0,Math.round(canvas_height*0.3),perfwidth-1,Math.round(canvas_height*0.4)-1,options.performanceColor,options.performanceColor);var targetval=parseInt(values[0]);var x=Math.round(canvas_width*((targetval-min)/range)-(options.targetWidth/2));var targettop=Math.round(canvas_height*0.10);var targetheight=canvas_height-(targettop*2);target.drawRect(x,targettop,options.targetWidth-1,targetheight-1,options.targetColor,options.targetColor);}else{this.innerHTML=\'\';}};$.fn.sparkline.pie=function(values,options,width,height){values=$.map(values,Number);var options=$.extend({sliceColors:[\'#f00\',\'#0f0\',\'#00f\']},options);width=options.width==\'auto\'?height:width;var target=$(this).simpledraw(width,height);if(target&&values.length>1){var canvas_width=target.pixel_width;var canvas_height=target.pixel_height;var radius=Math.floor(Math.min(canvas_width,canvas_height)/2);var total=0;for(var i=0;i<values.length;i++)\n
total+=values[i];var next=0;if(options.offset){next+=(2*Math.PI)*(options.offset/360);}\n
var circle=2*Math.PI;for(var i=0;i<values.length;i++){var start=next;var end=next;if(total>0){end=next+(circle*(values[i]/total));}\n
target.drawPieSlice(radius,radius,radius,start,end,undefined,options.sliceColors[i%options.sliceColors.length]);next=end;}}};function quartile(values,q){if(q==2){var vl2=Math.floor(values.length/2);return values.length%2?values[vl2]:(values[vl2]+values[vl2+1])/2;}else{var vl4=Math.floor(values.length/4);return values.length%2?(values[vl4*q]+values[vl4*q+1])/2:values[vl4*q];}};$.fn.sparkline.box=function(values,options,width,height){values=$.map(values,Number);var options=$.extend({raw:false,boxLineColor:\'black\',boxFillColor:\'#cdf\',whiskerColor:\'black\',outlierLineColor:\'#333\',outlierFillColor:\'white\',medianColor:\'red\',showOutliers:true,outlierIQR:1.5,spotRadius:1.5,target:undefined,targetColor:\'#4a2\',chartRangeMax:undefined,chartRangeMin:undefined},options);width=options.width==\'auto\'?\'4.0em\':width;minvalue=options.chartRangeMin==undefined?Math.min.apply(Math,values):options.chartRangeMin;maxvalue=options.chartRangeMax==undefined?Math.max.apply(Math,values):options.chartRangeMax;var target=$(this).simpledraw(width,height);if(target&&values.length>1){var canvas_width=target.pixel_width;var canvas_height=target.pixel_height;if(options.raw){if(options.showOutliers&&values.length>5){var loutlier=values[0],lwhisker=values[1],q1=values[2],q2=values[3],q3=values[4],rwhisker=values[5],routlier=values[6];}else{var lwhisker=values[0],q1=values[1],q2=values[2],q3=values[3],rwhisker=values[4];}}else{values.sort(function(a,b){return a-b;});var q1=quartile(values,1);var q2=quartile(values,2);var q3=quartile(values,3);var iqr=q3-q1;if(options.showOutliers){var lwhisker=undefined,rwhisker=undefined;for(var i=0;i<values.length;i++){if(lwhisker==undefined&&values[i]>q1-(iqr*options.outlierIQR))\n
lwhisker=values[i];if(values[i]<q3+(iqr*options.outlierIQR))\n
rwhisker=values[i];}\n
var loutlier=values[0];var routlier=values[values.length-1];}else{var lwhisker=values[0];var rwhisker=values[values.length-1];}}\n
var unitsize=canvas_width/(maxvalue-minvalue+1);var canvas_left=0;if(options.showOutliers){canvas_left=Math.ceil(options.spotRadius);canvas_width-=2*Math.ceil(options.spotRadius);var unitsize=canvas_width/(maxvalue-minvalue+1);if(loutlier<lwhisker)\n
target.drawCircle((loutlier-minvalue)*unitsize+canvas_left,canvas_height/2,options.spotRadius,options.outlierLineColor,options.outlierFillColor);if(routlier>rwhisker)\n
target.drawCircle((routlier-minvalue)*unitsize+canvas_left,canvas_height/2,options.spotRadius,options.outlierLineColor,options.outlierFillColor);}\n
target.drawRect(Math.round((q1-minvalue)*unitsize+canvas_left),Math.round(canvas_height*0.1),Math.round((q3-q1)*unitsize),Math.round(canvas_height*0.8),options.boxLineColor,options.boxFillColor);target.drawLine(Math.round((lwhisker-minvalue)*unitsize+canvas_left),Math.round(canvas_height/2),Math.round((q1-minvalue)*unitsize+canvas_left),Math.round(canvas_height/2),options.lineColor);target.drawLine(Math.round((lwhisker-minvalue)*unitsize+canvas_left),Math.round(canvas_height/4),Math.round((lwhisker-minvalue)*unitsize+canvas_left),Math.round(canvas_height-canvas_height/4),options.whiskerColor);target.drawLine(Math.round((rwhisker-minvalue)*unitsize+canvas_left),Math.round(canvas_height/2),Math.round((q3-minvalue)*unitsize+canvas_left),Math.round(canvas_height/2),options.lineColor);target.drawLine(Math.round((rwhisker-minvalue)*unitsize+canvas_left),Math.round(canvas_height/4),Math.round((rwhisker-minvalue)*unitsize+canvas_left),Math.round(canvas_height-canvas_height/4),options.whiskerColor);target.drawLine(Math.round((q2-minvalue)*unitsize+canvas_left),Math.round(canvas_height*0.1),Math.round((q2-minvalue)*unitsize+canvas_left),Math.round(canvas_height*0.9),options.medianColor);if(options.target){var size=Math.ceil(options.spotRadius);target.drawLine(Math.round((options.target-minvalue)*unitsize+canvas_left),Math.round((canvas_height/2)-size),Math.round((options.target-minvalue)*unitsize+canvas_left),Math.round((canvas_height/2)+size),options.targetColor);target.drawLine(Math.round((options.target-minvalue)*unitsize+canvas_left-size),Math.round(canvas_height/2),Math.round((options.target-minvalue)*unitsize+canvas_left+size),Math.round(canvas_height/2),options.targetColor);}}else{this.innerHTML=\'\';}};if(!Array.prototype.indexOf){Array.prototype.indexOf=function(entry){for(var i=0;i<this.length;i++){if(this[i]==entry)\n
return i;}\n
return-1;}}\n
if($.browser.msie&&!document.namespaces[\'v\']){document.namespaces.add(\'v\',\'urn:schemas-microsoft-com:vml\',\'#default#VML\');}\n
if($.browser.hasCanvas==undefined){var t=document.createElement(\'canvas\');$.browser.hasCanvas=t.getContext!=undefined;}\n
var vcanvas_base=function(width,height,target){};vcanvas_base.prototype={init:function(width,height,target){this.width=width;this.height=height;this.target=target;if(target[0])target=target[0];target.vcanvas=this;},drawShape:function(path,lineColor,fillColor,lineWidth){alert(\'drawShape not implemented\');},drawLine:function(x1,y1,x2,y2,lineColor,lineWidth){return this.drawShape([[x1,y1],[x2,y2]],lineColor,lineWidth);},drawCircle:function(x,y,radius,lineColor,fillColor){alert(\'drawCircle not implemented\');},drawPieSlice:function(x,y,radius,startAngle,endAngle,lineColor,fillColor){alert(\'drawPieSlice not implemented\');},drawRect:function(x,y,width,height,lineColor,fillColor){alert(\'drawRect not implemented\');},getElement:function(){return this.canvas;},_insert:function(el,target){$(target).html(el);}};var vcanvas_canvas=function(width,height,target){return this.init(width,height,target);};vcanvas_canvas.prototype=$.extend(new vcanvas_base,{_super:vcanvas_base.prototype,init:function(width,height,target){this._super.init(width,height,target);this.canvas=document.createElement(\'canvas\');if(target[0])target=target[0];target.vcanvas=this;$(this.canvas).css({display:\'inline-block\',width:width,height:height,verticalAlign:\'top\'});this._insert(this.canvas,target);this.pixel_height=$(this.canvas).height();this.pixel_width=$(this.canvas).width();this.canvas.width=this.pixel_width;this.canvas.height=this.pixel_height;$(this.canvas).css({width:this.pixel_width,height:this.pixel_height});},_getContext:function(lineColor,fillColor,lineWidth){var context=this.canvas.getContext(\'2d\');if(lineColor!=undefined)\n
context.strokeStyle=lineColor;context.lineWidth=lineWidth==undefined?1:lineWidth;if(fillColor!=undefined)\n
context.fillStyle=fillColor;return context;},drawShape:function(path,lineColor,fillColor,lineWidth){var context=this._getContext(lineColor,fillColor,lineWidth);context.beginPath();context.moveTo(path[0][0]+0.5,path[0][1]+0.5);for(var i=1;i<path.length;i++){context.lineTo(path[i][0]+0.5,path[i][1]+0.5);}\n
if(lineColor!=undefined){context.stroke();}\n
if(fillColor!=undefined){context.fill();}},drawCircle:function(x,y,radius,lineColor,fillColor){var context=this._getContext(lineColor,fillColor);context.beginPath();context.arc(x,y,radius,0,2*Math.PI,false);if(lineColor!=undefined){context.stroke();}\n
if(fillColor!=undefined){context.fill();}},drawPieSlice:function(x,y,radius,startAngle,endAngle,lineColor,fillColor){var context=this._getContext(lineColor,fillColor);context.beginPath();context.moveTo(x,y);context.arc(x,y,radius,startAngle,endAngle,false);context.lineTo(x,y);context.closePath();if(lineColor!=undefined){context.stroke();}\n
if(fillColor){context.fill();}},drawRect:function(x,y,width,height,lineColor,fillColor){return this.drawShape([[x,y],[x+width,y],[x+width,y+height],[x,y+height],[x,y]],lineColor,fillColor);}});var vcanvas_vml=function(width,height,target){return this.init(width,height,target);};vcanvas_vml.prototype=$.extend(new vcanvas_base,{_super:vcanvas_base.prototype,init:function(width,height,target){this._super.init(width,height,target);if(target[0])target=target[0];target.vcanvas=this;this.canvas=document.createElement(\'span\');$(this.canvas).css({display:\'inline-block\',position:\'relative\',overflow:\'hidden\',width:width,height:height,margin:\'0px\',padding:\'0px\',verticalAlign:\'top\'});this._insert(this.canvas,target);this.pixel_height=$(this.canvas).height();this.pixel_width=$(this.canvas).width();this.canvas.width=this.pixel_width;this.canvas.height=this.pixel_height;;var groupel=\'<v:group coordorigin="0 0" coordsize="\'+this.pixel_width+\' \'+this.pixel_height+\'"\'\n
+\' style="position:absolute;top:0;left:0;width:\'+this.pixel_width+\'px;height=\'+this.pixel_height+\'px;"></v:group>\';this.canvas.insertAdjacentHTML(\'beforeEnd\',groupel);this.group=$(this.canvas).children()[0];},drawShape:function(path,lineColor,fillColor,lineWidth){var vpath=[];for(var i=0;i<path.length;i++){vpath[i]=\'\'+(path[i][0])+\',\'+(path[i][1]);}\n
var initial=vpath.splice(0,1);lineWidth=lineWidth==undefined?1:lineWidth;var stroke=lineColor==undefined?\' stroked="false" \':\' strokeWeight="\'+lineWidth+\'" strokeColor="\'+lineColor+\'" \';var fill=fillColor==undefined?\' filled="false"\':\' fillColor="\'+fillColor+\'" filled="true" \';var closed=vpath[0]==vpath[vpath.length-1]?\'x \':\'\';var vel=\'<v:shape coordorigin="0 0" coordsize="\'+this.pixel_width+\' \'+this.pixel_height+\'" \'\n
+stroke\n
+fill\n
+\' style="position:absolute;left:0px;top:0px;height:\'+this.pixel_height+\'px;width:\'+this.pixel_width+\'px;padding:0px;margin:0px;" \'\n
+\' path="m \'+initial+\' l \'+vpath.join(\', \')+\' \'+closed+\'e">\'\n
+\' </v:shape>\';this.group.insertAdjacentHTML(\'beforeEnd\',vel);},drawCircle:function(x,y,radius,lineColor,fillColor){x-=radius+1;y-=radius+1;var stroke=lineColor==undefined?\' stroked="false" \':\' strokeWeight="1" strokeColor="\'+lineColor+\'" \';var fill=fillColor==undefined?\' filled="false"\':\' fillColor="\'+fillColor+\'" filled="true" \';var vel=\'<v:oval \'\n
+stroke\n
+fill\n
+\' style="position:absolute;top:\'+y+\'px; left:\'+x+\'px; width:\'+(radius*2)+\'px; height:\'+(radius*2)+\'px"></v:oval>\';this.group.insertAdjacentHTML(\'beforeEnd\',vel);},drawPieSlice:function(x,y,radius,startAngle,endAngle,lineColor,fillColor){if(startAngle==endAngle){return;}\n
if((endAngle-startAngle)==(2*Math.PI)){startAngle=0.0;endAngle=(2*Math.PI);}\n
var startx=x+Math.round(Math.cos(startAngle)*radius);var starty=y+Math.round(Math.sin(startAngle)*radius);var endx=x+Math.round(Math.cos(endAngle)*radius);var endy=y+Math.round(Math.sin(endAngle)*radius);var vpath=[x-radius,y-radius,x+radius,y+radius,startx,starty,endx,endy];var stroke=lineColor==undefined?\' stroked="false" \':\' strokeWeight="1" strokeColor="\'+lineColor+\'" \';var fill=fillColor==undefined?\' filled="false"\':\' fillColor="\'+fillColor+\'" filled="true" \';var vel=\'<v:shape coordorigin="0 0" coordsize="\'+this.pixel_width+\' \'+this.pixel_height+\'" \'\n
+stroke\n
+fill\n
+\' style="position:absolute;left:0px;top:0px;height:\'+this.pixel_height+\'px;width:\'+this.pixel_width+\'px;padding:0px;margin:0px;" \'\n
+\' path="m \'+x+\',\'+y+\' wa \'+vpath.join(\', \')+\' x e">\'\n
+\' </v:shape>\';this.group.insertAdjacentHTML(\'beforeEnd\',vel);},drawRect:function(x,y,width,height,lineColor,fillColor){return this.drawShape([[x,y],[x,y+height],[x+width,y+height],[x+width,y],[x,y]],lineColor,fillColor);}});})(jQuery);
]]></string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>22867</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>jquery.sparkline.min.js</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271231.12</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>qunit.css</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/css</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string>\n
ol#qunit-tests {\n
\tfont-family:"Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial;\n
\tmargin:0;\n
\tpadding:0;\n
\tlist-style-position:inside;\n
\n
\tfont-size: smaller;\n
}\n
ol#qunit-tests li{\n
\tpadding:0.4em 0.5em 0.4em 2.5em;\n
\tborder-bottom:1px solid #fff;\n
\tfont-size:small;\n
\tlist-style-position:inside;\n
}\n
ol#qunit-tests li ol{\n
\tbox-shadow: inset 0px 2px 13px #999;\n
\t-moz-box-shadow: inset 0px 2px 13px #999;\n
\t-webkit-box-shadow: inset 0px 2px 13px #999;\n
\tmargin-top:0.5em;\n
\tmargin-left:0;\n
\tpadding:0.5em;\n
\tbackground-color:#fff;\n
\tborder-radius:15px;\n
\t-moz-border-radius: 15px;\n
\t-webkit-border-radius: 15px;\n
}\n
ol#qunit-tests li li{\n
\tborder-bottom:none;\n
\tmargin:0.5em;\n
\tbackground-color:#fff;\n
\tlist-style-position: inside;\n
\tpadding:0.4em 0.5em 0.4em 0.5em;\n
}\n
\n
ol#qunit-tests li li.pass{\n
\tborder-left:26px solid #C6E746;\n
\tbackground-color:#fff;\n
\tcolor:#5E740B;\n
\t}\n
ol#qunit-tests li li.fail{\n
\tborder-left:26px solid #EE5757;\n
\tbackground-color:#fff;\n
\tcolor:#710909;\n
}\n
ol#qunit-tests li.pass{\n
\tbackground-color:#D2E0E6;\n
\tcolor:#528CE0;\n
}\n
ol#qunit-tests li.fail{\n
\tbackground-color:#EE5757;\n
\tcolor:#000;\n
}\n
ol#qunit-tests li strong {\n
\tcursor:pointer;\n
}\n
h1#qunit-header{\n
\tbackground-color:#0d3349;\n
\tmargin:0;\n
\tpadding:0.5em 0 0.5em 1em;\n
\tcolor:#fff;\n
\tfont-family:"Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial;\n
\tborder-top-right-radius:15px;\n
\tborder-top-left-radius:15px;\n
\t-moz-border-radius-topright:15px;\n
\t-moz-border-radius-topleft:15px;\n
\t-webkit-border-top-right-radius:15px;\n
\t-webkit-border-top-left-radius:15px;\n
\ttext-shadow: rgba(0, 0, 0, 0.5) 4px 4px 1px;\n
}\n
h2#qunit-banner{\n
\tfont-family:"Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial;\n
\theight:5px;\n
\tmargin:0;\n
\tpadding:0;\n
}\n
h2#qunit-banner.qunit-pass{\n
\tbackground-color:#C6E746;\n
}\n
h2#qunit-banner.qunit-fail, #qunit-testrunner-toolbar {\n
\tbackground-color:#EE5757;\n
}\n
#qunit-testrunner-toolbar {\n
\tfont-family:"Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial;\n
\tpadding:0;\n
\t/*width:80%;*/\n
\tpadding:0em 0 0.5em 2em;\n
\tfont-size: small;\n
}\n
h2#qunit-userAgent {\n
\tfont-family:"Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial;\n
\tbackground-color:#2b81af;\n
\tmargin:0;\n
\tpadding:0;\n
\tcolor:#fff;\n
\tfont-size: small;\n
\tpadding:0.5em 0 0.5em 2.5em;\n
\ttext-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px;\n
}\n
p#qunit-testresult{\n
\tfont-family:"Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial;\n
\tmargin:0;\n
\tfont-size: small;\n
\tcolor:#2b81af;\n
\tborder-bottom-right-radius:15px;\n
\tborder-bottom-left-radius:15px;\n
\t-moz-border-radius-bottomright:15px;\n
\t-moz-border-radius-bottomleft:15px;\n
\t-webkit-border-bottom-right-radius:15px;\n
\t-webkit-border-bottom-left-radius:15px;\n
\tbackground-color:#D2E0E6;\n
\tpadding:0.5em 0.5em 0.5em 2.5em;\n
}\n
strong b.fail{\n
\tcolor:#710909;\n
\t}\n
strong b.pass{\n
\tcolor:#5E740B;\n
\t}\n
</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>2950</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>qunit.css</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271247.89</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>qunit.js</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>application/javascript</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="cdata"><![CDATA[
/*\n
* QUnit - A JavaScript Unit Testing Framework\n
* \n
* http://docs.jquery.com/QUnit\n
*\n
* Copyright (c) 2009 John Resig, Jörn Zaefferer\n
* Dual licensed under the MIT (MIT-LICENSE.txt)\n
* and GPL (GPL-LICENSE.txt) licenses.\n
*/\n
\n
(function(window) {\n
\n
var QUnit = {\n
\n
\t// Initialize the configuration options\n
\tinit: function() {\n
\t\tconfig = {\n
\t\t\tstats: { all: 0, bad: 0 },\n
\t\t\tmoduleStats: { all: 0, bad: 0 },\n
\t\t\tstarted: +new Date,\n
\t\t\tupdateRate: 1000,\n
\t\t\tblocking: false,\n
\t\t\tautorun: false,\n
\t\t\tassertions: [],\n
\t\t\tfilters: [],\n
\t\t\tqueue: []\n
\t\t};\n
\n
\t\tvar tests = id("qunit-tests"),\n
\t\t\tbanner = id("qunit-banner"),\n
\t\t\tresult = id("qunit-testresult");\n
\n
\t\tif ( tests ) {\n
\t\t\ttests.innerHTML = "";\n
\t\t}\n
\n
\t\tif ( banner ) {\n
\t\t\tbanner.className = "";\n
\t\t}\n
\n
\t\tif ( result ) {\n
\t\t\tresult.parentNode.removeChild( result );\n
\t\t}\n
\t},\n
\t\n
\t// call on start of module test to prepend name to all tests\n
\tmodule: function(name, testEnvironment) {\n
\t\tconfig.currentModule = name;\n
\n
\t\tsynchronize(function() {\n
\t\t\tif ( config.currentModule ) {\n
\t\t\t\tQUnit.moduleDone( config.currentModule, config.moduleStats.bad, config.moduleStats.all );\n
\t\t\t}\n
\n
\t\t\tconfig.currentModule = name;\n
\t\t\tconfig.moduleTestEnvironment = testEnvironment;\n
\t\t\tconfig.moduleStats = { all: 0, bad: 0 };\n
\n
\t\t\tQUnit.moduleStart( name, testEnvironment );\n
\t\t});\n
\t},\n
\n
\tasyncTest: function(testName, expected, callback) {\n
\t\tif ( arguments.length === 2 ) {\n
\t\t\tcallback = expected;\n
\t\t\texpected = 0;\n
\t\t}\n
\n
\t\tQUnit.test(testName, expected, callback, true);\n
\t},\n
\t\n
\ttest: function(testName, expected, callback, async) {\n
\t\tvar name = testName, testEnvironment, testEnvironmentArg;\n
\n
\t\tif ( arguments.length === 2 ) {\n
\t\t\tcallback = expected;\n
\t\t\texpected = null;\n
\t\t}\n
\t\t// is 2nd argument a testEnvironment?\n
\t\tif ( expected && typeof expected === \'object\') {\n
\t\t\ttestEnvironmentArg = expected;\n
\t\t\texpected = null;\n
\t\t}\n
\n
\t\tif ( config.currentModule ) {\n
\t\t\tname = config.currentModule + " module: " + name;\n
\t\t}\n
\n
\t\tif ( !validTest(name) ) {\n
\t\t\treturn;\n
\t\t}\n
\n
\t\tsynchronize(function() {\n
\t\t\tQUnit.testStart( testName );\n
\n
\t\t\ttestEnvironment = extend({\n
\t\t\t\tsetup: function() {},\n
\t\t\t\tteardown: function() {}\n
\t\t\t}, config.moduleTestEnvironment);\n
\t\t\tif (testEnvironmentArg) {\n
\t\t\t\textend(testEnvironment,testEnvironmentArg);\n
\t\t\t}\n
\n
\t\t\t// allow utility functions to access the current test environment\n
\t\t\tQUnit.current_testEnvironment = testEnvironment;\n
\t\t\t\n
\t\t\tconfig.assertions = [];\n
\t\t\tconfig.expected = expected;\n
\n
\t\t\ttry {\n
\t\t\t\tif ( !config.pollution ) {\n
\t\t\t\t\tsaveGlobal();\n
\t\t\t\t}\n
\n
\t\t\t\ttestEnvironment.setup.call(testEnvironment);\n
\t\t\t} catch(e) {\n
\t\t\t\tQUnit.ok( false, "Setup failed on " + name + ": " + e.message );\n
\t\t\t}\n
\n
\t\t\tif ( async ) {\n
\t\t\t\tQUnit.stop();\n
\t\t\t}\n
\n
\t\t\ttry {\n
\t\t\t\tcallback.call(testEnvironment);\n
\t\t\t} catch(e) {\n
\t\t\t\tfail("Test " + name + " died, exception and test follows", e, callback);\n
\t\t\t\tQUnit.ok( false, "Died on test #" + (config.assertions.length + 1) + ": " + e.message );\n
\t\t\t\t// else next test will carry the responsibility\n
\t\t\t\tsaveGlobal();\n
\n
\t\t\t\t// Restart the tests if they\'re blocking\n
\t\t\t\tif ( config.blocking ) {\n
\t\t\t\t\tstart();\n
\t\t\t\t}\n
\t\t\t}\n
\t\t});\n
\n
\t\tsynchronize(function() {\n
\t\t\ttry {\n
\t\t\t\tcheckPollution();\n
\t\t\t\ttestEnvironment.teardown.call(testEnvironment);\n
\t\t\t} catch(e) {\n
\t\t\t\tQUnit.ok( false, "Teardown failed on " + name + ": " + e.message );\n
\t\t\t}\n
\n
\t\t\ttry {\n
\t\t\t\tQUnit.reset();\n
\t\t\t} catch(e) {\n
\t\t\t\tfail("reset() failed, following Test " + name + ", exception and reset fn follows", e, reset);\n
\t\t\t}\n
\n
\t\t\tif ( config.expected && config.expected != config.assertions.length ) {\n
\t\t\t\tQUnit.ok( false, "Expected " + config.expected + " assertions, but " + config.assertions.length + " were run" );\n
\t\t\t}\n
\n
\t\t\tvar good = 0, bad = 0,\n
\t\t\t\ttests = id("qunit-tests");\n
\n
\t\t\tconfig.stats.all += config.assertions.length;\n
\t\t\tconfig.moduleStats.all += config.assertions.length;\n
\n
\t\t\tif ( tests ) {\n
\t\t\t\tvar ol = document.createElement("ol");\n
\t\t\t\tol.style.display = "none";\n
\n
\t\t\t\tfor ( var i = 0; i < config.assertions.length; i++ ) {\n
\t\t\t\t\tvar assertion = config.assertions[i];\n
\n
\t\t\t\t\tvar li = document.createElement("li");\n
\t\t\t\t\tli.className = assertion.result ? "pass" : "fail";\n
\t\t\t\t\tli.appendChild(document.createTextNode(assertion.message || "(no message)"));\n
\t\t\t\t\tol.appendChild( li );\n
\n
\t\t\t\t\tif ( assertion.result ) {\n
\t\t\t\t\t\tgood++;\n
\t\t\t\t\t} else {\n
\t\t\t\t\t\tbad++;\n
\t\t\t\t\t\tconfig.stats.bad++;\n
\t\t\t\t\t\tconfig.moduleStats.bad++;\n
\t\t\t\t\t}\n
\t\t\t\t}\n
\n
\t\t\t\tvar b = document.createElement("strong");\n
\t\t\t\tb.innerHTML = name + " <b style=\'color:black;\'>(<b class=\'fail\'>" + bad + "</b>, <b class=\'pass\'>" + good + "</b>, " + config.assertions.length + ")</b>";\n
\t\t\t\t\n
\t\t\t\taddEvent(b, "click", function() {\n
\t\t\t\t\tvar next = b.nextSibling, display = next.style.display;\n
\t\t\t\t\tnext.style.display = display === "none" ? "block" : "none";\n
\t\t\t\t});\n
\t\t\t\t\n
\t\t\t\taddEvent(b, "dblclick", function(e) {\n
\t\t\t\t\tvar target = e && e.target ? e.target : window.event.srcElement;\n
\t\t\t\t\tif ( target.nodeName.toLowerCase() === "strong" ) {\n
\t\t\t\t\t\tvar text = "", node = target.firstChild;\n
\n
\t\t\t\t\t\twhile ( node.nodeType === 3 ) {\n
\t\t\t\t\t\t\ttext += node.nodeValue;\n
\t\t\t\t\t\t\tnode = node.nextSibling;\n
\t\t\t\t\t\t}\n
\n
\t\t\t\t\t\ttext = text.replace(/(^\\s*|\\s*$)/g, "");\n
\n
\t\t\t\t\t\tif ( window.location ) {\n
\t\t\t\t\t\t\twindow.location.href = window.location.href.match(/^(.+?)(\\?.*)?$/)[1] + "?" + encodeURIComponent(text);\n
\t\t\t\t\t\t}\n
\t\t\t\t\t}\n
\t\t\t\t});\n
\n
\t\t\t\tvar li = document.createElement("li");\n
\t\t\t\tli.className = bad ? "fail" : "pass";\n
\t\t\t\tli.appendChild( b );\n
\t\t\t\tli.appendChild( ol );\n
\t\t\t\ttests.appendChild( li );\n
\n
\t\t\t\tif ( bad ) {\n
\t\t\t\t\tvar toolbar = id("qunit-testrunner-toolbar");\n
\t\t\t\t\tif ( toolbar ) {\n
\t\t\t\t\t\ttoolbar.style.display = "block";\n
\t\t\t\t\t\tid("qunit-filter-pass").disabled = null;\n
\t\t\t\t\t\tid("qunit-filter-missing").disabled = null;\n
\t\t\t\t\t}\n
\t\t\t\t}\n
\n
\t\t\t} else {\n
\t\t\t\tfor ( var i = 0; i < config.assertions.length; i++ ) {\n
\t\t\t\t\tif ( !config.assertions[i].result ) {\n
\t\t\t\t\t\tbad++;\n
\t\t\t\t\t\tconfig.stats.bad++;\n
\t\t\t\t\t\tconfig.moduleStats.bad++;\n
\t\t\t\t\t}\n
\t\t\t\t}\n
\t\t\t}\n
\n
\t\t\tQUnit.testDone( testName, bad, config.assertions.length );\n
\n
\t\t\tif ( !window.setTimeout && !config.queue.length ) {\n
\t\t\t\tdone();\n
\t\t\t}\n
\t\t});\n
\n
\t\tif ( window.setTimeout && !config.doneTimer ) {\n
\t\t\tconfig.doneTimer = window.setTimeout(function(){\n
\t\t\t\tif ( !config.queue.length ) {\n
\t\t\t\t\tdone();\n
\t\t\t\t} else {\n
\t\t\t\t\tsynchronize( done );\n
\t\t\t\t}\n
\t\t\t}, 13);\n
\t\t}\n
\t},\n
\t\n
\t/**\n
\t * Specify the number of expected assertions to gurantee that failed test (no assertions are run at all) don\'t slip through.\n
\t */\n
\texpect: function(asserts) {\n
\t\tconfig.expected = asserts;\n
\t},\n
\n
\t/**\n
\t * Asserts true.\n
\t * @example ok( "asdfasdf".length > 5, "There must be at least 5 chars" );\n
\t */\n
\tok: function(a, msg) {\n
\t\tQUnit.log(a, msg);\n
\n
\t\tconfig.assertions.push({\n
\t\t\tresult: !!a,\n
\t\t\tmessage: msg\n
\t\t});\n
\t},\n
\n
\t/**\n
\t * Checks that the first two arguments are equal, with an optional message.\n
\t * Prints out both actual and expected values.\n
\t *\n
\t * Prefered to ok( actual == expected, message )\n
\t *\n
\t * @example equal( format("Received {0} bytes.", 2), "Received 2 bytes." );\n
\t *\n
\t * @param Object actual\n
\t * @param Object expected\n
\t * @param String message (optional)\n
\t */\n
\tequal: function(actual, expected, message) {\n
\t\tpush(expected == actual, actual, expected, message);\n
\t},\n
\n
\tnotEqual: function(actual, expected, message) {\n
\t\tpush(expected != actual, actual, expected, message);\n
\t},\n
\t\n
\tdeepEqual: function(a, b, message) {\n
\t\tpush(QUnit.equiv(a, b), a, b, message);\n
\t},\n
\n
\tnotDeepEqual: function(a, b, message) {\n
\t\tpush(!QUnit.equiv(a, b), a, b, message);\n
\t},\n
\n
\tstrictEqual: function(actual, expected, message) {\n
\t\tpush(expected === actual, actual, expected, message);\n
\t},\n
\n
\tnotStrictEqual: function(actual, expected, message) {\n
\t\tpush(expected !== actual, actual, expected, message);\n
\t},\n
\t\n
\tstart: function() {\n
\t\t// A slight delay, to avoid any current callbacks\n
\t\tif ( window.setTimeout ) {\n
\t\t\twindow.setTimeout(function() {\n
\t\t\t\tif ( config.timeout ) {\n
\t\t\t\t\tclearTimeout(config.timeout);\n
\t\t\t\t}\n
\n
\t\t\t\tconfig.blocking = false;\n
\t\t\t\tprocess();\n
\t\t\t}, 13);\n
\t\t} else {\n
\t\t\tconfig.blocking = false;\n
\t\t\tprocess();\n
\t\t}\n
\t},\n
\t\n
\tstop: function(timeout) {\n
\t\tconfig.blocking = true;\n
\n
\t\tif ( timeout && window.setTimeout ) {\n
\t\t\tconfig.timeout = window.setTimeout(function() {\n
\t\t\t\tQUnit.ok( false, "Test timed out" );\n
\t\t\t\tQUnit.start();\n
\t\t\t}, timeout);\n
\t\t}\n
\t},\n
\t\n
\t/**\n
\t * Resets the test setup. Useful for tests that modify the DOM.\n
\t */\n
\treset: function() {\n
\t\tif ( window.jQuery ) {\n
\t\t\tjQuery("#main").html( config.fixture );\n
\t\t\tjQuery.event.global = {};\n
\t\t\tjQuery.ajaxSettings = extend({}, config.ajaxSettings);\n
\t\t}\n
\t},\n
\t\n
\t/**\n
\t * Trigger an event on an element.\n
\t *\n
\t * @example triggerEvent( document.body, "click" );\n
\t *\n
\t * @param DOMElement elem\n
\t * @param String type\n
\t */\n
\ttriggerEvent: function( elem, type, event ) {\n
\t\tif ( document.createEvent ) {\n
\t\t\tevent = document.createEvent("MouseEvents");\n
\t\t\tevent.initMouseEvent(type, true, true, elem.ownerDocument.defaultView,\n
\t\t\t\t0, 0, 0, 0, 0, false, false, false, false, 0, null);\n
\t\t\telem.dispatchEvent( event );\n
\n
\t\t} else if ( elem.fireEvent ) {\n
\t\t\telem.fireEvent("on"+type);\n
\t\t}\n
\t},\n
\t\n
\t// Safe object type checking\n
\tis: function( type, obj ) {\n
\t\treturn Object.prototype.toString.call( obj ) === "[object "+ type +"]";\n
\t},\n
\t\n
\t// Logging callbacks\n
\tdone: function(failures, total) {},\n
\tlog: function(result, message) {},\n
\ttestStart: function(name) {},\n
\ttestDone: function(name, failures, total) {},\n
\tmoduleStart: function(name, testEnvironment) {},\n
\tmoduleDone: function(name, failures, total) {}\n
};\n
\n
// Backwards compatibility, deprecated\n
QUnit.equals = QUnit.equal;\n
QUnit.same = QUnit.deepEqual;\n
\n
// Maintain internal state\n
var config = {\n
\t// The queue of tests to run\n
\tqueue: [],\n
\n
\t// block until document ready\n
\tblocking: true\n
};\n
\n
// Load paramaters\n
(function() {\n
\tvar location = window.location || { search: "", protocol: "file:" },\n
\t\tGETParams = location.search.slice(1).split(\'&\');\n
\n
\tfor ( var i = 0; i < GETParams.length; i++ ) {\n
\t\tGETParams[i] = decodeURIComponent( GETParams[i] );\n
\t\tif ( GETParams[i] === "noglobals" ) {\n
\t\t\tGETParams.splice( i, 1 );\n
\t\t\ti--;\n
\t\t\tconfig.noglobals = true;\n
\t\t} else if ( GETParams[i].search(\'=\') > -1 ) {\n
\t\t\tGETParams.splice( i, 1 );\n
\t\t\ti--;\n
\t\t}\n
\t}\n
\t\n
\t// restrict modules/tests by get parameters\n
\tconfig.filters = GETParams;\n
\t\n
\t// Figure out if we\'re running the tests from a server or not\n
\tQUnit.isLocal = !!(location.protocol === \'file:\');\n
})();\n
\n
// Expose the API as global variables, unless an \'exports\'\n
// object exists, in that case we assume we\'re in CommonJS\n
if ( typeof exports === "undefined" || typeof require === "undefined" ) {\n
\textend(window, QUnit);\n
\twindow.QUnit = QUnit;\n
} else {\n
\textend(exports, QUnit);\n
\texports.QUnit = QUnit;\n
}\n
\n
if ( typeof document === "undefined" || document.readyState === "complete" ) {\n
\tconfig.autorun = true;\n
}\n
\n
addEvent(window, "load", function() {\n
\t// Initialize the config, saving the execution queue\n
\tvar oldconfig = extend({}, config);\n
\tQUnit.init();\n
\textend(config, oldconfig);\n
\n
\tconfig.blocking = false;\n
\n
\tvar userAgent = id("qunit-userAgent");\n
\tif ( userAgent ) {\n
\t\tuserAgent.innerHTML = navigator.userAgent;\n
\t}\n
\t\n
\tvar toolbar = id("qunit-testrunner-toolbar");\n
\tif ( toolbar ) {\n
\t\ttoolbar.style.display = "none";\n
\t\t\n
\t\tvar filter = document.createElement("input");\n
\t\tfilter.type = "checkbox";\n
\t\tfilter.id = "qunit-filter-pass";\n
\t\tfilter.disabled = true;\n
\t\taddEvent( filter, "click", function() {\n
\t\t\tvar li = document.getElementsByTagName("li");\n
\t\t\tfor ( var i = 0; i < li.length; i++ ) {\n
\t\t\t\tif ( li[i].className.indexOf("pass") > -1 ) {\n
\t\t\t\t\tli[i].style.display = filter.checked ? "none" : "";\n
\t\t\t\t}\n
\t\t\t}\n
\t\t});\n
\t\ttoolbar.appendChild( filter );\n
\n
\t\tvar label = document.createElement("label");\n
\t\tlabel.setAttribute("for", "qunit-filter-pass");\n
\t\tlabel.innerHTML = "Hide passed tests";\n
\t\ttoolbar.appendChild( label );\n
\n
\t\tvar missing = document.createElement("input");\n
\t\tmissing.type = "checkbox";\n
\t\tmissing.id = "qunit-filter-missing";\n
\t\tmissing.disabled = true;\n
\t\taddEvent( missing, "click", function() {\n
\t\t\tvar li = document.getElementsByTagName("li");\n
\t\t\tfor ( var i = 0; i < li.length; i++ ) {\n
\t\t\t\tif ( li[i].className.indexOf("fail") > -1 && li[i].innerHTML.indexOf(\'missing test - untested code is broken code\') > - 1 ) {\n
\t\t\t\t\tli[i].parentNode.parentNode.style.display = missing.checked ? "none" : "block";\n
\t\t\t\t}\n
\t\t\t}\n
\t\t});\n
\t\ttoolbar.appendChild( missing );\n
\n
\t\tlabel = document.createElement("label");\n
\t\tlabel.setAttribute("for", "qunit-filter-missing");\n
\t\tlabel.innerHTML = "Hide missing tests (untested code is broken code)";\n
\t\ttoolbar.appendChild( label );\n
\t}\n
\n
\tvar main = id(\'main\');\n
\tif ( main ) {\n
\t\tconfig.fixture = main.innerHTML;\n
\t}\n
\n
\tif ( window.jQuery ) {\n
\t\tconfig.ajaxSettings = window.jQuery.ajaxSettings;\n
\t}\n
\n
\tQUnit.start();\n
});\n
\n
function done() {\n
\tif ( config.doneTimer && window.clearTimeout ) {\n
\t\twindow.clearTimeout( config.doneTimer );\n
\t\tconfig.doneTimer = null;\n
\t}\n
\n
\tif ( config.queue.length ) {\n
\t\tconfig.doneTimer = window.setTimeout(function(){\n
\t\t\tif ( !config.queue.length ) {\n
\t\t\t\tdone();\n
\t\t\t} else {\n
\t\t\t\tsynchronize( done );\n
\t\t\t}\n
\t\t}, 13);\n
\n
\t\treturn;\n
\t}\n
\n
\tconfig.autorun = true;\n
\n
\t// Log the last module results\n
\tif ( config.currentModule ) {\n
\t\tQUnit.moduleDone( config.currentModule, config.moduleStats.bad, config.moduleStats.all );\n
\t}\n
\n
\tvar banner = id("qunit-banner"),\n
\t\ttests = id("qunit-tests"),\n
\t\thtml = [\'Tests completed in \',\n
\t\t+new Date - config.started, \' milliseconds.<br/>\',\n
\t\t\'<span class="passed">\', config.stats.all - config.stats.bad, \'</span> tests of <span class="total">\', config.stats.all, \'</span> passed, <span class="failed">\', config.stats.bad,\'</span> failed.\'].join(\'\');\n
\n
\tif ( banner ) {\n
\t\tbanner.className = (config.stats.bad ? "qunit-fail" : "qunit-pass");\n
\t}\n
\n
\tif ( tests ) {\t\n
\t\tvar result = id("qunit-testresult");\n
\n
\t\tif ( !result ) {\n
\t\t\tresult = document.createElement("p");\n
\t\t\tresult.id = "qunit-testresult";\n
\t\t\tresult.className = "result";\n
\t\t\ttests.parentNode.insertBefore( result, tests.nextSibling );\n
\t\t}\n
\n
\t\tresult.innerHTML = html;\n
\t}\n
\n
\tQUnit.done( config.stats.bad, config.stats.all );\n
}\n
\n
function validTest( name ) {\n
\tvar i = config.filters.length,\n
\t\trun = false;\n
\n
\tif ( !i ) {\n
\t\treturn true;\n
\t}\n
\t\n
\twhile ( i-- ) {\n
\t\tvar filter = config.filters[i],\n
\t\t\tnot = filter.charAt(0) == \'!\';\n
\n
\t\tif ( not ) {\n
\t\t\tfilter = filter.slice(1);\n
\t\t}\n
\n
\t\tif ( name.indexOf(filter) !== -1 ) {\n
\t\t\treturn !not;\n
\t\t}\n
\n
\t\tif ( not ) {\n
\t\t\trun = true;\n
\t\t}\n
\t}\n
\n
\treturn run;\n
}\n
\n
function push(result, actual, expected, message) {\n
\tmessage = message || (result ? "okay" : "failed");\n
\tQUnit.ok( result, result ? message + ": " + QUnit.jsDump.parse(expected) : message + ", expected: " + QUnit.jsDump.parse(expected) + " result: " + QUnit.jsDump.parse(actual) );\n
}\n
\n
function synchronize( callback ) {\n
\tconfig.queue.push( callback );\n
\n
\tif ( config.autorun && !config.blocking ) {\n
\t\tprocess();\n
\t}\n
}\n
\n
function process() {\n
\tvar start = (new Date()).getTime();\n
\n
\twhile ( config.queue.length && !config.blocking ) {\n
\t\tif ( config.updateRate <= 0 || (((new Date()).getTime() - start) < config.updateRate) ) {\n
\t\t\tconfig.queue.shift()();\n
\n
\t\t} else {\n
\t\t\tsetTimeout( process, 13 );\n
\t\t\tbreak;\n
\t\t}\n
\t}\n
}\n
\n
function saveGlobal() {\n
\tconfig.pollution = [];\n
\t\n
\tif ( config.noglobals ) {\n
\t\tfor ( var key in window ) {\n
\t\t\tconfig.pollution.push( key );\n
\t\t}\n
\t}\n
}\n
\n
function checkPollution( name ) {\n
\tvar old = config.pollution;\n
\tsaveGlobal();\n
\t\n
\tvar newGlobals = diff( old, config.pollution );\n
\tif ( newGlobals.length > 0 ) {\n
\t\tok( false, "Introduced global variable(s): " + newGlobals.join(", ") );\n
\t\tconfig.expected++;\n
\t}\n
\n
\tvar deletedGlobals = diff( config.pollution, old );\n
\tif ( deletedGlobals.length > 0 ) {\n
\t\tok( false, "Deleted global variable(s): " + deletedGlobals.join(", ") );\n
\t\tconfig.expected++;\n
\t}\n
}\n
\n
// returns a new Array with the elements that are in a but not in b\n
function diff( a, b ) {\n
\tvar result = a.slice();\n
\tfor ( var i = 0; i < result.length; i++ ) {\n
\t\tfor ( var j = 0; j < b.length; j++ ) {\n
\t\t\tif ( result[i] === b[j] ) {\n
\t\t\t\tresult.splice(i, 1);\n
\t\t\t\ti--;\n
\t\t\t\tbreak;\n
\t\t\t}\n
\t\t}\n
\t}\n
\treturn result;\n
}\n
\n
function fail(message, exception, callback) {\n
\tif ( typeof console !== "undefined" && console.error && console.warn ) {\n
\t\tconsole.error(message);\n
\t\tconsole.error(exception);\n
\t\tconsole.warn(callback.toString());\n
\n
\t} else if ( window.opera && opera.postError ) {\n
\t\topera.postError(message, exception, callback.toString);\n
\t}\n
}\n
\n
function extend(a, b) {\n
\tfor ( var prop in b ) {\n
\t\ta[prop] = b[prop];\n
\t}\n
\n
\treturn a;\n
}\n
\n
function addEvent(elem, type, fn) {\n
\tif ( elem.addEventListener ) {\n
\t\telem.addEventListener( type, fn, false );\n
\t} else if ( elem.attachEvent ) {\n
\t\telem.attachEvent( "on" + type, fn );\n
\t} else {\n
\t\tfn();\n
\t}\n
}\n
\n
function id(name) {\n
\treturn !!(typeof document !== "undefined" && document && document.getElementById) &&\n
\t\tdocument.getElementById( name );\n
}\n
\n
// Test for equality any JavaScript type.\n
// Discussions and reference: http://philrathe.com/articles/equiv\n
// Test suites: http://philrathe.com/tests/equiv\n
// Author: Philippe Rathé <prathe@gmail.com>\n
QUnit.equiv = function () {\n
\n
var innerEquiv; // the real equiv function\n
var callers = []; // stack to decide between skip/abort functions\n
var parents = []; // stack to avoiding loops from circular referencing\n
\n
\n
// Determine what is o.\n
function hoozit(o) {\n
if (QUnit.is("String", o)) {\n
return "string";\n
\n
} else if (QUnit.is("Boolean", o)) {\n
return "boolean";\n
\n
} else if (QUnit.is("Number", o)) {\n
\n
if (isNaN(o)) {\n
return "nan";\n
} else {\n
return "number";\n
}\n
\n
} else if (typeof o === "undefined") {\n
return "undefined";\n
\n
// consider: typeof null === object\n
} else if (o === null) {\n
return "null";\n
\n
// consider: typeof [] === object\n
} else if (QUnit.is( "Array", o)) {\n
return "array";\n
\n
// consider: typeof new Date() === object\n
} else if (QUnit.is( "Date", o)) {\n
return "date";\n
\n
// consider: /./ instanceof Object;\n
// /./ instanceof RegExp;\n
// typeof /./ === "function"; // => false in IE and Opera,\n
// true in FF and Safari\n
} else if (QUnit.is( "RegExp", o)) {\n
return "regexp";\n
\n
} else if (typeof o === "object") {\n
return "object";\n
\n
} else if (QUnit.is( "Function", o)) {\n
return "function";\n
} else {\n
return undefined;\n
}\n
}\n
\n
// Call the o related callback with the given arguments.\n
function bindCallbacks(o, callbacks, args) {\n
var prop = hoozit(o);\n
if (prop) {\n
if (hoozit(callbacks[prop]) === "function") {\n
return callbacks[prop].apply(callbacks, args);\n
} else {\n
return callbacks[prop]; // or undefined\n
}\n
}\n
}\n
\n
var callbacks = function () {\n
\n
// for string, boolean, number and null\n
function useStrictEquality(b, a) {\n
if (b instanceof a.constructor || a instanceof b.constructor) {\n
// to catch short annotaion VS \'new\' annotation of a declaration\n
// e.g. var i = 1;\n
// var j = new Number(1);\n
return a == b;\n
} else {\n
return a === b;\n
}\n
}\n
\n
return {\n
"string": useStrictEquality,\n
"boolean": useStrictEquality,\n
"number": useStrictEquality,\n
"null": useStrictEquality,\n
"undefined": useStrictEquality,\n
\n
"nan": function (b) {\n
return isNaN(b);\n
},\n
\n
"date": function (b, a) {\n
return hoozit(b) === "date" && a.valueOf() === b.valueOf();\n
},\n
\n
"regexp": function (b, a) {\n
return hoozit(b) === "regexp" &&\n
a.source === b.source && // the regex itself\n
a.global === b.global && // and its modifers (gmi) ...\n
a.ignoreCase === b.ignoreCase &&\n
a.multiline === b.multiline;\n
},\n
\n
// - skip when the property is a method of an instance (OOP)\n
// - abort otherwise,\n
// initial === would have catch identical references anyway\n
"function": function () {\n
var caller = callers[callers.length - 1];\n
return caller !== Object &&\n
typeof caller !== "undefined";\n
},\n
\n
"array": function (b, a) {\n
var i, j, loop;\n
var len;\n
\n
// b could be an object literal here\n
if ( ! (hoozit(b) === "array")) {\n
return false;\n
} \n
\n
len = a.length;\n
if (len !== b.length) { // safe and faster\n
return false;\n
}\n
\n
//track reference to avoid circular references\n
parents.push(a);\n
for (i = 0; i < len; i++) {\n
loop = false;\n
for(j=0;j<parents.length;j++){\n
if(parents[j] === a[i]){\n
loop = true;//dont rewalk array\n
}\n
}\n
if (!loop && ! innerEquiv(a[i], b[i])) {\n
parents.pop();\n
return false;\n
}\n
}\n
parents.pop();\n
return true;\n
},\n
\n
"object": function (b, a) {\n
var i, j, loop;\n
var eq = true; // unless we can proove it\n
var aProperties = [], bProperties = []; // collection of strings\n
\n
// comparing constructors is more strict than using instanceof\n
if ( a.constructor !== b.constructor) {\n
return false;\n
}\n
\n
// stack constructor before traversing properties\n
callers.push(a.constructor);\n
//track reference to avoid circular references\n
parents.push(a);\n
\n
for (i in a) { // be strict: don\'t ensures hasOwnProperty and go deep\n
loop = false;\n
for(j=0;j<parents.length;j++){\n
if(parents[j] === a[i])\n
loop = true; //don\'t go down the same path twice\n
}\n
aProperties.push(i); // collect a\'s properties\n
\n
if (!loop && ! innerEquiv(a[i], b[i])) {\n
eq = false;\n
break;\n
}\n
}\n
\n
callers.pop(); // unstack, we are done\n
parents.pop();\n
\n
for (i in b) {\n
bProperties.push(i); // collect b\'s properties\n
}\n
\n
// Ensures identical properties name\n
return eq && innerEquiv(aProperties.sort(), bProperties.sort());\n
}\n
};\n
}();\n
\n
innerEquiv = function () { // can take multiple arguments\n
var args = Array.prototype.slice.apply(arguments);\n
if (args.length < 2) {\n
return true; // end transition\n
}\n
\n
return (function (a, b) {\n
if (a === b) {\n
return true; // catch the most you can\n
} else if (a === null || b === null || typeof a === "undefined" || typeof b === "undefined" || hoozit(a) !== hoozit(b)) {\n
return false; // don\'t lose time with error prone cases\n
} else {\n
return bindCallbacks(a, callbacks, [b, a]);\n
}\n
\n
// apply transition with (1..n) arguments\n
})(args[0], args[1]) && arguments.callee.apply(this, args.splice(1, args.length -1));\n
};\n
\n
return innerEquiv;\n
\n
}();\n
\n
/**\n
* jsDump\n
* Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com\n
* Licensed under BSD (http://www.opensource.org/licenses/bsd-license.php)\n
* Date: 5/15/2008\n
* @projectDescription Advanced and extensible data dumping for Javascript.\n
* @version 1.0.0\n
* @author Ariel Flesler\n
* @link {http://flesler.blogspot.com/2008/05/jsdump-pretty-dump-of-any-javascript.html}\n
*/\n
QUnit.jsDump = (function() {\n
\tfunction quote( str ) {\n
\t\treturn \'"\' + str.toString().replace(/"/g, \'\\\\"\') + \'"\';\n
\t};\n
\tfunction literal( o ) {\n
\t\treturn o + \'\';\t\n
\t};\n
\tfunction join( pre, arr, post ) {\n
\t\tvar s = jsDump.separator(),\n
\t\t\tbase = jsDump.indent(),\n
\t\t\tinner = jsDump.indent(1);\n
\t\tif ( arr.join )\n
\t\t\tarr = arr.join( \',\' + s + inner );\n
\t\tif ( !arr )\n
\t\t\treturn pre + post;\n
\t\treturn [ pre, inner + arr, base + post ].join(s);\n
\t};\n
\tfunction array( arr ) {\n
\t\tvar i = arr.length,\tret = Array(i);\t\t\t\t\t\n
\t\tthis.up();\n
\t\twhile ( i-- )\n
\t\t\tret[i] = this.parse( arr[i] );\t\t\t\t\n
\t\tthis.down();\n
\t\treturn join( \'[\', ret, \']\' );\n
\t};\n
\t\n
\tvar reName = /^function (\\w+)/;\n
\t\n
\tvar jsDump = {\n
\t\tparse:function( obj, type ) { //type is used mostly internally, you can fix a (custom)type in advance\n
\t\t\tvar\tparser = this.parsers[ type || this.typeOf(obj) ];\n
\t\t\ttype = typeof parser;\t\t\t\n
\t\t\t\n
\t\t\treturn type == \'function\' ? parser.call( this, obj ) :\n
\t\t\t\t type == \'string\' ? parser :\n
\t\t\t\t this.parsers.error;\n
\t\t},\n
\t\ttypeOf:function( obj ) {\n
\t\t\tvar type;\n
\t\t\tif ( obj === null ) {\n
\t\t\t\ttype = "null";\n
\t\t\t} else if (typeof obj === "undefined") {\n
\t\t\t\ttype = "undefined";\n
\t\t\t} else if (QUnit.is("RegExp", obj)) {\n
\t\t\t\ttype = "regexp";\n
\t\t\t} else if (QUnit.is("Date", obj)) {\n
\t\t\t\ttype = "date";\n
\t\t\t} else if (QUnit.is("Function", obj)) {\n
\t\t\t\ttype = "function";\n
\t\t\t} else if (obj.setInterval && obj.document && !obj.nodeType) {\n
\t\t\t\ttype = "window";\n
\t\t\t} else if (obj.nodeType === 9) {\n
\t\t\t\ttype = "document";\n
\t\t\t} else if (obj.nodeType) {\n
\t\t\t\ttype = "node";\n
\t\t\t} else if (typeof obj === "object" && typeof obj.length === "number" && obj.length >= 0) {\n
\t\t\t\ttype = "array";\n
\t\t\t} else {\n
\t\t\t\ttype = typeof obj;\n
\t\t\t}\n
\t\t\treturn type;\n
\t\t},\n
\t\tseparator:function() {\n
\t\t\treturn this.multiline ?\tthis.HTML ? \'<br />\' : \'\\n\' : this.HTML ? \'&nbsp;\' : \' \';\n
\t\t},\n
\t\tindent:function( extra ) {// extra can be a number, shortcut for increasing-calling-decreasing\n
\t\t\tif ( !this.multiline )\n
\t\t\t\treturn \'\';\n
\t\t\tvar chr = this.indentChar;\n
\t\t\tif ( this.HTML )\n
\t\t\t\tchr = chr.replace(/\\t/g,\' \').replace(/ /g,\'&nbsp;\');\n
\t\t\treturn Array( this._depth_ + (extra||0) ).join(chr);\n
\t\t},\n
\t\tup:function( a ) {\n
\t\t\tthis._depth_ += a || 1;\n
\t\t},\n
\t\tdown:function( a ) {\n
\t\t\tthis._depth_ -= a || 1;\n
\t\t},\n
\t\tsetParser:function( name, parser ) {\n
\t\t\tthis.parsers[name] = parser;\n
\t\t},\n
\t\t// The next 3 are exposed so you can use them\n
\t\tquote:quote, \n
\t\tliteral:literal,\n
\t\tjoin:join,\n
\t\t//\n
\t\t_depth_: 1,\n
\t\t// This is the list of parsers, to modify them, use jsDump.setParser\n
\t\tparsers:{\n
\t\t\twindow: \'[Window]\',\n
\t\t\tdocument: \'[Document]\',\n
\t\t\terror:\'[ERROR]\', //when no parser is found, shouldn\'t happen\n
\t\t\tunknown: \'[Unknown]\',\n
\t\t\t\'null\':\'null\',\n
\t\t\tundefined:\'undefined\',\n
\t\t\t\'function\':function( fn ) {\n
\t\t\t\tvar ret = \'function\',\n
\t\t\t\t\tname = \'name\' in fn ? fn.name : (reName.exec(fn)||[])[1];//functions never have name in IE\n
\t\t\t\tif ( name )\n
\t\t\t\t\tret += \' \' + name;\n
\t\t\t\tret += \'(\';\n
\t\t\t\t\n
\t\t\t\tret = [ ret, this.parse( fn, \'functionArgs\' ), \'){\'].join(\'\');\n
\t\t\t\treturn join( ret, this.parse(fn,\'functionCode\'), \'}\' );\n
\t\t\t},\n
\t\t\tarray: array,\n
\t\t\tnodelist: array,\n
\t\t\targuments: array,\n
\t\t\tobject:function( map ) {\n
\t\t\t\tvar ret = [ ];\n
\t\t\t\tthis.up();\n
\t\t\t\tfor ( var key in map )\n
\t\t\t\t\tret.push( this.parse(key,\'key\') + \': \' + this.parse(map[key]) );\n
\t\t\t\tthis.down();\n
\t\t\t\treturn join( \'{\', ret, \'}\' );\n
\t\t\t},\n
\t\t\tnode:function( node ) {\n
\t\t\t\tvar open = this.HTML ? \'&lt;\' : \'<\',\n
\t\t\t\t\tclose = this.HTML ? \'&gt;\' : \'>\';\n
\t\t\t\t\t\n
\t\t\t\tvar tag = node.nodeName.toLowerCase(),\n
\t\t\t\t\tret = open + tag;\n
\t\t\t\t\t\n
\t\t\t\tfor ( var a in this.DOMAttrs ) {\n
\t\t\t\t\tvar val = node[this.DOMAttrs[a]];\n
\t\t\t\t\tif ( val )\n
\t\t\t\t\t\tret += \' \' + a + \'=\' + this.parse( val, \'attribute\' );\n
\t\t\t\t}\n
\t\t\t\treturn ret + close + open + \'/\' + tag + close;\n
\t\t\t},\n
\t\t\tfunctionArgs:function( fn ) {//function calls it internally, it\'s the arguments part of the function\n
\t\t\t\tvar l = fn.length;\n
\t\t\t\tif ( !l ) return \'\';\t\t\t\t\n
\t\t\t\t\n
\t\t\t\tvar args = Array(l);\n
\t\t\t\twhile ( l-- )\n
\t\t\t\t\targs[l] = String.fromCharCode(97+l);//97 is \'a\'\n
\t\t\t\treturn \' \' + args.join(\', \') + \' \';\n
\t\t\t},\n
\t\t\tkey:quote, //object calls it internally, the key part of an item in a map\n
\t\t\tfunctionCode:\'[code]\', //function calls it internally, it\'s the content of the function\n
\t\t\tattribute:quote, //node calls it internally, it\'s an html attribute value\n
\t\t\tstring:quote,\n
\t\t\tdate:quote,\n
\t\t\tregexp:literal, //regex\n
\t\t\tnumber:literal,\n
\t\t\t\'boolean\':literal\n
\t\t},\n
\t\tDOMAttrs:{//attributes to dump from nodes, name=>realName\n
\t\t\tid:\'id\',\n
\t\t\tname:\'name\',\n
\t\t\t\'class\':\'className\'\n
\t\t},\n
\t\tHTML:false,//if true, entities are escaped ( <, >, \\t, space and \\n )\n
\t\tindentChar:\' \',//indentation unit\n
\t\tmultiline:false //if true, items in a collection, are separated by a \\n, else just a space.\n
\t};\n
\n
\treturn jsDump;\n
})();\n
\n
})(this);\n
]]></string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>29043</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>qunit.js</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Folder" module="OFS.Folder"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_objects</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>plugins</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>plugins</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271192.66</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>slick.autotooltips.js</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>application/javascript</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="cdata"><![CDATA[
(function ($) {\n
// Register namespace\n
$.extend(true, window, {\n
"Slick": {\n
"AutoTooltips": AutoTooltips\n
}\n
});\n
\n
/**\n
* AutoTooltips plugin to show/hide tooltips when columns are too narrow to fit content.\n
* @constructor\n
* @param {boolean} [options.enableForCells=true] - Enable tooltip for grid cells\n
* @param {boolean} [options.enableForHeaderCells=false] - Enable tooltip for header cells\n
* @param {number} [options.maxToolTipLength=null] - The maximum length for a tooltip\n
*/\n
function AutoTooltips(options) {\n
var _grid;\n
var _self = this;\n
var _defaults = {\n
enableForCells: true,\n
enableForHeaderCells: false,\n
maxToolTipLength: null\n
};\n
\n
/**\n
* Initialize plugin.\n
*/\n
function init(grid) {\n
options = $.extend(true, {}, _defaults, options);\n
_grid = grid;\n
if (options.enableForCells) _grid.onMouseEnter.subscribe(handleMouseEnter);\n
if (options.enableForHeaderCells) _grid.onHeaderMouseEnter.subscribe(handleHeaderMouseEnter);\n
}\n
\n
/**\n
* Destroy plugin.\n
*/\n
function destroy() {\n
if (options.enableForCells) _grid.onMouseEnter.unsubscribe(handleMouseEnter);\n
if (options.enableForHeaderCells) _grid.onHeaderMouseEnter.unsubscribe(handleHeaderMouseEnter);\n
}\n
\n
/**\n
* Handle mouse entering grid cell to add/remove tooltip.\n
* @param {jQuery.Event} e - The event\n
*/\n
function handleMouseEnter(e) {\n
var cell = _grid.getCellFromEvent(e);\n
if (cell) {\n
var $node = $(_grid.getCellNode(cell.row, cell.cell));\n
var text;\n
if ($node.innerWidth() < $node[0].scrollWidth) {\n
text = $.trim($node.text());\n
if (options.maxToolTipLength && text.length > options.maxToolTipLength) {\n
text = text.substr(0, options.maxToolTipLength - 3) + "...";\n
}\n
} else {\n
text = "";\n
}\n
$node.attr("title", text);\n
}\n
}\n
\n
/**\n
* Handle mouse entering header cell to add/remove tooltip.\n
* @param {jQuery.Event} e - The event\n
* @param {object} args.column - The column definition\n
*/\n
function handleHeaderMouseEnter(e, args) {\n
var column = args.column,\n
$node = $(e.target).closest(".slick-header-column");\n
if (!column.toolTip) {\n
$node.attr("title", ($node.innerWidth() < $node[0].scrollWidth) ? column.name : "");\n
}\n
}\n
\n
// Public API\n
$.extend(this, {\n
"init": init,\n
"destroy": destroy\n
});\n
}\n
})(jQuery);
]]></string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>2567</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>slick.autotooltips.js</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271183.88</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>slick.cellcopymanager.js</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>application/javascript</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="cdata"><![CDATA[
(function ($) {\n
// register namespace\n
$.extend(true, window, {\n
"Slick": {\n
"CellCopyManager": CellCopyManager\n
}\n
});\n
\n
\n
function CellCopyManager() {\n
var _grid;\n
var _self = this;\n
var _copiedRanges;\n
\n
function init(grid) {\n
_grid = grid;\n
_grid.onKeyDown.subscribe(handleKeyDown);\n
}\n
\n
function destroy() {\n
_grid.onKeyDown.unsubscribe(handleKeyDown);\n
}\n
\n
function handleKeyDown(e, args) {\n
var ranges;\n
if (!_grid.getEditorLock().isActive()) {\n
if (e.which == $.ui.keyCode.ESCAPE) {\n
if (_copiedRanges) {\n
e.preventDefault();\n
clearCopySelection();\n
_self.onCopyCancelled.notify({ranges: _copiedRanges});\n
_copiedRanges = null;\n
}\n
}\n
\n
if (e.which == 67 && (e.ctrlKey || e.metaKey)) {\n
ranges = _grid.getSelectionModel().getSelectedRanges();\n
if (ranges.length != 0) {\n
e.preventDefault();\n
_copiedRanges = ranges;\n
markCopySelection(ranges);\n
_self.onCopyCells.notify({ranges: ranges});\n
}\n
}\n
\n
if (e.which == 86 && (e.ctrlKey || e.metaKey)) {\n
if (_copiedRanges) {\n
e.preventDefault();\n
clearCopySelection();\n
ranges = _grid.getSelectionModel().getSelectedRanges();\n
_self.onPasteCells.notify({from: _copiedRanges, to: ranges});\n
_copiedRanges = null;\n
}\n
}\n
}\n
}\n
\n
function markCopySelection(ranges) {\n
var columns = _grid.getColumns();\n
var hash = {};\n
for (var i = 0; i < ranges.length; i++) {\n
for (var j = ranges[i].fromRow; j <= ranges[i].toRow; j++) {\n
hash[j] = {};\n
for (var k = ranges[i].fromCell; k <= ranges[i].toCell; k++) {\n
hash[j][columns[k].id] = "copied";\n
}\n
}\n
}\n
_grid.setCellCssStyles("copy-manager", hash);\n
}\n
\n
function clearCopySelection() {\n
_grid.removeCellCssStyles("copy-manager");\n
}\n
\n
$.extend(this, {\n
"init": init,\n
"destroy": destroy,\n
"clearCopySelection": clearCopySelection,\n
\n
"onCopyCells": new Slick.Event(),\n
"onCopyCancelled": new Slick.Event(),\n
"onPasteCells": new Slick.Event()\n
});\n
}\n
})(jQuery);
]]></string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>2301</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>slick.cellcopymanager.js</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271187.04</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>slick.cellrangedecorator.js</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>application/javascript</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="cdata"><![CDATA[
(function ($) {\n
// register namespace\n
$.extend(true, window, {\n
"Slick": {\n
"CellRangeDecorator": CellRangeDecorator\n
}\n
});\n
\n
/***\n
* Displays an overlay on top of a given cell range.\n
*\n
* TODO:\n
* Currently, it blocks mouse events to DOM nodes behind it.\n
* Use FF and WebKit-specific "pointer-events" CSS style, or some kind of event forwarding.\n
* Could also construct the borders separately using 4 individual DIVs.\n
*\n
* @param {Grid} grid\n
* @param {Object} options\n
*/\n
function CellRangeDecorator(grid, options) {\n
var _elem;\n
var _defaults = {\n
selectionCssClass: \'slick-range-decorator\',\n
selectionCss: {\n
"zIndex": "9999",\n
"border": "2px dashed red"\n
}\n
};\n
\n
options = $.extend(true, {}, _defaults, options);\n
\n
\n
function show(range) {\n
if (!_elem) {\n
_elem = $("<div></div>", {css: options.selectionCss})\n
.addClass(options.selectionCssClass)\n
.css("position", "absolute")\n
.appendTo(grid.getCanvasNode());\n
}\n
\n
var from = grid.getCellNodeBox(range.fromRow, range.fromCell);\n
var to = grid.getCellNodeBox(range.toRow, range.toCell);\n
\n
_elem.css({\n
top: from.top - 1,\n
left: from.left - 1,\n
height: to.bottom - from.top - 2,\n
width: to.right - from.left - 2\n
});\n
\n
return _elem;\n
}\n
\n
function hide() {\n
if (_elem) {\n
_elem.remove();\n
_elem = null;\n
}\n
}\n
\n
$.extend(this, {\n
"show": show,\n
"hide": hide\n
});\n
}\n
})(jQuery);\n
]]></string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>1570</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>slick.cellrangedecorator.js</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271190.44</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>slick.cellrangeselector.js</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>application/javascript</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string>(function ($) {\n
// register namespace\n
$.extend(true, window, {\n
"Slick": {\n
"CellRangeSelector": CellRangeSelector\n
}\n
});\n
\n
\n
function CellRangeSelector(options) {\n
var _grid;\n
var _canvas;\n
var _dragging;\n
var _decorator;\n
var _self = this;\n
var _handler = new Slick.EventHandler();\n
var _defaults = {\n
selectionCss: {\n
"border": "2px dashed blue"\n
}\n
};\n
\n
\n
function init(grid) {\n
options = $.extend(true, {}, _defaults, options);\n
_decorator = new Slick.CellRangeDecorator(grid, options);\n
_grid = grid;\n
_canvas = _grid.getCanvasNode();\n
_handler\n
.subscribe(_grid.onDragInit, handleDragInit)\n
.subscribe(_grid.onDragStart, handleDragStart)\n
.subscribe(_grid.onDrag, handleDrag)\n
.subscribe(_grid.onDragEnd, handleDragEnd);\n
}\n
\n
function destroy() {\n
_handler.unsubscribeAll();\n
}\n
\n
function handleDragInit(e, dd) {\n
// prevent the grid from cancelling drag\'n\'drop by default\n
e.stopImmediatePropagation();\n
}\n
\n
function handleDragStart(e, dd) {\n
var cell = _grid.getCellFromEvent(e);\n
if (_self.onBeforeCellRangeSelected.notify(cell) !== false) {\n
if (_grid.canCellBeSelected(cell.row, cell.cell)) {\n
_dragging = true;\n
e.stopImmediatePropagation();\n
}\n
}\n
if (!_dragging) {\n
return;\n
}\n
\n
_grid.focus();\n
\n
var start = _grid.getCellFromPoint(\n
dd.startX - $(_canvas).offset().left,\n
dd.startY - $(_canvas).offset().top);\n
\n
dd.range = {start: start, end: {}};\n
\n
return _decorator.show(new Slick.Range(start.row, start.cell));\n
}\n
\n
function handleDrag(e, dd) {\n
if (!_dragging) {\n
return;\n
}\n
e.stopImmediatePropagation();\n
\n
var end = _grid.getCellFromPoint(\n
e.pageX - $(_canvas).offset().left,\n
e.pageY - $(_canvas).offset().top);\n
\n
if (!_grid.canCellBeSelected(end.row, end.cell)) {\n
return;\n
}\n
\n
dd.range.end = end;\n
_decorator.show(new Slick.Range(dd.range.start.row, dd.range.start.cell, end.row, end.cell));\n
}\n
\n
function handleDragEnd(e, dd) {\n
if (!_dragging) {\n
return;\n
}\n
\n
_dragging = false;\n
e.stopImmediatePropagation();\n
\n
_decorator.hide();\n
_self.onCellRangeSelected.notify({\n
range: new Slick.Range(\n
dd.range.start.row,\n
dd.range.start.cell,\n
dd.range.end.row,\n
dd.range.end.cell\n
)\n
});\n
}\n
\n
$.extend(this, {\n
"init": init,\n
"destroy": destroy,\n
\n
"onBeforeCellRangeSelected": new Slick.Event(),\n
"onCellRangeSelected": new Slick.Event()\n
});\n
}\n
})(jQuery);</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>2739</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>slick.cellrangeselector.js</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271185.65</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>slick.cellselectionmodel.js</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>application/javascript</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="cdata"><![CDATA[
(function ($) {\n
// register namespace\n
$.extend(true, window, {\n
"Slick": {\n
"CellSelectionModel": CellSelectionModel\n
}\n
});\n
\n
\n
function CellSelectionModel(options) {\n
var _grid;\n
var _canvas;\n
var _ranges = [];\n
var _self = this;\n
var _selector = new Slick.CellRangeSelector({\n
"selectionCss": {\n
"border": "2px solid black"\n
}\n
});\n
var _options;\n
var _defaults = {\n
selectActiveCell: true\n
};\n
\n
\n
function init(grid) {\n
_options = $.extend(true, {}, _defaults, options);\n
_grid = grid;\n
_canvas = _grid.getCanvasNode();\n
_grid.onActiveCellChanged.subscribe(handleActiveCellChange);\n
_grid.onKeyDown.subscribe(handleKeyDown);\n
grid.registerPlugin(_selector);\n
_selector.onCellRangeSelected.subscribe(handleCellRangeSelected);\n
_selector.onBeforeCellRangeSelected.subscribe(handleBeforeCellRangeSelected);\n
}\n
\n
function destroy() {\n
_grid.onActiveCellChanged.unsubscribe(handleActiveCellChange);\n
_grid.onKeyDown.unsubscribe(handleKeyDown);\n
_selector.onCellRangeSelected.unsubscribe(handleCellRangeSelected);\n
_selector.onBeforeCellRangeSelected.unsubscribe(handleBeforeCellRangeSelected);\n
_grid.unregisterPlugin(_selector);\n
}\n
\n
function removeInvalidRanges(ranges) {\n
var result = [];\n
\n
for (var i = 0; i < ranges.length; i++) {\n
var r = ranges[i];\n
if (_grid.canCellBeSelected(r.fromRow, r.fromCell) && _grid.canCellBeSelected(r.toRow, r.toCell)) {\n
result.push(r);\n
}\n
}\n
\n
return result;\n
}\n
\n
function setSelectedRanges(ranges) {\n
_ranges = removeInvalidRanges(ranges);\n
_self.onSelectedRangesChanged.notify(_ranges);\n
}\n
\n
function getSelectedRanges() {\n
return _ranges;\n
}\n
\n
function handleBeforeCellRangeSelected(e, args) {\n
if (_grid.getEditorLock().isActive()) {\n
e.stopPropagation();\n
return false;\n
}\n
}\n
\n
function handleCellRangeSelected(e, args) {\n
setSelectedRanges([args.range]);\n
}\n
\n
function handleActiveCellChange(e, args) {\n
if (_options.selectActiveCell && args.row != null && args.cell != null) {\n
setSelectedRanges([new Slick.Range(args.row, args.cell)]);\n
}\n
}\n
\n
function handleKeyDown(e) {\n
/***\n
* Кey codes\n
* 37 left\n
* 38 up\n
* 39 right\n
* 40 down \n
*/ \n
var ranges, last;\n
var active = _grid.getActiveCell(); \n
\n
if ( active && e.shiftKey && !e.ctrlKey && !e.altKey && \n
(e.which == 37 || e.which == 39 || e.which == 38 || e.which == 40) ) {\n
\n
ranges = getSelectedRanges();\n
if (!ranges.length)\n
ranges.push(new Slick.Range(active.row, active.cell));\n
\n
// keyboard can work with last range only \n
last = ranges.pop();\n
\n
// can\'t handle selection out of active cell\n
if (!last.contains(active.row, active.cell))\n
last = new Slick.Range(active.row, active.cell);\n
\n
var dRow = last.toRow - last.fromRow,\n
dCell = last.toCell - last.fromCell,\n
// walking direction\n
dirRow = active.row == last.fromRow ? 1 : -1,\n
dirCell = active.cell == last.fromCell ? 1 : -1;\n
\n
if (e.which == 37) {\n
dCell -= dirCell; \n
} else if (e.which == 39) {\n
dCell += dirCell ; \n
} else if (e.which == 38) {\n
dRow -= dirRow; \n
} else if (e.which == 40) {\n
dRow += dirRow; \n
}\n
\n
// define new selection range \n
var new_last = new Slick.Range(active.row, active.cell, active.row + dirRow*dRow, active.cell + dirCell*dCell);\n
if (removeInvalidRanges([new_last]).length) {\n
ranges.push(new_last);\n
var viewRow = dirRow > 0 ? new_last.toRow : new_last.fromRow;\n
var viewCell = dirCell > 0 ? new_last.toCell : new_last.fromCell;\n
_grid.scrollRowIntoView(viewRow);\n
_grid.scrollCellIntoView(viewRow, viewCell);\n
}\n
else \n
ranges.push(last);\n
\n
setSelectedRanges(ranges); \n
\n
e.preventDefault();\n
e.stopPropagation(); \n
} \n
}\n
\n
$.extend(this, {\n
"getSelectedRanges": getSelectedRanges,\n
"setSelectedRanges": setSelectedRanges,\n
\n
"init": init,\n
"destroy": destroy,\n
\n
"onSelectedRangesChanged": new Slick.Event()\n
});\n
}\n
})(jQuery);\n
]]></string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>4564</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>slick.cellselectionmodel.js</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271184.56</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>slick.checkboxselectcolumn.js</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>application/javascript</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="cdata"><![CDATA[
(function ($) {\n
// register namespace\n
$.extend(true, window, {\n
"Slick": {\n
"CheckboxSelectColumn": CheckboxSelectColumn\n
}\n
});\n
\n
\n
function CheckboxSelectColumn(options) {\n
var _grid;\n
var _self = this;\n
var _handler = new Slick.EventHandler();\n
var _selectedRowsLookup = {};\n
var _defaults = {\n
columnId: "_checkbox_selector",\n
cssClass: null,\n
toolTip: "Select/Deselect All",\n
width: 30\n
};\n
\n
var _options = $.extend(true, {}, _defaults, options);\n
\n
function init(grid) {\n
_grid = grid;\n
_handler\n
.subscribe(_grid.onSelectedRowsChanged, handleSelectedRowsChanged)\n
.subscribe(_grid.onClick, handleClick)\n
.subscribe(_grid.onHeaderClick, handleHeaderClick)\n
.subscribe(_grid.onKeyDown, handleKeyDown);\n
}\n
\n
function destroy() {\n
_handler.unsubscribeAll();\n
}\n
\n
function handleSelectedRowsChanged(e, args) {\n
var selectedRows = _grid.getSelectedRows();\n
var lookup = {}, row, i;\n
for (i = 0; i < selectedRows.length; i++) {\n
row = selectedRows[i];\n
lookup[row] = true;\n
if (lookup[row] !== _selectedRowsLookup[row]) {\n
_grid.invalidateRow(row);\n
delete _selectedRowsLookup[row];\n
}\n
}\n
for (i in _selectedRowsLookup) {\n
_grid.invalidateRow(i);\n
}\n
_selectedRowsLookup = lookup;\n
_grid.render();\n
\n
if (selectedRows.length && selectedRows.length == _grid.getDataLength()) {\n
_grid.updateColumnHeader(_options.columnId, "<input type=\'checkbox\' checked=\'checked\'>", _options.toolTip);\n
} else {\n
_grid.updateColumnHeader(_options.columnId, "<input type=\'checkbox\'>", _options.toolTip);\n
}\n
}\n
\n
function handleKeyDown(e, args) {\n
if (e.which == 32) {\n
if (_grid.getColumns()[args.cell].id === _options.columnId) {\n
// if editing, try to commit\n
if (!_grid.getEditorLock().isActive() || _grid.getEditorLock().commitCurrentEdit()) {\n
toggleRowSelection(args.row);\n
}\n
e.preventDefault();\n
e.stopImmediatePropagation();\n
}\n
}\n
}\n
\n
function handleClick(e, args) {\n
// clicking on a row select checkbox\n
if (_grid.getColumns()[args.cell].id === _options.columnId && $(e.target).is(":checkbox")) {\n
// if editing, try to commit\n
if (_grid.getEditorLock().isActive() && !_grid.getEditorLock().commitCurrentEdit()) {\n
e.preventDefault();\n
e.stopImmediatePropagation();\n
return;\n
}\n
\n
toggleRowSelection(args.row);\n
e.stopPropagation();\n
e.stopImmediatePropagation();\n
}\n
}\n
\n
function toggleRowSelection(row) {\n
if (_selectedRowsLookup[row]) {\n
_grid.setSelectedRows($.grep(_grid.getSelectedRows(), function (n) {\n
return n != row\n
}));\n
} else {\n
_grid.setSelectedRows(_grid.getSelectedRows().concat(row));\n
}\n
}\n
\n
function handleHeaderClick(e, args) {\n
if (args.column.id == _options.columnId && $(e.target).is(":checkbox")) {\n
// if editing, try to commit\n
if (_grid.getEditorLock().isActive() && !_grid.getEditorLock().commitCurrentEdit()) {\n
e.preventDefault();\n
e.stopImmediatePropagation();\n
return;\n
}\n
\n
if ($(e.target).is(":checked")) {\n
var rows = [];\n
for (var i = 0; i < _grid.getDataLength(); i++) {\n
rows.push(i);\n
}\n
_grid.setSelectedRows(rows);\n
} else {\n
_grid.setSelectedRows([]);\n
}\n
e.stopPropagation();\n
e.stopImmediatePropagation();\n
}\n
}\n
\n
function getColumnDefinition() {\n
return {\n
id: _options.columnId,\n
name: "<input type=\'checkbox\'>",\n
toolTip: _options.toolTip,\n
field: "sel",\n
width: _options.width,\n
resizable: false,\n
sortable: false,\n
cssClass: _options.cssClass,\n
formatter: checkboxSelectionFormatter\n
};\n
}\n
\n
function checkboxSelectionFormatter(row, cell, value, columnDef, dataContext) {\n
if (dataContext) {\n
return _selectedRowsLookup[row]\n
? "<input type=\'checkbox\' checked=\'checked\'>"\n
: "<input type=\'checkbox\'>";\n
}\n
return null;\n
}\n
\n
$.extend(this, {\n
"init": init,\n
"destroy": destroy,\n
\n
"getColumnDefinition": getColumnDefinition\n
});\n
}\n
})(jQuery);
]]></string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>4456</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>slick.checkboxselectcolumn.js</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271191.3</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>slick.headerbuttons.css</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/css</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="cdata"><![CDATA[
.slick-column-name,\n
.slick-sort-indicator {\n
/**\n
* This makes all "float:right" elements after it that spill over to the next line\n
* display way below the lower boundary of the column thus hiding them.\n
*/\n
display: inline-block;\n
float: left;\n
margin-bottom: 100px;\n
}\n
\n
.slick-header-button {\n
display: inline-block;\n
float: right;\n
vertical-align: top;\n
margin: 1px;\n
/**\n
* This makes all "float:right" elements after it that spill over to the next line\n
* display way below the lower boundary of the column thus hiding them.\n
*/\n
margin-bottom: 100px;\n
height: 15px;\n
width: 15px;\n
background-repeat: no-repeat;\n
background-position: center center;\n
cursor: pointer;\n
}\n
\n
.slick-header-button-hidden {\n
width: 0;\n
\n
-webkit-transition: 0.2s width;\n
-ms-transition: 0.2s width;\n
transition: 0.2s width;\n
}\n
\n
.slick-header-column:hover > .slick-header-button {\n
width: 15px;\n
}
]]></string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>903</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>slick.headerbuttons.css</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271188.36</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>slick.headerbuttons.js</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>application/javascript</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="cdata"><![CDATA[
(function ($) {\n
// register namespace\n
$.extend(true, window, {\n
"Slick": {\n
"Plugins": {\n
"HeaderButtons": HeaderButtons\n
}\n
}\n
});\n
\n
\n
/***\n
* A plugin to add custom buttons to column headers.\n
*\n
* USAGE:\n
*\n
* Add the plugin .js & .css files and register it with the grid.\n
*\n
* To specify a custom button in a column header, extend the column definition like so:\n
*\n
* var columns = [\n
* {\n
* id: \'myColumn\',\n
* name: \'My column\',\n
*\n
* // This is the relevant part\n
* header: {\n
* buttons: [\n
* {\n
* // button options\n
* },\n
* {\n
* // button options\n
* }\n
* ]\n
* }\n
* }\n
* ];\n
*\n
* Available button options:\n
* cssClass: CSS class to add to the button.\n
* image: Relative button image path.\n
* tooltip: Button tooltip.\n
* showOnHover: Only show the button on hover.\n
* handler: Button click handler.\n
* command: A command identifier to be passed to the onCommand event handlers.\n
*\n
* The plugin exposes the following events:\n
* onCommand: Fired on button click for buttons with \'command\' specified.\n
* Event args:\n
* grid: Reference to the grid.\n
* column: Column definition.\n
* command: Button command identified.\n
* button: Button options. Note that you can change the button options in your\n
* event handler, and the column header will be automatically updated to\n
* reflect them. This is useful if you want to implement something like a\n
* toggle button.\n
*\n
*\n
* @param options {Object} Options:\n
* buttonCssClass: a CSS class to use for buttons (default \'slick-header-button\')\n
* @class Slick.Plugins.HeaderButtons\n
* @constructor\n
*/\n
function HeaderButtons(options) {\n
var _grid;\n
var _self = this;\n
var _handler = new Slick.EventHandler();\n
var _defaults = {\n
buttonCssClass: "slick-header-button"\n
};\n
\n
\n
function init(grid) {\n
options = $.extend(true, {}, _defaults, options);\n
_grid = grid;\n
_handler\n
.subscribe(_grid.onHeaderCellRendered, handleHeaderCellRendered)\n
.subscribe(_grid.onBeforeHeaderCellDestroy, handleBeforeHeaderCellDestroy);\n
\n
// Force the grid to re-render the header now that the events are hooked up.\n
_grid.setColumns(_grid.getColumns());\n
}\n
\n
\n
function destroy() {\n
_handler.unsubscribeAll();\n
}\n
\n
\n
function handleHeaderCellRendered(e, args) {\n
var column = args.column;\n
\n
if (column.header && column.header.buttons) {\n
// Append buttons in reverse order since they are floated to the right.\n
var i = column.header.buttons.length;\n
while (i--) {\n
var button = column.header.buttons[i];\n
var btn = $("<div></div>")\n
.addClass(options.buttonCssClass)\n
.data("column", column)\n
.data("button", button);\n
\n
if (button.showOnHover) {\n
btn.addClass("slick-header-button-hidden");\n
}\n
\n
if (button.image) {\n
btn.css("backgroundImage", "url(" + button.image + ")");\n
}\n
\n
if (button.cssClass) {\n
btn.addClass(button.cssClass);\n
}\n
\n
if (button.tooltip) {\n
btn.attr("title", button.tooltip);\n
}\n
\n
if (button.command) {\n
btn.data("command", button.command);\n
}\n
\n
if (button.handler) {\n
btn.bind("click", button.handler);\n
}\n
\n
btn\n
.bind("click", handleButtonClick)\n
.appendTo(args.node);\n
}\n
}\n
}\n
\n
\n
function handleBeforeHeaderCellDestroy(e, args) {\n
var column = args.column;\n
\n
if (column.header && column.header.buttons) {\n
// Removing buttons via jQuery will also clean up any event handlers and data.\n
// NOTE: If you attach event handlers directly or using a different framework,\n
// you must also clean them up here to avoid memory leaks.\n
$(args.node).find("." + options.buttonCssClass).remove();\n
}\n
}\n
\n
\n
function handleButtonClick(e) {\n
var command = $(this).data("command");\n
var columnDef = $(this).data("column");\n
var button = $(this).data("button");\n
\n
if (command != null) {\n
_self.onCommand.notify({\n
"grid": _grid,\n
"column": columnDef,\n
"command": command,\n
"button": button\n
}, e, _self);\n
\n
// Update the header in case the user updated the button definition in the handler.\n
_grid.updateColumnHeader(columnDef.id);\n
}\n
\n
// Stop propagation so that it doesn\'t register as a header click event.\n
e.preventDefault();\n
e.stopPropagation();\n
}\n
\n
$.extend(this, {\n
"init": init,\n
"destroy": destroy,\n
\n
"onCommand": new Slick.Event()\n
});\n
}\n
})(jQuery);
]]></string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>5126</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>slick.headerbuttons.js</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271190.86</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>slick.headermenu.css</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/css</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="cdata"><![CDATA[
/* Menu button */\n
.slick-header-menubutton {\n
position: absolute;\n
right: 0;\n
top: 0;\n
bottom: 0;\n
width: 14px;\n
background-repeat: no-repeat;\n
background-position: left center;\n
background-image: url(../images/down.gif);\n
cursor: pointer;\n
\n
display: none;\n
border-left: thin ridge silver;\n
}\n
\n
.slick-header-column:hover > .slick-header-menubutton,\n
.slick-header-column-active .slick-header-menubutton {\n
display: inline-block;\n
}\n
\n
/* Menu */\n
.slick-header-menu {\n
position: absolute;\n
display: inline-block;\n
margin: 0;\n
padding: 2px;\n
cursor: default;\n
}\n
\n
\n
/* Menu items */\n
.slick-header-menuitem {\n
list-style: none;\n
margin: 0;\n
padding: 0;\n
cursor: pointer;\n
}\n
\n
.slick-header-menuicon {\n
display: inline-block;\n
width: 16px;\n
height: 16px;\n
vertical-align: middle;\n
margin-right: 4px;\n
background-repeat: no-repeat;\n
background-position: center center;\n
}\n
\n
.slick-header-menucontent {\n
display: inline-block;\n
vertical-align: middle;\n
}\n
\n
\n
/* Disabled */\n
.slick-header-menuitem-disabled {\n
color: silver;\n
}\n
]]></string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>1036</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>slick.headermenu.css</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271193.24</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>slick.headermenu.js</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>application/javascript</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="cdata"><![CDATA[
(function ($) {\n
// register namespace\n
$.extend(true, window, {\n
"Slick": {\n
"Plugins": {\n
"HeaderMenu": HeaderMenu\n
}\n
}\n
});\n
\n
\n
/***\n
* A plugin to add drop-down menus to column headers.\n
*\n
* USAGE:\n
*\n
* Add the plugin .js & .css files and register it with the grid.\n
*\n
* To specify a menu in a column header, extend the column definition like so:\n
*\n
* var columns = [\n
* {\n
* id: \'myColumn\',\n
* name: \'My column\',\n
*\n
* // This is the relevant part\n
* header: {\n
* menu: {\n
* items: [\n
* {\n
* // menu item options\n
* },\n
* {\n
* // menu item options\n
* }\n
* ]\n
* }\n
* }\n
* }\n
* ];\n
*\n
*\n
* Available menu options:\n
* tooltip: Menu button tooltip.\n
*\n
*\n
* Available menu item options:\n
* title: Menu item text.\n
* disabled: Whether the item is disabled.\n
* tooltip: Item tooltip.\n
* command: A command identifier to be passed to the onCommand event handlers.\n
* iconCssClass: A CSS class to be added to the menu item icon.\n
* iconImage: A url to the icon image.\n
*\n
*\n
* The plugin exposes the following events:\n
* onBeforeMenuShow: Fired before the menu is shown. You can customize the menu or dismiss it by returning false.\n
* Event args:\n
* grid: Reference to the grid.\n
* column: Column definition.\n
* menu: Menu options. Note that you can change the menu items here.\n
*\n
* onCommand: Fired on menu item click for buttons with \'command\' specified.\n
* Event args:\n
* grid: Reference to the grid.\n
* column: Column definition.\n
* command: Button command identified.\n
* button: Button options. Note that you can change the button options in your\n
* event handler, and the column header will be automatically updated to\n
* reflect them. This is useful if you want to implement something like a\n
* toggle button.\n
*\n
*\n
* @param options {Object} Options:\n
* buttonCssClass: an extra CSS class to add to the menu button\n
* buttonImage: a url to the menu button image (default \'../images/down.gif\')\n
* @class Slick.Plugins.HeaderButtons\n
* @constructor\n
*/\n
function HeaderMenu(options) {\n
var _grid;\n
var _self = this;\n
var _handler = new Slick.EventHandler();\n
var _defaults = {\n
buttonCssClass: null,\n
buttonImage: null\n
};\n
var $menu;\n
var $activeHeaderColumn;\n
\n
\n
function init(grid) {\n
options = $.extend(true, {}, _defaults, options);\n
_grid = grid;\n
_handler\n
.subscribe(_grid.onHeaderCellRendered, handleHeaderCellRendered)\n
.subscribe(_grid.onBeforeHeaderCellDestroy, handleBeforeHeaderCellDestroy);\n
\n
// Force the grid to re-render the header now that the events are hooked up.\n
_grid.setColumns(_grid.getColumns());\n
\n
// Hide the menu on outside click.\n
$(document.body).bind("mousedown", handleBodyMouseDown);\n
}\n
\n
\n
function destroy() {\n
_handler.unsubscribeAll();\n
$(document.body).unbind("mousedown", handleBodyMouseDown);\n
}\n
\n
\n
function handleBodyMouseDown(e) {\n
if ($menu && $menu[0] != e.target && !$.contains($menu[0], e.target)) {\n
hideMenu();\n
}\n
}\n
\n
\n
function hideMenu() {\n
if ($menu) {\n
$menu.remove();\n
$menu = null;\n
$activeHeaderColumn\n
.removeClass("slick-header-column-active");\n
}\n
}\n
\n
function handleHeaderCellRendered(e, args) {\n
var column = args.column;\n
var menu = column.header && column.header.menu;\n
\n
if (menu) {\n
var $el = $("<div></div>")\n
.addClass("slick-header-menubutton")\n
.data("column", column)\n
.data("menu", menu);\n
\n
if (options.buttonCssClass) {\n
$el.addClass(options.buttonCssClass);\n
}\n
\n
if (options.buttonImage) {\n
$el.css("background-image", "url(" + options.buttonImage + ")");\n
}\n
\n
if (menu.tooltip) {\n
$el.attr("title", menu.tooltip);\n
}\n
\n
$el\n
.bind("click", showMenu)\n
.appendTo(args.node);\n
}\n
}\n
\n
\n
function handleBeforeHeaderCellDestroy(e, args) {\n
var column = args.column;\n
\n
if (column.header && column.header.menu) {\n
$(args.node).find(".slick-header-menubutton").remove();\n
}\n
}\n
\n
\n
function showMenu(e) {\n
var $menuButton = $(this);\n
var menu = $menuButton.data("menu");\n
var columnDef = $menuButton.data("column");\n
\n
// Let the user modify the menu or cancel altogether,\n
// or provide alternative menu implementation.\n
if (_self.onBeforeMenuShow.notify({\n
"grid": _grid,\n
"column": columnDef,\n
"menu": menu\n
}, e, _self) == false) {\n
return;\n
}\n
\n
\n
if (!$menu) {\n
$menu = $("<div class=\'slick-header-menu\'></div>")\n
.appendTo(_grid.getContainerNode());\n
}\n
$menu.empty();\n
\n
\n
// Construct the menu items.\n
for (var i = 0; i < menu.items.length; i++) {\n
var item = menu.items[i];\n
\n
var $li = $("<div class=\'slick-header-menuitem\'></div>")\n
.data("command", item.command || \'\')\n
.data("column", columnDef)\n
.data("item", item)\n
.bind("click", handleMenuItemClick)\n
.appendTo($menu);\n
\n
if (item.disabled) {\n
$li.addClass("slick-header-menuitem-disabled");\n
}\n
\n
if (item.tooltip) {\n
$li.attr("title", item.tooltip);\n
}\n
\n
var $icon = $("<div class=\'slick-header-menuicon\'></div>")\n
.appendTo($li);\n
\n
if (item.iconCssClass) {\n
$icon.addClass(item.iconCssClass);\n
}\n
\n
if (item.iconImage) {\n
$icon.css("background-image", "url(" + item.iconImage + ")");\n
}\n
\n
$("<span class=\'slick-header-menucontent\'></span>")\n
.text(item.title)\n
.appendTo($li);\n
}\n
\n
\n
// Position the menu.\n
$menu\n
.offset({ top: $(this).offset().top + $(this).height(), left: $(this).offset().left });\n
\n
\n
// Mark the header as active to keep the highlighting.\n
$activeHeaderColumn = $menuButton.closest(".slick-header-column");\n
$activeHeaderColumn\n
.addClass("slick-header-column-active");\n
\n
// Stop propagation so that it doesn\'t register as a header click event.\n
e.preventDefault();\n
e.stopPropagation();\n
}\n
\n
\n
function handleMenuItemClick(e) {\n
var command = $(this).data("command");\n
var columnDef = $(this).data("column");\n
var item = $(this).data("item");\n
\n
if (item.disabled) {\n
return;\n
}\n
\n
hideMenu();\n
\n
if (command != null && command != \'\') {\n
_self.onCommand.notify({\n
"grid": _grid,\n
"column": columnDef,\n
"command": command,\n
"item": item\n
}, e, _self);\n
}\n
\n
// Stop propagation so that it doesn\'t register as a header click event.\n
e.preventDefault();\n
e.stopPropagation();\n
}\n
\n
$.extend(this, {\n
"init": init,\n
"destroy": destroy,\n
\n
"onBeforeMenuShow": new Slick.Event(),\n
"onCommand": new Slick.Event()\n
});\n
}\n
})(jQuery);\n
]]></string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>7544</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>slick.headermenu.js</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271189.13</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>slick.rowmovemanager.js</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>application/javascript</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="cdata"><![CDATA[
(function ($) {\n
// register namespace\n
$.extend(true, window, {\n
"Slick": {\n
"RowMoveManager": RowMoveManager\n
}\n
});\n
\n
function RowMoveManager(options) {\n
var _grid;\n
var _canvas;\n
var _dragging;\n
var _self = this;\n
var _handler = new Slick.EventHandler();\n
var _defaults = {\n
cancelEditOnDrag: false\n
};\n
\n
function init(grid) {\n
options = $.extend(true, {}, _defaults, options);\n
_grid = grid;\n
_canvas = _grid.getCanvasNode();\n
_handler\n
.subscribe(_grid.onDragInit, handleDragInit)\n
.subscribe(_grid.onDragStart, handleDragStart)\n
.subscribe(_grid.onDrag, handleDrag)\n
.subscribe(_grid.onDragEnd, handleDragEnd);\n
}\n
\n
function destroy() {\n
_handler.unsubscribeAll();\n
}\n
\n
function handleDragInit(e, dd) {\n
// prevent the grid from cancelling drag\'n\'drop by default\n
e.stopImmediatePropagation();\n
}\n
\n
function handleDragStart(e, dd) {\n
var cell = _grid.getCellFromEvent(e);\n
\n
if (options.cancelEditOnDrag && _grid.getEditorLock().isActive()) {\n
_grid.getEditorLock().cancelCurrentEdit();\n
}\n
\n
if (_grid.getEditorLock().isActive() || !/move|selectAndMove/.test(_grid.getColumns()[cell.cell].behavior)) {\n
return false;\n
}\n
\n
_dragging = true;\n
e.stopImmediatePropagation();\n
\n
var selectedRows = _grid.getSelectedRows();\n
\n
if (selectedRows.length == 0 || $.inArray(cell.row, selectedRows) == -1) {\n
selectedRows = [cell.row];\n
_grid.setSelectedRows(selectedRows);\n
}\n
\n
var rowHeight = _grid.getOptions().rowHeight;\n
\n
dd.selectedRows = selectedRows;\n
\n
dd.selectionProxy = $("<div class=\'slick-reorder-proxy\'/>")\n
.css("position", "absolute")\n
.css("zIndex", "99999")\n
.css("width", $(_canvas).innerWidth())\n
.css("height", rowHeight * selectedRows.length)\n
.appendTo(_canvas);\n
\n
dd.guide = $("<div class=\'slick-reorder-guide\'/>")\n
.css("position", "absolute")\n
.css("zIndex", "99998")\n
.css("width", $(_canvas).innerWidth())\n
.css("top", -1000)\n
.appendTo(_canvas);\n
\n
dd.insertBefore = -1;\n
}\n
\n
function handleDrag(e, dd) {\n
if (!_dragging) {\n
return;\n
}\n
\n
e.stopImmediatePropagation();\n
\n
var top = e.pageY - $(_canvas).offset().top;\n
dd.selectionProxy.css("top", top - 5);\n
\n
var insertBefore = Math.max(0, Math.min(Math.round(top / _grid.getOptions().rowHeight), _grid.getDataLength()));\n
if (insertBefore !== dd.insertBefore) {\n
var eventData = {\n
"rows": dd.selectedRows,\n
"insertBefore": insertBefore\n
};\n
\n
if (_self.onBeforeMoveRows.notify(eventData) === false) {\n
dd.guide.css("top", -1000);\n
dd.canMove = false;\n
} else {\n
dd.guide.css("top", insertBefore * _grid.getOptions().rowHeight);\n
dd.canMove = true;\n
}\n
\n
dd.insertBefore = insertBefore;\n
}\n
}\n
\n
function handleDragEnd(e, dd) {\n
if (!_dragging) {\n
return;\n
}\n
_dragging = false;\n
e.stopImmediatePropagation();\n
\n
dd.guide.remove();\n
dd.selectionProxy.remove();\n
\n
if (dd.canMove) {\n
var eventData = {\n
"rows": dd.selectedRows,\n
"insertBefore": dd.insertBefore\n
};\n
// TODO: _grid.remapCellCssClasses ?\n
_self.onMoveRows.notify(eventData);\n
}\n
}\n
\n
$.extend(this, {\n
"onBeforeMoveRows": new Slick.Event(),\n
"onMoveRows": new Slick.Event(),\n
\n
"init": init,\n
"destroy": destroy\n
});\n
}\n
})(jQuery);
]]></string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>3654</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>slick.rowmovemanager.js</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271186.58</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>slick.rowselectionmodel.js</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>application/javascript</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="cdata"><![CDATA[
(function ($) {\n
// register namespace\n
$.extend(true, window, {\n
"Slick": {\n
"RowSelectionModel": RowSelectionModel\n
}\n
});\n
\n
function RowSelectionModel(options) {\n
var _grid;\n
var _ranges = [];\n
var _self = this;\n
var _handler = new Slick.EventHandler();\n
var _inHandler;\n
var _options;\n
var _defaults = {\n
selectActiveRow: true\n
};\n
\n
function init(grid) {\n
_options = $.extend(true, {}, _defaults, options);\n
_grid = grid;\n
_handler.subscribe(_grid.onActiveCellChanged,\n
wrapHandler(handleActiveCellChange));\n
_handler.subscribe(_grid.onKeyDown,\n
wrapHandler(handleKeyDown));\n
_handler.subscribe(_grid.onClick,\n
wrapHandler(handleClick));\n
}\n
\n
function destroy() {\n
_handler.unsubscribeAll();\n
}\n
\n
function wrapHandler(handler) {\n
return function () {\n
if (!_inHandler) {\n
_inHandler = true;\n
handler.apply(this, arguments);\n
_inHandler = false;\n
}\n
};\n
}\n
\n
function rangesToRows(ranges) {\n
var rows = [];\n
for (var i = 0; i < ranges.length; i++) {\n
for (var j = ranges[i].fromRow; j <= ranges[i].toRow; j++) {\n
rows.push(j);\n
}\n
}\n
return rows;\n
}\n
\n
function rowsToRanges(rows) {\n
var ranges = [];\n
var lastCell = _grid.getColumns().length - 1;\n
for (var i = 0; i < rows.length; i++) {\n
ranges.push(new Slick.Range(rows[i], 0, rows[i], lastCell));\n
}\n
return ranges;\n
}\n
\n
function getRowsRange(from, to) {\n
var i, rows = [];\n
for (i = from; i <= to; i++) {\n
rows.push(i);\n
}\n
for (i = to; i < from; i++) {\n
rows.push(i);\n
}\n
return rows;\n
}\n
\n
function getSelectedRows() {\n
return rangesToRows(_ranges);\n
}\n
\n
function setSelectedRows(rows) {\n
setSelectedRanges(rowsToRanges(rows));\n
}\n
\n
function setSelectedRanges(ranges) {\n
_ranges = ranges;\n
_self.onSelectedRangesChanged.notify(_ranges);\n
}\n
\n
function getSelectedRanges() {\n
return _ranges;\n
}\n
\n
function handleActiveCellChange(e, data) {\n
if (_options.selectActiveRow && data.row != null) {\n
setSelectedRanges([new Slick.Range(data.row, 0, data.row, _grid.getColumns().length - 1)]);\n
}\n
}\n
\n
function handleKeyDown(e) {\n
var activeRow = _grid.getActiveCell();\n
if (activeRow && e.shiftKey && !e.ctrlKey && !e.altKey && !e.metaKey && (e.which == 38 || e.which == 40)) {\n
var selectedRows = getSelectedRows();\n
selectedRows.sort(function (x, y) {\n
return x - y\n
});\n
\n
if (!selectedRows.length) {\n
selectedRows = [activeRow.row];\n
}\n
\n
var top = selectedRows[0];\n
var bottom = selectedRows[selectedRows.length - 1];\n
var active;\n
\n
if (e.which == 40) {\n
active = activeRow.row < bottom || top == bottom ? ++bottom : ++top;\n
} else {\n
active = activeRow.row < bottom ? --bottom : --top;\n
}\n
\n
if (active >= 0 && active < _grid.getDataLength()) {\n
_grid.scrollRowIntoView(active);\n
_ranges = rowsToRanges(getRowsRange(top, bottom));\n
setSelectedRanges(_ranges);\n
}\n
\n
e.preventDefault();\n
e.stopPropagation();\n
}\n
}\n
\n
function handleClick(e) {\n
var cell = _grid.getCellFromEvent(e);\n
if (!cell || !_grid.canCellBeActive(cell.row, cell.cell)) {\n
return false;\n
}\n
\n
if (!_grid.getOptions().multiSelect || (\n
!e.ctrlKey && !e.shiftKey && !e.metaKey)) {\n
return false;\n
}\n
\n
var selection = rangesToRows(_ranges);\n
var idx = $.inArray(cell.row, selection);\n
\n
if (idx === -1 && (e.ctrlKey || e.metaKey)) {\n
selection.push(cell.row);\n
_grid.setActiveCell(cell.row, cell.cell);\n
} else if (idx !== -1 && (e.ctrlKey || e.metaKey)) {\n
selection = $.grep(selection, function (o, i) {\n
return (o !== cell.row);\n
});\n
_grid.setActiveCell(cell.row, cell.cell);\n
} else if (selection.length && e.shiftKey) {\n
var last = selection.pop();\n
var from = Math.min(cell.row, last);\n
var to = Math.max(cell.row, last);\n
selection = [];\n
for (var i = from; i <= to; i++) {\n
if (i !== last) {\n
selection.push(i);\n
}\n
}\n
selection.push(last);\n
_grid.setActiveCell(cell.row, cell.cell);\n
}\n
\n
_ranges = rowsToRanges(selection);\n
setSelectedRanges(_ranges);\n
e.stopImmediatePropagation();\n
\n
return true;\n
}\n
\n
$.extend(this, {\n
"getSelectedRows": getSelectedRows,\n
"setSelectedRows": setSelectedRows,\n
\n
"getSelectedRanges": getSelectedRanges,\n
"setSelectedRanges": setSelectedRanges,\n
\n
"init": init,\n
"destroy": destroy,\n
\n
"onSelectedRangesChanged": new Slick.Event()\n
});\n
}\n
})(jQuery);
]]></string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>4948</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>slick.rowselectionmodel.js</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271193.63</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>slick-default-theme.css</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/css</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string>/*\n
IMPORTANT:\n
In order to preserve the uniform grid appearance, all cell styles need to have padding, margin and border sizes.\n
No built-in (selected, editable, highlight, flashing, invalid, loading, :focus) or user-specified CSS\n
classes should alter those!\n
*/\n
\n
.slick-header-columns {\n
background: url(\'images/header-columns-bg.gif\') repeat-x center bottom;\n
border-bottom: 1px solid silver;\n
}\n
\n
.slick-header-column {\n
background: url(\'images/header-columns-bg.gif\') repeat-x center bottom;\n
border-right: 1px solid silver;\n
}\n
\n
.slick-header-column:hover, .slick-header-column-active {\n
background: white url(\'images/header-columns-over-bg.gif\') repeat-x center bottom;\n
}\n
\n
.slick-headerrow {\n
background: #fafafa;\n
}\n
\n
.slick-headerrow-column {\n
background: #fafafa;\n
border-bottom: 0;\n
height: 100%;\n
}\n
\n
.slick-row.ui-state-active {\n
background: #F5F7D7;\n
}\n
\n
.slick-row {\n
position: absolute;\n
background: white;\n
border: 0px;\n
line-height: 20px;\n
}\n
\n
.slick-row.selected {\n
z-index: 10;\n
background: #DFE8F6;\n
}\n
\n
.slick-cell {\n
padding-left: 4px;\n
padding-right: 4px;\n
}\n
\n
.slick-group {\n
border-bottom: 2px solid silver;\n
}\n
\n
.slick-group-toggle {\n
width: 9px;\n
height: 9px;\n
margin-right: 5px;\n
}\n
\n
.slick-group-toggle.expanded {\n
background: url(images/collapse.gif) no-repeat center center;\n
}\n
\n
.slick-group-toggle.collapsed {\n
background: url(images/expand.gif) no-repeat center center;\n
}\n
\n
.slick-group-totals {\n
color: gray;\n
background: white;\n
}\n
\n
.slick-cell.selected {\n
background-color: beige;\n
}\n
\n
.slick-cell.active {\n
border-color: gray;\n
border-style: solid;\n
}\n
\n
.slick-sortable-placeholder {\n
background: silver !important;\n
}\n
\n
.slick-row.odd {\n
background: #fafafa;\n
}\n
\n
.slick-row.ui-state-active {\n
background: #F5F7D7;\n
}\n
\n
.slick-row.loading {\n
opacity: 0.5;\n
filter: alpha(opacity = 50);\n
}\n
\n
.slick-cell.invalid {\n
border-color: red;\n
-moz-animation-duration: 0.2s;\n
-webkit-animation-duration: 0.2s;\n
-moz-animation-name: slickgrid-invalid-hilite;\n
-webkit-animation-name: slickgrid-invalid-hilite; \n
}\n
\n
@-moz-keyframes slickgrid-invalid-hilite {\n
from { box-shadow: 0 0 6px red; }\n
to { box-shadow: none; }\n
}\n
\n
@-webkit-keyframes slickgrid-invalid-hilite {\n
from { box-shadow: 0 0 6px red; }\n
to { box-shadow: none; }\n
}</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>2261</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>slick-default-theme.css</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271199.04</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>slick.core.js</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>application/javascript</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="cdata"><![CDATA[
/***\n
* Contains core SlickGrid classes.\n
* @module Core\n
* @namespace Slick\n
*/\n
\n
(function ($) {\n
// register namespace\n
$.extend(true, window, {\n
"Slick": {\n
"Event": Event,\n
"EventData": EventData,\n
"EventHandler": EventHandler,\n
"Range": Range,\n
"NonDataRow": NonDataItem,\n
"Group": Group,\n
"GroupTotals": GroupTotals,\n
"EditorLock": EditorLock,\n
\n
/***\n
* A global singleton editor lock.\n
* @class GlobalEditorLock\n
* @static\n
* @constructor\n
*/\n
"GlobalEditorLock": new EditorLock()\n
}\n
});\n
\n
/***\n
* An event object for passing data to event handlers and letting them control propagation.\n
* <p>This is pretty much identical to how W3C and jQuery implement events.</p>\n
* @class EventData\n
* @constructor\n
*/\n
function EventData() {\n
var isPropagationStopped = false;\n
var isImmediatePropagationStopped = false;\n
\n
/***\n
* Stops event from propagating up the DOM tree.\n
* @method stopPropagation\n
*/\n
this.stopPropagation = function () {\n
isPropagationStopped = true;\n
};\n
\n
/***\n
* Returns whether stopPropagation was called on this event object.\n
* @method isPropagationStopped\n
* @return {Boolean}\n
*/\n
this.isPropagationStopped = function () {\n
return isPropagationStopped;\n
};\n
\n
/***\n
* Prevents the rest of the handlers from being executed.\n
* @method stopImmediatePropagation\n
*/\n
this.stopImmediatePropagation = function () {\n
isImmediatePropagationStopped = true;\n
};\n
\n
/***\n
* Returns whether stopImmediatePropagation was called on this event object.\\\n
* @method isImmediatePropagationStopped\n
* @return {Boolean}\n
*/\n
this.isImmediatePropagationStopped = function () {\n
return isImmediatePropagationStopped;\n
}\n
}\n
\n
/***\n
* A simple publisher-subscriber implementation.\n
* @class Event\n
* @constructor\n
*/\n
function Event() {\n
var handlers = [];\n
\n
/***\n
* Adds an event handler to be called when the event is fired.\n
* <p>Event handler will receive two arguments - an <code>EventData</code> and the <code>data</code>\n
* object the event was fired with.<p>\n
* @method subscribe\n
* @param fn {Function} Event handler.\n
*/\n
this.subscribe = function (fn) {\n
handlers.push(fn);\n
};\n
\n
/***\n
* Removes an event handler added with <code>subscribe(fn)</code>.\n
* @method unsubscribe\n
* @param fn {Function} Event handler to be removed.\n
*/\n
this.unsubscribe = function (fn) {\n
for (var i = handlers.length - 1; i >= 0; i--) {\n
if (handlers[i] === fn) {\n
handlers.splice(i, 1);\n
}\n
}\n
};\n
\n
/***\n
* Fires an event notifying all subscribers.\n
* @method notify\n
* @param args {Object} Additional data object to be passed to all handlers.\n
* @param e {EventData}\n
* Optional.\n
* An <code>EventData</code> object to be passed to all handlers.\n
* For DOM events, an existing W3C/jQuery event object can be passed in.\n
* @param scope {Object}\n
* Optional.\n
* The scope ("this") within which the handler will be executed.\n
* If not specified, the scope will be set to the <code>Event</code> instance.\n
*/\n
this.notify = function (args, e, scope) {\n
e = e || new EventData();\n
scope = scope || this;\n
\n
var returnValue;\n
for (var i = 0; i < handlers.length && !(e.isPropagationStopped() || e.isImmediatePropagationStopped()); i++) {\n
returnValue = handlers[i].call(scope, e, args);\n
}\n
\n
return returnValue;\n
};\n
}\n
\n
function EventHandler() {\n
var handlers = [];\n
\n
this.subscribe = function (event, handler) {\n
handlers.push({\n
event: event,\n
handler: handler\n
});\n
event.subscribe(handler);\n
\n
return this; // allow chaining\n
};\n
\n
this.unsubscribe = function (event, handler) {\n
var i = handlers.length;\n
while (i--) {\n
if (handlers[i].event === event &&\n
handlers[i].handler === handler) {\n
handlers.splice(i, 1);\n
event.unsubscribe(handler);\n
return;\n
}\n
}\n
\n
return this; // allow chaining\n
};\n
\n
this.unsubscribeAll = function () {\n
var i = handlers.length;\n
while (i--) {\n
handlers[i].event.unsubscribe(handlers[i].handler);\n
}\n
handlers = [];\n
\n
return this; // allow chaining\n
}\n
}\n
\n
/***\n
* A structure containing a range of cells.\n
* @class Range\n
* @constructor\n
* @param fromRow {Integer} Starting row.\n
* @param fromCell {Integer} Starting cell.\n
* @param toRow {Integer} Optional. Ending row. Defaults to <code>fromRow</code>.\n
* @param toCell {Integer} Optional. Ending cell. Defaults to <code>fromCell</code>.\n
*/\n
function Range(fromRow, fromCell, toRow, toCell) {\n
if (toRow === undefined && toCell === undefined) {\n
toRow = fromRow;\n
toCell = fromCell;\n
}\n
\n
/***\n
* @property fromRow\n
* @type {Integer}\n
*/\n
this.fromRow = Math.min(fromRow, toRow);\n
\n
/***\n
* @property fromCell\n
* @type {Integer}\n
*/\n
this.fromCell = Math.min(fromCell, toCell);\n
\n
/***\n
* @property toRow\n
* @type {Integer}\n
*/\n
this.toRow = Math.max(fromRow, toRow);\n
\n
/***\n
* @property toCell\n
* @type {Integer}\n
*/\n
this.toCell = Math.max(fromCell, toCell);\n
\n
/***\n
* Returns whether a range represents a single row.\n
* @method isSingleRow\n
* @return {Boolean}\n
*/\n
this.isSingleRow = function () {\n
return this.fromRow == this.toRow;\n
};\n
\n
/***\n
* Returns whether a range represents a single cell.\n
* @method isSingleCell\n
* @return {Boolean}\n
*/\n
this.isSingleCell = function () {\n
return this.fromRow == this.toRow && this.fromCell == this.toCell;\n
};\n
\n
/***\n
* Returns whether a range contains a given cell.\n
* @method contains\n
* @param row {Integer}\n
* @param cell {Integer}\n
* @return {Boolean}\n
*/\n
this.contains = function (row, cell) {\n
return row >= this.fromRow && row <= this.toRow &&\n
cell >= this.fromCell && cell <= this.toCell;\n
};\n
\n
/***\n
* Returns a readable representation of a range.\n
* @method toString\n
* @return {String}\n
*/\n
this.toString = function () {\n
if (this.isSingleCell()) {\n
return "(" + this.fromRow + ":" + this.fromCell + ")";\n
}\n
else {\n
return "(" + this.fromRow + ":" + this.fromCell + " - " + this.toRow + ":" + this.toCell + ")";\n
}\n
}\n
}\n
\n
\n
/***\n
* A base class that all special / non-data rows (like Group and GroupTotals) derive from.\n
* @class NonDataItem\n
* @constructor\n
*/\n
function NonDataItem() {\n
this.__nonDataRow = true;\n
}\n
\n
\n
/***\n
* Information about a group of rows.\n
* @class Group\n
* @extends Slick.NonDataItem\n
* @constructor\n
*/\n
function Group() {\n
this.__group = true;\n
\n
/**\n
* Grouping level, starting with 0.\n
* @property level\n
* @type {Number}\n
*/\n
this.level = 0;\n
\n
/***\n
* Number of rows in the group.\n
* @property count\n
* @type {Integer}\n
*/\n
this.count = 0;\n
\n
/***\n
* Grouping value.\n
* @property value\n
* @type {Object}\n
*/\n
this.value = null;\n
\n
/***\n
* Formatted display value of the group.\n
* @property title\n
* @type {String}\n
*/\n
this.title = null;\n
\n
/***\n
* Whether a group is collapsed.\n
* @property collapsed\n
* @type {Boolean}\n
*/\n
this.collapsed = false;\n
\n
/***\n
* GroupTotals, if any.\n
* @property totals\n
* @type {GroupTotals}\n
*/\n
this.totals = null;\n
\n
/**\n
* Rows that are part of the group.\n
* @property rows\n
* @type {Array}\n
*/\n
this.rows = [];\n
\n
/**\n
* Sub-groups that are part of the group.\n
* @property groups\n
* @type {Array}\n
*/\n
this.groups = null;\n
\n
/**\n
* A unique key used to identify the group. This key can be used in calls to DataView\n
* collapseGroup() or expandGroup().\n
* @property groupingKey\n
* @type {Object}\n
*/\n
this.groupingKey = null;\n
}\n
\n
Group.prototype = new NonDataItem();\n
\n
/***\n
* Compares two Group instances.\n
* @method equals\n
* @return {Boolean}\n
* @param group {Group} Group instance to compare to.\n
*/\n
Group.prototype.equals = function (group) {\n
return this.value === group.value &&\n
this.count === group.count &&\n
this.collapsed === group.collapsed &&\n
this.title === group.title;\n
};\n
\n
/***\n
* Information about group totals.\n
* An instance of GroupTotals will be created for each totals row and passed to the aggregators\n
* so that they can store arbitrary data in it. That data can later be accessed by group totals\n
* formatters during the display.\n
* @class GroupTotals\n
* @extends Slick.NonDataItem\n
* @constructor\n
*/\n
function GroupTotals() {\n
this.__groupTotals = true;\n
\n
/***\n
* Parent Group.\n
* @param group\n
* @type {Group}\n
*/\n
this.group = null;\n
\n
/***\n
* Whether the totals have been fully initialized / calculated.\n
* Will be set to false for lazy-calculated group totals.\n
* @param initialized\n
* @type {Boolean}\n
*/\n
this.initialized = false;\n
}\n
\n
GroupTotals.prototype = new NonDataItem();\n
\n
/***\n
* A locking helper to track the active edit controller and ensure that only a single controller\n
* can be active at a time. This prevents a whole class of state and validation synchronization\n
* issues. An edit controller (such as SlickGrid) can query if an active edit is in progress\n
* and attempt a commit or cancel before proceeding.\n
* @class EditorLock\n
* @constructor\n
*/\n
function EditorLock() {\n
var activeEditController = null;\n
\n
/***\n
* Returns true if a specified edit controller is active (has the edit lock).\n
* If the parameter is not specified, returns true if any edit controller is active.\n
* @method isActive\n
* @param editController {EditController}\n
* @return {Boolean}\n
*/\n
this.isActive = function (editController) {\n
return (editController ? activeEditController === editController : activeEditController !== null);\n
};\n
\n
/***\n
* Sets the specified edit controller as the active edit controller (acquire edit lock).\n
* If another edit controller is already active, and exception will be thrown.\n
* @method activate\n
* @param editController {EditController} edit controller acquiring the lock\n
*/\n
this.activate = function (editController) {\n
if (editController === activeEditController) { // already activated?\n
return;\n
}\n
if (activeEditController !== null) {\n
throw "SlickGrid.EditorLock.activate: an editController is still active, can\'t activate another editController";\n
}\n
if (!editController.commitCurrentEdit) {\n
throw "SlickGrid.EditorLock.activate: editController must implement .commitCurrentEdit()";\n
}\n
if (!editController.cancelCurrentEdit) {\n
throw "SlickGrid.EditorLock.activate: editController must implement .cancelCurrentEdit()";\n
}\n
activeEditController = editController;\n
};\n
\n
/***\n
* Unsets the specified edit controller as the active edit controller (release edit lock).\n
* If the specified edit controller is not the active one, an exception will be thrown.\n
* @method deactivate\n
* @param editController {EditController} edit controller releasing the lock\n
*/\n
this.deactivate = function (editController) {\n
if (activeEditController !== editController) {\n
throw "SlickGrid.EditorLock.deactivate: specified editController is not the currently active one";\n
}\n
activeEditController = null;\n
};\n
\n
/***\n
* Attempts to commit the current edit by calling "commitCurrentEdit" method on the active edit\n
* controller and returns whether the commit attempt was successful (commit may fail due to validation\n
* errors, etc.). Edit controller\'s "commitCurrentEdit" must return true if the commit has succeeded\n
* and false otherwise. If no edit controller is active, returns true.\n
* @method commitCurrentEdit\n
* @return {Boolean}\n
*/\n
this.commitCurrentEdit = function () {\n
return (activeEditController ? activeEditController.commitCurrentEdit() : true);\n
};\n
\n
/***\n
* Attempts to cancel the current edit by calling "cancelCurrentEdit" method on the active edit\n
* controller and returns whether the edit was successfully cancelled. If no edit controller is\n
* active, returns true.\n
* @method cancelCurrentEdit\n
* @return {Boolean}\n
*/\n
this.cancelCurrentEdit = function cancelCurrentEdit() {\n
return (activeEditController ? activeEditController.cancelCurrentEdit() : true);\n
};\n
}\n
})(jQuery);\n
\n
\n
]]></string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>12990</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>slick.core.js</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271198.38</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>slick.dataview.js</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>application/javascript</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="cdata"><![CDATA[
(function ($) {\n
$.extend(true, window, {\n
Slick: {\n
Data: {\n
DataView: DataView,\n
Aggregators: {\n
Avg: AvgAggregator,\n
Min: MinAggregator,\n
Max: MaxAggregator,\n
Sum: SumAggregator\n
}\n
}\n
}\n
});\n
\n
\n
/***\n
* A sample Model implementation.\n
* Provides a filtered view of the underlying data.\n
*\n
* Relies on the data item having an "id" property uniquely identifying it.\n
*/\n
function DataView(options) {\n
var self = this;\n
\n
var defaults = {\n
groupItemMetadataProvider: null,\n
inlineFilters: false\n
};\n
\n
\n
// private\n
var idProperty = "id"; // property holding a unique row id\n
var items = []; // data by index\n
var rows = []; // data by row\n
var idxById = {}; // indexes by id\n
var rowsById = null; // rows by id; lazy-calculated\n
var filter = null; // filter function\n
var updated = null; // updated item ids\n
var suspend = false; // suspends the recalculation\n
var sortAsc = true;\n
var fastSortField;\n
var sortComparer;\n
var refreshHints = {};\n
var prevRefreshHints = {};\n
var filterArgs;\n
var filteredItems = [];\n
var compiledFilter;\n
var compiledFilterWithCaching;\n
var filterCache = [];\n
\n
// grouping\n
var groupingInfoDefaults = {\n
getter: null,\n
formatter: null,\n
comparer: function(a, b) { return a.value - b.value; },\n
predefinedValues: [],\n
aggregators: [],\n
aggregateEmpty: false,\n
aggregateCollapsed: false,\n
aggregateChildGroups: false,\n
collapsed: false,\n
displayTotalsRow: true,\n
lazyTotalsCalculation: false\n
};\n
var groupingInfos = [];\n
var groups = [];\n
var toggledGroupsByLevel = [];\n
var groupingDelimiter = \':|:\';\n
\n
var pagesize = 0;\n
var pagenum = 0;\n
var totalRows = 0;\n
\n
// events\n
var onRowCountChanged = new Slick.Event();\n
var onRowsChanged = new Slick.Event();\n
var onPagingInfoChanged = new Slick.Event();\n
\n
options = $.extend(true, {}, defaults, options);\n
\n
\n
function beginUpdate() {\n
suspend = true;\n
}\n
\n
function endUpdate() {\n
suspend = false;\n
refresh();\n
}\n
\n
function setRefreshHints(hints) {\n
refreshHints = hints;\n
}\n
\n
function setFilterArgs(args) {\n
filterArgs = args;\n
}\n
\n
function updateIdxById(startingIndex) {\n
startingIndex = startingIndex || 0;\n
var id;\n
for (var i = startingIndex, l = items.length; i < l; i++) {\n
id = items[i][idProperty];\n
if (id === undefined) {\n
throw "Each data element must implement a unique \'id\' property";\n
}\n
idxById[id] = i;\n
}\n
}\n
\n
function ensureIdUniqueness() {\n
var id;\n
for (var i = 0, l = items.length; i < l; i++) {\n
id = items[i][idProperty];\n
if (id === undefined || idxById[id] !== i) {\n
throw "Each data element must implement a unique \'id\' property";\n
}\n
}\n
}\n
\n
function getItems() {\n
return items;\n
}\n
\n
function setItems(data, objectIdProperty) {\n
if (objectIdProperty !== undefined) {\n
idProperty = objectIdProperty;\n
}\n
items = filteredItems = data;\n
idxById = {};\n
updateIdxById();\n
ensureIdUniqueness();\n
refresh();\n
}\n
\n
function setPagingOptions(args) {\n
if (args.pageSize != undefined) {\n
pagesize = args.pageSize;\n
pagenum = pagesize ? Math.min(pagenum, Math.max(0, Math.ceil(totalRows / pagesize) - 1)) : 0;\n
}\n
\n
if (args.pageNum != undefined) {\n
pagenum = Math.min(args.pageNum, Math.max(0, Math.ceil(totalRows / pagesize) - 1));\n
}\n
\n
onPagingInfoChanged.notify(getPagingInfo(), null, self);\n
\n
refresh();\n
}\n
\n
function getPagingInfo() {\n
var totalPages = pagesize ? Math.max(1, Math.ceil(totalRows / pagesize)) : 1;\n
return {pageSize: pagesize, pageNum: pagenum, totalRows: totalRows, totalPages: totalPages};\n
}\n
\n
function sort(comparer, ascending) {\n
sortAsc = ascending;\n
sortComparer = comparer;\n
fastSortField = null;\n
if (ascending === false) {\n
items.reverse();\n
}\n
items.sort(comparer);\n
if (ascending === false) {\n
items.reverse();\n
}\n
idxById = {};\n
updateIdxById();\n
refresh();\n
}\n
\n
/***\n
* Provides a workaround for the extremely slow sorting in IE.\n
* Does a [lexicographic] sort on a give column by temporarily overriding Object.prototype.toString\n
* to return the value of that field and then doing a native Array.sort().\n
*/\n
function fastSort(field, ascending) {\n
sortAsc = ascending;\n
fastSortField = field;\n
sortComparer = null;\n
var oldToString = Object.prototype.toString;\n
Object.prototype.toString = (typeof field == "function") ? field : function () {\n
return this[field]\n
};\n
// an extra reversal for descending sort keeps the sort stable\n
// (assuming a stable native sort implementation, which isn\'t true in some cases)\n
if (ascending === false) {\n
items.reverse();\n
}\n
items.sort();\n
Object.prototype.toString = oldToString;\n
if (ascending === false) {\n
items.reverse();\n
}\n
idxById = {};\n
updateIdxById();\n
refresh();\n
}\n
\n
function reSort() {\n
if (sortComparer) {\n
sort(sortComparer, sortAsc);\n
} else if (fastSortField) {\n
fastSort(fastSortField, sortAsc);\n
}\n
}\n
\n
function setFilter(filterFn) {\n
filter = filterFn;\n
if (options.inlineFilters) {\n
compiledFilter = compileFilter();\n
compiledFilterWithCaching = compileFilterWithCaching();\n
}\n
refresh();\n
}\n
\n
function getGrouping() {\n
return groupingInfos;\n
}\n
\n
function setGrouping(groupingInfo) {\n
if (!options.groupItemMetadataProvider) {\n
options.groupItemMetadataProvider = new Slick.Data.GroupItemMetadataProvider();\n
}\n
\n
groups = [];\n
toggledGroupsByLevel = [];\n
groupingInfo = groupingInfo || [];\n
groupingInfos = (groupingInfo instanceof Array) ? groupingInfo : [groupingInfo];\n
\n
for (var i = 0; i < groupingInfos.length; i++) {\n
var gi = groupingInfos[i] = $.extend(true, {}, groupingInfoDefaults, groupingInfos[i]);\n
gi.getterIsAFn = typeof gi.getter === "function";\n
\n
// pre-compile accumulator loops\n
gi.compiledAccumulators = [];\n
var idx = gi.aggregators.length;\n
while (idx--) {\n
gi.compiledAccumulators[idx] = compileAccumulatorLoop(gi.aggregators[idx]);\n
}\n
\n
toggledGroupsByLevel[i] = {};\n
}\n
\n
refresh();\n
}\n
\n
/**\n
* @deprecated Please use {@link setGrouping}.\n
*/\n
function groupBy(valueGetter, valueFormatter, sortComparer) {\n
if (valueGetter == null) {\n
setGrouping([]);\n
return;\n
}\n
\n
setGrouping({\n
getter: valueGetter,\n
formatter: valueFormatter,\n
comparer: sortComparer\n
});\n
}\n
\n
/**\n
* @deprecated Please use {@link setGrouping}.\n
*/\n
function setAggregators(groupAggregators, includeCollapsed) {\n
if (!groupingInfos.length) {\n
throw new Error("At least one grouping must be specified before calling setAggregators().");\n
}\n
\n
groupingInfos[0].aggregators = groupAggregators;\n
groupingInfos[0].aggregateCollapsed = includeCollapsed;\n
\n
setGrouping(groupingInfos);\n
}\n
\n
function getItemByIdx(i) {\n
return items[i];\n
}\n
\n
function getIdxById(id) {\n
return idxById[id];\n
}\n
\n
function ensureRowsByIdCache() {\n
if (!rowsById) {\n
rowsById = {};\n
for (var i = 0, l = rows.length; i < l; i++) {\n
rowsById[rows[i][idProperty]] = i;\n
}\n
}\n
}\n
\n
function getRowById(id) {\n
ensureRowsByIdCache();\n
return rowsById[id];\n
}\n
\n
function getItemById(id) {\n
return items[idxById[id]];\n
}\n
\n
function mapIdsToRows(idArray) {\n
var rows = [];\n
ensureRowsByIdCache();\n
for (var i = 0, l = idArray.length; i < l; i++) {\n
var row = rowsById[idArray[i]];\n
if (row != null) {\n
rows[rows.length] = row;\n
}\n
}\n
return rows;\n
}\n
\n
function mapRowsToIds(rowArray) {\n
var ids = [];\n
for (var i = 0, l = rowArray.length; i < l; i++) {\n
if (rowArray[i] < rows.length) {\n
ids[ids.length] = rows[rowArray[i]][idProperty];\n
}\n
}\n
return ids;\n
}\n
\n
function updateItem(id, item) {\n
if (idxById[id] === undefined || id !== item[idProperty]) {\n
throw "Invalid or non-matching id";\n
}\n
items[idxById[id]] = item;\n
if (!updated) {\n
updated = {};\n
}\n
updated[id] = true;\n
refresh();\n
}\n
\n
function insertItem(insertBefore, item) {\n
items.splice(insertBefore, 0, item);\n
updateIdxById(insertBefore);\n
refresh();\n
}\n
\n
function addItem(item) {\n
items.push(item);\n
updateIdxById(items.length - 1);\n
refresh();\n
}\n
\n
function deleteItem(id) {\n
var idx = idxById[id];\n
if (idx === undefined) {\n
throw "Invalid id";\n
}\n
delete idxById[id];\n
items.splice(idx, 1);\n
updateIdxById(idx);\n
refresh();\n
}\n
\n
function getLength() {\n
return rows.length;\n
}\n
\n
function getItem(i) {\n
var item = rows[i];\n
\n
// if this is a group row, make sure totals are calculated and update the title\n
if (item && item.__group && item.totals && !item.totals.initialized) {\n
var gi = groupingInfos[item.level];\n
if (!gi.displayTotalsRow) {\n
calculateTotals(item.totals);\n
item.title = gi.formatter ? gi.formatter(item) : item.value;\n
}\n
}\n
// if this is a totals row, make sure it\'s calculated\n
else if (item && item.__groupTotals && !item.initialized) {\n
calculateTotals(item);\n
}\n
\n
return item;\n
}\n
\n
function getItemMetadata(i) {\n
var item = rows[i];\n
if (item === undefined) {\n
return null;\n
}\n
\n
// overrides for grouping rows\n
if (item.__group) {\n
return options.groupItemMetadataProvider.getGroupRowMetadata(item);\n
}\n
\n
// overrides for totals rows\n
if (item.__groupTotals) {\n
return options.groupItemMetadataProvider.getTotalsRowMetadata(item);\n
}\n
\n
return null;\n
}\n
\n
function expandCollapseAllGroups(level, collapse) {\n
if (level == null) {\n
for (var i = 0; i < groupingInfos.length; i++) {\n
toggledGroupsByLevel[i] = {};\n
groupingInfos[i].collapsed = collapse;\n
}\n
} else {\n
toggledGroupsByLevel[level] = {};\n
groupingInfos[level].collapsed = collapse;\n
}\n
refresh();\n
}\n
\n
/**\n
* @param level {Number} Optional level to collapse. If not specified, applies to all levels.\n
*/\n
function collapseAllGroups(level) {\n
expandCollapseAllGroups(level, true);\n
}\n
\n
/**\n
* @param level {Number} Optional level to expand. If not specified, applies to all levels.\n
*/\n
function expandAllGroups(level) {\n
expandCollapseAllGroups(level, false);\n
}\n
\n
function expandCollapseGroup(level, groupingKey, collapse) {\n
toggledGroupsByLevel[level][groupingKey] = groupingInfos[level].collapsed ^ collapse;\n
refresh();\n
}\n
\n
/**\n
* @param varArgs Either a Slick.Group\'s "groupingKey" property, or a\n
* variable argument list of grouping values denoting a unique path to the row. For\n
* example, calling collapseGroup(\'high\', \'10%\') will collapse the \'10%\' subgroup of\n
* the \'high\' group.\n
*/\n
function collapseGroup(varArgs) {\n
var args = Array.prototype.slice.call(arguments);\n
var arg0 = args[0];\n
if (args.length == 1 && arg0.indexOf(groupingDelimiter) != -1) {\n
expandCollapseGroup(arg0.split(groupingDelimiter).length - 1, arg0, true);\n
} else {\n
expandCollapseGroup(args.length - 1, args.join(groupingDelimiter), true);\n
}\n
}\n
\n
/**\n
* @param varArgs Either a Slick.Group\'s "groupingKey" property, or a\n
* variable argument list of grouping values denoting a unique path to the row. For\n
* example, calling expandGroup(\'high\', \'10%\') will expand the \'10%\' subgroup of\n
* the \'high\' group.\n
*/\n
function expandGroup(varArgs) {\n
var args = Array.prototype.slice.call(arguments);\n
var arg0 = args[0];\n
if (args.length == 1 && arg0.indexOf(groupingDelimiter) != -1) {\n
expandCollapseGroup(arg0.split(groupingDelimiter).length - 1, arg0, false);\n
} else {\n
expandCollapseGroup(args.length - 1, args.join(groupingDelimiter), false);\n
}\n
}\n
\n
function getGroups() {\n
return groups;\n
}\n
\n
function extractGroups(rows, parentGroup) {\n
var group;\n
var val;\n
var groups = [];\n
var groupsByVal = {};\n
var r;\n
var level = parentGroup ? parentGroup.level + 1 : 0;\n
var gi = groupingInfos[level];\n
\n
for (var i = 0, l = gi.predefinedValues.length; i < l; i++) {\n
val = gi.predefinedValues[i];\n
group = groupsByVal[val];\n
if (!group) {\n
group = new Slick.Group();\n
group.value = val;\n
group.level = level;\n
group.groupingKey = (parentGroup ? parentGroup.groupingKey + groupingDelimiter : \'\') + val;\n
groups[groups.length] = group;\n
groupsByVal[val] = group;\n
}\n
}\n
\n
for (var i = 0, l = rows.length; i < l; i++) {\n
r = rows[i];\n
val = gi.getterIsAFn ? gi.getter(r) : r[gi.getter];\n
group = groupsByVal[val];\n
if (!group) {\n
group = new Slick.Group();\n
group.value = val;\n
group.level = level;\n
group.groupingKey = (parentGroup ? parentGroup.groupingKey + groupingDelimiter : \'\') + val;\n
groups[groups.length] = group;\n
groupsByVal[val] = group;\n
}\n
\n
group.rows[group.count++] = r;\n
}\n
\n
if (level < groupingInfos.length - 1) {\n
for (var i = 0; i < groups.length; i++) {\n
group = groups[i];\n
group.groups = extractGroups(group.rows, group);\n
}\n
} \n
\n
groups.sort(groupingInfos[level].comparer);\n
\n
return groups;\n
}\n
\n
function calculateTotals(totals) {\n
var group = totals.group;\n
var gi = groupingInfos[group.level];\n
var isLeafLevel = (group.level == groupingInfos.length);\n
var agg, idx = gi.aggregators.length;\n
\n
if (!isLeafLevel && gi.aggregateChildGroups) {\n
// make sure all the subgroups are calculated\n
var i = group.groups.length;\n
while (i--) {\n
if (!group.groups[i].initialized) {\n
calculateTotals(group.groups[i]);\n
}\n
}\n
}\n
\n
while (idx--) {\n
agg = gi.aggregators[idx];\n
agg.init();\n
if (!isLeafLevel && gi.aggregateChildGroups) {\n
gi.compiledAccumulators[idx].call(agg, group.groups);\n
} else {\n
gi.compiledAccumulators[idx].call(agg, group.rows);\n
}\n
agg.storeResult(totals);\n
}\n
totals.initialized = true;\n
}\n
\n
function addGroupTotals(group) {\n
var gi = groupingInfos[group.level];\n
var totals = new Slick.GroupTotals();\n
totals.group = group;\n
group.totals = totals;\n
if (!gi.lazyTotalsCalculation) {\n
calculateTotals(totals);\n
}\n
}\n
\n
function addTotals(groups, level) {\n
level = level || 0;\n
var gi = groupingInfos[level];\n
var groupCollapsed = gi.collapsed;\n
var toggledGroups = toggledGroupsByLevel[level]; \n
var idx = groups.length, g;\n
while (idx--) {\n
g = groups[idx];\n
\n
if (g.collapsed && !gi.aggregateCollapsed) {\n
continue;\n
}\n
\n
// Do a depth-first aggregation so that parent group aggregators can access subgroup totals.\n
if (g.groups) {\n
addTotals(g.groups, level + 1);\n
}\n
\n
if (gi.aggregators.length && (\n
gi.aggregateEmpty || g.rows.length || (g.groups && g.groups.length))) {\n
addGroupTotals(g);\n
}\n
\n
g.collapsed = groupCollapsed ^ toggledGroups[g.groupingKey];\n
g.title = gi.formatter ? gi.formatter(g) : g.value;\n
}\n
} \n
\n
function flattenGroupedRows(groups, level) {\n
level = level || 0;\n
var gi = groupingInfos[level];\n
var groupedRows = [], rows, gl = 0, g;\n
for (var i = 0, l = groups.length; i < l; i++) {\n
g = groups[i];\n
groupedRows[gl++] = g;\n
\n
if (!g.collapsed) {\n
rows = g.groups ? flattenGroupedRows(g.groups, level + 1) : g.rows;\n
for (var j = 0, jj = rows.length; j < jj; j++) {\n
groupedRows[gl++] = rows[j];\n
}\n
}\n
\n
if (g.totals && gi.displayTotalsRow && (!g.collapsed || gi.aggregateCollapsed)) {\n
groupedRows[gl++] = g.totals;\n
}\n
}\n
return groupedRows;\n
}\n
\n
function getFunctionInfo(fn) {\n
var fnRegex = /^function[^(]*\\(([^)]*)\\)\\s*{([\\s\\S]*)}$/;\n
var matches = fn.toString().match(fnRegex);\n
return {\n
params: matches[1].split(","),\n
body: matches[2]\n
};\n
}\n
\n
function compileAccumulatorLoop(aggregator) {\n
var accumulatorInfo = getFunctionInfo(aggregator.accumulate);\n
var fn = new Function(\n
"_items",\n
"for (var " + accumulatorInfo.params[0] + ", _i=0, _il=_items.length; _i<_il; _i++) {" +\n
accumulatorInfo.params[0] + " = _items[_i]; " +\n
accumulatorInfo.body +\n
"}"\n
);\n
fn.displayName = fn.name = "compiledAccumulatorLoop";\n
return fn;\n
}\n
\n
function compileFilter() {\n
var filterInfo = getFunctionInfo(filter);\n
\n
var filterBody = filterInfo.body\n
.replace(/return false\\s*([;}]|$)/gi, "{ continue _coreloop; }$1")\n
.replace(/return true\\s*([;}]|$)/gi, "{ _retval[_idx++] = $item$; continue _coreloop; }$1")\n
.replace(/return ([^;}]+?)\\s*([;}]|$)/gi,\n
"{ if ($1) { _retval[_idx++] = $item$; }; continue _coreloop; }$2");\n
\n
// This preserves the function template code after JS compression,\n
// so that replace() commands still work as expected.\n
var tpl = [\n
//"function(_items, _args) { ",\n
"var _retval = [], _idx = 0; ",\n
"var $item$, $args$ = _args; ",\n
"_coreloop: ",\n
"for (var _i = 0, _il = _items.length; _i < _il; _i++) { ",\n
"$item$ = _items[_i]; ",\n
"$filter$; ",\n
"} ",\n
"return _retval; "\n
//"}"\n
].join("");\n
tpl = tpl.replace(/\\$filter\\$/gi, filterBody);\n
tpl = tpl.replace(/\\$item\\$/gi, filterInfo.params[0]);\n
tpl = tpl.replace(/\\$args\\$/gi, filterInfo.params[1]);\n
\n
var fn = new Function("_items,_args", tpl);\n
fn.displayName = fn.name = "compiledFilter";\n
return fn;\n
}\n
\n
function compileFilterWithCaching() {\n
var filterInfo = getFunctionInfo(filter);\n
\n
var filterBody = filterInfo.body\n
.replace(/return false\\s*([;}]|$)/gi, "{ continue _coreloop; }$1")\n
.replace(/return true\\s*([;}]|$)/gi, "{ _cache[_i] = true;_retval[_idx++] = $item$; continue _coreloop; }$1")\n
.replace(/return ([^;}]+?)\\s*([;}]|$)/gi,\n
"{ if ((_cache[_i] = $1)) { _retval[_idx++] = $item$; }; continue _coreloop; }$2");\n
\n
// This preserves the function template code after JS compression,\n
// so that replace() commands still work as expected.\n
var tpl = [\n
//"function(_items, _args, _cache) { ",\n
"var _retval = [], _idx = 0; ",\n
"var $item$, $args$ = _args; ",\n
"_coreloop: ",\n
"for (var _i = 0, _il = _items.length; _i < _il; _i++) { ",\n
"$item$ = _items[_i]; ",\n
"if (_cache[_i]) { ",\n
"_retval[_idx++] = $item$; ",\n
"continue _coreloop; ",\n
"} ",\n
"$filter$; ",\n
"} ",\n
"return _retval; "\n
//"}"\n
].join("");\n
tpl = tpl.replace(/\\$filter\\$/gi, filterBody);\n
tpl = tpl.replace(/\\$item\\$/gi, filterInfo.params[0]);\n
tpl = tpl.replace(/\\$args\\$/gi, filterInfo.params[1]);\n
\n
var fn = new Function("_items,_args,_cache", tpl);\n
fn.displayName = fn.name = "compiledFilterWithCaching";\n
return fn;\n
}\n
\n
function uncompiledFilter(items, args) {\n
var retval = [], idx = 0;\n
\n
for (var i = 0, ii = items.length; i < ii; i++) {\n
if (filter(items[i], args)) {\n
retval[idx++] = items[i];\n
}\n
}\n
\n
return retval;\n
}\n
\n
function uncompiledFilterWithCaching(items, args, cache) {\n
var retval = [], idx = 0, item;\n
\n
for (var i = 0, ii = items.length; i < ii; i++) {\n
item = items[i];\n
if (cache[i]) {\n
retval[idx++] = item;\n
} else if (filter(item, args)) {\n
retval[idx++] = item;\n
cache[i] = true;\n
}\n
}\n
\n
return retval;\n
}\n
\n
function getFilteredAndPagedItems(items) {\n
if (filter) {\n
var batchFilter = options.inlineFilters ? compiledFilter : uncompiledFilter;\n
var batchFilterWithCaching = options.inlineFilters ? compiledFilterWithCaching : uncompiledFilterWithCaching;\n
\n
if (refreshHints.isFilterNarrowing) {\n
filteredItems = batchFilter(filteredItems, filterArgs);\n
} else if (refreshHints.isFilterExpanding) {\n
filteredItems = batchFilterWithCaching(items, filterArgs, filterCache);\n
} else if (!refreshHints.isFilterUnchanged) {\n
filteredItems = batchFilter(items, filterArgs);\n
}\n
} else {\n
// special case: if not filtering and not paging, the resulting\n
// rows collection needs to be a copy so that changes due to sort\n
// can be caught\n
filteredItems = pagesize ? items : items.concat();\n
}\n
\n
// get the current page\n
var paged;\n
if (pagesize) {\n
if (filteredItems.length < pagenum * pagesize) {\n
pagenum = Math.floor(filteredItems.length / pagesize);\n
}\n
paged = filteredItems.slice(pagesize * pagenum, pagesize * pagenum + pagesize);\n
} else {\n
paged = filteredItems;\n
}\n
\n
return {totalRows: filteredItems.length, rows: paged};\n
}\n
\n
function getRowDiffs(rows, newRows) {\n
var item, r, eitherIsNonData, diff = [];\n
var from = 0, to = newRows.length;\n
\n
if (refreshHints && refreshHints.ignoreDiffsBefore) {\n
from = Math.max(0,\n
Math.min(newRows.length, refreshHints.ignoreDiffsBefore));\n
}\n
\n
if (refreshHints && refreshHints.ignoreDiffsAfter) {\n
to = Math.min(newRows.length,\n
Math.max(0, refreshHints.ignoreDiffsAfter));\n
}\n
\n
for (var i = from, rl = rows.length; i < to; i++) {\n
if (i >= rl) {\n
diff[diff.length] = i;\n
} else {\n
item = newRows[i];\n
r = rows[i];\n
\n
if ((groupingInfos.length && (eitherIsNonData = (item.__nonDataRow) || (r.__nonDataRow)) &&\n
item.__group !== r.__group ||\n
item.__group && !item.equals(r))\n
|| (eitherIsNonData &&\n
// no good way to compare totals since they are arbitrary DTOs\n
// deep object comparison is pretty expensive\n
// always considering them \'dirty\' seems easier for the time being\n
(item.__groupTotals || r.__groupTotals))\n
|| item[idProperty] != r[idProperty]\n
|| (updated && updated[item[idProperty]])\n
) {\n
diff[diff.length] = i;\n
}\n
}\n
}\n
return diff;\n
}\n
\n
function recalc(_items) {\n
rowsById = null;\n
\n
if (refreshHints.isFilterNarrowing != prevRefreshHints.isFilterNarrowing ||\n
refreshHints.isFilterExpanding != prevRefreshHints.isFilterExpanding) {\n
filterCache = [];\n
}\n
\n
var filteredItems = getFilteredAndPagedItems(_items);\n
totalRows = filteredItems.totalRows;\n
var newRows = filteredItems.rows;\n
\n
groups = [];\n
if (groupingInfos.length) {\n
groups = extractGroups(newRows);\n
if (groups.length) {\n
addTotals(groups);\n
newRows = flattenGroupedRows(groups);\n
}\n
}\n
\n
var diff = getRowDiffs(rows, newRows);\n
\n
rows = newRows;\n
\n
return diff;\n
}\n
\n
function refresh() {\n
if (suspend) {\n
return;\n
}\n
\n
var countBefore = rows.length;\n
var totalRowsBefore = totalRows;\n
\n
var diff = recalc(items, filter); // pass as direct refs to avoid closure perf hit\n
\n
// if the current page is no longer valid, go to last page and recalc\n
// we suffer a performance penalty here, but the main loop (recalc) remains highly optimized\n
if (pagesize && totalRows < pagenum * pagesize) {\n
pagenum = Math.max(0, Math.ceil(totalRows / pagesize) - 1);\n
diff = recalc(items, filter);\n
}\n
\n
updated = null;\n
prevRefreshHints = refreshHints;\n
refreshHints = {};\n
\n
if (totalRowsBefore != totalRows) {\n
onPagingInfoChanged.notify(getPagingInfo(), null, self);\n
}\n
if (countBefore != rows.length) {\n
onRowCountChanged.notify({previous: countBefore, current: rows.length}, null, self);\n
}\n
if (diff.length > 0) {\n
onRowsChanged.notify({rows: diff}, null, self);\n
}\n
}\n
\n
/***\n
* Wires the grid and the DataView together to keep row selection tied to item ids.\n
* This is useful since, without it, the grid only knows about rows, so if the items\n
* move around, the same rows stay selected instead of the selection moving along\n
* with the items.\n
*\n
* NOTE: This doesn\'t work with cell selection model.\n
*\n
* @param grid {Slick.Grid} The grid to sync selection with.\n
* @param preserveHidden {Boolean} Whether to keep selected items that go out of the\n
* view due to them getting filtered out.\n
* @param preserveHiddenOnSelectionChange {Boolean} Whether to keep selected items\n
* that are currently out of the view (see preserveHidden) as selected when selection\n
* changes.\n
* @return {Slick.Event} An event that notifies when an internal list of selected row ids\n
* changes. This is useful since, in combination with the above two options, it allows\n
* access to the full list selected row ids, and not just the ones visible to the grid.\n
* @method syncGridSelection\n
*/\n
function syncGridSelection(grid, preserveHidden, preserveHiddenOnSelectionChange) {\n
var self = this;\n
var inHandler;\n
var selectedRowIds = self.mapRowsToIds(grid.getSelectedRows());\n
var onSelectedRowIdsChanged = new Slick.Event();\n
\n
function setSelectedRowIds(rowIds) {\n
if (selectedRowIds.join(",") == rowIds.join(",")) {\n
return;\n
}\n
\n
selectedRowIds = rowIds;\n
\n
onSelectedRowIdsChanged.notify({\n
"grid": grid,\n
"ids": selectedRowIds\n
}, new Slick.EventData(), self);\n
}\n
\n
function update() {\n
if (selectedRowIds.length > 0) {\n
inHandler = true;\n
var selectedRows = self.mapIdsToRows(selectedRowIds);\n
if (!preserveHidden) {\n
setSelectedRowIds(self.mapRowsToIds(selectedRows)); \n
}\n
grid.setSelectedRows(selectedRows);\n
inHandler = false;\n
}\n
}\n
\n
grid.onSelectedRowsChanged.subscribe(function(e, args) {\n
if (inHandler) { return; }\n
var newSelectedRowIds = self.mapRowsToIds(grid.getSelectedRows());\n
if (!preserveHiddenOnSelectionChange || !grid.getOptions().multiSelect) {\n
setSelectedRowIds(newSelectedRowIds);\n
} else {\n
// keep the ones that are hidden\n
var existing = $.grep(selectedRowIds, function(id) { return self.getRowById(id) === undefined; });\n
// add the newly selected ones\n
setSelectedRowIds(existing.concat(newSelectedRowIds));\n
}\n
});\n
\n
this.onRowsChanged.subscribe(update);\n
\n
this.onRowCountChanged.subscribe(update);\n
\n
return onSelectedRowIdsChanged;\n
}\n
\n
function syncGridCellCssStyles(grid, key) {\n
var hashById;\n
var inHandler;\n
\n
// since this method can be called after the cell styles have been set,\n
// get the existing ones right away\n
storeCellCssStyles(grid.getCellCssStyles(key));\n
\n
function storeCellCssStyles(hash) {\n
hashById = {};\n
for (var row in hash) {\n
var id = rows[row][idProperty];\n
hashById[id] = hash[row];\n
}\n
}\n
\n
function update() {\n
if (hashById) {\n
inHandler = true;\n
ensureRowsByIdCache();\n
var newHash = {};\n
for (var id in hashById) {\n
var row = rowsById[id];\n
if (row != undefined) {\n
newHash[row] = hashById[id];\n
}\n
}\n
grid.setCellCssStyles(key, newHash);\n
inHandler = false;\n
}\n
}\n
\n
grid.onCellCssStylesChanged.subscribe(function(e, args) {\n
if (inHandler) { return; }\n
if (key != args.key) { return; }\n
if (args.hash) {\n
storeCellCssStyles(args.hash);\n
}\n
});\n
\n
this.onRowsChanged.subscribe(update);\n
\n
this.onRowCountChanged.subscribe(update);\n
}\n
\n
$.extend(this, {\n
// methods\n
"beginUpdate": beginUpdate,\n
"endUpdate": endUpdate,\n
"setPagingOptions": setPagingOptions,\n
"getPagingInfo": getPagingInfo,\n
"getItems": getItems,\n
"setItems": setItems,\n
"setFilter": setFilter,\n
"sort": sort,\n
"fastSort": fastSort,\n
"reSort": reSort,\n
"setGrouping": setGrouping,\n
"getGrouping": getGrouping,\n
"groupBy": groupBy,\n
"setAggregators": setAggregators,\n
"collapseAllGroups": collapseAllGroups,\n
"expandAllGroups": expandAllGroups,\n
"collapseGroup": collapseGroup,\n
"expandGroup": expandGroup,\n
"getGroups": getGroups,\n
"getIdxById": getIdxById,\n
"getRowById": getRowById,\n
"getItemById": getItemById,\n
"getItemByIdx": getItemByIdx,\n
"mapRowsToIds": mapRowsToIds,\n
"mapIdsToRows": mapIdsToRows,\n
"setRefreshHints": setRefreshHints,\n
"setFilterArgs": setFilterArgs,\n
"refresh": refresh,\n
"updateItem": updateItem,\n
"insertItem": insertItem,\n
"addItem": addItem,\n
"deleteItem": deleteItem,\n
"syncGridSelection": syncGridSelection,\n
"syncGridCellCssStyles": syncGridCellCssStyles,\n
\n
// data provider methods\n
"getLength": getLength,\n
"getItem": getItem,\n
"getItemMetadata": getItemMetadata,\n
\n
// events\n
"onRowCountChanged": onRowCountChanged,\n
"onRowsChanged": onRowsChanged,\n
"onPagingInfoChanged": onPagingInfoChanged\n
});\n
}\n
\n
function AvgAggregator(field) {\n
this.field_ = field;\n
\n
this.init = function () {\n
this.count_ = 0;\n
this.nonNullCount_ = 0;\n
this.sum_ = 0;\n
};\n
\n
this.accumulate = function (item) {\n
var val = item[this.field_];\n
this.count_++;\n
if (val != null && val !== "" && val !== NaN) {\n
this.nonNullCount_++;\n
this.sum_ += parseFloat(val);\n
}\n
};\n
\n
this.storeResult = function (groupTotals) {\n
if (!groupTotals.avg) {\n
groupTotals.avg = {};\n
}\n
if (this.nonNullCount_ != 0) {\n
groupTotals.avg[this.field_] = this.sum_ / this.nonNullCount_;\n
}\n
};\n
}\n
\n
function MinAggregator(field) {\n
this.field_ = field;\n
\n
this.init = function () {\n
this.min_ = null;\n
};\n
\n
this.accumulate = function (item) {\n
var val = item[this.field_];\n
if (val != null && val !== "" && val !== NaN) {\n
if (this.min_ == null || val < this.min_) {\n
this.min_ = val;\n
}\n
}\n
};\n
\n
this.storeResult = function (groupTotals) {\n
if (!groupTotals.min) {\n
groupTotals.min = {};\n
}\n
groupTotals.min[this.field_] = this.min_;\n
}\n
}\n
\n
function MaxAggregator(field) {\n
this.field_ = field;\n
\n
this.init = function () {\n
this.max_ = null;\n
};\n
\n
this.accumulate = function (item) {\n
var val = item[this.field_];\n
if (val != null && val !== "" && val !== NaN) {\n
if (this.max_ == null || val > this.max_) {\n
this.max_ = val;\n
}\n
}\n
};\n
\n
this.storeResult = function (groupTotals) {\n
if (!groupTotals.max) {\n
groupTotals.max = {};\n
}\n
groupTotals.max[this.field_] = this.max_;\n
}\n
}\n
\n
function SumAggregator(field) {\n
this.field_ = field;\n
\n
this.init = function () {\n
this.sum_ = null;\n
};\n
\n
this.accumulate = function (item) {\n
var val = item[this.field_];\n
if (val != null && val !== "" && val !== NaN) {\n
this.sum_ += parseFloat(val);\n
}\n
};\n
\n
this.storeResult = function (groupTotals) {\n
if (!groupTotals.sum) {\n
groupTotals.sum = {};\n
}\n
groupTotals.sum[this.field_] = this.sum_;\n
}\n
}\n
\n
// TODO: add more built-in aggregators\n
// TODO: merge common aggregators in one to prevent needles iterating\n
\n
})(jQuery);\n
]]></string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>33220</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>slick.dataview.js</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271200.33</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>slick.editors.js</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>application/javascript</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="cdata"><![CDATA[
/***\n
* Contains basic SlickGrid editors.\n
* @module Editors\n
* @namespace Slick\n
*/\n
\n
(function ($) {\n
// register namespace\n
$.extend(true, window, {\n
"Slick": {\n
"Editors": {\n
"Text": TextEditor,\n
"Integer": IntegerEditor,\n
"Date": DateEditor,\n
"YesNoSelect": YesNoSelectEditor,\n
"Checkbox": CheckboxEditor,\n
"PercentComplete": PercentCompleteEditor,\n
"LongText": LongTextEditor\n
}\n
}\n
});\n
\n
function TextEditor(args) {\n
var $input;\n
var defaultValue;\n
var scope = this;\n
\n
this.init = function () {\n
$input = $("<INPUT type=text class=\'editor-text\' />")\n
.appendTo(args.container)\n
.bind("keydown.nav", function (e) {\n
if (e.keyCode === $.ui.keyCode.LEFT || e.keyCode === $.ui.keyCode.RIGHT) {\n
e.stopImmediatePropagation();\n
}\n
})\n
.focus()\n
.select();\n
};\n
\n
this.destroy = function () {\n
$input.remove();\n
};\n
\n
this.focus = function () {\n
$input.focus();\n
};\n
\n
this.getValue = function () {\n
return $input.val();\n
};\n
\n
this.setValue = function (val) {\n
$input.val(val);\n
};\n
\n
this.loadValue = function (item) {\n
defaultValue = item[args.column.field] || "";\n
$input.val(defaultValue);\n
$input[0].defaultValue = defaultValue;\n
$input.select();\n
};\n
\n
this.serializeValue = function () {\n
return $input.val();\n
};\n
\n
this.applyValue = function (item, state) {\n
item[args.column.field] = state;\n
};\n
\n
this.isValueChanged = function () {\n
return (!($input.val() == "" && defaultValue == null)) && ($input.val() != defaultValue);\n
};\n
\n
this.validate = function () {\n
if (args.column.validator) {\n
var validationResults = args.column.validator($input.val());\n
if (!validationResults.valid) {\n
return validationResults;\n
}\n
}\n
\n
return {\n
valid: true,\n
msg: null\n
};\n
};\n
\n
this.init();\n
}\n
\n
function IntegerEditor(args) {\n
var $input;\n
var defaultValue;\n
var scope = this;\n
\n
this.init = function () {\n
$input = $("<INPUT type=text class=\'editor-text\' />");\n
\n
$input.bind("keydown.nav", function (e) {\n
if (e.keyCode === $.ui.keyCode.LEFT || e.keyCode === $.ui.keyCode.RIGHT) {\n
e.stopImmediatePropagation();\n
}\n
});\n
\n
$input.appendTo(args.container);\n
$input.focus().select();\n
};\n
\n
this.destroy = function () {\n
$input.remove();\n
};\n
\n
this.focus = function () {\n
$input.focus();\n
};\n
\n
this.loadValue = function (item) {\n
defaultValue = item[args.column.field];\n
$input.val(defaultValue);\n
$input[0].defaultValue = defaultValue;\n
$input.select();\n
};\n
\n
this.serializeValue = function () {\n
return parseInt($input.val(), 10) || 0;\n
};\n
\n
this.applyValue = function (item, state) {\n
item[args.column.field] = state;\n
};\n
\n
this.isValueChanged = function () {\n
return (!($input.val() == "" && defaultValue == null)) && ($input.val() != defaultValue);\n
};\n
\n
this.validate = function () {\n
if (isNaN($input.val())) {\n
return {\n
valid: false,\n
msg: "Please enter a valid integer"\n
};\n
}\n
\n
return {\n
valid: true,\n
msg: null\n
};\n
};\n
\n
this.init();\n
}\n
\n
function DateEditor(args) {\n
var $input;\n
var defaultValue;\n
var scope = this;\n
var calendarOpen = false;\n
\n
this.init = function () {\n
$input = $("<INPUT type=text class=\'editor-text\' />");\n
$input.appendTo(args.container);\n
$input.focus().select();\n
$input.datepicker({\n
showOn: "button",\n
buttonImageOnly: true,\n
buttonImage: "../images/calendar.gif",\n
beforeShow: function () {\n
calendarOpen = true\n
},\n
onClose: function () {\n
calendarOpen = false\n
}\n
});\n
$input.width($input.width() - 18);\n
};\n
\n
this.destroy = function () {\n
$.datepicker.dpDiv.stop(true, true);\n
$input.datepicker("hide");\n
$input.datepicker("destroy");\n
$input.remove();\n
};\n
\n
this.show = function () {\n
if (calendarOpen) {\n
$.datepicker.dpDiv.stop(true, true).show();\n
}\n
};\n
\n
this.hide = function () {\n
if (calendarOpen) {\n
$.datepicker.dpDiv.stop(true, true).hide();\n
}\n
};\n
\n
this.position = function (position) {\n
if (!calendarOpen) {\n
return;\n
}\n
$.datepicker.dpDiv\n
.css("top", position.top + 30)\n
.css("left", position.left);\n
};\n
\n
this.focus = function () {\n
$input.focus();\n
};\n
\n
this.loadValue = function (item) {\n
defaultValue = item[args.column.field];\n
$input.val(defaultValue);\n
$input[0].defaultValue = defaultValue;\n
$input.select();\n
};\n
\n
this.serializeValue = function () {\n
return $input.val();\n
};\n
\n
this.applyValue = function (item, state) {\n
item[args.column.field] = state;\n
};\n
\n
this.isValueChanged = function () {\n
return (!($input.val() == "" && defaultValue == null)) && ($input.val() != defaultValue);\n
};\n
\n
this.validate = function () {\n
return {\n
valid: true,\n
msg: null\n
};\n
};\n
\n
this.init();\n
}\n
\n
function YesNoSelectEditor(args) {\n
var $select;\n
var defaultValue;\n
var scope = this;\n
\n
this.init = function () {\n
$select = $("<SELECT tabIndex=\'0\' class=\'editor-yesno\'><OPTION value=\'yes\'>Yes</OPTION><OPTION value=\'no\'>No</OPTION></SELECT>");\n
$select.appendTo(args.container);\n
$select.focus();\n
};\n
\n
this.destroy = function () {\n
$select.remove();\n
};\n
\n
this.focus = function () {\n
$select.focus();\n
};\n
\n
this.loadValue = function (item) {\n
$select.val((defaultValue = item[args.column.field]) ? "yes" : "no");\n
$select.select();\n
};\n
\n
this.serializeValue = function () {\n
return ($select.val() == "yes");\n
};\n
\n
this.applyValue = function (item, state) {\n
item[args.column.field] = state;\n
};\n
\n
this.isValueChanged = function () {\n
return ($select.val() != defaultValue);\n
};\n
\n
this.validate = function () {\n
return {\n
valid: true,\n
msg: null\n
};\n
};\n
\n
this.init();\n
}\n
\n
function CheckboxEditor(args) {\n
var $select;\n
var defaultValue;\n
var scope = this;\n
\n
this.init = function () {\n
$select = $("<INPUT type=checkbox value=\'true\' class=\'editor-checkbox\' hideFocus>");\n
$select.appendTo(args.container);\n
$select.focus();\n
};\n
\n
this.destroy = function () {\n
$select.remove();\n
};\n
\n
this.focus = function () {\n
$select.focus();\n
};\n
\n
this.loadValue = function (item) {\n
defaultValue = !!item[args.column.field];\n
if (defaultValue) {\n
$select.prop(\'checked\', true);\n
} else {\n
$select.prop(\'checked\', false);\n
}\n
};\n
\n
this.serializeValue = function () {\n
return $select.prop(\'checked\');\n
};\n
\n
this.applyValue = function (item, state) {\n
item[args.column.field] = state;\n
};\n
\n
this.isValueChanged = function () {\n
return (this.serializeValue() !== defaultValue);\n
};\n
\n
this.validate = function () {\n
return {\n
valid: true,\n
msg: null\n
};\n
};\n
\n
this.init();\n
}\n
\n
function PercentCompleteEditor(args) {\n
var $input, $picker;\n
var defaultValue;\n
var scope = this;\n
\n
this.init = function () {\n
$input = $("<INPUT type=text class=\'editor-percentcomplete\' />");\n
$input.width($(args.container).innerWidth() - 25);\n
$input.appendTo(args.container);\n
\n
$picker = $("<div class=\'editor-percentcomplete-picker\' />").appendTo(args.container);\n
$picker.append("<div class=\'editor-percentcomplete-helper\'><div class=\'editor-percentcomplete-wrapper\'><div class=\'editor-percentcomplete-slider\' /><div class=\'editor-percentcomplete-buttons\' /></div></div>");\n
\n
$picker.find(".editor-percentcomplete-buttons").append("<button val=0>Not started</button><br/><button val=50>In Progress</button><br/><button val=100>Complete</button>");\n
\n
$input.focus().select();\n
\n
$picker.find(".editor-percentcomplete-slider").slider({\n
orientation: "vertical",\n
range: "min",\n
value: defaultValue,\n
slide: function (event, ui) {\n
$input.val(ui.value)\n
}\n
});\n
\n
$picker.find(".editor-percentcomplete-buttons button").bind("click", function (e) {\n
$input.val($(this).attr("val"));\n
$picker.find(".editor-percentcomplete-slider").slider("value", $(this).attr("val"));\n
})\n
};\n
\n
this.destroy = function () {\n
$input.remove();\n
$picker.remove();\n
};\n
\n
this.focus = function () {\n
$input.focus();\n
};\n
\n
this.loadValue = function (item) {\n
$input.val(defaultValue = item[args.column.field]);\n
$input.select();\n
};\n
\n
this.serializeValue = function () {\n
return parseInt($input.val(), 10) || 0;\n
};\n
\n
this.applyValue = function (item, state) {\n
item[args.column.field] = state;\n
};\n
\n
this.isValueChanged = function () {\n
return (!($input.val() == "" && defaultValue == null)) && ((parseInt($input.val(), 10) || 0) != defaultValue);\n
};\n
\n
this.validate = function () {\n
if (isNaN(parseInt($input.val(), 10))) {\n
return {\n
valid: false,\n
msg: "Please enter a valid positive number"\n
};\n
}\n
\n
return {\n
valid: true,\n
msg: null\n
};\n
};\n
\n
this.init();\n
}\n
\n
/*\n
* An example of a "detached" editor.\n
* The UI is added onto document BODY and .position(), .show() and .hide() are implemented.\n
* KeyDown events are also handled to provide handling for Tab, Shift-Tab, Esc and Ctrl-Enter.\n
*/\n
function LongTextEditor(args) {\n
var $input, $wrapper;\n
var defaultValue;\n
var scope = this;\n
\n
this.init = function () {\n
var $container = $("body");\n
\n
$wrapper = $("<DIV style=\'z-index:10000;position:absolute;background:white;padding:5px;border:3px solid gray; -moz-border-radius:10px; border-radius:10px;\'/>")\n
.appendTo($container);\n
\n
$input = $("<TEXTAREA hidefocus rows=5 style=\'backround:white;width:250px;height:80px;border:0;outline:0\'>")\n
.appendTo($wrapper);\n
\n
$("<DIV style=\'text-align:right\'><BUTTON>Save</BUTTON><BUTTON>Cancel</BUTTON></DIV>")\n
.appendTo($wrapper);\n
\n
$wrapper.find("button:first").bind("click", this.save);\n
$wrapper.find("button:last").bind("click", this.cancel);\n
$input.bind("keydown", this.handleKeyDown);\n
\n
scope.position(args.position);\n
$input.focus().select();\n
};\n
\n
this.handleKeyDown = function (e) {\n
if (e.which == $.ui.keyCode.ENTER && e.ctrlKey) {\n
scope.save();\n
} else if (e.which == $.ui.keyCode.ESCAPE) {\n
e.preventDefault();\n
scope.cancel();\n
} else if (e.which == $.ui.keyCode.TAB && e.shiftKey) {\n
e.preventDefault();\n
args.grid.navigatePrev();\n
} else if (e.which == $.ui.keyCode.TAB) {\n
e.preventDefault();\n
args.grid.navigateNext();\n
}\n
};\n
\n
this.save = function () {\n
args.commitChanges();\n
};\n
\n
this.cancel = function () {\n
$input.val(defaultValue);\n
args.cancelChanges();\n
};\n
\n
this.hide = function () {\n
$wrapper.hide();\n
};\n
\n
this.show = function () {\n
$wrapper.show();\n
};\n
\n
this.position = function (position) {\n
$wrapper\n
.css("top", position.top - 5)\n
.css("left", position.left - 5)\n
};\n
\n
this.destroy = function () {\n
$wrapper.remove();\n
};\n
\n
this.focus = function () {\n
$input.focus();\n
};\n
\n
this.loadValue = function (item) {\n
$input.val(defaultValue = item[args.column.field]);\n
$input.select();\n
};\n
\n
this.serializeValue = function () {\n
return $input.val();\n
};\n
\n
this.applyValue = function (item, state) {\n
item[args.column.field] = state;\n
};\n
\n
this.isValueChanged = function () {\n
return (!($input.val() == "" && defaultValue == null)) && ($input.val() != defaultValue);\n
};\n
\n
this.validate = function () {\n
return {\n
valid: true,\n
msg: null\n
};\n
};\n
\n
this.init();\n
}\n
})(jQuery);\n
]]></string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>12379</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>slick.editors.js</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271182.03</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>slick.formatters.js</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>application/javascript</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="cdata"><![CDATA[
/***\n
* Contains basic SlickGrid formatters.\n
* \n
* NOTE: These are merely examples. You will most likely need to implement something more\n
* robust/extensible/localizable/etc. for your use!\n
* \n
* @module Formatters\n
* @namespace Slick\n
*/\n
\n
(function ($) {\n
// register namespace\n
$.extend(true, window, {\n
"Slick": {\n
"Formatters": {\n
"PercentComplete": PercentCompleteFormatter,\n
"PercentCompleteBar": PercentCompleteBarFormatter,\n
"YesNo": YesNoFormatter,\n
"Checkmark": CheckmarkFormatter\n
}\n
}\n
});\n
\n
function PercentCompleteFormatter(row, cell, value, columnDef, dataContext) {\n
if (value == null || value === "") {\n
return "-";\n
} else if (value < 50) {\n
return "<span style=\'color:red;font-weight:bold;\'>" + value + "%</span>";\n
} else {\n
return "<span style=\'color:green\'>" + value + "%</span>";\n
}\n
}\n
\n
function PercentCompleteBarFormatter(row, cell, value, columnDef, dataContext) {\n
if (value == null || value === "") {\n
return "";\n
}\n
\n
var color;\n
\n
if (value < 30) {\n
color = "red";\n
} else if (value < 70) {\n
color = "silver";\n
} else {\n
color = "green";\n
}\n
\n
return "<span class=\'percent-complete-bar\' style=\'background:" + color + ";width:" + value + "%\'></span>";\n
}\n
\n
function YesNoFormatter(row, cell, value, columnDef, dataContext) {\n
return value ? "Yes" : "No";\n
}\n
\n
function CheckmarkFormatter(row, cell, value, columnDef, dataContext) {\n
return value ? "<img src=\'../images/tick.png\'>" : "";\n
}\n
})(jQuery);\n
]]></string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>1572</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>slick.formatters.js</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271255.62</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>slick.grid.css</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/css</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string>/*\n
IMPORTANT:\n
In order to preserve the uniform grid appearance, all cell styles need to have padding, margin and border sizes.\n
No built-in (selected, editable, highlight, flashing, invalid, loading, :focus) or user-specified CSS\n
classes should alter those!\n
*/\n
\n
.slick-header.ui-state-default, .slick-headerrow.ui-state-default {\n
width: 100%;\n
overflow: hidden;\n
border-left: 0px;\n
}\n
\n
.slick-header-columns, .slick-headerrow-columns {\n
position: relative;\n
white-space: nowrap;\n
cursor: default;\n
overflow: hidden;\n
}\n
\n
.slick-header-column.ui-state-default {\n
position: relative;\n
display: inline-block;\n
overflow: hidden;\n
-o-text-overflow: ellipsis;\n
text-overflow: ellipsis;\n
height: 16px;\n
line-height: 16px;\n
margin: 0;\n
padding: 4px;\n
border-right: 1px solid silver;\n
border-left: 0px;\n
border-top: 0px;\n
border-bottom: 0px;\n
float: left;\n
}\n
\n
.slick-headerrow-column.ui-state-default {\n
padding: 4px;\n
}\n
\n
.slick-header-column-sorted {\n
font-style: italic;\n
}\n
\n
.slick-sort-indicator {\n
display: inline-block;\n
width: 8px;\n
height: 5px;\n
margin-left: 4px;\n
margin-top: 6px;\n
float: left;\n
}\n
\n
.slick-sort-indicator-desc {\n
background: url(images/sort-desc.gif);\n
}\n
\n
.slick-sort-indicator-asc {\n
background: url(images/sort-asc.gif);\n
}\n
\n
.slick-resizable-handle {\n
position: absolute;\n
font-size: 0.1px;\n
display: block;\n
cursor: col-resize;\n
width: 4px;\n
right: 0px;\n
top: 0;\n
height: 100%;\n
}\n
\n
.slick-sortable-placeholder {\n
background: silver;\n
}\n
\n
.grid-canvas {\n
position: relative;\n
outline: 0;\n
}\n
\n
.slick-row.ui-widget-content, .slick-row.ui-state-active {\n
position: absolute;\n
border: 0px;\n
width: 100%;\n
}\n
\n
.slick-cell, .slick-headerrow-column {\n
position: absolute;\n
border: 1px solid transparent;\n
border-right: 1px dotted silver;\n
border-bottom-color: silver;\n
overflow: hidden;\n
-o-text-overflow: ellipsis;\n
text-overflow: ellipsis;\n
vertical-align: middle;\n
z-index: 1;\n
padding: 1px 2px 2px 1px;\n
margin: 0;\n
white-space: nowrap;\n
cursor: default;\n
}\n
\n
.slick-group {\n
}\n
\n
.slick-group-toggle {\n
display: inline-block;\n
}\n
\n
.slick-cell.highlighted {\n
background: lightskyblue;\n
background: rgba(0, 0, 255, 0.2);\n
-webkit-transition: all 0.5s;\n
-moz-transition: all 0.5s;\n
-o-transition: all 0.5s;\n
transition: all 0.5s;\n
}\n
\n
.slick-cell.flashing {\n
border: 1px solid red !important;\n
}\n
\n
.slick-cell.editable {\n
z-index: 11;\n
overflow: visible;\n
background: white;\n
border-color: black;\n
border-style: solid;\n
}\n
\n
.slick-cell:focus {\n
outline: none;\n
}\n
\n
.slick-reorder-proxy {\n
display: inline-block;\n
background: blue;\n
opacity: 0.15;\n
filter: alpha(opacity = 15);\n
cursor: move;\n
}\n
\n
.slick-reorder-guide {\n
display: inline-block;\n
height: 2px;\n
background: blue;\n
opacity: 0.7;\n
filter: alpha(opacity = 70);\n
}\n
\n
.slick-selection {\n
z-index: 10;\n
position: absolute;\n
border: 2px dashed black;\n
}\n
</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>2872</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>slick.grid.css</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271199.5</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>slick.groupitemmetadataprovider.js</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>application/javascript</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="cdata"><![CDATA[
(function ($) {\n
$.extend(true, window, {\n
Slick: {\n
Data: {\n
GroupItemMetadataProvider: GroupItemMetadataProvider\n
}\n
}\n
});\n
\n
\n
/***\n
* Provides item metadata for group (Slick.Group) and totals (Slick.Totals) rows produced by the DataView.\n
* This metadata overrides the default behavior and formatting of those rows so that they appear and function\n
* correctly when processed by the grid.\n
*\n
* This class also acts as a grid plugin providing event handlers to expand & collapse groups.\n
* If "grid.registerPlugin(...)" is not called, expand & collapse will not work.\n
*\n
* @class GroupItemMetadataProvider\n
* @module Data\n
* @namespace Slick.Data\n
* @constructor\n
* @param options\n
*/\n
function GroupItemMetadataProvider(options) {\n
var _grid;\n
var _defaults = {\n
groupCssClass: "slick-group",\n
groupTitleCssClass: "slick-group-title",\n
totalsCssClass: "slick-group-totals",\n
groupFocusable: true,\n
totalsFocusable: false,\n
toggleCssClass: "slick-group-toggle",\n
toggleExpandedCssClass: "expanded",\n
toggleCollapsedCssClass: "collapsed",\n
enableExpandCollapse: true,\n
groupFormatter: defaultGroupCellFormatter,\n
totalsFormatter: defaultTotalsCellFormatter\n
};\n
\n
options = $.extend(true, {}, _defaults, options);\n
\n
\n
function defaultGroupCellFormatter(row, cell, value, columnDef, item) {\n
if (!options.enableExpandCollapse) {\n
return item.title;\n
}\n
\n
var indentation = item.level * 15 + "px";\n
\n
return "<span class=\'" + options.toggleCssClass + " " +\n
(item.collapsed ? options.toggleCollapsedCssClass : options.toggleExpandedCssClass) +\n
"\' style=\'margin-left:" + indentation +"\'>" +\n
"</span>" +\n
"<span class=\'" + options.groupTitleCssClass + "\' level=\'" + item.level + "\'>" +\n
item.title +\n
"</span>";\n
}\n
\n
function defaultTotalsCellFormatter(row, cell, value, columnDef, item) {\n
return (columnDef.groupTotalsFormatter && columnDef.groupTotalsFormatter(item, columnDef)) || "";\n
}\n
\n
\n
function init(grid) {\n
_grid = grid;\n
_grid.onClick.subscribe(handleGridClick);\n
_grid.onKeyDown.subscribe(handleGridKeyDown);\n
\n
}\n
\n
function destroy() {\n
if (_grid) {\n
_grid.onClick.unsubscribe(handleGridClick);\n
_grid.onKeyDown.unsubscribe(handleGridKeyDown);\n
}\n
}\n
\n
function handleGridClick(e, args) {\n
var item = this.getDataItem(args.row);\n
if (item && item instanceof Slick.Group && $(e.target).hasClass(options.toggleCssClass)) {\n
var range = _grid.getRenderedRange();\n
this.getData().setRefreshHints({\n
ignoreDiffsBefore: range.top,\n
ignoreDiffsAfter: range.bottom\n
});\n
\n
if (item.collapsed) {\n
this.getData().expandGroup(item.groupingKey);\n
} else {\n
this.getData().collapseGroup(item.groupingKey);\n
}\n
\n
e.stopImmediatePropagation();\n
e.preventDefault();\n
}\n
}\n
\n
// TODO: add -/+ handling\n
function handleGridKeyDown(e, args) {\n
if (options.enableExpandCollapse && (e.which == $.ui.keyCode.SPACE)) {\n
var activeCell = this.getActiveCell();\n
if (activeCell) {\n
var item = this.getDataItem(activeCell.row);\n
if (item && item instanceof Slick.Group) {\n
var range = _grid.getRenderedRange();\n
this.getData().setRefreshHints({\n
ignoreDiffsBefore: range.top,\n
ignoreDiffsAfter: range.bottom\n
});\n
\n
if (item.collapsed) {\n
this.getData().expandGroup(item.groupingKey);\n
} else {\n
this.getData().collapseGroup(item.groupingKey);\n
}\n
\n
e.stopImmediatePropagation();\n
e.preventDefault();\n
}\n
}\n
}\n
}\n
\n
function getGroupRowMetadata(item) {\n
return {\n
selectable: false,\n
focusable: options.groupFocusable,\n
cssClasses: options.groupCssClass,\n
columns: {\n
0: {\n
colspan: "*",\n
formatter: options.groupFormatter,\n
editor: null\n
}\n
}\n
};\n
}\n
\n
function getTotalsRowMetadata(item) {\n
return {\n
selectable: false,\n
focusable: options.totalsFocusable,\n
cssClasses: options.totalsCssClass,\n
formatter: options.totalsFormatter,\n
editor: null\n
};\n
}\n
\n
\n
return {\n
"init": init,\n
"destroy": destroy,\n
"getGroupRowMetadata": getGroupRowMetadata,\n
"getTotalsRowMetadata": getTotalsRowMetadata\n
};\n
}\n
})(jQuery);\n
]]></string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>4659</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>slick.groupitemmetadataprovider.js</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271194.11</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>slick.remotemodel.js</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>application/javascript</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="cdata"><![CDATA[
(function ($) {\n
/***\n
* A sample AJAX data store implementation.\n
* Right now, it\'s hooked up to load Hackernews stories, but can\n
* easily be extended to support any JSONP-compatible backend that accepts paging parameters.\n
*/\n
function RemoteModel() {\n
// private\n
var PAGESIZE = 50;\n
var data = {length: 0};\n
var searchstr = "";\n
var sortcol = null;\n
var sortdir = 1;\n
var h_request = null;\n
var req = null; // ajax request\n
\n
// events\n
var onDataLoading = new Slick.Event();\n
var onDataLoaded = new Slick.Event();\n
\n
\n
function init() {\n
}\n
\n
\n
function isDataLoaded(from, to) {\n
for (var i = from; i <= to; i++) {\n
if (data[i] == undefined || data[i] == null) {\n
return false;\n
}\n
}\n
\n
return true;\n
}\n
\n
\n
function clear() {\n
for (var key in data) {\n
delete data[key];\n
}\n
data.length = 0;\n
}\n
\n
\n
function ensureData(from, to) {\n
if (req) {\n
req.abort();\n
for (var i = req.fromPage; i <= req.toPage; i++)\n
data[i * PAGESIZE] = undefined;\n
}\n
\n
if (from < 0) {\n
from = 0;\n
}\n
\n
if (data.length > 0) {\n
to = Math.min(to, data.length - 1);\n
}\n
\n
var fromPage = Math.floor(from / PAGESIZE);\n
var toPage = Math.floor(to / PAGESIZE);\n
\n
while (data[fromPage * PAGESIZE] !== undefined && fromPage < toPage)\n
fromPage++;\n
\n
while (data[toPage * PAGESIZE] !== undefined && fromPage < toPage)\n
toPage--;\n
\n
if (fromPage > toPage || ((fromPage == toPage) && data[fromPage * PAGESIZE] !== undefined)) {\n
// TODO: look-ahead\n
onDataLoaded.notify({from: from, to: to});\n
return;\n
}\n
\n
var url = "http://api.thriftdb.com/api.hnsearch.com/items/_search?filter[fields][type][]=submission&q=" + searchstr + "&start=" + (fromPage * PAGESIZE) + "&limit=" + (((toPage - fromPage) * PAGESIZE) + PAGESIZE);\n
\n
if (sortcol != null) {\n
url += ("&sortby=" + sortcol + ((sortdir > 0) ? "+asc" : "+desc"));\n
}\n
\n
if (h_request != null) {\n
clearTimeout(h_request);\n
}\n
\n
h_request = setTimeout(function () {\n
for (var i = fromPage; i <= toPage; i++)\n
data[i * PAGESIZE] = null; // null indicates a \'requested but not available yet\'\n
\n
onDataLoading.notify({from: from, to: to});\n
\n
req = $.jsonp({\n
url: url,\n
callbackParameter: "callback",\n
cache: true,\n
success: onSuccess,\n
error: function () {\n
onError(fromPage, toPage)\n
}\n
});\n
req.fromPage = fromPage;\n
req.toPage = toPage;\n
}, 50);\n
}\n
\n
\n
function onError(fromPage, toPage) {\n
alert("error loading pages " + fromPage + " to " + toPage);\n
}\n
\n
function onSuccess(resp) {\n
var from = resp.request.start, to = from + resp.results.length;\n
data.length = Math.min(parseInt(resp.hits),1000); // limitation of the API\n
\n
for (var i = 0; i < resp.results.length; i++) {\n
var item = resp.results[i].item;\n
\n
// Old IE versions can\'t parse ISO dates, so change to universally-supported format.\n
item.create_ts = item.create_ts.replace(/^(\\d+)-(\\d+)-(\\d+)T(\\d+:\\d+:\\d+)Z$/, "$2/$3/$1 $4 UTC"); \n
item.create_ts = new Date(item.create_ts);\n
\n
data[from + i] = item;\n
data[from + i].index = from + i;\n
}\n
\n
req = null;\n
\n
onDataLoaded.notify({from: from, to: to});\n
}\n
\n
\n
function reloadData(from, to) {\n
for (var i = from; i <= to; i++)\n
delete data[i];\n
\n
ensureData(from, to);\n
}\n
\n
\n
function setSort(column, dir) {\n
sortcol = column;\n
sortdir = dir;\n
clear();\n
}\n
\n
function setSearch(str) {\n
searchstr = str;\n
clear();\n
}\n
\n
\n
init();\n
\n
return {\n
// properties\n
"data": data,\n
\n
// methods\n
"clear": clear,\n
"isDataLoaded": isDataLoaded,\n
"ensureData": ensureData,\n
"reloadData": reloadData,\n
"setSort": setSort,\n
"setSearch": setSearch,\n
\n
// events\n
"onDataLoading": onDataLoading,\n
"onDataLoaded": onDataLoaded\n
};\n
}\n
\n
// Slick.Data.RemoteModel\n
$.extend(true, window, { Slick: { Data: { RemoteModel: RemoteModel }}});\n
})(jQuery);\n
]]></string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>4276</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>slick.remotemodel.js</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts41271194.47</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>slickgrid.html</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="cdata"><![CDATA[
<!DOCTYPE html>\n
<html>\n
<head>\n
<meta http-equiv="X-UA-Compatible" content="IE=Edge">\n
<meta charset="utf-8">\n
\n
<title>Handsontable Spreadsheet</title>\n
<link rel="stylesheet" href="slick.grid.css" type="text/css"/>\n
<link rel="stylesheet" href="css/smoothness/jquery-ui-1.8.16.custom.css" type="text/css"/>\n
<link rel="http://www.renderjs.org/rel/interface" href="../dist/interface/spreadsheet_interface.html"></link>\n
\n
<script src="../../dist/jquery.js"></script>\n
<script src="../../../node_modules/rsvp/dist/rsvp-2.0.4.js"></script>\n
<script src="../../dist/renderjs.js"></script>\n
\n
<script src="lib/firebugx.js"></script>\n
<script src="lib/jquery-ui-1.8.16.custom.min.js"></script>\n
<script src="lib/jquery.event.drag-2.2.js"></script>\n
\n
<script src="slick.core.js"></script>\n
<script src="plugins/slick.cellrangedecorator.js"></script>\n
<script src="plugins/slick.cellrangeselector.js"></script>\n
<script src="plugins/slick.cellselectionmodel.js"></script>\n
<script src="slick.formatters.js"></script>\n
<script src="slick.editors.js"></script>\n
<script src="slick.grid.js"></script>\n
<script src="gadget_slickgrid.js" type="text/javascript"></script>\n
\n
</head>\n
<body>\n
<div id="myGrid" style="width:900px;height:700px;"></div>\n
</body>\n
</html>\n
]]></string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>1318</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>slickgrid.html</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment