diff --git a/config/siteMap.inc b/config/siteMap.inc index dbd0dbb..1112103 100644 --- a/config/siteMap.inc +++ b/config/siteMap.inc @@ -34,6 +34,9 @@ $default->siteMap = new SiteMap(false); $default->siteMap->addPage("login", "/login.php", "General", None, ""); // dashboard +$default->siteMap->addPage("ajaxdashboard", "/dashboard2.php", "General", Guest, "dashboard2"); + +// old dashboard $default->siteMap->addPage("dashboard", "/dashboard.php", "General", Guest, "dashboard"); // dashboard news diff --git a/dashboard.php b/dashboard.php index 20561ca..579df2d 100644 --- a/dashboard.php +++ b/dashboard.php @@ -85,7 +85,7 @@ class DashboardDispatcher extends KTStandardDispatcher { $oTemplating =& KTTemplating::getSingleton(); - $oTemplate = $oTemplating->loadTemplate("kt3/dashboard"); + $oTemplate = $oTemplating->loadTemplate("kt3/olddashboard"); $aTemplateData = array( "context" => $this, "dashlets_left" => $aDashletsLeft, diff --git a/dashboard2.php b/dashboard2.php new file mode 100644 index 0000000..b33cdc0 --- /dev/null +++ b/dashboard2.php @@ -0,0 +1,133 @@ +, Jam Warehouse (Pty) Ltd, South Africa + */ + +// main library routines and defaults +require_once("config/dmsDefaults.php"); +require_once(KT_LIB_DIR . "/unitmanagement/Unit.inc"); + +require_once(KT_LIB_DIR . "/dashboard/dashletregistry.inc.php"); +require_once(KT_LIB_DIR . "/dashboard/dashlet.inc.php"); +require_once(KT_LIB_DIR . "/templating/templating.inc.php"); +require_once(KT_LIB_DIR . "/templating/kt3template.inc.php"); +require_once(KT_LIB_DIR . "/dispatcher.inc.php"); + +require_once(KT_LIB_DIR . "/dashboard/DashletDisables.inc.php"); + +$sectionName = "dashboard"; + +class DashboardDispatcher extends KTStandardDispatcher { + + var $notifications = array(); + var $sHelpPage = 'ktcore/dashboard.html'; + + function DashboardDispatcher() { + $this->aBreadcrumbs = array( + array('action' => 'dashboard', 'name' => _kt('Dashboard')), + ); + return parent::KTStandardDispatcher(); + } + function do_main() { + $this->oPage->setShowPortlets(false); + // retrieve action items for the user. + // FIXME what is the userid? + + + $oDashletRegistry =& KTDashletRegistry::getSingleton(); + $aDashlets = $oDashletRegistry->getDashlets($this->oUser); + + $this->sSection = "dashboard"; + $this->oPage->setBreadcrumbDetails(_kt("Home")); + $this->oPage->title = _kt("Dashboard"); + + // simplistic improvement over the standard rendering: float half left + // and half right. +Involves no JS -can leave lots of white-space at the bottom. + + $aDashletsLeft = array(); + $aDashletsRight = array(); + + $i = 0; + foreach ($aDashlets as $oDashlet) { + if ($i == 0) { $aDashletsLeft[] = $oDashlet; } + else {$aDashletsRight[] = $oDashlet; } + $i += 1; + $i %= 2; + } + + $this->oPage->requireJSResource('resources/js/dashboard.js'); + + $oTemplating =& KTTemplating::getSingleton(); + $oTemplate = $oTemplating->loadTemplate("kt3/dashboard"); + $aTemplateData = array( + "context" => $this, + "dashlets_left" => $aDashletsLeft, + "dashlets_right" => $aDashletsRight, + ); + return $oTemplate->render($aTemplateData); + } + + // return some kind of ID for each dashlet + // currently uses the class name + function _getDashletId($oDashlet) { + return get_class($oDashlet); + } + + // disable a dashlet. + // FIXME this very slightly violates the separation of concerns, but its not that flagrant. + function do_disableDashlet() { + $sNamespace = KTUtil::arrayGet($_REQUEST, 'fNamespace'); + $iUserId = $this->oUser->getId(); + + if (empty($sNamespace)) { + $this->errorRedirectToMain('No dashlet specified.'); + exit(0); + } + + // do the "delete" + + $this->startTransaction(); + $aParams = array('sNamespace' => $sNamespace, 'iUserId' => $iUserId); + $oDD = KTDashletDisable::createFromArray($aParams); + if (PEAR::isError($oDD)) { + $this->errorRedirectToMain('Failed to disable the dashlet.'); + } + + $this->commitTransaction(); + $this->successRedirectToMain('Dashlet disabled.'); + } +} + +$oDispatcher = new DashboardDispatcher(); +$oDispatcher->dispatch(); + +?> + diff --git a/lib/templating/kt3template.inc.php b/lib/templating/kt3template.inc.php index 46011f3..79afadf 100644 --- a/lib/templating/kt3template.inc.php +++ b/lib/templating/kt3template.inc.php @@ -94,15 +94,22 @@ class KTPage { $this->requireCSSResource("resources/css/kt-ie-icons.css", true); /* default js files initialisation */ $aJS = Array(); - $aJS[] = 'thirdpartyjs/MochiKit/Base.js'; - $aJS[] = 'thirdpartyjs/MochiKit/Iter.js'; - $aJS[] = 'thirdpartyjs/MochiKit/DOM.js'; - $aJS[] = 'thirdpartyjs/MochiKit/Logging.js'; - $aJS[] = 'thirdpartyjs/MochiKit/Async.js'; - $aJS[] = 'thirdpartyjs/MochiKit/Signal.js'; - $aJS[] = 'resources/js/kt-utility.js'; - //$aJS[] = 'resources/js/translate.js'; - $aJS[] = 'presentation/i18nJavascript.php'; + $aJS[] = 'thirdpartyjs/MochiKit/MochiKit.js'; + $aJS[] = 'thirdpartyjs/MochiKit/New.js'; + $aJS[] = 'thirdpartyjs/MochiKit/DragAndDrop.js'; + $aJS[] = 'thirdpartyjs/MochiKit/Sortable.js'; + $aJS[] = 'resources/js/kt-utility.js'; + $aJS[] = 'presentation/i18nJavascript.php'; + + + //$aJS[] = 'thirdpartyjs/MochiKit/Iter.js'; + //$aJS[] = 'thirdpartyjs/MochiKit/DOM.js'; + //$aJS[] = 'thirdpartyjs/MochiKit/Logging.js'; + //$aJS[] = 'thirdpartyjs/MochiKit/Async.js'; + //$aJS[] = 'thirdpartyjs/MochiKit/Signal.js'; + //$aJS[] = 'thirdpartyjs/MochiKit/.js'; + //$aJS[] = 'resources/js/translate.js'; + $this->requireJSResources($aJS); // this is horrid, but necessary. @@ -121,7 +128,8 @@ class KTPage { function initMenu() { // FIXME: we lost the getDefaultAction stuff - do we care? // note that key == action. this is _important_, since we crossmatch the breadcrumbs against this for "active" - $this->menu = array("dashboard" => $this->_actionHelper(array("name" => _kt("Dashboard"), "action" => "dashboard", "active" => 0)), + $this->menu = array("dashboard" => $this->_actionHelper(array("name" => _kt("Dashboard"), "action" => "ajaxdashboard", "active" => 0)), + "olddashboard" => $this->_actionHelper(array("name" => _kt("Old Dashboard"), "action" => "dashboard", "active" => 0)), "browse" => $this->_actionHelper(array("name" => _kt("Browse Documents"), "action" => "browse", "active" => 0)), "administration" => $this->_actionHelper(array("name" => _kt("DMS Administration"), "action" => "administration", "active" => 0)),); } diff --git a/login.php b/login.php index 46793f6..1f82983 100644 --- a/login.php +++ b/login.php @@ -73,8 +73,8 @@ class LoginPageDispatcher extends KTDispatcher { function performLogin(&$oUser) { if (!is_a($oUser, 'User')) { - var_dump($oUser); - var_dump(PEAR::raiseError()); + #var_dump($oUser); + #var_dump(PEAR::raiseError()); } $session = new Session(); $sessionID = $session->create($oUser); diff --git a/plugins/ktstandard/KTAdminVersionPlugin.php b/plugins/ktstandard/KTAdminVersionPlugin.php index 69c86b3..bea0efd 100644 --- a/plugins/ktstandard/KTAdminVersionPlugin.php +++ b/plugins/ktstandard/KTAdminVersionPlugin.php @@ -27,7 +27,7 @@ require_once(KT_LIB_DIR . '/plugins/plugin.inc.php'); require_once(KT_LIB_DIR . '/plugins/pluginregistry.inc.php'); require_once(KT_LIB_DIR . '/dashboard/dashlet.inc.php'); -define('KT_VERSION_URL', 'http://www.ktdms.com/kt_versions'); +define('KT_VERSION_URL', 'http://www.knowledgetree.com/kt_versions'); class AdminVersionDashlet extends KTBaseDashlet { var $oUser; diff --git a/resources/css/kt-framing.css b/resources/css/kt-framing.css index 40a2800..418b1ff 100644 --- a/resources/css/kt-framing.css +++ b/resources/css/kt-framing.css @@ -398,9 +398,9 @@ a.main_nav_item { #content .form_actions input { - border: 1px solid #888; - background: #eee; - color: black; + border: 1px solid #ccc; + background: #fdfdfd; + color: #333; font-weight: normal; } @@ -676,6 +676,7 @@ a.main_nav_item { width: 100%; white-space: nowrap !important; border: 1px solid #ccc; + -moz-border-radius: 1em; } .kt_collection.narrow { @@ -802,6 +803,23 @@ a.main_nav_item { } +.ktBlock +{ + padding: 0 1em; + border: 1px solid #c5c5c5; + background-color: #fcfcfc; + margin: 0.5em 0; +} + +.ktInfo, .ktError, .ktBlock +{ + -moz-border-radius: 15px; + background-image: url(../../resources/graphics/dashlet-gradient.png); + background-repeat: no-repeat; +} + + + /** portlet stuff. */ #portlet-search-text { border: 1px solid black; @@ -1153,3 +1171,107 @@ hr { .browse_body { padding: 0; } + + + +/* -------------------------- dashboard ------------------------ */ + +.dashboard_block_icons +{ + text-align: right; + margin-bottom: -3em; + margin-right: 1em; +} + +.dashboard_block_handle +{ +} + +.dashboard_block.rolled-up .dashboard_block_body +{ + display: none; +} + +/* actions */ + +#content .dashboard_block .action +{ + padding: 1em 0.5em; + border-bottom-width: 0px; + background-repeat: no-repeat; + background-position: center center; +} + +#content .dashboard_block .action:hover +{ + border-bottom-width: 0px; +} + +#content .dashboard_block .action_rollup +{ + background-image: url(../graphics/bullet_toggle_minus.png); +} + +#content .dashboard_block.rolled-up .action_rollup +{ + background-image: url(../graphics/bullet_toggle_plus.png); +} + +#content .dashboard_block .action_close +{ + background-image: url(../graphics/delete.gif); +} + +/* action effects */ +#content .dashboard_block.rolled-up h2 +{ + border-bottom-width: 0px; + padding-bottom: 0px; +} + + +#content .dashboard_block.closed +{ + display: none; +} + +.addDialogScreen +{ + position: absolute; + display: block; + top: 0px; + left: 0px; + width: 100%; + height: 100%; +/* background-color: white; + opacity: 0.5; */ + text-align: center; +} + +.addDialog +{ + display: block; + border: 1px solid #ccc; + background-color: white; + padding: 2em; + margin: 10% 30%; + opacity: 1; + overflow: hidden; + text-align: left; +} + + +.addDialog .dashletLink +{ + color: #666; + text-decoration: none; + display: block; +} + +body #content #add_dashlet +{ + display: none; + text-decoration: none; + border-width: 0px; + +} diff --git a/resources/css/kt-login.css b/resources/css/kt-login.css index a522648..46e3293 100644 --- a/resources/css/kt-login.css +++ b/resources/css/kt-login.css @@ -20,6 +20,7 @@ margin-right: auto; text-align: left; background: white url(../graphics/ktbg.png) bottom right no-repeat; + -moz-border-radius: 1em; } #loginbox.hasDisclaimer { diff --git a/resources/graphics/bullet_toggle_minus.png b/resources/graphics/bullet_toggle_minus.png new file mode 100644 index 0000000..efcc01e --- /dev/null +++ b/resources/graphics/bullet_toggle_minus.png diff --git a/resources/graphics/bullet_toggle_plus.png b/resources/graphics/bullet_toggle_plus.png new file mode 100644 index 0000000..72a64d9 --- /dev/null +++ b/resources/graphics/bullet_toggle_plus.png diff --git a/resources/graphics/dashlet-gradient.png b/resources/graphics/dashlet-gradient.png new file mode 100644 index 0000000..615119c --- /dev/null +++ b/resources/graphics/dashlet-gradient.png diff --git a/resources/graphics/leaves.png b/resources/graphics/leaves.png new file mode 100644 index 0000000..d1e713f --- /dev/null +++ b/resources/graphics/leaves.png diff --git a/resources/js/#jsonlookup.js# b/resources/js/#jsonlookup.js# new file mode 100644 index 0000000..ffe31ed --- /dev/null +++ b/resources/js/#jsonlookup.js# @@ -0,0 +1,275 @@ +var _aLookupWidgets = {}; + +function getJSONLookupWidget(name) { + if(!isUndefinedOrNull(_aLookupWidgets[name])) { + return _aLookupWidgets[name]; + } else { + return false; + } +} + +function JSONLookupWidget() { +} + +JSONLookupWidget.prototype = { + + /* bind_add and bind_remove are functions to be called with the key:value's of selected items */ + + 'initialize' : function(name, action) { + bindMethods(this); + + this.sName = name; + this.sAction = action; + + + this.oSelectAvail = $('select_' + name + '_avail'); + this.oSelectAssigned = $('select_' + name + '_assigned'); + this.oFilterAvail = $('filter_' + name + '_avail'); + this.oFilterAssigned = $('filter_' + name + '_assigned'); + + this.savedFilter = this.oFilterAvail.value; + this.savedSelector = this.oFilterAssigned.value; + this.filterTimer = null; + + this.aItemsAdded = []; + this.aItemsRemoved = []; + + connect(this.oFilterAvail, 'onkeyup', this, 'onchangeFilter'); + connect(this.oFilterAssigned, 'onkeyup', this, 'onchangeSelector'); + connect(name + '_add', 'onclick', this, 'onclickAdd'); + connect(name + '_remove', 'onclick', this, 'onclickRemove'); + connect(name + '_show_all', 'onclick', this, 'onclickShowAll'); + + this.triggers = {}; + this.triggers['add'] = null; + this.triggers['remove'] = null; + + this.initialValuesLoaded = false; + var d = this.getValues(); + d.addCallback(this.postInitialize); + }, + + 'addTrigger' : function(event, func) { + this.triggers[event] = func; + }, + + + // values handling + + 'getValues' : function(all) { + var act = this.sAction; + if(!isUndefinedOrNull(all)) { + act += '&' + queryString({'filter' : '%'}); + } else if(this.savedFilter) { + act += '&' + queryString({'filter' : this.savedFilter}); + } else if(!this.initialValuesLoaded) { + act += '&' + queryString({'selected' : '1'}); + } + + var d = loadJSONDoc(act); + d.addErrback(this.errGetValues); + d.addCallback(checkKTError); + d.addCallback(this.saveValues); + d.addCallback(this.renderValues); + return d; + }, + + 'errGetValues' : function(res) { + alert('There was an error retrieving data. Please check connectivity and try again.'); + this.oValues = {'off':'-- Error fetching values --'}; + this.renderValues(); + }, + + 'saveValues' : function(res) { + this.oValues = res; + return res; + }, + + 'renderValues' : function() { + var aOptions = []; + var bSelFound = false; + for(var k in this.oValues) { + var found = false; + for(var i=0; iAdd Dashlet +
{foreach item=oDashlet from=$dashlets_left} -
+
+ +
+  +  +
+ {$oDashlet->render()}
{/foreach} +
 
{foreach item=oDashlet from=$dashlets_right} -
+
+ +
+  +  +
+ {$oDashlet->render()}
{/foreach} + +
 
diff --git a/templates/kt3/olddashboard.smarty b/templates/kt3/olddashboard.smarty new file mode 100644 index 0000000..a989a0c --- /dev/null +++ b/templates/kt3/olddashboard.smarty @@ -0,0 +1,19 @@ +
+{foreach item=oDashlet from=$dashlets_left} +
+{$oDashlet->render()} +
+{/foreach} +
+ +
+{foreach item=oDashlet from=$dashlets_right} +
+{$oDashlet->render()} +
+{/foreach} +
+ + + + diff --git a/templates/ktcore/dashlets/checkedout.smarty b/templates/ktcore/dashlets/checkedout.smarty index e26d654..403fb93 100644 --- a/templates/ktcore/dashlets/checkedout.smarty +++ b/templates/ktcore/dashlets/checkedout.smarty @@ -1,4 +1,7 @@ -

{i18n}Your Checked-out Documents{/i18n}

+
+

{i18n}Your Checked-out Documents{/i18n}

+ +

{i18n}A checked-out document may not be modified by others. Please ensure that you check-in your documents to the repository as soon as you have finished working with them.{/i18n}

{if (!empty($documents))}
@@ -9,3 +12,5 @@ {else}

{i18n}You have no documents which are currently checked out.{/i18n}

{/if} +
+
\ No newline at end of file diff --git a/templates/ktcore/dashlets/indexer_status.smarty b/templates/ktcore/dashlets/indexer_status.smarty index f87cdae..85dd0d1 100644 --- a/templates/ktcore/dashlets/indexer_status.smarty +++ b/templates/ktcore/dashlets/indexer_status.smarty @@ -1,5 +1,7 @@ -

{i18n}Indexer Status{/i18n}

+
+

{i18n}Indexer Status{/i18n}

+
{if $no_transforms}

{i18n}Warning:{/i18n} {i18n}There are currently no active indexers registered. No content indexing will occur.{/i18n}

@@ -32,3 +34,5 @@ no active indexers registered. No content indexing will occur.{/i18n}

{/if} {/if} +
+
\ No newline at end of file diff --git a/templates/ktcore/dashlets/kt3release.smarty b/templates/ktcore/dashlets/kt3release.smarty index 515582b..cb3b934 100644 --- a/templates/ktcore/dashlets/kt3release.smarty +++ b/templates/ktcore/dashlets/kt3release.smarty @@ -1,5 +1,6 @@ -

{$title}

- +
+

{$title}

+
{$body} {if $can_edit} @@ -8,4 +9,6 @@ {i18n}Edit this introduction.{/i18n} {if $help_id}| {i18n}Use the standard introduction.{/i18n}

{/if} -{/if} \ No newline at end of file +{/if} +
+
\ No newline at end of file diff --git a/templates/ktcore/dashlets/mailserver.smarty b/templates/ktcore/dashlets/mailserver.smarty index a5830a3..044bcaa 100644 --- a/templates/ktcore/dashlets/mailserver.smarty +++ b/templates/ktcore/dashlets/mailserver.smarty @@ -1,7 +1,8 @@ -

{i18n}Mail server status{/i18n}

-
+

{i18n}Mail server status{/i18n}

+ +

{i18n}Email has not been configured on this server. Emailing of documents and sending of notifications are disabled.{/i18n}

@@ -10,3 +11,4 @@ documents and sending of notifications are disabled.{/i18n}

server and the sending address of the KnowledgeTree server.{/i18n}

{/if}
+
\ No newline at end of file diff --git a/templates/ktcore/dashlets/notifications.smarty b/templates/ktcore/dashlets/notifications.smarty index 8cec5eb..e56919d 100644 --- a/templates/ktcore/dashlets/notifications.smarty +++ b/templates/ktcore/dashlets/notifications.smarty @@ -1,4 +1,7 @@ -

{i18n}Items that require your attention{/i18n}

+
+

{i18n}Items that require your attention{/i18n}

+ +
{if (!empty($notifications))}
{foreach item=oNotification from=$notifications} @@ -19,3 +22,5 @@ {else}

{i18n}No items require your attention.{/i18n}

{/if} +
+
\ No newline at end of file diff --git a/templates/ktstandard/adminversion/dashlet.smarty b/templates/ktstandard/adminversion/dashlet.smarty index 9fd5269..c695b35 100644 --- a/templates/ktstandard/adminversion/dashlet.smarty +++ b/templates/ktstandard/adminversion/dashlet.smarty @@ -17,7 +17,9 @@
-

{i18n}New Version Available{/i18n}

+

{i18n}New Version Available{/i18n}

+ +

{i18n}The following upgrade is available:{/i18n} {i18n}The following upgrades are available:{/i18n} @@ -26,3 +28,4 @@

+
\ No newline at end of file diff --git a/templates/ktstandard/searchdashlet/dashlet.smarty b/templates/ktstandard/searchdashlet/dashlet.smarty index b59bb63..f98e0e4 100644 --- a/templates/ktstandard/searchdashlet/dashlet.smarty +++ b/templates/ktstandard/searchdashlet/dashlet.smarty @@ -1,5 +1,8 @@ -

{i18n}Search{/i18n}

+
+

{i18n}Search{/i18n}

+ +
+
\ No newline at end of file diff --git a/thirdpartyjs/MochiKit/DragAndDrop.js b/thirdpartyjs/MochiKit/DragAndDrop.js new file mode 100644 index 0000000..e82b69b --- /dev/null +++ b/thirdpartyjs/MochiKit/DragAndDrop.js @@ -0,0 +1,824 @@ +/*** +MochiKit.DragAndDrop 1.4 + +See for documentation, downloads, license, etc. + +Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) + Mochi-ized By Thomas Herve (_firstname_@nimail.org) + +***/ + +if (typeof(dojo) != 'undefined') { + dojo.provide('MochiKit.DragAndDrop'); + dojo.require('MochiKit.Base'); + dojo.require('MochiKit.DOM'); + dojo.require('MochiKit.Iter'); + dojo.require('MochiKit.Visual'); + dojo.require('MochiKit.Signal'); +} + +if (typeof(JSAN) != 'undefined') { + JSAN.use("MochiKit.Base", []); + JSAN.use("MochiKit.DOM", []); + JSAN.use("MochiKit.Visual", []); + JSAN.use("MochiKit.Iter", []); + JSAN.use("MochiKit.Signal", []); +} + +try { + if (typeof(MochiKit.Base) == 'undefined' || + typeof(MochiKit.DOM) == 'undefined' || + typeof(MochiKit.Visual) == 'undefined' || + typeof(MochiKit.Signal) == 'undefined' || + typeof(MochiKit.Iter) == 'undefined') { + throw ""; + } +} catch (e) { + throw "MochiKit.DragAndDrop depends on MochiKit.Base, MochiKit.DOM, MochiKit.Visual, MochiKit.Signal and MochiKit.Iter!"; +} + +if (typeof(MochiKit.DragAndDrop) == 'undefined') { + MochiKit.DragAndDrop = {}; +} + +MochiKit.DragAndDrop.NAME = 'MochiKit.DragAndDrop'; +MochiKit.DragAndDrop.VERSION = '1.4'; + +MochiKit.DragAndDrop.__repr__ = function () { + return '[' + this.NAME + ' ' + this.VERSION + ']'; +}; + +MochiKit.DragAndDrop.toString = function () { + return this.__repr__(); +}; + +MochiKit.DragAndDrop.EXPORT = [ + "Droppable", + "Draggable" +]; + +MochiKit.DragAndDrop.EXPORT_OK = [ + "Droppables", + "Draggables" +]; + +MochiKit.DragAndDrop.Droppables = { + /*** + + Manage all droppables. Shouldn't be used, use the Droppable object instead. + + ***/ + drops: [], + + remove: function (element) { + this.drops = MochiKit.Base.filter(function (d) { + return d.element != MochiKit.DOM.getElement(element) + }, this.drops); + }, + + register: function (drop) { + this.drops.push(drop); + }, + + unregister: function (drop) { + this.drops = MochiKit.Base.filter(function (d) { + return d != drop; + }, this.drops); + }, + + prepare: function (element) { + MochiKit.Base.map(function (drop) { + if (drop.isAccepted(element)) { + if (drop.options.activeclass) { + MochiKit.DOM.addElementClass(drop.element, + drop.options.activeclass); + } + drop.options.onactive(drop.element, element); + } + }, this.drops); + }, + + findDeepestChild: function (drops) { + deepest = drops[0]; + + for (i = 1; i < drops.length; ++i) { + if (MochiKit.DOM.isParent(drops[i].element, deepest.element)) { + deepest = drops[i]; + } + } + return deepest; + }, + + show: function (point, element) { + if (!this.drops.length) { + return; + } + var affected = []; + + if (this.last_active) { + this.last_active.deactivate(); + } + MochiKit.Iter.forEach(this.drops, function (drop) { + if (drop.isAffected(point, element)) { + affected.push(drop); + } + }); + if (affected.length > 0) { + drop = this.findDeepestChild(affected); + MochiKit.Position.within(drop.element, point.page.x, point.page.y); + drop.options.onhover(element, drop.element, + MochiKit.Position.overlap(drop.options.overlap, drop.element)); + drop.activate(); + } + }, + + fire: function (event, element) { + if (!this.last_active) { + return; + } + MochiKit.Position.prepare(); + + if (this.last_active.isAffected(event.mouse(), element)) { + this.last_active.options.ondrop(element, + this.last_active.element, event); + } + }, + + reset: function (element) { + MochiKit.Base.map(function (drop) { + if (drop.options.activeclass) { + MochiKit.DOM.removeElementClass(drop.element, + drop.options.activeclass); + } + drop.options.ondesactive(drop.element, element); + }, this.drops); + if (this.last_active) { + this.last_active.deactivate(); + } + } +}; + +/** @id MochiKit.DragAndDrop.Droppable */ +MochiKit.DragAndDrop.Droppable = function (element, options) { + this.__init__(element, options); +}; + +MochiKit.DragAndDrop.Droppable.prototype = { + /*** + + A droppable object. Simple use is to create giving an element: + + new MochiKit.DragAndDrop.Droppable('myelement'); + + Generally you'll want to define the 'ondrop' function and maybe the + 'accept' option to filter draggables. + + ***/ + __class__: MochiKit.DragAndDrop.Droppable, + + __init__: function (element, /* optional */options) { + var d = MochiKit.DOM; + var b = MochiKit.Base; + this.element = d.getElement(element); + + d.addElementClass(element, 'droppable'); + + this.options = b.update({ + + /** @id MochiKit.DragAndDrop.greedy */ + greedy: true, + + /** @id MochiKit.DragAndDrop.hoverclass */ + hoverclass: null, + + /** @id MochiKit.DragAndDrop.activeclass */ + activeclass: null, + + /** @id MochiKit.DragAndDrop.hoverfunc */ + hoverfunc: b.noop, + + /** @id MochiKit.DragAndDrop.accept */ + accept: null, + + /** @id MochiKit.DragAndDrop.onactive */ + onactive: b.noop, + + /** @id MochiKit.DragAndDrop.ondesactive */ + ondesactive: b.noop, + + /** @id MochiKit.DragAndDrop.onhover */ + onhover: b.noop, + + /** @id MochiKit.DragAndDrop.ondrop */ + ondrop: b.noop, + + /** @id MochiKit.DragAndDrop.containment */ + containment: [], + tree: false + }, options || {}); + + // cache containers + this.options._containers = []; + b.map(MochiKit.Base.bind(function (c) { + this.options._containers.push(d.getElement(c)); + }, this), this.options.containment); + + d.makePositioned(this.element); // fix IE + + MochiKit.DragAndDrop.Droppables.register(this); + }, + + /** @id MochiKit.DragAndDrop.isContained */ + isContained: function (element) { + if (this.options._containers.length) { + var containmentNode; + if (this.options.tree) { + containmentNode = element.treeNode; + } else { + containmentNode = element.parentNode; + } + return MochiKit.Iter.some(this.options._containers, function (c) { + return containmentNode == c; + }); + } else { + return true; + } + }, + + /** @id MochiKit.DragAndDrop.isAccepted */ + isAccepted: function (element) { + return ((!this.options.accept) || MochiKit.Iter.some( + this.options.accept, function (c) { + return MochiKit.DOM.hasElementClass(element, c); + })); + }, + + /** @id MochiKit.DragAndDrop.isAffected */ + isAffected: function (point, element) { + return ((this.element != element) && + this.isContained(element) && + this.isAccepted(element) && + MochiKit.Position.within(this.element, point.page.x, + point.page.y)); + }, + + /** @id MochiKit.DragAndDrop.deactivate */ + deactivate: function () { + /*** + + A droppable is deactivate when a draggable has been over it and left. + + ***/ + if (this.options.hoverclass) { + MochiKit.DOM.removeElementClass(this.element, + this.options.hoverclass); + } + this.options.hoverfunc(this.element, false); + MochiKit.DragAndDrop.Droppables.last_active = null; + }, + + /** @id MochiKit.DragAndDrop.activate */ + activate: function () { + /*** + + A droppable is active when a draggable is over it. + + ***/ + if (this.options.hoverclass) { + MochiKit.DOM.addElementClass(this.element, this.options.hoverclass); + } + this.options.hoverfunc(this.element, true); + MochiKit.DragAndDrop.Droppables.last_active = this; + }, + + /** @id MochiKit.DragAndDrop.destroy */ + destroy: function () { + /*** + + Delete this droppable. + + ***/ + MochiKit.DragAndDrop.Droppables.unregister(this); + }, + + /** @id MochiKit.DragAndDrop.repr */ + repr: function () { + return '[' + this.__class__.NAME + ", options:" + MochiKit.Base.repr(this.options) + "]"; + } +}; + +MochiKit.DragAndDrop.Draggables = { + /*** + + Manage draggables elements. Not intended to direct use. + + ***/ + drags: [], + + register: function (draggable) { + if (this.drags.length === 0) { + var conn = MochiKit.Signal.connect; + this.eventMouseUp = conn(document, 'onmouseup', this, this.endDrag); + this.eventMouseMove = conn(document, 'onmousemove', this, + this.updateDrag); + this.eventKeypress = conn(document, 'onkeypress', this, + this.keyPress); + } + this.drags.push(draggable); + }, + + unregister: function (draggable) { + this.drags = MochiKit.Base.filter(function (d) { + return d != draggable; + }, this.drags); + if (this.drags.length === 0) { + var disc = MochiKit.Signal.disconnect + disc(this.eventMouseUp); + disc(this.eventMouseMove); + disc(this.eventKeypress); + } + }, + + activate: function (draggable) { + // allows keypress events if window is not currently focused + // fails for Safari + window.focus(); + this.activeDraggable = draggable; + }, + + deactivate: function () { + this.activeDraggable = null; + }, + + updateDrag: function (event) { + if (!this.activeDraggable) { + return; + } + var pointer = event.mouse(); + // Mozilla-based browsers fire successive mousemove events with + // the same coordinates, prevent needless redrawing (moz bug?) + if (this._lastPointer && (MochiKit.Base.repr(this._lastPointer.page) == + MochiKit.Base.repr(pointer.page))) { + return; + } + this._lastPointer = pointer; + this.activeDraggable.updateDrag(event, pointer); + }, + + endDrag: function (event) { + if (!this.activeDraggable) { + return; + } + this._lastPointer = null; + this.activeDraggable.endDrag(event); + this.activeDraggable = null; + }, + + keyPress: function (event) { + if (this.activeDraggable) { + this.activeDraggable.keyPress(event); + } + }, + + notify: function (eventName, draggable, event) { + MochiKit.Signal.signal(this, eventName, draggable, event); + } +}; + +/** @id MochiKit.DragAndDrop.Draggable */ +MochiKit.DragAndDrop.Draggable = function (element, options) { + this.__init__(element, options); +}; + +MochiKit.DragAndDrop.Draggable.prototype = { + /*** + + A draggable object. Simple instantiate : + + new MochiKit.DragAndDrop.Draggable('myelement'); + + ***/ + __class__ : MochiKit.DragAndDrop.Draggable, + + __init__: function (element, /* optional */options) { + var v = MochiKit.Visual; + var b = MochiKit.Base; + options = b.update({ + + /** @id MochiKit.DragAndDrop.handle */ + handle: false, + + /** @id MochiKit.DragAndDrop.starteffect */ + starteffect: function (innerelement) { + this._savedOpacity = MochiKit.Style.getOpacity(innerelement) || 1.0; + new v.Opacity(innerelement, {duration:0.2, from:this._savedOpacity, to:0.7}); + }, + /** @id MochiKit.DragAndDrop.reverteffect */ + reverteffect: function (innerelement, top_offset, left_offset) { + var dur = Math.sqrt(Math.abs(top_offset^2) + + Math.abs(left_offset^2))*0.02; + return new v.Move(innerelement, + {x: -left_offset, y: -top_offset, duration: dur}); + }, + + /** @id MochiKit.DragAndDrop.endeffect */ + endeffect: function (innerelement) { + new v.Opacity(innerelement, {duration:0.2, from:0.7, to:this._savedOpacity}); + }, + + /** @id MochiKit.DragAndDrop.onchange */ + onchange: b.noop, + + /** @id MochiKit.DragAndDrop.zindex */ + zindex: 1000, + + /** @id MochiKit.DragAndDrop.revert */ + revert: false, + + /** @id MochiKit.DragAndDrop.scroll */ + scroll: false, + + /** @id MochiKit.DragAndDrop.scrollSensitivity */ + scrollSensitivity: 20, + + /** @id MochiKit.DragAndDrop.scrollSpeed */ + scrollSpeed: 15, + // false, or xy or [x, y] or function (x, y){return [x, y];} + + /** @id MochiKit.DragAndDrop.snap */ + snap: false + }, options || {}); + + var d = MochiKit.DOM; + this.element = d.getElement(element); + + if (options.handle && (typeof(options.handle) == 'string')) { + this.handle = d.getFirstElementByTagAndClassName(null, + options.handle, this.element); + } + if (!this.handle) { + this.handle = d.getElement(options.handle); + } + if (!this.handle) { + this.handle = this.element; + } + + if (options.scroll && !options.scroll.scrollTo && !options.scroll.outerHTML) { + options.scroll = d.getElement(options.scroll); + this._isScrollChild = MochiKit.DOM.isChildNode(this.element, options.scroll); + } + + d.makePositioned(this.element); // fix IE + + this.delta = this.currentDelta(); + this.options = options; + this.dragging = false; + + this.eventMouseDown = MochiKit.Signal.connect(this.handle, + 'onmousedown', this, this.initDrag); + MochiKit.DragAndDrop.Draggables.register(this); + }, + + /** @id MochiKit.DragAndDrop.destroy */ + destroy: function () { + MochiKit.Signal.disconnect(this.eventMouseDown); + MochiKit.DragAndDrop.Draggables.unregister(this); + }, + + /** @id MochiKit.DragAndDrop.currentDelta */ + currentDelta: function () { + var s = MochiKit.Style.getStyle; + return [ + parseInt(s(this.element, 'left') || '0'), + parseInt(s(this.element, 'top') || '0')]; + }, + + /** @id MochiKit.DragAndDrop.initDrag */ + initDrag: function (event) { + if (!event.mouse().button.left) { + return; + } + // abort on form elements, fixes a Firefox issue + var src = event.target(); + var tagName = (src.tagName || '').toUpperCase(); + if (tagName === 'INPUT' || tagName === 'SELECT' || + tagName === 'OPTION' || tagName === 'BUTTON' || + tagName === 'TEXTAREA') { + return; + } + + if (this._revert) { + this._revert.cancel(); + this._revert = null; + } + + var pointer = event.mouse(); + var pos = MochiKit.Position.cumulativeOffset(this.element); + this.offset = [pointer.page.x - pos.x, pointer.page.y - pos.y] + + MochiKit.DragAndDrop.Draggables.activate(this); + event.stop(); + }, + + /** @id MochiKit.DragAndDrop.startDrag */ + startDrag: function (event) { + this.dragging = true; + if (this.options.selectclass) { + MochiKit.DOM.addElementClass(this.element, + this.options.selectclass); + } + if (this.options.zindex) { + this.originalZ = parseInt(MochiKit.Style.getStyle(this.element, + 'z-index') || '0'); + this.element.style.zIndex = this.options.zindex; + } + + if (this.options.ghosting) { + this._clone = this.element.cloneNode(true); + this.ghostPosition = MochiKit.Position.absolutize(this.element); + this.element.parentNode.insertBefore(this._clone, this.element); + } + + if (this.options.scroll) { + if (this.options.scroll == window) { + var where = this._getWindowScroll(this.options.scroll); + this.originalScrollLeft = where.left; + this.originalScrollTop = where.top; + } else { + this.originalScrollLeft = this.options.scroll.scrollLeft; + this.originalScrollTop = this.options.scroll.scrollTop; + } + } + + MochiKit.DragAndDrop.Droppables.prepare(this.element); + MochiKit.DragAndDrop.Draggables.notify('start', this, event); + if (this.options.starteffect) { + this.options.starteffect(this.element); + } + }, + + /** @id MochiKit.DragAndDrop.updateDrag */ + updateDrag: function (event, pointer) { + if (!this.dragging) { + this.startDrag(event); + } + MochiKit.Position.prepare(); + MochiKit.DragAndDrop.Droppables.show(pointer, this.element); + MochiKit.DragAndDrop.Draggables.notify('drag', this, event); + this.draw(pointer); + this.options.onchange(this); + + if (this.options.scroll) { + this.stopScrolling(); + var p, q; + if (this.options.scroll == window) { + var s = this._getWindowScroll(this.options.scroll); + p = new MochiKit.Style.Coordinates(s.left, s.top); + q = new MochiKit.Style.Coordinates(s.left + s.width, + s.top + s.height); + } else { + p = MochiKit.Position.page(this.options.scroll); + p.x += this.options.scroll.scrollLeft; + p.y += this.options.scroll.scrollTop; + p.x += (window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0); + p.y += (window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0); + q = new MochiKit.Style.Coordinates(p.x + this.options.scroll.offsetWidth, + p.y + this.options.scroll.offsetHeight); + } + var speed = [0, 0]; + if (pointer.page.x > (q.x - this.options.scrollSensitivity)) { + speed[0] = pointer.page.x - (q.x - this.options.scrollSensitivity); + } else if (pointer.page.x < (p.x + this.options.scrollSensitivity)) { + speed[0] = pointer.page.x - (p.x + this.options.scrollSensitivity); + } + if (pointer.page.y > (q.y - this.options.scrollSensitivity)) { + speed[1] = pointer.page.y - (q.y - this.options.scrollSensitivity); + } else if (pointer.page.y < (p.y + this.options.scrollSensitivity)) { + speed[1] = pointer.page.y - (p.y + this.options.scrollSensitivity); + } + this.startScrolling(speed); + } + + // fix AppleWebKit rendering + if (/AppleWebKit'/.test(navigator.appVersion)) { + window.scrollBy(0, 0); + } + event.stop(); + }, + + /** @id MochiKit.DragAndDrop.finishDrag */ + finishDrag: function (event, success) { + var dr = MochiKit.DragAndDrop; + this.dragging = false; + if (this.options.selectclass) { + MochiKit.DOM.removeElementClass(this.element, + this.options.selectclass); + } + + if (this.options.ghosting) { + // XXX: from a user point of view, it would be better to remove + // the node only *after* the MochiKit.Visual.Move end when used + // with revert. + MochiKit.Position.relativize(this.element, this.ghostPosition); + MochiKit.DOM.removeElement(this._clone); + this._clone = null; + } + + if (success) { + dr.Droppables.fire(event, this.element); + } + dr.Draggables.notify('end', this, event); + + var revert = this.options.revert; + if (revert && typeof(revert) == 'function') { + revert = revert(this.element); + } + + var d = this.currentDelta(); + if (revert && this.options.reverteffect) { + this._revert = this.options.reverteffect(this.element, + d[1] - this.delta[1], d[0] - this.delta[0]); + } else { + this.delta = d; + } + + if (this.options.zindex) { + this.element.style.zIndex = this.originalZ; + } + + if (this.options.endeffect) { + this.options.endeffect(this.element); + } + + dr.Draggables.deactivate(); + dr.Droppables.reset(this.element); + }, + + /** @id MochiKit.DragAndDrop.keyPress */ + keyPress: function (event) { + if (event.key().string != "KEY_ESCAPE") { + return; + } + this.finishDrag(event, false); + event.stop(); + }, + + /** @id MochiKit.DragAndDrop.endDrag */ + endDrag: function (event) { + if (!this.dragging) { + return; + } + this.stopScrolling(); + this.finishDrag(event, true); + event.stop(); + }, + + /** @id MochiKit.DragAndDrop.draw */ + draw: function (point) { + var pos = MochiKit.Position.cumulativeOffset(this.element); + if (this.options.ghosting) { + var r = MochiKit.Position.realOffset(this.element); + pos.x += r.x - MochiKit.Position.windowOffset.x; + pos.y += r.y - MochiKit.Position.windowOffset.y; + } + var d = this.currentDelta(); + pos.x -= d[0]; + pos.y -= d[1]; + + if (this.options.scroll && (this.options.scroll != window && this._isScrollChild)) { + pos.x -= this.options.scroll.scrollLeft - this.originalScrollLeft; + pos.y -= this.options.scroll.scrollTop - this.originalScrollTop; + } + + var p = [point.page.x - pos.x - this.offset[0], + point.page.y - pos.y - this.offset[1]] + + if (this.options.snap) { + if (typeof(this.options.snap) == 'function') { + p = this.options.snap(p[0], p[1]); + } else { + if (this.options.snap instanceof Array) { + var i = -1; + p = MochiKit.Base.map(MochiKit.Base.bind(function (v) { + i += 1; + return Math.round(v/this.options.snap[i]) * + this.options.snap[i] + }, this), p) + } else { + p = MochiKit.Base.map(MochiKit.Base.bind(function (v) { + return Math.round(v/this.options.snap) * + this.options.snap + }, this), p) + } + } + } + var style = this.element.style; + if ((!this.options.constraint) || + (this.options.constraint == 'horizontal')) { + style.left = p[0] + 'px'; + } + if ((!this.options.constraint) || + (this.options.constraint == 'vertical')) { + style.top = p[1] + 'px'; + } + if (style.visibility == 'hidden') { + style.visibility = ''; // fix gecko rendering + } + }, + + /** @id MochiKit.DragAndDrop.stopScrolling */ + stopScrolling: function () { + if (this.scrollInterval) { + clearInterval(this.scrollInterval); + this.scrollInterval = null; + MochiKit.DragAndDrop.Draggables._lastScrollPointer = null; + } + }, + + /** @id MochiKit.DragAndDrop.startScrolling */ + startScrolling: function (speed) { + if (!speed[0] && !speed[1]) { + return; + } + this.scrollSpeed = [speed[0] * this.options.scrollSpeed, + speed[1] * this.options.scrollSpeed]; + this.lastScrolled = new Date(); + this.scrollInterval = setInterval(MochiKit.Base.bind(this.scroll, this), 10); + }, + + /** @id MochiKit.DragAndDrop.scroll */ + scroll: function () { + var current = new Date(); + var delta = current - this.lastScrolled; + this.lastScrolled = current; + + if (this.options.scroll == window) { + var s = this._getWindowScroll(this.options.scroll); + if (this.scrollSpeed[0] || this.scrollSpeed[1]) { + var d = delta / 1000; + this.options.scroll.scrollTo(s.left + d * this.scrollSpeed[0], + s.top + d * this.scrollSpeed[1]); + } + } else { + this.options.scroll.scrollLeft += this.scrollSpeed[0] * delta / 1000; + this.options.scroll.scrollTop += this.scrollSpeed[1] * delta / 1000; + } + + var d = MochiKit.DragAndDrop; + + MochiKit.Position.prepare(); + d.Droppables.show(d.Draggables._lastPointer, this.element); + d.Draggables.notify('drag', this); + if (this._isScrollChild) { + d.Draggables._lastScrollPointer = d.Draggables._lastScrollPointer || d.Draggables._lastPointer; + d.Draggables._lastScrollPointer.x += this.scrollSpeed[0] * delta / 1000; + d.Draggables._lastScrollPointer.y += this.scrollSpeed[1] * delta / 1000; + if (d.Draggables._lastScrollPointer.x < 0) { + d.Draggables._lastScrollPointer.x = 0; + } + if (d.Draggables._lastScrollPointer.y < 0) { + d.Draggables._lastScrollPointer.y = 0; + } + this.draw(d.Draggables._lastScrollPointer); + } + + this.options.onchange(this); + }, + + _getWindowScroll: function (w) { + var vp, w, h; + MochiKit.DOM.withWindow(w, function () { + vp = MochiKit.Style.getViewportPosition(w.document); + }); + if (w.innerWidth) { + w = w.innerWidth; + h = w.innerHeight; + } else if (w.document.documentElement && w.document.documentElement.clientWidth) { + w = w.document.documentElement.clientWidth; + h = w.document.documentElement.clientHeight; + } else { + w = w.document.body.offsetWidth; + h = w.document.body.offsetHeight + } + return {top: vp.x, left: vp.y, width: w, height: h}; + }, + + /** @id MochiKit.DragAndDrop.repr */ + repr: function () { + return '[' + this.__class__.NAME + ", options:" + MochiKit.Base.repr(this.options) + "]"; + } +}; + +MochiKit.DragAndDrop.__new__ = function () { + MochiKit.Base.nameFunctions(this); + + this.EXPORT_TAGS = { + ":common": this.EXPORT, + ":all": MochiKit.Base.concat(this.EXPORT, this.EXPORT_OK) + }; +}; + +MochiKit.DragAndDrop.__new__(); + +MochiKit.Base._exportSymbols(this, MochiKit.DragAndDrop); + diff --git a/thirdpartyjs/MochiKit/MochiKit.js b/thirdpartyjs/MochiKit/MochiKit.js index 3130768..b5335b4 100644 --- a/thirdpartyjs/MochiKit/MochiKit.js +++ b/thirdpartyjs/MochiKit/MochiKit.js @@ -1,152 +1,6044 @@ /*** -MochiKit.MochiKit 1.3.1 + MochiKit.MochiKit 1.4 : PACKED VERSION -See for documentation, downloads, license, etc. + THIS FILE IS AUTOMATICALLY GENERATED. If creating patches, please + diff against the source tree, not this file. -(c) 2005 Bob Ippolito. All rights Reserved. + See for documentation, downloads, license, etc. + + (c) 2005 Bob Ippolito. All rights Reserved. ***/ -if (typeof(MochiKit) == 'undefined') { - MochiKit = {}; +if(typeof (dojo)!="undefined"){ +dojo.provide("MochiKit.Base"); } - -if (typeof(MochiKit.MochiKit) == 'undefined') { - MochiKit.MochiKit = {}; +if(typeof (MochiKit)=="undefined"){ +MochiKit={}; } - -MochiKit.MochiKit.NAME = "MochiKit.MochiKit"; -MochiKit.MochiKit.VERSION = "1.3.1"; -MochiKit.MochiKit.__repr__ = function () { - return "[" + this.NAME + " " + this.VERSION + "]"; +if(typeof (MochiKit.Base)=="undefined"){ +MochiKit.Base={}; +} +if(typeof (MochiKit.__export__)=="undefined"){ +MochiKit.__export__=(MochiKit.__compat__||(typeof (JSAN)=="undefined"&&typeof (dojo)=="undefined")); +} +MochiKit.Base.VERSION="1.4"; +MochiKit.Base.NAME="MochiKit.Base"; +MochiKit.Base.update=function(_1,_2){ +if(_1===null){ +_1={}; +} +for(var i=1;i'); - } - }; - })(); +},clone:function(obj){ +var me=arguments.callee; +if(arguments.length==1){ +me.prototype=obj; +return new me(); +} +},_flattenArray:function(res,lst){ +for(var i=0;i=0;i--){ +_15.unshift(o[i]); +} +}else{ +res.push(o); +} +} +return res; +},extend:function(_16,obj,_17){ +if(!_17){ +_17=0; +} +if(obj){ +var l=obj.length; +if(typeof (l)!="number"){ +if(typeof (MochiKit.Iter)!="undefined"){ +obj=MochiKit.Iter.list(obj); +l=obj.length; +}else{ +throw new TypeError("Argument not an array-like and MochiKit.Iter not present"); +} +} +if(!_16){ +_16=[]; +} +for(var i=_17;i>b; +},zrshift:function(a,b){ +return a>>>b; +},eq:function(a,b){ +return a==b; +},ne:function(a,b){ +return a!=b; +},gt:function(a,b){ +return a>b; +},ge:function(a,b){ +return a>=b; +},lt:function(a,b){ +return al){ +_44=l; +} +} +_43=[]; +for(i=0;i<_44;i++){ +var _45=[]; +for(var j=1;j=0;i--){ +_59=[_58[i].apply(this,_59)]; +} +return _59[0]; +}; +},bind:function(_60,_61){ +if(typeof (_60)=="string"){ +_60=_61[_60]; +} +var _62=_60.im_func; +var _63=_60.im_preargs; +var _64=_60.im_self; +var m=MochiKit.Base; +if(typeof (_60)=="function"&&typeof (_60.apply)=="undefined"){ +_60=m._wrapDumbFunction(_60); +} +if(typeof (_62)!="function"){ +_62=_60; +} +if(typeof (_61)!="undefined"){ +_64=_61; +} +if(typeof (_63)=="undefined"){ +_63=[]; +}else{ +_63=_63.slice(); +} +m.extend(_63,arguments,2); +var _65=function(){ +var _66=arguments; +var me=arguments.callee; +if(me.im_preargs.length>0){ +_66=m.concat(me.im_preargs,_66); +} +var _61=me.im_self; +if(!_61){ +_61=this; +} +return me.im_func.apply(_61,_66); +}; +_65.im_self=_64; +_65.im_func=_62; +_65.im_preargs=_63; +return _65; +},bindMethods:function(_67){ +var _68=MochiKit.Base.bind; +for(var k in _67){ +var _69=_67[k]; +if(typeof (_69)=="function"){ +_67[k]=_68(_69,_67); +} +} +},registerComparator:function(_70,_71,_72,_73){ +MochiKit.Base.comparatorRegistry.register(_70,_71,_72,_73); +},_primitives:{"boolean":true,"string":true,"number":true},compare:function(a,b){ +if(a==b){ +return 0; +} +var _74=(typeof (a)=="undefined"||a===null); +var _75=(typeof (b)=="undefined"||b===null); +if(_74&&_75){ +return 0; +}else{ +if(_74){ +return -1; +}else{ +if(_75){ +return 1; +} +} +} +var m=MochiKit.Base; +var _76=m._primitives; +if(!(typeof (a) in _76&&typeof (b) in _76)){ +try{ +return m.comparatorRegistry.match(a,b); +} +catch(e){ +if(e!=m.NotFound){ +throw e; +} +} +} +if(ab){ +return 1; +} +} +var _77=m.repr; +throw new TypeError(_77(a)+" and "+_77(b)+" can not be compared"); +},compareDateLike:function(a,b){ +return MochiKit.Base.compare(a.getTime(),b.getTime()); +},compareArrayLike:function(a,b){ +var _78=MochiKit.Base.compare; +var _79=a.length; +var _80=0; +if(_79>b.length){ +_80=1; +_79=b.length; +}else{ +if(_79=0;i--){ +sum+=o[i]; +} +}else{ +sum+=o; +} +} +if(_115<=0){ +throw new TypeError("mean() requires at least one argument"); +} +return sum/_115; +},median:function(){ +var data=MochiKit.Base.flattenArguments(arguments); +if(data.length===0){ +throw new TypeError("median() requires at least one argument"); +} +data.sort(compare); +if(data.length%2==0){ +var _117=data.length/2; +return (data[_117]+data[_117-1])/2; +}else{ +return data[(data.length-1)/2]; +} +},findValue:function(lst,_118,_119,end){ +if(typeof (end)=="undefined"||end===null){ +end=lst.length; +} +if(typeof (_119)=="undefined"||_119===null){ +_119=0; +} +var cmp=MochiKit.Base.compare; +for(var i=_119;i0))){ +var kv=MochiKit.DOM.formContents(_127); +_127=kv[0]; +_128=kv[1]; +}else{ +if(arguments.length==1){ +var o=_127; +_127=[]; +_128=[]; +for(var k in o){ +var v=o[k]; +if(typeof (v)=="function"){ +continue; +}else{ +if(typeof (v)!="string"&&typeof (v.length)=="number"){ +for(var i=0;i=stop){ +throw self.StopIteration; +} +_161+=step; +return rval; +}}; +},imap:function(fun,p,q){ +var m=MochiKit.Base; +var self=MochiKit.Iter; +var _165=m.map(self.iter,m.extend(null,arguments,1)); +var map=m.map; +var next=self.next; +return {repr:function(){ +return "imap(...)"; +},toString:m.forwardCall("repr"),next:function(){ +return fun.apply(this,map(next,_165)); +}}; +},applymap:function(fun,seq,self){ +seq=MochiKit.Iter.iter(seq); +var m=MochiKit.Base; +return {repr:function(){ +return "applymap(...)"; +},toString:m.forwardCall("repr"),next:function(){ +return fun.apply(self,seq.next()); +}}; +},chain:function(p,q){ +var self=MochiKit.Iter; +var m=MochiKit.Base; +if(arguments.length==1){ +return self.iter(arguments[0]); +} +var _167=m.map(self.iter,arguments); +return {repr:function(){ +return "chain(...)"; +},toString:m.forwardCall("repr"),next:function(){ +while(_167.length>1){ +try{ +return _167[0].next(); +} +catch(e){ +if(e!=self.StopIteration){ +throw e; +} +_167.shift(); +} +} +if(_167.length==1){ +var arg=_167.shift(); +this.next=m.bind("next",arg); +return this.next(); +} +throw self.StopIteration; +}}; +},takewhile:function(pred,seq){ +var self=MochiKit.Iter; +seq=self.iter(seq); +return {repr:function(){ +return "takewhile(...)"; +},toString:MochiKit.Base.forwardCall("repr"),next:function(){ +var rval=seq.next(); +if(!pred(rval)){ +this.next=function(){ +throw self.StopIteration; +}; +this.next(); +} +return rval; +}}; +},dropwhile:function(pred,seq){ +seq=MochiKit.Iter.iter(seq); +var m=MochiKit.Base; +var bind=m.bind; +return {"repr":function(){ +return "dropwhile(...)"; +},"toString":m.forwardCall("repr"),"next":function(){ +while(true){ +var rval=seq.next(); +if(!pred(rval)){ +break; +} +} +this.next=bind("next",seq); +return rval; +}}; +},_tee:function(_169,sync,_171){ +sync.pos[_169]=-1; +var m=MochiKit.Base; +var _172=m.listMin; +return {repr:function(){ +return "tee("+_169+", ...)"; +},toString:m.forwardCall("repr"),next:function(){ +var rval; +var i=sync.pos[_169]; +if(i==sync.max){ +rval=_171.next(); +sync.deque.push(rval); +sync.max+=1; +sync.pos[_169]+=1; +}else{ +rval=sync.deque[i-sync.min]; +sync.pos[_169]+=1; +if(i==sync.min&&_172(sync.pos)!=sync.min){ +sync.min+=1; +sync.deque.shift(); +} +} +return rval; +}}; +},tee:function(_173,n){ +var rval=[]; +var sync={"pos":[],"deque":[],"max":-1,"min":-1}; +if(arguments.length==1||typeof (n)=="undefined"||n===null){ +n=2; } +var self=MochiKit.Iter; +_173=self.iter(_173); +var _tee=self._tee; +for(var i=0;i0&&_179>=stop)||(step<0&&_179<=stop)){ +throw MochiKit.Iter.StopIteration; +} +var rval=_179; +_179+=step; +return rval; +},repr:function(){ +return "range("+[_179,stop,step].join(", ")+")"; +},toString:MochiKit.Base.forwardCall("repr")}; +},sum:function(_180,_181){ +if(typeof (_181)=="undefined"||_181===null){ +_181=0; +} +var x=_181; +var self=MochiKit.Iter; +_180=self.iter(_180); +try{ +while(true){ +x+=_180.next(); +} +} +catch(e){ +if(e!=self.StopIteration){ +throw e; +} +} +return x; +},exhaust:function(_182){ +var self=MochiKit.Iter; +_182=self.iter(_182); +try{ +while(true){ +_182.next(); +} +} +catch(e){ +if(e!=self.StopIteration){ +throw e; +} +} +},forEach:function(_183,func,self){ +var m=MochiKit.Base; +if(arguments.length>2){ +func=m.bind(func,self); +} +if(m.isArrayLike(_183)){ +try{ +for(var i=0;i<_183.length;i++){ +func(_183[i]); +} +} +catch(e){ +if(e!=MochiKit.Iter.StopIteration){ +throw e; +} +} +}else{ +self=MochiKit.Iter; +self.exhaust(self.imap(func,_183)); +} +},every:function(_184,func){ +var self=MochiKit.Iter; +try{ +self.ifilterfalse(func,_184).next(); +return false; +} +catch(e){ +if(e!=self.StopIteration){ +throw e; +} +return true; +} +},sorted:function(_185,cmp){ +var rval=MochiKit.Iter.list(_185); +if(arguments.length==1){ +cmp=MochiKit.Base.compare; +} +rval.sort(cmp); +return rval; +},reversed:function(_186){ +var rval=MochiKit.Iter.list(_186); +rval.reverse(); +return rval; +},some:function(_187,func){ +var self=MochiKit.Iter; +try{ +self.ifilter(func,_187).next(); +return true; +} +catch(e){ +if(e!=self.StopIteration){ +throw e; +} +return false; +} +},iextend:function(lst,_188){ +if(MochiKit.Base.isArrayLike(_188)){ +for(var i=0;i<_188.length;i++){ +lst.push(_188[i]); +} +}else{ +var self=MochiKit.Iter; +_188=self.iter(_188); +try{ +while(true){ +lst.push(_188.next()); +} +} +catch(e){ +if(e!=self.StopIteration){ +throw e; +} +} +} +return lst; +},groupby:function(_189,_190){ +var m=MochiKit.Base; +var self=MochiKit.Iter; +if(arguments.length<2){ +_190=m.operator.identity; +} +_189=self.iter(_189); +var pk=undefined; +var k=undefined; +var v; +function fetch(){ +v=_189.next(); +k=_190(v); +} +function eat(){ +var ret=v; +v=undefined; +return ret; +} +var _193=true; +var _194=m.compare; +return {repr:function(){ +return "groupby(...)"; +},next:function(){ +while(_194(k,pk)===0){ +fetch(); +if(_193){ +_193=false; +break; +} +} +pk=k; +return [k,{next:function(){ +if(v==undefined){ +fetch(); +} +if(_194(k,pk)!==0){ +throw self.StopIteration; +} +return eat(); +}}]; +}}; +},groupby_as_array:function(_195,_196){ +var m=MochiKit.Base; +var self=MochiKit.Iter; +if(arguments.length<2){ +_196=m.operator.identity; +} +_195=self.iter(_195); +var _197=[]; +var _198=true; +var _199; +var _200=m.compare; +while(true){ +try{ +var _201=_195.next(); +var key=_196(_201); +} +catch(e){ +if(e==self.StopIteration){ +break; +} +throw e; +} +if(_198||_200(key,_199)!==0){ +var _202=[]; +_197.push([key,_202]); +} +_202.push(_201); +_198=false; +_199=key; +} +return _197; +},arrayLikeIter:function(_203){ +var i=0; +return {repr:function(){ +return "arrayLikeIter(...)"; +},toString:MochiKit.Base.forwardCall("repr"),next:function(){ +if(i>=_203.length){ +throw MochiKit.Iter.StopIteration; +} +return _203[i++]; +}}; +},hasIterateNext:function(_204){ +return (_204&&typeof (_204.iterateNext)=="function"); +},iterateNextIter:function(_205){ +return {repr:function(){ +return "iterateNextIter(...)"; +},toString:MochiKit.Base.forwardCall("repr"),next:function(){ +var rval=_205.iterateNext(); +if(rval===null||rval===undefined){ +throw MochiKit.Iter.StopIteration; +} +return rval; +}}; +}}); +MochiKit.Iter.EXPORT_OK=["iteratorRegistry","arrayLikeIter","hasIterateNext","iterateNextIter",]; +MochiKit.Iter.EXPORT=["StopIteration","registerIteratorFactory","iter","count","cycle","repeat","next","izip","ifilter","ifilterfalse","islice","imap","applymap","chain","takewhile","dropwhile","tee","list","reduce","range","sum","exhaust","forEach","every","sorted","reversed","some","iextend","groupby","groupby_as_array"]; +MochiKit.Iter.__new__=function(){ +var m=MochiKit.Base; +if(typeof (StopIteration)!="undefined"){ +this.StopIteration=StopIteration; +}else{ +this.StopIteration=new m.NamedError("StopIteration"); +} +this.iteratorRegistry=new m.AdapterRegistry(); +this.registerIteratorFactory("arrayLike",m.isArrayLike,this.arrayLikeIter); +this.registerIteratorFactory("iterateNext",this.hasIterateNext,this.iterateNextIter); +this.EXPORT_TAGS={":common":this.EXPORT,":all":m.concat(this.EXPORT,this.EXPORT_OK)}; +m.nameFunctions(this); +}; +MochiKit.Iter.__new__(); +if(MochiKit.__export__){ +reduce=MochiKit.Iter.reduce; +} +MochiKit.Base._exportSymbols(this,MochiKit.Iter); +if(typeof (dojo)!="undefined"){ +dojo.provide("MochiKit.Logging"); +dojo.require("MochiKit.Base"); +} +if(typeof (JSAN)!="undefined"){ +JSAN.use("MochiKit.Base",[]); +} +try{ +if(typeof (MochiKit.Base)=="undefined"){ +throw ""; +} +} +catch(e){ +throw "MochiKit.Logging depends on MochiKit.Base!"; +} +if(typeof (MochiKit.Logging)=="undefined"){ +MochiKit.Logging={}; +} +MochiKit.Logging.NAME="MochiKit.Logging"; +MochiKit.Logging.VERSION="1.4"; +MochiKit.Logging.__repr__=function(){ +return "["+this.NAME+" "+this.VERSION+"]"; +}; +MochiKit.Logging.toString=function(){ +return this.__repr__(); +}; +MochiKit.Logging.EXPORT=["LogLevel","LogMessage","Logger","alertListener","logger","log","logError","logDebug","logFatal","logWarning"]; +MochiKit.Logging.EXPORT_OK=["logLevelAtLeast","isLogMessage","compareLogMessage"]; +MochiKit.Logging.LogMessage=function(num,_207,info){ +this.num=num; +this.level=_207; +this.info=info; +this.timestamp=new Date(); +}; +MochiKit.Logging.LogMessage.prototype={repr:function(){ +var m=MochiKit.Base; +return "LogMessage("+m.map(m.repr,[this.num,this.level,this.info]).join(", ")+")"; +},toString:MochiKit.Base.forwardCall("repr")}; +MochiKit.Base.update(MochiKit.Logging,{logLevelAtLeast:function(_209){ +var self=MochiKit.Logging; +if(typeof (_209)=="string"){ +_209=self.LogLevel[_209]; +} +return function(msg){ +var _211=msg.level; +if(typeof (_211)=="string"){ +_211=self.LogLevel[_211]; +} +return _211>=_209; +}; +},isLogMessage:function(){ +var _212=MochiKit.Logging.LogMessage; +for(var i=0;i=0&&this._messages.length>this.maxSize){ +this._messages.shift(); +} +},getMessages:function(_221){ +var _222=0; +if(!(typeof (_221)=="undefined"||_221===null)){ +_222=Math.max(0,this._messages.length-_221); +} +return this._messages.slice(_222); +},getMessageText:function(_223){ +if(typeof (_223)=="undefined"||_223===null){ +_223=30; +} +var _224=this.getMessages(_223); +if(_224.length){ +var lst=map(function(m){ +return "\n ["+m.num+"] "+m.level+": "+m.info.join(" "); +},_224); +lst.unshift("LAST "+_224.length+" MESSAGES:"); +return lst.join(""); +} +return ""; +},debuggingBookmarklet:function(_225){ +if(typeof (MochiKit.LoggingPane)=="undefined"){ +alert(this.getMessageText()); +}else{ +MochiKit.LoggingPane.createLoggingPane(_225||false); +} +}}; +MochiKit.Logging.__new__=function(){ +this.LogLevel={ERROR:40,FATAL:50,WARNING:30,INFO:20,DEBUG:10}; +var m=MochiKit.Base; +m.registerComparator("LogMessage",this.isLogMessage,this.compareLogMessage); +var _226=m.partial; +var _227=this.Logger; +var _228=_227.prototype.baseLog; +m.update(this.Logger.prototype,{debug:_226(_228,"DEBUG"),log:_226(_228,"INFO"),error:_226(_228,"ERROR"),fatal:_226(_228,"FATAL"),warning:_226(_228,"WARNING")}); +var self=this; +var _229=function(name){ +return function(){ +self.logger[name].apply(self.logger,arguments); +}; +}; +this.log=_229("log"); +this.logError=_229("error"); +this.logDebug=_229("debug"); +this.logFatal=_229("fatal"); +this.logWarning=_229("warning"); +this.logger=new _227(); +this.logger.useNativeConsole=true; +this.EXPORT_TAGS={":common":this.EXPORT,":all":m.concat(this.EXPORT,this.EXPORT_OK)}; +m.nameFunctions(this); +}; +if(typeof (printfire)=="undefined"&&typeof (document)!="undefined"&&document.createEvent&&typeof (dispatchEvent)!="undefined"){ +printfire=function(){ +printfire.args=arguments; +var ev=document.createEvent("Events"); +ev.initEvent("printfire",false,true); +dispatchEvent(ev); +}; +} +MochiKit.Logging.__new__(); +MochiKit.Base._exportSymbols(this,MochiKit.Logging); +if(typeof (dojo)!="undefined"){ +dojo.provide("MochiKit.DateTime"); +} +if(typeof (MochiKit)=="undefined"){ +MochiKit={}; +} +if(typeof (MochiKit.DateTime)=="undefined"){ +MochiKit.DateTime={}; +} +MochiKit.DateTime.NAME="MochiKit.DateTime"; +MochiKit.DateTime.VERSION="1.4"; +MochiKit.DateTime.__repr__=function(){ +return "["+this.NAME+" "+this.VERSION+"]"; +}; +MochiKit.DateTime.toString=function(){ +return this.__repr__(); +}; +MochiKit.DateTime.isoDate=function(str){ +str=str+""; +if(typeof (str)!="string"||str.length===0){ +return null; +} +var iso=str.split("-"); +if(iso.length===0){ +return null; +} +return new Date(iso[0],iso[1]-1,iso[2]); +}; +MochiKit.DateTime._isoRegexp=/(\d{4,})(?:-(\d{1,2})(?:-(\d{1,2})(?:[T ](\d{1,2}):(\d{1,2})(?::(\d{1,2})(?:\.(\d+))?)?(?:(Z)|([+-])(\d{1,2})(?::(\d{1,2}))?)?)?)?)?/; +MochiKit.DateTime.isoTimestamp=function(str){ +str=str+""; +if(typeof (str)!="string"||str.length===0){ +return null; +} +var res=str.match(MochiKit.DateTime._isoRegexp); +if(typeof (res)=="undefined"||res===null){ +return null; +} +var year,month,day,hour,min,sec,msec; +year=parseInt(res[1],10); +if(typeof (res[2])=="undefined"||res[2]===""){ +return new Date(year); +} +month=parseInt(res[2],10)-1; +day=parseInt(res[3],10); +if(typeof (res[4])=="undefined"||res[4]===""){ +return new Date(year,month,day); +} +hour=parseInt(res[4],10); +min=parseInt(res[5],10); +sec=(typeof (res[6])!="undefined"&&res[6]!=="")?parseInt(res[6],10):0; +if(typeof (res[7])!="undefined"&&res[7]!==""){ +msec=Math.round(1000*parseFloat("0."+res[7])); +}else{ +msec=0; +} +if((typeof (res[8])=="undefined"||res[8]==="")&&(typeof (res[9])=="undefined"||res[9]==="")){ +return new Date(year,month,day,hour,min,sec,msec); +} +var ofs; +if(typeof (res[9])!="undefined"&&res[9]!==""){ +ofs=parseInt(res[10],10)*3600000; +if(typeof (res[11])!="undefined"&&res[11]!==""){ +ofs+=parseInt(res[11],10)*60000; +} +if(res[9]=="-"){ +ofs=-ofs; +} +}else{ +ofs=0; +} +return new Date(Date.UTC(year,month,day,hour,min,sec,msec)-ofs); +}; +MochiKit.DateTime.toISOTime=function(date,_236){ +if(typeof (date)=="undefined"||date===null){ +return null; +} +var hh=date.getHours(); +var mm=date.getMinutes(); +var ss=date.getSeconds(); +var lst=[((_236&&(hh<10))?"0"+hh:hh),((mm<10)?"0"+mm:mm),((ss<10)?"0"+ss:ss)]; +return lst.join(":"); +}; +MochiKit.DateTime.toISOTimestamp=function(date,_240){ +if(typeof (date)=="undefined"||date===null){ +return null; +} +var sep=_240?"T":" "; +var foot=_240?"Z":""; +if(_240){ +date=new Date(date.getTime()+(date.getTimezoneOffset()*60000)); +} +return MochiKit.DateTime.toISODate(date)+sep+MochiKit.DateTime.toISOTime(date,_240)+foot; +}; +MochiKit.DateTime.toISODate=function(date){ +if(typeof (date)=="undefined"||date===null){ +return null; +} +var _243=MochiKit.DateTime._padTwo; +return [date.getFullYear(),_243(date.getMonth()+1),_243(date.getDate())].join("-"); +}; +MochiKit.DateTime.americanDate=function(d){ +d=d+""; +if(typeof (d)!="string"||d.length===0){ +return null; +} +var a=d.split("/"); +return new Date(a[2],a[0]-1,a[1]); +}; +MochiKit.DateTime._padTwo=function(n){ +return (n>9)?n:"0"+n; +}; +MochiKit.DateTime.toPaddedAmericanDate=function(d){ +if(typeof (d)=="undefined"||d===null){ +return null; +} +var _245=MochiKit.DateTime._padTwo; +return [_245(d.getMonth()+1),_245(d.getDate()),d.getFullYear()].join("/"); +}; +MochiKit.DateTime.toAmericanDate=function(d){ +if(typeof (d)=="undefined"||d===null){ +return null; +} +return [d.getMonth()+1,d.getDate(),d.getFullYear()].join("/"); +}; +MochiKit.DateTime.EXPORT=["isoDate","isoTimestamp","toISOTime","toISOTimestamp","toISODate","americanDate","toPaddedAmericanDate","toAmericanDate"]; +MochiKit.DateTime.EXPORT_OK=[]; +MochiKit.DateTime.EXPORT_TAGS={":common":MochiKit.DateTime.EXPORT,":all":MochiKit.DateTime.EXPORT}; +MochiKit.DateTime.__new__=function(){ +var base=this.NAME+"."; +for(var k in this){ +var o=this[k]; +if(typeof (o)=="function"&&typeof (o.NAME)=="undefined"){ +try{ +o.NAME=base+k; +} +catch(e){ +} +} +} +}; +MochiKit.DateTime.__new__(); +if(typeof (MochiKit.Base)!="undefined"){ +MochiKit.Base._exportSymbols(this,MochiKit.DateTime); +}else{ +(function(_246,_247){ +if((typeof (JSAN)=="undefined"&&typeof (dojo)=="undefined")||(MochiKit.__export__===false)){ +var all=_247.EXPORT_TAGS[":all"]; +for(var i=0;i_255){ +var i=_261.length-_255; +res=fmt.separator+_261.substring(i,_261.length)+res; +_261=_261.substring(0,i); +} +} +res=_261+res; +if(_253>0){ +while(frac.length<_256){ +frac=frac+"0"; +} +res=res+fmt.decimal+frac; +} +return _257+res+_258; +}; +}; +MochiKit.Format.numberFormatter=function(_263,_264,_265){ +if(typeof (_264)=="undefined"){ +_264=""; +} +var _266=_263.match(/((?:[0#]+,)?[0#]+)(?:\.([0#]+))?(%)?/); +if(!_266){ +throw TypeError("Invalid pattern"); +} +var _267=_263.substr(0,_266.index); +var _268=_263.substr(_266.index+_266[0].length); +if(_267.search(/-/)==-1){ +_267=_267+"-"; +} +var _269=_266[1]; +var frac=(typeof (_266[2])=="string"&&_266[2]!="")?_266[2]:""; +var _270=(typeof (_266[3])=="string"&&_266[3]!=""); +var tmp=_269.split(/,/); +var _272; +if(typeof (_265)=="undefined"){ +_265="default"; +} +if(tmp.length==1){ +_272=null; +}else{ +_272=tmp[1].length; +} +var _273=_269.length-_269.replace(/0/g,"").length; +var _274=frac.length-frac.replace(/0/g,"").length; +var _275=frac.length; +var rval=MochiKit.Format._numberFormatter(_264,_267,_268,_265,_270,_275,_273,_272,_274); +var m=MochiKit.Base; +if(m){ +var fn=arguments.callee; +var args=m.concat(arguments); +rval.repr=function(){ +return [self.NAME,"(",map(m.repr,args).join(", "),")"].join(""); +}; +} +return rval; +}; +MochiKit.Format.formatLocale=function(_276){ +if(typeof (_276)=="undefined"||_276===null){ +_276="default"; +} +if(typeof (_276)=="string"){ +var rval=MochiKit.Format.LOCALE[_276]; +if(typeof (rval)=="string"){ +rval=arguments.callee(rval); +MochiKit.Format.LOCALE[_276]=rval; +} +return rval; +}else{ +return _276; +} +}; +MochiKit.Format.twoDigitAverage=function(_277,_278){ +if(_278){ +var res=_277/_278; +if(!isNaN(res)){ +return MochiKit.Format.twoDigitFloat(_277/_278); +} +} +return "0"; +}; +MochiKit.Format.twoDigitFloat=function(_279){ +var sign=(_279<0?"-":""); +var s=Math.floor(Math.abs(_279)*100).toString(); +if(s=="0"){ +return s; +} +if(s.length<3){ +while(s.charAt(s.length-1)=="0"){ +s=s.substring(0,s.length-1); +} +return sign+"0."+s; +} +var head=sign+s.substring(0,s.length-2); +var tail=s.substring(s.length-2,s.length); +if(tail=="00"){ +return head; +}else{ +if(tail.charAt(1)=="0"){ +return head+"."+tail.charAt(0); +}else{ +return head+"."+tail; +} +} +}; +MochiKit.Format.lstrip=function(str,_284){ +str=str+""; +if(typeof (str)!="string"){ +return null; +} +if(!_284){ +return str.replace(/^\s+/,""); +}else{ +return str.replace(new RegExp("^["+_284+"]+"),""); +} +}; +MochiKit.Format.rstrip=function(str,_285){ +str=str+""; +if(typeof (str)!="string"){ +return null; +} +if(!_285){ +return str.replace(/\s+$/,""); +}else{ +return str.replace(new RegExp("["+_285+"]+$"),""); +} +}; +MochiKit.Format.strip=function(str,_286){ +var self=MochiKit.Format; +return self.rstrip(self.lstrip(str,_286),_286); +}; +MochiKit.Format.truncToFixed=function(_287,_288){ +_287=Math.floor(_287*Math.pow(10,_288)); +var res=(_287*Math.pow(10,-_288)).toFixed(_288); +if(res.charAt(0)=="."){ +res="0"+res; +} +return res; +}; +MochiKit.Format.roundToFixed=function(_289,_290){ +return MochiKit.Format.truncToFixed(_289+0.5*Math.pow(10,-_290),_290); +}; +MochiKit.Format.percentFormat=function(_291){ +return MochiKit.Format.twoDigitFloat(100*_291)+"%"; +}; +MochiKit.Format.EXPORT=["truncToFixed","roundToFixed","numberFormatter","formatLocale","twoDigitAverage","twoDigitFloat","percentFormat","lstrip","rstrip","strip"]; +MochiKit.Format.LOCALE={en_US:{separator:",",decimal:".",percent:"%"},de_DE:{separator:".",decimal:",",percent:"%"},fr_FR:{separator:" ",decimal:",",percent:"%"},"default":"en_US"}; +MochiKit.Format.EXPORT_OK=[]; +MochiKit.Format.EXPORT_TAGS={":all":MochiKit.Format.EXPORT,":common":MochiKit.Format.EXPORT}; +MochiKit.Format.__new__=function(){ +var base=this.NAME+"."; +var k,v,o; +for(k in this.LOCALE){ +o=this.LOCALE[k]; +if(typeof (o)=="object"){ +o.repr=function(){ +return this.NAME; +}; +o.NAME=base+"LOCALE."+k; +} +} +for(k in this){ +o=this[k]; +if(typeof (o)=="function"&&typeof (o.NAME)=="undefined"){ +try{ +o.NAME=base+k; +} +catch(e){ +} +} +} +}; +MochiKit.Format.__new__(); +if(typeof (MochiKit.Base)!="undefined"){ +MochiKit.Base._exportSymbols(this,MochiKit.Format); +}else{ +(function(_292,_293){ +if((typeof (JSAN)=="undefined"&&typeof (dojo)=="undefined")||(MochiKit.__export__===false)){ +var all=_293.EXPORT_TAGS[":all"]; +for(var i=0;i1){ +fn=MochiKit.Base.partial.apply(null,arguments); +} +return this.addCallbacks(fn,fn); +},addCallback:function(fn){ +if(arguments.length>1){ +fn=MochiKit.Base.partial.apply(null,arguments); +} +return this.addCallbacks(fn,null); +},addErrback:function(fn){ +if(arguments.length>1){ +fn=MochiKit.Base.partial.apply(null,arguments); +} +return this.addCallbacks(null,fn); +},addCallbacks:function(cb,eb){ +if(this.chained){ +throw new Error("Chained Deferreds can not be re-used"); +} +this.chain.push([cb,eb]); +if(this.fired>=0){ +this._fire(); +} +return this; +},_fire:function(){ +var _298=this.chain; +var _299=this.fired; +var res=this.results[_299]; +var self=this; +var cb=null; +while(_298.length>0&&this.paused===0){ +var pair=_298.shift(); +var f=pair[_299]; +if(f===null){ +continue; +} +try{ +res=f(res); +_299=((res instanceof Error)?1:0); +if(res instanceof MochiKit.Async.Deferred){ +cb=function(res){ +self._resback(res); +self.paused--; +if((self.paused===0)&&(self.fired>=0)){ +self._fire(); +} +}; +this.paused++; +} +} +catch(err){ +_299=1; +if(!(err instanceof Error)){ +err=new MochiKit.Async.GenericError(err); +} +res=err; +} +} +this.fired=_299; +this.results[_299]=res; +if(cb&&this.paused){ +res.addBoth(cb); +res.chained=true; +} +}}; +MochiKit.Base.update(MochiKit.Async,{evalJSONRequest:function(){ +return eval("("+arguments[0].responseText+")"); +},succeed:function(_301){ +var d=new MochiKit.Async.Deferred(); +d.callback.apply(d,arguments); +return d; +},fail:function(_302){ +var d=new MochiKit.Async.Deferred(); +d.errback.apply(d,arguments); +return d; +},getXMLHttpRequest:function(){ +var self=arguments.callee; +if(!self.XMLHttpRequest){ +var _303=[function(){ +return new XMLHttpRequest(); +},function(){ +return new ActiveXObject("Msxml2.XMLHTTP"); +},function(){ +return new ActiveXObject("Microsoft.XMLHTTP"); +},function(){ +return new ActiveXObject("Msxml2.XMLHTTP.4.0"); +},function(){ +throw new MochiKit.Async.BrowserComplianceError("Browser does not support XMLHttpRequest"); +}]; +for(var i=0;i<_303.length;i++){ +var func=_303[i]; +try{ +self.XMLHttpRequest=func; +return func(); +} +catch(e){ +} +} +} +return self.XMLHttpRequest(); +},_xhr_onreadystatechange:function(d){ +var m=MochiKit.Base; +if(this.readyState==4){ +try{ +this.onreadystatechange=null; +} +catch(e){ +try{ +this.onreadystatechange=m.noop; +} +catch(e){ +} +} +var _304=null; +try{ +_304=this.status; +if(!_304&&m.isNotEmpty(this.responseText)){ +_304=304; +} +} +catch(e){ +} +if(_304==200||_304==304){ +d.callback(this); +}else{ +var err=new MochiKit.Async.XMLHttpRequestError(this,"Request failed"); +if(err.number){ +d.errback(err); +}else{ +d.errback(err); +} +} +} +},_xhr_canceller:function(req){ +try{ +req.onreadystatechange=null; +} +catch(e){ +try{ +req.onreadystatechange=MochiKit.Base.noop; +} +catch(e){ +} +} +req.abort(); +},sendXMLHttpRequest:function(req,_307){ +if(typeof (_307)=="undefined"||_307===null){ +_307=""; +} +var m=MochiKit.Base; +var self=MochiKit.Async; +var d=new self.Deferred(m.partial(self._xhr_canceller,req)); +try{ +req.onreadystatechange=m.bind(self._xhr_onreadystatechange,req,d); +req.send(_307); +} +catch(e){ +try{ +req.onreadystatechange=null; +} +catch(ignore){ +} +d.errback(e); +} +return d; +},doSimpleXMLHttpRequest:function(url){ +var self=MochiKit.Async; +var req=self.getXMLHttpRequest(); +if(arguments.length>1){ +var m=MochiKit.Base; +var qs=m.queryString.apply(null,m.extend(null,arguments,1)); +if(qs){ +url+="?"+qs; +} +} +req.open("GET",url,true); +return self.sendXMLHttpRequest(req); +},loadJSONDoc:function(url){ +var self=MochiKit.Async; +var d=self.doSimpleXMLHttpRequest.apply(self,arguments); +d=d.addCallback(self.evalJSONRequest); +return d; +},wait:function(_310,_311){ +var d=new MochiKit.Async.Deferred(); +var m=MochiKit.Base; +if(typeof (_311)!="undefined"){ +d.addCallback(function(){ +return _311; +}); +} +var _312=setTimeout(m.bind("callback",d),Math.floor(_310*1000)); +d.canceller=function(){ +try{ +clearTimeout(_312); +} +catch(e){ +} +}; +return d; +},callLater:function(_313,func){ +var m=MochiKit.Base; +var _314=m.partial.apply(m,m.extend(null,arguments,1)); +return MochiKit.Async.wait(_313).addCallback(function(res){ +return _314(); +}); +}}); +MochiKit.Async.DeferredLock=function(){ +this.waiting=[]; +this.locked=false; +this.id=this._nextId(); +}; +MochiKit.Async.DeferredLock.prototype={__class__:MochiKit.Async.DeferredLock,acquire:function(){ +var d=new MochiKit.Async.Deferred(); +if(this.locked){ +this.waiting.push(d); +}else{ +this.locked=true; +d.callback(this); +} +return d; +},release:function(){ +if(!this.locked){ +throw TypeError("Tried to release an unlocked DeferredLock"); +} +this.locked=false; +if(this.waiting.length>0){ +this.locked=true; +this.waiting.shift().callback(this); +} +},_nextId:MochiKit.Base.counter(),repr:function(){ +var _315; +if(this.locked){ +_315="locked, "+this.waiting.length+" waiting"; +}else{ +_315="unlocked"; +} +return "DeferredLock("+this.id+", "+_315+")"; +},toString:MochiKit.Base.forwardCall("repr")}; +MochiKit.Async.DeferredList=function(list,_317,_318,_319,_320){ +MochiKit.Async.Deferred.apply(this,[_320]); +this.list=list; +var _321=[]; +this.resultList=_321; +this.finishedCount=0; +this.fireOnOneCallback=_317; +this.fireOnOneErrback=_318; +this.consumeErrors=_319; +var cb=MochiKit.Base.bind(this._cbDeferred,this); +for(var i=0;i=0){ +var opt=elem.options[elem.selectedIndex]; +_335.push(name); +_336.push(opt.value); +return null; +} +_335.push(name); +_336.push(""); +return null; +}else{ +var opts=elem.options; +if(!opts.length){ +_335.push(name); +_336.push(""); +return null; +} +for(var i=0;i0){ +return node; +} +if(typeof (node)=="number"||typeof (node)=="boolean"){ +node=node.toString(); +} +if(typeof (node)=="string"){ +return self._document.createTextNode(node); +} +if(typeof (node.__dom__)=="function"){ +node=node.__dom__(ctx); +continue; +} +if(typeof (node.dom)=="function"){ +node=node.dom(ctx); +continue; +} +if(typeof (node)=="function"){ +node=node.apply(ctx,[ctx]); +continue; +} +if(im){ +var _351=null; +try{ +_351=iter(node); +} +catch(e){ +} +if(_351){ +return map(_349,_351,_347(ctx)); +} +} +try{ +node=_348.match(node,ctx); +continue; +} +catch(e){ +if(e!=_350){ +throw e; +} +} +return self._document.createTextNode(node.toString()); +} +return undefined; +},isChildNode:function(node,_352){ +var self=MochiKit.DOM; +if(typeof (node)=="string"){ +node=self.getElement(node); +} +if(typeof (_352)=="string"){ +_352=self.getElement(_352); +} +if(node===_352){ +return true; +} +while(node&&node.tagName.toUpperCase()!="BODY"){ +node=node.parentNode; +if(node===_352){ +return true; +} +} +return false; +},setNodeAttribute:function(node,attr,_354){ +var o={}; +o[attr]=_354; +try{ +return MochiKit.DOM.updateNodeAttributes(node,o); +} +catch(e){ +} +return null; +},getNodeAttribute:function(node,attr){ +var self=MochiKit.DOM; +var _355=self.attributeArray.renames[attr]; +node=self.getElement(node); +try{ +if(_355){ +return node[_355]; +} +return node.getAttribute(attr); +} +catch(e){ +} +return null; +},updateNodeAttributes:function(node,_356){ +var elem=node; +var self=MochiKit.DOM; +if(typeof (node)=="string"){ +elem=self.getElement(node); +} +if(_356){ +var _357=MochiKit.Base.updatetree; +if(self.attributeArray.compliant){ +for(var k in _356){ +var v=_356[k]; +if(typeof (v)=="object"&&typeof (elem[k])=="object"){ +_357(elem[k],v); +}else{ +if(k.substring(0,2)=="on"){ +if(typeof (v)=="string"){ +v=new Function(v); +} +elem[k]=v; +}else{ +elem.setAttribute(k,v); +} +} +} +}else{ +var _358=self.attributeArray.renames; +for(k in _356){ +v=_356[k]; +var _359=_358[k]; +if(k=="style"&&typeof (v)=="string"){ +elem.style.cssText=v; +}else{ +if(typeof (_359)=="string"){ +elem[_359]=v; +}else{ +if(typeof (elem[k])=="object"&&typeof (v)=="object"){ +_357(elem[k],v); +}else{ +if(k.substring(0,2)=="on"){ +if(typeof (v)=="string"){ +v=new Function(v); +} +elem[k]=v; +}else{ +elem.setAttribute(k,v); +} +} +} +} +} +} +} +return elem; +},appendChildNodes:function(node){ +var elem=node; +var self=MochiKit.DOM; +if(typeof (node)=="string"){ +elem=self.getElement(node); +} +var _360=[self.coerceToDOM(MochiKit.Base.extend(null,arguments,1),elem)]; +var _361=MochiKit.Base.concat; +while(_360.length){ +var n=_360.shift(); +if(typeof (n)=="undefined"||n===null){ +}else{ +if(typeof (n.nodeType)=="number"){ +elem.appendChild(n); +}else{ +_360=_361(n,_360); +} +} +} +return elem; +},replaceChildNodes:function(node){ +var elem=node; +var self=MochiKit.DOM; +if(typeof (node)=="string"){ +elem=self.getElement(node); +arguments[0]=elem; +} +var _362; +while((_362=elem.firstChild)){ +elem.removeChild(_362); +} +if(arguments.length<2){ +return elem; +}else{ +return self.appendChildNodes.apply(this,arguments); +} +},createDOM:function(name,_363){ +var elem; +var self=MochiKit.DOM; +var m=MochiKit.Base; +if(typeof (_363)=="string"||typeof (_363)=="number"){ +var args=m.extend([name,null],arguments,1); +return arguments.callee.apply(this,args); +} +if(typeof (name)=="string"){ +if(_363&&!self.attributeArray.compliant){ +var _364=""; +if("name" in _363){ +_364+=" name=\""+self.escapeHTML(_363.name)+"\""; +} +if(name=="input"&&"type" in _363){ +_364+=" type=\""+self.escapeHTML(_363.type)+"\""; +} +if(_364){ +name="<"+name+_364+">"; +} +} +elem=self._document.createElement(name); +}else{ +elem=name; +} +if(_363){ +self.updateNodeAttributes(elem,_363); +} +if(arguments.length<=2){ +return elem; +}else{ +var args=m.extend([elem],arguments,2); +return self.appendChildNodes.apply(this,args); +} +},createDOMFunc:function(){ +var m=MochiKit.Base; +return m.partial.apply(this,m.extend([MochiKit.DOM.createDOM],arguments)); +},removeElement:function(elem){ +var e=MochiKit.DOM.getElement(elem); +e.parentNode.removeChild(e); +return e; +},swapDOM:function(dest,src){ +var self=MochiKit.DOM; +dest=self.getElement(dest); +var _367=dest.parentNode; +if(src){ +src=self.getElement(src); +_367.replaceChild(src,dest); +}else{ +_367.removeChild(dest); +} +return src; +},getElement:function(id){ +var self=MochiKit.DOM; +if(arguments.length==1){ +return ((typeof (id)=="string")?self._document.getElementById(id):id); +}else{ +return MochiKit.Base.map(self.getElement,arguments); +} +},getElementsByTagAndClassName:function(_369,_370,_371){ +var self=MochiKit.DOM; +if(typeof (_369)=="undefined"||_369===null){ +_369="*"; +} +if(typeof (_371)=="undefined"||_371===null){ +_371=self._document; +} +_371=self.getElement(_371); +var _372=(_371.getElementsByTagName(_369)||self._document.all); +if(typeof (_370)=="undefined"||_370===null){ +return MochiKit.Base.extend(null,_372); +} +var _373=[]; +for(var i=0;i<_372.length;i++){ +var _374=_372[i]; +var cls=_374.className; +if(!cls){ +continue; +} +var _376=cls.split(" "); +for(var j=0;j<_376.length;j++){ +if(_376[j]==_370){ +_373.push(_374); +break; +} +} +} +return _373; +},_newCallStack:function(path,once){ +var rval=function(){ +var _379=arguments.callee.callStack; +for(var i=0;i<_379.length;i++){ +if(_379[i].apply(this,arguments)===false){ +break; +} +} +if(once){ +try{ +this[path]=null; +} +catch(e){ +} +} +}; +rval.callStack=[]; +return rval; +},addToCallStack:function(_380,path,func,once){ +var self=MochiKit.DOM; +var _381=_380[path]; +var _382=_381; +if(!(typeof (_381)=="function"&&typeof (_381.callStack)=="object"&&_381.callStack!==null)){ +_382=self._newCallStack(path,once); +if(typeof (_381)=="function"){ +_382.callStack.push(_381); +} +_380[path]=_382; +} +_382.callStack.push(func); +},addLoadEvent:function(func){ +var self=MochiKit.DOM; +self.addToCallStack(self._window,"onload",func,true); +},focusOnLoad:function(_383){ +var self=MochiKit.DOM; +self.addLoadEvent(function(){ +_383=self.getElement(_383); +if(_383){ +_383.focus(); +} +}); +},setElementClass:function(_384,_385){ +var self=MochiKit.DOM; +var obj=self.getElement(_384); +if(self.attributeArray.compliant){ +obj.setAttribute("class",_385); +}else{ +obj.setAttribute("className",_385); +} +},toggleElementClass:function(_386){ +var self=MochiKit.DOM; +for(var i=1;i/g,">"); +},toHTML:function(dom){ +return MochiKit.DOM.emitHTML(dom).join(""); +},emitHTML:function(dom,lst){ +if(typeof (lst)=="undefined"||lst===null){ +lst=[]; +} +var _401=[dom]; +var self=MochiKit.DOM; +var _402=self.escapeHTML; +var _403=self.attributeArray; +while(_401.length){ +dom=_401.pop(); +if(typeof (dom)=="string"){ +lst.push(dom); +}else{ +if(dom.nodeType==1){ +lst.push("<"+dom.tagName.toLowerCase()); +var _404=[]; +var _405=_403(dom); +for(var i=0;i<_405.length;i++){ +var a=_405[i]; +_404.push([" ",a.name,"=\"",_402(a.value),"\""]); +} +_404.sort(); +for(i=0;i<_404.length;i++){ +var _406=_404[i]; +for(var j=0;j<_406.length;j++){ +lst.push(_406[j]); +} +} +if(dom.hasChildNodes()){ +lst.push(">"); +_401.push(""); +var _407=dom.childNodes; +for(i=_407.length-1;i>=0;i--){ +_401.push(_407[i]); +} +}else{ +lst.push("/>"); +} +}else{ +if(dom.nodeType==3){ +lst.push(_402(dom.nodeValue)); +} +} +} +} +return lst; +},scrapeText:function(node,_408){ +var rval=[]; +(function(node){ +var cn=node.childNodes; +if(cn){ +for(var i=0;i0){ +var _414=m.filter; +_413=function(node){ +return _414(_413.ignoreAttrFilter,node.attributes); +}; +_413.ignoreAttr={}; +var _415=_412.attributes; +var _416=_413.ignoreAttr; +for(var i=0;i<_415.length;i++){ +var a=_415[i]; +_416[a.name]=a.value; +} +_413.ignoreAttrFilter=function(a){ +return (_413.ignoreAttr[a.name]!=a.value); +}; +_413.compliant=false; +_413.renames={"class":"className","checked":"defaultChecked","usemap":"useMap","for":"htmlFor","readonly":"readOnly"}; +}else{ +_413=function(node){ +return node.attributes; +}; +_413.compliant=true; +_413.renames={}; +} +this.attributeArray=_413; +var _417=function(_418,arr){ +var _419=arr[1].split("."); +var str=""; +var obj={}; +str+="if (!MochiKit."+_419[1]+") { throw new Error(\""; +str+="This function has been deprecated and depends on MochiKit."; +str+=_419[1]+".\");}"; +str+="return MochiKit."+_419[1]+"."+arr[0]; +str+=".apply(this, arguments);"; +obj[_419[2]]=new Function(str); +MochiKit.Base.update(MochiKit[_418],obj); +}; +for(var i;i<&-]/g,"_"); +var name=uid+"_"+url; +var nwin=win.open("",name,"dependent,resizable,height=200"); +if(!nwin){ +alert("Not able to open debugging window due to pop-up blocking."); +return undefined; +} +nwin.document.write(""+"[MochiKit.LoggingPane]"+""); +nwin.document.close(); +nwin.document.title+=" "+win.document.title; +win=nwin; +} +var doc=win.document; +this.doc=doc; +var _467=doc.getElementById(uid); +var _468=!!_467; +if(_467&&typeof (_467.loggingPane)!="undefined"){ +_467.loggingPane.logger=this.logger; +_467.loggingPane.buildAndApplyFilter(); +return _467.loggingPane; +} +if(_468){ +var _469; +while((_469=_467.firstChild)){ +_467.removeChild(_469); +} +}else{ +_467=doc.createElement("div"); +_467.id=uid; +} +_467.loggingPane=this; +var _470=doc.createElement("input"); +var _471=doc.createElement("input"); +var _472=doc.createElement("button"); +var _473=doc.createElement("button"); +var _474=doc.createElement("button"); +var _475=doc.createElement("button"); +var _476=doc.createElement("div"); +var _477=doc.createElement("div"); +var _478=uid+"_Listener"; +this.colorTable=_464(this.colorTable); +var _479=[]; +var _480=null; +var _481=function(msg){ +var _482=msg.level; +if(typeof (_482)=="number"){ +_482=MochiKit.Logging.LogLevel[_482]; +} +return _482; +}; +var _483=function(msg){ +return msg.info.join(" "); +}; +var _484=bind(function(msg){ +var _485=_481(msg); +var text=_483(msg); +var c=this.colorTable[_485]; +var p=doc.createElement("span"); +p.className="MochiKit-LogMessage MochiKit-LogLevel-"+_485; +p.style.cssText="margin: 0px; white-space: -moz-pre-wrap; white-space: -o-pre-wrap; white-space: pre-wrap; white-space: pre-line; word-wrap: break-word; wrap-option: emergency; color: "+c; +p.appendChild(doc.createTextNode(_485+": "+text)); +_477.appendChild(p); +_477.appendChild(doc.createElement("br")); +if(_476.offsetHeight>_476.scrollHeight){ +_476.scrollTop=0; +}else{ +_476.scrollTop=_476.scrollHeight; +} +},this); +var _487=function(msg){ +_479[_479.length]=msg; +_484(msg); +}; +var _488=function(){ +var _489,infore; +try{ +_489=new RegExp(_470.value); +infore=new RegExp(_471.value); +} +catch(e){ +logDebug("Error in filter regex: "+e.message); +return null; +} +return function(msg){ +return (_489.test(_481(msg))&&infore.test(_483(msg))); +}; +}; +var _490=function(){ +while(_477.firstChild){ +_477.removeChild(_477.firstChild); +} +}; +var _491=function(){ +_479=[]; +_490(); +}; +var _492=bind(function(){ +if(this.closed){ +return; +} +this.closed=true; +if(MochiKit.LoggingPane._loggingPane==this){ +MochiKit.LoggingPane._loggingPane=null; +} +this.logger.removeListener(_478); +_467.loggingPane=null; +if(_460){ +_467.parentNode.removeChild(_467); +}else{ +this.win.close(); +} +},this); +var _493=function(){ +_490(); +for(var i=0;i<_479.length;i++){ +var msg=_479[i]; +if(_480===null||_480(msg)){ +_484(msg); +} +} +}; +this.buildAndApplyFilter=function(){ +_480=_488(); +_493(); +this.logger.removeListener(_478); +this.logger.addListener(_478,_480,_487); +}; +var _494=bind(function(){ +_479=this.logger.getMessages(); +_493(); +},this); +var _495=bind(function(_496){ +_496=_496||window.event; +key=_496.which||_496.keyCode; +if(key==13){ +this.buildAndApplyFilter(); +} +},this); +var _497="display: block; z-index: 1000; left: 0px; bottom: 0px; position: fixed; width: 100%; background-color: white; font: "+this.logFont; +if(_460){ +_497+="; height: 10em; border-top: 2px solid black"; +}else{ +_497+="; height: 100%;"; +} +_467.style.cssText=_497; +if(!_468){ +doc.body.appendChild(_467); +} +_497={"cssText":"width: 33%; display: inline; font: "+this.logFont}; +_463(_470,{"value":"FATAL|ERROR|WARNING|INFO|DEBUG","onkeypress":_495,"style":_497}); +_467.appendChild(_470); +_463(_471,{"value":".*","onkeypress":_495,"style":_497}); +_467.appendChild(_471); +_497="width: 8%; display:inline; font: "+this.logFont; +_472.appendChild(doc.createTextNode("Filter")); +_472.onclick=bind("buildAndApplyFilter",this); +_472.style.cssText=_497; +_467.appendChild(_472); +_473.appendChild(doc.createTextNode("Load")); +_473.onclick=_494; +_473.style.cssText=_497; +_467.appendChild(_473); +_474.appendChild(doc.createTextNode("Clear")); +_474.onclick=_491; +_474.style.cssText=_497; +_467.appendChild(_474); +_475.appendChild(doc.createTextNode("Close")); +_475.onclick=_492; +_475.style.cssText=_497; +_467.appendChild(_475); +_476.style.cssText="overflow: auto; width: 100%"; +_477.style.cssText="width: 100%; height: "+(_460?"8em":"100%"); +_476.appendChild(_477); +_467.appendChild(_476); +this.buildAndApplyFilter(); +_494(); +if(_460){ +this.win=undefined; +}else{ +this.win=win; +} +this.inline=_460; +this.closePane=_492; +this.closed=false; +return this; +}; +MochiKit.LoggingPane.LoggingPane.prototype={"logFont":"8pt Verdana,sans-serif","colorTable":{"ERROR":"red","FATAL":"darkred","WARNING":"blue","INFO":"black","DEBUG":"green"}}; +MochiKit.LoggingPane.EXPORT_OK=["LoggingPane"]; +MochiKit.LoggingPane.EXPORT=["createLoggingPane"]; +MochiKit.LoggingPane.__new__=function(){ +this.EXPORT_TAGS={":common":this.EXPORT,":all":MochiKit.Base.concat(this.EXPORT,this.EXPORT_OK)}; +MochiKit.Base.nameFunctions(this); +MochiKit.LoggingPane._loggingPane=null; +}; +MochiKit.LoggingPane.__new__(); +MochiKit.Base._exportSymbols(this,MochiKit.LoggingPane); +if(typeof (dojo)!="undefined"){ +dojo.provide("MochiKit.Color"); +dojo.require("MochiKit.Base"); +dojo.require("MochiKit.DOM"); +dojo.require("MochiKit.Style"); +} +if(typeof (JSAN)!="undefined"){ +JSAN.use("MochiKit.Base",[]); +JSAN.use("MochiKit.DOM",[]); +JSAN.use("MochiKit.Style",[]); +} +try{ +if(typeof (MochiKit.Base)=="undefined"){ +throw ""; +} +} +catch(e){ +throw "MochiKit.Color depends on MochiKit.Base"; +} +try{ +if(typeof (MochiKit.Base)=="undefined"){ +throw ""; +} +} +catch(e){ +throw "MochiKit.Color depends on MochiKit.DOM"; +} +try{ +if(typeof (MochiKit.Base)=="undefined"){ +throw ""; +} +} +catch(e){ +throw "MochiKit.Color depends on MochiKit.Style"; +} +if(typeof (MochiKit.Color)=="undefined"){ +MochiKit.Color={}; +} +MochiKit.Color.NAME="MochiKit.Color"; +MochiKit.Color.VERSION="1.4"; +MochiKit.Color.__repr__=function(){ +return "["+this.NAME+" "+this.VERSION+"]"; +}; +MochiKit.Color.toString=function(){ +return this.__repr__(); +}; +MochiKit.Color.Color=function(red,_499,blue,_501){ +if(typeof (_501)=="undefined"||_501===null){ +_501=1; +} +this.rgb={r:red,g:_499,b:blue,a:_501}; +}; +MochiKit.Color.Color.prototype={__class__:MochiKit.Color.Color,colorWithAlpha:function(_502){ +var rgb=this.rgb; +var m=MochiKit.Color; +return m.Color.fromRGB(rgb.r,rgb.g,rgb.b,_502); +},colorWithHue:function(hue){ +var hsl=this.asHSL(); +hsl.h=hue; +var m=MochiKit.Color; +return m.Color.fromHSL(hsl); +},colorWithSaturation:function(_506){ +var hsl=this.asHSL(); +hsl.s=_506; +var m=MochiKit.Color; +return m.Color.fromHSL(hsl); +},colorWithLightness:function(_507){ +var hsl=this.asHSL(); +hsl.l=_507; +var m=MochiKit.Color; +return m.Color.fromHSL(hsl); +},darkerColorWithLevel:function(_508){ +var hsl=this.asHSL(); +hsl.l=Math.max(hsl.l-_508,0); +var m=MochiKit.Color; +return m.Color.fromHSL(hsl); +},lighterColorWithLevel:function(_509){ +var hsl=this.asHSL(); +hsl.l=Math.min(hsl.l+_509,1); +var m=MochiKit.Color; +return m.Color.fromHSL(hsl); +},blendedColor:function(_510,_511){ +if(typeof (_511)=="undefined"||_511===null){ +_511=0.5; +} +var sf=1-_511; +var s=this.rgb; +var d=_510.rgb; +var df=_511; +return MochiKit.Color.Color.fromRGB((s.r*sf)+(d.r*df),(s.g*sf)+(d.g*df),(s.b*sf)+(d.b*df),(s.a*sf)+(d.a*df)); +},compareRGB:function(_514){ +var a=this.asRGB(); +var b=_514.asRGB(); +return MochiKit.Base.compare([a.r,a.g,a.b,a.a],[b.r,b.g,b.b,b.a]); +},isLight:function(){ +return this.asHSL().b>0.5; +},isDark:function(){ +return (!this.isLight()); +},toHSLString:function(){ +var c=this.asHSL(); +var ccc=MochiKit.Color.clampColorComponent; +var rval=this._hslString; +if(!rval){ +var mid=(ccc(c.h,360).toFixed(0)+","+ccc(c.s,100).toPrecision(4)+"%"+","+ccc(c.l,100).toPrecision(4)+"%"); +var a=c.a; +if(a>=1){ +a=1; +rval="hsl("+mid+")"; +}else{ +if(a<=0){ +a=0; +} +rval="hsla("+mid+","+a+")"; +} +this._hslString=rval; +} +return rval; +},toRGBString:function(){ +var c=this.rgb; +var ccc=MochiKit.Color.clampColorComponent; +var rval=this._rgbString; +if(!rval){ +var mid=(ccc(c.r,255).toFixed(0)+","+ccc(c.g,255).toFixed(0)+","+ccc(c.b,255).toFixed(0)); +if(c.a!=1){ +rval="rgba("+mid+","+c.a+")"; +}else{ +rval="rgb("+mid+")"; +} +this._rgbString=rval; +} +return rval; +},asRGB:function(){ +return MochiKit.Base.clone(this.rgb); +},toHexString:function(){ +var m=MochiKit.Color; +var c=this.rgb; +var ccc=MochiKit.Color.clampColorComponent; +var rval=this._hexString; +if(!rval){ +rval=("#"+m.toColorPart(ccc(c.r,255))+m.toColorPart(ccc(c.g,255))+m.toColorPart(ccc(c.b,255))); +this._hexString=rval; +} +return rval; +},asHSV:function(){ +var hsv=this.hsv; +var c=this.rgb; +if(typeof (hsv)=="undefined"||hsv===null){ +hsv=MochiKit.Color.rgbToHSV(this.rgb); +this.hsv=hsv; +} +return MochiKit.Base.clone(hsv); +},asHSL:function(){ +var hsl=this.hsl; +var c=this.rgb; +if(typeof (hsl)=="undefined"||hsl===null){ +hsl=MochiKit.Color.rgbToHSL(this.rgb); +this.hsl=hsl; +} +return MochiKit.Base.clone(hsl); +},toString:function(){ +return this.toRGBString(); +},repr:function(){ +var c=this.rgb; +var col=[c.r,c.g,c.b,c.a]; +return this.__class__.NAME+"("+col.join(", ")+")"; +}}; +MochiKit.Base.update(MochiKit.Color.Color,{fromRGB:function(red,_519,blue,_520){ +var _521=MochiKit.Color.Color; +if(arguments.length==1){ +var rgb=red; +red=rgb.r; +_519=rgb.g; +blue=rgb.b; +if(typeof (rgb.a)=="undefined"){ +_520=undefined; +}else{ +_520=rgb.a; +} +} +return new _521(red,_519,blue,_520); +},fromHSL:function(hue,_522,_523,_524){ +var m=MochiKit.Color; +return m.Color.fromRGB(m.hslToRGB.apply(m,arguments)); +},fromHSV:function(hue,_525,_526,_527){ +var m=MochiKit.Color; +return m.Color.fromRGB(m.hsvToRGB.apply(m,arguments)); +},fromName:function(name){ +var _528=MochiKit.Color.Color; +if(name.charAt(0)=="\""){ +name=name.substr(1,name.length-2); +} +var _529=_528._namedColors[name.toLowerCase()]; +if(typeof (_529)=="string"){ +return _528.fromHexString(_529); +}else{ +if(name=="transparent"){ +return _528.transparentColor(); +} +} +return null; +},fromString:function(_530){ +var self=MochiKit.Color.Color; +var _531=_530.substr(0,3); +if(_531=="rgb"){ +return self.fromRGBString(_530); +}else{ +if(_531=="hsl"){ +return self.fromHSLString(_530); +}else{ +if(_530.charAt(0)=="#"){ +return self.fromHexString(_530); +} +} +} +return self.fromName(_530); +},fromHexString:function(_532){ +if(_532.charAt(0)=="#"){ +_532=_532.substring(1); +} +var _533=[]; +var i,hex; +if(_532.length==3){ +for(i=0;i<3;i++){ +hex=_532.substr(i,1); +_533.push(parseInt(hex+hex,16)/255); +} +}else{ +for(i=0;i<6;i+=2){ +hex=_532.substr(i,2); +_533.push(parseInt(hex,16)/255); +} +} +var _534=MochiKit.Color.Color; +return _534.fromRGB.apply(_534,_533); +},_fromColorString:function(pre,_536,_537,_538){ +if(_538.indexOf(pre)===0){ +_538=_538.substring(_538.indexOf("(",3)+1,_538.length-1); +} +var _539=_538.split(/\s*,\s*/); +var _540=[]; +for(var i=0;i<_539.length;i++){ +var c=_539[i]; +var val; +var _541=c.substring(c.length-3); +if(c.charAt(c.length-1)=="%"){ +val=0.01*parseFloat(c.substring(0,c.length-1)); +}else{ +if(_541=="deg"){ +val=parseFloat(c)/360; +}else{ +if(_541=="rad"){ +val=parseFloat(c)/(Math.PI*2); +}else{ +val=_537[i]*parseFloat(c); +} +} +} +_540.push(val); +} +return this[_536].apply(this,_540); +},fromComputedStyle:function(elem,_542){ +var d=MochiKit.DOM; +var cls=MochiKit.Color.Color; +for(elem=d.getElement(elem);elem;elem=elem.parentNode){ +var _543=MochiKit.Style.computedStyle.apply(d,arguments); +if(!_543){ +continue; +} +var _544=cls.fromString(_543); +if(!_544){ +break; +} +if(_544.asRGB().a>0){ +return _544; +} +} +return null; +},fromBackground:function(elem){ +var cls=MochiKit.Color.Color; +return cls.fromComputedStyle(elem,"backgroundColor","background-color")||cls.whiteColor(); +},fromText:function(elem){ +var cls=MochiKit.Color.Color; +return cls.fromComputedStyle(elem,"color","color")||cls.blackColor(); +},namedColors:function(){ +return MochiKit.Base.clone(MochiKit.Color.Color._namedColors); +}}); +MochiKit.Base.update(MochiKit.Color,{clampColorComponent:function(v,_545){ +v*=_545; +if(v<0){ +return 0; +}else{ +if(v>_545){ +return _545; +}else{ +return v; +} +} +},_hslValue:function(n1,n2,hue){ +if(hue>6){ +hue-=6; +}else{ +if(hue<0){ +hue+=6; +} +} +var val; +if(hue<1){ +val=n1+(n2-n1)*hue; +}else{ +if(hue<3){ +val=n2; +}else{ +if(hue<4){ +val=n1+(n2-n1)*(4-hue); +}else{ +val=n1; +} +} +} +return val; +},hsvToRGB:function(hue,_548,_549,_550){ +if(arguments.length==1){ +var hsv=hue; +hue=hsv.h; +_548=hsv.s; +_549=hsv.v; +_550=hsv.a; +} +var red; +var _551; +var blue; +if(_548===0){ +red=0; +_551=0; +blue=0; +}else{ +var i=Math.floor(hue*6); +var f=(hue*6)-i; +var p=_549*(1-_548); +var q=_549*(1-(_548*f)); +var t=_549*(1-(_548*(1-f))); +switch(i){ +case 1: +red=q; +_551=_549; +blue=p; +break; +case 2: +red=p; +_551=_549; +blue=t; +break; +case 3: +red=p; +_551=q; +blue=_549; +break; +case 4: +red=t; +_551=p; +blue=_549; +break; +case 5: +red=_549; +_551=p; +blue=q; +break; +case 6: +case 0: +red=_549; +_551=t; +blue=p; +break; +} +} +return {r:red,g:_551,b:blue,a:_550}; +},hslToRGB:function(hue,_553,_554,_555){ +if(arguments.length==1){ +var hsl=hue; +hue=hsl.h; +_553=hsl.s; +_554=hsl.l; +_555=hsl.a; +} +var red; +var _556; +var blue; +if(_553===0){ +red=_554; +_556=_554; +blue=_554; +}else{ +var m2; +if(_554<=0.5){ +m2=_554*(1+_553); +}else{ +m2=_554+_553-(_554*_553); +} +var m1=(2*_554)-m2; +var f=MochiKit.Color._hslValue; +var h6=hue*6; +red=f(m1,m2,h6+2); +_556=f(m1,m2,h6); +blue=f(m1,m2,h6-2); +} +return {r:red,g:_556,b:blue,a:_555}; +},rgbToHSV:function(red,_560,blue,_561){ +if(arguments.length==1){ +var rgb=red; +red=rgb.r; +_560=rgb.g; +blue=rgb.b; +_561=rgb.a; +} +var max=Math.max(Math.max(red,_560),blue); +var min=Math.min(Math.min(red,_560),blue); +var hue; +var _564; +var _565=max; +if(min==max){ +hue=0; +_564=0; +}else{ +var _566=(max-min); +_564=_566/max; +if(red==max){ +hue=(_560-blue)/_566; +}else{ +if(_560==max){ +hue=2+((blue-red)/_566); +}else{ +hue=4+((red-_560)/_566); +} +} +hue/=6; +if(hue<0){ +hue+=1; +} +if(hue>1){ +hue-=1; +} +} +return {h:hue,s:_564,v:_565,a:_561}; +},rgbToHSL:function(red,_567,blue,_568){ +if(arguments.length==1){ +var rgb=red; +red=rgb.r; +_567=rgb.g; +blue=rgb.b; +_568=rgb.a; +} +var max=Math.max(red,Math.max(_567,blue)); +var min=Math.min(red,Math.min(_567,blue)); +var hue; +var _569; +var _570=(max+min)/2; +var _571=max-min; +if(_571===0){ +hue=0; +_569=0; +}else{ +if(_570<=0.5){ +_569=_571/(max+min); +}else{ +_569=_571/(2-max-min); +} +if(red==max){ +hue=(_567-blue)/_571; +}else{ +if(_567==max){ +hue=2+((blue-red)/_571); +}else{ +hue=4+((red-_567)/_571); +} +} +hue/=6; +if(hue<0){ +hue+=1; +} +if(hue>1){ +hue-=1; +} +} +return {h:hue,s:_569,l:_570,a:_568}; +},toColorPart:function(num){ +num=Math.round(num); +var _572=num.toString(16); +if(num<16){ +return "0"+_572; +} +return _572; +},__new__:function(){ +var m=MochiKit.Base; +this.Color.fromRGBString=m.bind(this.Color._fromColorString,this.Color,"rgb","fromRGB",[1/255,1/255,1/255,1]); +this.Color.fromHSLString=m.bind(this.Color._fromColorString,this.Color,"hsl","fromHSL",[1/360,0.01,0.01,1]); +var _573=1/3; +var _574={black:[0,0,0],blue:[0,0,1],brown:[0.6,0.4,0.2],cyan:[0,1,1],darkGray:[_573,_573,_573],gray:[0.5,0.5,0.5],green:[0,1,0],lightGray:[2*_573,2*_573,2*_573],magenta:[1,0,1],orange:[1,0.5,0],purple:[0.5,0,0.5],red:[1,0,0],transparent:[0,0,0,0],white:[1,1,1],yellow:[1,1,0]}; +var _575=function(name,r,g,b,a){ +var rval=this.fromRGB(r,g,b,a); +this[name]=function(){ +return rval; +}; +return rval; +}; +for(var k in _574){ +var name=k+"Color"; +var _577=m.concat([_575,this.Color,name],_574[k]); +this.Color[name]=m.bind.apply(null,_577); +} +var _578=function(){ +for(var i=0;i1){ +var src=MochiKit.DOM.getElement(arguments[0]); +var sig=arguments[1]; +var obj=arguments[2]; +var func=arguments[3]; +for(var i=_597.length-1;i>=0;i--){ +var o=_597[i]; +if(o[0]===src&&o[1]===sig&&o[4]===obj&&o[5]===func){ +self._disconnect(o); +if(!self._lock){ +_597.splice(i,1); +}else{ +self._dirty=true; +} +return true; +} +} +}else{ +var idx=m.findIdentical(_597,_596); +if(idx>=0){ +self._disconnect(_596); +if(!self._lock){ +_597.splice(idx,1); +}else{ +self._dirty=true; +} +return true; +} +} +return false; +},disconnectAll:function(src,sig){ +src=MochiKit.DOM.getElement(src); +var m=MochiKit.Base; +var _598=m.flattenArguments(m.extend(null,arguments,1)); +var self=MochiKit.Signal; +var _599=self._disconnect; +var _600=self._observers; +var i,ident; +var _601=self._lock; +var _602=self._dirty; +if(_598.length===0){ +for(i=_600.length-1;i>=0;i--){ +ident=_600[i]; +if(ident[0]===src){ +_599(ident); +if(!_601){ +_600.splice(i,1); +}else{ +_602=true; +} +} +} +}else{ +var sigs={}; +for(i=0;i<_598.length;i++){ +sigs[_598[i]]=true; +} +for(i=_600.length-1;i>=0;i--){ +ident=_600[i]; +if(ident[0]===src&&ident[1] in sigs){ +_599(ident); +if(!_601){ +_600.splice(i,1); +}else{ +_602=true; +} +} +} +} +self._dirty=_602; +},signal:function(src,sig){ +var self=MochiKit.Signal; +var _604=self._observers; +src=MochiKit.DOM.getElement(src); +var args=MochiKit.Base.extend(null,arguments,2); +var _605=[]; +self._lock=true; +for(var i=0;i<_604.length;i++){ +var _606=_604[i]; +if(_606[0]===src&&_606[1]===sig){ +try{ +_606[2].apply(src,args); +} +catch(e){ +_605.push(e); +} +} +} +self._lock=false; +if(self._dirty){ +self._dirty=false; +for(var i=_604.length-1;i>=0;i--){ +if(!_604[i][6]){ +_604.splice(i,1); +} +} +} +if(_605.length==1){ +throw _605[0]; +}else{ +if(_605.length>1){ +var e=new Error("Multiple errors thrown in handling 'sig', see errors property"); +e.errors=_605; +throw e; +} +} +}}); +MochiKit.Signal.EXPORT_OK=[]; +MochiKit.Signal.EXPORT=["connect","disconnect","signal","disconnectAll"]; +MochiKit.Signal.__new__=function(win){ +var m=MochiKit.Base; +this._document=document; +this._window=win; +this._lock=false; +this._dirty=false; +try{ +this.connect(window,"onunload",this._unloadCache); +} +catch(e){ +} +this.EXPORT_TAGS={":common":this.EXPORT,":all":m.concat(this.EXPORT,this.EXPORT_OK)}; +m.nameFunctions(this); +}; +MochiKit.Signal.__new__(this); +if(MochiKit.__export__){ +connect=MochiKit.Signal.connect; +disconnect=MochiKit.Signal.disconnect; +disconnectAll=MochiKit.Signal.disconnectAll; +signal=MochiKit.Signal.signal; +} +MochiKit.Base._exportSymbols(this,MochiKit.Signal); +if(typeof (dojo)!="undefined"){ +dojo.provide("MochiKit.Visual"); +dojo.require("MochiKit.Base"); +dojo.require("MochiKit.DOM"); +dojo.require("MochiKit.Style"); +dojo.require("MochiKit.Color"); +} +if(typeof (JSAN)!="undefined"){ +JSAN.use("MochiKit.Base",[]); +JSAN.use("MochiKit.DOM",[]); +JSAN.use("MochiKit.Style",[]); +JSAN.use("MochiKit.Color",[]); +} +try{ +if(typeof (MochiKit.Base)==="undefined"||typeof (MochiKit.DOM)==="undefined"||typeof (MochiKit.Style)==="undefined"||typeof (MochiKit.Color)==="undefined"){ +throw ""; +} +} +catch(e){ +throw "MochiKit.Visual depends on MochiKit.Base, MochiKit.DOM, MochiKit.Style and MochiKit.Color!"; +} +if(typeof (MochiKit.Visual)=="undefined"){ +MochiKit.Visual={}; +} +MochiKit.Visual.NAME="MochiKit.Visual"; +MochiKit.Visual.VERSION="1.4"; +MochiKit.Visual.__repr__=function(){ +return "["+this.NAME+" "+this.VERSION+"]"; +}; +MochiKit.Visual.toString=function(){ +return this.__repr__(); +}; +MochiKit.Visual._RoundCorners=function(e,_607){ +e=MochiKit.DOM.getElement(e); +this._setOptions(_607); +if(this.options.__unstable__wrapElement){ +e=this._doWrap(e); +} +var _608=this.options.color; +var C=MochiKit.Color.Color; +if(this.options.color==="fromElement"){ +_608=C.fromBackground(e); +}else{ +if(!(_608 instanceof C)){ +_608=C.fromString(_608); +} +} +this.isTransparent=(_608.asRGB().a<=0); +var _610=this.options.bgColor; +if(this.options.bgColor==="fromParent"){ +_610=C.fromBackground(e.offsetParent); +}else{ +if(!(_610 instanceof C)){ +_610=C.fromString(_610); +} +} +this._roundCornersImpl(e,_608,_610); +}; +MochiKit.Visual._RoundCorners.prototype={_doWrap:function(e){ +var _611=e.parentNode; +var doc=MochiKit.DOM.currentDocument(); +if(typeof (doc.defaultView)==="undefined"||doc.defaultView===null){ +return e; +} +var _612=doc.defaultView.getComputedStyle(e,null); +if(typeof (_612)==="undefined"||_612===null){ +return e; +} +var _613=MochiKit.DOM.DIV({"style":{display:"block",marginTop:_612.getPropertyValue("padding-top"),marginRight:_612.getPropertyValue("padding-right"),marginBottom:_612.getPropertyValue("padding-bottom"),marginLeft:_612.getPropertyValue("padding-left"),padding:"0px"}}); +_613.innerHTML=e.innerHTML; +e.innerHTML=""; +e.appendChild(_613); +return e; +},_roundCornersImpl:function(e,_614,_615){ +if(this.options.border){ +this._renderBorder(e,_615); +} +if(this._isTopRounded()){ +this._roundTopCorners(e,_614,_615); +} +if(this._isBottomRounded()){ +this._roundBottomCorners(e,_614,_615); +} +},_renderBorder:function(el,_617){ +var _618="1px solid "+this._borderColor(_617); +var _619="border-left: "+_618; +var _620="border-right: "+_618; +var _621="style='"+_619+";"+_620+"'"; +el.innerHTML="
"+el.innerHTML+"
"; +},_roundTopCorners:function(el,_622,_623){ +var _624=this._createCorner(_623); +for(var i=0;i=0;i--){ +_627.appendChild(this._createCornerSlice(_625,_626,i,"bottom")); +} +el.style.paddingBottom=0; +el.appendChild(_627); +},_createCorner:function(_628){ +var dom=MochiKit.DOM; +return dom.DIV({style:{backgroundColor:_628.toString()}}); +},_createCornerSlice:function(_629,_630,n,_631){ +var _632=MochiKit.DOM.SPAN(); +var _633=_632.style; +_633.backgroundColor=_629.toString(); +_633.display="block"; +_633.height="1px"; +_633.overflow="hidden"; +_633.fontSize="1px"; +var _634=this._borderColor(_629,_630); +if(this.options.border&&n===0){ +_633.borderTopStyle="solid"; +_633.borderTopWidth="1px"; +_633.borderLeftWidth="0px"; +_633.borderRightWidth="0px"; +_633.borderBottomWidth="0px"; +_633.height="0px"; +_633.borderColor=_634.toString(); +}else{ +if(_634){ +_633.borderColor=_634.toString(); +_633.borderStyle="solid"; +_633.borderWidth="0px 1px"; +} +} +if(!this.options.compact&&(n==(this.options.numSlices-1))){ +_633.height="2px"; +} +this._setMargin(_632,n,_631); +this._setBorder(_632,n,_631); +return _632; +},_setOptions:function(_635){ +this.options={corners:"all",color:"fromElement",bgColor:"fromParent",blend:true,border:false,compact:false,__unstable__wrapElement:false}; +MochiKit.Base.update(this.options,_635); +this.options.numSlices=(this.options.compact?2:4); +},_whichSideTop:function(){ +var _636=this.options.corners; +if(this._hasString(_636,"all","top")){ +return ""; +} +var _637=(_636.indexOf("tl")!=-1); +var _638=(_636.indexOf("tr")!=-1); +if(_637&&_638){ +return ""; +} +if(_637){ +return "left"; +} +if(_638){ +return "right"; +} +return ""; +},_whichSideBottom:function(){ +var _639=this.options.corners; +if(this._hasString(_639,"all","bottom")){ +return ""; +} +var _640=(_639.indexOf("bl")!=-1); +var _641=(_639.indexOf("br")!=-1); +if(_640&&_641){ +return ""; +} +if(_640){ +return "left"; +} +if(_641){ +return "right"; +} +return ""; +},_borderColor:function(_642,_643){ +if(_642=="transparent"){ +return _643; +}else{ +if(this.options.border){ +return this.options.border; +}else{ +if(this.options.blend){ +return _643.blendedColor(_642); +} +} +} +return ""; +},_setMargin:function(el,n,_644){ +var _645=this._marginSize(n)+"px"; +var _646=(_644=="top"?this._whichSideTop():this._whichSideBottom()); +var _647=el.style; +if(_646=="left"){ +_647.marginLeft=_645; +_647.marginRight="0px"; +}else{ +if(_646=="right"){ +_647.marginRight=_645; +_647.marginLeft="0px"; +}else{ +_647.marginLeft=_645; +_647.marginRight=_645; +} +} +},_setBorder:function(el,n,_648){ +var _649=this._borderSize(n)+"px"; +var _650=(_648=="top"?this._whichSideTop():this._whichSideBottom()); +var _651=el.style; +if(_650=="left"){ +_651.borderLeftWidth=_649; +_651.borderRightWidth="0px"; +}else{ +if(_650=="right"){ +_651.borderRightWidth=_649; +_651.borderLeftWidth="0px"; +}else{ +_651.borderLeftWidth=_649; +_651.borderRightWidth=_649; +} +} +},_marginSize:function(n){ +if(this.isTransparent){ +return 0; +} +var o=this.options; +if(o.compact&&o.blend){ +var _652=[1,0]; +return _652[n]; +}else{ +if(o.compact){ +var _653=[2,1]; +return _653[n]; +}else{ +if(o.blend){ +var _654=[3,2,1,0]; +return _654[n]; +}else{ +var _655=[5,3,2,1]; +return _655[n]; +} +} +} +},_borderSize:function(n){ +var o=this.options; +var _656; +if(o.compact&&(o.blend||this.isTransparent)){ +return 1; +}else{ +if(o.compact){ +_656=[1,0]; +}else{ +if(o.blend){ +_656=[2,1,1,1]; +}else{ +if(o.border){ +_656=[0,2,0,0]; +}else{ +if(this.isTransparent){ +_656=[5,3,2,1]; +}else{ +return 0; +} +} +} +} +} +return _656[n]; +},_hasString:function(str){ +for(var i=1;i=(_681||i)){ +_681=i; +} +},this.effects); +_679=_681||_679; +break; +case "break": +ma(function(e){ +e.finalize(); +},this.effects); +break; +} +_678.startOn+=_679; +_678.finishOn+=_679; +if(!_678.options.queue.limit||this.effects.length<_678.options.queue.limit){ +this.effects.push(_678); +} +if(!this.interval){ +this.interval=this.startLoop(MochiKit.Base.bind(this.loop,this),40); +} +},startLoop:function(func,_682){ +return setInterval(func,_682); +},remove:function(_683){ +this.effects=MochiKit.Base.filter(function(e){ +return e!=_683; +},this.effects); +if(this.effects.length==0){ +this.stopLoop(this.interval); +this.interval=null; +} +},stopLoop:function(_684){ +clearInterval(_684); +},loop:function(){ +var _685=new Date().getTime(); +MochiKit.Base.map(function(_686){ +_686.loop(_685); +},this.effects); +}}); +MochiKit.Visual.Queues={instances:{},get:function(_687){ +if(typeof (_687)!="string"){ +return _687; +} +if(!this.instances[_687]){ +this.instances[_687]=new MochiKit.Visual.ScopedQueue(); +} +return this.instances[_687]; +}}; +MochiKit.Visual.Queue=MochiKit.Visual.Queues.get("global"); +MochiKit.Visual.DefaultOptions={transition:MochiKit.Visual.Transitions.sinoidal,duration:1,fps:25,sync:false,from:0,to:1,delay:0,queue:"parallel"}; +MochiKit.Visual.Base=function(){ +}; +MochiKit.Visual.Base.prototype={__class__:MochiKit.Visual.Base,start:function(_688){ +var v=MochiKit.Visual; +this.options=MochiKit.Base.setdefault(_688||{},v.DefaultOptions); +this.currentFrame=0; +this.state="idle"; +this.startOn=this.options.delay*1000; +this.finishOn=this.startOn+(this.options.duration*1000); +this.event("beforeStart"); +if(!this.options.sync){ +v.Queues.get(typeof (this.options.queue)=="string"?"global":this.options.queue.scope).add(this); +} +},loop:function(_689){ +if(_689>=this.startOn){ +if(_689>=this.finishOn){ +return this.finalize(); +} +var pos=(_689-this.startOn)/(this.finishOn-this.startOn); +var _690=Math.round(pos*this.options.fps*this.options.duration); +if(_690>this.currentFrame){ +this.render(pos); +this.currentFrame=_690; +} +} +},render:function(pos){ +if(this.state=="idle"){ +this.state="running"; +this.event("beforeSetup"); +this.setup(); +this.event("afterSetup"); +} +if(this.state=="running"){ +if(this.options.transition){ +pos=this.options.transition(pos); +} +pos*=(this.options.to-this.options.from); +pos+=this.options.from; +this.event("beforeUpdate"); +this.update(pos); +this.event("afterUpdate"); +} +},cancel:function(){ +if(!this.options.sync){ +MochiKit.Visual.Queues.get(typeof (this.options.queue)=="string"?"global":this.options.queue.scope).remove(this); +} +this.state="finished"; +},finalize:function(){ +this.render(1); +this.cancel(); +this.event("beforeFinish"); +this.finish(); +this.event("afterFinish"); +},setup:function(){ +},finish:function(){ +},update:function(_691){ +},event:function(_692){ +if(this.options[_692+"Internal"]){ +this.options[_692+"Internal"](this); +} +if(this.options[_692]){ +this.options[_692](this); +} +},repr:function(){ +return "["+this.__class__.NAME+", options:"+MochiKit.Base.repr(this.options)+"]"; +}}; +MochiKit.Visual.Parallel=function(_693,_694){ +this.__init__(_693,_694); +}; +MochiKit.Visual.Parallel.prototype=new MochiKit.Visual.Base(); +MochiKit.Base.update(MochiKit.Visual.Parallel.prototype,{__init__:function(_695,_696){ +this.effects=_695||[]; +this.start(_696); +},update:function(_697){ +MochiKit.Base.map(function(_698){ +_698.render(_697); +},this.effects); +},finish:function(){ +MochiKit.Base.map(function(_699){ +_699.finalize(); +},this.effects); +}}); +MochiKit.Visual.Opacity=function(_700,_701){ +this.__init__(_700,_701); +}; +MochiKit.Visual.Opacity.prototype=new MochiKit.Visual.Base(); +MochiKit.Base.update(MochiKit.Visual.Opacity.prototype,{__init__:function(_702,_703){ +var b=MochiKit.Base; +var s=MochiKit.Style; +this.element=MochiKit.DOM.getElement(_702); +if(this.element.currentStyle&&(!this.element.currentStyle.hasLayout)){ +s.setStyle(this.element,{zoom:1}); +} +_703=b.update({from:s.getOpacity(this.element)||0,to:1},_703||{}); +this.start(_703); +},update:function(_704){ +MochiKit.Style.setOpacity(this.element,_704); +}}); +MochiKit.Visual.Move=function(_705,_706){ +this.__init__(_705,_706); +}; +MochiKit.Visual.Move.prototype=new MochiKit.Visual.Base(); +MochiKit.Base.update(MochiKit.Visual.Move.prototype,{__init__:function(_707,_708){ +this.element=MochiKit.DOM.getElement(_707); +_708=MochiKit.Base.update({x:0,y:0,mode:"relative"},_708||{}); +this.start(_708); +},setup:function(){ +MochiKit.DOM.makePositioned(this.element); +var s=this.element.style; +var _709=s.visibility; +var _710=s.display; +if(_710=="none"){ +s.visibility="hidden"; +s.display=""; +} +this.originalLeft=parseFloat(MochiKit.Style.getStyle(this.element,"left")||"0"); +this.originalTop=parseFloat(MochiKit.Style.getStyle(this.element,"top")||"0"); +if(this.options.mode=="absolute"){ +this.options.x-=this.originalLeft; +this.options.y-=this.originalTop; +} +if(_710=="none"){ +s.visibility=_709; +s.display=_710; +} +},update:function(_711){ +MochiKit.Style.setStyle(this.element,{left:Math.round(this.options.x*_711+this.originalLeft)+"px",top:Math.round(this.options.y*_711+this.originalTop)+"px"}); +}}); +MochiKit.Visual.Scale=function(_712,_713,_714){ +this.__init__(_712,_713,_714); +}; +MochiKit.Visual.Scale.prototype=new MochiKit.Visual.Base(); +MochiKit.Base.update(MochiKit.Visual.Scale.prototype,{__init__:function(_715,_716,_717){ +this.element=MochiKit.DOM.getElement(_715); +_717=MochiKit.Base.update({scaleX:true,scaleY:true,scaleContent:true,scaleFromCenter:false,scaleMode:"box",scaleFrom:100,scaleTo:_716},_717||{}); +this.start(_717); +},setup:function(){ +this.restoreAfterFinish=this.options.restoreAfterFinish||false; +this.elementPositioning=MochiKit.Style.getStyle(this.element,"position"); +var ma=MochiKit.Base.map; +var b=MochiKit.Base.bind; +this.originalStyle={}; +ma(b(function(k){ +this.originalStyle[k]=this.element.style[k]; +},this),["top","left","width","height","fontSize"]); +this.originalTop=this.element.offsetTop; +this.originalLeft=this.element.offsetLeft; +var _718=MochiKit.Style.getStyle(this.element,"font-size")||"100%"; +ma(b(function(_719){ +if(_718.indexOf(_719)>0){ +this.fontSize=parseFloat(_718); +this.fontSizeType=_719; +} +},this),["em","px","%"]); +this.factor=(this.options.scaleTo-this.options.scaleFrom)/100; +if(/^content/.test(this.options.scaleMode)){ +this.dims=[this.element.scrollHeight,this.element.scrollWidth]; +}else{ +if(this.options.scaleMode=="box"){ +this.dims=[this.element.offsetHeight,this.element.offsetWidth]; +}else{ +this.dims=[this.options.scaleMode.originalHeight,this.options.scaleMode.originalWidth]; +} +} +},update:function(_720){ +var _721=(this.options.scaleFrom/100)+(this.factor*_720); +if(this.options.scaleContent&&this.fontSize){ +MochiKit.Style.setStyle(this.element,{fontSize:this.fontSize*_721+this.fontSizeType}); +} +this.setDimensions(this.dims[0]*_721,this.dims[1]*_721); +},finish:function(){ +if(this.restoreAfterFinish){ +MochiKit.Style.setStyle(this.element,this.originalStyle); +} +},setDimensions:function(_722,_723){ +var d={}; +var r=Math.round; +if(/MSIE/.test(navigator.userAgent)){ +r=Math.ceil; +} +if(this.options.scaleX){ +d.width=r(_723)+"px"; +} +if(this.options.scaleY){ +d.height=r(_722)+"px"; +} +if(this.options.scaleFromCenter){ +var topd=(_722-this.dims[0])/2; +var _725=(_723-this.dims[1])/2; +if(this.elementPositioning=="absolute"){ +if(this.options.scaleY){ +d.top=this.originalTop-topd+"px"; +} +if(this.options.scaleX){ +d.left=this.originalLeft-_725+"px"; +} +}else{ +if(this.options.scaleY){ +d.top=-topd+"px"; +} +if(this.options.scaleX){ +d.left=-_725+"px"; +} +} +} +MochiKit.Style.setStyle(this.element,d); +}}); +MochiKit.Visual.Highlight=function(_726,_727){ +this.__init__(_726,_727); +}; +MochiKit.Visual.Highlight.prototype=new MochiKit.Visual.Base(); +MochiKit.Base.update(MochiKit.Visual.Highlight.prototype,{__init__:function(_728,_729){ +this.element=MochiKit.DOM.getElement(_728); +_729=MochiKit.Base.update({startcolor:"#ffff99"},_729||{}); +this.start(_729); +},setup:function(){ +var b=MochiKit.Base; +var s=MochiKit.Style; +if(s.getStyle(this.element,"display")=="none"){ +this.cancel(); +return; +} +this.oldStyle={backgroundImage:s.getStyle(this.element,"background-image")}; +s.setStyle(this.element,{backgroundImage:"none"}); +if(!this.options.endcolor){ +this.options.endcolor=MochiKit.Color.Color.fromBackground(this.element).toHexString(); +} +if(b.isUndefinedOrNull(this.options.restorecolor)){ +this.options.restorecolor=s.getStyle(this.element,"background-color"); +} +this._base=b.map(b.bind(function(i){ +return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16); +},this),[0,1,2]); +this._delta=b.map(b.bind(function(i){ +return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i]; +},this),[0,1,2]); +},update:function(_730){ +var m="#"; +MochiKit.Base.map(MochiKit.Base.bind(function(i){ +m+=MochiKit.Color.toColorPart(Math.round(this._base[i]+this._delta[i]*_730)); +},this),[0,1,2]); +MochiKit.Style.setStyle(this.element,{backgroundColor:m}); +},finish:function(){ +MochiKit.Style.setStyle(this.element,MochiKit.Base.update(this.oldStyle,{backgroundColor:this.options.restorecolor})); +}}); +MochiKit.Visual.ScrollTo=function(_731,_732){ +this.__init__(_731,_732); +}; +MochiKit.Visual.ScrollTo.prototype=new MochiKit.Visual.Base(); +MochiKit.Base.update(MochiKit.Visual.ScrollTo.prototype,{__init__:function(_733,_734){ +this.element=MochiKit.DOM.getElement(_733); +this.start(_734||{}); +},setup:function(){ +var p=MochiKit.Position; +p.prepare(); +var _735=p.cumulativeOffset(this.element); +if(this.options.offset){ +_735.y+=this.options.offset; +} +var max; +if(window.innerHeight){ +max=window.innerHeight-window.height; +}else{ +if(document.documentElement&&document.documentElement.clientHeight){ +max=document.documentElement.clientHeight-document.body.scrollHeight; +}else{ +if(document.body){ +max=document.body.clientHeight-document.body.scrollHeight; +} +} +} +this.scrollStart=p.windowOffset.y; +this.delta=(_735.y>max?max:_735.y)-this.scrollStart; +},update:function(_736){ +var p=MochiKit.Position; +p.prepare(); +window.scrollTo(p.windowOffset.x,this.scrollStart+(_736*this.delta)); +}}); +MochiKit.Visual.fade=function(_737,_738){ +var s=MochiKit.Style; +var _739=MochiKit.DOM.getElement(_737).style.opacity||""; +_738=MochiKit.Base.update({from:s.getOpacity(_737)||1,to:0,afterFinishInternal:function(_740){ +if(_740.options.to!==0){ +return; +} +s.hideElement(_740.element); +s.setStyle(_740.element,{opacity:_739}); +}},_738||{}); +return new MochiKit.Visual.Opacity(_737,_738); +}; +MochiKit.Visual.appear=function(_741,_742){ +var s=MochiKit.Style; +var v=MochiKit.Visual; +_742=MochiKit.Base.update({from:(s.getStyle(_741,"display")=="none"?0:s.getOpacity(_741)||0),to:1,afterFinishInternal:function(_743){ +v.forceRerendering(_743.element); +},beforeSetupInternal:function(_744){ +s.setOpacity(_744.element,_744.options.from); +s.showElement(_744.element); +}},_742||{}); +return new v.Opacity(_741,_742); +}; +MochiKit.Visual.puff=function(_745,_746){ +var s=MochiKit.Style; +var v=MochiKit.Visual; +_745=MochiKit.DOM.getElement(_745); +var _747={opacity:_745.style.opacity||"",position:s.getStyle(_745,"position"),top:_745.style.top,left:_745.style.left,width:_745.style.width,height:_745.style.height}; +_746=MochiKit.Base.update({beforeSetupInternal:function(_748){ +MochiKit.Position.absolutize(_748.effects[0].element); +},afterFinishInternal:function(_749){ +s.hideElement(_749.effects[0].element); +s.setStyle(_749.effects[0].element,_747); +}},_746||{}); +return new v.Parallel([new v.Scale(_745,200,{sync:true,scaleFromCenter:true,scaleContent:true,restoreAfterFinish:true}),new v.Opacity(_745,{sync:true,to:0})],_746); +}; +MochiKit.Visual.blindUp=function(_750,_751){ +var d=MochiKit.DOM; +_750=d.getElement(_750); +var _752=d.makeClipping(_750); +_751=MochiKit.Base.update({scaleContent:false,scaleX:false,restoreAfterFinish:true,afterFinishInternal:function(_753){ +MochiKit.Style.hideElement(_753.element); +d.undoClipping(_753.element,_752); +}},_751||{}); +return new MochiKit.Visual.Scale(_750,0,_751); +}; +MochiKit.Visual.blindDown=function(_754,_755){ +var d=MochiKit.DOM; +var s=MochiKit.Style; +_754=d.getElement(_754); +var _756=s.getElementDimensions(_754); +var _757; +_755=MochiKit.Base.update({scaleContent:false,scaleX:false,scaleFrom:0,scaleMode:{originalHeight:_756.h,originalWidth:_756.w},restoreAfterFinish:true,afterSetupInternal:function(_758){ +_757=d.makeClipping(_758.element); +s.setStyle(_758.element,{height:"0px"}); +s.showElement(_758.element); +},afterFinishInternal:function(_759){ +d.undoClipping(_759.element,_757); +}},_755||{}); +return new MochiKit.Visual.Scale(_754,100,_755); +}; +MochiKit.Visual.switchOff=function(_760,_761){ +var d=MochiKit.DOM; +_760=d.getElement(_760); +var _762=_760.style.opacity||""; +var _763; +var _761=MochiKit.Base.update({duration:0.3,scaleFromCenter:true,scaleX:false,scaleContent:false,restoreAfterFinish:true,beforeSetupInternal:function(_764){ +d.makePositioned(_764.element); +_763=d.makeClipping(_764.element); +},afterFinishInternal:function(_765){ +MochiKit.Style.hideElement(_765.element); +d.undoClipping(_765.element,_763); +d.undoPositioned(_765.element); +MochiKit.Style.setStyle(_765.element,{opacity:_762}); +}},_761||{}); +var v=MochiKit.Visual; +return new v.appear(_760,{duration:0.4,from:0,transition:v.Transitions.flicker,afterFinishInternal:function(_766){ +new v.Scale(_766.element,1,_761); +}}); +}; +MochiKit.Visual.dropOut=function(_767,_768){ +var d=MochiKit.DOM; +var s=MochiKit.Style; +_767=d.getElement(_767); +var _769={top:s.getStyle(_767,"top"),left:s.getStyle(_767,"left"),opacity:_767.style.opacity||""}; +_768=MochiKit.Base.update({duration:0.5,beforeSetupInternal:function(_770){ +d.makePositioned(_770.effects[0].element); +},afterFinishInternal:function(_771){ +s.hideElement(_771.effects[0].element); +d.undoPositioned(_771.effects[0].element); +s.setStyle(_771.effects[0].element,_769); +}},_768||{}); +var v=MochiKit.Visual; +return new v.Parallel([new v.Move(_767,{x:0,y:100,sync:true}),new v.Opacity(_767,{sync:true,to:0})],_768); +}; +MochiKit.Visual.shake=function(_772,_773){ +var d=MochiKit.DOM; +var v=MochiKit.Visual; +var s=MochiKit.Style; +_772=d.getElement(_772); +_773=MochiKit.Base.update({x:-20,y:0,duration:0.05,afterFinishInternal:function(_774){ +d.undoPositioned(_774.element); +s.setStyle(_774.element,oldStyle); +}},_773||{}); +var _775={top:s.getStyle(_772,"top"),left:s.getStyle(_772,"left")}; +return new v.Move(_772,{x:20,y:0,duration:0.05,afterFinishInternal:function(_776){ +new v.Move(_776.element,{x:-40,y:0,duration:0.1,afterFinishInternal:function(_776){ +new v.Move(_776.element,{x:40,y:0,duration:0.1,afterFinishInternal:function(_776){ +new v.Move(_776.element,{x:-40,y:0,duration:0.1,afterFinishInternal:function(_776){ +new v.Move(_776.element,{x:40,y:0,duration:0.1,afterFinishInternal:function(_776){ +new v.Move(_776.element,_773); +}}); +}}); +}}); +}}); +}}); +}; +MochiKit.Visual.slideDown=function(_777,_778){ +var d=MochiKit.DOM; +var b=MochiKit.Base; +var s=MochiKit.Style; +_777=d.getElement(_777); +if(!_777.firstChild){ +throw "MochiKit.Visual.slideDown must be used on a element with a child"; +} +d.removeEmptyTextNodes(_777); +var _779=s.getStyle(_777.firstChild,"bottom")||0; +var _780=s.getElementDimensions(_777); +var _781; +_778=b.update({scaleContent:false,scaleX:false,scaleFrom:0,scaleMode:{originalHeight:_780.h,originalWidth:_780.w},restoreAfterFinish:true,afterSetupInternal:function(_782){ +d.makePositioned(_782.element); +d.makePositioned(_782.element.firstChild); +if(/Opera/.test(navigator.userAgent)){ +s.setStyle(_782.element,{top:""}); +} +_781=d.makeClipping(_782.element); +s.setStyle(_782.element,{height:"0px"}); +s.showElement(_782.element); +},afterUpdateInternal:function(_783){ +s.setStyle(_783.element.firstChild,{bottom:(_783.dims[0]-_783.element.clientHeight)+"px"}); +},afterFinishInternal:function(_784){ +d.undoClipping(_784.element,_781); +if(/MSIE/.test(navigator.userAgent)){ +d.undoPositioned(_784.element); +d.undoPositioned(_784.element.firstChild); +}else{ +d.undoPositioned(_784.element.firstChild); +d.undoPositioned(_784.element); +} +s.setStyle(_784.element.firstChild,{bottom:_779}); +}},_778||{}); +return new MochiKit.Visual.Scale(_777,100,_778); +}; +MochiKit.Visual.slideUp=function(_785,_786){ +var d=MochiKit.DOM; +var b=MochiKit.Base; +var s=MochiKit.Style; +_785=d.getElement(_785); +if(!_785.firstChild){ +throw "MochiKit.Visual.slideUp must be used on a element with a child"; +} +d.removeEmptyTextNodes(_785); +var _787=s.getStyle(_785.firstChild,"bottom"); +var _788; +_786=b.update({scaleContent:false,scaleX:false,scaleMode:"box",scaleFrom:100,restoreAfterFinish:true,beforeStartInternal:function(_789){ +d.makePositioned(_789.element); +d.makePositioned(_789.element.firstChild); +if(/Opera/.test(navigator.userAgent)){ +s.setStyle(_789.element,{top:""}); +} +_788=d.makeClipping(_789.element); +s.showElement(_789.element); +},afterUpdateInternal:function(_790){ +s.setStyle(_790.element.firstChild,{bottom:(_790.dims[0]-_790.element.clientHeight)+"px"}); +},afterFinishInternal:function(_791){ +s.hideElement(_791.element); +d.undoClipping(_791.element,_788); +d.undoPositioned(_791.element.firstChild); +d.undoPositioned(_791.element); +s.setStyle(_791.element.firstChild,{bottom:_787}); +}},_786||{}); +return new MochiKit.Visual.Scale(_785,0,_786); +}; +MochiKit.Visual.squish=function(_792,_793){ +var d=MochiKit.DOM; +var b=MochiKit.Base; +var _794; +_793=b.update({restoreAfterFinish:true,beforeSetupInternal:function(_795){ +_794=d.makeClipping(_795.element); +},afterFinishInternal:function(_796){ +MochiKit.Style.hideElement(_796.element); +d.undoClipping(_796.element,_794); +}},_793||{}); +return new MochiKit.Visual.Scale(_792,/Opera/.test(navigator.userAgent)?1:0,_793); +}; +MochiKit.Visual.grow=function(_797,_798){ +var d=MochiKit.DOM; +var v=MochiKit.Visual; +var s=MochiKit.Style; +_797=d.getElement(_797); +_798=MochiKit.Base.update({direction:"center",moveTransition:v.Transitions.sinoidal,scaleTransition:v.Transitions.sinoidal,opacityTransition:v.Transitions.full},_798||{}); +var _799={top:_797.style.top,left:_797.style.left,height:_797.style.height,width:_797.style.width,opacity:_797.style.opacity||""}; +var dims=s.getElementDimensions(_797); +var _801,initialMoveY; +var _802,moveY; +switch(_798.direction){ +case "top-left": +_801=initialMoveY=_802=moveY=0; +break; +case "top-right": +_801=dims.w; +initialMoveY=moveY=0; +_802=-dims.w; +break; +case "bottom-left": +_801=_802=0; +initialMoveY=dims.h; +moveY=-dims.h; +break; +case "bottom-right": +_801=dims.w; +initialMoveY=dims.h; +_802=-dims.w; +moveY=-dims.h; +break; +case "center": +_801=dims.w/2; +initialMoveY=dims.h/2; +_802=-dims.w/2; +moveY=-dims.h/2; +break; +} +var _803=MochiKit.Base.update({beforeSetupInternal:function(_804){ +s.setStyle(_804.effects[0].element,{height:"0px"}); +s.showElement(_804.effects[0].element); +},afterFinishInternal:function(_805){ +d.undoClipping(_805.effects[0].element); +d.undoPositioned(_805.effects[0].element); +s.setStyle(_805.effects[0].element,_799); +}},_798||{}); +return new v.Move(_797,{x:_801,y:initialMoveY,duration:0.01,beforeSetupInternal:function(_806){ +s.hideElement(_806.element); +d.makeClipping(_806.element); +d.makePositioned(_806.element); +},afterFinishInternal:function(_807){ +new v.Parallel([new v.Opacity(_807.element,{sync:true,to:1,from:0,transition:_798.opacityTransition}),new v.Move(_807.element,{x:_802,y:moveY,sync:true,transition:_798.moveTransition}),new v.Scale(_807.element,100,{scaleMode:{originalHeight:dims.h,originalWidth:dims.w},sync:true,scaleFrom:/Opera/.test(navigator.userAgent)?1:0,transition:_798.scaleTransition,restoreAfterFinish:true})],_803); +}}); +}; +MochiKit.Visual.shrink=function(_808,_809){ +var d=MochiKit.DOM; +var v=MochiKit.Visual; +var s=MochiKit.Style; +_808=d.getElement(_808); +_809=MochiKit.Base.update({direction:"center",moveTransition:v.Transitions.sinoidal,scaleTransition:v.Transitions.sinoidal,opacityTransition:v.Transitions.none},_809||{}); +var _810={top:_808.style.top,left:_808.style.left,height:_808.style.height,width:_808.style.width,opacity:_808.style.opacity||""}; +var dims=s.getElementDimensions(_808); +var _811,moveY; +switch(_809.direction){ +case "top-left": +_811=moveY=0; +break; +case "top-right": +_811=dims.w; +moveY=0; +break; +case "bottom-left": +_811=0; +moveY=dims.h; +break; +case "bottom-right": +_811=dims.w; +moveY=dims.h; +break; +case "center": +_811=dims.w/2; +moveY=dims.h/2; +break; +} +var _812; +var _813=MochiKit.Base.update({beforeStartInternal:function(_814){ +_812=d.makePositioned(_814.effects[0].element); +d.makeClipping(_814.effects[0].element); +},afterFinishInternal:function(_815){ +s.hideElement(_815.effects[0].element); +d.undoClipping(_815.effects[0].element,_812); +d.undoPositioned(_815.effects[0].element); +s.setStyle(_815.effects[0].element,_810); +}},_809||{}); +return new v.Parallel([new v.Opacity(_808,{sync:true,to:0,from:1,transition:_809.opacityTransition}),new v.Scale(_808,/Opera/.test(navigator.userAgent)?1:0,{sync:true,transition:_809.scaleTransition,restoreAfterFinish:true}),new v.Move(_808,{x:_811,y:moveY,sync:true,transition:_809.moveTransition})],_813); +}; +MochiKit.Visual.pulsate=function(_816,_817){ +var d=MochiKit.DOM; +var v=MochiKit.Visual; +var b=MochiKit.Base; +var _818=d.getElement(_816).style.opacity||""; +_817=b.update({duration:3,from:0,afterFinishInternal:function(_819){ +MochiKit.Style.setStyle(_819.element,{opacity:_818}); +}},_817||{}); +var _820=_817.transition||v.Transitions.sinoidal; +var _821=b.bind(function(pos){ +return _820(1-v.Transitions.pulse(pos)); +},_820); +b.bind(_821,_820); +return new v.Opacity(_816,b.update({transition:_821},_817)); +}; +MochiKit.Visual.fold=function(_822,_823){ +var d=MochiKit.DOM; +var v=MochiKit.Visual; +var s=MochiKit.Style; +_822=d.getElement(_822); +var _824={top:_822.style.top,left:_822.style.left,width:_822.style.width,height:_822.style.height}; +var _825=d.makeClipping(_822); +_823=MochiKit.Base.update({scaleContent:false,scaleX:false,afterFinishInternal:function(_826){ +new v.Scale(_822,1,{scaleContent:false,scaleY:false,afterFinishInternal:function(_826){ +s.hideElement(_826.element); +d.undoClipping(_826.element,_825); +s.setStyle(_826.element,_824); +}}); +}},_823||{}); +return new v.Scale(_822,5,_823); +}; +MochiKit.Visual.Color=MochiKit.Color.Color; +MochiKit.Visual.getElementsComputedStyle=MochiKit.DOM.computedStyle; +MochiKit.Visual.__new__=function(){ +var m=MochiKit.Base; +m.nameFunctions(this); +this.EXPORT_TAGS={":common":this.EXPORT,":all":m.concat(this.EXPORT,this.EXPORT_OK)}; +}; +MochiKit.Visual.EXPORT=["roundElement","roundClass","tagifyText","multiple","toggle","Base","Parallel","Opacity","Move","Scale","Highlight","ScrollTo","fade","appear","puff","blindUp","blindDown","switchOff","dropOut","shake","slideDown","slideUp","squish","grow","shrink","pulsate","fold"]; +MochiKit.Visual.EXPORT_OK=["PAIRS"]; +MochiKit.Visual.__new__(); +MochiKit.Base._exportSymbols(this,MochiKit.Visual); +if(typeof (MochiKit)=="undefined"){ +MochiKit={}; +} +if(typeof (MochiKit.MochiKit)=="undefined"){ +MochiKit.MochiKit={}; +} +MochiKit.MochiKit.NAME="MochiKit.MochiKit"; +MochiKit.MochiKit.VERSION="1.4"; +MochiKit.MochiKit.__repr__=function(){ +return "["+this.NAME+" "+this.VERSION+"]"; +}; +MochiKit.MochiKit.toString=function(){ +return this.__repr__(); +}; +MochiKit.MochiKit.SUBMODULES=["Base","Iter","Logging","DateTime","Format","Async","DOM","Style","LoggingPane","Color","Signal","Visual"]; +if(typeof (JSAN)!="undefined"||typeof (dojo)!="undefined"){ +if(typeof (dojo)!="undefined"){ +dojo.provide("MochiKit.MochiKit"); +dojo.require("MochiKit.*"); +} +if(typeof (JSAN)!="undefined"){ +(function(lst){ +for(var i=0;i"); +} +} +})(); +} + + diff --git a/thirdpartyjs/MochiKit/New.js b/thirdpartyjs/MochiKit/New.js new file mode 100644 index 0000000..529f1e7 --- /dev/null +++ b/thirdpartyjs/MochiKit/New.js @@ -0,0 +1,283 @@ + +MochiKit.Base.update(MochiKit.DOM, { + /** @id MochiKit.DOM.makeClipping */ + makeClipping: function (element) { + element = MochiKit.DOM.getElement(element); + var oldOverflow = element.style.overflow; + if ((MochiKit.Style.getStyle(element, 'overflow') || 'visible') != 'hidden') { + element.style.overflow = 'hidden'; + } + return oldOverflow; + }, + + /** @id MochiKit.DOM.undoClipping */ + undoClipping: function (element, overflow) { + element = MochiKit.DOM.getElement(element); + if (!overflow) { + return; + } + element.style.overflow = overflow; + }, + + /** @id MochiKit.DOM.makePositioned */ + makePositioned: function (element) { + element = MochiKit.DOM.getElement(element); + var pos = MochiKit.Style.getStyle(element, 'position'); + if (pos == 'static' || !pos) { + element.style.position = 'relative'; + // Opera returns the offset relative to the positioning context, + // when an element is position relative but top and left have + // not been defined + if (/Opera/.test(navigator.userAgent)) { + element.style.top = 0; + element.style.left = 0; + } + } + }, + + /** @id MochiKit.DOM.undoPositioned */ + undoPositioned: function (element) { + element = MochiKit.DOM.getElement(element); + if (element.style.position == 'relative') { + element.style.position = element.style.top = element.style.left = element.style.bottom = element.style.right = ''; + } + }, + + /** @id MochiKit.DOM.getFirstElementByTagAndClassName */ + getFirstElementByTagAndClassName: function (tagName, className, + /* optional */parent) { + var self = MochiKit.DOM; + if (typeof(tagName) == 'undefined' || tagName === null) { + tagName = '*'; + } + if (typeof(parent) == 'undefined' || parent === null) { + parent = self._document; + } + parent = self.getElement(parent); + var children = (parent.getElementsByTagName(tagName) + || self._document.all); + if (typeof(className) == 'undefined' || className === null) { + return children[0]; + } + + for (var i = 0; i < children.length; i++) { + var child = children[i]; + var classNames = child.className.split(' '); + for (var j = 0; j < classNames.length; j++) { + if (classNames[j] == className) { + return child; + } + } + } + }, + + /** @id MochiKit.DOM.isParent */ + isParent: function (child, element) { + if (!child.parentNode || child == element) { + return false; + } + + if (child.parentNode == element) { + return true; + } + + return MochiKit.DOM.isParent(child.parentNode, element); + } +}); + +MochiKit.Position = { + // set to true if needed, warning: firefox performance problems + // NOT neeeded for page scrolling, only if draggable contained in + // scrollable elements + includeScrollOffsets: false, + + /** @id MochiKit.Position.prepare */ + prepare: function () { + var deltaX = window.pageXOffset + || document.documentElement.scrollLeft + || document.body.scrollLeft + || 0; + var deltaY = window.pageYOffset + || document.documentElement.scrollTop + || document.body.scrollTop + || 0; + this.windowOffset = new MochiKit.Style.Coordinates(deltaX, deltaY); + }, + + /** @id MochiKit.Position.cumulativeOffset */ + cumulativeOffset: function (element) { + var valueT = 0; + var valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + element = element.offsetParent; + } while (element); + return new MochiKit.Style.Coordinates(valueL, valueT); + }, + + /** @id MochiKit.Position.realOffset */ + realOffset: function (element) { + var valueT = 0; + var valueL = 0; + do { + valueT += element.scrollTop || 0; + valueL += element.scrollLeft || 0; + element = element.parentNode; + } while (element); + return new MochiKit.Style.Coordinates(valueL, valueT); + }, + + /** @id MochiKit.Position.within */ + within: function (element, x, y) { + if (this.includeScrollOffsets) { + return this.withinIncludingScrolloffsets(element, x, y); + } + this.xcomp = x; + this.ycomp = y; + this.offset = this.cumulativeOffset(element); + if (element.style.position == "fixed") { + this.offset.x += this.windowOffset.x; + this.offset.y += this.windowOffset.y; + } + + return (y >= this.offset.y && + y < this.offset.y + element.offsetHeight && + x >= this.offset.x && + x < this.offset.x + element.offsetWidth); + }, + + /** @id MochiKit.Position.withinIncludingScrolloffsets */ + withinIncludingScrolloffsets: function (element, x, y) { + var offsetcache = this.realOffset(element); + + this.xcomp = x + offsetcache.x - this.windowOffset.x; + this.ycomp = y + offsetcache.y - this.windowOffset.y; + this.offset = this.cumulativeOffset(element); + + return (this.ycomp >= this.offset.y && + this.ycomp < this.offset.y + element.offsetHeight && + this.xcomp >= this.offset.x && + this.xcomp < this.offset.x + element.offsetWidth); + }, + + // within must be called directly before + /** @id MochiKit.Position.overlap */ + overlap: function (mode, element) { + if (!mode) { + return 0; + } + if (mode == 'vertical') { + return ((this.offset.y + element.offsetHeight) - this.ycomp) / + element.offsetHeight; + } + if (mode == 'horizontal') { + return ((this.offset.x + element.offsetWidth) - this.xcomp) / + element.offsetWidth; + } + }, + + /** @id MochiKit.Position.absolutize */ + absolutize: function (element) { + element = MochiKit.DOM.getElement(element); + if (element.style.position == 'absolute') { + return; + } + MochiKit.Position.prepare(); + + var offsets = MochiKit.Position.positionedOffset(element); + var width = element.clientWidth; + var height = element.clientHeight; + + var oldStyle = { + 'position': element.style.position, + 'left': offsets.x - parseFloat(element.style.left || 0), + 'top': offsets.y - parseFloat(element.style.top || 0), + 'width': element.style.width, + 'height': element.style.height + }; + + element.style.position = 'absolute'; + element.style.top = offsets.y + 'px'; + element.style.left = offsets.x + 'px'; + element.style.width = width + 'px'; + element.style.height = height + 'px'; + + return oldStyle; + }, + + /** @id MochiKit.Position.positionedOffset */ + positionedOffset: function (element) { + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + element = element.offsetParent; + if (element) { + p = MochiKit.Style.getStyle(element, 'position'); + if (p == 'relative' || p == 'absolute') { + break; + } + } + } while (element); + return new MochiKit.Style.Coordinates(valueL, valueT); + }, + + /** @id MochiKit.Position.relativize */ + relativize: function (element, oldPos) { + element = MochiKit.DOM.getElement(element); + if (element.style.position == 'relative') { + return; + } + MochiKit.Position.prepare(); + + var top = parseFloat(element.style.top || 0) - + (oldPos['top'] || 0); + var left = parseFloat(element.style.left || 0) - + (oldPos['left'] || 0); + + element.style.position = oldPos['position']; + element.style.top = top + 'px'; + element.style.left = left + 'px'; + element.style.width = oldPos['width']; + element.style.height = oldPos['height']; + }, + + /** @id MochiKit.Position.clone */ + clone: function (source, target) { + source = MochiKit.DOM.getElement(source); + target = MochiKit.DOM.getElement(target); + target.style.position = 'absolute'; + var offsets = this.cumulativeOffset(source); + target.style.top = offsets.y + 'px'; + target.style.left = offsets.x + 'px'; + target.style.width = source.offsetWidth + 'px'; + target.style.height = source.offsetHeight + 'px'; + }, + + /** @id MochiKit.Position.page */ + page: function (forElement) { + var valueT = 0; + var valueL = 0; + + var element = forElement; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + + // Safari fix + if (element.offsetParent == document.body && MochiKit.Style.getStyle(element, 'position') == 'absolute') { + break; + } + } while (element = element.offsetParent); + + element = forElement; + do { + valueT -= element.scrollTop || 0; + valueL -= element.scrollLeft || 0; + } while (element = element.parentNode); + + return new MochiKit.Style.Coordinates(valueL, valueT); + } +}; + diff --git a/thirdpartyjs/MochiKit/Sortable.js b/thirdpartyjs/MochiKit/Sortable.js new file mode 100644 index 0000000..c24cc36 --- /dev/null +++ b/thirdpartyjs/MochiKit/Sortable.js @@ -0,0 +1,589 @@ +/*** +Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) + Mochi-ized By Thomas Herve (_firstname_@nimail.org) + +See scriptaculous.js for full license. + +***/ + +if (typeof(dojo) != 'undefined') { + dojo.provide('MochiKit.DragAndDrop'); + dojo.require('MochiKit.Base'); + dojo.require('MochiKit.DOM'); + dojo.require('MochiKit.Iter'); +} + +if (typeof(JSAN) != 'undefined') { + JSAN.use("MochiKit.Base", []); + JSAN.use("MochiKit.DOM", []); + JSAN.use("MochiKit.Iter", []); +} + +try { + if (typeof(MochiKit.Base) == 'undefined' || + typeof(MochiKit.DOM) == 'undefined' || + typeof(MochiKit.Iter) == 'undefined') { + throw ""; + } +} catch (e) { + throw "MochiKit.DragAndDrop depends on MochiKit.Base, MochiKit.DOM and MochiKit.Iter!"; +} + +if (typeof(MochiKit.Sortable) == 'undefined') { + MochiKit.Sortable = {}; +} + +MochiKit.Sortable.NAME = 'MochiKit.Sortable'; +MochiKit.Sortable.VERSION = '1.4'; + +MochiKit.Sortable.__repr__ = function () { + return '[' + this.NAME + ' ' + this.VERSION + ']'; +}; + +MochiKit.Sortable.toString = function () { + return this.__repr__(); +}; + +MochiKit.Sortable.EXPORT = [ +]; + +MochiKit.DragAndDrop.EXPORT_OK = [ + "Sortable" +]; + +MochiKit.Sortable.Sortable = { + /*** + + Manage sortables. Mainly use the create function to add a sortable. + + ***/ + sortables: {}, + + _findRootElement: function (element) { + while (element.tagName.toUpperCase() != "BODY") { + if (element.id && MochiKit.Sortable.Sortable.sortables[element.id]) { + return element; + } + element = element.parentNode; + } + }, + + /** @id MochiKit.Sortable.Sortable.options */ + options: function (element) { + element = MochiKit.Sortable.Sortable._findRootElement(MochiKit.DOM.getElement(element)); + if (!element) { + return; + } + return MochiKit.Sortable.Sortable.sortables[element.id]; + }, + + /** @id MochiKit.Sortable.Sortable.destroy */ + destroy: function (element){ + var s = MochiKit.Sortable.Sortable.options(element); + var b = MochiKit.Base; + var d = MochiKit.DragAndDrop; + + if (s) { + MochiKit.Signal.disconnect(s.startHandle); + MochiKit.Signal.disconnect(s.endHandle); + b.map(function (dr) { + d.Droppables.remove(dr); + }, s.droppables); + b.map(function (dr) { + dr.destroy(); + }, s.draggables); + + delete MochiKit.Sortable.Sortable.sortables[s.element.id]; + } + }, + + /** @id MochiKit.Sortable.Sortable.create */ + create: function (element, options, droppables) { + element = MochiKit.DOM.getElement(element); + var self = MochiKit.Sortable.Sortable; + + /** @id MochiKit.Sortable.Sortable.options */ + options = MochiKit.Base.update({ + + /** @id MochiKit.Sortable.Sortable.element */ + element: element, + + /** @id MochiKit.Sortable.Sortable.tag */ + tag: 'li', // assumes li children, override with tag: 'tagname' + + /** @id MochiKit.Sortable.Sortable.dropOnEmpty */ + dropOnEmpty: false, + + /** @id MochiKit.Sortable.Sortable.tree */ + tree: false, + + /** @id MochiKit.Sortable.Sortable.treeTag */ + treeTag: 'ul', + + /** @id MochiKit.Sortable.Sortable.overlap */ + overlap: 'vertical', // one of 'vertical', 'horizontal' + + /** @id MochiKit.Sortable.Sortable.constraint */ + constraint: 'vertical', // one of 'vertical', 'horizontal', false + // also takes array of elements (or ids); or false + + /** @id MochiKit.Sortable.Sortable.containment */ + containment: [element], + + /** @id MochiKit.Sortable.Sortable.handle */ + handle: false, // or a CSS class + + /** @id MochiKit.Sortable.Sortable.only */ + only: false, + + /** @id MochiKit.Sortable.Sortable.hoverclass */ + hoverclass: null, + + /** @id MochiKit.Sortable.Sortable.ghosting */ + ghosting: false, + + /** @id MochiKit.Sortable.Sortable.scroll */ + scroll: false, + + /** @id MochiKit.Sortable.Sortable.scrollSensitivity */ + scrollSensitivity: 20, + + /** @id MochiKit.Sortable.Sortable.scrollSpeed */ + scrollSpeed: 15, + + /** @id MochiKit.Sortable.Sortable.format */ + format: /^[^_]*_(.*)$/, + + /** @id MochiKit.Sortable.Sortable.onChange */ + onChange: MochiKit.Base.noop, + + /** @id MochiKit.Sortable.Sortable.onUpdate */ + onUpdate: MochiKit.Base.noop, + + /** @id MochiKit.Sortable.Sortable.accept */ + accept: null + }, options); + + // clear any old sortable with same element + self.destroy(element); + + // build options for the draggables + var options_for_draggable = { + revert: true, + ghosting: options.ghosting, + scroll: options.scroll, + scrollSensitivity: options.scrollSensitivity, + scrollSpeed: options.scrollSpeed, + constraint: options.constraint, + handle: options.handle + }; + + if (options.starteffect) { + options_for_draggable.starteffect = options.starteffect; + } + + if (options.reverteffect) { + options_for_draggable.reverteffect = options.reverteffect; + } else if (options.ghosting) { + options_for_draggable.reverteffect = function (innerelement) { + innerelement.style.top = 0; + innerelement.style.left = 0; + }; + } + + if (options.endeffect) { + options_for_draggable.endeffect = options.endeffect; + } + + if (options.zindex) { + options_for_draggable.zindex = options.zindex; + } + + // build options for the droppables + var options_for_droppable = { + overlap: options.overlap, + containment: options.containment, + hoverclass: options.hoverclass, + onhover: self.onHover, + tree: options.tree, + accept: options.accept, + } + + var options_for_tree = { + onhover: self.onEmptyHover, + overlap: options.overlap, + containment: options.containment, + hoverclass: options.hoverclass, + accept: options.accept + } + + // fix for gecko engine + MochiKit.DOM.removeEmptyTextNodes(element); + + options.draggables = []; + options.droppables = []; + + // drop on empty handling + if (options.dropOnEmpty || options.tree) { + new MochiKit.DragAndDrop.Droppable(element, options_for_tree); + options.droppables.push(element); + } + + MochiKit.Base.map(function (e) { + // handles are per-draggable + var handle = options.handle ? + MochiKit.DOM.getFirstElementByTagAndClassName(null, + options.handle, e) : e; + options.draggables.push( + new MochiKit.DragAndDrop.Draggable(e, + MochiKit.Base.update(options_for_draggable, + {handle: handle}))); + new MochiKit.DragAndDrop.Droppable(e, options_for_droppable); + if (options.tree) { + e.treeNode = element; + } + options.droppables.push(e); + }, (self.findElements(element, options) || [])); + + if (options.tree) { + MochiKit.Base.map(function (e) { + new MochiKit.DragAndDrop.Droppable(e, options_for_tree); + e.treeNode = element; + options.droppables.push(e); + }, (self.findTreeElements(element, options) || [])); + } + + // keep reference + self.sortables[element.id] = options; + + options.lastValue = self.serialize(element); + options.startHandle = MochiKit.Signal.connect(MochiKit.DragAndDrop.Draggables, 'start', + MochiKit.Base.partial(self.onStart, element)); + options.endHandle = MochiKit.Signal.connect(MochiKit.DragAndDrop.Draggables, 'end', + MochiKit.Base.partial(self.onEnd, element)); + }, + + /** @id MochiKit.Sortable.Sortable.onStart */ + onStart: function (element, draggable) { + var self = MochiKit.Sortable.Sortable; + var options = self.options(element); + options.lastValue = self.serialize(options.element); + }, + + /** @id MochiKit.Sortable.Sortable.onEnd */ + onEnd: function (element, draggable) { + var self = MochiKit.Sortable.Sortable; + self.unmark(); + var options = self.options(element); + if (options.lastValue != self.serialize(options.element)) { + options.onUpdate(options.element); + } + }, + + // return all suitable-for-sortable elements in a guaranteed order + + /** @id MochiKit.Sortable.Sortable.findElements */ + findElements: function (element, options) { + return MochiKit.Sortable.Sortable.findChildren( + element, options.only, options.tree ? true : false, options.tag); + }, + + /** @id MochiKit.Sortable.Sortable.findTreeElements */ + findTreeElements: function (element, options) { + return MochiKit.Sortable.Sortable.findChildren( + element, options.only, options.tree ? true : false, options.treeTag); + }, + + /** @id MochiKit.Sortable.Sortable.findChildren */ + findChildren: function (element, only, recursive, tagName) { + if (!element.hasChildNodes()) { + return null; + } + tagName = tagName.toUpperCase(); + if (only) { + only = MochiKit.Base.flattenArray([only]); + } + var elements = []; + MochiKit.Base.map(function (e) { + if (e.tagName && + e.tagName.toUpperCase() == tagName && + (!only || + MochiKit.Iter.some(only, function (c) { + return MochiKit.DOM.hasElementClass(e, c); + }))) { + elements.push(e); + } + if (recursive) { + var grandchildren = MochiKit.Sortable.Sortable.findChildren(e, only, recursive, tagName); + if (grandchildren && grandchildren.length > 0) { + elements = elements.concat(grandchildren); + } + } + }, element.childNodes); + return elements; + }, + + /** @id MochiKit.Sortable.Sortable.onHover */ + onHover: function (element, dropon, overlap) { + if (MochiKit.DOM.isParent(dropon, element)) { + return; + } + var self = MochiKit.Sortable.Sortable; + + if (overlap > .33 && overlap < .66 && self.options(dropon).tree) { + return; + } else if (overlap > 0.5) { + self.mark(dropon, 'before'); + if (dropon.previousSibling != element) { + var oldParentNode = element.parentNode; + element.style.visibility = 'hidden'; // fix gecko rendering + dropon.parentNode.insertBefore(element, dropon); + if (dropon.parentNode != oldParentNode) { + self.options(oldParentNode).onChange(element); + } + self.options(dropon.parentNode).onChange(element); + } + } else { + self.mark(dropon, 'after'); + var nextElement = dropon.nextSibling || null; + if (nextElement != element) { + var oldParentNode = element.parentNode; + element.style.visibility = 'hidden'; // fix gecko rendering + dropon.parentNode.insertBefore(element, nextElement); + if (dropon.parentNode != oldParentNode) { + self.options(oldParentNode).onChange(element); + } + self.options(dropon.parentNode).onChange(element); + } + } + }, + + _offsetSize: function (element, type) { + if (type == 'vertical' || type == 'height') { + return element.offsetHeight; + } else { + return element.offsetWidth; + } + }, + + /** @id MochiKit.Sortable.Sortable.onEmptyHover */ + onEmptyHover: function (element, dropon, overlap) { + var oldParentNode = element.parentNode; + var self = MochiKit.Sortable.Sortable; + var droponOptions = self.options(dropon); + + if (!MochiKit.DOM.isParent(dropon, element)) { + var index; + + var children = self.findElements(dropon, {tag: droponOptions.tag, + only: droponOptions.only}); + var child = null; + + if (children) { + var offset = self._offsetSize(dropon, droponOptions.overlap) * (1.0 - overlap); + + for (index = 0; index < children.length; index += 1) { + if (offset - self._offsetSize(children[index], droponOptions.overlap) >= 0) { + offset -= self._offsetSize(children[index], droponOptions.overlap); + } else if (offset - (self._offsetSize (children[index], droponOptions.overlap) / 2) >= 0) { + child = index + 1 < children.length ? children[index + 1] : null; + break; + } else { + child = children[index]; + break; + } + } + } + + dropon.insertBefore(element, child); + + self.options(oldParentNode).onChange(element); + droponOptions.onChange(element); + } + }, + + /** @id MochiKit.Sortable.Sortable.unmark */ + unmark: function () { + var m = MochiKit.Sortable.Sortable._marker; + if (m) { + MochiKit.Style.hideElement(m); + } + }, + + /** @id MochiKit.Sortable.Sortable.mark */ + mark: function (dropon, position) { + // mark on ghosting only + var d = MochiKit.DOM; + var self = MochiKit.Sortable.Sortable; + var sortable = self.options(dropon.parentNode); + if (sortable && !sortable.ghosting) { + return; + } + + if (!self._marker) { + self._marker = d.getElement('dropmarker') || + document.createElement('DIV'); + MochiKit.Style.hideElement(self._marker); + d.addElementClass(self._marker, 'dropmarker'); + self._marker.style.position = 'absolute'; + document.getElementsByTagName('body').item(0).appendChild(self._marker); + } + var offsets = MochiKit.Position.cumulativeOffset(dropon); + self._marker.style.left = offsets.x + 'px'; + self._marker.style.top = offsets.y + 'px'; + + if (position == 'after') { + if (sortable.overlap == 'horizontal') { + self._marker.style.left = (offsets.x + dropon.clientWidth) + 'px'; + } else { + self._marker.style.top = (offsets.y + dropon.clientHeight) + 'px'; + } + } + MochiKit.Style.showElement(self._marker); + }, + + _tree: function (element, options, parent) { + var self = MochiKit.Sortable.Sortable; + var children = self.findElements(element, options) || []; + + for (var i = 0; i < children.length; ++i) { + var match = children[i].id.match(options.format); + + if (!match) { + continue; + } + + var child = { + id: encodeURIComponent(match ? match[1] : null), + element: element, + parent: parent, + children: [], + position: parent.children.length, + container: self._findChildrenElement(children[i], options.treeTag.toUpperCase()) + } + + /* Get the element containing the children and recurse over it */ + if (child.container) { + self._tree(child.container, options, child) + } + + parent.children.push (child); + } + + return parent; + }, + + /* Finds the first element of the given tag type within a parent element. + Used for finding the first LI[ST] within a L[IST]I[TEM].*/ + _findChildrenElement: function (element, containerTag) { + if (element && element.hasChildNodes) { + containerTag = containerTag.toUpperCase(); + for (var i = 0; i < element.childNodes.length; ++i) { + if (element.childNodes[i].tagName.toUpperCase() == containerTag) { + return element.childNodes[i]; + } + } + } + return null; + }, + + /** @id MochiKit.Sortable.Sortable.tree */ + tree: function (element, options) { + element = MochiKit.DOM.getElement(element); + var sortableOptions = MochiKit.Sortable.Sortable.options(element); + options = MochiKit.Base.update({ + tag: sortableOptions.tag, + treeTag: sortableOptions.treeTag, + only: sortableOptions.only, + name: element.id, + format: sortableOptions.format + }, options || {}); + + var root = { + id: null, + parent: null, + children: new Array, + container: element, + position: 0 + } + + return MochiKit.Sortable.Sortable._tree(element, options, root); + }, + + /** + * Specifies the sequence for the Sortable. + * @param {Node} element Element to use as the Sortable. + * @param {Object} newSequence New sequence to use. + * @param {Object} options Options to use fro the Sortable. + */ + setSequence: function (element, newSequence, options) { + var self = MochiKit.Sortable.Sortable; + var b = MochiKit.Base; + element = MochiKit.DOM.getElement(element); + options = b.update(self.options(element), options || {}); + + var nodeMap = {}; + b.map(function (n) { + var m = n.id.match(options.format); + if (m) { + nodeMap[m[1]] = [n, n.parentNode]; + } + n.parentNode.removeChild(n); + }, self.findElements(element, options)); + + b.map(function (ident) { + var n = nodeMap[ident]; + if (n) { + n[1].appendChild(n[0]); + delete nodeMap[ident]; + } + }, newSequence); + }, + + /* Construct a [i] index for a particular node */ + _constructIndex: function (node) { + var index = ''; + do { + if (node.id) { + index = '[' + node.position + ']' + index; + } + } while ((node = node.parent) != null); + return index; + }, + + /** @id MochiKit.Sortable.Sortable.sequence */ + sequence: function (element, options) { + element = MochiKit.DOM.getElement(element); + var self = MochiKit.Sortable.Sortable; + var options = MochiKit.Base.update(self.options(element), options || {}); + + return MochiKit.Base.map(function (item) { + return item.id.match(options.format) ? item.id.match(options.format)[1] : ''; + }, MochiKit.DOM.getElement(self.findElements(element, options) || [])); + }, + + /** + * Serializes the content of a Sortable. Useful to send this content through a XMLHTTPRequest. + * These options override the Sortable options for the serialization only. + * @param {Node} element Element to serialize. + * @param {Object} options Serialization options. + */ + serialize: function (element, options) { + element = MochiKit.DOM.getElement(element); + var self = MochiKit.Sortable.Sortable; + options = MochiKit.Base.update(self.options(element), options || {}); + var name = encodeURIComponent(options.name || element.id); + + if (options.tree) { + return MochiKit.Base.flattenArray(MochiKit.Base.map(function (item) { + return [name + self._constructIndex(item) + "[id]=" + + encodeURIComponent(item.id)].concat(item.children.map(arguments.callee)); + }, self.tree(element, options).children)).join('&'); + } else { + return MochiKit.Base.map(function (item) { + return name + "[]=" + encodeURIComponent(item); + }, self.sequence(element, options)).join('&'); + } + } +}; + diff --git a/thirdpartyjs/MochiKit/__package__.js b/thirdpartyjs/MochiKit/__package__.js index 18eb81d..2f5be0d 100644 --- a/thirdpartyjs/MochiKit/__package__.js +++ b/thirdpartyjs/MochiKit/__package__.js @@ -1,17 +1,2 @@ -dojo.hostenv.conditionalLoadModule({ - "common": [ - "MochiKit.Base", - "MochiKit.Iter", - "MochiKit.Logging", - "MochiKit.DateTime", - "MochiKit.Format", - "MochiKit.Async", - "MochiKit.Color" - ], - "browser": [ - "MochiKit.DOM", - "MochiKit.LoggingPane", - "MochiKit.Visual" - ] -}); +dojo.hostenv.conditionalLoadModule({"common": ["MochiKit.MochiKit"]}); dojo.hostenv.moduleLoaded("MochiKit.*");